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