Как реализовать рабочее место кассира (РМК) в «1С:Бухгалтерия предприятия 3.0»?

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

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

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

Почему прямой перенос РМК из «1С:Розница» — это тупиковый путь?

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

  1. Зависимость от библиотек (БСП и БПО): Полноценный интерфейс РМК в современных конфигурациях жестко завязан на «Библиотеку подключаемого оборудования» (БПО) и «Библиотеку стандартных подсистем» (БСП). Версии этих библиотек в БП и Рознице существенно отличаются. Попытка переноса потянет за собой десятки общих модулей, ролей, констант и регистров сведений.
  2. Различия в структуре метаданных: РМК в Рознице оперирует специфическими документами (например, ЧекККМ), регистрами остатков и цен, которых в стандартной БП просто нет. Перенос этих объектов превратит БП в громоздкого «монстра», которого будет крайне тяжело обновлять.
  3. Лицензирование и сопровождение: Код типового РМК регулярно обновляется фирмой «1С» под требования законодательства (маркировка товаров, ФФД ККТ). Поддерживать самодельный перенесенный код в актуальном состоянии силами одного программиста станет непосильной задачей.

Ниже мы рассмотрим жизнеспособные альтернативные варианты решения этой задачи.

Вариант 1. Создание собственного легковесного РМК через расширение

Если кассиру принципиально нужно работать в единой базе БП, оптимально не копировать громоздкий код из Розницы, а выяснить конкретные потребности и написать простое расширение «с нуля» под нужды пользователя.

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

Рассмотрим пример программного кода, который выполняется при нажатии кнопки «Оплатить и пробить чек». В этот момент система должна под капотом автоматически создать стандартный документ БП (например, РозничнаяПродажа или цепочку РеализацияТоваровУслуг + ПоступлениеВКассу) и отправить команду на ККТ.


// Пример создания документа РозничнаяПродажа (Чек) из формы легкого РМК
&НаСервере
Функция ОформитьПродажуНаСервере(ДанныеТабличнойЧасти, ВидОплаты)
    
    НовыйЧек = Документы.РозничнаяПродажа.СоздатьДокумент();
    НовыйЧек.Дата = ТекущаяДата();
    НовыйЧек.Организация = Справочники.Организации.НайтиПоРеквизиту("ИНН", "7700000000"); // Укажите ИНН вашей организации
    НовыйЧек.Склад = Справочники.Склады.НайтиПоНаименованию("Основной склад");
    
    // Заполняем товары из табличной части нашего упрощенного интерфейса
    Для Каждого СтрокаТовара Из ДанныеТабличнойЧасти Цикл
        НоваяСтрока = НовыйЧек.Товары.Добавить();
        НоваяСтрока.Номенклатура = СтрокаТовара.Номенклатура;
        НоваяСтрока.Количество = СтрокаТовара.Количество;
        НоваяСтрока.Цена = СтрокаТовара.Цена;
        НоваяСтрока.Сумма = СтрокаТовара.Сумма;
        // Автоматическое заполнение счетов учета, специфичных для БП
        НоваяСтрока.СчетУчета = ПланыСчетов.Хозрасчетный.НайтиПоКоду("41.01");
        НоваяСтрока.СчетУчетаНДС = ПланыСчетов.Хозрасчетный.НайтиПоКоду("19.03");
    КонецЦикла;
    
    // Настраиваем оплату
    Если ВидОплаты = "Наличные" Тогда
        НовыйЧек.ВариантОплаты = Перечисления.ВариантыОплаты.Наличные;
    Иначе
        НовыйЧек.ВариантОплаты = Перечисления.ВариантыОплаты.Безналичные;
    КонецЕсли;
    
    Попытка
        НовыйЧек.Записать(РежимЗаписиДокумента.Проведение);
        Возврат НовыйЧек.Ссылка;
    Исключение
        ВызватьИсключение "Ошибка проведения чека: " + ОписаниеОшибки();
    КонецПопытки;
    
