Работа с кассой Atol через веб-сервер ДТО-10

Публикация № 974680

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

#20%НДС #54-ФЗ #Атол

Поддержка многопользовательской печати на одном устройстве ККТ. Поддержка изменений в законодательстве (Переход на ФФД 1.05 и НДС 20%).

Предыстория

Так сложилось что работа с кассой в среде 1С строиться через внешнюю компоненту.
Одна из проблем, с которой столкнулись мы – «зависание» com-порта для работы с кассой завершенным сеансом 1С при печати чеков на 1 ККМ с нескольких компьютеров. Также нам не нравилась установка драйвера ДТО на каждом компьютере, с которого требовалось обращение к кассе. 

Ранее использовали службу fdsvc на компьютере, где подключена касса, устанавливатли драйвер на каждом ПК для обеспечения общения с службой. Так же необходимо было зарегистрировать на каждом компьютере библиотеку драйвера Атол FprnM1C.dll, если же dll в новой версии драйвера с тем же именем, то предварительно необходимо почистить временные файлы. Создавался COM объект, в него передавались данные в зависимости от операции, при этом соединение с кассой держалось все время пока выполнялась операция, а так же код выполнялся в синхронном режиме, ожидая выполнения каждой операции.

Что сделали:

Компания Атол выпустила новую версию драйвера, которая поддерживает работу с кассой через HTTP-запросы к веб-серверу Атол. Существует публикация, реализующая механизм работы с этой версией драйвера, но она нас не устраивала закрытостью кода и мы решили реализовать свой механизм.

 

Порядок действий:

1.Установка и настройка сервера от Atol

Скачиваем последний ДТО 10 с сайта Atol

Для работы Web-сервера требуется установленная Java версии 1.8 и выше (х32).

В момент установки отмечаем, что необходимо установить Web-сервер (данное расширение присутствует только в 32-х битном драйвере)

После установки по адресу http://hostname:16732/settings производим настройки web-сервера

Настраиваем параметры подключения

Включаем web-сервер

После перезагрузки необходимо перезапустить службу

2. Взаимодействие с web-сервером

Для обращения к кассе нам необходимо хранить ip-адрес и порт по которому происходит взаимодействие с кассой

В справочнике кассы добавили реквизиты АдресВебСервера и ПортВебСервера

Алгоритм работы

Для добавления задания в очередь на выполнения необходимо отправить его POST-запросом на адрес http://hostname:16732/requests, указав его уникальный идентификатор. В ответ сервер вернет код результата в виде HTTP-статуса.

(Отправляем запрос на регистрацию задания в очереди печати, когда необходимо распечатать чек)

Для того, чтобы узнать результат задания, необходимо отправить GET-запрос на адрес http://hostname:16732/requests/. В ответ вернется JSON, содержащий в себе статусы задания и его результаты.

(Тут сложнее, необходимо запрашивать статусы задач, для этого мы должны организовать хранение отправленных заданий и проверять по ним ответы, мы организовали хранение через регистр сведений, ключом выступил Объект (любая ссылка) – так как необходимо было контролировать уникальность документов оплаты отправленных на печать, и обеспечить повторную отправку печати в случае неуспеха предыдущего задания)

Для отмены задания, которое еще не начало обрабатываться, необходимо отправить DELETE-запрос на адрес http://hostname:16732/requests/. Нельзя отменить задание, которое выполняется в данный момент.

 

Примеры кода

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

Касса на которой необходимо произвести печать

Операция выполняемая в данный момент

Дополнительные параметры для проведения определенной операции

Реализовали функция для постановки в очередь заданий

// Функция - Выполнить операцию

//

// Параметры:

//  Касса - Справочник.КассыККМ - касса на которой необходимо произвести операцию

//  Операция - Строка - Реализованы "ОтчетБезГашения", "ЗакрытиеСмены" и "ФискальныйЧек"

//  ДополнительныеПараметры - Структура - необходимые параметры для выполнения операций 

// 

// Возвращаемое значение:

//  Ответ - Строка - сообщение о результате выполнения операции

Функция ВыполнитьОперацию(Касса,Операция,ДополнительныеПараметры) Экспорт



HTTPЗапрос = Новый HTTPЗапрос();

HTTPЗапрос.АдресРесурса = "/requests";

HTTPЗапрос.Заголовки.Вставить("Content-Type", "application/json");



Если Операция = "ОтчетБезГашения" Тогда

СтруктураJSON = СформироватьСтруктуруДляОтчетаБезГашения(Касса,Операция,ДополнительныеПараметры);

ИначеЕсли Операция = "ЗакрытиеСмены" Тогда

СтруктураJSON = СформироватьСтруктуруДляЗакрытияСмены(Касса,Операция,ДополнительныеПараметры);

ИначеЕсли Операция = "ФискальныйЧек" Тогда

СтруктураJSON = СформироватьСтруктуруДляФискальногоЧека(Касса,Операция,ДополнительныеПараметры);

Иначе

Возврат "Ошибка выполнения операции! " + "Операция " + Операция + " не реализована!";

КонецЕсли;



Если СтруктураJSON = Неопределено Тогда

Возврат "Не удалось зарегистрировать в очередь!, ошибка формирования менеджера задания (JSON)";

КонецЕсли;



ЗаписьJSON = новый ЗаписьJSON;

ЗаписьJSON.УстановитьСтроку();

ЗаписатьJSON(ЗаписьJSON,СтруктураJSON);

СтрокаЗапросаJS = ЗаписьJSON.Закрыть();

HTTPЗапрос.УстановитьТелоИзСтроки(СтрокаЗапросаJS,КодировкаТекста.UTF8);



Попытка

Соединение = Новый HTTPСоединение(Касса.АдресВебСервера,Касса.ПортВебСервера);

ОтветHTTP = Соединение.ОтправитьДляОбработки(HTTPЗапрос);

Исключение

Возврат "Ошибка регистрации в очереди! Проверьте работоспособность сервера и параметры кассы!";

КонецПопытки;



//обработаем ответ



Тело = ОтветHTTP.ПолучитьТелоКакСтроку();

Если Не ОтветHTTP.КодСостояния = 201 Тогда

Возврат "Ошибка регистрации в очереди!";

КонецЕсли;



//добавим в регистр очереди

Если Операция = "ФискальныйЧек" Тогда

новМенеджер = РегистрыСведений.ОчередьРаботыСКкт.СоздатьМенеджерЗаписи();

новМенеджер.Период = ТекущаяДата();

новМенеджер.Объект = ДополнительныеПараметры.ДокументОплаты;

новМенеджер.Операция = Операция;

новМенеджер.уникИД = СтруктураJSON.uuid;

новМенеджер.Касса = ДополнительныеПараметры.ДокументОплаты.Касса;

новМенеджер.Записать(Ложь);

КонецЕсли;



Возврат "Данные добавлены в очередь!";

КонецФункции

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

Функция СформироватьСтруктуруДляОтчетаБезГашения(Касса,Операция,ДополнительныеПараметры)



уникИД = Формат(ТекущаяДата(),"ДФ=ддММггггЧЧммсс");

СтруктураJSON = Новый Структура();

СтруктураJSON.Вставить("uuid",уникИД);

МассивПараметров = Новый Массив();

СтруктураОперация  = Новый Структура("type","reportX");

МассивПараметров.Добавить(СтруктураОперация);

СтруктураОператор = Новый Структура();

СтруктураОператор.Вставить("name",Строка(ПараметрыСеанса.Пользователь));

МассивПараметров.Добавить(СтруктураОператор);

СтруктураJSON.Вставить("request",МассивПараметров);



Возврат СтруктураJSON;

КонецФункции



Функция СформироватьСтруктуруДляЗакрытияСмены(Касса,Операция,ДополнительныеПараметры)



уникИД = Формат(ТекущаяДата(),"ДФ=ддММггггЧЧммсс");

ЗаписьJSON = новый ЗаписьJSON;

ЗаписьJSON.УстановитьСтроку();

СтруктураJSON = Новый Структура();

СтруктураJSON.Вставить("uuid",уникИД);

МассивПараметров = Новый Массив();

СтруктураОперация  = Новый Структура("type","closeShift");

МассивПараметров.Добавить(СтруктураОперация);

СтруктураОператор = Новый Структура();

СтруктураОператор.Вставить("name",Строка(ПараметрыСеанса.Пользователь));

МассивПараметров.Добавить(СтруктураОператор);

СтруктураJSON.Вставить("request",МассивПараметров);



Возврат СтруктураJSON;



КонецФункции



Функция СформироватьСтруктуруДляФискальногоЧека(Касса,Операция,ДополнительныеПараметры)



ДокументОплаты = ДополнительныеПараметры.ДокументОплаты;

Если Не ПустаяСтрока(ДокументОплаты.НомерЧека) Тогда



СообщениеПользователю = Новый СообщениеПользователю();

СообщениеПользователю.Текст = "По документу уже пробит чек!";

СообщениеПользователю.КлючДанных = ДокументОплаты;

СообщениеПользователю.Сообщить();

Возврат Неопределено;



КонецЕсли;



СтруктураОтвета = ПолучитьСостояниеЗадания("",ДокументОплаты.Касса,ДокументОплаты);

Если Не СтруктураОтвета.ВозможнаОтправка Тогда



СообщениеПользователю = Новый СообщениеПользователю();

СообщениеПользователю.Текст = СтруктураОтвета.ОписаниеОшибки;

СообщениеПользователю.КлючДанных = ДокументОплаты;

СообщениеПользователю.Сообщить();

Возврат Неопределено;



КонецЕсли;



уникИД = Формат(ДокументОплаты.Номер,"ЧГ=") + "-" + Формат(ТекущаяДата(),"ДФ=ддММггЧЧммсс");

