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