Как сделать доступным поле Серия в Расходном ордере на товары при статусе К проверке

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

В процессе автоматизации складской логистики в 1С:Управление торговлей 11.5 часто возникает необходимость адаптировать типовые бизнес-процессы под реальные нужды склада. Типовой механизм предполагает, что при справочном указании серий их заполнение происходит в статусе Проверен. Однако на практике сборка одного Расходного ордера может осуществляться несколькими сотрудниками последовательно. В такой ситуации логично разрешить ввод серий уже на этапе сборки, то есть в статусе К проверке. Разберем подробно, почему обычное условное оформление не помогает и как решить эту задачу программно.

Анализ проблемы: почему поле остается недоступным

Рассмотрим ситуацию, с которой сталкивается разработчик: попытка изменить Условное оформление формы документа не приносит результата. Поле Серия в строках табличной части Товары остается заблокированным для редактирования. Проанализируем причины такого поведения системы. В конфигурациях на базе ERP 2.5 и УТ 11.5 доступность полей управляется многослойно:

  1. Условное оформление формы: Самый поверхностный уровень. Часто здесь жестко прописано, что если СтатусУказанияСерий равен 0, то поле Серия доступно только для просмотра.
  2. Программное управление состоянием формы: Специализированные процедуры в модуле формы (например, УстановитьДоступностьПолей), которые срабатывают при открытии или смене статуса.
  3. Общие модули складского учета: Ядро системы, где рассчитывается сам СтатусУказанияСерий. Если логика модуля СкладскойУчетКлиентСервер говорит, что на данном этапе серии не нужны, форма будет блокировать ввод вне зависимости от настроек оформления.

Выясним причину: при политике Справочное указание серий система считает, что до момента окончательной проверки серии носят лишь информационный характер и фиксируются «по факту» завершения сборки. Наша задача — сместить этот порог доступности на один шаг назад.

Решение 1: Изменение логики статусов указания серий

Проанализируем работу функции, отвечающей за определение необходимости ввода серий. Нам необходимо вмешаться в процесс расчета переменной СтатусУказанияСерий. В типовом коде за это отвечают функции в общем модуле СкладскойУчетКлиентСервер.

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


// В общем модуле или модуле формы
Если СтатусДокумента = Перечисления.СтатусыРасходныхОрдеров.КПроверке Тогда
    // По умолчанию здесь СтатусУказанияСерий устанавливается в 0
    // Нам нужно форсировать его значение, чтобы система «поверила», что серии нужны
    СтатусУказанияСерий = 1; // Указывает, что серия доступна для ввода
КонецЕсли;

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

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

Разберем подробнее механизм УправлениеСостояниемФорм. В современных версиях УТ доступность элементов часто пересчитывается при вызове процедуры ПриЧтенииНаСервере или ПослеЗаписи. Даже если вы вручную установили Элементы.ТоварыСерия.Доступность = Истина, система может переопределить это свойство в следующую секунду.

Для корректной работы выполним следующие шаги:

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

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

Важный момент: при использовании справочного учета серии хранятся не просто в основной строке, а могут требовать записи в подчиненную таблицу Серии. Проанализируем ситуацию: если мы просто откроем поле, но не обеспечим инициализацию структуры хранения серий для строки, данные могут не сохраниться.

Риски и важные замечания

Проанализируем возможные побочные эффекты. Система 1С:УТ 11.5 очень чувствительна к целостности данных при смене статусов. Существует риск, что при переходе документа из статуса К проверке в статус Проверен сработает типовой механизм пересчета, который очистит ранее введенные серии, если сочтет их «преждевременными».

Рассмотрим, как этого избежать:

Альтернативный вариант: Использование временной колонки

Если вмешательство в типовое ядро кажется слишком рискованным (что справедливо для сложных проектов), рассмотрим «обходной» путь. Мы можем добавить в табличную часть Товары строковую колонку СерияСборщика. Сборщики будут записывать данные в неё в любом статусе. А при переходе документа в статус Проверен, мы программно перенесем эти данные в типовое поле Серия, инициировав стандартные механизмы проверки и записи 1С.

Этот способ хорош тем, что мы не «ломаем» типовую логику доступности и гарантируем сохранность данных при любых обновлениях конфигурации. Выбор метода зависит от того, насколько глубоко вы готовы погрузиться в рефакторинг складского модуля.

← На главную