Имя: Пароль:
1C
1С v8
Помогите с КД. Удаляется весь РС в приемнике.
,
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) Еще раз спасибо.
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн