Имя: Пароль:
1C
 
Конвертация данных и перенос движений документов
0 Terras
 
09.10.08
17:44
Товарищи, подскажите кто знает...При выгрузке из источника (в обработчике ПКО конкретного документа) я  определенным образом  обрабатываю движения (документ двигается по регистрам накопления и расчета)... дальше выгружаю обработанные движения через ВыгрузитьПоПравилу(), правила формируются, из источника выгружается все правильно, НО при загрузке в приемник возникает ошибка: "Получение элемента по индексу для значения не определено". Ругается на перенос свойств регистра накопления. Если кто переносил движения конвертацией с предварительными их преобразованиями, поделитесь пожалуйста опытом, может я что не так делаю... заранее благодарна всем откликнувшемся:)...
1 ТелепатБот
 
гуру
09.10.08
17:44
2 Defender aka LINN
 
09.10.08
17:50
(0) "дальше выгружаю обработанные движения через ВыгрузитьПоПравилу()" - нафига?
3 Terras
 
09.10.08
17:56
(2) чтобы в файл выгрузки попали преобразованные движения а не те которые источнике.
4 Defender aka LINN
 
09.10.08
17:59
(3) Удалять гланды можно и через задний проход, но есть и более традиционные пути.
5 Terras
 
09.10.08
18:01
аммм... я буду очень тебе признательна если подскажешь как сделать лучше...:)
6 bahmet
 
09.10.08
18:07
(5)Сделай загрузку конф с движениями...добавишь новые группы свойств с названием регистров и внутри них нужные свойства...вот и усё
7 Terras
 
09.10.08
18:14
(6)Конфы загружены уже с движениями... Группы свойств с названиями регистров и нужные свойства тоже уже есть ...НО таким макаром переносятся все движения как они есть в базе источнике, а мне нужно их перенести в приемник измененными... если конкретней, то свернуть по определенному измерению кот есть в источнике, но которого нет в приемнике... из за этого вся и заморочка...
8 Eriksson
 
09.10.08
18:31
А конфа1 и конфа2 какие собственно?
одинаковые?
9 MRAK
 
09.10.08
22:01
а если во 2-й коные кто-нить док перепроведет? будет здравствуй ж. Новый год?
10 Barmaglot
 
09.10.08
22:08
(0) Что за конфигурации?
11 Terras
 
09.10.08
22:13
(8) обе конфы - УПП, одна правленная, другая типовая...
12 Terras
 
09.10.08
22:15
(9) перепроводить никто не будет... т.к. этот обмен рассчитан на случай когда релиз меняется и чтобы каждый раз не обновлять правленную, делается перенос в типовую...
13 Barmaglot
 
09.10.08
22:44
(12) Ну и сворачивай в обработчике "Поле загрузки".
А если в исходной перепроведут?
14 Terras
 
09.10.08
22:53
(13) после загрузки тоже пробовала... движения не видит... т.е. пишу допустим:
Для каждого Движение из Объект.Движения цикл
Движение.Прочитать();
Сообщить(Движение.Количество());
КонецЦикла;

Говорит что движений нет... хотя по факту есть...

>А если в исходной перепроведут?
Эта операция переноса рассчитана только на тот случай когда отчетность регламентированная сильно поменялась и типовой в новом релизе она есть а в старом в правленной соответственно старая отчетность, а сдать отчеты надо...
15 Barmaglot
 
09.10.08
23:03
(14) В приемнике без проведения движений может не быть.
16 Terras
 
09.10.08
23:22
(15) вообще если ничего не писать в обработчиках то движения переносятся...НО все те которые в источнике, а нужно преобразованные...
17 Eriksson
 
10.10.08
10:27
Я переносил движения из УТ в ее же саму путем создания в первой базе-источнике документов "Корректировка записей регистра" (обработка движений производилась как раз в этот момент). Затем - перенос документов. Справочники загружались ранее отдельно.
18 Eriksson
 
10.10.08
10:28
Для взаиморасчетов вооюще отдельный документ "Ввод остатков по взаиморасчетам".
19 Barmaglot
 
10.10.08
10:32
(16) А что во что надо преобразовывать?
20 Terras
 
10.10.08
14:36
(19) К примеру есть документ "НачислениеЗарплатыОаботникамОрганизиций" одно из движений документа по регистру расчета "ОсновныеНачисленияРаботникамОрганизаций" в источнике в этом регистре есть доп измерение, в приемнике сообтветственно нет, нужно свернуть движения этого дока по этому измерению.
21 Terras
 
10.10.08
14:40
Все... доперло.. долгим путем проб и ошибок таки получилось свернуть.
В ПКО при выгрузке пишу:

Объект = Источник.ПолучитьОбъект();

