Нужна помощь в настройке ффд 1.2 на УТ 10.3.71.3 для работы с маркировкой обуви и текстиля. Конфигурация последняя, прошивка ккт атол 5.8.3 , драйвер 10.9.0.4. До перехода на ффд 1.2 ни каких проблем с маркировкой не было. После обновления ни каких ошибок не показывает, чеки в налоговую уходят, даже что то пытается отправить в честный знак
"1059" : [
{
"1023" : 1,
"1030" : "Полотенце пляжное (карта Крыма, морская тематика) (шт)",
"1043" : 380,
"1079" : 380,
"1163" : {
"1305" : "(01)02900003238333(21)LeQnE!YCKZ3DV" },
но в чз ничего не доходит. Есть мнение что код не должен содержать ковычки.
У кого-то вообще получилось работать в такой конфигурации?
Добрый день!
Хочу поделиться своим опытом трехдневного запуска ФФД 1.2. )))
Имеем: УТ 10.3.72.2 (все штатно, чеки бьем не из РМК, а из обычного интерфейса самого документа Чека ККМ), Штрих RR-01Ф (версия прошивки: C.3.41963 от 26.08.2021)
Сразу хочу сказать спасибо этой ветки и особенно "andrew.ab" - меня хотя бы направили на путь истинный.
Из коробки естественно ничего не заработало и чем дальше я начал вникать что не так, тем больше понимал, что много что не так. Когда я все для себя финишировал (начали нормально пробиваться чеки), то пришел к выводу, что куча людей доделывают эту программу и каждый из них не может все связать воедино. Элементарный пример:
"ПодключаемоеОборудованиеУниверсальныйДрайверКлиент" функция:"ФискализацияЧека":
Строка:
ДанныеЧека = МенеджерОборудованияВызовСервера.ПолучитьXMLПакетДляФискализацияЧека_ТО(ОбщиеПараметры, ВходныеПараметры, СуммаЧека, ШиринаСтроки, НовыйФормат, ВерсияФФД, ПараметрыФискализации);
В этой строке мы получаем XMLку для пробития чека, но на практике мы ее получаем просто так, так как эти данные нигде далее не используются (ну вот зачем вводить людей в заблуждение и загромождать код). Это лирика и эмоции!!!!
Теперь к делу.
1. Допилил обработку ShtrihMkkt.epf (файл прикреплю). А именно: запихнул в макет штриховскую компоненту от дайвера 5.16.0.886 (в драйвере было две компоненты, одна от ФФД1.1, другая от ФФД1.2); добавил три функции: ЗапросКМ; ПолучитьРезультатыЗапросаКМ; ПодтвердитьКМ (что интересно, в поставке Атоловской - они есть); подправил функцию "СоздатьОбъектДрайвера", чтобы попытка не валилась, т.к. компонента от ФФД1.2 теперь называется SMDrvFR1C34.
2. В общем модуле "МенеджерОборудованияВызовСервера" в функции "РевизияИнтерфейсаДрайверов" изменил:
РевизияИнтерфейса = 3004; //MAScorporation - было 3003
Не смотря на то, что после подмены компоненты (от последнего штриховского драйвера), в котором ревизия начинает определяться как 3004 (ФФД1.2), это место возвращает все на 3003 (ФФД1.1).
3. В этом же модуле добавил функцию (для добавление отсутствующего символа GS1, правда "andrew.ab", здесь немного ошибся и написал неверный символ разделения, точней он верный если драйверу напрямую подкидывать марку в виде строки, но в виде Base64 это не прокатывает):
4. В этом же модуле в процедуре "СформироватьXMLПакетДляФискализацияЧека" изменил:
Если ПараметрыФискализации.РевизияИнтерфейса >= 3004 Тогда
//MAScorporation - закоментил условие и добавил свое условие
//Если Не ПустаяСтрока(ТекущаяПозиция.КонтрольнаяМарка) Тогда
// ЗаписьXML.ЗаписатьАтрибут("MarkingCode", XMLСтрока(ТекущаяПозиция.КонтрольнаяМарка));
//КонецЕсли;
Если НЕ ПустаяСтрока(ТекущаяПозиция.ШтрихкодBase64) Тогда
ДанныеКодаТовара = МенеджерОборудованияМаркировкаКлиентСервер.РазобратьШтриховойКодТовара(ТекущаяПозиция.ШтрихкодBase64, Истина);
РеквизитКодаТовара = ДанныеКодаТовара.РеквизитКодаТовара;
Если НЕ ПустаяСтрока(РеквизитКодаТовара) И Не ПустаяСтрока(ДанныеКодаТовара.ШтрихкодBase64) Тогда // Запись тега 1163
ШтрихкодBase64 = ВставкаСимволаРазделителяGS1ВШтрихкод(ДанныеКодаТовара);
ЗаписьXML.ЗаписатьАтрибут("MarkingCode", XMLСтрока(ШтрихкодBase64));
КонецЕсли;
КонецЕсли;
Если Не ПустаяСтрока(ТекущаяПозиция.КодЕдиницыИзмерения) Тогда
Показать
5. В модуле "МенеджерОборудованияКлиент" в процедуре "НачатьВыполнениеКомандыТО" вставил попытку перед выполнением команды:
Попытка
Если ЗначениеЗаполнено(ВходныеПараметры.КонтрольнаяМарка) Тогда //MAScorporation - запишим правильно ШК
ДанныеКодаТовара = МенеджерОборудованияМаркировкаКлиентСервер.РазобратьШтриховойКодТовара(ВходныеПараметры.КонтрольнаяМарка, Истина);
РеквизитКодаТовара = ДанныеКодаТовара.РеквизитКодаТовара;
Если НЕ ПустаяСтрока(РеквизитКодаТовара) И Не ПустаяСтрока(ДанныеКодаТовара.ШтрихкодBase64) Тогда // Запись тега 1163
ШтрихкодBase64 = МенеджерОборудованияВызовСервера.ВставкаСимволаРазделителяGS1ВШтрихкод(ДанныеКодаТовара);
ВходныеПараметры.КонтрольнаяМарка = ШтрихкодBase64;
КонецЕсли;
КонецЕсли;
Исключение КонецПопытки;
Если Команда = "RequestKM" Тогда
Результат = ОбработкаОбслуживания.ЗапросКМ(ОбъектДрайвера, ПараметрыККТ, ВходныеПараметры, ВыходныеПараметры, Идентификатор);
ИначеЕсли Команда = "GetProcessingKMResult" Тогда
Результат = ОбработкаОбслуживания.ПолучитьРезультатыЗапросаКМ(ОбъектДрайвера, ПараметрыККТ, ВходныеПараметры, ВыходныеПараметры, Идентификатор);
ИначеЕсли Команда = "ConfirmKM" Тогда
Результат = ОбработкаОбслуживания.ПодтвердитьКМ(ОбъектДрайвера, ПараметрыККТ, ВходныеПараметры, ВыходныеПараметры, Идентификатор);
КонецЕсли;
Показать
6. В модуле "РозничныеПродажиКлиент" процедура "ПроверитьКодМаркировкиСредствамиККТ" поставил попытку (обратил внимание, что всегда проверяемая марка имеет один и тотже статус и не важно продажа это или возврат):
ПараметрыСканирования = ШтрихкодированиеИСКлиент.ПараметрыСканирования(ФормаВладелец);
Попытка //MAScorporation - иначе всегда будет "Возврат в оборот при розничной реализации"
Если ФормаВладелец.ВидОперации=Перечисления.ВидыОперацийЧекККМ.Продажа Тогда
ПараметрыСканирования.ВидОперацииИСМП = Перечисления.ВидыОперацийИСМП.ВыводИзОборотаРозничнаяПродажа;
КонецЕсли
Исключение КонецПопытки;
Если ФормаПросмотра <> Неопределено
7. В модуль справочника "КассыККМ" функцию "ПараметрыКассыККМ" сделал правку в запросе, т.к. без этой правки всегда возвращается первая попавшаяся Касса ККМ и не факт что нужная вам.
Запрос.Текст ="ВЫБРАТЬ
| КассыККМ.Ссылка КАК КассаККМ,
| КассыККМ.Владелец КАК Организация,
| КассыККМ.СерийныйНомер КАК СерийныйНомер,
| ТорговоеОборудование.Идентификатор КАК ИдентификаторУстройства
|ИЗ
| Справочник.КассыККМ КАК КассыККМ
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ТорговоеОборудование КАК ТорговоеОборудование
| ПО КассыККМ.Ссылка = ТорговоеОборудование.КассаККМ
|ГДЕ
| КассыККМ.Ссылка = &Ссылка
| И ТорговоеОборудование.Компьютер = &Компьютер
| И ТорговоеОборудование.Подключено = ИСТИНА";
Запрос.УстановитьПараметр("Ссылка", КассаККМ);
Запрос.УстановитьПараметр("Компьютер", ИмяКомпьютера());//MAScorporation - добавил это условие и еще: | И ТорговоеОборудование.Подключено = ИСТИНА
Показать
8. В модуле справочника "ТорговоеОборудование" в функции "ПолучитьПараметрыРегистрацииУстройства" в конце добавил:
Дело в том, что запрос который в этой функции отрабатывает, всегда будет возвращать пустоту, т.к. идет обращение к таблице справочника, которая на данный момент всегда пустая. Если не сделать эту правку (в моем случае), то не будет инициироваться процесс проверки кодов марки фискальником.
9. И на последок абсурдный косяк. В модуле документа "ЧекККМ" в функции "ПараметрыОперацииФискализацииЧека"
вместо строки:
написал условие (без него всегда будут пробиваться чеки прихода ))))) ):
Если ВидОперации=Перечисления.ВидыОперацийЧекККМ.Возврат Тогда //MAScorporation
ПараметрыОперацииФискализацииЧека.ТипРасчета = ПредопределенноеЗначение("Перечисление.ТипыРасчетаДенежнымиСредствами.ВозвратДенежныхСредств");
Иначе
ПараметрыОперацииФискализацииЧека.ТипРасчета = ПредопределенноеЗначение("Перечисление.ТипыРасчетаДенежнымиСредствами.ПриходДенежныхСредств");
КонецЕсли;
10. Небольшой совет. Если идет попытка пробить некорректную марку и фискальник стопориться с ошибкой:
"d3h код товара не распознан", то зайдите в свойства фискильника и исправьте:
Таблица 17 строка 41 "RUS принимать все КТ" = 1
В этом случае независимо от корректности марки чек будет печататься.
(94)Драйвер последний стоит? В настройке оборудования(параметры фискализации) 3.4 значение или 3.2? (может надо вручную брать компоненту из папки с драйвером для 1с). Сам пока не тестил новый релиз, отпишусь как проверю.
(96)Ещё такой момент в информации по обновлению.Внимание! Для корректной работы механизма проверки кодов маркировки средствами ККТ в настройках пользователя необходимо указать значение настройки Основная касса ККМ.Прочее
Для корректной работы механизма проверки кодов маркировки средствами ККТ в настройках пользователя необходимо указать значение настройки Основная касса ККМ.Прочее
(100) РС Настройки пользователей, для штриха нет нормальной обработки торгового обслуживания для УТ 10.3, в новый документ подставляется ККМ из настроек пользвоателя, так же в УТ 10.3 не корректно будет работать если используете несоклько касс с разным ФФД, т.к. поиск ид устройства идет по "модели"(получается или несколько разных обработок ККТ использовать, или пилить)
(100) Сервис - Настройки пользователя - Розничная торговля и торговое оборудование - Основная касса ККМ.
Сам не проверял ещё пробитие чеков ККТ Штрих. У кого-то получилось пробить без ошибок на последнем релизе и чтобы данные ушли в ЧЗ?
(104) "а воз и ныне там" в новом релизе. Теперь проблемы с кодированием марки в base64. После декодирования получается мусор.
Допиленную обработку под Штрих приложил. Там не было методов ЗапросКМ, ПолучитьРезультатыЗапросаКМ, ПодтвердитьКМ.
ационнаяКомпонента.SMDrvFR1C3 не поддерживает метод ОткрытьСессиюРегистрацииКМ
даже если версия интерфейса поднять до 3004 принудительно, но оно и понятно нужен компонента SMDrvFR1C34, которая есть в Ут 11, но запихать ее в обработку торгового обслуживания ShtrihMkkt не получается не взлеатет почему то, не может создать объект драйвера
(110) У нас обработка взлетела, ревизию 3004 поднимать не нужно. Должно работать на 3003.
Сейчас решаем проблему с кодом марки, т.к. для штриха надо вставлять символ <0x1D> в марку. инструкия
(111)подскажите какой драйвер штриха используете 4.15 или 5.16, а так же какую итеграционную компоненту используете? ФФД 1.2 как я понял требует 5.16 и новую интеграционную компоненту, правильно ли я понял что у вас получается передать в кассу марку при использовании ревизии 3003 и используя дописанную вами обработку обслуживания без проверки марки на ктт
В модуле МенеджерОборудованияВызовСервера надо закомментить:
Процедура ЗаписатьДанныеКодаТоварнойНоменклатуры(ЗаписьXML, Позиция, ПараметрыФискализации)
ДанныеКодаТоварнойНоменклатуры = Позиция.ДанныеКодаТоварнойНоменклатуры;
ДанныеКодаТовара = Неопределено;
// Код товара заполняемся для "товара".
Если Позиция.ПризнакПредметаРасчета <> Перечисления.ПризнакиПредметаРасчета.Товар
И Позиция.ПризнакПредметаРасчета <> Перечисления.ПризнакиПредметаРасчета.ПодакцизныйТовар Тогда
Возврат;
КонецЕсли;
Если ПараметрыФискализации.РевизияИнтерфейса > 3001 Тогда
Если НЕ ПустаяСтрока(Позиция.КодВидаНоменклатурнойКлассификации) Тогда
ДанныеКодаТовара = МенеджерОборудованияМаркировкаКлиентСервер.РазобратьШтриховойКодТовара(Позиция.КодВидаНоменклатурнойКлассификации);
РеквизитКодаТовара = ДанныеКодаТовара.РеквизитКодаТовара;
ИначеЕсли НЕ ПустаяСтрока(Позиция.ШтрихкодBase64) Тогда
ДанныеКодаТовара = МенеджерОборудованияМаркировкаКлиентСервер.РазобратьШтриховойКодТовара(Позиция.ШтрихкодBase64, Истина);
РеквизитКодаТовара = ДанныеКодаТовара.РеквизитКодаТовара;
Иначе
ДанныеКодаТовара = МенеджерОборудованияМаркировкаКлиентСервер.РазобратьШтриховойКодТовара(Позиция.Штрихкод);
РеквизитКодаТовара = ДанныеКодаТовара.РеквизитКодаТовара;
КонецЕсли;
Если ПараметрыФискализации.РевизияИнтерфейса >= 3003 Тогда // 3.4 и выше
// ФФД 1.2
Если НЕ ПустаяСтрока(РеквизитКодаТовара) И Не ПустаяСтрока(ДанныеКодаТовара.ШтрихкодBase64) Тогда // Запись тега 1163
//комментим
//Если ПустаяСтрока(Позиция.КонтрольнаяМарка) Тогда
ЗаписьXML.ЗаписатьНачалоЭлемента("GoodCodeData");
ЗаписьXML.ЗаписатьАтрибут("MarkingCode", XMLСтрока(ДанныеКодаТовара.ШтрихкодBase64));
ЗаписьXML.ЗаписатьКонецЭлемента();
//КонецЕсли;
//комментим
КонецЕсли;
Иначе
// ФФД 1.1
Показать
в процедуре СформироватьXMLПакетДляФискализацияЧека комментим:
Если ПараметрыФискализации.РевизияИнтерфейса >= 3004 Тогда
//комментим
//Если Не ПустаяСтрока(ТекущаяПозиция.КонтрольнаяМарка) Тогда
// ЗаписьXML.ЗаписатьАтрибут("MarkingCode", XMLСтрока(ТекущаяПозиция.КонтрольнаяМарка));
//КонецЕсли;
//комментим
Если Не ПустаяСтрока(ТекущаяПозиция.КодЕдиницыИзмерения) Тогда
МераКоличестваПредметаРасчета = МенеджерОборудованияКлиентСервер.МераКоличестваПредметаРасчетаПоКодуЕдиницыИзмерения(ТекущаяПозиция.КодЕдиницыИзмерения);
МераКоличестваПредметаРасчета = МенеджерОборудованияКлиентСервер.КодМерыКоличестваПредметаРасчетаККТ(МераКоличестваПредметаРасчета);
ЗаписьXML.ЗаписатьАтрибут("MeasureOfQuantity", XMLСтрока(МераКоличестваПредметаРасчета));
КонецЕсли;
ДробноеКоличество = ТекущаяПозиция.ДробноеКоличество;
Если Не ПустаяСтрока(ДробноеКоличество.Числитель) И Не ПустаяСтрока(ДробноеКоличество.Знаменатель) Тогда
Если Число(ДробноеКоличество.Числитель) > 0 И Число(ДробноеКоличество.Знаменатель) > 0 Тогда
ЗаписьXML.ЗаписатьНачалоЭлемента("FractionalQuantity");
ЗаписьXML.ЗаписатьАтрибут("Numerator", XMLСтрока(ДробноеКоличество.Числитель));
ЗаписьXML.ЗаписатьАтрибут("Denominator", XMLСтрока(ДробноеКоличество.Знаменатель));
ЗаписьXML.ЗаписатьКонецЭлемента();
КонецЕсли;
КонецЕсли;
ЗаписатьОтраслевойРеквизит(ЗаписьXML, ТекущаяПозиция.ОтраслевойРеквизит);
КонецЕсли;
Показать
Так же надо настроить сканер, чтобы он передевал символ <0x1D> в неизмененном виде при сканировании марки.
Это является обычным управляющим символом в кодировке ASCII, а точнее символом-разделителем.
Он уже зашифрован в QR-код, однако сканера по умолчанию не настроены на передачу после считывания управляющих символов.
(112)не совсем понимаю вы говорите что используете ревизию 3003, но приводите примпры где комментите куски кода где используется 3004+ можете пояснить?
(111)а у вас точно формат ффд 1.2, новый формат требует открыть сессию на ккт, сделать запрос, получить ответ, а потом уже фискализировать чек как я понял в этом и смысл чтобы проверять коды, на 3003 мне писала что касса не поддерживает операцию проверки.
А какую интеграционную компоненту используете в дописанном драйвере ?
или вернее при указывании полного шк на ревизии 3003 с вашими правками в модуле, касса выдает сообщение D3h, Ошибка привязки КМ
Либо сканер настраивать, чтобы он не вырезал <0x1D> при считывании QR-кода, либо костыль дописывать в модуле МенеджерОборудованияВызовСервера:
Процедура ЗаписатьДанныеКодаТоварнойНоменклатуры(ЗаписьXML, Позиция, ПараметрыФискализации)
ДанныеКодаТоварнойНоменклатуры = Позиция.ДанныеКодаТоварнойНоменклатуры;
ДанныеКодаТовара = Неопределено;
// Код товара заполняемся для "товара".
Если Позиция.ПризнакПредметаРасчета <> Перечисления.ПризнакиПредметаРасчета.Товар
И Позиция.ПризнакПредметаРасчета <> Перечисления.ПризнакиПредметаРасчета.ПодакцизныйТовар Тогда
Возврат;
КонецЕсли;
Если ПараметрыФискализации.РевизияИнтерфейса > 3001 Тогда
Если НЕ ПустаяСтрока(Позиция.КодВидаНоменклатурнойКлассификации) Тогда
ДанныеКодаТовара = МенеджерОборудованияМаркировкаКлиентСервер.РазобратьШтриховойКодТовара(Позиция.КодВидаНоменклатурнойКлассификации);
РеквизитКодаТовара = ДанныеКодаТовара.РеквизитКодаТовара;
ИначеЕсли НЕ ПустаяСтрока(Позиция.ШтрихкодBase64) Тогда
ДанныеКодаТовара = МенеджерОборудованияМаркировкаКлиентСервер.РазобратьШтриховойКодТовара(Позиция.ШтрихкодBase64, Истина);
РеквизитКодаТовара = ДанныеКодаТовара.РеквизитКодаТовара;
Иначе
ДанныеКодаТовара = МенеджерОборудованияМаркировкаКлиентСервер.РазобратьШтриховойКодТовара(Позиция.Штрихкод);
РеквизитКодаТовара = ДанныеКодаТовара.РеквизитКодаТовара;
КонецЕсли;
Если ПараметрыФискализации.РевизияИнтерфейса >= 3003 Тогда // 3.4 и выше
// ФФД 1.2
Если НЕ ПустаяСтрока(РеквизитКодаТовара) И Не ПустаяСтрока(ДанныеКодаТовара.ШтрихкодBase64) Тогда // Запись тега 1163
//sweetand
_ШтрихкодBase64 = ВставкаСимволаРазделителяGS1ВШтрихкод(ДанныеКодаТовара);
//Если ПустаяСтрока(Позиция.КонтрольнаяМарка) Тогда
ЗаписьXML.ЗаписатьНачалоЭлемента("GoodCodeData");
ЗаписьXML.ЗаписатьАтрибут("MarkingCode", XMLСтрока(_ШтрихкодBase64));
ЗаписьXML.ЗаписатьКонецЭлемента();
//КонецЕсли;
//sweetand
КонецЕсли;
Иначе
// ФФД 1.1
для этого в модуле ПодключаемоеОборудованиеУниверсальныйДрайверКлиент в Функции ФискализацияЧека(ОбъектДрайвера, Параметры, ПараметрыПодключения, ВходныеПараметры, ВыходныеПараметры); понизить ревизию
Если ПараметрыФискализации.РевизияИнтерфейса >= 3003 Тогда//sweetand
ТекущийСтатус = МенеджерОборудованияКлиент.ПроверкаКодаМаркировки(ПараметрыПодключения.ИДУстройства);//sweetand
// Если есть текущая проверка КМ
Если НЕ ПустаяСтрока(ТекущийСтатус.ИдентификаторЗапроса) Тогда
Попытка
ОбъектДрайвера.ПодтвердитьКМ(ПараметрыПодключения.ИДУстройства, ТекущийСтатус.ИдентификаторЗапроса, 0);
МенеджерОборудованияКлиент.УстановитьПроверкуКодаМаркировки(ПараметрыПодключения.ИДУстройства);
Исключение
СформироватьОшибкуДрайвера(ВыходныеПараметры, "ЗапросКМ", ОписаниеОшибки());
Возврат Результат;
КонецПопытки;
КонецЕсли;
КонецЕсли;
(120) понизил версию до 3003, не помогает, т.к. обращение а итоге для проверки марки на ккм происходит все равно используя компоненту AddIn.ИнтеграционнаяКомпонента.SMDrvFR1C3, а у нее нет методов ОткрытьСессиюРегистрацииКМ и т.д(которые связаны с проверкой ккм), у вас на листинге кода, есть параметр ТекущийСтатус.ИдентификаторЗапроса который без открытия сессии регистрации ККМ не получить, не понимаю как у вас работает, т.к. везде где идет вызовов методов проверки марки средствами ККМ используется ревизия 3004, понизил ее, но методов у компоненты нет, затык................
ПодключаемоеОборудованиеУниверсальныйДрайверКлиент-->ОткрытьСессиюРегистрацииКМ-->(строка 2189 метода Результат = ОбъектДрайвера.ОткрытьСессиюРегистрацииКМ(ПараметрыПодключения.ИдентификаторУстройства);
)
какая у вас версия компоненты в объекте ОбъектДрайвера(см.скрин)
Добрый день. Предстоит у клиента обновление УТ до релиза 10.3.72.2 и переход кассы атол на ФФД 1.2. У кого ни будь без программирования заработало продажа маркированного товара?
У клиента 10.3.72.2 существенно дописана, но ее удалось нормально запустить. в чеках выходит М+ и в ЧЗ марки списываются. Пришлось тестировать всю схему пробития чека, вносить дописки, сделанные для клиента, исправлять косяки 1С ников. Клиент работает во фронте кассира, там вообще сильно пробитие чека переписали, без фронта не тестировали.
(130) т.е. и тот и тот тег есть? Странно
Мы сейчас удачно списываем отправляя вот такое
"<FiscalString Name="1005 полотенце махровое" Quantity="1" PriceWithDiscount="139" AmountWithDiscount="139" DiscountAmount="0" Department="1" VATRate="20" VATAmount="23.17" PaymentMethod="4" CalculationSubject="1" CountryOfOrigin="860" CustomsDeclaration="10323010/060421/0056365/1 " MarkingCode="полный код в base64">"
Решили проверить и написали в ЧЗ запрос на корректность.
Ответ:
"Формат Ваших уведомлений о реализации маркированного товара чеков ФД 71942 и ФД 71943 соответствует приказу ФНС России от 14.09.2020 n ед-7-20/662@ "об утверждении дополнительных реквизитов фискальных документов и форматов фискальных документов, обязательных к использованию" (зарегистрировано в минюсте россии 09.12.2020 n 61361) Приложение 2. Данные уведомления были успешно обработаны и указанные в них коды маркировки были выведены из оборота на основании корректного указания значения в теге 1162 productCode."
Но 1162 это же не ФФД 1.2. Толи они ошиблись, толи лыжи не едут.
Тестирование проводилось для фронта кассира с настройкой проверки марок ККТ -перед пробитием чека (вариант при сканировании не тестировали) ... ну и конфа сильно изменена , много дописок.
Если ШтрихкодированиеИСМПКлиентСервер.ЗаполнитьПараметрыСканированияДокументаРозничнойПродажи(ПараметрыСканирования, ВидПродукции) Тогда
Если Контекст.ВидОперации <> Перечисления.ВидыОперацийЧекККМ.Продажа Тогда //Добавить условие
ШтрихкодированиеИСМПКлиентСервер.ЗаполнитьПараметрыСканированияДокументаРозничногоВозврата(ПараметрыСканирования, ВидПродукции);
КонецЕсли; //Добавить условие
Косяк 2й: ЧекККМ Модуль объекта процедура ПараметрыОперацииФискализацииЧека строка модуля 2111
Косяк 3й: Чек ККМ ФормаРегистрацииПродаж процедура ПровестиИРаспечататьЧекВФорме номер строки 2423
Результат = ФискализироватьЧекВФорме(ФУ, ДопДанные, Ответ, Отказ, ОшибкаТО, ПараметрыККТ);
Возврат Истина; //Добавить строку
Иначе
И пришлось добавить еще код в модуле РозничныеПродажиКлиент процедура ПроверитьКодМаркировкиСредствамиККТ строка 37
Если ФормаПросмотра <> Неопределено
И МенеджерОборудованияВызовСервера.ФискальноеУстройствоПоддерживаетПроверкуКодовМаркировки(ФормаПросмотра.ОборудованиеККТ, ПараметрыККТ) Тогда
ПараметрыСканирования.ТребуетсяПроверкаСредствамиККТ = Истина;
ПараметрыСканирования.ККТФФД12ИСМП = ФормаПросмотра.ОборудованиеККТ;
//Добавить условие +
ИначеЕсли ОбщегоНазначенияКлиентСервер.ЕстьРеквизитИлиСвойствоОбъекта(ФормаВладелец, "КассаККМ") Тогда
ПараметрыКассыККМ = РозничныеПродажиВызовСервера.ПараметрыКассыККМ(ФормаВладелец.КассаККМ);
Если ПараметрыСканирования.ТребуетсяПроверкаСредствамиККТ <> Истина И ПараметрыКассыККМ <> Неопределено И ПараметрыКассыККМ.Свойство("ИдентификаторУстройства") И МенеджерОборудованияВызовСервера.ФискальноеУстройствоПоддерживаетПроверкуКодовМаркировки(ПараметрыКассыККМ.ИдентификаторУстройства, ПараметрыККТ) Тогда
ПараметрыСканирования.ТребуетсяПроверкаСредствамиККТ = Истина;
ПараметрыСканирования.ККТФФД12ИСМП = ПараметрыКассыККМ.ИдентификаторУстройства;
КонецЕсли;
//Добавить условие -
КонецЕсли;
Показать
На счет последней дописки ... может я че неправильно настроил ... не указал основную кассу. Хз , но так работает.
Это все, что вспомнил, касаемо типового кода. Но еще раз обращаю внимание, что конфа сильно переписана. Получение полной марки в ней свое, типовой механизм не используется.
(134) Спасибо за публикацию косяков 1С. С вашими правками на УТ 10.3.72.2 и обработкой обслуживания из данного релиза (с атоловскими дровами 10.9.0.8) всё работает. Хочу для других отметить: чтобы при сканировании марки форма подключила ККТ, нужно чтобы в РегистрСведений.ТорговоеОборудование была только одна запись с ресурсом "КассаККМ". Если будет несколько записей с одной и той же КассойККМ, то при сканировании марки может возникнуть ситуация, когда форма будет выводить сообщение о том, что касса не подключена (берется первая попавшаяся запись из РегистрСведений.ТорговоеОборудование). Не наступайте на мои грабли :) скопировал рабочую базу и запустился на другом компе, а форма пытается подключиться к кассе на другой машине. Из формы документа тоже всё работает, но нужно многое перенести из модуля формы регистрации продаж.
СтатусЗапроса = -1;
РезультатОперацииXML = "";
Счетчик = 0;
Пока СтатусЗапроса <> 0 И СтатусЗапроса <> 2 И Счетчик < 10 Цикл
Результат = ОбъектДрайвера.ПолучитьРезультатыЗапросаКМ(ПараметрыПодключения.ИДУстройства, РезультатОперацииXML, СтатусЗапроса);
Если НЕ Результат Тогда
ОбъектДрайвера.ПолучитьОшибку(ОписаниеОшибки);
Прервать;
КонецЕсли;
Если СтатусЗапроса = 0 Тогда
Прервать;
КонецЕсли;
ТекВремя = ТекущаяДата();
Пока ТекВремя = ТекущаяДата() Цикл
КонецЦикла;
Счетчик = Счетчик + 1;
КонецЦикла;
Если СтатусЗапроса = 0 Тогда
Показать
Подскажите где тут СтатусЗапроса может принять = 0 ?????????????
У меня Результат выдает Истина. Но при этом через 10 секунд выбивает в ошибку что ответа нет. А ответ это СтатусЗапроса = 0. Но где в коде он принимает значение 0 я не пойму. Переделываю свою конфу под 1.2.
Еще вопрос - ну проверил я все эти коды и че дальше-то делать? как в чек передать что коды проверены и их можно списывать в ЧестномЗнаке ???
Еще вопрос - я сделал и вроде как работает. Шифрую код марки сигарет в base64. провожу все проверки и отправляю. Сигареты списываются. А вот с молочкой че-то не выходит. В офд написано что код не распознан и на чеке М-. Молочка как-то по другому шифруется????
Что-то делали ещё кроме(139)?Атол или Штрих у вас?Обработка обслуживания типовая?На штрихе так и не получилось наладить работу с сигаретами и шинами релиз последний, драйвер последний и обработка из файла обновления последнего. Конфига не переписанная
(142) У меня ВикиПринт 57Ф+. Как образец у меня есть моя же конфа актуальная. В ней все бьется как надо. Но моя рабочая конфа переписана и немного устарела. Я в ней сделал сигареты. А вот с молочкой не разобрался еще. Видимо что-то с символом GS. Пока не понял что с ним делать. В марках сигарет нет этого символа. Как разберусь напишу тут свой код который поправил.
Товарищи, кто-нибудь может мне объяснить что надо сделать:
Код сигарет при сканировании 00000046209955WkouHVZACX8Ci2H, просто перевожу в base64. И в таком виде отправляю на проверку в кассу, и потом на чеке в xml. Чек бьется с [m+] и в офд и в честный знак все улетает.
НО Код молочки при сканировании 0104606779667909215oQpmj\x1d93QR9h. В нем есть символ \x1d (он же GS). С ним такая схема не работает. И даже если заменить "\x1d" на "" тоже не работает. Что я делаю не так???
Короче и этот момент победил. Но столкнулся с новой проблемой. Теперь марки Легкой промышленности проверку не проходят. Я так понял в марках ЛП надо менять на какой-то другой символ или тоже Символ(29)? В типовой конфе вместо GS подставляются какие-то "+" , я это понял дешифровав base64 из xml которая в чек уходит.
Код ЛП(полотенце) выглядит так 010462002085298221koQOFm*:oBcP\x1d91EE07\x1d92nZL1Q+BXqCkjiCNWhSPOUdENyy7NeD+XkMXzFc85BBo=.
Вроде те же самые \x1d, но меняя их на Символ(29) проверку в ккт не проходит, пишет [m-].
В общем я сделал у себя так. На супер качество и все варианты не рассчитываю. Замечания приветствуются. Слепил из кода взятого в интернете и немного подглядел как в типовых реализовано. Я тестировал на кодах от Сигарет, Молочка и ЛегкПром(полотенце). Если интернет есть выдает [M+], если нет то [M]. Проверяется во время пробития чека. В офд и честный знак все улетает. Также возвраты тоже работают.
В модуль ПодключаемоеОборудованиеУниверсальныйДрайверКлиент нужно вставить код в функцию ФискализацияЧека ПЕРЕД строкой "Если ПараметрыФискализации.СформироватьЧекКоррекции Тогда"
Если ПараметрыФискализации.РевизияИнтерфейса >= 3004 Тогда
ПараметрыФискализацииЧека = ВходныеПараметры.ПозицииЧека;
СессияОткрыта = ОбъектДрайвера.ОткрытьСессиюРегистрацииКМ(ПараметрыПодключения.ИДУстройства);
Если СессияОткрыта Тогда
ОписаниеОшибки = "";
Для Каждого СтрокаЧека из ПараметрыФискализацииЧека Цикл
Если ЗначениеЗаполнено(СтрокаЧека.ДанныеКодаТоварнойНоменклатуры.СерийныйНомер) Тогда
ПроверяемыйКод = СтрЗаменить(СтрокаЧека.ШтрихКод, "\x1d", Символ(29));
ДвоичныеДанныеСтроки = ПолучитьДвоичныеДанныеИзСтроки(ПроверяемыйКод);
ШтрихКодBase64 = Base64Строка(ДвоичныеДанныеСтроки);
ШтрихКодBase64 = СтрЗаменить(ШтрихКодBase64,Символ(10),"");
ШтрихКодBase64 = СтрЗаменить(ШтрихКодBase64,Символ(13),"");
ПараметрыОперации = Новый Структура("КонтрольнаяМарка,ИдентификаторЗапроса,ПланируемыйСтатусТовара,ОжидатьПолучениеОтветаОИСМ", ШтрихКодBase64, Новый УникальныйИдентификатор, ПредопределенноеЗначение("Перечисление.ПланируемыйСтатусМаркируемогоТовара.ШтучныйТоварРеализован"),Ложь);
ПараметрыОперацииXML = МенеджерОборудованияВызовСервера.СформироватьXMLДляЗапросаКМ(ПараметрыОперации);
РезультатОперацииXML = "";
Результат = ОбъектДрайвера.ЗапросКМ(ПараметрыПодключения.ИДУстройства, ПараметрыОперацииXML, РезультатОперацииXML);
Если НЕ Результат Тогда
ОбъектДрайвера.ПолучитьОшибку(ОписаниеОшибки);
Прервать;
Иначе
РезультатПроверки = МенеджерОборудованияВызовСервера.ПолучитьРезультатыЗапросаКМИзXMLПакета(РезультатОперацииXML);
СтатусЗапроса = -1;
РезультатОперацииXML = "";
Результат = ОбъектДрайвера.ПолучитьРезультатыЗапросаКМ(ПараметрыПодключения.ИДУстройства, РезультатОперацииXML, СтатусЗапроса);
Результат = ОбъектДрайвера.ПодтвердитьКМ(ПараметрыПодключения.ИДУстройства, Строка(ПараметрыОперации.ИдентификаторЗапроса), 0);
КонецЕсли;
КонецЕсли;
КонецЦикла;
Если ЗначениеЗаполнено(ОписаниеОшибки) Тогда
Попытка
ОбъектДрайвера.ЗакрытьСессиюРегистрацииКМ(ПараметрыПодключения.ИДУстройства);
Исключение
КонецПопытки;
СформироватьОшибку(ВыходныеПараметры, ОписаниеОшибки);
Возврат Ложь;
КонецЕсли;
КонецЕсли;
КонецЕсли;
В модуль МенеджерОборудованияВызовСервера надо добавить 2 функции:
Функция СформироватьXMLДляЗапросаКМ(ПараметрыОперации) Экспорт
ЗаписьXML = Новый ЗаписьXML();
ЗаписьXML.УстановитьСтроку("UTF-8");
ЗаписьXML.ЗаписатьОбъявлениеXML();
ЗаписьXML.ЗаписатьНачалоЭлемента("RequestKM");
ИдентификаторЗапроса = ПараметрыОперации.ИдентификаторЗапроса;
Если ПустаяСтрока(ИдентификаторЗапроса) Тогда
ИдентификаторЗапроса =Новый УникальныйИдентификатор;
КонецЕсли;
ЗаписьXML.ЗаписатьАтрибут("GUID", XMLСтрока(ИдентификаторЗапроса));
Если Не ПараметрыОперации.ОжидатьПолучениеОтветаОИСМ Тогда
ЗаписьXML.ЗаписатьАтрибут("WaitForResult", "False");
КонецЕсли;
ЗаписьXML.ЗаписатьАтрибут("MarkingCode", XMLСтрока(ПараметрыОперации.КонтрольнаяМарка));
ПланируемыйСтатусТовара = МенеджерОборудованияКлиентСервер.КодПланируемыйСтатусМаркируемогоТовара(ПараметрыОперации.ПланируемыйСтатусТовара);
ЗаписьXML.ЗаписатьАтрибут("PlannedStatus", XMLСтрока(ПланируемыйСтатусТовара));
ЗаписьXML.ЗаписатьКонецЭлемента();
Возврат ЗаписьXML.Закрыть();
КонецФункции
Функция ПолучитьРезультатыЗапросаКМИзXMLПакета(ДанныеXML) Экспорт
Параметры = Новый Структура();
Параметры.Вставить("КодМаркировкиПроверен", Ложь);
Параметры.Вставить("РезультатПроверки", Ложь);
Если Не ПустаяСтрока(ДанныеXML) Тогда
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML.УстановитьСтроку(ДанныеXML);
ЧтениеXML.ПерейтиКСодержимому();
Если ЧтениеXML.Имя = "RequestKMResult" И ЧтениеXML.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
Параметры.КодМаркировкиПроверен = ВРег(ЧтениеXML.ЗначениеАтрибута("Checking")) = "TRUE";
Параметры.РезультатПроверки = ВРег(ЧтениеXML.ЗначениеАтрибута("CheckingResult")) = "TRUE";
КонецЕсли;
КонецЕсли;
Возврат Параметры;
КонецФункции
Показать
Также в этом модуле в Процедуре СформироватьXMLПакетДляФискализацияЧека нужно перед первым вызовом "ЗаписатьДанныеКодаТоварнойНоменклатуры" добавить код:
Если ПараметрыФискализации.РевизияИнтерфейса > 3003 Тогда
Если Не ПустаяСтрока(ТекущаяПозиция.ДанныеКодаТоварнойНоменклатуры.СерийныйНомер) Тогда
ПроверяемыйКод = СтрЗаменить(ТекущаяПозиция.ШтрихКод, "\x1d", Символ(29));
ДвоичныеДанныеСтроки = ПолучитьДвоичныеДанныеИзСтроки(ПроверяемыйКод);
ШтрихКодBase64 = Base64Строка(ДвоичныеДанныеСтроки);
ШтрихКодBase64 = СтрЗаменить(ШтрихКодBase64,Символ(10),"");
ШтрихКодBase64 = СтрЗаменить(ШтрихКодBase64,Символ(13),"");
ЗаписьXML.ЗаписатьАтрибут("MarkingCode", XMLСтрока(ШтрихКодBase64));
КонецЕсли;
КонецЕсли;
Показать
А в самой процедуре ЗаписатьДанныеКодаТоварнойНоменклатурысразу после строки "// Реквизит кода товара (1162) для стандарта 3.2 и выше в ККТ передается в готовом виде." надо переделать код вот так:
Если ПараметрыФискализации.РевизияИнтерфейса < 3004 Тогда
Если НЕ ПустаяСтрока(РеквизитКодаТовара) Тогда
ЗаписьXML.ЗаписатьНачалоЭлемента("GoodCodeData");
ЗаписьXML.ЗаписатьАтрибут("MarkingCode", XMLСтрока(РеквизитКодаТовара));
ЗаписьXML.ЗаписатьКонецЭлемента();
КонецЕсли;
КонецЕсли;
Это нужно что бы на кассе с ффд 1.05 печатал по старому.
В модуль МенеджерОборудованияКлиентСервер надо добавить функцию:
Потому-что код на сигаретах это просто код, код на молочке имеет невидимы символ GS и его тоже надо кодировать в base64, а код для легкой промышленности после перекодировки вставлял мне еще невидимые символы 10 и 13. Два дня убил что бы понять почему сигареты пробивались нормально, а все остальное нет. Но я решил эти затыки вот таким вот образом. Да и еще в моей конфигурации т.к. она старая, нет реквизитов КодМаркировки и ШтрихКодbase64. Поэтому я сам все кодирую из того что есть у меня.
(146)
Приветствую. УТ 10.3 сильно переписанная, поэтому обновления поставить нет возможности.
Доработал по вашему способу. В итого:
1. на чеке выводиться только [М] и все
2. в ЧЗ марка не уходит.
Запрос через ККМ уходит без ошибки. Запросы на состояние запроса и подтверждение продажи уходят тоже без ошибки. Но дальше никак. Марку читаем сканером в режиме "клавиатура", соответственно "допиливаю" штрихкод марки - добавляю разделители между блоками.
Пока вижу две возможные причины:
1. не корректно формирую XML для пробития, т.е. что-то не доделал.
2. дать больше время на обработку запроса, т.е. поместить в цикл проверку результата запроса пока не будет получен ответ от ЧЗ
(191) у меня тоже сканеры как клавиатура. Не надо символы добавлять. Может сканер другой попробовать или настройки его проверить? Ну и перед шифрованием в base64 удалить символы переноса строки как я писал выше.
(192) в режим клавиатуры вывел вынужденно, при подключении по COM отваливался или тупо зависал. Пробовал несколько сканеров (правда одного типа, закуплены были партией).
Т.е. если код маркировки выглядит как "010460645306968521NsgF*RMQq2n.6", то не нужно добавлять символ(29) перед "21Nsg"?
Если считать сканером не в режиме "клавиатура", то там символ есть. Поэтому вопрос: при отправке запроса символы (29) должны быть в строке марки перед кодированием в Base64?
(191) ой,я перепутал - после кодировки в base64 надо проверить и убрать символы переноса строки. почему-то платформа в моем случае добавляет иногда(не всегда) символы переноса.
(150) Ну у меня драйвер новый самый. Под свою кассу ищите новую компоненту. Кстати MeasureOfQuantity="0" не обязательный реквизит. У меня и без него все улетает.
Добрый день!
Хочу поделиться своим опытом трехдневного запуска ФФД 1.2. )))
Имеем: УТ 10.3.72.2 (все штатно, чеки бьем не из РМК, а из обычного интерфейса самого документа Чека ККМ), Штрих RR-01Ф (версия прошивки: C.3.41963 от 26.08.2021)
Сразу хочу сказать спасибо этой ветки и особенно "andrew.ab" - меня хотя бы направили на путь истинный.
Из коробки естественно ничего не заработало и чем дальше я начал вникать что не так, тем больше понимал, что много что не так. Когда я все для себя финишировал (начали нормально пробиваться чеки), то пришел к выводу, что куча людей доделывают эту программу и каждый из них не может все связать воедино. Элементарный пример:
"ПодключаемоеОборудованиеУниверсальныйДрайверКлиент" функция:"ФискализацияЧека":
Строка:
ДанныеЧека = МенеджерОборудованияВызовСервера.ПолучитьXMLПакетДляФискализацияЧека_ТО(ОбщиеПараметры, ВходныеПараметры, СуммаЧека, ШиринаСтроки, НовыйФормат, ВерсияФФД, ПараметрыФискализации);
В этой строке мы получаем XMLку для пробития чека, но на практике мы ее получаем просто так, так как эти данные нигде далее не используются (ну вот зачем вводить людей в заблуждение и загромождать код). Это лирика и эмоции!!!!
Теперь к делу.
1. Допилил обработку ShtrihMkkt.epf (файл прикреплю). А именно: запихнул в макет штриховскую компоненту от дайвера 5.16.0.886 (в драйвере было две компоненты, одна от ФФД1.1, другая от ФФД1.2); добавил три функции: ЗапросКМ; ПолучитьРезультатыЗапросаКМ; ПодтвердитьКМ (что интересно, в поставке Атоловской - они есть); подправил функцию "СоздатьОбъектДрайвера", чтобы попытка не валилась, т.к. компонента от ФФД1.2 теперь называется SMDrvFR1C34.
2. В общем модуле "МенеджерОборудованияВызовСервера" в функции "РевизияИнтерфейсаДрайверов" изменил:
РевизияИнтерфейса = 3004; //MAScorporation - было 3003
Не смотря на то, что после подмены компоненты (от последнего штриховского драйвера), в котором ревизия начинает определяться как 3004 (ФФД1.2), это место возвращает все на 3003 (ФФД1.1).
3. В этом же модуле добавил функцию (для добавление отсутствующего символа GS1, правда "andrew.ab", здесь немного ошибся и написал неверный символ разделения, точней он верный если драйверу напрямую подкидывать марку в виде строки, но в виде Base64 это не прокатывает):
4. В этом же модуле в процедуре "СформироватьXMLПакетДляФискализацияЧека" изменил:
Если ПараметрыФискализации.РевизияИнтерфейса >= 3004 Тогда
//MAScorporation - закоментил условие и добавил свое условие
//Если Не ПустаяСтрока(ТекущаяПозиция.КонтрольнаяМарка) Тогда
// ЗаписьXML.ЗаписатьАтрибут("MarkingCode", XMLСтрока(ТекущаяПозиция.КонтрольнаяМарка));
//КонецЕсли;
Если НЕ ПустаяСтрока(ТекущаяПозиция.ШтрихкодBase64) Тогда
ДанныеКодаТовара = МенеджерОборудованияМаркировкаКлиентСервер.РазобратьШтриховойКодТовара(ТекущаяПозиция.ШтрихкодBase64, Истина);
РеквизитКодаТовара = ДанныеКодаТовара.РеквизитКодаТовара;
Если НЕ ПустаяСтрока(РеквизитКодаТовара) И Не ПустаяСтрока(ДанныеКодаТовара.ШтрихкодBase64) Тогда // Запись тега 1163
ШтрихкодBase64 = ВставкаСимволаРазделителяGS1ВШтрихкод(ДанныеКодаТовара);
ЗаписьXML.ЗаписатьАтрибут("MarkingCode", XMLСтрока(ШтрихкодBase64));
КонецЕсли;
КонецЕсли;
Если Не ПустаяСтрока(ТекущаяПозиция.КодЕдиницыИзмерения) Тогда
Показать
5. В модуле "МенеджерОборудованияКлиент" в процедуре "НачатьВыполнениеКомандыТО" вставил попытку перед выполнением команды:
Попытка
Если ЗначениеЗаполнено(ВходныеПараметры.КонтрольнаяМарка) Тогда //MAScorporation - запишим правильно ШК
ДанныеКодаТовара = МенеджерОборудованияМаркировкаКлиентСервер.РазобратьШтриховойКодТовара(ВходныеПараметры.КонтрольнаяМарка, Истина);
РеквизитКодаТовара = ДанныеКодаТовара.РеквизитКодаТовара;
Если НЕ ПустаяСтрока(РеквизитКодаТовара) И Не ПустаяСтрока(ДанныеКодаТовара.ШтрихкодBase64) Тогда // Запись тега 1163
ШтрихкодBase64 = МенеджерОборудованияВызовСервера.ВставкаСимволаРазделителяGS1ВШтрихкод(ДанныеКодаТовара);
ВходныеПараметры.КонтрольнаяМарка = ШтрихкодBase64;
КонецЕсли;
КонецЕсли;
Исключение КонецПопытки;
Если Команда = "RequestKM" Тогда
Результат = ОбработкаОбслуживания.ЗапросКМ(ОбъектДрайвера, ПараметрыККТ, ВходныеПараметры, ВыходныеПараметры, Идентификатор);
ИначеЕсли Команда = "GetProcessingKMResult" Тогда
Результат = ОбработкаОбслуживания.ПолучитьРезультатыЗапросаКМ(ОбъектДрайвера, ПараметрыККТ, ВходныеПараметры, ВыходныеПараметры, Идентификатор);
ИначеЕсли Команда = "ConfirmKM" Тогда
Результат = ОбработкаОбслуживания.ПодтвердитьКМ(ОбъектДрайвера, ПараметрыККТ, ВходныеПараметры, ВыходныеПараметры, Идентификатор);
КонецЕсли;
Показать
6. В модуле "РозничныеПродажиКлиент" процедура "ПроверитьКодМаркировкиСредствамиККТ" поставил попытку (обратил внимание, что всегда проверяемая марка имеет один и тотже статус и не важно продажа это или возврат):
ПараметрыСканирования = ШтрихкодированиеИСКлиент.ПараметрыСканирования(ФормаВладелец);
Попытка //MAScorporation - иначе всегда будет "Возврат в оборот при розничной реализации"
Если ФормаВладелец.ВидОперации=Перечисления.ВидыОперацийЧекККМ.Продажа Тогда
ПараметрыСканирования.ВидОперацииИСМП = Перечисления.ВидыОперацийИСМП.ВыводИзОборотаРозничнаяПродажа;
КонецЕсли
Исключение КонецПопытки;
Если ФормаПросмотра <> Неопределено
7. В модуль справочника "КассыККМ" функцию "ПараметрыКассыККМ" сделал правку в запросе, т.к. без этой правки всегда возвращается первая попавшаяся Касса ККМ и не факт что нужная вам.
Запрос.Текст ="ВЫБРАТЬ
| КассыККМ.Ссылка КАК КассаККМ,
| КассыККМ.Владелец КАК Организация,
| КассыККМ.СерийныйНомер КАК СерийныйНомер,
| ТорговоеОборудование.Идентификатор КАК ИдентификаторУстройства
|ИЗ
| Справочник.КассыККМ КАК КассыККМ
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ТорговоеОборудование КАК ТорговоеОборудование
| ПО КассыККМ.Ссылка = ТорговоеОборудование.КассаККМ
|ГДЕ
| КассыККМ.Ссылка = &Ссылка
| И ТорговоеОборудование.Компьютер = &Компьютер
| И ТорговоеОборудование.Подключено = ИСТИНА";
Запрос.УстановитьПараметр("Ссылка", КассаККМ);
Запрос.УстановитьПараметр("Компьютер", ИмяКомпьютера());//MAScorporation - добавил это условие и еще: | И ТорговоеОборудование.Подключено = ИСТИНА
Показать
8. В модуле справочника "ТорговоеОборудование" в функции "ПолучитьПараметрыРегистрацииУстройства" в конце добавил:
Дело в том, что запрос который в этой функции отрабатывает, всегда будет возвращать пустоту, т.к. идет обращение к таблице справочника, которая на данный момент всегда пустая. Если не сделать эту правку (в моем случае), то не будет инициироваться процесс проверки кодов марки фискальником.
9. И на последок абсурдный косяк. В модуле документа "ЧекККМ" в функции "ПараметрыОперацииФискализацииЧека"
вместо строки:
написал условие (без него всегда будут пробиваться чеки прихода ))))) ):
Если ВидОперации=Перечисления.ВидыОперацийЧекККМ.Возврат Тогда //MAScorporation
ПараметрыОперацииФискализацииЧека.ТипРасчета = ПредопределенноеЗначение("Перечисление.ТипыРасчетаДенежнымиСредствами.ВозвратДенежныхСредств");
Иначе
ПараметрыОперацииФискализацииЧека.ТипРасчета = ПредопределенноеЗначение("Перечисление.ТипыРасчетаДенежнымиСредствами.ПриходДенежныхСредств");
КонецЕсли;
10. Небольшой совет. Если идет попытка пробить некорректную марку и фискальник стопориться с ошибкой:
"d3h код товара не распознан", то зайдите в свойства фискильника и исправьте:
Таблица 17 строка 41 "RUS принимать все КТ" = 1
В этом случае независимо от корректности марки чек будет печататься.
200.
user626670_fadanik34
09.01.22 21:29 Сейчас в теме
(153) Спасибо, Александр, за "инструкцию", действительно помогло, пробил в итоге чек с [м+]. Подкрутил побитие чека из реализации (клиент использует связку: заказ клиента - реализация - приходный ордер). на Атол 11ф завелось ..
не заработало и чем дальше я начал вникать что не так, тем больше понимал, что много что не так. Когда я все для себя финишировал (начали нормально пробиваться чеки), то прише
Кто-то может помочь организации, работающей с маркировкой обуви, помочь настроить пробивку чеков на ффд 1.2. 1С УТ 1С:Предприятие 8.3 (8.3.18.1563). Есть касса которая переведена на ФФД 1.2, но бьет чеки только без маркировки. Пытались разобраться специалисты, безуспешно. можем всю информацию передать. Разумеется, все за плату. Тел для связи 89530053462
(160)отвечаю сам себе. Код считанный сканером в рмк 1с и код вставленный в форму поиска штрих-кода по F7 дает разные результаты. Т.е. Проверить работоспособность системы можно только через считывание сканером кода. Все коды не пробовал , но несколько прошли проверку удачно, затык только с открытием закрытием смены.
Может кто-то подскажет, 10.3.72.2 в документе ЧекККМ при закрытии формы Проверки маркированного товара не заполняется табличная часть Товары?Номенклатура и количество только встает, цена ед.измерения и др. нет.Приходится склад перевыбирать и ед.измерения выбирать.Если не заходить в форму проверки и просто считывать F7 то заполняет ,но сканер настроен в режиме клавиатуры и через F7 не прокатывает без формы проверки.Перевести сканер конечно простое решение, но привыкли уже к форме проверки.
Компоненту не нужно менять smdrvfr_34_5_16_0_886_win_32.dll? Если да то каким образом.
После всех 10 пунктов маркировка проходит проверку но Чек на кассе не выходит и если брать обычный товар то тоже не выходит. Обработку менял торгового оборудования, тест связи успешно проходит. База типовая была, релиз последний.Касса Штрих-лайт-01ф.
В итоге пока откатил изменения и перенастроил обратно торговое оборудование. До дописок хотя бы обычный товар пробивается)
Ещё заметил такой момент, после попытки пробить связь с кассой пропадает, порт становится недоступным или в случае RNDIS настройки нет связи. Прошивку проверяли.
Добрый день. Подскажите, не получилось запустить выбытие маркированных товаров в связке УТ10.3 и Атол 30Ф без доп. доработок?
не стоит надеяться на 1С, ут10.3 , мне кажется , специально так делают чтобы все перешли на ут11. Ни с какими атолами, штрих-м и прочими кассами работать из коробки не будет. Для штрих-м buka99999 вроде доделал (не могу проверить) , а вот для атол несмотря на доработки чек не пробивается. Ошибка "не верный тип кода номенклатуры" и пока это никто победить не смог.
Документ Оплата платежной картой при пробитии ругается на тэг 1227, релиз 10.3.71.1.Пробовали ИНН менять, 1227 - наименование контрагента.Похоже в коде не добавлено.Драйвер штриха последний и обработка последняя.
(169) Я делал документ Рко и пробивал в нем чек. У меня ругалась программа тоже на тег 1227. Прищлось найти в коде это место, заодно почитать теорию про версии ФФД.
Вот что я выяснил.
- тэг 1227 (наименование покупателя) не является обязательным для ФФД 1.1
- для ФФД 1.2 является уже обязательным, но будет участвовать вместе с группой других тегов (там меняется формат передачи данных)
При этом, для ФФД 1.1 тег ИНН Покупателя обязателен.
ЧТО же делать мне, если я возвращаю деньги частному лицу?
Понятно, что если бы я возвращал деньги организации, то у нее был бы ИНН. А он обязателен. И название можно было бы вывести
С вязи с этим я понял, что для частного лица - выводить Наименование в тег 1227 (а так делает УТ 10.3.72.3) нет смысла, потому что к наименованию касса хочет обязательный реквизит ИНН. А ИНН у частного лица нет.
В связи с этим, я в коде 1С просто заремарил вывод Наименование Покупателя (в моем случае Частное лицо). И все стало ОК. Касса бьет чеки, ОФД их получает. А тэг для ИНН остался пустым.
Вывод,
думаю немного подправить логику, оттолкнувшись от ИНН.
Если в документе выбран Контрагент, у которого есть ИНН, тогда выводим два тега ИНН (он обязательный) и тег 1227 (НаименованиеПокупателя)
Если же ИНН контрагента пустой (подразумеваем что это частное лицо), то тег ИНН выводится пустым, и я для тега 1227 ставлю Покупатель=""; (т.е тег 1227 выводится, но с пустым значением)
А кто нибудь обращал внимание что CalculationSubject="1" ПризнакиПредметаРасчета = товар отправляется? вроде как 33 должен стоять...
4. В реквизит "Признак предмета расчета" (Тег 1212) добавлены новые значения (см. таблицу 101 приложения № 2 к приказу № 662):
"30" – если продается обязательный к маркировке подакцизный товар, который не имеет кода маркировки (в печатном чеке значение "АТНМ");
"31" – если продается обязательный к маркировке подакцизный товар, который имеет код маркировки (в печатном чеке значение "АТМ");
"32" – если продается обязательный к маркировке товар, который не имеет кода маркировки (кроме подакцизных товаров) (в печатном чеке значение "ТНМ");
"33" – если продается обязательный к маркировке товар, который имеет код маркировки (кроме подакцизных товаров) (в печатном чеке значение "ТМ").
Новый формат фискальных документов версии 1.2.
(171)
Прошел по ссылке и почитал.
Я так понял, что теперь продавец будет передавать в чекеККМ сведения о покупателе(физическое лицо)
не только ИНН и Наименование, но и
- документ, удостоверяющий личность (получается, паспорт)
- номер документа (номер паспорта)
Это теперь в магазин ходить с паспортом, а продавец будет переписывать мои сведения?
А как же защита персональных данных?
(172)Напомним, в настоящее время указывать в кассовом чеке (БСО) наименование и ИНН покупателя (клиента) необходимо при (п. 6.1, 6.2 ст. 4.7 Закона № 54-ФЗ):
расчетах между организациями (ИП) наличными и (или) с предъявлением электронного средства платежа (платежная карта);
выплате выигрыша в азартные игры, лотереи (15 000 руб. и более), получении страховой премии, страховой выплате.
расчетах между организациями (ИП) наличными и (или) с предъявлением электронного средства платежа (платежная карта);
выплате выигрыша в азартные игры, лотереи (15 000 руб. и более), получении страховой премии, страховой выплате
Еще раз заглянул и копирую как раз следующий абзац за тем абзацем, что скопировали Вы.
"...
Таким образом, реквизиты "покупатель (клиент)" (Тег 1227), "ИНН покупателя (клиента)" (Тег 1228) используются в кассовом чеке (БСО), сформированном ФН версии 1.2, как при расчетах между организациями (ИП), так и при расчетах с физлицами. При этом если при расчетах с физлицами в кассовом чеке нет ИНН покупателя, в кассовом чеке указываются: "дата рождения покупателя (клиента)" (Тег 1243), "код вида документа, удостоверяющего личность" (Тег 1245), "данные документа, удостоверяющего личность" (Тег 1246)
..."
Как понять здесь формулировку про физическое лицо?
Здесь явно указано разделение между организациями,ИП и физическим лицом.
Или же понимается так, что
- расчеты наличкой между организациями и ИП, ИП должно предъявить еще и паспорт?
- расчеты между организцацией и другой организацией, где физЛицо пришло, то здесь физлицо должно предъявить либо свой ИНН, либо Паспорт
а если это выплаты выигрыша, лотереи, получение страховой премии и т.д, то физЛицо должно предъявить ИНН или паспорт. (в принципе, здесь и раньше сведения паспорта брали)
В общем, не могу понять этот фрагмент:
"... Таким образом, реквизиты "покупатель (клиент)" (Тег 1227), "ИНН покупателя (клиента)" (Тег 1228) используются в кассовом чеке (БСО), сформированном ФН версии 1.2, как при расчетах между организациями (ИП), так и при расчетах с физлицами. ..."
- и вот в этом случае, если у физЛица нет ИНН, то пожалуйста, предъявите паспорт.
Вчера допилил свою Ут 10 и тестировал на Атоле, так дало сделать 2 чека подряд с одним кодом, причем второй раз прошла проверка, вот вернуть дало только один раз... проверял что код выбыл и потом второй чек.
(175) Ну если подряд 2 чека с одним КМ пробивали, то данные просто не успели дойти до ЧЗ, поэтому пробитии второго чека еще успело выдать, что нормальный код маркировки
(183) Да, код, который здесь пригодился. Там символов GS не хватает вроде как. А с этим кодом работает.
Пришлось убрать только строку "Возврат Истина;" в форме РМК, иначе не создавался новый чек.
Новое обновление 10.3.73.1 исправлений насчет сканирования кодов маркировки не имеет.
Еще обязательно заново переподключайте ККТ в торговом оборудовании, чтобы увидело новый драйвер.
Если у вас АТОЛ, то ставьте драйвер 10.9.1.0
(183) То что писал buka99999 только пункт 2 и 7. Плюс еще свое, тк конфа переписанная слишком...
Не стал использовать проверку кода и фискализацию в модуле Формы РМК оставил все в общем модуле. Еще была правка по сохранению полного кода тк иногда он в ПулКодовМаркировкиСУЗ заменялся коротким.
Одно можно сказать очень сыро и из коробки не работает.
Если кассу АТОЛ зарегистрировать с ФФД 1.2,с годовалой конфой УТ10.3 (временно),касса будет работать (печатать и отправлять чеки в ОФД без маркировки)?
(180) Есть моменты связанные с передачей тэгов специфических, в целом думаю если только розничные продажи используются то все должно быть хорошо. Штрих и Viki Print на ФФД 1.2 нормально пробивают чеки. Сами решили перейти на УТ11 с нового года.
(180) в ФФД 1.2 Реквизит "Единица измерения предмета расчета" (Тег 1197) не применяется. Вместо него используется "Мера количества предмета расчета" (Тег 2108). Всего значений – 24. Это может быть килограмм, метр, квадратный метр, литр, час, мегабайт и т.д. Для предметов расчета, которые реализуются поштучно или единицами, предусмотрено значение "0" (Таблица 114 Приложения 2 к приказу № 662).
Если на это касса не будет ругаться то заработает. Если касса подставит автоматически 0 то пойдет но единица везде будет Шт условно
Несколько дней ломал голову почему проверка кодов странно работала(первый раз отрабатывала потом если была ошибка то все коды уже не проходили проверку) а оказалось что сессия регистрацииКМ не закрывалась!
Вот что пришлось сделать. Может кому пригодится...
В МенеджерОборудованияКлиент :
Процедура НачатьЗакрытииСессииРегистрацииКМ(ОповещениеПриЗавершении, УникальныйИдентификатор, Параметры = Неопределено, ИдентификаторУстройства = Неопределено) Экспорт
Контекст = Новый Структура;
Контекст.Вставить("ОповещениеПриЗавершении" , ОповещениеПриЗавершении);
Контекст.Вставить("УникальныйИдентификатор" , УникальныйИдентификатор);
Контекст.Вставить("ВходныеПараметры" , Параметры);
Контекст.Вставить("ВыполняемаяКоманда" , "CloseSessionRegistrationKM");
//
//Если ИдентификаторУстройства = Неопределено Тогда
//
// ПоддерживаемыеТипыВО = Новый Массив();
// ПоддерживаемыеТипыВО.Добавить("ККТ");
// ОписаниеОповещения = Новый ОписаниеОповещения("НачатьВыполнениеКоманды_ВыбратьУстройствоЗавершение", МенеджерОборудованияКлиент, Контекст);
// ПредложитьВыбратьУстройство(ОписаниеОповещения, ПоддерживаемыеТипыВО,
// НСтр("ru='Выберите ККТ'"),
// НСтр("ru='ККТ не подключено.'"),
// НСтр("ru='ККТ не выбрано.'"),
// Истина);
//Иначе
// НачатьВыполнениеКоманды_ВыбратьУстройствоЗавершение(ИдентификаторУстройства, Контекст);
//КонецЕсли;
//Neon++>
Если ИдентификаторУстройства = Неопределено Тогда
ВыводСообщений.ВывестиСообщениеВОкноСообщений(НСтр("ru='ККТ не подключено.'"),ПредопределенноеЗначение("Перечисление.ВидыСообщений.Ошибка"),,,Истина);
Иначе
НачатьВыполнениеКомандыТО(ОповещениеПриЗавершении, ИдентификаторУстройства, "CloseSessionRegistrationKM", Параметры);
КонецЕсли;
//<++
КонецПроцедуры
Процедура НачатьОткрытиеСессииРегистрацииКМ(ОповещениеПриЗавершении, УникальныйИдентификатор, Параметры = Неопределено, ИдентификаторУстройства = Неопределено) Экспорт
Контекст = Новый Структура;
Контекст.Вставить("ОповещениеПриЗавершении" , ОповещениеПриЗавершении);
Контекст.Вставить("УникальныйИдентификатор" , УникальныйИдентификатор);
Контекст.Вставить("ВходныеПараметры" , Параметры);
Контекст.Вставить("ВыполняемаяКоманда" , "OpenSessionRegistrationKM");
//Если ИдентификаторУстройства = Неопределено Тогда
//
// ПоддерживаемыеТипыВО = Новый Массив();
// ПоддерживаемыеТипыВО.Добавить("ККТ");
// ОписаниеОповещения = Новый ОписаниеОповещения("НачатьВыполнениеКоманды_ВыбратьУстройствоЗавершение", МенеджерОборудованияКлиент, Контекст);
// ПредложитьВыбратьУстройство(ОписаниеОповещения, ПоддерживаемыеТипыВО,
// НСтр("ru='Выберите ККТ'"),
// НСтр("ru='ККТ не подключено.'"),
// НСтр("ru='ККТ не выбрано.'"),
// Истина);
//Иначе
// НачатьВыполнениеКоманды_ВыбратьУстройствоЗавершение(ИдентификаторУстройства, Контекст);
//КонецЕсли;
//Neon++>
Если ИдентификаторУстройства = Неопределено Тогда
ВыводСообщений.ВывестиСообщениеВОкноСообщений(НСтр("ru='ККТ не подключено.'"),ПредопределенноеЗначение("Перечисление.ВидыСообщений.Ошибка"),,,Истина);
Иначе
НачатьВыполнениеКомандыТО(ОповещениеПриЗавершении, ИдентификаторУстройства, "OpenSessionRegistrationKM", Параметры);
КонецЕсли;
//<++
КонецПроцедуры
Показать
В Процедуре НачатьВыполнениеКомандыТО:
Если Команда = "RequestKM" Тогда
Результат = ОбработкаОбслуживания.ЗапросКМ(ОбъектДрайвера, ПараметрыККТ, ВходныеПараметры, ВыходныеПараметры, Идентификатор);
ИначеЕсли Команда = "GetProcessingKMResult" Тогда
Результат = ОбработкаОбслуживания.ПолучитьРезультатыЗапросаКМ(ОбъектДрайвера, ПараметрыККТ, ВходныеПараметры, ВыходныеПараметры, Идентификатор);
ИначеЕсли Команда = "ConfirmKM" Тогда
Результат = ОбработкаОбслуживания.ПодтвердитьКМ(ОбъектДрайвера, ПараметрыККТ, ВходныеПараметры, ВыходныеПараметры, Идентификатор);
//Neon
ИначеЕсли Команда = "CloseSessionRegistrationKM" Тогда
Результат = ОбработкаОбслуживания.ЗакрытьСессиюРегистрацииКМ(ОбъектДрайвера, ПараметрыККТ, ВходныеПараметры, ВыходныеПараметры, Идентификатор);
ИначеЕсли Команда = "OpenSessionRegistrationKM" Тогда
Результат = ОбработкаОбслуживания.ОткрытьСессиюРегистрацииКМ(ОбъектДрайвера, ПараметрыККТ, ВходныеПараметры, ВыходныеПараметры, Идентификатор);
КонецЕсли;
//Neon
Показать
И в обработку обслуживания добавил 2 функции:
Функция ОткрытьСессиюРегистрацииКМ(Объект, ПараметрыККТ, ПараметрыПроверки, ВыходныеПараметры, Идентификатор) Экспорт
мПараметрыПодключения.Вставить("ПараметрыРегистрации", ПараметрыККТ);
мПараметрыПодключения.Вставить("ТипОборудования", "ККТ");
мПараметрыПодключения.Вставить("ИдентификаторУстройства", Идентификатор);
РезультатВыполнения = ПодключаемоеОборудованиеУниверсальныйДрайверКлиент.ВыполнитьКоманду("ОткрытьСессиюРегистрацииКМ",
ПараметрыПроверки, ВыходныеПараметры, Объект.Драйвер, мПараметрыУстройства, мПараметрыПодключения);
Если Не РезультатВыполнения Тогда
Результат = Ложь;
Объект.ОписаниеОшибки = ВыходныеПараметры[1];
Иначе
Результат = Истина;
Объект.Вставить("ВыходныеПараметры", ВыходныеПараметры);
КонецЕсли;
Возврат Результат;
КонецФункции
Функция ЗакрытьСессиюРегистрацииКМ(Объект, ПараметрыККТ, ПараметрыПроверки, ВыходныеПараметры, Идентификатор) Экспорт
мПараметрыПодключения.Вставить("ПараметрыРегистрации", ПараметрыККТ);
мПараметрыПодключения.Вставить("ТипОборудования", "ККТ");
мПараметрыПодключения.Вставить("ИдентификаторУстройства", Идентификатор);
РезультатВыполнения = ПодключаемоеОборудованиеУниверсальныйДрайверКлиент.ВыполнитьКоманду("ЗакрытьСессиюРегистрацииКМ",
ПараметрыПроверки, ВыходныеПараметры, Объект.Драйвер, мПараметрыУстройства, мПараметрыПодключения);
Если Не РезультатВыполнения Тогда
Результат = Ложь;
Объект.ОписаниеОшибки = ВыходныеПараметры[1];
Иначе
Результат = Истина;
Объект.Вставить("ВыходныеПараметры", ВыходныеПараметры);
КонецЕсли;
Возврат Результат;
КонецФункции
УТ10.последниеобновы на 27.12.2021 (в.ч. драйвер,обработка,прошивка и платформа), при попытке напечатать чек из реализации плюется ошибкой "Ошибка программирования реквизита 1256 (Ошибка программирования реквизита 1243) ут10"...слышал/вычитывал про данные покупателя,но где их вбить в базе что бы наверняка?
(189) Обратите внимание на покупателя. Если это юрлицо - нужен ИНН, если физлицо - нужна дата рождения, соответственно эти данные будут переданы как покупатель. По сути у вас ругается на то что вы передаете наименование покупателя, но нет обязательного ИНН или даты рождения.
собственно вот обсуждение на сайте атол подобной проблемы http://forum.atol.ru/index.php?showtopic=42254&st=0&p=317959&