Почему в документе УТ 11 отображается «характеристика не используется» при программном заполнении?

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

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

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

Выясним причину: механизм работы условного оформления формы

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

Надпись «характеристика не используется» формируется не на уровне базы данных, а с помощью механизма условного оформления управляемой формы. В настройках условного оформления формы задано правило: если служебный реквизит строки ХарактеристикиИспользуются равен Ложь, то для поля характеристики устанавливается отображение специального текста и блокируется доступность ячейки.

Важно понимать ключевые особенности этого механизма:

  1. Реквизит ХарактеристикиИспользуются с типом Булево добавлен исключительно в реквизиты формы (в коллекцию Объект.Товары на форме). В реальной табличной части объекта метаданных этого поля нет, оно не хранится в базе данных.
  2. При интерактивном добавлении строки пользователем срабатывает клиентский обработчик события ПриИзменении поля Номенклатура. Типовой код обращается к серверу, считывает настройки использования характеристик из вида номенклатуры и устанавливает реквизит формы СтрокаТЧ.ХарактеристикиИспользуются = Истина.
  3. Если заполнение выполняется программно напрямую в контексте формы или открываемого объекта без вызова штатных процедур обновления, значение ХарактеристикиИспользуются остается равным Ложь по умолчанию. В результате платформа выводит заглушку условного оформления, несмотря на физически заполненную ссылку в реквизите Характеристика.

Способ 1. Явная установка служебного реквизита в цикле заполнения формы

Если строки формируются во внешней обработке или расширении непосредственно внутри формы открытого документа, самым простым и прозрачным решением является явное заполнение служебного реквизита строки формы. Рассмотрим пример кода:


Для Каждого СтрокаТЧ Из Объект.Товары Цикл
    // Заполняем основные реквизиты
    СтрокаТЧ.Номенклатура = ТекущаяНоменклатура;
    СтрокаТЧ.Характеристика = ТекущаяХарактеристика;
    
    // Проверяем признак использования характеристик
    Если ЗначениеЗаполнено(СтрокаТЧ.Характеристика) 
        ИЛИ СтрокаТЧ.Номенклатура.ИспользоватьХарактеристики Тогда
        СтрокаТЧ.ХарактеристикиИспользуются = Истина;
    Иначе
        СтрокаТЧ.ХарактеристикиИспользуются = Ложь;
    КонецЕсли;
КонецЦикла;

После установки реквизита ХарактеристикиИспользуются в значение Истина условное оформление перестанет маскировать ячейку, и наименование характеристики отобразится корректно.

Способ 2. Вызов штатных процедур типовой конфигурации

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


// Вызов серверного метода для заполнения зависимых реквизитов формы
ПараметрыЗаполнения = Новый Структура;
ПараметрыЗаполнения.Вставить("ИмяТЧ", "Товары");

НоменклатураСервер.ЗаполнитьСлужебныеРеквизитыПоНоменклатуреВКоллекции(
    Объект.Товары, 
    ПараметрыЗаполнения
);

Такой подход надежнее ручной установки отдельных флагов, так как метод ЗаполнитьСлужебныеРеквизитыПоНоменклатуреВКоллекции модуля НоменклатураСервер комплексно анализирует свойства номенклатуры и видов номенклатуры, устанавливая корректные значения для всех служебных полей табличной части формы за один вызов.

Способ 3. Создание документа через объектную модель на сервере

Если интерфейсное присутствие документа в момент его формирования не требуется, рекомендуется исключить прямую манипуляцию элементами формы и создавать документ чисто через серверную объектную модель.

Посмотрим на типовой алгоритм:

  1. Создаем объект документа с помощью метода Документы.ПриобретениеТоваровУслуг.СоздатьДокумент().
  2. Заполняем реквизиты шапки и строки табличной части Товары только реквизитами метаданных (номенклатура, характеристика, количество, цена, сумма). Служебные поля формы здесь заполнять не требуется, так как объектная модель их не содержит.
  3. Записываем документ методом ДокументОбъект.Записать().
  4. При необходимости показать документ пользователю открываем форму уже созданного объекта по ссылке:
    
    ПараметрыОткрытия = Новый Структура("Ключ", ДокументСсылка);
    ОткрытьФорму("Документ.ПриобретениеТоваровУслуг.Форма.ФормаДокумента", ПараметрыОткрытия);
    

При таком подходе в момент открытия формы сработает стандартный обработчик ПриЧтенииСозданииНаСервере, который автоматически заполнит реквизит ХарактеристикиИспользуются для всех строк на основе данных информационной базы.

На что обратить внимание: смежные настройки учета

Если после выполнения описанных действий характеристика по-прежнему недоступна, проанализируем следующие системные настройки:

  1. Функциональная опция: проверьте, включена ли опция «Характеристики номенклатуры» в разделе настроек программы (НСИ и администрирование — Настройка НСИ и разделов — Номенклатура — Разрезы учета). Если опция глобально выключена, колонка характеристик блокируется на уровне прав и видимости элементов.
  2. Настройки вида номенклатуры: характеристика может определяться индивидуально для позиции номенклатуры либо быть общей для всего вида номенклатуры. Проверьте карточку вида номенклатуры: тумблер использования характеристик должен находиться в активном состоянии.
  3. Владелец характеристики: убедитесь, что у передаваемой характеристики реквизит Владелец соответствует либо выбранной позиции номенклатуры (для индивидуальных характеристик), либо ее виду номенклатуры (для общих характеристик), иначе документ не сможет сформировать правильные движения по регистрам учета номенклатуры.
← На главную