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