Анализ работы внешней обработки сервиса МодульКасса применительно к задаче фискализации чеков при доставке

04.10.20

Учетные задачи - Кассовые операции

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

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование Бесплатно
api_v1.raml
.raml 7,04Kb
5
5 Скачать бесплатно
api_v2.raml
.raml 5,92Kb
8
8 Скачать бесплатно

Вводные

  • Нужно организовать выгрузку заказов из УТ 11 в МодульКасса
  • Нужно организовать загрузку факта фискализации в УТ 11
  • Есть обработка предоставляемая сервисом использующая HTTP API
  • Есть документация описывающая HTTP API, высылается по запросу в тех поддержку.

Если дополнительно попросить, до можно получить ссылку на полную документацию https://drive.google.com/file/d/12f0TH3Vf8Hou3kF6bzz0onXWzZb3p_kV/view

Обзор текущего функционала

Общие настройки

Обмен реализован в виде внешней обработки, вариант с расширением пока не используют потому что сложнее объяснять пользователям как его подключать.

В СведенияОВнешнейОбработке() установлен "БезопасныйРежим = Истина" с описанием разрешений, это хорошо.

Разрешение = РаботаВБезопасномРежиме.РазрешениеНаИспользованиеИнтернетРесурса("HTTPS","service.modulpos.ru",443,"Доступ к API сервисов МодульКассы для выгрузки товарного каталога и загрузки данных о продажах.");
ПараметрыРегистрации.Разрешения.Добавить(Разрешение);

Разрешение = РаботаВБезопасномРежиме.РазрешениеНаИспользованиеИнтернетРесурса("HTTPS","update.avanpos.com",443,"Доступ к сведениям об актуальной версии обработки и файлам обновлений.");
ПараметрыРегистрации.Разрешения.Добавить(Разрешение);

Настройки хранят в ХранилищеОбщихНастроек, с указание пользователя из ИмяПользователя(), при запуске фоновым заданием настройки могут не подхватится.

Хороший вариант сохранять в реквизит внешней обработки, где НастройкаСсылка это элемент спр. ДополнительныеОтчетыИОбработки

обНастройка = НастройкаСсылка.ПолучитьОбъект();
обНастройка.ХранилищеНастроек = Новый ХранилищеЗначения(СохраняемоеЗначение);
обНастройка.Записать();

 

Вызов обращений реализован через экспортные процедуры при этом в них дублируется

Если Не ЗначениеЗаполнено(ИмяПользователя) ИЛИ Не ЗначениеЗаполнено(Пароль) Тогда
	Возврат;
КонецЕсли;

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

В коде формы будет конструкция

&НаСервере
Процедура ВыполнитьКоманду(ИмяКоманды)
	
	ОбъектОбработки = РеквизитФормыВЗначение("Объект");
	
	Если ЗначениеЗаполнено(Параметры.ДополнительнаяОбработкаСсылка) Тогда
		ОбъектОбработки.СохранитьНастройки(Параметры.ДополнительнаяОбработкаСсылка);	
	КонецЕсли;
	
	ОбъектОбработки.ВыполнитьКоманду(ИмяКоманды, Новый Структура("ДополнительнаяОбработкаСсылка", Параметры.ДополнительнаяОбработкаСсылка));
	
	ЗначениеВДанныеФормы(ОбъектОбработки, Объект);
	
КонецПроцедуры

&НаКлиенте
Процедура ОтправитьОстатки(Команда)
	ВыполнитьКоманду("ОтправитьОстатки");
КонецПроцедуры

 

В HTTP запрос добавляется информация о версии модуля и текущей конфигурации.

Заголовки.Вставить("X-1C-VERSION", "ModulKassa " + Версия() + " Config " + Метаданные.Представление() + " " + Метаданные.Версия);

 

В обработке используется API v1, документация на v2. Код вытаскиваю копипастой, возможны перекосы.

 

Работа со справочниками

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

Использование уникальных идентификаторов справочников возможно решит проблему, вернусь к вопросу при разборе загрузки оплат.

 

На стороне сервиса есть справочник торговых точек, api/v1/retail-points (в документации описания к нему не нашел), в обработке выделена ТЧ под состыковку со справочником Кассы ККМ.

В ТЧ "ТорговыеТочки" дополнительно вынесены поля "Организация" и "Склад" с возможностью редактировать, хотя у спр. "КассыККМ" владелец тип "Организация" и присутствует реквизит "Склад". Пользователь может организовать перекос по данным указав неверную связку. Что делать если функционал розничной торговли отключен пока не понятно.

Система выдает ошибки:

