Почему в документе Заказ клиента скрыта колонка Номенклатура клиента и как её отобразить?

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

Многие специалисты и пользователи, переходящие с других систем или сравнивающие документы «Заказ поставщику» и «Заказ клиента» в конфигурациях 1С:ERP, Комплексная автоматизация или Управление торговлей 11, сталкиваются с неочевидной проблемой. В заказах поставщику колонка с номенклатурой партнера (артикулом поставщика) доступна и удобна для сверки. Однако в заказе клиента аналогичная колонка (Номенклатура клиента) часто отсутствует или скрыта, даже если соответствующие справочники заполнены. Разберем детально причины такого поведения системы и рассмотрим программные способы решения этой задачи.

Суть проблемы и логика типовой конфигурации

В типовых конфигурациях (ERP, УТ 11) справочник, хранящий соответствие внутренней номенклатуры и номенклатуры партнеров, называется НоменклатураКонтрагентов (ранее мог встречаться как НоменклатураПартнеров или НоменклатураПоставщиков). Логично предположить, что если мы ведем учет артикулов наших покупателей, то должны видеть их в табличной части товаров при оформлении продажи.

Однако разработчики 1С заложили следующую логику: поле Номенклатура партнера в документах продаж предназначено преимущественно для автоматизированной загрузки заказов (через ЭДО, 1С-Такском или из внешних файлов). Система предполагает, что если менеджер набивает заказ вручную, он оперирует внутренней номенклатурой. Видимость этой колонки жестко завязана на настройки электронного документооборота и функциональные опции.

Технически видимость колонки в форме документа ЗаказКлиента определяется значением реквизита формы или параметров, связанных с БЭД (Библиотека электронных документов). Например, за это отвечает параметр ВариантУказанияНоменклатурыБЭД или логика в общем модуле СопоставлениеНоменклатурыКонтрагентов.

Решение 1: Включение колонки через расширение (Базовый метод)

Наиболее эффективным способом включить отображение колонки без изменения конфигурации (снятия с поддержки) является создание расширения. Нам необходимо перехватить момент создания формы документа и принудительно указать системе, что мы хотим работать с номенклатурой контрагента.

Для этого в расширении необходимо добавить заимствование процедуры, отвечающей за создание формы. В модуле менеджера или в общем модуле, который вызывает создание (в зависимости от архитектуры вашего релиза), но проще всего сделать это через аннотацию &Перед для события ПриСозданииФормыДокумента в общем модуле, отвечающем за сопоставление номенклатуры.

Рассмотрим пример кода, который нужно поместить в общий модуль расширения (например, перехватив вызов в СопоставлениеНоменклатурыКонтрагентов.ПриСозданииФормыДокумента или аналогичном месте):


&Перед("ПриСозданииФормыДокумента")
Процедура Расш_ПриСозданииФормыДокумента(ФормаДокумента, ПараметрыФормыДокумента)
    
    // Проверяем, что открывается именно Заказ клиента
    Если СтрНачинаетсяС(ФормаДокумента.ИмяФормы, "Документ.ЗаказКлиента") Тогда 
        
        // Принудительно устанавливаем вариант указания номенклатуры
        // Используем серверный метод для получения нужного значения перечисления или настройки
        ПараметрыФормыДокумента.ВариантУказанияНоменклатурыПоУмолчанию = 
            СопоставлениеНоменклатурыКонтрагентовКлиентСервер.ВариантУказанияНоменклатураКонтрагента;
            
    КонецЕсли;

КонецПроцедуры

Этот код переопределяет параметр, который система использует при инициализации элементов формы. В результате, при открытии документа, платформа видит настройку ВариантУказанияНоменклатураКонтрагента и включает видимость соответствующей колонки в табличной части «Товары».

Решение 2: Проблема исчезновения колонки при смене Клиента

Как показывает практика, решение выше работает идеально только при открытии уже записанного документа или создании нового до момента выбора клиента. В последних релизах УТ 11.5 и ERP 2.5 замечена особенность: при изменении партнера в шапке документа колонка снова пропадает.

Это происходит потому, что при изменении поля Клиент срабатывает серверный вызов, который обновляет доступность и видимость элементов формы в зависимости от настроек конкретного контрагента. Если у выбранного клиента не настроен ЭДО, система снова скрывает колонку, игнорируя нашу начальную установку.

Чтобы решить эту проблему, необходимо вмешаться в логику определения видимости, которая вызывается при перерисовке формы. Обычно за это отвечают общие модули с названиями вроде СопоставлениеНоменклатурыКонтрагентовКлиентСервер или специфические модули для госзакупок (ЕИУС).

Рассмотрим варианты исправления этой ситуации:

  1. Переопределение функции видимости в расширении. Найдите в конфигурации общий модуль, который возвращает булево значение видимости (например, ВидимостьКолонокНоменклатурыПартнера). Сделайте расширение метода с аннотацией &Вместо и верните Истина для документов продаж.
  2. Подписка на событие изменения партнера. Это сложнее, так как требует вмешательства в модуль формы документа. В расширении формы документа ЗаказКлиента можно доработать обработчик ПартнерПриИзменении и после выполнения стандартного кода снова принудительно включать видимость элемента формы:
    
    Элементы.ТоварыНоменклатураПартнера.Видимость = Истина;
    

Решение 3: Через модуль Электронного Актирования (для ERP)

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

Проанализируем процедуру УстановкаВидимостиГруппыГосконтракта. В ней может содержаться код, который управляет видимостью связанных полей. Через расширение можно изменить поведение внутри этой процедуры, принудительно установив флаг видимости:


// Примерная логика для расширения
&После("УстановкаВидимостиГруппыГосконтракта")
Процедура Расш_УстановкаВидимостиГруппыГосконтракта(Форма, ...)
    Если ТипЗнч(Форма.Объект.Ссылка) = Тип("Документ.ЗаказКлиента") Тогда
        Форма.Элементы.ТоварыНоменклатураПартнера.Видимость = Истина;
    КонецЕсли;
КонецПроцедуры

Альтернативные способы (без программирования)

Если возможности вносить изменения в код нет, можно использовать добавление реквизитов и элементов формы без кодирования или рассмотреть обходные пути, которые могут помочь пользователям видеть номенклатуру клиента:

  1. Загрузка из внешнего файла. В табличной части товаров есть кнопка «Загрузить из внешнего файла». В открывающемся окне сопоставления колонка «Номенклатура партнера» всегда видна. Можно использовать этот механизм для проверки соответствия, даже если вы не загружаете файл, а просто подбираете товары.
  2. Использование Коммерческих предложений. В документе КоммерческоеПредложениеКлиенту поведение колонки может отличаться (зависит от релиза). Если бизнес-процесс позволяет, создавайте сначала КП, а на его основании — Заказ.
  3. Настройка печатных форм. Если цель отображения колонки — чтобы клиент видел свои артикулы в счете или накладной, то нет необходимости выводить поле на форму. Достаточно доработать внешнюю печатную форму, которая при формировании будет делать запрос к регистру сведений НоменклатураКонтрагентов и подставлять нужные значения.

Резюме

Отсутствие колонки «Номенклатура клиента» в Заказе клиента — это не ошибка, а особенность проектирования интерфейса 1С:ERP и УТ, ориентированная на ЭДО. Для постоянного отображения этой колонки требуется небольшая доработка через механизм расширений. Рекомендуется использовать перехват события ПриСозданииФормыДокумента и, при необходимости, контролировать видимость при изменении партнера, чтобы настройки не сбрасывались.

← На главную