ЗаписьJSON = новый ЗаписьJSON;

ЗаписьJSON.УстановитьСтроку();

СтруктураJSON = Новый Структура();

СтруктураJSON.Вставить("uuid",уникИД);



МассивПараметров = Новый Массив();

СтруктураЧека = Новый Структура();

//Тип задания

//sell - чек прихода buy - чек расхода sellReturn - чек возврата прихода buyReturn - чек возврата расхода

ВидОперации = ДокументОплаты.ВидОперации;

Если ВидОперации = ПредопределенноеЗначение("Перечисление.ВидыОперации.ОплатаКлиентом") ИЛИ 

ВидОперации = ПредопределенноеЗначение("Перечисление.ВидыОперации.ПополнениеЛицевогоСчета") ИЛИ 

ВидОперации = ПредопределенноеЗначение("Перечисление.ВидыОперации.ВнесениеДенежныхСредств") Тогда



type = "sell";



ИначеЕсли ВидОперации = ПредопределенноеЗначение("Перечисление.ВидыОперации.ВозвратКлиенту") Тогда



type = "sellReturn";



Иначе



Возврат Неопределено;



КонецЕсли;

СтруктураЧека.Вставить("type",type);

//Электронный чек

СтруктураЧека.Вставить("electronically",Ложь);

//useVAT18 использовать при регистрации чека ставку налога 18%

СтруктураЧека.Вставить("useVAT18",Ложь);

//taxationType Система налогообложения

Если Касса.СистемаНалогооблажения = ПредопределенноеЗначение("Справочник.СистемыНалогообложения.Общая") Тогда

taxationType = "osn";

ИначеЕсли Касса.СистемаНалогооблажения = ПредопределенноеЗначение("Справочник.СистемыНалогообложения.УпрощеннаяДоход") Тогда

taxationType = "usnIncome";

ИначеЕсли Касса.СистемаНалогооблажения = ПредопределенноеЗначение("Справочник.СистемыНалогообложения.УпрощеннаяДоходМинусРасход") Тогда

taxationType = "usnIncomeOutcome";

ИначеЕсли Касса.СистемаНалогооблажения = ПредопределенноеЗначение("Справочник.СистемыНалогообложения.ЕНВД") Тогда

taxationType = "envd";

ИначеЕсли Касса.СистемаНалогооблажения = ПредопределенноеЗначение("Справочник.СистемыНалогообложения.ЕСН") Тогда

taxationType = "esn";

ИначеЕсли Касса.СистемаНалогооблажения = ПредопределенноеЗначение("Справочник.СистемыНалогообложения.ПСН") Тогда

taxationType = "patent";

Иначе

taxationType = "";

КонецЕсли;

Если Не ПустаяСтрока(taxationType) Тогда

СтруктураЧека.Вставить("taxationType",taxationType);

КонецЕсли;

//данные о кассире

СтруктураОператор = Новый Структура();

СтруктураОператор.Вставить("name", Строка(ДокументОплаты.Автор));

СтруктураЧека.Вставить("operator",СтруктураОператор);



//данные о товарах массив items

МассивПозиций = Новый Массив();



Если ВидОперации = Перечисления.ВидыОперации.ПополнениеЛицевогоСчета ИЛИ

ВидОперации = ПредопределенноеЗначение("Перечисление.ВидыОперации.ВнесениеДенежныхСредств") Тогда



СтруктураПозиции = Новый Структура();

СтруктураПозиции.Вставить("type","position");

СтруктураПозиции.Вставить("name","Оказание медицинских услуг по договору");

СтруктураПозиции.Вставить("price",ДокументОплаты.Сумма);

СтруктураПозиции.Вставить("quantity",1);

СтруктураПозиции.Вставить("amount",ДокументОплаты.Сумма);

СтруктураПозиции.Вставить("paymentMethod","fullPrepayment");

СтруктураПозиции.Вставить("paymentObject","service");

СтруктураНДС = Новый Структура();

СтруктураНДС.Вставить("type","none");

СтруктураПозиции.Вставить("tax",СтруктураНДС);

МассивПозиций.Добавить(СтруктураПозиции);



Иначе



СписокУслуг = ДокументОплаты.СписокУслуг.Выгрузить();

СуммаОплтыБонусами = 0;

МассивОплатБонусами = ДокументОплаты.ВидыОплат.НайтиСтроки(Новый Структура("ВидОплаты",ПредопределенноеЗначение("Перечисление.ВидОплаты.Бонусами")));

Если МассивОплатБонусами.Количество() = 1 Тогда

СуммаОплтыБонусами = МассивОплатБонусами[0].Сумма;

КонецЕсли;



Для Каждого СтрПозиций Из СписокУслуг Цикл



Если СуммаОплтыБонусами = 0 Тогда

Прервать;

КонецЕсли;



Если СтрПозиций.Сумма - 1 <= СуммаОплтыБонусами Тогда

СуммаОплтыБонусами = СуммаОплтыБонусами - (СтрПозиций.Сумма - 1);

СтрПозиций.Сумма = 1;

СтрПозиций.Цена = СтрПозиций.Сумма/СтрПозиций.Количество;

Иначе

СтрПозиций.Сумма = СтрПозиций.Сумма - СуммаОплтыБонусами;

СтрПозиций.Цена = СтрПозиций.Сумма/СтрПозиций.Количество;

СуммаОплтыБонусами = 0;

КонецЕсли;



КонецЦикла;



Для Каждого СтрОплаты Из СписокУслуг Цикл



СтруктураПозиции = Новый Структура();

СтруктураПозиции.Вставить("type","position");

СтруктураПозиции.Вставить("name",СтрОплаты.Услуга.Наименование);

СтруктураПозиции.Вставить("price",СтрОплаты.Цена);

СтруктураПозиции.Вставить("quantity",СтрОплаты.Количество);

СтруктураПозиции.Вставить("amount",СтрОплаты.Сумма);

Если СтруктураЧека.type = "sell" Тогда 

СтруктураПозиции.Вставить("infoDiscountAmount",СтрОплаты.СуммаБезСкидки - СтрОплаты.Сумма);

КонецЕсли;

//paymentMethod - Признак способа рaсчета

//fullPrepayment - предоплата 100% 

//prepayment - предоплата 

//advance - аванс 

//fullPayment - полный расчет 

//partialPayment - частичный расчет и кредит 

//credit - передача в кредит 

//creditPayment - оплата кредита

СтруктураПозиции.Вставить("paymentMethod","fullPrepayment");



//paymentObject

//commodity - товар 

//excise - подакцизный товар 

//job - работа 

//service - услуга 

//gamblingBet - ставка азартной игры 

//gamblingPrize - выигрыш азартной игры 

//lottery - лотерейный билет 

//lotteryPrize - выигрыш лотереи 

//intellectualActivity - предоставление результатов интерелектуальной деятельности 

//payment - платеж 

//agentCommission - агентское вознаграждение 

//proprietaryLaw - имущественное право 

//nonOperatingIncome - внереализационный доход 

//insuranceСontributions - страховые взносы 

//merchantTax - торговый сбор 

//resortFee - курортный сбор 

//composite - составной предмет расчета 

//another - иной предмет расчета

СтруктураПозиции.Вставить("paymentObject","service");



//tax

СтруктураНДС = Новый Структура();

СтруктураНДС.Вставить("type","none");

СтруктураПозиции.Вставить("tax",СтруктураНДС);



МассивПозиций.Добавить(СтруктураПозиции);



КонецЦикла;



КонецЕсли;

СтруктураЧека.Вставить("items", МассивПозиций);



//формирование стуктуры оплат

МассивОплат = Новый Массив();

Для Каждого СтрОплаты Из ДокументОплаты.ВидыОплат Цикл

СтруктураОплаты = Новый Структура();

Если СтрОплаты.ВидОплаты = ПредопределенноеЗначение("Перечисление.ВидОплаты.БезНаличными") Тогда

СтруктураОплаты.Вставить("type", "electronically");

ИначеЕсли СтрОплаты.ВидОплаты = ПредопределенноеЗначение("Перечисление.ВидОплаты.Наличными") Тогда

СтруктураОплаты.Вставить("type", "cash");

Иначе

Продолжить;

КонецЕсли;

СтруктураОплаты.Вставить("sum", СтрОплаты.Сумма);

МассивОплат.Добавить(СтруктураОплаты);

КонецЦикла;

СтруктураЧека.Вставить("payments",МассивОплат);



СтруктураJSON.Вставить("request",СтруктураЧека);



Возврат СтруктураJSON;

КонецФункции

 

Опрос заданий организовали через фоновое задание раз в 60 секунд

Процедура ОбработкаОчередиККТ() Экспорт 

Запрос = Новый Запрос();

Запрос.Текст = "ВЫБРАТЬ

| ОчередьРаботыСККТ.Период КАК Период,

| ОчередьРаботыСККТ.Объект КАК Объект,

| ОчередьРаботыСККТ.Операция КАК Операция,

| ОчередьРаботыСККТ.уникИД КАК уникИД,

| ОчередьРаботыСККТ.Касса КАК Касса,

| ОчередьРаботыСККТ.Статус КАК Статус,

| ОчередьРаботыСККТ.Результат КАК Результат

|ИЗ

| РегистрСведений.ОчередьРаботыСККТ КАК ОчередьРаботыСККТ

|ГДЕ