Отключены розничные продажи!
Включить розничные продажи можно в настройках
"НСИ и администрирование - Настройка НСИ и разделов - Продажи"
Отключено использование нескольких касс ККМ!
Включить использование можно в настройках
"НСИ и администрирование - Настройка НСИ и разделов - Продажи"

 

При выгрузке заказов выведено поле на какую "Торговую точку" (по сути ККМ) выгружать, что вносит путаницу (грузить на обе нет смысла). В заказе присутствует поле "Касса", используя которое можно фильтровать ККМ на которые будет делаться выгрузка заказа.

Экваринговый терминал на уровне заказа клиента не установить но его можно вынести в ТЧ "ТорговыеТочки" и получать через кассу, сейчас он вынесен отдельным реквизитом, как работать если терминалов несколько непонятно.

 

Выгрузка заказов

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

"Костылем" является проверка

Если КоличествоВыбранныхТТ >1 Тогда 
	ОбщегоНазначенияКлиентСервер.СообщитьПользователю("Заказ не может находиться сразу нескольких торговых точках, только на одной, исправьте");
	Возврат;
КонецЕсли;

Которая "обходится" повторной выгрузкой заказа на другую точку.

Так же проверка

Если НЕ СтрокаТЧ.Проведен Тогда 
	ОбщегоНазначенияКлиентСервер.СообщитьПользователю(СокрЛП(СтрокаТЧ) + " не проведен, выгрузка невозможна");
	Продолжить;
КонецЕсли;

решается фильтром на форме.

 

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

РазделительХарактеристики = "~";
КодТовараМодульКассы = КодТовараМодульКассы + РазделительХарактеристики + КодХарактеристики;

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

Запрос.УстановитьПараметр("Значение1", "МК" + СтрокаПозиция.inventCode); // товары, загруженные ранее из МодульКассы

 

При выгрузке строки

1. ориентир идет на количество и единицу измерения номенклатуры, без анализа количества упаковок и единицы измерения упаковки.

2. не заполняется inventoryType (Тип товара), видимо расчет на предварительную выгрузку каталога.

 

Заполняется реквизит которого нет в документации "Данные.Вставить("moneyPositions", ДанныеmoneyPositions);"

после успешной выгрузки guid заказа во внешней системе фиксируется в доп свойстве "МодульКасса: ID внешнего чека", но при повторной выгрузке не проверяется. В какую именно ККМ было выгружено не фиксируется.

 

Загрузка заказов

Выборка заказов идет по дате "Заказ.Дата >= ТекущаяДата()-30*24*60*60"

Вычисляется номер смены из доп свойства ""ModulPOS: Номер смены" ,Кассы ККМ или странным условием в котором "забыли" реализацию товаров и странности с оптимизацией.

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

 

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

Данные = ModulPOSВыполнитьGETЗапрос(
	"api/v1/retail-point/" + СтрокаТЧ.ИдентификаторModulPOS 
	+ "/shift" + "?start=" + Формат(НомерСмены-1, "ЧГ=0") 
	+ "&count=1");

То что номера смен могут накладываться не учитывается.

Далее проверяются чеки в документации так же нет описания

// Определим списки заказов и продаж без заказов

ДанныеЧека = ModulPOSВыполнитьGETЗапрос("api/v1/retail-point/" + СтрокаТЧ.ИдентификаторModulPOS 
+ "/shift/" + Данные.data[0].id + "/cashdoc")

При оплате картой создается документ постубление безначлиных ДС, что некорректно, типовые механизмы УТ используют док. "ОперацияПоПлатежнойКарте"

Если аПолученоКартой >0 Тогда 
 Если СоздаватьПоступлениеБезналичныхДС Тогда
  ... Документы.ПоступлениеБезналичныхДенежныхСредств.СоздатьДокумент();

 

Далее создается документ ООрП, Возврат от клиента. В общем процедура на 600 строк с дублирующимися циклами и набором потенциальных ошибок.

Проверок на то что документы уже создан не увидел, потенциально могут быть дубликаты.

 

Промежуточный итог

Для моей задачи с доставкой данная обработка не подходит. С уважением к "//rio" который поддерживает эту обработку.

 

Реализация своей обработки

Специфика реализации API со стороны сервиса

В системе существует 2 версии API, вторую писали для выделения работы с заказами. Состыковку типов документов и статусов между v1 и v2 еще не проверил.

Тестового контура нет.

Ответы HTTP 200 на ошибочные ситуации не редкость, поэтому нужно добавлять проверку на пустую строку в теле ответа сервера.

Номер документа уникален в рамках сервиса, поэтому если у ваз 2 заказа с одинаковым номером от разных годов, то при отправке второго получаем 409 ошибку.

