|   |   | 
| 
 | v7: Штрих-М Драйвер ФР | ☑ | ||
|---|---|---|---|---|
| 0
    
        Volodja 21.08.22✎ 09:21 | 
        Здравствуйте всем.
 В аптеке стоит конфигурация "Штрих-М: Кассир" от НТЦ "Штрих-М" версия 1.9.0.3 Настроен драйвер ККМ: Шрифт-М: Драйвер ФР Чеки распечатываются со списком проданной номенклатуры. Распечатывается QR-код А вот сведения в налоговую попадают общей суммой. Подскажите что нужно поправить, чтобы свев налоговую также попадал весь список проданной номенклатуры | |||
| 1
    
        Volodja 21.08.22✎ 09:26 | 
        Версия файла DrvFR.dll - 4.6.0.244     | |||
| 2
    
        MWWRuza гуру 21.08.22✎ 10:24 | 
        Тут просто "поправить" не получится...
 Нужно смотреть, какими командами печатается чек... По Вашему, получается, что он печатается просто произвольным текстом, а регистрация идет одной строкой, суммой. Я не знаю, что это за конфигурация, но, возможно очень старая, еще "доонлайн"... И драйвер сейчас 5.хх... Короче, просто "одним нажатием на кнопку", тут не получится, надо серьезно анализировать что у Вас там и как работает. | |||
| 3
    
        Volodja 21.08.22✎ 10:32 | 
        Марка Фискального регистратора: "Штрих-ФР-Ф-KZ"
 (2) Да.Очень древняя конфигурация.Они работают на ней еще с начала 2000-х. Все их устраивает по программе, не хотят переходить на 8-ку. Вот функция печати строки чека: Функция ПечатьСтроки(Стр,ЖирнаяСтрока=0,НеПечататьНаКонтрольке=0,ПриОшибке=0,НеВыводитьВПорт=0,ТолькоВПорт=0) Экспорт; Если Константа.ИспользоватьККМ=1 Тогда ФискальныйРегистратор.Caption=Стр; Пока 1=1 Цикл Рез=ОбработкаОшибок(ФискальныйРегистратор,"кассы",ФискальныйРегистратор.PrintString(),ПриОшибке); Если Рез>0 Тогда ОбновитьДисплейКассира(); Возврат 0; ИначеЕсли Рез=0 Тогда Возврат 1; КонецЕсли; КонецЦикла; ИначеЕсли Константа.ИспользоватьККМ=2 Тогда Если ТолькоВПорт=1 Тогда Если Константа.РаботаСКэшКонтрол=1 Тогда КэшКонтрол.SendToCom(Стр); КонецЕсли; Возврат 1; КонецЕсли; ФискальныйРегистратор.Password=Число(Константа.ПарольСистемногоАдминистратора); ФискальныйРегистратор.UseReceiptRibbon=1; Если НеПечататьНаКонтрольке=2 Тогда ФискальныйРегистратор.UseReceiptRibbon=0; КонецЕсли; Если НеПечататьНаКонтрольке=1 Тогда ФискальныйРегистратор.UseJournalRibbon=0; Иначе ФискальныйРегистратор.UseJournalRibbon=1; КонецЕсли; ФискальныйРегистратор.StringForPrinting=Стр; Пока 1=1 Цикл Если ЖирнаяСтрока=0 Тогда ФискальныйРегистратор.PrintString(); Иначе ФискальныйРегистратор.PrintWideString(); КонецЕсли; Если ПриОшибке=1 Тогда Рез=0; Иначе Рез=ОбработкаОшибокФР(); КонецЕсли; Если Рез>0 Тогда ОбновитьДисплейКассира(); Возврат 0; ИначеЕсли Рез=0 Тогда Если (НеВыводитьВПорт=0) И (Константа.РаботаСКэшКонтрол=1) И (НеПечататьНаКонтрольке<>2) Тогда КэшКонтрол.SendToCom(Стр); КонецЕсли; Возврат 1; КонецЕсли; КонецЦикла; КонецЕсли; КонецФункции | |||
