Перенос данных между конфигурациями на базе 1С:Управление торговлей 11 (или аналогичных, таких как ERP и КА 2) через «Конвертацию данных 2.1» часто преподносит сюрпризы. Одной из самых распространенных проблем является ситуация, когда документ УстановкаЦенНоменклатуры успешно переносится, в базе данных табличные части заполнены, но при открытии формы документа колонки с ценами остаются пустыми. Более того, документ может не делать движений в регистре сведений ЦеныНоменклатуры, даже если он имеет статус «Проведен».
В этой статье мы подробно разберем внутреннюю логику работы этого документа, выясним причины «невидимости» данных и научимся правильно настраивать правила конвертации объектов (ПКО) для корректного обмена.
Прежде чем приступать к написанию кода в КД 2.1, нам необходимо понять, как устроена форма документа в современных типовых конфигурациях. В отличие от простых документов (например, «Поступление товаров»), где состав колонок жестко задан в метаданных, документ УстановкаЦенНоменклатуры использует динамическое построение формы.
Проанализируем ключевые особенности:
ВидЦены.Товары указан вид цены, который отсутствует в табличной части ВидыЦен данного документа, цена также не будет отображена на форме.Рассмотрим ситуацию: в источнике документ заполнен корректно, но в правилах обмена (ПКО) забыли настроить перенос табличной части ВидыЦен. Выясним, как это исправить в Конвертации данных 2.1.
Для корректного отображения нам необходимо создать Правило Конвертации Группы Свойств (ПКГС) для табличной части ВидыЦен. Если в источнике эта табличная часть существует, мы просто сопоставляем ее. Если же в источнике структура документа отличается (например, вы переносите данные из самописной базы), нам нужно программно заполнить эту ТЧ в приемнике.
Пример кода в обработчике ПередВыгрузкой для табличной части ВидыЦен (если данные нужно собирать вручную):
// Создаем коллекцию для выгрузки видов цен,
// если в источнике их нет в явном виде
УзлыВидовЦен = Новый ТаблицаЗначений;
УзлыВидовЦен.Колонки.Добавить("ВидЦены");
// Заполняем таблицу уникальными видами цен из ТЧ Товары
Для Каждого СтрокаТовара Из Объект.Товары Цикл
Если УзлыВидовЦен.Найти(СтрокаТовара.ВидЦены, "ВидЦены") = Неопределено Тогда
НоваяСтрока = УзлыВидовЦен.Добавить();
НоваяСтрока.ВидЦены = СтрокаТовара.ВидЦены;
КонецЕсли;
КонецЦикла;
КоллекцияОбъектов = УзлыВидовЦен;
Проанализируем вторую причину: в табличной части Товары реквизит ВидЦены может оказаться пустым или не соответствовать значению из ТЧ ВидыЦен. Проверьте в ПКО документа, что для свойства Товары настроено подчиненное ПКС (Правило Конвертации Свойства) для реквизита ВидЦены.
Важный нюанс: Убедитесь, что сам справочник ВидыЦен переносится корректно (синхронизация по УИД или наименованию). Если ссылка на вид цены в приемнике не будет найдена, реквизит останется пустым, и логика отображения цен нарушится.
Выясним, почему документ может быть проведен, но не создавать записей в регистре. В конфигурациях УТ 11/ERP за проведение этого документа отвечает сложная бизнес-логика, зависящая от реквизита Статус.
Посмотрим на возможные значения статуса:
Не согласован (или Черновик) — документ сохраняется, может быть помечен как проведенный (в некоторых версиях), но движений по регистру сведений не делает.Согласован — только в этом статусе документ фиксирует цены в системе.Чтобы решить проблему отсутствия движений, в ПКО документа в ПКС для реквизита Статус необходимо либо передать соответствующее значение из источника, либо установить его принудительно в обработчике ПриЗагрузке в приемнике:
Если Объект.Статус = Перечисления.СтатусыУстановокЦенНоменклатуры.ПустаяСсылка() Тогда
Объект.Статус = Перечисления.СтатусыУстановокЦенНоменклатуры.Согласован;
КонецЕсли;
Рассмотрим ситуацию, когда в конфигурацию-источник через расширение добавлен реквизит (например, Выгрузить типа Булево), и нам нужно использовать его как условие для выгрузки.
Многие разработчики опасаются, что КД 2.1 «не увидит» такие реквизиты. Однако, поскольку выгрузка данных происходит в режиме «1С:Предприятие», объект Объект (источник) содержит все реквизиты, включая добавленные через расширения.
Проанализируем код в обработчике ПКО ПередВыгрузкой:
// Проверяем значение реквизита из расширения
Если Объект.Выгрузить = Ложь Тогда
Отказ = Истина; // Отменяем выгрузку этого объекта
КонецЕсли;
Чтобы избежать ошибок, если расширение вдруг будет отключено, рекомендуем использовать безопасное обращение к реквизиту:
РеквизитСуществует = Объект.Метаданные().Реквизиты.Найти("Выгрузить") <> Неопределено;
Если РеквизитСуществует И Объект.Выгрузить = Ложь Тогда
Отказ = Истина;
КонецЕсли;
Важно: Для того чтобы эти реквизиты появились в интерфейсе самой программы «Конвертация данных 2.1» (для выбора в выпадающих списках), необходимо выгрузить описание метаданных из базы-источника с помощью обработки MD82exp.epf, запущенной именно в той базе, где подключено расширение.
Подведем итог. Чтобы документ УстановкаЦенНоменклатуры в приемнике выглядел и работал так же, как в источнике, пройдем по шагам:
ВидыЦен.Товары заполнен реквизит ВидЦены и он присутствует в ТЧ ВидыЦен.Статус документа в приемнике — он должен иметь значение Согласован (или аналогичное, разрешающее движения).ПередВыгрузкой, не забывая обновлять файл описания метаданных.Объект.ЗаполнитьИдентификаторыСтрок() в обработчике ПослеЗагрузки.