Дату можно отправлять в формате 2019-09-18T14:41:04Z, хотя в документации указано с корректировкой на часовой пояс.

При получения списка документов в id "добавили" тип налогообложения, "id": "fdba0c9f-32b3-4fa0-b598-1b8dcb445ca9 - COMMON", хотя в документации нормальный GUID.

 

Структура данных со стороны 1С.

Реализовал в виде расширения. Для хранения общих настроек использовал справочник.

Для хранения связки по торговым точкам создал справочник "мк_ТорговыеТочки" в котором указываю кассу и экваринговый терминал, при тестировании загрузки данных возможно добавлю значения по умолчанию для заполнения документов.

 
 Код запроса получения торговых точек

 

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

Как передавать по API  "Признак способа расчета. Тег ОФД 1214" не нашел, но для заказчика это важно, т.к. передача права собственности осуществляется по УПД, опишу как решу данный момент.

При проведении документа отправляю данные и фиксирую состояние

 
 Код отправки документа

 

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

 
 Код запроса к сервису получения данных

 

При разборе ответа проверяю состояние документа, наличие ИД ("order")->("id") в регистре "мк_СостоянияЧеков".

Если тип оплаты Cash, то создаю ПКО/РКО на основании документа, если "CARD", то док. "ОперацияПоПлатежнойКарте".

Из структуры "fiscalInfo" можно получит данные для формирования записи в РС "ФискальныеОперации"

Вопрос корректировки чека не рассматриваю, потому что заказ оперативно корректируется из учетной системы.

 

Итог

 

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

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

Есть сервис для предложений по доработке их функционала http://modulkassa.reformal.ru/, возможно будет полезен для более активного взаимодействия с разработчиками.

 

Благодарю за внимание.

МодульКасса API HTTP

См. также

ККМ Кассовые операции Розничная торговля Системный администратор Программист Платформа 1С v8.3 1С:Комплексная автоматизация 1.х 1С:Бухгалтерия 2.0 1С:Управление торговлей 10 1С:Розница 2 1С:Управление производственным предприятием 1С:Бухгалтерия государственного учреждения 1С:Бухгалтерия 1.6 1С:Бухгалтерия автономного учреждения Россия Платные (руб)

Универсальная обработка для обслуживания любых фискальных регистраторов (ККТ), в том числе Веб сервер АТОЛ. Работает в соответствии с 54-ФЗ. (ФФД 1.0, ФФД 1.05, ФФД 1.1). Подключайте любую онлайн кассу к практически любой конфигурации. Нет необходимости обновлять 1С. Можно бесплатно скачать и протестировать. Может работать одновременно с несколькими онлайн-кассами, либо одной с разных рабочих мест. (через RDP, TCP\IP или веб-сервер) Позволяет разделить один чек сразу на несколько ККТ или на несколько систем налогообложения. Поддерживает разрешительный режим. Можно настроить собственный шаблонов чека. Можно использовать эквайринг там, где он не поддерживается. Работает на LINUX и Windows ЭМУЛЯТОР + ЭКВАЙРИНГ + МАРКИРОВКА + ПОДДЕРЖКА ФФД 1.2 + НДС 5% и 7% УСН

6000 руб.

27.02.2017    806563    5083    9695    

2911

ККМ Кассовые операции Розничная торговля Системный администратор Программист Платформа 1С v8.3 1С:Комплексная автоматизация 1.х 1С:Бухгалтерия 2.0 1С:Управление торговлей 10 1С:Розница 2 1С:Управление производственным предприятием 1С:Бухгалтерия государственного учреждения 1С:Бухгалтерия автономного учреждения Россия Платные (руб)

Обработка осуществляет обслуживание ККТ АТОЛ, Штрих, Вики Принт и Меркурий для конфигураций "УТ 10.3", "КА 1.1", "УПП 1.3", "Розница 1.0", "БП 2.0" и других отраслевых решений, построенных на основе указанных выше конфигурациях. Поддерживает возможность параллельно пробития чеков на одной ККМ несколькими пользователями. Поддерживает Веб-сервер Атол. Соответствует требованиям 54-ФЗ. Поддерживает ФФД 1.0, 1.05, 1.1 и 1.2. Разделяет чеки по нескольким СНО. Поддерживает механизмы подключения ККТ по TCP/IP, для работы через RDP или интернет. Поддержка маркировки и разрешительного режима. Поддержка пробития чеков с новыми ставками НДС 5% и НДС 7%.

5880 руб.

25.05.2015    339379    2033    3107    

1053