| ОчередьРаботыСККТ.Статус = """"";



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



Пока Рез.Следующий() Цикл

Если Не ЗначениеЗаполнено(Рез.Объект) Тогда

МенеджерЗаписи = РегистрыСведений.ОчередьРаботыСКкт.СоздатьМенеджерЗаписи();

МенеджерЗаписи.Объект = Рез.Объект;

МенеджерЗаписи.Период = Рез.Период;

МенеджерЗаписи.Прочитать();

МенеджерЗаписи.Удалить();

Продолжить;

КонецЕсли;



СтруктураОтвета = ПолучитьСостояниеЗадания(Рез.уникИД,Рез.Объект.Касса,Рез.Объект);

Если Не СтруктураОтвета.Результат Тогда

Продолжить;

КонецЕсли;



СтатусОперации = СтруктураОтвета.results[0].status;

ОписаниеОшибки = СтруктураОтвета.results[0].errorDescription;

Если СтатусОперации = "error" Тогда

//запишем ошибку

МенеджерЗаписи = РегистрыСведений.ОчередьРаботыСКкт.СоздатьМенеджерЗаписи();

МенеджерЗаписи.Объект = Рез.Объект;

МенеджерЗаписи.Период = Рез.Период;

МенеджерЗаписи.Прочитать();

МенеджерЗаписи.Статус = СтатусОперации;

МенеджерЗаписи.Результат = ОписаниеОшибки; 

МенеджерЗаписи.Записать();

Продолжить;

ИначеЕсли СтатусОперации = "ready" Тогда



//проверим номер чека и присвоем оплате

НомерЧека = СтруктураОтвета.results[0].result.fiscalParams.fiscalDocumentNumber;

ДокОплаты = Рез.Объект.ПолучитьОбъект();

ДокОплаты.НомерЧека = НомерЧека;

Попытка

ДокОплаты.Записать(РежимЗаписиДокумента.Запись);

Исключение

Продолжить;

КонецПопытки;

//если задание выполненно успешно то данные о задании удаляем из очереди

МенеджерЗаписи = РегистрыСведений.ОчередьРаботыСКкт.СоздатьМенеджерЗаписи();

МенеджерЗаписи.Объект = Рез.Объект;

МенеджерЗаписи.Период = Рез.Период;

МенеджерЗаписи.Прочитать();

МенеджерЗаписи.Удалить();

КонецЕсли;

КонецЦикла;



КонецПроцедуры

Функция ПолучитьСостояниеЗадания(УникИД, Касса, Объект) Экспорт



Если Не ЗначениеЗаполнено(УникИД) Тогда

//найдем последний УникИД по объекту

Запрос = Новый Запрос();

Запрос.Текст = "ВЫБРАТЬ

| ОчередьРаботыСККТСрезПоследних.Объект КАК Объект,

| ОчередьРаботыСККТСрезПоследних.Операция КАК Операция,

| ОчередьРаботыСККТСрезПоследних.уникИД КАК уникИД,

| ОчередьРаботыСККТСрезПоследних.Касса КАК Касса

|ИЗ

| РегистрСведений.ОчередьРаботыСККТ.СрезПоследних КАК ОчередьРаботыСККТСрезПоследних

|ГДЕ

| ОчередьРаботыСККТСрезПоследних.Объект = &Объект";

Запрос.УстановитьПараметр("Объект",Объект);

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

Если Рез.Следующий() Тогда

УникИД = Рез.уникИД;

Иначе

СтруктураОтвета = Новый Структура();

СтруктураОтвета.Вставить("Результат",Ложь);

СтруктураОтвета.Вставить("ВозможнаОтправка",Истина);

СтруктураОтвета.Вставить("ОписаниеОшибки","Объект не отправлялся в очередь для печати!");

Возврат СтруктураОтвета;

КонецЕсли;



КонецЕсли;



Запрос = Новый Запрос();



HTTPСоединение = Новый HTTPСоединение(Касса.АдресВебСервера,Касса.ПортВебСервера,,,,,);  

HTTPЗапрос = Новый HTTPЗапрос("/requests/" + УникИД);

Попытка

Ответ = HTTPСоединение.Получить(HTTPЗапрос);

ОписаниеОшибки = Ответ.ПолучитьТелоКакСтроку();

Исключение

Возврат Неопределено;

КонецПопытки;



Попытка

ЧтениеJSON = Новый ЧтениеJSON();

ЧтениеJSON.УстановитьСтроку(ОписаниеОшибки);

СтруктураОтвета = ПрочитатьJSON(ЧтениеJSON);

ЧтениеJSON.Закрыть();

Исключение

СтруктураОтвета = Новый Структура();

СтруктураОтвета.Вставить("Результат",Ложь);

СтруктураОтвета.Вставить("ВозможнаОтправка",Ложь);

СтруктураОтвета.Вставить("ОписаниеОшибки","Не удалось прочитать статус");

Возврат СтруктураОтвета;

КонецПопытки;

СтатусОперации = СтруктураОтвета.results[0].status;

СтруктураОтвета.Вставить("Результат",Истина);

СтруктураОтвета.Вставить("ВозможнаОтправка",?(СтатусОперации = "error",Истина,Ложь));

СтруктураОтвета.Вставить("ОписаниеОшибки",?(СтатусОперации = "ready","Чек успешно расепчатан ранее!",СтруктураОтвета.results[0].errorDescription));

Возврат СтруктураОтвета;



КонецФункции



Документация по взаимодействию с web-сервером atol описана на сайте http://integration.atol.ru/#web-server

Спасибо за внимание, будем рады если статья будет полезна Вам, готовы ответить на вопросы в комментариях.

Специальные предложения

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. CheBurator 3452 31.12.18 18:41 Сейчас в теме
Для отмены задания, которое еще не начало обрабатываться, необходимо отправить DELETE-запрос на адрес http://hostname:16732/requests/. Нельзя отменить задание, которое выполняется в данный момент.


а)- имеем задание, которое еще не отмечено как обработанное.
б)- посылаем DELETE
в)-между а и б) - задание уже выполнилось -
г) что получим в ответ? какие действия отрабатываются?
д) какие действия отрабатываются если DELETE попадает на "запрос выполняется в данный момент"..?
е) разница в отработке и реакции системы кассира на Г и Д - есть?
2. ix5s 31.12.18 19:36 Сейчас в теме
(1)
по методу Delete
Отмена задания
HTTP запрос
DELETE http://<hostname>:16732/requests/<uuid>

Возвращаемые ошибки
В случае успешного чтения результата сервер вернет статус 200 (OK) и JSON с результатом.

Также могут вернуться следующие ошибки:

404 (Not Found) - задание с заданным uuid не найдено
405 (Method Not Allowed) - задание с заданным uuid нельзя отменить (уже выполнено или выполняется)

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

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

Надеюсь ответил на ваш вопрос
3. karpik666 3228 04.01.19 21:59 Сейчас в теме
Идея с очередью задания интересна, но требует доработки конфигурации, зачем разрабатывать свой механизм, если у фирмы 1с есть свой, описанный в требования к разработке драйверов. Также непонятно зачем передавать идентификатор в виде текущей даты, если "Новый УникальныйИдентификатор" с этим прекрасно справляется?
У себя ранее уже сделал разработку для обычных форм https://infostart.ru/public/956348/ , которая использует типовой функционал от фирмы 1С, и прекрасно отправляет и получает информацию о напечатанных чеках, также использую его и в своей платной разработке.
5. ix5s 09.01.19 09:14 Сейчас в теме
(3) Идентификатор подойдет любой, это правда
по поводу механизма через драйвер, причина в обращении к ККТ одновременно с нескольких ПК.
Первая проблема что периодически происходит зависание ком порта, не все время, но данная ошибка появлялась неоднократно.
Вторая проблема что если одновременно послать на печать чек то одному из двух вернется ошибка недоступности кассы
Третья долгая печать чека, которая на 30ф например, и ожидать печати чека хотя бы с 10 позициями, не очень то и хочется, а через com вся программа зависает и ждет ответа
p.s. свой механизм именно для решения данных проблем и исключения множественного кода

а как вы ожидаете ответ от веб-сервера?
6. karpik666 3228 09.01.19 09:20 Сейчас в теме
(5) я не предлагаю отказаться от веб-сервера, и обращаться напрямую через com объект. Отправка http запросов логичный выбор. Просто ожидать ответа от веб-сервера можно по таймауту, без очереди заданий, опрашивая нужное задание на выполнение, для такого варианта нужно будет предусмотреть, чтобы результат запроса не кэшировался.
8. medangel 87 09.01.19 09:26 Сейчас в теме
(6) Согласны, что ваш вариант тоже "хорош". Но для себя выбрали асинхронность.
androgin; +1 Ответить
9. karpik666 3228 09.01.19 09:29 Сейчас в теме
(8) такой вариант как у вас хорош для интернет магазина, когда не требуется сию секундный ответ от фискального регистратора, и можно поместить задание в очередь и ожидать печати долгого времени.
12. medangel 87 10.01.19 17:36 Сейчас в теме
(9) Не совсем - ожидать практически не приходится, работа через очередь практически не проигрывает по скорости "работе в лоб".
4. 3vs 07.01.19 09:18 Сейчас в теме
Может быть кому-то будет интересно, я свои Атол 25Ф подключал к программе 1С Отель, работающий в терминале посредством преобразователя порта USR-TCP232-302.

Прикладываю описание этого способа.
Но мы используем на каждом рабочем месте свой фискальник, т.к. на сайте 1С где-то была информация, что вообще-то печатать на одном фискальнике с нескольких рабочих мест является грехом по версии налоговой, мы стараемся не грешить! :-)
Прикрепленные файлы:
Пример подключения ККТ АТОЛ 25Ф.docx
Goggy; independ; +2 Ответить
7. medangel 87 09.01.19 09:24 Сейчас в теме
(4) Информацию по "греховности печати" не видели, но получали множество запросов от "бизнеса" на реализацию данного функционала.
10. 3vs 09.01.19 10:04 Сейчас в теме
Нашёл текст на сайте 1С:
https://its.1c.ru/db/kkt/content/77/hdoc

Можно ли использовать одну онлайн-кассу на нескольких торговых точках, расположенных по одному адресу?

Рекомендации для осторожных налогоплательщиков
На каждом торговом месте должна быть отдельная онлайн-ККТ. Одна ККТ не может одновременно использоваться на нескольких торговых местах.

По общему правилу ККТ применяется в обязательном порядке всеми организациями и индивидуальными предпринимателями при осуществлении расчетов, включая расчеты при осуществлении торговли (п. 1 ст. 1.2 Федерального закона от 22.05.2003 № 54-ФЗ, Закон № 54-ФЗ).

Торговое место – это место, используемое для совершения сделок розничной купли-продажи с/без использованием(я) торгового объекта, находящееся под управлением одного лица (ГОСТ Р 51303-2013. Национальный стандарт Российской Федерации. Торговля. Термины и определения, утв. приказом Росстандарта от 28.08.2013 № 582-ст).

Поэтому использовать одну ККТ при торговле на нескольких торговых местах, расположенных по одному адресу, нельзя.

(См. письмо УФНС по г. Москве от 02.03.2011 № 17-26/019349@).

Рекомендации для тех, кто готов отстаивать свою позицию
Одна ККТ может одновременно использоваться на нескольких торговых местах, находящихся по одному адресу.

Дело в том, что при регистрации ККТ необходимо указать адрес и место установки (применения) ККТ (п. 2 ст. 4.2 Закона № 54-ФЗ). При этом положения Закона № 54-ФЗ не запрещают использовать ККТ при торговле на нескольких торговых местах, расположенных по одному адресу. Значит, это правомерно.

Это следует из буквального толкования норм законодательства.

Отметим, что данную позицию, скорее всего, придется отстаивать в суде.
11. medangel 87 10.01.19 17:35 Сейчас в теме
"Торговое место" в нашем случае это 1 reception (стойка администратора-регистратора), где обслуживается клиент. Наше субъективное мнение - закон не нарушается, проверки налоговых органов наши клиенты проходили успешно в прошлом году.
Спасибо за ссылку - будем предоставлять клиентам перед выбором схемы работы. Наша МИС "МедАнгел" поддерживает обе схемы.
13. androgin 28.01.19 14:46 Сейчас в теме
локально работает. Но не понимаю, почему удаленно не подключается касса )))
хост и порт указал, в роутере порт перенаправил на нужный сервер....
а не подключается))
14. medangel 87 28.01.19 20:11 Сейчас в теме
(13) а файервол включен?
если да то порт надо в исключения прописать
15. androgin 08.02.19 19:15 Сейчас в теме
(14) да, забыл про него)))
ну и добавил/доработал ваши методы, кстати, обнаружил ошибку в составлении json. Кассир не определяется вашим способом.
Функция СформироватьСтруктуруДляОткрытияЗакрытияСмены(Касса, Операция, ДополнительныеПараметры)
    
    Если Операция = "ОткрытиеСмены" Тогда
        ТипОперации = "openShift";
    ИначеЕсли Операция = "ЗакрытиеСмены" Тогда	
        ТипОперации = "closeShift";
    Иначе
        Возврат Неопределено;
    КонецЕсли;
    
    УИД = Формат(ТекущаяДата(),"ДФ=ддММггггЧЧммсс");
    
    СтруктураОператор = Новый Структура("name", Строка(ПараметрыСеанса.ТекущийПользователь));
	
    СтруктураЧека = Новый Структура;
    СтруктураЧека.Вставить("type", ТипОперации);
    СтруктураЧека.Вставить("operator", СтруктураОператор);
	
    МассивПараметров = Новый Массив;
    МассивПараметров.Добавить(СтруктураЧека);
    
    СтруктураJSON = Новый Структура();
    СтруктураJSON.Вставить("uuid", УИД);
    СтруктураJSON.Вставить("request", МассивПараметров);
    
    Возврат СтруктураJSON;
    
КонецФункции
Показать
16. androgin 13.02.19 14:48 Сейчас в теме
(14) и еще вопрос: ККТ не возвращает ответы)
Даже о состоянии ккт.
Возможно ли потому, что ККТ не фискализирована?
17. androgin 13.02.19 18:16 Сейчас в теме
(14) С ответами разобрался (сам дурак)))))
18. pma 2 01.03.19 09:41 Сейчас в теме
Коллеги, никто не делал метод СформироватьСтруктуру для ЧекаКоррекции?
20. medangel 87 01.03.19 16:08 Сейчас в теме
(18) У нас пока нет данной реализации.
19. tacu 01.03.19 10:35 Сейчас в теме
А кто-нибудь ставил для себя логическо-философскую задачу по закрытию смен в 1С и в ККТ:
если закрытие смены в 1С увязано с закрытием смены в ККТ (как это делается в типовых конфигурациях) то при работе нескольких юзеров с одной кассой мы получим конфликт, когда в 1С смена открыта, а в ККТ - закрыта предыдущим пользователем
?
и какие способы решения (с логическими обоснованиями, ессэсно, (и для пользователей тоже)) назовёт уважаемое сообщество?
21. medangel 87 01.03.19 16:13 Сейчас в теме
(19) Не совсем понял - как влияет работа "нескольких юзеров"? При закрытии смены - смена должна закрываться и в 1С, и в ККТ (вне зависимости от количества/режима работы пользователей).
22. tacu 04.03.19 06:00 Сейчас в теме
(21) ну как... первый юзер закрывает свою смену и смену в ККТ, второй юзер не может закрыть смену в ККТ, тк она уже, и свою смену может не закрыть, если конфигурация к этому критична
23. pma 2 05.03.19 09:45 Сейчас в теме
Коллеги, а как Вы обрабатываете ситуацию когда очередь заблокировалась?
У меня она разблокировалась только после физического отключения кассы.
Перезапуск сервера не помогал.
24. medangel 87 06.03.19 15:23 Сейчас в теме
(23)Добрый день, такая ситуация не возникала, можно получать статус последнего задания и на основании него понимать состояние очереди. А ошибка какая была? или просто потерялся конект? один раз так было, был занят ком порт другой программой
25. pma 2 06.03.19 16:25 Сейчас в теме
Настроен тестовый ККТ с тестовым ФН
Послал на Сервер 462 чека.
На почту пришло 3 чека от тестового ОФД.
Дальше тишина

Запросил состояние очереди
2019-03-04 15:28:02.541 INFO [JsonTaskServlet] GET /stat/requests
2019-03-04 15:28:02.545 INFO [JsonTaskServlet] 200 {"not_ready_count":441,"block_request_uuid":"00000001667-040319150552","is_blocked":true,"ready_count":31,"canceled_count":0}
2019-03-04 15:28:07.665 WARN [DriverWorker] Не удалось восстановить состояние, продолжаем попытки...
2019-03-04 15:28:08.665 INFO [DriverWorker] Обнаружена блокировка очереди задачей '00000001667-040319150552'

Больше ничего не менялось.
По заданиям кроме заблокированного возвращался статус wait
2019-03-04 15:11:20.225 INFO [JsonTaskServlet] GET /requests/00000004120-040319150645
2019-03-04 15:11:20.225 INFO [JsonTaskServlet] 200 {"results":[{"result":null,"errorDescription":"","errorCode":0,"status":"wait"}]}
2019-03-04 15:11:20.265 INFO [JsonTaskServlet] GET /requests/00000001667-040319150552
2019-03-04 15:11:20.265 INFO [JsonTaskServlet] 200 {"results":[{"result":null,"errorDescription":"Нет связи","errorCode":2,"status":"blocked"}]}
2019-03-04 15:11:20.287 INFO [JsonTaskServlet] GET /requests/00000001668-040319150552

Остановка/Запуск сервера ККТ ни на что ни влиял

После физического выключения/ включения ККТ
2019-03-04 15:58:15.577 INFO [JsonTaskServlet] GET /stat/requests
2019-03-04 15:58:15.583 INFO [JsonTaskServlet] 200 {"not_ready_count":442,"block_request_uuid":"00000001667-040319150552","is_blocked":true,"ready_count":31,"canceled_count":0}
2019-03-04 15:59:38.417 INFO [DriverWorker] Обнаружена блокировка очереди задачей '00000001667-040319150552'
2019-03-04 15:59:38.602 INFO [DriverWorker] Соединение восстановленно, задача '00000001667-040319150552' не выполнена
2019-03-04 15:59:38.614 INFO [DriverWorker] Обработка задачи '00000001667-040319150552' завершена, разблокируем очередь

И дальше вся очередь обработалась
26. pma 2 06.03.19 16:28 Сейчас в теме
Мне просто надо с 01/07/2019 кучу чеков пробивать и посылать клиентам - вот и провожу нагрузочное тестирование и пытаюсь понять какое и сколько мне нужно оборудования и как все это заставить работать.
27. Solikamsk 2 18.06.19 15:56 Сейчас в теме
(26) Не подскажите какие "Настроен тестовый ККТ с тестовым ФН " используете?
28. medangel 87 18.06.19 16:36 Сейчас в теме
у нас для тестирования релизов используются ККТ:
Retail 02F(Штрих-ФР-02Ф) и Атол 55Ф

Тестовый ФН:
МГМ-ФН
29. Solikamsk 2 20.06.19 14:39 Сейчас в теме
(28) Спасибо, что отвечаете. У меня на любые запросы ответ:
<ht ml>
<head>
<met a http-equiv="Content-Type" content="text/html;charset=utf-8"/>
<title>Error 500 Server Error</title>
</head>
<body><h2>HTTP ERROR 500</h2>
<p>Problem accessing /requests. Reason:
<pre> Server Error</pre></p><h3>Caused by:</h3><pre>java.lang.StringIndexOutOfBoundsException: String index out of range: 0
at java.lang.String.charAt(Unknown Source)
at ru.atol.drivers10.webserver.Utils.readFromReader(Utils.java:24)
....

Подскажите, что не так?
30. Solikamsk 2 20.06.19 16:19 Сейчас в теме
А вот пытаюсь postman
Прикрепленные файлы:
31. Solikamsk 2 21.06.19 13:26 Сейчас в теме
Вопрос с "HTTP ERROR 500" и с postman закрыт. У меня тупая ошибка была.
32. tof3d 12.09.19 14:10 Сейчас в теме
Кто-нибудь сталкивался с такой ошибкой?
Ошибка парсинга запроса (поле "items[0].price" отсутствует)

Кусок json
"items": [
{
"type": "position",
"name": "CD диск принято от Медицинские услуги",
"price": 1,
"quantity": 1,
"amount": 1,
"tax": {
"type": "none",
"sum": 0
}
}
]
Показать
33. ix5s 13.09.19 09:39 Сейчас в теме
(32)
price
нет ли случайно проблемы с раскладкой клавиатуры? так вроде все хорошо
34. tof3d 13.09.19 19:11 Сейчас в теме
(33) неа. И сам писал и на всякий случай с инета копировал, и с калькулятора вводил...
35. tof3d 16.09.19 07:54 Сейчас в теме
(33)
Полный текст json
{
"uuid": "1abf1c07-8867-4e40-b69d-243d5e68b68716092019095213",
"request": {
"type": "sell",
"ignoreNonFiscalPrintErrors": false,
"electronically": false,
"useVAT18": false,
"taxationType": "osn",
"paymentsPlace": "Организация",
"operator": {
"name": "Кассир",
"vatin": "ИНН"
},
"items": [
{
"type": "position",
"name": "CD диск принято от Медицинские услуги",
"price": 1,
"quantity": 1,
"amount": 1,
"tax": {
"type": "none",
"sum": 0
}
}
],
"payments": [
{
"type": "other",
"sum": 1
}
]
}
}
Показать
36. tof3d 20.09.19 07:28 Сейчас в теме
(35)
Решение было простое. ИНН кассира не надо указывать
37. Splinter_ru 18.12.19 10:29 Сейчас в теме
Кто-нибудь знает команду очистки очереди заданий веб-сервера АТОЛ? В документации нет ничего, доступа на форум Атол нет, последнее сообщение на эту тему от июня 2018, обещали в следующем релизе.
38. medangel 87 18.12.19 10:56 Сейчас в теме
(37) подозреваем, что пока только через "Отмена задания", доп. информации не присутствует

Отмена задания
HTTP запрос
DELETE http://<hostname>:16732/requests/<uuid>

Возвращаемые ошибки
В случае успешного чтения результата сервер вернет статус 200 (OK) и JSON с результатом.

Также могут вернуться следующие ошибки:

404 (Not Found) - задание с заданным uuid не найдено
405 (Method Not Allowed) - задание с заданным uuid нельзя отменить (уже выполнено или выполняется)
39. Splinter_ru 18.12.19 11:15 Сейчас в теме
(38) Да, с этим поработал, надеюсь, что есть общая команда без идентификаторов.
40. Splinter_ru 18.12.19 13:41 Сейчас в теме
(37) Без команды задача решается удалением файла "C:\Users\All Users\ATOL\drivers10\web\db\web.s3db" или его редактированием, в таблице json_tasks поле is_ready установить в 1, редактором баз SQLite.
41. leobrn 443 30.01.20 04:56 Сейчас в теме
Подскажите, в типовые конфигурации в какой модуль нужно вставить данный функционал? какую процедуру переопределить для вызова ВыполнитьОперацию(Касса,Операция,ДополнительныеПараметры)?
42. user1008452 16.06.20 15:26 Сейчас в теме
Добрый день. По работе с сервером все ок, настроено и работает. Вопрос по отправке электронных чеков через ОФД, в данном описании электронно стоит ложь. Какие параметры необходимо дополнительно передавать чтобы чек отправился покупателю из ОФД?
43. user1008452 16.06.20 16:15 Сейчас в теме
(42) Разобрался
СтруктураКлиент = Новый Структура();
СтруктураКлиент.Вставить("emailOrPhone", ПочтовыйАдресПолучателя);
СтруктураЧека.Вставить("clientInfo",СтруктураКлиент);
44. FreeArcher 110 16.10.20 13:18 Сейчас в теме
Подскажите выполняю запрос в PostMan из документации:
127.0.0.1:16732/api/v2/serverInfo
Получаю ошибку

<ht ml>

<head>
	<met a http-equiv="Content-Type" content="text/html;charset=utf-8" />
	<title>Error 404 Not Found</title>
</head>

<body>
	<h2>HTTP ERROR 404</h2>
	<p>Problem accessing /api/v2/serverInfo. Reason:
		<pre>    Not Found</pre>
	</p>
	<hr>Powered by Jetty:// 9.4.9.v20180320
	<hr />

</body>

</html>
Показать


На все запросы такая ошибка.
Драйвер стоит у меня локально, ККТ на 192.168.0.121:5555.
Здесь (http://127.0.0.1:16732/settings) настройки прописал.

Адрес 192.168.0.121:5555 пингуется и драйвер находит ККТ.

Что-то упустил, но не могу понять что, подскажите?
Может ещё кроме драйвера и веб сервера нужно поставить?
45. FreeArcher 110 19.10.20 09:07 Сейчас в теме
(44) Проблема решилась, установкой драйвера 10.8.
46. user788359 20.10.20 13:23 Сейчас в теме
Второй день мучаюсь с запросом. Для начала пытаюсь распечатать нефискальны документ.
Вроде запрос верный, но выдается ошибка: {"error":{"code":505,"description":"Поле 'uuid' не задано или пустое. Поле 'request' не задано или пустое"}}
Ниже кусок лога. Что может быть не так?
2020/10/20 13:16:54.879371 Начинаем обработку запроса от 192.168.2.8:52610: [POST /api/v2/requests HTTP/1.1
Host: 192.168.1.88:16732
Cache-Control: no-cache
Connection: Keep-Alive
Content-Length: 382
User-Agent: 1C

{
  "uuid": "0ba40014-5fa5-11ea-b5e9-037d4786a490",
  "request": [
    {
    "type": "nonFiscal",
    "items": [
      {
        "type": "text",
        "text": "INN: 7725760410  KPP: 772501001",
        "alignment": "center"
      },
      {
        "type": "text",
        "text": "ABCD: 00105700000011 :1",
        "alignment": "center"
      }
     ]
    }
  ]
}

]
2020/10/20 13:16:54.887350 Обработка завершена с результатом 400 Bad Request за 7.9789ms [{"error":{"code":505,"description":"Поле 'uuid' не задано или пустое. Поле 'request' не задано или пустое"}}
]
Показать
47. user788359 20.10.20 14:46 Сейчас в теме
(46) Разобрался сам. Если кому будет надо, то в POST-запросе в заголовке не хватало двух строк:
Content-Type: application/json; charset=utf-8
Accept: application/json
Ziggurat; G_117539644445526335982; +2 Ответить
48. noxomb 12.02.21 12:15 Сейчас в теме
Добрый день. подскажите куда копать, вроде так же все как у вас стоит, но чеки со скидкой аннулируются, что не так сделал?
Касса Атол 55ф, Драва Атол 10.8, с офф сайт 32 бита вроде последние.
------------------------------------------------------------------------------------------------------------
Для каждого стр ИЗ  ТабличнаяЧастьПозицииЧека Цикл
		
	пт0 = ВернутьОбъект("type" ,  "position");
	пт0.Вставить("name" ,  СокрЛП(стр.Номенклатура));

	пт0.Вставить("price" , стр.Цена  );
	пт0.Вставить("quantity",стр.Количество);
	пт0.Вставить("amount",  стр.Сумма );
	Скид = (стр.Цена*стр.Количество)-стр.Сумма;
	пт0.Вставить("infoDiscountAmount", Скид);
	пт0.Вставить("department", 1);
	пт0.Вставить("paymentMethod", СокрЛП(ОплатаСписок( Настройки[4].Значение ) )); // credit
	
	пт1 =  ВернутьОбъект( "type" , СокрЛП(ВернутьНдс(стр.НДС))) ;
	пт1.Вставить("sum", СуммаНдс(стр.Сумма,стр.НДС));
	
	пт0.Вставить("tax", пт1 );

	масс.Добавить(пт0);

	пт.Вставить("items" ,масс) ;
	
	КонецЦикла;
		
	пт0 = ВернутьОбъект( "type"  , ОплатаНаЧек( Настройки[5].Значение)); // sell
	пт0.Вставить("sum" ,  Настройки[1].Значение.СуммаДокумента );
	м1 = ВернутьМассив(пт0);
	пт.Вставить("payments" ,м1) ;
    
	пт.Вставить("total" , Настройки[1].Значение.СуммаДокумента) ;

	м = ВернутьМассив(пт);

    парам.Вставить("request", м);
	
	Ответ = PostStat(Настройки[7].Значение, "/requests", парам);
	Ответ = Post(Настройки[7].Значение, "/requests", парам);
------------------------------------------------------------------------------------------------------------
Показать

Когда смотришь json результат, вроде все сходится.
49. ix5s 12.02.21 16:37 Сейчас в теме
(48)
Настройки[1].Значение.СуммаДокумента

а в итогах Настройки[1].Значение.СуммаДокумента - сумма за минусом скидки?
53. noxomb 16.02.21 09:02 Сейчас в теме
50. ix5s 12.02.21 16:38 Сейчас в теме
(48) можете выложить готовый json с данными на 2-3 позиции?
52. noxomb 16.02.21 08:15 Сейчас в теме
(50) На самом чеке там где скидка -, он печатает 0, доходит до позиции со скидкой и сразу чек аннулирован.

{
"uuid": "728186af-8572-45cc-86bb-2c4bc8e86e96",
"request": [
{
"type": "sell",
"taxationType": "osn",
"ignoreNonFiscalPrintErrors": false,
"operator": {
"name": "Продавец",
"vatin": "ИННПродавца"
},
"preItems": [
{
"type": "text",
"text": "Принято от: Покупатель",
"alignment": "left",
"wrap": "words"
},
{
"type": "text",
"text": "ИНН: покупателя",
"alignment": "left",
"wrap": "words"
}
],
"items": [
{
"type": "position",
"name": "Ветчина Столичная Вязанка ТМ Стародворские колбасы ТС Вязанка в оболочке вектор УВС.Мясной продукт.",
"price": 370.41,
"quantity": 2.726,
"amount": 1009.74,
"infoDiscountAmount": -0.00234,
"department": 1,
"paymentMethod": "creditPayment",
"tax": {
"type": "vat10",
"sum": 91.79
}
},
{
"type": "position",
"name": "Колбаса Вязанка со шпиком ТМ Стародворские колбасы ТС Вязанка в оболочке вектор УВС",
"price": 364.61,
"quantity": 4.082,
"amount": 1488.34,
"infoDiscountAmount": -0.00198,
"department": 1,
"paymentMethod": "creditPayment",
"tax": {
"type": "vat10",
"sum": 135.3
}
},
{
"type": "position",
"name": "Колбаса Классическая ТМ Стародворские колбасы ТС Вязанка в оболочке вектор УВС. Мясной продукт. Колб",
"price": 348.04,
"quantity": 2.696,
"amount": 938.32,
"infoDiscountAmount": -0.00416,
"department": 1,
"paymentMethod": "creditPayment",
"tax": {
"type": "vat10",
"sum": 85.3
}
},
{
"type": "position",
"name": "Колбаса вареная из мяса птицы Докторская Особая ТМ Славница в оболочке УВС. Колбасное изделие варен",
"price": 202.54,
"quantity": 7.365,
"amount": 1491.71,
"infoDiscountAmount": -0.0029,
"department": 1,
"paymentMethod": "creditPayment",
"tax": {
"type": "vat10",
"sum": 135.61
}
},
{
"type": "position",
"name": "Колбаса Молочная Особая ТМ Стародворье в оболочке полиамид. Колбасное изделие",
"price": 202.55,
"quantity": 7.36,
"amount": 1490.77,
"infoDiscountAmount": -0.002,
"department": 1,
"paymentMethod": "creditPayment",
"tax": {
"type": "vat10",
"sum": 135.52
}
},
{
"type": "position",
"name": "Колбаса с/к Швейцарская вак/упак 0,17 кг (СТМ)/15",
"price": 105.87,
"quantity": 3,
"amount": 317.61,
"infoDiscountAmount": 0,
"department": 1,
"paymentMethod": "creditPayment",
"tax": {
"type": "vat10",
"sum": 28.87
}
},
{
"type": "position",
"name": "Ветчина Дугушка ТМ Стародворье в оболочкевектор 0,4 кг УВС. Продукт из мяса птиц/6",
"price": 170.44,
"quantity": 1,
"amount": 136.35,
"infoDiscountAmount": 34.09,
"department": 1,
"paymentMethod": "creditPayment",
"tax": {
"type": "vat10",
"sum": 12.4
}
},
{
"type": "position",
"name": "Ветчина Дугушка ТМ Стародворье вектор Мясной продукт охл",
"price": 337.67,
"quantity": 0.85,
"amount": 229.62,
"infoDiscountAmount": 57.3995,
"department": 1,
"paymentMethod": "creditPayment",
"tax": {
"type": "vat10",
"sum": 20.87
}
},
{
"type": "position",
"name": "Колбаса Докторская Дугушка ТМ Стародворье ТС Дугушка в оболочке вектор",
"price": 369.87,
"quantity": 1.697,
"amount": 502.14,
"infoDiscountAmount": 125.52939,
"department": 1,
"paymentMethod": "creditPayment",
"tax": {
"type": "vat10",
"sum": 45.65
}
},
{
"type": "position",
"name": "Колбаса Докторская ДугушкаТМ Стародворье в оболочке вектор 0,4 кг/6",
"price": 153.84,
"quantity": 1,
"amount": 123.07,
"infoDiscountAmount": 30.77,
"department": 1,
"paymentMethod": "creditPayment",
"tax": {
"type": "vat10",
"sum": 11.19
}
},
{
"type": "position",
"name": "Колбаса Молочная Дугушка ТМ Стародворье ТС Дугушка в оболочке вектор",
"price": 325.19,
"quantity": 0.838,
"amount": 218.01,
"infoDiscountAmount": 54.49922,
"department": 1,
"paymentMethod": "creditPayment",
"tax": {
"type": "vat10",
"sum": 19.82
}
},
{
"type": "position",
"name": "Колбаса Молочная ДугушкаТМ Стародворье в оболочке вектор 0,4 кг/6",
"price": 137.23,
"quantity": 1,
"amount": 109.78,
"infoDiscountAmount": 27.45,
"department": 1,
"paymentMethod": "creditPayment",
"tax": {
"type": "vat10",
"sum": 9.98
}
},
{
"type": "position",
"name": "Колбаса Рубленая Дугушка ТМ Стародворье ТС Дугушка в оболочке вектор",
"price": 336.99,
"quantity": 0.854,
"amount": 230.23,
"infoDiscountAmount": 57.55946,
"department": 1,
"paymentMethod": "creditPayment",
"tax": {
"type": "vat10",
"sum": 20.93
}
}
],
"payments": [
{
"type": "cash",
"sum": 8285.69
}
],
"total": 8285.69
}
]
}
Показать
Прикрепленные файлы:
ТестЧека.JSON
51. ix5s 12.02.21 16:46 Сейчас в теме
(48) есть предположение, что возможно проблема с оплатой типа credit
пт0.Вставить("paymentMethod", СокрЛП(ОплатаСписок( Настройки[4].Значение ) )); // credit

и что вот тут

пт0 = ВернутьОбъект( "type" , ОплатаНаЧек( Настройки[5].Значение)); // sell
пт0.Вставить("sum" , Настройки[1].Значение.СуммаДокумента );
м1 = ВернутьМассив(пт0);
пт.Вставить("payments" ,м1) ;


там можно получить в чем именно ошибка по номеру задания, не смотрели?
54. noxomb 16.02.21 09:11 Сейчас в теме
(51) По поводу кредита, это бухгалтер так сказал. Есть правила оформления чека https://its.1c.ru/db/kkt#content:133:hdoc:met3, наш вариант 3 оплаты после отгрузки, в примере указано
1059 1214 Признак способа расчета 7 ОПЛАТА КРЕДИТА +
Соответственно так и настроено при печати.

ниже

type, cash
sum, сумма документа со скидкой
дальше все объединяем в кучу

"там можно получить в чем именно ошибка по номеру задания, не смотрели?"
это вы про что? и где?
55. ix5s 16.02.21 11:14 Сейчас в теме
1. Пробил чек, все ок по json, единственное ругался на кассира
"operator": {
"name": "Продавец",
"vatin": "ИННПродавца"
Убрал ИНН и все вышло

2. По уиду можно сделать запрос на кассу и узнать что с заданием, какой статус и какая ошибка если оно не выполнилось
HTTPСоединение = Новый HTTPСоединение(Касса.АдресВебСервера, Касса.ПортВебСервера, , , , 100);  
HTTPЗапрос = Новый HTTPЗапрос("/requests/" + УИД);	
Попытка
		
	Ответ = HTTPСоединение.Получить(HTTPЗапрос);		
	ОписаниеОшибки = Ответ.ПолучитьТелоКакСтроку();	
		
Исключение
		
	Возврат;	
		
КонецПопытки;
Показать
56. noxomb 17.02.21 07:39 Сейчас в теме
(55) ИНН вообще как параметр убирали? или просто пустое значение параметра оставили?

запрос на ошибку сделал, выдал

{"results":[{"status":"error","result":null,"errorCode":16,"errorDescription":"Неверная цена (сумма)"}]}

"price": 170.44,
"quantity": 1,
"amount": 136.35,
"infoDiscountAmount": 34.09

чисто математически же верно все? цена = 170,44, сумма со скидкой = 136,35, скидка 34,09.
или надо ему сумму без скидки ставить?
57. noxomb 17.02.21 11:33 Сейчас в теме
(56) убрал ИНН и сделал пересчет цены, чтобы она считалась от суммы со скидкой поделённой на количество. вроде заработало. Спасибо за помощь.
58. VSY666 8 18.02.21 20:55 Сейчас в теме
Подскажите почему не подключается к вебсерверу?
ОтветHTTP выдает ошибку

Попытка

Соединение = Новый HTTPСоединение("http://127.0.0.1",16732,,,,100);

ОтветHTTP = Соединение.ОтправитьДляОбработки(HTTPЗапрос);

Исключение
Сообщить("Ошибка регистрации в очереди! Проверьте работоспособность сервера и параметры кассы!");
Возврат "Ошибка регистрации в очереди! Проверьте работоспособность сервера и параметры кассы!";

КонецПопытки;
59. VSY666 8 19.02.21 09:30 Сейчас в теме
60. VSY666 8 19.02.21 09:44 Сейчас в теме
(59) возможно кому будет полезно, нужно третий параметр обязательно указывать в методе УстановитьТелоИзСтроки ИспользованиеByteOrderMark должно быть НеИспользовать
HTTPЗапрос.УстановитьТелоИзСтроки(СтрокаЗапросаJS,КодировкаТекста.UTF8,ИспользованиеByteOrderMark.НеИспользовать);
61. VSY666 8 21.02.21 16:09 Сейчас в теме
Подскажите как передавать обращение к нужной кассе если касс несколько? Как указывать правильно идентификатор кассы в коде?
64. ix5s 01.03.21 16:44 Сейчас в теме
(63)
уть Идентификатор ККМ чтоб отпра

(62)
(61)

Если верить документации то необходимо добавить параметр к запросу

http://127.0.0.1:16732/api/v2/requests?deviceID=ВАШ_ИД

Ссылка на документацию
https://app.swaggerhub.com/apis-docs/atol-dev/fptr-web-server/10.8.1.0#/%D0%A0%D0%B0%D0%B1%D0%BE%D1%82%D0%B0%20%D1%81%20%D0%BE%D1%8­7%D0%B5%D1%80%D0%B5%D0%B4%D1%8C%D1%8E%20%D0%B7%D0%B0%D0%B4%D­0%B0%D0%BD%D0%B8%D0%B9/post_api_v2_requests
user1203706; +1 Ответить
62. serega123 24.02.21 10:24 Сейчас в теме
63. serega123 24.02.21 10:25 Сейчас в теме
куда засунуть Идентификатор ККМ чтоб отправка шла на нужную кассу web сервера
Оставьте свое сообщение

См. также

Сервер ККМ (54-ФЗ, быстрая печать чеков из терминального сеанса, печать с нескольких ПК) Промо

ККМ Разработка внешних компонент POS терминал Фискальный регистратор Кассовые операции Розничная торговля Кассовые операции Розничная торговля v8 1cv8.cf Розничная и сетевая торговля (FMCG) Оптовая торговля, дистрибуция, логистика Рестораны, кафе и фаст-фуд Россия Платные (руб)

"Сервер ККМ" позволяет приложениям работать с фискальными регистраторами из терминального сеанса Windows по локальной сети или интернет, организовать печать на одном ККМ с нескольких рабочих мест. Поддержка драйверов Атол, Штрих и VikiPrint. Поддержка 54-ФЗ. Подключается к 1С Торговля и склад 7.7, 1С:УТ 10/11, 1С:УНФ, 1С:Розница 1/2, 1С:БП 2/3, 1С КА 1/2., 1С:ERP, УПП

12000 руб.

02.09.2016    97135    218    171    

ВИДы на жительство. Использование внешних источников данных в прикладных задачах

Внешние источники данных v8 Бесплатно (free)

На Infostart Meetup Novosibirsk выступил ведущий разработчик МКК «Ваш Инвестор» Вадим Фоминых. Он на практических примерах показал коллегам, как его команда использует внешние источники данных в прикладных задачах, призвал не отказываться от этого инструмента и объяснил – почему.

19.04.2021    416    Shmell    1    

Отчет по чекам в 1С

Кассовые операции Розничная торговля v8 1cv8.cf Россия УУ Бесплатно (free)

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

01.04.2021    408    Koder_Line    0    

Бухгалтерия 3.0. Ошибка загрузки билетов из Smartway

Внешние источники данных v8::БУ 8.3.14 БП3.0 Россия БУ Бесплатно (free)

Небольшое расследование причины, по которой часть билетов не загружается в Бухгалтерию из Smartway.

18.03.2021    189    maria_vl    1    

Расширение типового функционала работы с ККМ в 1с Розница 1.0 (добавление произвольного количества типов оплаты) Промо

ККМ v8 Розница Бесплатно (free)

У одного клиента,занимающегося розничной торговлей, появилась необходимость разделять продажи по типам оплаты в Z-отчете с бОльшим разнообразием,чем позволяет типовой функционал работы с ТО. Т.е. стандартную разбивку на наличную и безналичную оплату расширить до нал,оплата по платежным картам(безнал),банковским кредитам.В то же время исключить кредит из секции «оплата по безналу». Почему возникла такая потребность?Все просто,в бэк-офисе так проще сверять Отчет о розничных продажах с Z-отчетом.

28.02.2013    50886    ranger    17    

Правила обмена больше не нужны

Внешние источники данных Обмен через XML Перенос данных из 1C8 в 1C8 Распределенная БД (УРИБ, УРБД) WEB v8 Бесплатно (free)

Есть несколько общепринятых подходов к написанию обмена между 1С-системами, каждый из которых упирается в длительное изучение технологии, мучительную отладку правил конвертации и написание большого количества сервисного кода, в котором потом тяжело разобраться. О принципах работы универсального фреймворка liteExchange, который реализует быстрые обмены между 1С и внешними системами, и берет на себя всю техническую обвязку по стандартному преобразованию данных, на INFOSTART MEETUP Saint Petersburg.Online рассказал Николай Крылов.

17.03.2021    6326    Nikola23    35    

DaJet Exchange: обмен данными с 1С (часть 1)

Внешние источники данных v8 Бесплатно (free)

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

11.01.2021    2772    zhichkin    14    

Кэширование COM-соединения. Три способа Промо

Практика программирования Перенос данных из 1С7.7 в 1C8.X Внешние источники данных WEB v8 Россия Бесплатно (free)

Статья о трех способах кэширования COM-соединения в 1С:Предприятии 8.x.

11.04.2013    42268    YPermitin    41    

ККТ не зарегистрирована с указанной системой налогообложения (УНФ)

ККМ v8 УНФ Розничная и сетевая торговля (FMCG) Россия БУ УСН Бесплатно (free)

После перехода с ЕНВД на УСН или патент в УНФ возникает ошибка "ККТ не зарегистрирована с указанной системой налогообложения". В данной статье указаны действия, ведущие к решению проблемы.

05.01.2021    3092    vollove    5    

Структура обработки загрузки номенклатуры поставщика с примерами и комментариями (часть 1)

Внешние источники данных v8 УНФ Бесплатно (free)

В статье опишу вариант обработки для загрузки номенклатуры поставщика, блок загрузки групп и их состыковки.

12.10.2020    876    malikov_pro    0    

Чек коррекции в 1С:Управление торговлей 11

Кассовые операции v8 1cv8.cf БУ Бесплатно (free)

Чек, формируемый при осуществлении корректировки ранее произведенных взаиморасчетов, называется кассовым чеком коррекции. Кассовый чек коррекции необходимо формировать перед закрытием кассовой смены и, соответственно, перед формированием отчета о ее закрытии. Данное правило установлено в п. 4 ст. 4.3 Федерального закона от 22.05.2003 № 54-ФЗ.

22.08.2020    3255    Koder_Line    0    

Перенос данных из учетных программ Парус в конфигурации 1С Промо

Внешние источники данных v7.7 v8 БП2.0 ЗУП2.5 ЗКБУ БГУ 1С7:Бух 1С7:ЗиК 1С7:ББУ Россия БУ Госбюджет Бесплатно (free)

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

05.11.2012    52925    sklowsky    16    

Загрузка данных из Algoritm-S в конфигурацию "Бухгалтерия предприятия 3.0 (3.0.79.21) "

Розничная торговля Внешние источники данных v8 БП3.0 Розничная и сетевая торговля (FMCG) Фармацевтика, аптеки Россия Бесплатно (free)

В статье представлен шаблон обработки для загрузки некоторых данных из программы Algoritm-S в конфигурацию "Бухгалтерия предприятия 3.0 (3.0.79.21)

04.08.2020    1468    RPGrigorev    0    

Интеграции с сервером SQL. Быстро и просто

Интеграция Внешние источники данных v8 1cv8.cf Бесплатно (free)

Решаем вопросы экспорта/импорта данных в базы отличного от 1С происхождения.

06.07.2020    2850    Infector    4    

Если ККМ Атол + 1С Розница тормозит при печати чеков по сети, или экономим на покупке ККТ и ФР

Розничная торговля Адаптация типовых решений ККМ v8 Розница УТ11 Россия Бесплатно (free)

Очень медленная работа с ККТ по Tcp/ip или Как заставить две клиентских Розницы 1С печатать чеки на одной кассе ККТ онлайн Предыстория и чем все закончилось.

01.07.2020    4767    lepihin    10    

Сканируем без сканера или MXL to JPG Промо

Внешние источники данных Универсальные функции Печатные формы документов v8 1cv8.cf Бесплатно (free)

Хотите конвертировать документы в формат изображения менее чем за минуту, не имея сканера? Тогда эта статья для вас.

24.05.2012    34466    shakmaev    47    

Структура обработки загрузки цен и остатков поставщика с примерами и комментариями

Внешние источники данных WEB v8 1cv8.cf Россия Бесплатно (free)

В статье опишу структуру обработки по загрузке цен и остатков от поставщика с примерами.

27.06.2020    1940    malikov_pro    0    

Диадок. Подключаемый модуль. Отладка

Интеграция Внешние источники данных v8 1cv8.cf Бесплатно (free)

Небольшой пример, как работать с подключаемым модулем Диадок (для изменения УПД перед выгрузкой на сайт Диадок.). Отладка подключаемого модуля, если не смогли подключить стандартную отладку.

17.06.2020    7474    John_d    10    

Как мы загружаем данные в "Центр управления кассами Магнита"

Внешние источники данных Интеграция v8 1cv8.cf Бесплатно (free)

Статья о том, как мы делали механизм загрузки больших объемов данных в "Центр управления кассами Магнита"

08.05.2020    5449    chernenko_vv    25    

Интеграция СуперОкна7 и УНФ

Интеграция Внешние источники данных v8 УНФ Россия Бесплатно (free)

Изучаем базу данных СуперОкна7, смотрим возможности передачи и получения информации.

08.05.2020    2565    vostok1.dz    3    

Синхронизация БИТ:СКУД 8 с Parsec.Net 2.5

Интеграция Внешние источники данных v8 1cv8.cf Бесплатно (free)

Настройка синхронизации БИТ:СКУД 8 с Parsec.Net.2.5, выгрузка данных из внешней системы контроля доступа.

04.05.2020    4458    RPGrigorev    0    

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

Кассовые операции WEB v8 УТ11 Россия Бесплатно (free)

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

11.02.2020    2978    malikov_pro    0    

Одна ККТ для розничного магазина и Интернет-сайта

Розничная торговля ККМ v8 Россия Бесплатно (free)

Опыт использования одной онлайн-кассы для приема платежей в розничном магазине и на Интернет-сайте: технические подробности.

23.01.2020    7825    sivin-alexey    15    

Получение данных из Сигур

Внешние источники данных v8 1cv8.cf Бесплатно (free)

Получение данных из СКУД Сигур (без танцов с бубном)

25.12.2019    5482    skaoxy    6    

Подключение АТОЛ 91/92Ф к 1С:Касса

ККМ Кассовые операции Кассовые операции v8 1cv8.cf Россия Бесплатно (free)

Т.к. я не нашел данной информации в гугле (возможно, плохо искал), решил, что нужно оставить эту статью здесь, может, поможет кому.

10.09.2019    14751    rule_2    8    

Выгрузка из 1С номенклатуры со штрихкодами без программирования

Загрузка и выгрузка в Excel Внешние источники данных v8 УТ11 Россия Бесплатно (free)

Я так и не смог найти простой инструкции или обработки, чтобы выгрузить из 1С: Управление торговлей 11 номенклатуру вместе со штрихкодами, поэтому решил написать собственную инструкцию.

28.08.2019    19976    user1114182    4    

Вставка BLOB в таблицы ORACLE средствами 1С 8.х с использованием Microsoft OLEDB Provider

Внешние источники данных v8 1cv8.cf Россия Бесплатно (free)

Столкнулся с необходимостью выгружать картинки из 1С 8 в ORACLE-таблицу.

08.08.2019    4935    nomad_irk    0    

Чеки ККМ для расчетов с ИП по безналу. Новые обязательные реквизиты в чеке

Практика программирования ККМ Оптовая торговля Оптовая торговля Разработка v8 v8::ОУ УТ11 УУ Бесплатно (free)

Новые требования законодательства по пробитию чеков ККМ при расчетах с индивидуальными предпринимателями по безналу. Нюансы подключения интеграционной компоненты ДТО 10.5.0 на примере кассы ККТ АТОЛ 11Ф и конфигурации 1С УТ 11.4. Необходимые доработки типовой конфигурации УТ 11.4 для вывода на печать новых обязательных реквизитов: покупатель, ИНН, ГТД, страна происхождения.

22.07.2019    17148    ids79    16    

Выгрузка данных в таблицу MS SQL SERVER

Внешние источники данных v8 Бесплатно (free)

Процедура по выгрузке данных из 1C (таблица значений) в таблицу MS SQL SERVER через COM.

02.07.2019    10243    EvgenSav    18    

Аванкор: Паевые фонды - работа с кассой через web-сервер Атол

Фискальный регистратор Кассовые операции Кассовые операции v8 1cv8.cf Россия Абонемент ($m)

"Аванкор: Паевые фонды" - работа с он-лайн кассой через web-сервер Атол. Подключается как расширение + внешняя обработка.

1 стартмани

28.06.2019    4567    3    Solikamsk    0    

1С и компьютерное зрение: новый подход к контролю за ассортиментом магазина

Розничная торговля Внешние источники данных Розничная торговля v8 1С:Франчайзи, автоматизация бизнеса УУ Бесплатно (free)

Машинное зрение в магазинах и 1С. Как поднять эффективность торгового предприятия (магазин. кафе, шоурум и т.д.) с совершенно неожиданной стороны? Как получить реальные демографические данные покупателей и, самое главное, как это использовать в повседневной работе магазина? Как можно расширить привычные ABC и XYZ анализ, добавив в них пласт данных о трафике и демографии покупателей? Что необходимо для 1С, чтобы использовать данные видеоанализа людского трафика?

20.06.2019    9400    osipov_cvizi    16    

MS Access и 1С. Что, когда и зачем?

Практика программирования Внешние источники данных Разработка v8 Бесплатно (free)

Об использовании MS Access в связке с 1С. Можно ли использовать продукты Office на сервере. Когда Access может быть полезен. Примеры работы и другое.

09.04.2019    32354    YPermitin    46    

Оформление простых розничных продаж и возвратов в УТ 10.3.50.2 и некоторые особенности этого процесса

Бухгалтерский учет Кассовые операции Розничная торговля Кассовые операции Розничная торговля v8::ОУ УТ10 Розничная и сетевая торговля (FMCG) Россия УУ Бесплатно (free)

В данной короткой статье я хотел осветить наиболее простые случаи оформления розничных продаж и последующих возможных возвратов товаров в 1С УТ 10.3.50.2 с использованием фискального регистратора от фирмы Штрих М. Без сомнения тема является более глубокой т.к. есть ещё оптовые продажи, продажи в кредит, авансы. Рад буду если кто то дополнит моё повествование. Нацелено оно на старших и рядовых кассиров. Небольших торговых предприятий занимающихся розничной торговлей. Хотел бы что бы данная статья была со временем дополнена всеми нюансами оформления продаж и освещением использования всего набора инструментов онлайн касс, ОФД и ИФНС в современной торговле.

03.04.2019    13385    Umka23    9    

RabbitMQ + Конвертация Данных 3.0

Внешние источники данных Обмен через XML Интеграция Перенос данных из 1C8 в 1C8 v8 КД Бесплатно (free)

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

21.03.2019    28559    barelpro    87    

AltLinux + ККТ Атол 30Ф (55Ф) + сканер штрих-кода

Администрирование данных 1С ККМ Сканер штрих-кода Кассовые операции Розничная торговля Кассовые операции Розничная торговля v8 Розница Россия Бесплатно (free)

Описание опыта настройки контура AltLinux + платформа 1С 8.3 + Розница 2.2 базовая + сканер штрих-кода + ККТ 30Ф (55Ф).

14.02.2019    6741    Ceboo    4    

Загрузка ЭЛН (электронных листов нетрудоспособности) из файлов

Внешние источники данных Зарплата Зарплата v8 УПП1 Россия БУ ФОМС, ПФ, ФСС Бесплатно (free)

Что делать, если по каким-то причинам нет возможности разместить 1С и Крипто-Про на одном рабочем месте? Правильно - открывать конфигуратор и пилить. Благо, там не сложно. Непосредственно решение для УПП 1.3. Для ЗиК 2.5 и Комплексной автоматизации должно быть аналогично.

07.02.2019    7297    SatanClaws    5    

Возврат товаров, проданных в прошлых кассовых сменах, через Чек ККМ на возврат

Кассовые операции Практика программирования Кассовые операции v8 УТ11 Россия Бесплатно (free)

В Управлении торговлей 11.4 разработчики зачем-то сделали возможность делать "Чек ККМ на возврат" для Чеков ККМ, сделанных прошлыми датами. Причем чек на возврат создается и печатается, но потом при закрытии смены формируется "Отчет о розничных продажах", который ставит отрицательное количество по возвращенным позициям. Это в свою очередь ведет к тому, что с включенным контролем остатков этот "Отчет о розничных продажах" не проводится.

19.01.2019    9763    nagimo    27    

RabbitMQ, Python и Windows. Step By Step

Внешние источники данных v8 Бесплатно (free)

Работа с шиной RabbitMQ, используя Python на Windows. Пошаговый быстрый старт.

13.12.2018    10435    w.r.    9    

Печать Чека ККМ из Платежного поручения входящего. КА 1.1

Практика программирования Кассовые операции ККМ Кассовые операции v8 КА1 Бесплатно (free)

Доработка КА 1.1 для печати чека из платежного поручения входящего.

23.11.2018    10322    dima_finne    10    

Фискальный чек из 1С:Управление торговлей 10.3

Практика программирования Кассовые операции Кассовые операции v8::ОУ УТ10 Россия Бесплатно (free)

Способ в фискальном чеке из документа "Реализация товаров и услуг" УТ 10.3. печатать "полный расчет" и "наличные".

16.10.2018    9472    rch    2    

Внесение денежных средств в ККМ прямо из РМК

Практика программирования Кассовые операции Кассовые операции v8 Розница Розничная и сетевая торговля (FMCG) Россия Бесплатно (free)

В типовом механизме внесения ДС в кассу ККМ требуется наличие расходного кассового ордера, но основании которого будет создан документ "Внесение денежных средств в кассу ККМ". Если его нет (и соответственно остатков по РН "ДенежныеСредстваКПоступлениюНаличные"), то выводится сообщение "Нет документов по внесению ДС" (в противном случае открывается список РКО, на основании которых требуется создать внесение ДС). Данная доработка позволяет автоматически создать РКО (с видом операции "Выдача денежных средств в кассу ККМ") вместо выдачи сообщения об отказе и звонку бухгалтеру/администратору.

12.10.2018    6094    triviumfan    1    

Прикладной пример переработки стандартной формы РМК - Розница

Работа с интерфейсом Кассовые операции Розничная торговля Кассовые операции Розничная торговля v8 Розница УУ Бесплатно (free)

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

04.10.2018    21716    asdfgcom    76