В процессе автоматизации складской логистики в 1С:Управление торговлей 11.5 часто возникает необходимость адаптировать типовые бизнес-процессы под реальные нужды склада. Типовой механизм предполагает, что при справочном указании серий их заполнение происходит в статусе Проверен. Однако на практике сборка одного Расходного ордера может осуществляться несколькими сотрудниками последовательно. В такой ситуации логично разрешить ввод серий уже на этапе сборки, то есть в статусе К проверке. Разберем подробно, почему обычное условное оформление не помогает и как решить эту задачу программно.
Рассмотрим ситуацию, с которой сталкивается разработчик: попытка изменить Условное оформление формы документа не приносит результата. Поле Серия в строках табличной части Товары остается заблокированным для редактирования. Проанализируем причины такого поведения системы. В конфигурациях на базе ERP 2.5 и УТ 11.5 доступность полей управляется многослойно:
СтатусУказанияСерий равен 0, то поле Серия доступно только для просмотра.УстановитьДоступностьПолей), которые срабатывают при открытии или смене статуса.СтатусУказанияСерий. Если логика модуля СкладскойУчетКлиентСервер говорит, что на данном этапе серии не нужны, форма будет блокировать ввод вне зависимости от настроек оформления.Выясним причину: при политике Справочное указание серий система считает, что до момента окончательной проверки серии носят лишь информационный характер и фиксируются «по факту» завершения сборки. Наша задача — сместить этот порог доступности на один шаг назад.
Проанализируем работу функции, отвечающей за определение необходимости ввода серий. Нам необходимо вмешаться в процесс расчета переменной СтатусУказанияСерий. В типовом коде за это отвечают функции в общем модуле СкладскойУчетКлиентСервер.
Рассмотрим пример того, как можно расширить доступность через расширение или модификацию кода. Нам нужно найти место, где проверяется статус документа РасходныйОрдерНаТовары. Обычно это выглядит примерно так:
// В общем модуле или модуле формы
Если СтатусДокумента = Перечисления.СтатусыРасходныхОрдеров.КПроверке Тогда
// По умолчанию здесь СтатусУказанияСерий устанавливается в 0
// Нам нужно форсировать его значение, чтобы система «поверила», что серии нужны
СтатусУказанияСерий = 1; // Указывает, что серия доступна для ввода
КонецЕсли;
После изменения логики расчета статуса необходимо убедиться, что Условное оформление на форме также учитывает это изменение. Проверим настройки УО в модуле формы и убедимся, что для поля Товары.Серия снят флаг ТолькоПросмотр при статусе К проверке.
Разберем подробнее механизм УправлениеСостояниемФорм. В современных версиях УТ доступность элементов часто пересчитывается при вызове процедуры ПриЧтенииНаСервере или ПослеЗаписи. Даже если вы вручную установили Элементы.ТоварыСерия.Доступность = Истина, система может переопределить это свойство в следующую секунду.
Для корректной работы выполним следующие шаги:
Подключаемый_УстановитьСостояниеФормы).Серия, если документ находится в нужном нам статусе.
&НаСервере
Процедура РазблокироватьСерииНаСтатусеКПроверке()
Если Объект.Статус = Перечисления.СтатусыРасходныхОрдеров.КПроверке Тогда
// Разрешаем редактирование колонки серии в ТЧ Товары
ЭлементСерия = ЭтаФорма.Элементы.ТоварыСерия;
ЭлементСерия.ТолькоПросмотр = Ложь;
ЭлементСерия.Доступность = Истина;
КонецЕсли;
КонецПроцедуры
Важный момент: при использовании справочного учета серии хранятся не просто в основной строке, а могут требовать записи в подчиненную таблицу Серии. Проанализируем ситуацию: если мы просто откроем поле, но не обеспечим инициализацию структуры хранения серий для строки, данные могут не сохраниться.
Проанализируем возможные побочные эффекты. Система 1С:УТ 11.5 очень чувствительна к целостности данных при смене статусов. Существует риск, что при переходе документа из статуса К проверке в статус Проверен сработает типовой механизм пересчета, который очистит ранее введенные серии, если сочтет их «преждевременными».
Рассмотрим, как этого избежать:
ОбработкаПроверкиЗаполнения. Убедитесь, что при заполнении серий на раннем этапе система не выдает ошибок.Если вмешательство в типовое ядро кажется слишком рискованным (что справедливо для сложных проектов), рассмотрим «обходной» путь. Мы можем добавить в табличную часть Товары строковую колонку СерияСборщика. Сборщики будут записывать данные в неё в любом статусе. А при переходе документа в статус Проверен, мы программно перенесем эти данные в типовое поле Серия, инициировав стандартные механизмы проверки и записи 1С.
Этот способ хорош тем, что мы не «ломаем» типовую логику доступности и гарантируем сохранность данных при любых обновлениях конфигурации. Выбор метода зависит от того, насколько глубоко вы готовы погрузиться в рефакторинг складского модуля.