|
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. И все это как-то постепенно, незаметно, без особой "революции", даже не заметно для пользователей. Хотя, последнюю доработку они скорее всего заметят - если при сканировании марки она не пройдет проверку в ЦРПТ, будет вопрос пользователю :-) Такое, сложно не заметить :-)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |