Как правильно перенести плиточный интерфейс выбора товаров в основную форму РМК и избежать ошибки инициализации данных?

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

При переносе сложного функционала из модальной формы в основное окно обработки ФормаРМК разработчики часто сталкиваются с ошибкой, при которой параметры (такие как СтруктураПлиточногоИнтерфейса) оказываются не заполненными на этапе ПриСозданииНаСервере. Давайте разберем, почему это происходит и как правильно организовать поток данных.

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

В исходном варианте форма ПлиточныйИнтерфейсВыбораТоваров вызывалась как отдельное окно, и параметры передавались в неё через метод ОткрытьФорму(). Когда мы переносим логику визуальных элементов непосредственно на ФормаРМК, механизм передачи параметров через Параметры становится неактуальным, так как ФормаРМК является «главной» формой приложения или обработки.

Основная ошибка заключается в последовательности выполнения кода. В модуле ФормаРМК данные для настройки интерфейса считываются из базы данных (справочник НастройкиРабочегоМестаКассира) с помощью функции ЗаполнитьТекущуюНастройкуРМК. Если вы пытаетесь вызвать процедуру ПодготовитьПлиточныйИнтерфейсПодбора до того, как эта функция отработала, реквизит СтруктураПлиточногоИнтерфейсаПодбора будет пуст.

Пошаговое решение по инициализации интерфейса

Чтобы плиточный интерфейс корректно отображался при открытии ФормаРМК, нам нужно строго соблюдать очередность вызова процедур в модуле формы.

  1. Выполнение запроса настроек: Сначала необходимо заполнить все реквизиты формы, которые приходят из справочника настроек.
  2. Передача данных в переменную: После получения настроек нужно явно присвоить значение из реквизита СтруктураПлиточногоИнтерфейсаПодбора (полученного из настроек) в ту переменную, которую ожидает логика построения плитки (например, СтруктураПлиточногоИнтерфейса).
  3. Запуск отрисовки: И только после этого вызывать процедуру ПодготовитьПлиточныйИнтерфейсПодбора.

Пример правильной реализации в процедуре ПриСозданииНаСервере

Давайте посмотрим, как должен выглядеть исправленный фрагмент кода в процедуре ПриСозданииНаСервере вашего модуля:


// Сначала выполняем все базовые инициализации формы
// ... (здесь идет ваш код инициализации оборудования и цветов)

// 1. Заполняем настройки из базы данных, чтобы получить СтруктураПлиточногоИнтерфейсаПодбора
ЗаполнитьТекущуюНастройкуРМК(); 

// 2. Передаем значение из настроек в переменную, используемую для построения интерфейса
СтруктураПлиточногоИнтерфейса = СтруктураПлиточногоИнтерфейсаПодбора;

// 3. Вызываем подготовку плиточного интерфейса, только если структура заполнена
Если ЗначениеЗаполнено(СтруктураПлиточногоИнтерфейса) Тогда
    ПодготовитьПлиточныйИнтерфейсПодбора();
Иначе
    // Можно добавить логику скрытия панели, если настройка не задана
    Элементы.ПустаяПанель.Видимость = Истина;
КонецЕсли;

Важные рекомендации при работе с формами

При переносе кода на управляемые формы помните о следующих нюансах:

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

← На главную