|
Правила обмена, изменился порядок загрузки | ☑ | ||
---|---|---|---|---|
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) все получилось, спасибо!
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |