Как добавить форму подбора товаров на форму РМК в 1С:Управление торговлей?

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

В процессе разработки и адаптации типовых решений на базе 1С:Предприятие 8.3 часто возникает задача повышения эргономики рабочего места кассира (РМК). Одной из наиболее востребованных доработок в конфигурации Управление торговлей 11.3 является интеграция формы подбора товаров непосредственно в интерфейс чека ККМ, чтобы кассиру не приходилось каждый раз нажимать кнопку «Поиск» или «Подбор».

В этой статье мы подробно разберем, какими способами можно реализовать данную задачу, проанализируем технические ограничения платформы и выберем оптимальный вариант реализации с использованием расширений.

Анализ технических ограничений управляемых форм

Прежде чем приступать к кодингу, проанализируем важную особенность платформы. В управляемом приложении 1С не существует механизма, аналогичного iframe в веб-разработке, который позволил бы просто «вставить» одну готовую форму внутрь другой. Форма в 1С — это самостоятельный объект. Чтобы функционал подбора отображался «внутри» РМК, у нас есть три пути:

  1. Программный вызов формы подбора при открытии: форма подбора открывается как отдельное окно поверх РМК автоматически.
  2. Полный перенос логики: копирование всех реквизитов, элементов и программного кода из обработки ПодборТоваровВДокументПродажи на форму РМК. Это трудоемкий процесс, требующий глубокого понимания работы типовых механизмов.
  3. Создание встроенной панели подбора: добавление динамического списка номенклатуры непосредственно на форму РМК через расширение.

Рассмотрим подробнее каждый из этих вариантов.

Решение №1: Автоматическое открытие формы подбора через расширение

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

Выясним причину, почему важно правильно указать владельца формы. Если мы просто вызовем ОткрытьФорму(), то при выборе товара система не будет «знать», куда вернуть результат. Указав владельцем форму РМК, мы задействуем штатный механизм ОбработкаВыбора.

Разберем по шагам создание процедуры в расширении:

  1. Создаем расширение и добавляем в него форму ФормаДокументаРМК (документ ЧекККМ).
  2. Создаем обработчик события ПриОткрытии с типом вызова &После.
  3. Вставляем следующий программный код:

&НаКлиенте
Процедура Расш1_ПриОткрытииПосле(Отказ)
    
    // Подготовим параметры для открытия формы подбора
    ПараметрыПодбора = Новый Структура;
    ПараметрыПодбора.Вставить("ЗакрыватьПриВыборе", Ложь);
    ПараметрыПодбора.Вставить("МножественныйВыбор", Истина);
    
    // Вызываем форму подбора, указывая текущую форму РМК как владельца
    ОткрытьФорму("Обработка.ПодборТоваровВДокументПродажи.Форма", ПараметрыПодбора, ЭтаФорма);
    
КонецПроцедуры

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

Решение №2: Использование штатного механизма «Быстрые продажи»

Прежде чем приступать к сложной разработке, проанализируем ситуацию: возможно, типовой функционал уже решает задачу пользователя. В УТ 11.3 предусмотрена панель «Быстрые товары».

Это настраиваемая область на форме РМК, куда можно вывести наиболее популярные позиции номенклатуры в виде плиток (кнопок). Преимущества этого метода:

Если же ассортимент слишком велик, этот метод не заменит полноценный подбор, и тогда стоит рассмотреть третий вариант.

Решение №3: Создание упрощенного встроенного подбора (Динамический список)

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

Рассмотрим алгоритм реализации:

  1. В расширении на форме РМК создаем новый реквизит СписокНоменклатурыДляПодбора с типом ДинамическийСписок.
  2. В настройках списка выбираем основную таблицу Справочник.Номенклатура. Желательно настроить произвольный запрос, чтобы сразу видеть актуальные остатки и цены (используя виртуальные таблицы остатков и цен).
  3. Перетаскиваем реквизит на форму, создавая визуальный элемент таблицы.
  4. Для созданной таблицы добавляем событие Выбор.

Посмотрим на пример кода обработчика выбора, который будет добавлять товар в корзину чека:


&НаКлиенте
Процедура СписокНоменклатурыДляПодбораВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
    
    СтандартнаяОбработка = Ложь; // Отменяем стандартное открытие карточки товара
    
    // Получаем данные выбранного товара (ссылку)
    ВыбранныйТовар = ВыбраннаяСтрока;
    
    // Вызываем серверную процедуру для добавления строки в таблицу "Товары"
    ДобавитьТоварВЧекНаСервере(ВыбранныйТовар);
    
КонецПроцедуры

&НаСервере
Процедура ДобавитьТоварВЧекНаСервере(ТоварСсылка)
    
    // Создаем новую строку в табличной части документа
    НоваяСтрока = Объект.Товары.Добавить();
    НоваяСтрока.Номенклатура = ТоварСсылка;
    
    // Здесь должна быть логика заполнения цен, упаковок и характеристик
    // В УТ 11 для этого лучше использовать типовой метод:
    // ОбработкаНоменклатурыКлиентСервер.ЗаполнитьСтандартныеРеквизитыУзла(НоваяСтрока, ...);
    
КонецПроцедуры

Важные нюансы: торговое оборудование и фокус внимания

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

Проблема фокуса: Сканеры штрихкодов часто работают в режиме эмуляции клавиатуры. Если вы добавите на форму дополнительные поля поиска или динамические списки, кассир может случайно оставить фокус ввода в поле поиска подбора. В этом случае при сканировании штрихкода данные попадут в текстовое поле, а не вызовут внешнее событие 1С для добавления товара в чек.

Рекомендация: При использовании встроенного подбора убедитесь, что основные горячие клавиши (F2, F7, F11) продолжают функционировать корректно, а фокус ввода программно возвращается в основную область чека после выбора позиции из вашего списка.

Таким образом, мы выяснили, что для начинающего программиста наиболее эффективным и безопасным путем будет автоматический вызов формы подбора через расширение (Решение №1). Это требует минимум кода и сохраняет всю мощную логику типового подбора (фильтры по иерархии, характеристики, остатки по складам). Если же требуется бесшовный интерфейс, следует использовать динамический список (Решение №3), аккуратно внедрив его в структуру управляемой формы.

← На главную