Как добавить колонки с остатками товаров (в наличии и доступно) в рабочее место кассира (РМК) в 1С:УТ 11.4

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

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

Анализ задачи и выбор метода реализации

Рассмотрим ситуацию: штатно в РМК информация об остатках доступна только через форму подбора (клавиша F11). Однако постоянное переключение между окнами замедляет процесс обслуживания клиента. Нам необходимо, чтобы при добавлении строки в табличную часть Товары документа Чек ККМ, система автоматически подтягивала данные из регистров накопления.

Проанализируем основные места, где происходят изменения:

  1. Форма документа: Документ.ЧекККМ.Форма.ФормаРМК.
  2. Регистры-источники: ТоварыНаСкладах (для фактического остатка) и СвободныеОстатки (для остатка за вычетом резервов).
  3. Механизм добавления: Обработчик сканирования штрихкода.

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

Шаг 1: Подготовка расширения и модификация формы

Выясним, какие реквизиты нам понадобятся. В расширении необходимо добавить в табличную часть Товары документа ЧекККМ два новых реквизита: КоличествоОстаток и КоличествоДоступно (тип Число(15, 3)). После этого выполним следующие действия:

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

Шаг 2: Получение данных об остатках через запрос

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


Функция ПолучитьОстаткиТовара(Номенклатура, Характеристика, Склад) Экспорт
    Запрос = Новый Запрос;
    Запрос.Текст = 
        "ВЫБРАТЬ
        |	ЕСТЬNULL(ТоварыНаСкладахОстатки.ВНаличииОстаток, 0) КАК ВНаличии,
        |	ЕСТЬNULL(СвободныеОстаткиОстатки.ВНаличииОстаток, 0) - ЕСТЬNULL(СвободныеОстаткиОстатки.ВРезервеОстаток, 0) КАК Доступно
        |ИЗ
        |	Справочник.Номенклатура КАК Номенклатура
        |		ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(, Склад = &Склад И Номенклатура = &Номенклатура И Характеристика = &Характеристика) КАК ТоварыНаСкладахОстатки
        |		ПО (ИСТИНА)
        |		ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.СвободныеОстатки.Остатки(, Склад = &Склад И Номенклатура = &Номенклатура И Характеристика = &Характеристика) КАК СвободныеОстаткиОстатки
        |		ПО (ИСТИНА)
        |ГДЕ
        |	Номенклатура.Ссылка = &Номенклатура";

    Запрос.УстановитьПараметр("Номенклатура", Номенклатура);
    Запрос.УстановитьПараметр("Характеристика", Характеристика);
    Запрос.УстановитьПараметр("Склад", Склад);

    РезультатЗапроса = Запрос.Выполнить();
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();

    СтруктураОстатков = Новый Структура("ВНаличии, Доступно", 0, 0);
    Если ВыборкаДетальныеЗаписи.Следующий() Тогда
        СтруктураОстатков.ВНаличии = ВыборкаДетальныеЗаписи.ВНаличии;
        СтруктураОстатков.Доступно = ВыборкаДетальныеЗаписи.Доступно;
    КонецЕсли;

    Возврат СтруктураОстатков;
КонецФункции

Шаг 3: Интеграция в логику РМК

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

Рассмотрим использование расширения для серверной процедуры ПриИзмененииНоменклатуры или её аналогов в модуле формы. Нам нужно добавить обработчик &После:


&НаСервере
Процедура Расш1_ЗаполнитьОстаткиВСтроке(ТекущаяСтрока)
    ПараметрыОстатков = ПолучитьОстаткиТовара(ТекущаяСтрока.Номенклатура, ТекущаяСтрока.Характеристика, Объект.Склад);
    ТекущаяСтрока.КоличествоОстаток = ПараметрыОстатков.ВНаличии;
    ТекущаяСтрока.КоличествоДоступно = ПараметрыОстатков.Доступно;
КонецПроцедуры

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

Оптимизация производительности: Важный аспект

Проанализируем ситуацию с точки зрения быстродействия. Если в чеке 50–100 позиций, постоянные запросы к остаткам при каждом действии могут замедлить работу интерфейса. Чтобы этого избежать, рекомендуем применить следующие подходы:

Использование стандартного функционала «Панель информации»

Прежде чем приступать к сложному программированию, проверим, не активирована ли в вашем релизе 1С панель информации о товаре. В настройках формы РМК (через Еще — Изменить форму) часто можно включить отображение группы «Информация о товаре». В этой панели система может выводить остатки по выделенной строке автоматически. Это штатный механизм, который не требует написания кода, но занимает место на экране кассира.

Методологические нюансы: Продавать или не продавать?

Рассмотрим важный управленческий момент, упомянутый в обсуждении. Существует два подхода к контролю остатков в рознице:

  1. Жесткий контроль: Если КоличествоДоступно <= 0, система запрещает пробитие чека. В этом случае колонки с остатками в РМК жизненно необходимы, чтобы кассир мог сразу сказать клиенту: «Извините, этот товар зарезервирован».
  2. Продажа «в минус»: В розничной торговле часто приоритетом является лояльность покупателя. Если товар физически в руках у клиента, кассир обязан его продать. В таком случае остатки в РМК носят лишь информационный характер для последующей инвентаризации и поиска причин пересортицы.

Если вы выбрали второй вариант, убедитесь, что в настройках склада или организации отключена опция «Контролировать остатки при отгрузке», иначе наличие колонок с нулевыми остатками просто заблокирует продажи.

Заключение

Мы разобрали, как технически реализовать вывод остатков в РМК УТ 11.4. Использование расширений — самый безопасный путь, позволяющий добавить колонки В наличии и Доступно с минимальным риском для стабильности системы. Помните, что данные об остатках должны быть не просто цифрами, а инструментом, помогающим кассиру быстрее и качественнее обслуживать покупателей.

← На главную