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