| 4
    
        MWWRuza гуру 21.08.22✎ 10:32 | 
        У меня у одних клиентов аналогичная конфа от Раруса - "Автозапчасти-Автосервис", тоже приобреталась в период, когда об онлайн кассах еще и не было речи, я ее допиливаю регулярно по мере изменений в законах, вплоть до того, что сейчас она со Штрихом уже по ФФД-1.2 работает, с онлайн-запросом проверки марок и т.п., (колесья, никуда от них не деться). А изначально, когда она еще под кассы с ЭКЛЗ была, вроде тоже так печатала, товарный состав произвольным текстом и регистрация одной суммой.     | |||
| 5
    
        MWWRuza гуру 21.08.22✎ 10:36 | 
        Ну, разбираться с Вашей что-то не охота...
 Вот, из моей конфы цикл по строкам чека: Пока ОбрДок.ПолучитьСтроку() > 0 Цикл Если ОбрДок.Вид() = "ЗаказНаряд" Тогда Если ОбрДок.Наличие = 4 Тогда Продолжить; КонецЕсли; КонецЕсли; ПредстЦена = Окр((ОбрДок.Сумма + ОбрДок.НП) / ОбрДок.Количество, 2, 1); СуммаДокумента = СуммаДокумента + ОбрДок.Количество * ПредстЦена; Наим = Лев(СтрокуНоменклатурыЧек(ОбрДок.Номенклатура.Наименование, ОбрДок.Номенклатура), 40); Если ОбрДок.Вид() <> "ЗаказНаряд" Тогда КТН = СокрЛП(ОбрДок.КТН); Если ОбрДок.Касса.ФФД_ККТ = Перечисление.ФФД_ККТ.ФФД1_05 Тогда Если (ПустоеЗначение(КТН) = 0) И (ОбрДок.Касса.ПечПризнМарк = 1) Тогда ФискальныйРегистратор.StringForPrinting = "[M] " + Наим; Иначе ФискальныйРегистратор.StringForPrinting = Наим; КонецЕсли; Иначе ФискальныйРегистратор.StringForPrinting = Наим; КонецЕсли; Иначе ФискальныйРегистратор.StringForPrinting = Наим; КонецЕсли; // ФискальныйРегистратор.CheckType = 1; ФискальныйРегистратор.Price = ПредстЦена; ФискальныйРегистратор.Quantity = ОбрДок.Количество; ФискальныйРегистратор.Summ1Enabled = 1; ФискальныйРегистратор.Summ1 = ПредстЦена * ОбрДок.Количество; ФискальныйРегистратор.PaymentTypeSign = 4; ФискальныйРегистратор.PaymentItemSign = 1; ФискальныйРегистратор.MeasureUnit = 0; // мера количества ФискальныйРегистратор.DivisionalQuantity = 0; // без дробного количества Рез = ФискальныйРегистратор.FNOperation(); Если ПустоеЗначение(ОбрДок.КТН) = 0 Тогда Если ОбрДок.Касса.ФФД_ККТ = Перечисление.ФФД_ККТ.ФФД1_2 Тогда ФискальныйРегистратор.BarCode = СокрЛП(ОбрДок.КТН); Рез = ФискальныйРегистратор.FNSendItemBarcode(); Иначе GTIN = Сред(КТН, 3, 14); SerialNumber = Сред(КТН, 19, 13); ФискальныйРегистратор.MarkingType = 17485; // Это "444D" ФискальныйРегистратор.GTIN = GTIN; ФискальныйРегистратор.SerialNumber = SerialNumber; Рез = ФискальныйРегистратор.FNSendItemCodeData(); // отправка тега маркировки КонецЕсли; КонецЕсли; Если ОбработкаОшибок() <> 0 Тогда Возврат; КонецЕсли; КонецЦикла; Думаю, разберетесь, если захотите. | |||
| 6
    
        Volodja 21.08.22✎ 10:49 | 
        (5) А какая команда здесь отвечает за регистрацию позиции в налоговой?
 Не судите строго, только начинаю разбираться с ФР. Еще не нашел даже списка команд регистратора | |||
| 7
    
        Volodja 21.08.22✎ 10:50 | 
        Или то, что присваивается ФискальныйРегистратор.StringForPrinting уходит в налоговую и на печать?     | |||
| 8
    
        MWWRuza гуру 21.08.22✎ 13:04 | 
        Эээээ... Тут сложнее.
 Перед циклом по строкам: Если ОбрДок.Вид() <> "ЗаказНаряд" Тогда Если ОбрДок.ЧекНаВозврат = 0 Тогда ФискальныйРегистратор.CheckType = 0; Иначе ФискальныйРегистратор.CheckType = 2; КонецЕсли; Иначе ФискальныйРегистратор.CheckType = 0; КонецЕсли; Рез = ФискальныйРегистратор.OpenCheck(); Если СокрЛП(глПользователь.Сотрудник.ИНН) <> "" Тогда ФискальныйРегистратор.TagNumber = 1203; ФискальныйРегистратор.TagType = 7; ФискальныйРегистратор.TagValueStr = СокрЛП(глПользователь.Сотрудник.ИНН); ФискальныйРегистратор.FNSendTag(); КонецЕсли; Потом цикл, я выше Вам его привел, там главная команда ФНОперация, после цикла: Получено = Число(Расшифровка.Получить("Получено")); Если Получено <= 0 Тогда Получено = СуммаДокумента; КонецЕсли; Если (Получено > 0) И (Получено > СуммаДокумента) Тогда ФискальныйРегистратор.Summ1 = Окр(Получено,2,1); ФискальныйРегистратор.Summ2 = 0; ФискальныйРегистратор.Summ3 = 0; ФискальныйРегистратор.Summ4 = 0; ИначеЕсли Док.ВидОпл = Перечисление.ВидОплаты.Мир Тогда ФискальныйРегистратор.Summ2 = Окр(СуммаДокумента,2,1); ФискальныйРегистратор.Summ1 = 0; ФискальныйРегистратор.Summ3 = 0; ФискальныйРегистратор.Summ4 = 0; ИначеЕсли Док.ВидОпл = Перечисление.ВидОплаты.Visa Тогда ФискальныйРегистратор.Summ3 = Окр(СуммаДокумента,2,1); ФискальныйРегистратор.Summ1 = 0; ФискальныйРегистратор.Summ2 = 0; ФискальныйРегистратор.Summ4 = 0; ИначеЕсли Док.ВидОпл = Перечисление.ВидОплаты.Master Тогда ФискальныйРегистратор.Summ4 = Окр(СуммаДокумента,2,1); ФискальныйРегистратор.Summ1 = 0; ФискальныйРегистратор.Summ3 = 0; ФискальныйРегистратор.Summ2 = 0; Иначе ФискальныйРегистратор.Summ1 = Окр(СуммаДокумента,2,1); ФискальныйРегистратор.Summ2 = 0; ФискальныйРегистратор.Summ3 = 0; ФискальныйРегистратор.Summ4 = 0; КонецЕсли; ФискальныйРегистратор.Summ5 = 0; ФискальныйРегистратор.Summ6 = 0; ФискальныйРегистратор.Summ7 = 0; ФискальныйРегистратор.Summ8 = 0; ФискальныйРегистратор.Summ9 = 0; ФискальныйРегистратор.Summ10 = 0; ФискальныйРегистратор.Summ11 = 0; ФискальныйРегистратор.Summ12 = 0; ФискальныйРегистратор.Summ13 = 0; ФискальныйРегистратор.Summ14 = 0; ФискальныйРегистратор.Summ15 = 0; ФискальныйРегистратор.Summ16 = 0; ФискальныйРегистратор.RoundingSumm = 0; // Сумма округления ФискальныйРегистратор.TaxType = 4; // Основная система налогообложения ФискальныйРегистратор.StringForPrinting = " "; // Без этого, печатает повтором последнюю строку наименования товара Рез = ФискальныйРегистратор.FNCloseCheckEx(); ВыданаСдача = ФискальныйРегистратор.Change; Ошибка=ФискальныйРегистратор.ResultCode; По сути, упрощенно: Открываем чек: Рез = ФискальныйРегистратор.OpenCheck(); Потом в цикле, печатаем строки, туда наименование, количество, сумму и т.п., и обязательно команда, что это ФНОперация: Рез = ФискальныйРегистратор.FNOperation(); Потом, всякие оплаты, сдачи и т.п., и потом закрываем чек: Рез = ФискальныйРегистратор.FNCloseCheckEx(); Драйвер должен быть посвежее чем у Вас, например 5.17. | |||
