|
Помогите с КД. Удаляется весь РС в приемнике. | ☑ | ||
---|---|---|---|---|
0
Snake999
12.03.20
✎
09:24
|
Ситуация: Есть план обмена (не типовой) между ЗУП 3.1 (источник) и очень сильно переписанной УАТ (приемник). В приемник отправляется 2 справочника «ФизическиеЛица» и «Сотрудники», и 2 РС «ДокументыФизическихЛиц» и «КадроваяИсторияСотрудников». Запись в приёмке формируются через собственный алгоритм прикрученный к правилу обмену. Т.к. из 1 записи источника формируется 2 записи в приемнике. В случаи с РС ДокументыФизическихЛиц формируются РегистрСведенийЗапись.ДокументыФизическихЛиц и РегистрСведенийЗапись.ДокументыВодителей. А в случаи с КадроваяИсторияСотрудников формируются РегистрСведенийЗапись.уатСведенияОСотрудниках и РегистрСведенийЗапись.ТекущиеКадровыеДанныеСотрудников. Для это использую стандартную функцию ВыгрузитьПоПравилу() для формирования всех записей.
Суть проблемы: Если в источнике помечется на удаление любой документ из РС «КадроваяИсторияСотрудников» и больше никаких изменений в нем нет, то в файле формируется запись: <НаборЗаписейРегистра Нпп="1" Тип="РегистрСведенийНаборЗаписей.уатСведенияОСотрудниках" ИмяПравила="уатСведенияОСотрудниках" ПустойНабор="true"> <Отбор/> <СтрокиНабораЗаписей/> </НаборЗаписейРегистра> И в приемнике удаляются все запись по РС «уатСведенияОСотрудниках». Причем если удалить запись в источнике в РС «ДокументыФизическихЛиц», то запись формируется корректная запись, с указанием в отборе удаляемой записи. ПКО и ПКС для обоих регистров идентичны. Алгоритм формирования данных для функции ВыгрузитьПоПравилу() один и тот же. Обработка «Универсальный обмен данными в формате XML» при тестировании формирует корректный файл. И в алгоритм формирования записей даже не заходит. Подскажите куда копать. |
|||
1
MyNick
12.03.20
✎
09:28
|
ПустойНабор="true" ?
|
|||
2
Snake999
12.03.20
✎
09:30
|
(1) Да в обоих случаях.
|
|||
3
Snake999
12.03.20
✎
09:30
|
<НаборЗаписейРегистра Нпп="1" Тип="РегистрСведенийНаборЗаписей.уатСведенияОСотрудниках" ИмяПравила="уатСведенияОСотрудниках" ПустойНабор="true">
<НаборЗаписейРегистра Нпп="1" Тип="РегистрСведенийНаборЗаписей.ДокументыФизическихЛиц" ИмяПравила="ДокументыФизическихЛиц" ПустойНабор="true"> |
|||
4
MyNick
12.03.20
✎
09:35
|
так наверное в этом дело
|
|||
5
Snake999
12.03.20
✎
09:38
|
Думаю нет.
Удаляю запись РС ДокументыФизическихЛиц. Получаю в файле: <НаборЗаписейРегистра Нпп="1" Тип="РегистрСведенийНаборЗаписей.ДокументыФизическихЛиц" ИмяПравила="ДокументыФизическихЛиц" ПустойНабор="true"> <Отбор> <Свойство Имя="Период" Тип="Дата"> <Значение>2018-03-01T00:00:00</Значение> </Свойство> <Свойство Имя="Физлицо" Тип="СправочникСсылка.ФизическиеЛица"><Ссылка> <Свойство Имя="ИНН" Тип="Строка"> <Значение>12377777777 </Значение> </Свойство> <Свойство Имя="ЭтоГруппа" Тип="Булево"> <Значение>false</Значение> </Свойство> </Ссылка> </Свойство> <Свойство Имя="ВидДокумента" Тип="СправочникСсылка.ВидыДокументовФизическихЛиц"><Ссылка> <Свойство Имя="{ИмяПредопределенногоЭлемента}"> <Значение>ВодительскоеУдостоверение</Значение> </Свойство> <Свойство Имя="Наименование" Тип="Строка"> <Значение>Водительское удостоверение</Значение> </Свойство> </Ссылка> </Свойство> </Отбор> <СтрокиНабораЗаписей/> </НаборЗаписейРегистра> Удаляю запись РС КадроваяИсторияСотрудников. Получаю в файле: <НаборЗаписейРегистра Нпп="1" Тип="РегистрСведенийНаборЗаписей.уатСведенияОСотрудниках" ИмяПравила="уатСведенияОСотрудниках" ПустойНабор="true"> <Отбор/> <СтрокиНабораЗаписей/> </НаборЗаписейРе |
|||
6
Пробел
12.03.20
✎
10:10
|
У набора записей регистра есть особенность - при записи он по умолчанию заменяет существующие записи. то есть Набор смотрит на свои отборы, потом удаляет соответствующие отборам записи базы данных, потом записывает свои записи. Возможно регистр-приемник очищается из-за пустых отборов.
|
|||
7
Snake999
12.03.20
✎
10:46
|
(6) Именно все так и происходит. До меня никак не доходит почему идентичные правила формируют разный файл с отбором. В случае с РС ДокументыФизическихЛиц в отбор отправляется именно та запись которую удалили и в приемнике она удаляется. А в случаи с РС КадроваяИсторияСотрудников в отбор отправляется пустой отбор. И соответственно удаляется все записи.
|
|||
8
Пробел
12.03.20
✎
11:14
|
ДокументыФизЛиц - независимый, КадроваяИсторияСотрудников - подчинена регистратору. Соответственно у КИС отбор возможен только по регистратору. Если уатСведенияОСотрудниках - независимый, то отборы, скорей всего, надо формировать вручную на стороне приемника.
|
|||
9
Пробел
12.03.20
✎
11:23
|
На стороне источника, извиняюсь.
Я точно не знаю, как подчиненный регистратору РС корректно перегонять в независимый РС. Скорей всего через процедуру "ВыгрузитьРегистр" из обработки "КонвертацияОбъектовИнформационныхБаз". Там первым параметром идет "НаборЗаписейДляВыгрузки" который может быть либо реальным набором записей, либо структурой с ключами "Отбор" и "Строки". Если ТипЗнч(НаборЗаписейДляВыгрузки) = Тип("Структура") Тогда ОтборНабораЗаписей = НаборЗаписейДляВыгрузки.Отбор; СтрокиНабораЗаписей = НаборЗаписейДляВыгрузки.Строки; Иначе // НаборЗаписей ОтборНабораЗаписей = НаборЗаписейДляВыгрузки.Отбор; СтрокиНабораЗаписей = НаборЗаписейДляВыгрузки; КонецЕсли; |
|||
10
Snake999
12.03.20
✎
11:27
|
(8,9) Спасибо. В ПКО Перед загрузкой? ВыгрузитьРегистр() к сожалению использовать не получилось. Процедура не найдена при запуске синхронизации. Подозреваю что из БСП на котором ЗУП 3.1.12 ее убрали.
|
|||
11
Пробел
12.03.20
✎
11:48
|
Опять же, точно не знаю, надо экспериментировать. Я бы попробовал в ПКО перед выгрузкой, или в ПКО после выгрузки. Или вообще через алгоритм. "Перед загрузкой" уже в приемнике выполняется.
"ВыгрузитьРегистр() к сожалению использовать не получилось." - не может быть. Обработка "КонвертацияОбъектовИнформационныхБаз" -> модуль объекта -> Процедура ВыгрузитьРегистр. А, если Вы тестируете через обработку «Универсальный обмен данными в формате XML», то да, она может и не видит эту процедуру. Лучше тестировать тем способом обмена, которым предполагается работать. То есть если вы будете обмениваться через файл или СОМ, то сразу так и тестируйте. |
|||
12
Snake999
12.03.20
✎
11:57
|
(11) Еще раз спасибо.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |