Имя: Пароль:
1C
1С v8
Выгрузка регистра накопления, конвертация данных
0 Mary01
 
18.05.22
07:49
Привет всем!
Подскажите пожалуйста как исправить ошибку.
Задача - выгрузить данные регистра накопления НачисленияУдержанияПоСотрудникам из одной базы ЗУП в другую, документ регистратор переносить не нужно, но регистр не записывает данные без регистратора, поэтому в качестве регистратора создаю документ ПереносДанных.
В ПВД регистра НачисленияУдержанияПоСотрудникам в процедуре ПередОбработкой я написала:
Запрос = Новый Запрос(
    "ВЫБРАТЬ
    |    НачисленияУдержанияПоСотрудникам.Период КАК Период,
    |    НачисленияУдержанияПоСотрудникам.Регистратор КАК Регистратор,
    |    НачисленияУдержанияПоСотрудникам.НомерСтроки КАК НомерСтроки,
    |    НачисленияУдержанияПоСотрудникам.Активность КАК Активность,
    |    НачисленияУдержанияПоСотрудникам.Организация КАК Организация,
    |    НачисленияУдержанияПоСотрудникам.ФизическоеЛицо КАК ФизическоеЛицо,
        .... тут еще куча реквизитов
    |    НачисленияУдержанияПоСотрудникам.МестоПолученияДохода КАК МестоПолученияДохода,
    |    НачисленияУдержанияПоСотрудникам.ВидДоходаИсполнительногоПроизводства КАК ВидДоходаИсполнительногоПроизводства
    |ИЗ
    |    РегистрНакопления.НачисленияУдержанияПоСотрудникам КАК НачисленияУдержанияПоСотрудникам
    |ГДЕ
    |    НачисленияУдержанияПоСотрудникам.Период МЕЖДУ &ДатаНачала И &ДатаОкончания
    |
    |итоги ПО
    |    НачисленияУдержанияПоСотрудникам.Регистратор");
    
    Запрос.УстановитьПараметр("ДатаНачала", НачалоДня(ДатаНачала));
    Запрос.УстановитьПараметр("ДатаОкончания", КОнецДня(ДатаОкончания));

    
    Таб = Новый ТаблицаЗначений();
    Таб.Колонки.Добавить("Активность");
    Таб.Колонки.Добавить("ВидДоходаИсполнительногоПроизводства");
    Таб.Колонки.Добавить("ГруппаНачисленияУдержанияВыплаты");
    Таб.Колонки.Добавить("ДанныеМежрасчетногоПериода");
        ... тут еще куча колонок
    Таб.Колонки.Добавить("ФизическоеЛицо");
    
    выборкаРег = запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
    
    пока выборкаРег.Следующий() цикл
        
        выборка = выборкаРег.Выбрать();
        
        пока выборка.Следующий() цикл  
            
            Стр = Таб.Добавить();
    
            ЗаполнитьЗначенияСвойств(Стр,выборка);
  
        КонецЦикла;    
        
        ТаблицаИменРегистров = Новый ТаблицаЗначений();
        ТаблицаИменРегистров.Колонки.Добавить("Имя");
        ТаблицаИменРегистров.Колонки.Добавить("Представление");
        
        СтрокаТаблицы = ТаблицаИменРегистров.Добавить();
        СтрокаТаблицы.Имя = "НачисленияУдержанияПоСотрудникам";
        СтрокаТаблицы.Представление = "Начисления удержания по сотрудникам";
        
        Регистратор = выборкаРег.Регистратор;
        
        ИсходящиеДанные = Новый Структура;
        ИсходящиеДанные.Вставить("Номер", Регистратор.Номер);
        ИсходящиеДанные.Вставить("Дата", Регистратор.Дата);  
        ИсходящиеДанные.Вставить("ПериодРегистрации", Регистратор.Дата);     
        ИсходящиеДанные.Вставить("Организация", Регистратор.Организация);
        ИсходящиеДанные.Вставить("ТаблицаРегистровНакопления", ТаблицаИменРегистров);
        ИсходящиеДанные.Вставить("НачисленияУдержанияПоСотрудникам", Таб);
    
        ВыгрузитьПоПравилу(, , ИсходящиеДанные, , "ПереносДанных");
        Таб.Очистить();
        
    КонецЦикла;


При выгрузке ошибка:


Ошибка получения значения свойства объекта (по имени свойства источника)
    ПКО                    =  ПереносДанных  (Документ: Перенос данных)
    ПКС                    =  1  (Дата --> Дата)
    Объект                 =  (Не определено)
    СвойствоПриемника      =  Дата  (Дата)
    ОписаниеОшибки         =  Получение элемента по индексу для значения не определено
    ПозицияМодуля          =  {Обработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(9948)}:Значение = ОбъектДляПолученияДанных[ИмяСвойства];
{Обработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(10495)}:ПолучитьЗначениеСвойства(Значение, ОбъектКоллекции, ПКО, ПКС, ВходящиеДанные, Источник);
{Обработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(1924)}:ВыгрузитьСвойства(Источник, Приемник, ВходящиеДанные, ИсходящиеДанные, ПКО, ПКО.СвойстваПоиска,
{(114)}:ВыгрузитьПоПравилу(, , ИсходящиеДанные, , "ПереносДанных");
{Обработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(11256)}:Выполнить(Правило.ПередОбработкой);
{Обработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(11440)}:ВыгрузитьДанныеПоПравилу(ПравилоВыгрузки);
{Обработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(11435)}:ОбработатьПравилаВыгрузки(ПравилоВыгрузки.Строки, СоответствиеУзловПланаОбменаИСтрокВыгрузки);
{Обработка.УниверсальныйОбменДаннымиXML.МодульОбъекта(13430)}:ОбработатьПравилаВыгрузки(КоллекцияПравилаВыгрузки().Строки, СоответствиеУзловИПравилВыгрузки);
{Обработка.УниверсальныйОбменДаннымиXML.Форма.УправляемаяФорма.Форма(1616)}:ОбъектДляСервера.ВыполнитьВыгрузку();
1 Mary01
 
18.05.22
08:02
Дата --> Дата
И такая ситуация не только с реквизитом Дата, но и Номер, Организация и остальные реквизиты шапки
2 Ёпрст
 
18.05.22
09:34
(0)
в самом пко хоть стоят галки - получать из входящих данных ?
брать последний документ в качестве регистратора..моветон
3 Ёпрст
 
18.05.22
09:35
создавать кучку колонок - тоже, когда оно само, через запрос.выполнить().выгрузить() умеет, только выкинуть итоги оттуда и регистратор
4 hhhh
 
18.05.22
11:08
(3) регистратор же тоже должен быть в наборе.
5 Ёпрст
 
18.05.22
12:49
(4) И ? она всё равно берёт другой вид документ-а, в самом этом наборе он не нужен, проще задать его фиксированным параметром.
6 Mary01
 
18.05.22
12:49
Исправила: в синхронизации свойств нужно было поставить галочки "Получить из входящих данных".
7 Mary01
 
18.05.22
12:49
(2) Да, спасибо, так сделала и заработало.
А какой тогда документ использовать?
8 Mary01
 
18.05.22
12:51
(4) добавлю, а где его обрабатывать после?
9 Mary01
 
18.05.22
12:51
(5) Где это задается и как потом использовать?
10 Mary01
 
18.05.22
12:52
(3) тут согласна.
11 Ёпрст
 
18.05.22
12:58
(9) если это одноразовый обмен, то забудь
12 Ёпрст
 
18.05.22
13:00
если нет, то ты каждый раз своим кодом в (0) будешь создавать новый док "переносданных" из последнего регистратора..ну и задвоишь/затроишь движуху
13 Mary01
 
18.05.22
13:00
Как присвоить документу УИД такой же как в базе-источнике? Допустим, в источнике был документ НачислениеЗарплаты, а в приемнике создан ПереносДанных, как второму документу присвоить УИД первого? В исходящие данные добавила:
ИсходящиеДанные.Вставить("УИД", Регистратор.УникальныйИдентификатор());
14 Mary01
 
18.05.22
13:00
(11) не одноразовый
15 Ёпрст
 
18.05.22
13:02
(14) и период, поди, как нарастающий со времен цара гороха ?
16 Mary01
 
18.05.22
13:03
(12) поэтому хочу присвоить переносу данных УИД из источника, но непонятно как
17 Mary01
 
18.05.22
13:04
(15) почему? период любой задать можно, там параметры - ДатаНачала, ДатаОкончания, отбор в пределах этого периода
18 Aleksey
 
18.05.22
13:10
19 Ёпрст
 
18.05.22
13:17
(18) ну, ей не совсем то надо, хотя, можно и это решение использовать.
Ей надо всегда писать в один док, насколько я понял из (0)
Проще гуид дока хранить параметром и привет, ну или при загрузке искать тот единственный док и его использовать как регистратор.
20 Ёпрст
 
18.05.22
13:19
Хотя, непонятна цель такой "свёртки", писало бы сразу один в один в базу, ну или хотя бы, в запросе в (0) сворачивала показатели по всем измерениям.
21 Mary01
 
18.05.22
13:35
(19) нет, док не один, сколько документов в источнике столько и в приемнике
22 Mary01
 
18.05.22
13:39
(20) Цель - выгружать данные по начислениям из нескольких баз в одну. В документах-регистраторах много данных, которые в новой базе не нужны, от этих документов нужна только дата, номер, организация (чтоб понимать из какого источника документ пришел) и его движения по начислениям
23 hhhh
 
18.05.22
14:04
(21) тогда передавай регистратор тоже по обмену. перенос документа твой регистратор в документ Перенос данных. И (4) тогда пойдет.
24 Mary01
 
18.05.22
14:15
(23) что имеется в виду?

ИсходящиеДанные.Вставить("Объект", Регистратор);
    
или
        ВыгрузитьПоПравилу(Регистратор, , ИсходящиеДанные, , "ПереносДанных");

или
http://unnoesso.blogspot.com/2021/10/21-guid.html ?
25 hhhh
 
18.05.22
14:18
(24) ВыгрузитьПоПравилу(Регистратор, , ИсходящиеДанные, , "ПереносДанных");

и в правиле заполнить источник
26 Mary01
 
18.05.22
14:55
(25) Спасибо! Заработало как надо, не задваивает при повторной загрузке!
2 + 2 = 3.9999999999999999999999999999999...