| 9
    
        Volodja 21.08.22✎ 16:29 | 
        (8) Не подскажите, где можно скачать драйвер версии 5.17 ?     | |||
| 10
    
        Злопчинский 21.08.22✎ 16:33 | ||||
| 11
    
        Volodja 21.08.22✎ 16:53 | 
        (10) А библиотеки DrvFR.dll  я там не нашел. Есть на сайте https://www.ais-soft.ru/programs онлайн-кассы для 1С 7.7 и там набор  обработок,защищенных КЗК-2, Но без библиотеки.     | |||
| 12
    
        Злопчинский 21.08.22✎ 17:11 | 
        (11) онлайнкасы из (10) встраиваются в любую конфигу, в т.ч. и нетиповую. демо - с кзак, покупленное - без кзк.     | |||
| 13
    
        Volodja 21.08.22✎ 17:17 | 
        (12) я вот и хотел найти там библиотеку DrvFR.dll посвежее, а то уменя она 4.6.0.244, а (8) говорит, что нужна посвежее, хотя бы 5.17     | |||
| 14
    
        Volodja 21.08.22✎ 17:18 | 
        (12) или этим обработкам не нужна библиотека?     | |||
| 15
    
        MWWRuza гуру 21.08.22✎ 18:34 | 
        Блин... Ну как так-то??? Первая ссылка в поиске по "штрих-м драйвер ккт": https://www.shtrih-m.ru/support/download/?section_id=all&product_id=all&type_id=all&searchDownloads=Драйвер+ККТ     | |||
| 16
    
        Volodja 21.08.22✎ 18:43 | 
        (15). точно.Виноват.Посыпаю голову пеплом.     | |||
| 17
    
        Volodja 21.08.22✎ 18:47 | 
        (15) Я сейчас с документацией знакомлюсь. И нарыл в настройках ККМ есть параметр "Каждая позиция как отдельная регистрация"
 Данный флаг становиться доступном в случае работы через «Штрих-М: Драйвер ФР» и при режиме печати чека по закрытию. Если флаг установлен, то при закрытии чека каждая позиция будет пробиваться на фискальном регистраторе в виде команды регистрации. Это может понадобиться, например для того, чтобы в регистрах ФР-а отвечающих за налоги, накапливалась верная информация. Если флаг не установлен, то Руководство пользователя 43 формирование чека происходит печатью с трок с последующей единственной регистрацией на всю сумму с учетом скидок. Начисление налогов в этом случае ведется программой, а не ФР-ом. Это похоже то, что мне нужно? У них как раз этот флаг не установлен. | |||
| 18
    
        MWWRuza гуру 21.08.22✎ 18:54 | 
        Я с этим не заморачивался. Просто, как я понял, это два режима - добавляете в чек строку в программе, она сразу печатается на чек. Потом, общая команда на закрытие. Или второй режим - передаются все строки чека, ничего не печатается. Потом, одной командой печатается весь чек. У меня, именно второй режим, и я голову не морочу. А с точки зрения передачи в ОФД, ИМХО в обеих режимах должно все передаваться. У меня, построчно только марки проверяются, при добавлении(сканированием) в чек в программе. Печатается потом общей одной командой.     | |||
| 19
    
        Volodja 21.08.22✎ 19:07 | 
        (18) Скорее всего вы говорите о способе печати чека:
 В группе настроек «Способ печати чека» определяется в какой момент будет происходить печать чека при регистрации продаж: - После каждой регистрации (параллельная печать) – каждая позиция чека печатается сразу после ее формирования. Это удобно при использовании медленных (матричных) принтеров в магазинах с большим потоком покупателей. - После закрытия чека (отложенная печать) – чек печатается только после закрытия. Основное преимущество отложенной печати состоит в том, что при использовании режима «объединять позиции с одинаковым товаром» экономится место на чеке в случае регистрации позиций с одинаковым товаром. В случае использования термопринтеров уменьшение пропускной способности при таком способе печати незначительно, по сравнению с параллельной печатью. | |||
