Работа с кассой 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 3429 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 2970 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 2970 09.01.19 09:20 Сейчас в теме
(5) я не предлагаю отказаться от веб-сервера, и обращаться напрямую через com объект. Отправка http запросов логичный выбор. Просто ожидать ответа от веб-сервера можно по таймауту, без очереди заданий, опрашивая нужное задание на выполнение, для такого варианта нужно будет предусмотреть, чтобы результат запроса не кэшировался.
8. medangel 78 09.01.19 09:26 Сейчас в теме
(6) Согласны, что ваш вариант тоже "хорош". Но для себя выбрали асинхронность.
androgin; +1 Ответить
9. karpik666 2970 09.01.19 09:29 Сейчас в теме
(8) такой вариант как у вас хорош для интернет магазина, когда не требуется сию секундный ответ от фискального регистратора, и можно поместить задание в очередь и ожидать печати долгого времени.
12. medangel 78 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 78 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 78 10.01.19 17:35 Сейчас в теме
"Торговое место" в нашем случае это 1 reception (стойка администратора-регистратора), где обслуживается клиент. Наше субъективное мнение - закон не нарушается, проверки налоговых органов наши клиенты проходили успешно в прошлом году.
Спасибо за ссылку - будем предоставлять клиентам перед выбором схемы работы. Наша МИС "МедАнгел" поддерживает обе схемы.
13. androgin 28.01.19 14:46 Сейчас в теме
локально работает. Но не понимаю, почему удаленно не подключается касса )))
хост и порт указал, в роутере порт перенаправил на нужный сервер....
а не подключается))
14. medangel 78 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 78 01.03.19 16:08 Сейчас в теме
(18) У нас пока нет данной реализации.
19. tacu 01.03.19 10:35 Сейчас в теме
А кто-нибудь ставил для себя логическо-философскую задачу по закрытию смен в 1С и в ККТ:
если закрытие смены в 1С увязано с закрытием смены в ККТ (как это делается в типовых конфигурациях) то при работе нескольких юзеров с одной кассой мы получим конфликт, когда в 1С смена открыта, а в ККТ - закрыта предыдущим пользователем
?
и какие способы решения (с логическими обоснованиями, ессэсно, (и для пользователей тоже)) назовёт уважаемое сообщество?
21. medangel 78 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 78 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 78 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 78 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 416 30.01.20 04:56 Сейчас в теме
Подскажите, в типовые конфигурации в какой модуль нужно вставить данный функционал? какую процедуру переопределить для вызова ВыполнитьОперацию(Касса,Операция,ДополнительныеПараметры)?
42. user1008452 16.06.20 15:26 Сейчас в теме
Добрый день. По работе с сервером все ок, настроено и работает. Вопрос по отправке электронных чеков через ОФД, в данном описании электронно стоит ложь. Какие параметры необходимо дополнительно передавать чтобы чек отправился покупателю из ОФД?
43. user1008452 16.06.20 16:15 Сейчас в теме
(42) Разобрался
СтруктураКлиент = Новый Структура();
СтруктураКлиент.Вставить("emailOrPhone", ПочтовыйАдресПолучателя);
СтруктураЧека.Вставить("clientInfo",СтруктураКлиент);
44. FreeArcher 98 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 98 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
G_117539644445526335982; +1 Ответить
Оставьте свое сообщение

См. также

Сервер ККМ (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    88753    196    153    

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

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

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

12.10.2020    596    malikov_pro    0    

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

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

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

22.08.2020    1324    Koder_Line    0    

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

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

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

04.08.2020    1248    RPGrigorev    0    

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

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

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

28.02.2013    50692    ranger    17    

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

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

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

06.07.2020    2113    Infector    4    

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

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

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

01.07.2020    3031    lepihin    7    

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

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

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

27.06.2020    1713    malikov_pro    0    

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

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

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

11.04.2013    41631    YPermitin    41    

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

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

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

17.06.2020    4645    John_d    8    

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

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

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

08.05.2020    5152    chernenko_vv    25    

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

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

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

08.05.2020    2247    vostok1.dz    3    

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

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

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

05.11.2012    51887    sklowsky    16    

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

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

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

04.05.2020    4050    RPGrigorev    0    

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

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

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

11.02.2020    2780    malikov_pro    0    

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

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

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

23.01.2020    5445    sivin-alexey    13    

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

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

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

24.05.2012    34234    shakmaev    47    

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

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

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

25.12.2019    4546    skaoxy    5    

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

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

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

10.09.2019    9129    rule_2    8    

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

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

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

28.08.2019    13561    user1114182    4    

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

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

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

08.08.2019    4802    nomad_irk    0    

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

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

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

22.07.2019    16105    ids79    16    

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

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

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

02.07.2019    8891    EvgenSav    18    

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

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

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

1 стартмани

28.06.2019    3863    2    Solikamsk    0    

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

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

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

20.06.2019    9134    osipov_cvizi    16    

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

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

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

09.04.2019    29475    YPermitin    46    

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

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

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

21.03.2019    27036    barelpro    82    

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

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

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

14.02.2019    6393    Ceboo    4    

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

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

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

07.02.2019    6819    SatanClaws    4    

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

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

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

19.01.2019    8752    nagimo    27    

RabbitMQ, Python и Windows. Step By Step

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

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

13.12.2018    9618    w.r.    9    

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

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

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

23.11.2018    10018    dima_finne    10    

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

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

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

12.10.2018    5496    triviumfan    1    

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

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

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

04.10.2018    20281    asdfgcom    61    

Из 1С в IIKO: Передаем перемещения УТ в приходные накладные

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

Рассмотрение вариантов передачи документа "Перемещение товаров" из Управление торговлей 11 в документ "Приходная накладная" IIKO.

12.09.2018    8794    oyti    7    

Авансы, кредиты и предоплаты. Примеры чеков ФФД 1.05

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

В публикации рассмотрено, как должны выглядеть корректные чеки ФФД 1.05 при авансах, кредитах и предоплатах. Чеки получены с помощью демонстрационной базы 1С:Управление торговлей 11.4.5.54 (Платформа 8.3.11.3034).

30.07.2018    45520    vasilievil    28    

Отправка http запросов с Дайджест-аутентификацией из 1С на примере кассового аппарата MG N707TS

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

Возникала необходимость использовать кассовый аппарат MG N707TS под ubuntu, как известно, COM объекты не поддерживаются. На самом деле не все так сложно! Расписывать долго не буду, смотрите "Процедура КнопкаСформироватьНажатие" , может кому пригодится.

16.07.2018    6776    IgKR    8    

Чеки ККМ онлайн касс Атол на конфигурации КА 1.1

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

Онлайн касса печатает тип СНО УСН, хотя организация работает на ЕНВД.

13.07.2018    10727    dima_finne    6    

Подключение и настройка ККТ АТОЛ 22Ф / FPrint-22ПТК к конфигурации УТ 10.3

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

Опыт подключения и настройки онлайн-кассы "АТОЛ 22Ф / FPrint-22ПТК" к 1С конфигурации "УТ 10.3".

25.06.2018    43731    MarcoPolo3    31    

Учет и сверка Z-Отчетов ККМ в 1С

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

Думаю, все крупные компании при внедрении/эксплуатации 1С делают значительные изменения в ее конфигурации. Как бы вы ни пытались все бизнес процессы решить типовыми решениями от 1С, все равно наступает момент, когда приходится заняться конфигурированием. Я решил написать серию статей, где постараюсь описать решения, которые мне пришлось реализовывать в разных компаниях. Если разработчики 1С посчитают что-то интересным для внедрения в типовые решения, мы будем только рады. В текущей статье речь пойдет о кассовых z-отчетах в 1С.

03.06.2018    21596    dima_home    12    

IIKO (Айко). Обмениваемся накладными с 1С

Внешние источники данных v8 БП3.0 Рестораны, кафе и фаст-фуд БУ УУ Бесплатно (free)

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

01.06.2018    16740    oyti    20