ККМ Кассовые операции Розничная торговля Обмен с ГосИС Программист Бухгалтер Пользователь Бухгалтерский учет Оперативный учет Управляемые формы 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Платные (руб)

Расширение конфигурации для УТ 11.5, КА 2.5 ,ERP 2.5 (Управляемые формы) позволяет выполнять печать кассовых чеков на одну ККМ 54-ФЗ с нескольких рабочих мест. НИКАКИХ НАСТРОЕК В РАЗРАБОТКЕ - ПОДКЛЮЧИЛ И ПЕЧАТАЙ. Если у вас несколько отделов и одна ККМ - печатайте на одной ККМ! Если у вас две ККМ и одна поломалась - печатайте на одной ККМ, пока ремонтируете другую!

5000 руб.

27.08.2018    124889    1082    603    

892

Оптовая торговля Розничная торговля WEB-интеграция 1С:Управление торговлей 10 1С:Управление производственным предприятием 1С:Управление нашей фирмой 1.6 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Платные (руб)

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

57600 руб.

26.11.2024    1522    1    1    

4

Кассовые операции ККМ Пользователь Платформа 1С v8.3 1С:Управление торговлей 11 Розничная и сетевая торговля (FMCG) Россия Управленческий учет Платные (руб)

Расширение для 1С:Управление торговлей 11.5, которое позволяет пробивать чеки ККМ и списывать товар с разных складов. Склад списание товара можно указывать в табличной части рабочего места кассира (РМК).

5880 руб.

12.04.2023    10204    56    3    

44

SALE! 25%

Кассовые операции Файловый обмен (TXT, XML, DBF), FTP ЭДО и ОФД Программист Бухгалтер Пользователь Платформа 1С v8.3 Бухгалтерский учет 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Россия Бухгалтерский учет Налоговый учет Управленческий учет Платные (руб)

Специализированные обработки для загрузки кассовых чеков в базах 1С (для локальных баз): 1С:БП 3.0, 1С:УНФ 3.0, 1С:КА. 2.5, 1С:ERP Управление предприятием, ред. 2 и 1С:УТ 11.5. Вы просто сканируете QR коды с бумажных и электронных чеков c помощью мобильного приложения ФНС и чеки автоматически (без ручного ввода) загружаются в документы 'Авансовый отчет', 'Расходы предпринимателя', 'Путевой лист', 'Приходная накладная', 'Поступление (акты, накладные, УПД)', 'Приобретение товаров и услуг', 'Отчет о розничных продажах' и 'Поступление денежных документов'.

12960 руб.

19.08.2020    70182    347    80    

229

ККМ Кассовые операции Розничная торговля Системный администратор Программист Пользователь Платформа 1С v8.3 1C:Бухгалтерия Розничная и сетевая торговля (FMCG) Оптовая торговля, дистрибуция, логистика Рестораны, кафе и фаст-фуд Россия Платные (руб)

«Сервер ККМ» позволяет приложениям работать с фискальными регистраторами по локальной сети или интернет, организовать печать на одном ККМ с нескольких рабочих мест с поддержкой очереди печати. Поддерживаются ВСЕ ревизии требований фирмы 1С к разработке драйверов ККТ от 2.2 до 4.4. В поставке есть драйверы для операционных систем Linux, Android, MacOs и Windows. Поддержка драйверов Атол, Штрих и 1С-совместимых драйверов для ККТ ревизии 4.4. Поддержка 54-ФЗ и разрешительного режима, ФФД 1.05,1.1,1.2. Подключается к 1С Торговля и склад 7.7, 1С:УТ 10/11, 1С:УНФ 1.6/3, 1С:Розница 1/2/3, 1С:БП 2/3, 1С КА 1/2., 1С:ERP, УПП. Ускоряет печать из терминального сеанса Windows. Работает с разрешительным режимом даже из старых конфигураций. Предоставляет REST API для печати через веб-сервис. Поддерживаются новые ставки НДС 5% и 7%.

5000 руб.

02.09.2016    138377    168    194    

192

Сайты и интернет-магазины WEB-интеграция Системный администратор Программист Пользователь Платформа 1С v8.3 1C:Бухгалтерия 1С:Управление торговлей 11 Автомобили, автосервисы Россия Управленческий учет Платные (руб)

Интеграционный модуль обмена между конфигурацией Альфа Авто 5 и Альфа Авто 6 и порталом AUTOCRM. Данный модуль универсален. Позволяет работать с несколькими обменами AUTOCRM разных брендов в одной информационной базе в ручном и автоматическом режиме.

36000 руб.

03.08.2020    18564    20    22    

18
Оставьте свое сообщение