| 20
    
        MWWRuza гуру 21.08.22✎ 19:32 | 
        Ну, х.з.... Похоже. Тогда я не знаю, что это такое: "Каждая позиция как отдельная регистрация". Я на это просто даже не обращал внимания, все и так работает, понятия не имею, как там галочка стоит или нет...     | |||
| 21
    
        ДедМорроз 22.08.22✎ 09:41 | 
        У Штрих-М "Каждая позиция как отдельная регистрация" была еще при наличии бумажных контрольных лент,так что должно работать.
 Вот только попадет наименование товара в эту регистрацию или нет - это уже нужно смотреть в коде. На самом деле,оно достаточно просто дорабатывается,в отличие от современных конфигураций,где через xml | |||
| 22
    
        Volodja 22.08.22✎ 12:51 | 
        Так и не получилось с помощью параметра "Каждая позиция как отдельная регистрация" отправлять в налоговую сведения о товаре.
 Но нашел следующее: Есть утилита Тест драйвера ККТ "Driver Test KKT 4.15.0.842" c ее помощью заполняется поле Name. нажимаю кнопку Sale ,закрыть чек (Close receipt) и все ок. Данные уходят в налоговую в разрезе номенклатуры. А то что написано в Line (StringForPrinting) отображается на бумажном чеке Вопрос. Как называется это свойство? Скриншот теста драйвера. https://cloud.mail.ru/public/P7JH/zmQuQ62gN Спасибо. | |||
| 23
    
        MWWRuza гуру 22.08.22✎ 13:11 | 
        Свойство вроде то-же самое, а вот метод - ФНОперация - ?     | |||
| 24
    
        MWWRuza гуру 22.08.22✎ 13:15 | 
        Вот же я выше писал:
 ФискальныйРегистратор.StringForPrinting = Наим; ФискальныйРегистратор.Price = ПредстЦена; ФискальныйРегистратор.Quantity = ОбрДок.Количество; ФискальныйРегистратор.Summ1Enabled = 1; ФискальныйРегистратор.Summ1 = ПредстЦена * ОбрДок.Количество; ФискальныйРегистратор.PaymentTypeSign = 4; ФискальныйРегистратор.PaymentItemSign = 1; ФискальныйРегистратор.MeasureUnit = 0;// мера количества ФискальныйРегистратор.DivisionalQuantity = 0;// без дробного количества Рез = ФискальныйРегистратор.FNOperation(); Это точно работает, все передается в ОФД и печатается на чеке. | |||
| 25
    
        Volodja 22.08.22✎ 13:22 | 
        (24) Я тогда не пойму, почему во всей конфигурации "Штрих-М: Кассир" от НТЦ "Штрих-М" версия 1.9.0.3 вообще упоминания ФискальныйРегистратор.FNOperation() нет.     | |||
| 26
    
        Volodja 22.08.22✎ 14:37 | 
        (24) Похоже, что основные модуля по работе с ФР защищены в компоненте ShtrihContext.dll и чтобы выполнить ФискальныйРегистратор.FNOperation() видимо придется переписывать всю обработку РегистрацияПродаж.     | |||
| 27
    
        MWWRuza гуру 22.08.22✎ 14:48 | 
        (25) версия 1.9.0.3 вообще упоминания ФискальныйРегистратор.FNOperation() нет.
 А что, должно быть??? Походу, Вы думаете, что в начале 2000 годов предсказатели работали в Штрихе, и на тот момент уже знали, что в 2016(? если память не изменяет ?) придумают кассы онлайн и ФискальныеНакопители... Я не знаю, что защищено в Вашей конфигурации, и что "спрятано" в длл, но, обычно процедуры/функции работы с оборудованием в них не прячут. Чаще всего, всякие интерфейсные дела, или какую-то логику учета... А работа с ККТ, обычно открыта. Так, как меняется часто, и каждый раз переписывать длл - накладно. Просто конфа старая, и этого всего просто в ней нет, там, как я уже в самом начале писал - все под "доисторический" ККМ с ЭКЛЗ заточено... Поэтому я и написал в самом начале - "просто поправить не получится, придется переписывать все процедуры работы с ККТ под новый драйвер"... | |||