КонецФункции

Такой подход позволяет оградить пользователя от лишних деталей бухгалтерского учета. Кассир видит только понятные ему кнопки, а расширение самостоятельно подставляет счета учета (41.01, 90.01.1) и проводит документы в фоновом режиме.

Вариант 2. Разработка внешнего веб-интерфейса через HTTP-сервисы

Современным и гибким решением является создание отдельной легкой страницы в браузере (веб-интерфейса), которая общается с базой 1С посредством HTTP-сервисов. Кассир работает в браузере на планшете или слабом компьютере, а все данные оперативно уходят в БП.

Давайте проанализируем, как выглядит этот процесс:

  1. В базе БП публикуется встроенный HTTP-сервис.
  2. Веб-страница запрашивает у 1С актуальные цены и остатки товаров по API.
  3. Кассир сканирует штрихкод, товар добавляется в корзину на веб-странице.
  4. При нажатии кнопки оплаты веб-приложение отправляет в 1С POST-запрос с JSON-пакетом данных о продаже.
  5. 1С принимает JSON, программно создает документ продажи и через подключенную ККТ печатает чек.

Посмотрим на пример простейшего метода HTTP-сервиса в 1С, принимающего данные о продаже:


// Метод HTTP-сервиса для регистрации продажи из внешнего РМК
Функция РегистрацияПродажиPost(Запрос)
    
    Ответ = Новый HTTPСервисОтвет(200);
    СтрокаJSON = Запрос.ПолучитьТелоКакСтроку();
    
    // Чтение полученного JSON
    Чтение = Новый ЧтениеJSON;
    Чтение.УстановитьСтроку(СтрокаJSON);
    ДанныеПродажи = ПрочитатьJSON(Чтение);
    Чтение.Закрыть();
    
    // Начинаем транзакцию для создания документов в БП
    НачатьТранзакцию();
    Попытка
        // Создаем документ продажи (аналогично примеру в Варианте 1)
        ДокСсылка = СоздатьДокументПродажиПоДаннымJSON(ДанныеПродажи);
        
        ЗафиксироватьТранзакцию();
        
        // Формируем успешный ответ
        СтруктураОтвета = Новый Структура("Статус, Ссылка", "Успешно", Строка(ДокСсылка.УникальныйИдентификатор()));
        Запись = Новый ЗаписьJSON;
        Запись.УстановитьСтроку();
        ЗаписатьJSON(Запись, СтруктураОтвета);
        Ответ.УстановитьТелоИзСтроки(Запись.Закрыть());
    Исключение
        ОтменитьТранзакцию();
        Ответ.КодСостояния = 500;
        Ответ.УстановитьТелоИзСтроки("Ошибка на стороне сервера: " + ОписаниеОшибки());
    КонецПопытки;
    
    Возврат Ответ;
    
КонецФункции

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

Вариант 3. Использование специализированных тиражных решений

Если у вас нет свободного времени на разработку собственных расширений или веб-интерфейсов, рынок предлагает готовые и поддерживаемые фирмой «1С» архитектурные решения.

Выводы и рекомендации

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

  1. Если бюджет минимален, а база одна: Закажите или найдите на профильных ресурсах готовое небольшое расширение для БП 3.0, которое реализует упрощенную плиточную форму подбора товаров на базе стандартных документов бухгалтерии. Избегайте попыток копировать типовые модули из конфигурации «Розница».
  2. Если критична отказоустойчивость кассы: Применяйте связку «1С:Касса + 1С:Бухгалтерия». В случае падения интернета или зависания центральной базы БП касса продолжит работать автономно, а при восстановлении связи документы синхронизируются.
  3. Если у вас распределенная сеть магазинов: Используйте классическую связку «1С:РМК + 1С:Розница + 1С:Бухгалтерия». Это гарантирует масштабируемость и полное соответствие всем требованиям торгового законодательства без перегрузки бухгалтерского учета лишней первичной документацией.
← На главную