Почему в документе Установка цен номенклатуры после обмена не отображаются цены и как это исправить?

Программист 1С v8.3 (Управляемые формы) 1С:Управление торговлей Управленческий учет Торговля и дистрибуция
← На главную

Перенос данных между конфигурациями на базе 1С:Управление торговлей 11 (или аналогичных, таких как ERP и КА 2) через «Конвертацию данных 2.1» часто преподносит сюрпризы. Одной из самых распространенных проблем является ситуация, когда документ УстановкаЦенНоменклатуры успешно переносится, в базе данных табличные части заполнены, но при открытии формы документа колонки с ценами остаются пустыми. Более того, документ может не делать движений в регистре сведений ЦеныНоменклатуры, даже если он имеет статус «Проведен».

В этой статье мы подробно разберем внутреннюю логику работы этого документа, выясним причины «невидимости» данных и научимся правильно настраивать правила конвертации объектов (ПКО) для корректного обмена.

Разберем структуру документа «Установка цен номенклатуры»

Прежде чем приступать к написанию кода в КД 2.1, нам необходимо понять, как устроена форма документа в современных типовых конфигурациях. В отличие от простых документов (например, «Поступление товаров»), где состав колонок жестко задан в метаданных, документ УстановкаЦенНоменклатуры использует динамическое построение формы.

Проанализируем ключевые особенности:

  1. Табличная часть «ВидыЦен»: Это управляющая таблица. Именно на основании данных из этой ТЧ программные механизмы формы решают, какие именно колонки (Вид цены 1, Вид цены 2 и т.д.) нужно отобразить пользователю. Если эта таблица пуста, форма «схлопывает» все колонки цен.
  2. Табличная часть «Товары»: Здесь хранятся сами значения цен. Но важно помнить, что в каждой строке этой таблицы должен быть заполнен реквизит ВидЦены.
  3. Связь данных: Если в табличной части Товары указан вид цены, который отсутствует в табличной части ВидыЦен данного документа, цена также не будет отображена на форме.

Шаг 1: Настройка заполнения табличной части «ВидыЦен»

Рассмотрим ситуацию: в источнике документ заполнен корректно, но в правилах обмена (ПКО) забыли настроить перенос табличной части ВидыЦен. Выясним, как это исправить в Конвертации данных 2.1.

Для корректного отображения нам необходимо создать Правило Конвертации Группы Свойств (ПКГС) для табличной части ВидыЦен. Если в источнике эта табличная часть существует, мы просто сопоставляем ее. Если же в источнике структура документа отличается (например, вы переносите данные из самописной базы), нам нужно программно заполнить эту ТЧ в приемнике.

Пример кода в обработчике ПередВыгрузкой для табличной части ВидыЦен (если данные нужно собирать вручную):


// Создаем коллекцию для выгрузки видов цен, 
// если в источнике их нет в явном виде
УзлыВидовЦен = Новый ТаблицаЗначений;
УзлыВидовЦен.Колонки.Добавить("ВидЦены");

// Заполняем таблицу уникальными видами цен из ТЧ Товары
Для Каждого СтрокаТовара Из Объект.Товары Цикл
    Если УзлыВидовЦен.Найти(СтрокаТовара.ВидЦены, "ВидЦены") = Неопределено Тогда
        НоваяСтрока = УзлыВидовЦен.Добавить();
        НоваяСтрока.ВидЦены = СтрокаТовара.ВидЦены;
    КонецЕсли;
КонецЦикла;

КоллекцияОбъектов = УзлыВидовЦен;

Шаг 2: Синхронизация реквизита ВидЦены в табличной части «Товары»

Проанализируем вторую причину: в табличной части Товары реквизит ВидЦены может оказаться пустым или не соответствовать значению из ТЧ ВидыЦен. Проверьте в ПКО документа, что для свойства Товары настроено подчиненное ПКС (Правило Конвертации Свойства) для реквизита ВидЦены.

Важный нюанс: Убедитесь, что сам справочник ВидыЦен переносится корректно (синхронизация по УИД или наименованию). Если ссылка на вид цены в приемнике не будет найдена, реквизит останется пустым, и логика отображения цен нарушится.

Шаг 3: Проблема отсутствия движений (регистр Цены номенклатуры)

Выясним, почему документ может быть проведен, но не создавать записей в регистре. В конфигурациях УТ 11/ERP за проведение этого документа отвечает сложная бизнес-логика, зависящая от реквизита Статус.

Посмотрим на возможные значения статуса:

Чтобы решить проблему отсутствия движений, в ПКО документа в ПКС для реквизита Статус необходимо либо передать соответствующее значение из источника, либо установить его принудительно в обработчике ПриЗагрузке в приемнике:


Если Объект.Статус = Перечисления.СтатусыУстановокЦенНоменклатуры.ПустаяСсылка() Тогда
    Объект.Статус = Перечисления.СтатусыУстановокЦенНоменклатуры.Согласован;
КонецЕсли;

Шаг 4: Работа с расширениями в Конвертации данных 2.1

Рассмотрим ситуацию, когда в конфигурацию-источник через расширение добавлен реквизит (например, Выгрузить типа Булево), и нам нужно использовать его как условие для выгрузки.

Многие разработчики опасаются, что КД 2.1 «не увидит» такие реквизиты. Однако, поскольку выгрузка данных происходит в режиме «1С:Предприятие», объект Объект (источник) содержит все реквизиты, включая добавленные через расширения.

Проанализируем код в обработчике ПКО ПередВыгрузкой:


// Проверяем значение реквизита из расширения
Если Объект.Выгрузить = Ложь Тогда
    Отказ = Истина; // Отменяем выгрузку этого объекта
КонецЕсли;

Чтобы избежать ошибок, если расширение вдруг будет отключено, рекомендуем использовать безопасное обращение к реквизиту:


РеквизитСуществует = Объект.Метаданные().Реквизиты.Найти("Выгрузить") <> Неопределено;
Если РеквизитСуществует И Объект.Выгрузить = Ложь Тогда
    Отказ = Истина;
КонецЕсли;

Важно: Для того чтобы эти реквизиты появились в интерфейсе самой программы «Конвертация данных 2.1» (для выбора в выпадающих списках), необходимо выгрузить описание метаданных из базы-источника с помощью обработки MD82exp.epf, запущенной именно в той базе, где подключено расширение.

Итоговый алгоритм действий

Подведем итог. Чтобы документ УстановкаЦенНоменклатуры в приемнике выглядел и работал так же, как в источнике, пройдем по шагам:

  1. Проверяем, что в ПКО документа переносится табличная часть ВидыЦен.
  2. Убеждаемся, что в каждой строке ТЧ Товары заполнен реквизит ВидЦены и он присутствует в ТЧ ВидыЦен.
  3. Проверяем реквизит Статус документа в приемнике — он должен иметь значение Согласован (или аналогичное, разрешающее движения).
  4. Если используются реквизиты расширений, корректно обрабатываем их в коде ПередВыгрузкой, не забывая обновлять файл описания метаданных.
  5. После загрузки в приемник, если цены все равно не отображаются, попробуйте интерактивно перевыбрать любой вид цены в форме — если колонки появятся, значит, проблема в нарушении связей индексов (идентификаторов строк), которые в некоторых версиях УТ требуют программного заполнения методом Объект.ЗаполнитьИдентификаторыСтрок() в обработчике ПослеЗагрузки.
← На главную