| 28
    
        MWWRuza гуру 22.08.22✎ 14:51 | 
        На самом деле, там нет ничего сложного. Используя фрагменты тех кусков кода, что я выше привел - час делов вместе с отладкой. Но, естественно, только с живым ККТ. "На пальцах" не получится.     | |||
| 29
    
        Volodja 22.08.22✎ 15:27 | 
        (28) Я ошибся в (2) версия зарегистрированной DrvFR.dll - 4.15.0.842 от 25.03.2021
 Просто (2) лежала в каталоге БД, и она старая ( 4.6.0.244) Кроме метода FNOperation() нет также и Quantity и много еще чего. Что интересно с конфигурацией в дистрибутиве идет внешняя обработка ПечатьПД.ert (подкладной документ) от 2005 года, там эти методы есть, кроме FNOperation(), но он не используется И при вызове обработки РегистрацияПродаж выполняется такое: МодульОбработки.AssignContext(Контекст); МодульОбработки.Compile(); КодНажатойКлавиши=-1; ФормаРегистрации=0; МодульОбработки.Execute(); | |||
| 30
    
        Kigo_Kigo 22.08.22✎ 15:39 | 
        (5) и Особенно в (8) вам все рассказали, только так и таком порядке будет все работать как надо     | |||
| 31
    
        MWWRuza гуру 22.08.22✎ 22:02 | 
        (29) А компоненту Штриховскую, типа защита, лучще вырезать из этого модуля... Она там нафик не нужна, по крайней мере для взаимодействия с ККТ... Разобраться, что она там делает, и если этот функционал Вам нужен, оставить, а обработку обслуживания кассы переписать без нее, как у всех остальных сделано, а эсли без нее можно обойтись - то "Резать, не дожидаясь перитонита(С)"...
 Если хотите, могу всю обработку обслуживания Штриха из своей конфы Рарусовской сохранить как внешнюю, и выложить куда-нибудь. Там, вся конфа тоже защитами через ВК, защищенную ключем, пронизана вся, но в этом месте ничего такого нет и близко, все чисто на языке 1С написано, без непонятных "черных ящиков"... | |||
| 32
    
        victuan1 24.08.22✎ 10:19 | 
        (22) Поймите: для вашей конфигурации расстановка никаких галочек не поможет решить сабж.
 Нужно вносить изменения в код программы и достаточно серьезные. Если не можете сами, но есть бюджет на доработку, то обратитесь к программистам 1С. | |||
| 33
    
        Volodja 24.08.22✎ 10:44 | 
        (32) К вам уже обратились     | |||
| 34
    
        MWWRuza гуру 24.08.22✎ 10:48 | 
        +(32) Да, Виктор все правильно пишет. У меня эта конфа Рарусовская, на которую я ссылаюсь, тоже изначально была в таком-же состоянии - писалась Рарусом тогда, когда о кассах ОнЛайн даже в проектах разговоров не было. Было все на кассы с ЭКЛЗ заточено. Но, у меня организация эта на обслуге, я там получаю хоть копейки, но каждый месяц, и по мере необхолдимости что-то допиливаю потихоньку. Поэтому, я уже и не помню, в какой момент я решал именно проблему что и у Вас, но, точно допиливал и решил. Наверное, в далеком 2017 году... А сейчас, несколько месяцев назад, я в ее-же допилил под ФФД-1.2. И все это как-то постепенно, незаметно, без особой "революции", даже не заметно для пользователей. Хотя, последнюю доработку они скорее всего заметят - если при сканировании марки она не пройдет проверку в ЦРПТ, будет вопрос пользователю :-) Такое, сложно не заметить :-)     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |