Всем доброго времени суток!
Пишу план обмена между Розница для Украины 2.0 упр формы и УПП для Украины 1.3 обычные формы.
Подскажите, пожалуйста, как правильно регистрировать регистр сведений Штрихкоды из УПП - подпиской на событие при записи или перед записью?
Смотрю на существующие обмены в УПП и в одном подписка "при записи", в другом - "перед записью".
И еще подскажите, пожалуйста, используются ли в обычных формах макеты с правилами регистрации? Смотрю по конфигурации - нигде нет такого. Команду "Загрузить правила регистрации" в режиме Предприятия (как в упр формах) тоже не нахожу. Получается все условия регистрации прописывать в подписке?
А почему не подходит стандартная регистрация к обмену в составе плана обмена?
Если нужно как-то по-особому фильтровать и контролировать регистрацию записей, то можно попробовать через подписку на событие ПередЗаписью для соотв. регистра Штрих-кодов и делать Отказ = Истина, если данные не проходят правило фильтрации.
А ПриЗаписи - это уже, код, выполняемый, после фактической записи данных в регистр. То есть, он больше предназначен для дополнительной постобработки. К примеру, записали цены и нужно как-то скорректировать штрих-коды после обновления цен. Тогда действительно писать лучше сюда.
(2) а что вы имеете ввиду под стандартной регистрацией? свойство "Разрешить"?
в принципе можно, если не получится, попробую так и сделать, но хотелось бы штрихкод регистрировать не по каждой номенклатуре, а только с определенным типом номенклатуры.
Я пробовала ставить подписку на событие и "ПередЗаписью" и "ПриЗаписи".
Если ставить "ПередЗаписью", то регистрируется старый штрихкод, а не измененный (я делала по примеру https://its.1c.ru/db/metod8dev/content/2267/hdoc Но добавила в запросе отбор по номенклатуре, чтоб не все штрихкоды выгружались). Т.е сначала отрабатывает подписка на событие, регистрируется старый штрихкод, а потом уже происходит запись нового штрихкода. Но мне то нужно зарегистрировать новый штрихкод. При загрузке в базу-приемник никаких ошибок, все норм.
Если ставить "При записи", то штрихкод регистрируется новый, но при загрузке в приемник выпадает ошибка записи объекта
ТипОбъекта = Регистр сведений набор записей: Штрихкоды
по причине:
Запись не верна! Значение поля не соответствует установленному отбору: Штрихкод: , 2000000000127, , EAN13, (Регистр сведений: Штрихкоды; Номер строки: 1; Поле: Владелец)
ПозицияМодуля = Обработка.КонвертацияОбъектовИнформационныхБаз.МодульОбъекта(1588)
КСообщенияОбОшибках = 26
Поэтому я хочу понять при каком событии надо регистрировать регистр сведений?
ТипОбъекта = Регистр сведений набор записей: Штрихкоды
по причине:
Запись не верна! Значение поля не соответствует установленному отбору: Штрихкод: , 2000000000127, , EAN13, (Регистр сведений: Штрихкоды; Номер строки: 1; Поле: Владелец)
ПозицияМодуля = Обработка.КонвертацияОбъектовИнформационныхБаз.МодульОбъекта(1588)
КСообщенияОбОшибках = 26
А это уже похоже на отдельную ошибку, не касающуюся порядка записи и регистрации.
Такое впечатление, что при загрузке установили отбор по одной номенклатуре, а при фактическом сохранении указывается другая.
По крайней мере, ругается именно на "Владельца" штрих-кода.
Попробуйте в базе-приемнике включить остановку по ошибке перед запуском загрузки и, отловив момент ошибки, проверьте какие данные ожидаются по отбору, и какие сохраняются по-факту?
Владелец пустой, т.к. в самом файле xml, который формируется на выгрузку, правило по владельцу не выгружается.
Если правила обмена выгружать через обработку выгрузки-загрузки XML - все загружается. Т.е. не в правилах дело?
Правило конвертации по владельцу указаны https://prnt.sc/v6xj4q Но если смотреть xml, то правила нет https://prnt.sc/v6xjxi Из-за чего такое может быть?
(6) да, сама номенклатура, если в ней что-то меняешь, загружается. Но когда загружается сам штрихкод владелец пустой.
Если при загрузке должно подставляться ранее загруженное значение, тогда не пойму смысла кода, когда устанавливается отбор при загрузке штрихкода
ИначеЕсли ИмяУзла = "Нпп" Тогда
ФайлОбмена.Прочитать();
Нпп = Число(ФайлОбмена.Значение);
Если Нпп <> 0 Тогда
Значение = НайтиОбъектПоНомеру(Нпп, Тип);
НаличиеСвойств = Истина;
КонецЕсли;
ФайлОбмена.Прочитать();
Показать
где
Функция НайтиОбъектПоНомеру(Нпп, ТипОбъекта, РежимПоискаОсновногоОбъекта = Ложь)
Возврат Неопределено;
КонецФункции
поэтому у меня значение у Владельца пустое.
Но что это за логика?
Обработка КонвертацияОбъектовИнформационныхБаз - типовая.
(6) заметила, что если у номенклатуры поставить "Не запоминать выгруженные объекты", то эта проблема обходится.
Владелец ищется другим путем и все хорошо.
Но это работает только для новых штрихкодов, а если изменить существующий, то в базу приемник добавляется новый штрихкод, а не заменяется существующий