Для каждого Движение из Объект.Движения цикл
   ИмяРегистра = Параметры.ИменаРегистровДляЗаменыДвижений.НайтиПоЗначению(Движение.Метаданные().Имя);
   Если ИмяРегистра<>неопределено тогда
   Движение.Прочитать();
   //Определим тип движения регистра
   ИмяРегистра = "";
   Если Найти(Строка(ТипЗнч(Движение)),"Регистр накопления")>0 Тогда
       ИмяРегистра = "РегистрНакопления";
   ИначеЕсли  Найти(Строка(ТипЗнч(Движение)),"Регистр расчета")>0 Тогда
       ИмяРегистра = "РегистрРасчета";
   ИначеЕсли  Найти(Строка(ТипЗнч(Движение)),"Регистр сведений")>0 Тогда
       ИмяРегистра = "РегистрСведений";
   ИначеЕсли  Найти(Строка(ТипЗнч(Движение)),"Регистр бухгалтерии")>0 Тогда
       ИмяРегистра = "РегистрБухгалтерии";
   КонецЕсли;
   
   //Переменная определяет признак подчиннености регистратору
   ЕстьРегистратор = Ложь;
       //Формируем строки группировки и ссуммирования
       ТаблицаДвижения = Движение.Выгрузить();
       СтрокаГруппировки = "";
       СтрокаСуммирования = "";
       
       Для каждого колонка из ТаблицаДвижения.Колонки цикл
           ИскомаяКолонка = неопределено;
           ЕстьВИзмерениях = Движение.Метаданные().Измерения.Найти(Колонка.Имя);
           Если ЕстьВИзмерениях <> неопределено тогда
               ИскомаяКолонка = ЕстьВИзмерениях;
           КонецЕсли;
           
           ЕстьВРесурсах = Движение.Метаданные().Ресурсы.Найти(Колонка.Имя);
           Если ЕстьВРесурсах <> неопределено тогда
               ИскомаяКолонка = ЕстьВРесурсах;
           КонецЕсли;
           
           ЕстьВРеквизитах = Движение.Метаданные().Реквизиты.Найти(Колонка.Имя);
           Если ЕстьВРеквизитах <> неопределено тогда
               ИскомаяКолонка = ЕстьВРеквизитах;
           КонецЕсли;
           
           Если ИскомаяКолонка = неопределено тогда
               Если Колонка.Имя<>"НомерСтроки" тогда
                   СтрокаГруппировки = СтрокаГруппировки+"
                                                         |"+Движение.Метаданные().Имя+"."+Колонка.Имя+",";
               КонецЕсли;

               Если Колонка.Имя<>"Регистратор" тогда
                   ЕстьРегистратор = Истина;
               КонецЕсли;

               
           КонецЕсли;
       КонецЦикла;    
       
       Для каждого Измерение из Движение.Метаданные().Измерения цикл
           Если Измерение.Имя = "ТочкаРД" тогда
               Продолжить;
           КонецЕсли;    
           СтрокаГруппировки = СтрокаГруппировки+"
                                                 |"+Движение.Метаданные().Имя+"."+Измерение.Имя+",";
       КонецЦикла;
       
       Для каждого Реквизит из  Движение.Метаданные().Реквизиты цикл
           СтрокаГруппировки = СтрокаГруппировки+"
                                                 |"+Движение.Метаданные().Имя+"."+Реквизит.Имя+",";
       КонецЦикла;
       
       СтрокаГруппировки = Сред(СтрокаГруппировки,1,СтрДлина(СтрокаГруппировки)-1);
       
       Для каждого Ресурс из Движение.Метаданные().Ресурсы цикл
           СтрокаСуммирования = СтрокаСуммирования+"
                                                   |СУММА("+Движение.Метаданные().Имя+"."+Ресурс.Имя+") КАК "+Ресурс.Имя+",";
       КонецЦикла;
       
       СтрокаСуммирования = Сред(СтрокаСуммирования,1,СтрДлина(СтрокаСуммирования)-1);
   
   
   //Сформируем текст запроса
       Текст = "ВЫБРАТЬ
               |"+СтрокаСуммирования+",
               |"+СтрокаГруппировки+"
               |ИЗ "+ИмяРегистра+"."+Движение.Метаданные().Имя+" как "+Движение.Метаданные().Имя+"";
   Если ЕстьРегистратор тогда              
       Текст = Текст + "
               |ГДЕ "+Движение.Метаданные().Имя+".Регистратор = &Объект";
   КонецЕсли;
   Если СтрокаГруппировки<>"" Тогда
       Текст = Текст + "
               |СГРУППИРОВАТЬ ПО
               |"+СтрокаГруппировки;
   КонецЕсли;                    
           
   Запрос = новый запрос;
   Запрос.Текст = Текст;
   Запрос.УстановитьПараметр("Объект",Объект.Ссылка);              
   ТЗ = Запрос.Выполнить().Выгрузить();        
   
   Если ТЗ.Количество()>0 тогда
   Движение.Загрузить(ТЗ);    
   
   Движение.Записать();

   КонецЕсли;
   КонецЕсли;
КонецЦикла;