При работе в интерфейсе Рабочего места кассира (РМК) в конфигурации 1С:Управление торговлей 11.4 пользователи часто сталкиваются с неудобством: при сканировании штрихкода товар добавляется в корзину, но кассир не видит текущих остатков. Это критично, когда товара на полке много, а по базе он может быть зарезервирован или числиться на другом складе. В данной статье мы разберем, как расширить возможности РМК и вывести колонки «В наличии» и «Доступно» непосредственно в форму чека.
Рассмотрим ситуацию: штатно в РМК информация об остатках доступна только через форму подбора (клавиша F11). Однако постоянное переключение между окнами замедляет процесс обслуживания клиента. Нам необходимо, чтобы при добавлении строки в табличную часть Товары документа Чек ККМ, система автоматически подтягивала данные из регистров накопления.
Проанализируем основные места, где происходят изменения:
Документ.ЧекККМ.Форма.ФормаРМК.ТоварыНаСкладах (для фактического остатка) и СвободныеОстатки (для остатка за вычетом резервов).Важно: Для сохранения возможности обновления конфигурации, все доработки будем выполнять через Расширение. Для регулярного автоматического обслуживания нескольких информационных баз без участия пользователя используется программа для пакетного обновления и тестирования 1С.
Выясним, какие реквизиты нам понадобятся. В расширении необходимо добавить в табличную часть Товары документа ЧекККМ два новых реквизита: КоличествоОстаток и КоличествоДоступно (тип Число(15, 3)). После этого выполним следующие действия:
ФормаРМК в расширение.Товары на форме.Только просмотр = Истина, чтобы кассир не мог редактировать остатки вручную.Для того чтобы данные были актуальными, нам нужно написать функцию, которая будет обращаться к базе данных. Разберем пример кода, который возвращает структуру с остатками по конкретной номенклатуре, характеристике и складу.
Функция ПолучитьОстаткиТовара(Номенклатура, Характеристика, Склад) Экспорт
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ЕСТЬNULL(ТоварыНаСкладахОстатки.ВНаличииОстаток, 0) КАК ВНаличии,
| ЕСТЬNULL(СвободныеОстаткиОстатки.ВНаличииОстаток, 0) - ЕСТЬNULL(СвободныеОстаткиОстатки.ВРезервеОстаток, 0) КАК Доступно
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.Остатки(, Склад = &Склад И Номенклатура = &Номенклатура И Характеристика = &Характеристика) КАК ТоварыНаСкладахОстатки
| ПО (ИСТИНА)
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.СвободныеОстатки.Остатки(, Склад = &Склад И Номенклатура = &Номенклатура И Характеристика = &Характеристика) КАК СвободныеОстаткиОстатки
| ПО (ИСТИНА)
|ГДЕ
| Номенклатура.Ссылка = &Номенклатура";
Запрос.УстановитьПараметр("Номенклатура", Номенклатура);
Запрос.УстановитьПараметр("Характеристика", Характеристика);
Запрос.УстановитьПараметр("Склад", Склад);
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
СтруктураОстатков = Новый Структура("ВНаличии, Доступно", 0, 0);
Если ВыборкаДетальныеЗаписи.Следующий() Тогда
СтруктураОстатков.ВНаличии = ВыборкаДетальныеЗаписи.ВНаличии;
СтруктураОстатков.Доступно = ВыборкаДетальныеЗаписи.Доступно;
КонецЕсли;
Возврат СтруктураОстатков;
КонецФункции
Теперь выясним, где именно вызывать этот расчет. В форме РМК за добавление товара отвечает несколько процедур. Основная точка входа при сканировании — это обработка оповещения от подключаемого оборудования. Нам нужно найти процедуру, которая заполняет строку табличной части (обычно это происходит после поиска номенклатуры по штрихкоду).
Рассмотрим использование расширения для серверной процедуры ПриИзмененииНоменклатуры или её аналогов в модуле формы. Нам нужно добавить обработчик &После:
&НаСервере
Процедура Расш1_ЗаполнитьОстаткиВСтроке(ТекущаяСтрока)
ПараметрыОстатков = ПолучитьОстаткиТовара(ТекущаяСтрока.Номенклатура, ТекущаяСтрока.Характеристика, Объект.Склад);
ТекущаяСтрока.КоличествоОстаток = ПараметрыОстатков.ВНаличии;
ТекущаяСтрока.КоличествоДоступно = ПараметрыОстатков.Доступно;
КонецПроцедуры
Эту процедуру необходимо вызывать каждый раз, когда в табличную часть Товары добавляется новая строка или изменяется количество/номенклатура в существующей. Это гарантирует, что кассир всегда видит актуальные цифры.
Проанализируем ситуацию с точки зрения быстродействия. Если в чеке 50–100 позиций, постоянные запросы к остаткам при каждом действии могут замедлить работу интерфейса. Чтобы этого избежать, рекомендуем применить следующие подходы:
Прежде чем приступать к сложному программированию, проверим, не активирована ли в вашем релизе 1С панель информации о товаре. В настройках формы РМК (через Еще — Изменить форму) часто можно включить отображение группы «Информация о товаре». В этой панели система может выводить остатки по выделенной строке автоматически. Это штатный механизм, который не требует написания кода, но занимает место на экране кассира.
Рассмотрим важный управленческий момент, упомянутый в обсуждении. Существует два подхода к контролю остатков в рознице:
КоличествоДоступно <= 0, система запрещает пробитие чека. В этом случае колонки с остатками в РМК жизненно необходимы, чтобы кассир мог сразу сказать клиенту: «Извините, этот товар зарезервирован».Если вы выбрали второй вариант, убедитесь, что в настройках склада или организации отключена опция «Контролировать остатки при отгрузке», иначе наличие колонок с нулевыми остатками просто заблокирует продажи.
Мы разобрали, как технически реализовать вывод остатков в РМК УТ 11.4. Использование расширений — самый безопасный путь, позволяющий добавить колонки В наличии и Доступно с минимальным риском для стабильности системы. Помните, что данные об остатках должны быть не просто цифрами, а инструментом, помогающим кассиру быстрее и качественнее обслуживать покупателей.