Имя: Пароль:
1C
1С v8
Правила обмена, изменился порядок загрузки
0 Pro1001C
 
06.06.19
11:45
Добрый день
КД знаю плохо, подскажите по следующей ситуации:

Есть УТ и БП, типовой обмен. УТ выгружает в БП определенный документ (назовем ДОК1) и регистр сведений ( назовем РЕГ1), в измерении которого есть этот документ.
При загрузке в БП на РЕГ1 добавлена подписка при записи, по которой берется ДОК1 и заполняется другой регистр сведений РЕГ2. Там еще куча данных в РЕГ1 которые пихаются в РЕГ2, но пока не суть.

Долгое время все работало как надо. При загрузке в БП срабатывала подписка на РЕГ1 и заполнялся регистр РЕГ2. Но недавно что-то пошло не так. При загрузке в БП, когда срабатывает подписка на РЕГ1 почему-то документ ДОК1 перестал передаваться, стал <объект не найдет>. И поскольку для заполнения РЕГ2 использовались реквизиты ДОК1, то регистр стал заполнятся криво.
Если сделать повторно загрузку в БП, то все встает нормально, ДОК1 уже есть в БП и все заполняется правильно.

Для меня, как плохо знающего КД, это выглядит так:
- раньше работало все хорошо, как будто из-за того, что сперва в БП загружался ДОК1, а уже потом регистр сведений РЕГ1. Поэтому при срабатывании подписки на РЕГ1 другой регистр РЕГ2 заполнятся корректно
- теперь по какой-то причине, как будто в БП первым стал загружаться регистр РЕГ1, а только потом ДОК1. И при срабатывании подписки на РЕГ1, документа ДОК1 еще нет в базе <объект не найден> и соответственно РЕГ2 заполняется криво.

Сравнил правила конвертации и правила регистрации, ничего не менялось, абсолютно идентичны. Единственное что подходит по времени, это снятие замочка с УТ и добавление нового регистра сведений.

Подскажите, куда капать и как это исправить?
1 Rema Dan
 
06.06.19
12:23
(0) Можно начать с того, чтобы описать версии конфигураций, описать вариант конвертации (КД2? КД3?) и приоткрыть завесу тайны над тем что кроется под терминами "ДОК1", "РЕГ1" и "РЕГ2".
2 Pro1001C
 
06.06.19
12:48
КД2, нет сейчас под рукой версий конфигураций
3 Pro1001C
 
06.06.19
13:28
Когда сравнивал файлы выгрузки xml, то в них видно, что в старых файлах сперва идет ДОК1, потом РЕГ1. А в новых файлах, сперва идет РЕГ1, а потом ДОК1.
Причем сравнил файлы правил конвертации и регистрации, они идентичные.
Где еще может задаваться порядок выгрузки объектов?
4 Rema Dan
 
06.06.19
13:52
(3) Порядок попадания объектов в файл зависит от порядка выборки данных из планнов обмена. А порядок выборки из планов обмена нигде не регламентируется. Следовательно все типовые правила и конфигурации должны быть написаны так, чтобы работать в независимости от порядка прихода данных. Тот факт что это вызвало проблему говорит о том, что тут наверняка что-то не типовое. От сюда и вопрос про "ДОК1", "РЕГ1" и "РЕГ2". Скорей всего это нетиповые объекты, которые написаны без учёта особенностей типового обмена.
5 Pro1001C
 
06.06.19
14:07
Сейчас, к сожалению, нет возможности это проверить. Но конфигурация была типовая, как я понял в РЕГ1 есть измерение любого типа и туда засунули ДОК1. Все это пошло по обмену. Все работало, пока не сняли замочек и не добавили новый регистр. Новый регистр никак не связан с темой вопроса, не участвует в обмене, но похоже как то сбил
"Порядок попадания объектов в файл зависит от порядка выборки данных из планнов обмена. А порядок выборки из планов обмена нигде не регламентируется"

Тогда вопрос - возможно как-то задать порядок выгрузки?
Казалось бы простая штука, документы должны выгружаться раньше регистров, но почему-то нет
6 Rema Dan
 
06.06.19
14:17
(5) Планы обмена ничего не знают про "документы раньше регистров". В РИБе могут сначала приехать движения документов, а потом уже приехать сами документы и там это вполне рабочая ситуация. Единственное, что может влиять на порядок выгрузки при обмене по планам обмена - это правила обмена. Можно дописать в ПКО для РЕГ1 принудительную выгрузку ДОК1 перед выгрузкой самого РЕГ1.
Это кстати наглядный пример почему подписка на событие записи регистра сведений пишущая в другой регистр - это плохая идея.
7 Pro1001C
 
06.06.19
14:49
Спасибо, теперь стало понятно.

"Можно дописать в ПКО для РЕГ1 принудительную выгрузку ДОК1 перед выгрузкой самого РЕГ1"

Можно ткнуть в пример подобной конструкции, может в типовой где встречали. По аналогии сделаю, а вот с нуля, не зная КД...
8 Rema Dan
 
06.06.19
14:55
(7) Не помню похожей проблемы в типовых. В ПКО для РЕГ1 в событии Перед выгрузкой нужно проверить необходимость выгрузки и выгрузить ДОК1 использую процедуру ВыгрузитьПоПравилу(СсылкаНаДОК1,,,, "ПКОДляДОК1").
9 Pro1001C
 
06.06.19
15:01
спасибо, буду пробовать
10 Вафель
 
06.06.19
15:02
в правилах можно принудительно выгружать по ссылке
11 Вафель
 
06.06.19
15:02
ТолькоПолучитьУзелСсылки = Ложь;
12 Pro1001C
 
06.06.19
15:06
(10) у меня ссылка выгружается, но она выгружается после нужного регистра. И получается, что сперва загружается регистр РЕГ1, а только потом ссылка ДОК1. И во время загрузки РЕГ1 ссылки на ДОК1 еще нет
13 Pro1001C
 
06.06.19
15:15
(8) все получилось, спасибо!
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший