Страница 23 из 31
ATOL драйвер 10.x
Добавлено: 17 Март 2021, 11:20
Игорь Столяров
gromov писал(а): ↑17 Март 2021, 11:08
А можно без вот этого, а по-человечески
А это не ответ на Ваш вопрос. Просто сегодня получил письмо от АТОЛ и выложил ссылку в раздел АТОЛ.
Как я понимаю, скучать не придётся.
Что касается эмулятора ФН, то цена очень хорошая. Но как-то смущает, что они предлагают фиксированные
настройки для тестового ОФД. Поддерживается ли работа со сторонними ОФД ? Непонятно ...
Там ведь вопрос с шифрованием данных при обмене с ОФД и наличия сертификата в ФН выданного ФНС.
ATOL драйвер 10.x
Добавлено: 17 Март 2021, 11:36
gromov
Поскольку у меня нет опыта работы с ккм вообще, хочется просто "поиграться". Понять, что и как. Получить наконец полноценный чек. Разобраться короче. А связь с ОФД это потом.
ATOL драйвер 10.x
Добавлено: 17 Март 2021, 11:58
Игорь Столяров
gromov писал(а): ↑17 Март 2021, 11:36
Получить наконец полноценный чек
Скажу про себя. Я полтора года назад выскулил полноценный МГМ:
https://online-kassa.ru/kupit/mgm-fn-1.1/
Вставил его в ФР ... и с тех пор он там и воткнут непонятно зачем. Я его не фискализировал, работать это не мешает.
Как-то в переписке с тех. поддержкой АТОЛ они вскользь упомянули, что без фикализации ФН мне будут недоступны
какие-то функции (наверно запросы по данным собственно ФН) - но я пока с такими не сталкивался.
ATOL драйвер 10.x
Добавлено: 17 Март 2021, 12:07
gromov
Хорошо, подумаю.
ATOL драйвер 10.x
Добавлено: 07 Апрель 2021, 16:43
gromov
Привет, коллеги. Вопрос по касс. чеку.
Клиент оплачивает услугу, кот. состоит из нескольких позиций. Все они ясное дело должны быть отражены в чеке. Но есть одно НО. Услуга может быть оплачена неполностью.
Например: услуга=2650, оплата = 500.
По совету ГУРУ умножаю каждую позицию на соотношение 500/2650. Логично.
Однако эта сволочь (Атол) все правильно считает и в итоге чека имеем 500.01. Некрасиво.
Покорежил слегка класс Admin-а. Добавил функцию регистрации итога и кой-чего в метод PrintCheck. Стало только хуже))). Из доки понял, что округлять можно копейки в меньшую сторону . Теперь в некоторых случаях имею так: в программе оплата 800, а в чеке 799. Я,как клиент, на это забил бы, но случаются персонажи, которые мозг из-за двух копеек вынесут. Подскажите, что сделать. Оставить эту копейку и хрен бы с ней ?
ATOL драйвер 10.x
Добавлено: 07 Апрель 2021, 17:35
Игорь Столяров
gromov писал(а): ↑07 Апрель 2021, 16:43
Однако эта сволочь (Атол) все правильно считает и в итоге чека имеем 500.01. Некрасиво.
Вы ведь сделали всё правильно, просто не поняли смысл использования LIBFPTR_PARAM_SUM (отброс копеек).
Что бы его применять нужно умножать сумму строки на коэффициент и не тупо округлять математически,
а всегда в большую сторону. Т.е. RoundHigh(12.0143) = 12.02 и т.д.
И потом эти копейки (включающие в себя в т.ч. и погрешность округления) отбросить. Вот и всё.
ATOL драйвер 10.x
Добавлено: 07 Апрель 2021, 18:08
gromov
Спасибо, попробую.
ATOL драйвер 10.x
Добавлено: 23 Ноябрь 2021, 10:08
Игорь Столяров
Часто бывает нужно получить какой-то параметр чека из ФН по его номеру.
Например, текущее законодательство не требует печатать в чеке СНО предприятия.
Предложу, в прекрасный класс Admin'а метод, который решает такую задачу.
Код: Выделить всё
! --- Получить из ФН ККТ параметр по номеру чека / тега
Atol10.GetCheckTag Procedure(Long xCheckNumber_, String xTag_) !,String
MyJSon JSONDataClass
Loc:RetValue CString(256)
Loc:TheRequest CString(256)
Loc:DocTLV Group
documentTLV Group
TheValue CString(256)
end
end
Code
If Self.FlagLoaded and (xCheckNumber_ > 0)
! Формируем запрос на получение данных чека по номеру из ФН ККТ
Loc:TheRequest = '{{"type":"getFnDocument","fiscalDocumentNumber":' & Clip(Left(xCheckNumber_)) & '}'
Self.SetParamStr(LIBFPTR_PARAM_JSON_DATA, Loc:TheRequest)
If libfptr_validate_json(Self.fptr) = 0 ! Проверка корректности запроса
Self.SetParamStr(LIBFPTR_PARAM_JSON_DATA, Loc:TheRequest) ! Надо повторно указывать запрос
If libfptr_process_json(Self.fptr) = 0 ! Есть положительный ответ из ФН на Ваш запрос
MyJSon.SetExternalName('TheValue',xTag_) ! Указать какой тег из ответа хотим получить
MyJSon.FromJSON(Self.GetParamStr(LIBFPTR_PARAM_JSON_DATA),Loc:DocTLV)
! Собственно отжимаем из ответа значение нужного тега
Loc:RetValue = MyJSon.UnEscapeString(Loc:DocTLV.documentTLV.TheValue)
end ! If libfptr_process_json(Self.fptr)
end ! If libfptr_validate_json(Self.fptr)
end ! If xCheckNumber_ > 0
Return Loc:RetValue
Теперь, например, можно получить реальный СНО чека после его печати:
Код: Выделить всё
CheckNomer = MyAtol.GetLastCheck() ! Номер последнего чека из ФН
Case Int(MyAtol.GetCheckTag(CheckNomer,'1055')) ! Тег 1055 - это СНО чека
Of LIBFPTR_TT_OSN ! 1. Общая СНО
TaxType = 1
Of LIBFPTR_TT_USN_INCOME ! 2. Упрощенная Доход
TaxType = 2
Of LIBFPTR_TT_USN_INCOME_OUTCOME ! 3. Упрощенная Доход минус Расход
TaxType = 3
Of LIBFPTR_TT_ENVD ! 4. ЕНВД
TaxType = 4
Of LIBFPTR_TT_ESN ! 5. Единый сельскохозяйственный налог
TaxType = 5
Of LIBFPTR_TT_PATENT ! 6. Патентная СНО
TaxType = 6
Else
TaxType = 0 ! ХЗ
end
ATOL драйвер 10.x
Добавлено: 25 Ноябрь 2021, 10:00
Игорь Столяров
Пример метода в класс ATOL10 для печати штрих-кода (с текстовым названием):
Код: Выделить всё
Atol10.PrintBarCode Procedure(String xStrText_,String xStrSCod_, Byte xVidCode_)
Code
If (Self.FlagLoaded = True) and (Clip(Left(xStrSCod_)) <> '') ! Если есть штрих-код
Self.SetParamStr( LIBFPTR_PARAM_BARCODE, xStrSCod_) ! Данные штрихкода
Self.SetParamInt( LIBFPTR_PARAM_ALIGNMENT, LIBFPTR_ALIGNMENT_CENTER) ! Выравнивание: по центру
Case xVidCode_
Of 2 OrOf 4 ! EAN13
Self.SetParamInt( LIBFPTR_PARAM_BARCODE_TYPE, LIBFPTR_BT_EAN_13) ! Тип штрихкода: EAN13
Self.SetParamBool(LIBFPTR_PARAM_BARCODE_PRINT_TEXT, True) ! Печать текста
Of 3 OrOf 5 ! QRCode
Self.SetParamInt( LIBFPTR_PARAM_BARCODE_TYPE, LIBFPTR_BT_QR) ! Тип штрихкода: QRCode
Self.SetParamInt( LIBFPTR_PARAM_SCALE, 6) ! Масштаб
end
If libfptr_print_barcode(Self.fptr) = LIBFPTR_OK
Self.LastSeparator = False
If InRange(xVidCode_,2,3)
Self.SetParamInt(LIBFPTR_PARAM_ALIGNMENT, LIBFPTR_ALIGNMENT_CENTER) ! Выравнивание ТЕКСТА
Self.PrintText(xStrText_,LIBFPTR_TW_NONE,0)
end
else
Self.ErrorMessage('libfptr_print_barcode')
end
end
ATOL драйвер 10.x
Добавлено: 29 Ноябрь 2021, 7:28
Admin
Приветствую всех.
Понадобилось добавить маркировку к молочке и воде. Ну и соответственно встали вопросы.
Товар с маркировкой по одной штуке в чек отдается?
Т.е. купили 10 пакетом молока, я должен их по одному каждый со свое маркировкой отдать в ККТ и на чеке 10 позиций будет?
Игорь Столяров, к тебе вопрос. Подсмотрел твой код:
Код: Выделить всё
If Clip(QSpisok.Dump) <> '' then Self.SetParamBiteArray(LIBFPTR_PARAM_MARKING_CODE,Self.RecodeMarking(QSpisok.Dump)).
Это рабочий код? Т.е. строку со сканера ты просто в Dump кидаешь?
А что за копирование делает метод RecodeMarking?
И где вызывается метод ParseMarkingCode с функцией libfptr_parse_marking_code - непонятно.
Можно мне как то расписать что делать?
Ну и коды у меня (со сканера) какие то коротенькие... типа
Код: Выделить всё
0104607004890062215KXIXZ^93Z/9z сыр
0104607091303254215oG3Fk^93U+m+ молоко
Там где ^ = CHR(29)
ATOL драйвер 10.x
Добавлено: 29 Ноябрь 2021, 8:34
Игорь Столяров
Admin писал(а): ↑29 Ноябрь 2021, 7:28
И где вызывается метод ParseMarkingCode с функцией libfptr_parse_marking_code - непонятно.
У меня метода ParseMarkingCode() добавляет в код маркировки коды <29>, которые съел сканер.
Если у Вас сканер возвращает марку с служебными кодами -> Вы сразу её передаёте в КММ в том
виде как получили со сканера:
Код: Выделить всё
Self.SetParamInt( LIBFPTR_PARAM_MARKING_CODE_TYPE, LIBFPTR_MCT_OTHER) ! Для ФФД 1.1 тип марки
Self.SetParamBiteArray(LIBFPTR_PARAM_MARKING_CODE, QSpisok.Dump).
Admin писал(а): ↑29 Ноябрь 2021, 7:28
Товар с маркировкой по одной штуке в чек отдается?
Т.е. купили 10 пакетом молока, я должен их по одному каждый со свое маркировкой отдать в ККТ и на чеке 10 позиций будет?
Абсолютно верно. То же самое и давно, если покупать 10 бутылок водки или пар кроссовок ...
ATOL драйвер 10.x
Добавлено: 29 Ноябрь 2021, 8:44
Admin
Admin писал(а): ↑29 Ноябрь 2021, 7:28
А что за копирование делает метод RecodeMarking?
И где вызывается метод ParseMarkingCode с функцией libfptr_parse_marking_code - непонятно.
Такс давай уточним все таки. По RecodeMarking я все понял. У нас сканер не сжирает код. Нам это похоже не нужно.
А дальше ты передал код в АТОЛ но не вижу вызова
libfptr_parse_marking_code
Я вот про этот код как на картинке. Типа если ты средствами ККТ декодируешь код то потом должен сам его в 1162 записать.
И вот этого я у тебя и не вижу. Может ты уже чего нового написал?
ATOL драйвер 10.x
Добавлено: 29 Ноябрь 2021, 8:53
Игорь Столяров
Admin писал(а): ↑29 Ноябрь 2021, 8:44
Может ты уже чего нового написал
Нет. Просто Вы пытаетесь смотреть сериал с 4-ой серии 3-го сезона.
Действительно, вначале марку нужно было разбирать, и каждый компонент записывать в свой тег.
Если Вам так в жизни повезло, то сейчас всё упростилось - просто передаём марку как массив байт
(единственная засада - но она легко обходится) и дальше добрый драйвер всё сделает сам ... см. рисунок.
ATOL драйвер 10.x
Добавлено: 29 Ноябрь 2021, 9:00
Admin
Игорь Столяров писал(а): ↑29 Ноябрь 2021, 8:53
Если Вам так в жизни повезло
ATOL драйвер 10.x
Добавлено: 29 Ноябрь 2021, 9:35
Admin
Дело за малым, прошить тестовый ККТ до ФФД 1.2
А то на текущей версии не работает маркировка.