|
v7: Не уходит код маркировки в офд | ☑ | ||
---|---|---|---|---|
0
Mafiozaa
23.10.20
✎
05:02
|
Приветствую не уходит код маркировки передаю из 1с
Объект.MarkingType = 17485; Объект.SerialNumber = "SerialNumber"; Объект.GTIN = GTIN; Объект.FNSendItemCodeData(); Не уходит, попробывал напрямую вставить в тест драйвер ФН->КТ-> Там ручками вбил гтин серийник, при нажатие на отправить выдает 115 ошибку команда не поддерживается в данном режиме, прошивка 13.02.20 в чем проблема? смена открыта |
|||
1
victuan1
23.10.20
✎
05:27
|
Непосредственно перед Объект.MarkingType = 17485 какой метод использован?
FNOperation()? |
|||
2
Mafiozaa
23.10.20
✎
05:27
|
(1) Обработка fr_elves.ert тут нет FNOperation();
|
|||
3
Mafiozaa
23.10.20
✎
05:28
|
(1) Щас выложу весь код обработки
|
|||
4
Mafiozaa
23.10.20
✎
05:31
|
(1)
Перем ОписаниеРезультата; //****************************************************************************** Функция ПолучитьОписаниеРезультата(Объект) Возврат Объект.ResultCodeDescription; КонецФункции // ПолучитьОписаниеРезультата() //******************************************************************************** Функция ПодключитьсяКФР(Объект, Пароль) Рез = 0; Объект.Password=Пароль; Объект.Connect(); Ответ = Объект.ResultCode; Если Ответ=0 Тогда Рез=1; Иначе ОписаниеРезультата = ПолучитьОписаниеРезультата(Объект); КонецЕсли; Возврат Рез; КонецФункции //******************************************************************************** Функция ОтключитьсяОтФР(Объект, Пароль, ЗапоминатьОшибку = 1) Рез = 0; // пеключим ФР в нерабочий режим Объект.Password=Пароль; Объект.Disconnect(); Ответ = Объект.ResultCode; Если Ответ=0 Тогда Рез=1; ИначеЕсли ЗапоминатьОшибку = 1 Тогда ОписаниеРезультата = ПолучитьОписаниеРезультата(Объект); КонецЕсли; Возврат Рез; КонецФункции //******************************************************************************** Функция Подключить(Компонента, ПрогИд, Объект, Пароль) Рез = 0; Если ЗагрузитьВнешнююКомпоненту(Компонента) = 0 Тогда ОписаниеРезультата = "не удалось загрузить внешнюю компоненту """ + Компонента + """"; Иначе Попытка Объект = СоздатьОбъект("AddIn." + ПрогИд); // Создание объекта внешней компоненты Исключение КонецПопытки; Если ПустоеЗначение(Объект) = 1 Тогда ОписаниеРезультата = "не удалось создать объект внешней компоненты с программым идентификатром AddIn." + ПрогИд; Иначе Рез = 1; КонецЕсли; КонецЕсли; Возврат Рез; КонецФункции //******************************************************************************** Функция Отключить(Объект, Пароль) Рез = 0; Если ПустоеЗначение(Объект) = 1 Тогда Рез = 1; // нет объекта, ничего не нужно отключать Иначе Рез = ОтключитьсяОтФР(Объект, Пароль); КонецЕсли; Возврат Рез; КонецФункции //******************************************************************************** Процедура ОтрезатьЧек(Объект, Пароль) Ошибка=80; //Идет печать предыдущей команды Пока Ошибка=80 Цикл Попытка Объект.Password = Пароль; Объект.CutType = 1; Объект.CutCheck(); Ошибка=Объект.ResultCode; Исключение Ошибка=-1; КонецПопытки; КонецЦикла; КонецПроцедуры //******************************************************************************** Процедура АннулированиеЧека(Объект, Пароль) Попытка Объект.Password=Пароль; Объект.CancelCheck(); Исключение КонецПопытки; КонецПроцедуры //******************************************************************************** Функция ПечататьТекст(Объект, Пароль, Текст) Если ПустоеЗначение(Объект) = 1 Тогда ОписаниеРезультата = "устройство не подключено"; Возврат 0; ИначеЕсли ПодключитьсяКФР(Объект, Пароль) = 0 Тогда Возврат 0; КонецЕсли; КолСтр=СтрКоличествоСтрок(Текст); Для ц = 1 По КолСтр Цикл Стр=СтрПолучитьСтроку(Текст,ц); Объект.StringForPrinting=Стр ; Объект.PrintString(); КонецЦикла; ОтрезатьЧек(Объект, Пароль); Возврат ОтключитьсяОтФР(Объект, Пароль); КонецФункции //******************************************************************************** Функция ПечататьТекстСпасибо(Объект, Пароль, Текст) Если ПустоеЗначение(Объект) = 1 Тогда ОписаниеРезультата = "устройство не подключено"; Возврат 0; ИначеЕсли ПодключитьсяКФР(Объект, Пароль) = 0 Тогда Возврат 0; КонецЕсли; КолСтр=СтрКоличествоСтрок(Текст); Для ц = 1 По КолСтр*1.5 Цикл Стр=СтрПолучитьСтроку(Текст,ц); Объект.StringForPrinting=Стр; Объект.PrintString(); Объект.StringForPrinting=" "; Объект.PrintString(); КонецЦикла; ОтрезатьЧек(Объект, Пароль); Возврат ОтключитьсяОтФР(Объект, Пароль); КонецФункции //******************************************************************************** Функция ПечататьЧек(Объект, Пароль, СписокТоваров, Получено, ПолучСерт, ПолучКарт, Скидка, ПризнВозврата, НомерСекции, НомерЧека,СкидкаСуммой,НомерДок) Если ПустоеЗначение(Объект) = 1 Тогда ОписаниеРезультата = "устройство не подключено"; Возврат 0; ИначеЕсли ПодключитьсяКФР(Объект, Пароль) = 0 Тогда Возврат 0; КонецЕсли; // регистрация товаров РезРегистрация = 1; СписокТоваров.ВыбратьСтроки(); Объект.StringForPrinting = " Товарный чек"; Объект.PrintString(); Объект.StringForPrinting = " "+ НомерДок+" от "+ТекущаяДата(); Объект.PrintString(); Если (Нрег(глПользователь.Наименование))="кассир1" Тогда пробел =" " ; Объект.StringForPrinting = Лев("Продавец:"+прав(пробел,32-(9+СтрДлина(Константа.Кассир1)))+(Константа.Кассир1),32); Объект.PrintString(); КонецЕсли; Если (Нрег(глПользователь.Наименование))="кассир2" Тогда пробел =" " ; Объект.StringForPrinting = Лев("Продавец:"+прав(пробел,32-(9+СтрДлина(Константа.Кассир2)))+(Константа.Кассир2),32); Объект.PrintString(); КонецЕсли; Если (Нрег(глПользователь.Наименование))="кассир3" Тогда пробел =" " ; Объект.StringForPrinting = Лев("Продавец:"+прав(пробел,32-(9+СтрДлина(Константа.Кассир3)))+(Константа.Кассир3),32); Объект.PrintString(); КонецЕсли; Если (Нрег(глПользователь.Наименование))="кассир4" Тогда пробел =" " ; Объект.StringForPrinting = Лев("Продавец:"+прав(пробел,32-(9+СтрДлина(Константа.Кассир4)))+(Константа.Кассир4),32); Объект.PrintString(); КонецЕсли; Если (Нрег(глПользователь.Наименование))="кассир5" Тогда пробел =" " ; Объект.StringForPrinting = Лев("Продавец:"+прав(пробел,32-(9+СтрДлина(Константа.Кассир5)))+(Константа.Кассир5),32); Объект.PrintString(); КонецЕсли; Если (Нрег(глПользователь.Наименование))="кассир6" Тогда пробел =" " ; Объект.StringForPrinting = Лев("Продавец:"+прав(пробел,32-(9+СтрДлина(Константа.Кассир6)))+(Константа.Кассир6),32); Объект.PrintString(); КонецЕсли; Если (Нрег(глПользователь.Наименование))="кассир7" Тогда пробел =" " ; Объект.StringForPrinting = Лев("Продавец:"+прав(пробел,32-(9+СтрДлина(Константа.Кассир7)))+(Константа.Кассир7),32); Объект.PrintString(); КонецЕсли; Пока СписокТоваров.ПолучитьСтроку() = 1 Цикл СтрокаДляПечати = СокрЛП(СписокТоваров.ТовНаим); ДлинаСтроки = 32; //Пока СтрДлина(СтрокаДляПечати)>0 Цикл //Объект.StringForPrinting = Лев(СтрокаДляПечати,ДлинаСтроки); //Объект.PrintString(); //СтрокаДляПечати = СокрЛП(Сред(СтрокаДляПечати,ДлинаСтроки+1)); //КонецЦикла; Объект.Password = Пароль; Объект.StringForPrinting = Лев(СтрокаДляПечати,ДлинаСтроки); // Объект.Price = СписокТоваров.Цена; Если СписокТоваров.Количество=0 тогда Объект.Price = СписокТоваров.Цена; иначе Объект.Price = СписокТоваров.Сумма/СписокТоваров.Количество; КонецЕсли; Объект.Quantity = СписокТоваров.Количество; Объект.Department = НомерСекции; //Проверка наличия колонки "НДС" в таблице значений. НДСЕсть = ""; Попытка НДС = СписокТоваров.НДС; НДСЕсть = 1; Исключение НДСЕсть = 0; КонецПопытки; Если НДСЕсть = 1 Тогда//Печатаем НДС // В настройках ФР надо настроить ставки: // Налог 1 = 18% - НДС 18% // Налог 2 = 10% - НДС 10% // Налог 3 = 20% - НДС 20% Если СписокТоваров.НДС = 18 Тогда Объект.Tax1 = 1; ИначеЕсли СписокТоваров.НДС = 10 Тогда Объект.Tax1 = 2; ИначеЕсли СписокТоваров.НДС = 20 Тогда Объект.Tax1 = 3; Иначе Объект.Tax1 = 0; КонецЕсли; Объект.Tax2 = 0; Объект.Tax3 = 0; Объект.Tax4 = 0; КонецЕсли; Если ПризнВозврата = 0 Тогда Объект.Sale(); Иначе Объект.ReturnSale(); КонецЕсли; Если Объект.ResultCode <> 0 Тогда ОписаниеРезультата = ПолучитьОписаниеРезультата(Объект); АннулированиеЧека(Объект, Пароль); ОтключитьсяОтФР(Объект, Пароль, 0); Возврат 0; КонецЕсли; Если ПустоеЗначение(СписокТОваров.СкидкаПоСтроке) = 0 Тогда пробел ="................................" ; Объект.StringForPrinting = Лев("Стоимость"+прав(пробел,32-(9+СтрДлина(Формат(СписокТоваров.Цена*СписокТоваров.Количество,"Ч.2"))))+Формат(СписокТоваров.Цена*СписокТоваров.Количество,"Ч.2"),32); Объект.PrintString();// СписокТоваров.СкидкаПоСтроке Объект.StringForPrinting = "Скидка "+СписокТоваров.СкидкаПоСтроке+"%"+прав(пробел,32-(5+СтрДлина(СписокТоваров.СкидкаПоСтроке-СписокТоваров.СкидкаСпасибо)+СтрДлина(Формат((СписокТоваров.Цена*СписокТоваров.Количество-СписокТоваров.Сумма-СписокТоваров.СкидкаСпасибо),"Ч.2"))))+Формат(((СписокТоваров.Цена*СписокТоваров.Количество)-СписокТоваров.Сумма-СписокТоваров.СкидкаСпасибо),"Ч.2"); Объект.PrintString(); //доб.скидка СПАСИБО Если пустоезначение(СписокТоваров.СкидкаСпасибо)=0 тогда Объект.StringForPrinting = "Скидка СПАСИБО"+прав(пробел,32-(10+СтрДлина(СписокТоваров.СкидкаСпасибо)+СтрДлина(Формат((СписокТоваров.СкидкаСпасибо),"Ч.2"))))+Формат(((СписокТоваров.СкидкаСпасибо)),"Ч.2"); Объект.PrintString(); Объект.StringForPrinting = "Общая скидка "+прав(пробел,32-(11+СтрДлина(СписокТоваров.СкидкаПоСтроке)+СтрДлина(Формат((СписокТоваров.Цена*СписокТоваров.Количество-СписокТоваров.Сумма),"Ч.2"))))+Формат(((СписокТоваров.Цена*СписокТоваров.Количество)-СписокТоваров.Сумма),"Ч.2"); Объект.PrintString(); КонецЕсли; Объект.StringForPrinting = Лев("Всего"+прав(пробел,32-(5+СтрДлина(Формат(СписокТоваров.Сумма,"Ч.2"))))+Формат(СписокТоваров.Сумма,"Ч.2"),32); Объект.PrintString(); ИначеЕсли ПустоеЗначение(СписокТОваров.СкидкаСпасибо) = 0 тогда пробел ="................................" ; Объект.StringForPrinting = Лев("Стоимость"+прав(пробел,32-(9+СтрДлина(Формат(СписокТоваров.Цена*СписокТоваров.Количество,"Ч.2"))))+Формат(СписокТоваров.Цена*СписокТоваров.Количество,"Ч.2"),32); Объект.PrintString();// Объект.StringForPrinting = "Скидка СПАСИБО"+прав(пробел,32-(10+СтрДлина(СписокТоваров.СкидкаСпасибо)+СтрДлина(Формат((СписокТоваров.СкидкаСпасибо),"Ч.2"))))+Формат(((СписокТоваров.СкидкаСпасибо)),"Ч.2"); Объект.PrintString(); Объект.StringForPrinting = Лев("Всего"+прав(пробел,32-(5+СтрДлина(Формат(СписокТоваров.Сумма,"Ч.2"))))+Формат(СписокТоваров.Сумма,"Ч.2"),32); Объект.PrintString(); //конец скидка СПАСИБО КонецЕсли; // // Если ПустоеЗначение(СписокТОваров.СкидкаПоСтроке) = 0 Тогда // // Объект.Password = Пароль; // Объект.StringForPrinting = Лев(СтрокаДляПечати,ДлинаСтроки); // // Объект.Price = СписокТоваров.Цена; // Объект.Price = СписокТоваров.Сумма/СписокТоваров.Количество; // Объект.Quantity = СписокТоваров.Количество; // Объект.Department = НомерСекции; // // //Проверка наличия колонки "НДС" в таблице значений. // НДСЕсть = ""; // Попытка // НДС = СписокТоваров.НДС; // НДСЕсть = 1; // Исключение // НДСЕсть = 0; // КонецПопытки; // // Если НДСЕсть = 1 Тогда//Печатаем НДС // // // В настройках ФР надо настроить ставки: // // Налог 1 = 18% - НДС 18% // // Налог 2 = 10% - НДС 10% // // Налог 3 = 20% - НДС 20% // // Если СписокТоваров.НДС = 18 Тогда // Объект.Tax1 = 1; // ИначеЕсли СписокТоваров.НДС = 10 Тогда // Объект.Tax1 = 2; // ИначеЕсли СписокТоваров.НДС = 20 Тогда // Объект.Tax1 = 3; // Иначе // Объект.Tax1 = 0; // КонецЕсли; // Объект.Tax2 = 0; // Объект.Tax3 = 0; // Объект.Tax4 = 0; // КонецЕсли; // // Если ПризнВозврата = 0 Тогда // Объект.Sale(); // Иначе // Объект.ReturnSale(); // КонецЕсли; // // Если Объект.ResultCode <> 0 Тогда // ОписаниеРезультата = ПолучитьОписаниеРезультата(Объект); // АннулированиеЧека(Объект, Пароль); // ОтключитьсяОтФР(Объект, Пароль, 0); // Возврат 0; // КонецЕсли; // // // // // // КонецЕсли; // КонецЦикла; //Если СкидкаСуммой <> 0 тогда // Объект.StringForPrinting=" Спасибо за покупку"; // Объект.Summ1 = СкидкаСуммой; // Объект.Discount(); //КонецЕсли; // Объект.Password = Пароль; Объект.Summ1 = Получено; Объект.Summ2 = ПолучСерт; Объект.Summ3 = 0; Объект.Summ4 = ПолучКарт; Объект.StringForPrinting=" "; Объект.StringForPrinting=" Спасибо за покупку"; // Объект.StringForPrinting=" "; // Сообщить("ывпаыв"); Объект.DiscountOnCheck=Скидка; Объект.DiscountOnCheck=0; Объект.CloseCheck(); Если Объект.ResultCode <> 0 Тогда ОписаниеРезультата = ПолучитьОписаниеРезультата(Объект); АннулированиеЧека(Объект, Пароль); ОтрезатьЧек(Объект, Пароль); ОтключитьсяОтФР(Объект, Пароль, 0); Возврат 0; КонецЕсли; Объект.Password = Пароль; Объект.GetECRStatus(); Если Объект.ResultCode <> 0 Тогда ОписаниеРезультата = ПолучитьОписаниеРезультата(Объект); ОтключитьсяОтФР(Объект, Пароль, 0); Возврат 0; КонецЕсли; НомерЧека = Объект.OpenDocumentNumber+?(Объект.ECRAdvancedMode=5,1,0); // ОтрезатьЧек(Объект, Пароль); Возврат ОтключитьсяОтФР(Объект, Пароль); КонецФункции //******************************************************************************** Функция ЗакрытьСмену(Объект, Пароль, НомерЛенты) Рез = 0; Если ПустоеЗначение(Объект) = 1 Тогда ОписаниеРезультата = "устройство не подключено"; ИначеЕсли ПодключитьсяКФР(Объект, Пароль) = 1 Тогда // переключение в режим снятия отчета (нужен пароль администратора) Объект.Password = Пароль; Объект.PrintReportWithCleaning(); Если Объект.ResultCode <> 0 Тогда ОписаниеРезультата = ПолучитьОписаниеРезультата(Объект); ОтключитьсяОтФР(Объект, Пароль, 0); Возврат 0; КонецЕсли; Объект.Password = Пароль; Объект.GetECRStatus(); Если Объект.ResultCode <> 0 Тогда ОписаниеРезультата = ПолучитьОписаниеРезультата(Объект); ОтключитьсяОтФР(Объект, Пароль, 0); Возврат 0; КонецЕсли; НомерЛенты = Объект.SessionNumber+?(Объект.ECRAdvancedMode=5,1,0); ОтрезатьЧек(Объект, Пароль); Рез = ОтключитьсяОтФР(Объект, Пароль); КонецЕсли; Возврат Рез; КонецФункции /////////////////////////////////////////////// Функция ОткрытьСмену(Объект, Пароль, НомерЛенты) Рез = 0; Если ПустоеЗначение(Объект) = 1 Тогда ОписаниеРезультата = "устройство не подключено"; ИначеЕсли ПодключитьсяКФР(Объект, Пароль) = 1 Тогда // переключение в режим снятия отчета (нужен пароль администратора) Объект.Password = Пароль; Объект.OpenSession(); КонецЕсли; Возврат Рез; КонецФункции Функция СнятьХотчет(Объект, Пароль, НомерЛенты) Рез = 0; Если ПустоеЗначение(Объект) = 1 Тогда ОписаниеРезультата = "устройство не подключено"; ИначеЕсли ПодключитьсяКФР(Объект, Пароль) = 1 Тогда // переключение в режим снятия отчета (нужен пароль администратора) Объект.Password = Пароль; // Объект.PrintReportWithCleaning(); Объект.PrintReportWithoutCleaning(); КонецЕсли; Возврат Рез; КонецФункции //******************************************************************************** Функция ПроверкаПароля (Пароль) Если ПустаяСтрока(Пароль) = 1 Тогда Ответ = "неправильно указан пароль пользователя"; Возврат Ответ; Иначе Попытка ПарольЧислом = Число(Пароль); Исключение Ответ = "неправильно указан пароль пользователя"; Возврат Ответ; КонецПопытки; КонецЕсли; Возврат ""; КонецФункции //******************************************************************************** Процедура ПриОткрытии() Перем Объект, НомерЧека, НомерЛенты, Парам; СтатусВозврата(0); Форма.Параметр.Выгрузить(Парам); Форма.Параметр.УдалитьВсе(); Если Парам.РазмерСписка() = 0 Тогда Рез = 0; ОписаниеРезультата = "в обработку не переданы параметры"; Иначе Процесс = НРег(Парам.Получить("Процесс")); Если Процесс = "подключить" Тогда Компонента = Парам.Получить("Компонента"); ПрогИд = Парам.Получить("ПрогИд"); Пароль = Парам.Получить("ПарольПользователя"); ОписаниеРезультата = ПроверкаПароля (Пароль); Если ОписаниеРезультата <> "" Тогда Рез = 0; Иначе Рез = Подключить(Компонента, ПрогИд, Объект, Пароль); Форма.Параметр.Установить("Объект", Объект); КонецЕсли; ИначеЕсли Процесс = "отключить" Тогда Рез = Отключить(Объект, Пароль); ИначеЕсли Процесс = "печатать_текст" Тогда Объект = Парам.Получить("Объект"); Пароль = Парам.Получить("ПарольПользователя"); Текст = Парам.Получить("Текст"); ОписаниеРезультата = ПроверкаПароля (Пароль); Если ОписаниеРезультата <> "" Тогда Рез = 0; Иначе Рез = ПечататьТекст(Объект, Пароль, Текст); КонецЕсли; ИначеЕсли Процесс = "печатать_текст_спасибо" Тогда Объект = Парам.Получить("Объект"); Пароль = Парам.Получить("ПарольПользователя"); Текст = Парам.Получить("Текст"); ОписаниеРезультата = ПроверкаПароля (Пароль); Если ОписаниеРезультата <> "" Тогда Рез = 0; Иначе Рез = ПечататьТекстСпасибо(Объект, Пароль, Текст); КонецЕсли; ИначеЕсли Процесс = "печатать_чек" Тогда Объект = Парам.Получить("Объект"); Пароль = Парам.Получить("ПарольПользователя"); СписокТоваров = Парам.Получить("СписокТоваров"); Получено = Парам.Получить("Получено"); ПолучСерт = Парам.Получить("ПолучСерт"); ПолучКарт = Парам.Получить("ПолучКарт"); ЧекНаВозврат = Парам.Получить("Возврат"); НомерСекции = Парам.Получить("НомерСекции"); Скидка = Парам.Получить("Скидка"); СкидкаСуммой = Парам.Получить("СкидкаСуммой"); НомерДок1 = Парам.Получить("НомерДок1"); ОписаниеРезультата = ПроверкаПароля (Пароль); Если ОписаниеРезультата <> "" Тогда Рез = 0; Иначе; Рез = ПечататьЧек(Объект, Пароль, СписокТоваров, Получено, ПолучСерт, ПолучКарт, Скидка, ЧекНаВозврат, НомерСекции, НомерЧека,СкидкаСуммой,НомерДок1); Форма.Параметр.Установить("НомерЧека", НомерЧека); Объект.MarkingType = 17485; Объект.GTIN = GTIN; Объект.SerialNumber = SerialNumber; Объект.FNSendItemCodeData(); КонецЕсли; ИначеЕсли Процесс = "закрыть_смену" Тогда Объект = Парам.Получить("Объект"); Пароль = Парам.Получить("ПарольАдминистратора"); Если Число(Пароль)=0 Тогда Рез = 0; ОписаниеРезультата = "неправильно указан пароль администратора"; Иначе Рез = ЗакрытьСмену(Объект, Пароль, НомерЛенты); Форма.Параметр.Установить("НомерЛенты", НомерЛенты); КонецЕсли; ИначеЕсли Процесс = "открыть_смену" Тогда /// Сообщить("Мытут"); Объект = Парам.Получить("Объект"); Пароль = Парам.Получить("ПарольАдминистратора"); Рез = ОткрытьСмену(Объект, Пароль, НомерЛенты); ИначеЕсли Процесс = "снятьхотчет" Тогда /// Сообщить("Мытут"); Объект = Парам.Получить("Объект"); Пароль = Парам.Получить("ПарольАдминистратора"); Рез = СнятьХотчет(Объект, Пароль, НомерЛенты); //Если Число(Пароль)=0 Тогда // Рез = 0; // ОписаниеРезультата = "неправильно указан пароль администратора"; //Иначе // Рез = ОткрытьСмену(Объект, Пароль, НомерЛенты); // Форма.Параметр.Установить("НомерЛенты", НомерЛенты); //КонецЕсли; // Иначе ОписаниеРезультата = "неизвестная команда"; Рез = 0; КонецЕсли; КонецЕсли; Форма.Параметр.Установить("Результат" , Рез); Форма.Параметр.Установить("ОписаниеРезультата", ОписаниеРезультата); КонецПроцедуры //******************************************************************************** ОписаниеРезультата = ""; |
|||
5
Mafiozaa
23.10.20
✎
05:38
|
(1) Или мне самому можно добавить этот FNOperation и после него прописать передачу?
|
|||
6
victuan1
23.10.20
✎
06:11
|
В коде используются устаревшие методы:
Если ПризнВозврата = 0 Тогда Объект.Sale(); Иначе Объект.ReturnSale(); КонецЕсли; С ними передача тега 1162 невозможна. Надо полностью переписывать код обработки под новые принципы работы, в частности для регистрации позиции в чеке использовать FNOperation вместо Sale / ReturnSale |
|||
7
Mafiozaa
23.10.20
✎
06:55
|
(6) Хорошо,предположим, тогда почему я не могу напрямки с тест драйвера послать код, 115 ошибку выдает
|
|||
8
Kigo_Kigo
23.10.20
✎
08:14
|
Серьезно?
ИначеЕсли Процесс = "печатать_чек" Тогда Объект = Парам.Получить("Объект"); Пароль = Парам.Получить("ПарольПользователя"); СписокТоваров = Парам.Получить("СписокТоваров"); Получено = Парам.Получить("Получено"); ПолучСерт = Парам.Получить("ПолучСерт"); ПолучКарт = Парам.Получить("ПолучКарт"); ЧекНаВозврат = Парам.Получить("Возврат"); НомерСекции = Парам.Получить("НомерСекции"); Скидка = Парам.Получить("Скидка"); СкидкаСуммой = Парам.Получить("СкидкаСуммой"); НомерДок1 = Парам.Получить("НомерДок1"); ОписаниеРезультата = ПроверкаПароля (Пароль); Если ОписаниеРезультата <> "" Тогда Рез = 0; Иначе; Рез = ПечататьЧек(Объект, Пароль, СписокТоваров, Получено, ПолучСерт, ПолучКарт, Скидка, ЧекНаВозврат, НомерСекции, НомерЧека,СкидкаСуммой,НомерДок1); Форма.Параметр.Установить("НомерЧека", НомерЧека); Объект.MarkingType = 17485; Объект.GTIN = GTIN; Объект.SerialNumber = SerialNumber; Объект.FNSendItemCodeData(); КонецЕсли; |
|||
9
Mafiozaa
23.10.20
✎
08:16
|
(8) Не совсем догнал, о чем вы, обработка стандартная, мною добавлено лишь
Объект.MarkingType = 17485; Объект.GTIN = GTIN; Объект.SerialNumber = SerialNumber; Объект.FNSendItemCodeData(); Так как вся инфа ставить после FNOperation, я попробывал затолкнуть сюда, я сделал что то не то? подсказка? |
|||
10
Kigo_Kigo
23.10.20
✎
08:17
|
(6) Покажи как надо, у меня сча такая же проблема, драйвер маркировку хавает, а нигде она не появляется
(9) Маркировка передается для каждой позиции отдельно после Если НДСЕсть = 1 Тогд�//Печатаем НДС // В настройках ФР надо настроить ставки: // Налог 1 = 18% - НДС 18% // Налог 2 = 10% - НДС 10% // Налог 3 = 20% - НДС 20% Если СписокТоваров.НДС = 18 Тогда Объект.Tax1 = 1; ИначеЕсли СписокТоваров.НДС = 10 Тогда Объект.Tax1 = 2; ИначеЕсли СписокТоваров.НДС = 20 Тогда Объект.Tax1 = 3; Иначе Объект.Tax1 = 0; КонецЕсли; Объект.Tax2 = 0; Объект.Tax3 = 0; Объект.Tax4 = 0; КонецЕсли; Объект.MarkingType = 17485; Объект.GTIN = GTIN; Объект.SerialNumber = SerialNumber; Объект.FNSendItemCodeData(); |
|||
11
Mafiozaa
23.10.20
✎
08:28
|
(10) Брат, подскинь всю обработку, полистаю гляну может еще что не так, у тебя так же fr_elves?
|
|||
12
Kigo_Kigo
23.10.20
✎
08:34
|
(11) Там все тоже самое что и у тебя только добавлено
Если НДСЕсть = 1 Тогда//Печатаем НДС // В настройках ФР надо настроить ставки: // Налог 1 = 18% - НДС 18% // Налог 2 = 10% - НДС 10% // Налог 3 = 20% - НДС 20% Если СписокТоваров.НДС = 18 Тогда Объект.Tax1 = 1; ИначеЕсли СписокТоваров.НДС = 10 Тогда Объект.Tax1 = 2; ИначеЕсли СписокТоваров.НДС = 20 Тогда Объект.Tax1 = 3; Иначе Объект.Tax1 = 0; КонецЕсли; Объект.Tax2 = 0; Объект.Tax3 = 0; Объект.Tax4 = 0; ДлинаСтроки = 36; Иначе ДлинаСтроки = 0; КонецЕсли; Если ПризнВозврата = 0 Тогда Объект.Sale(); Иначе Объект.ReturnSale(); КонецЕсли; Если ПустоеЗначение(СокрЛП(СписотТоваров.Маркировка)) = 0 Тогда КМ = СокрЛП(СписотТоваров.Маркировка); GTIN = Сред(КМ, 3, 14); SerialNumber = Сред(КМ, 19, 13); Объект.Пароль = Пароль; Объект.MarkingType = 17485;// Это "444D" Объект.GTIN = GTIN; Объект.SerialNumber = SerialNumber; Объект.FNSendItemCodeData(); // отправка тега маркировки КонецЕсли; |
|||
13
Kigo_Kigo
23.10.20
✎
08:34
|
СписотТоваров = СписокТоваров
|
|||
14
Mafiozaa
23.10.20
✎
08:43
|
(13) А пробывал через тест драйвера напрямую отправить код?
|
|||
15
Kigo_Kigo
23.10.20
✎
08:48
|
(14) там как то надо открыть чек, загнать туда товар цену количество, только после этого можно попробовать загнать туда маркировку - в лоб, тоже самое что и у тебя - "команда не поддерживается"
|
|||
16
Mafiozaa
23.10.20
✎
08:51
|
(15) Теперь и этот вариант откидываю, читал что действительно
Если ПризнВозврата = 0 Тогда Объект.Sale(); Иначе Объект.ReturnSale(); КонецЕсли; Что это устаревшая конструкция, и при нем якобы отправка тега не возможна, но при этом нигде не нашел обработки с FNOperation А пробывал отправлять xehom? |
|||
17
Kigo_Kigo
23.10.20
✎
09:10
|
Вот что надыбал
FNOperation() убираем из конструкции Если ПризнВозврата = 0 Тогда Объект.Sale(); Иначе Объект.ReturnSale(); КонецЕсли; вместо в начале чека вставляем Если ПризнВозврата = 0 Тогда Объект.CheckType= 0; // «0» - продажа, «1» - покупка, «2» - возврат продажи, «3» - возврат покупки. Иначе Объект.CheckType= 2; КонецЕсли; рез=Объект.OpenCheck(); Если рез<>0 Тогда Сообщить("НапечататьЧек, ошибка открытия нового чека: "+Объект.ResultCodeDescription); рКодОшибки=Объект.ResultCode; КонецЕсли; потом Если ПустоеЗначение(СокрЛП(СписотТоваров.Маркировка)) = 0 Тогда КМ = СокрЛП(СписотТоваров.Маркировка); GTIN = Сред(КМ, 3, 14); SerialNumber = Сред(КМ, 19, 13); Объект.Пароль = Пароль; Объект.MarkingType = 17485// Это "444D" Объект.GTIN = GTIN; Объект.SerialNumber = SerialNumber; Объект.FNSendItemCodeData();// отправка тега маркировки КонецЕсли; Объект.FNOperation(); |
|||
18
Mafiozaa
23.10.20
✎
09:18
|
(17) Хорошо, щас буду пробовать, вперед сделаю, отпишусь, но если вдруг ты скорее, отпишись, будь любезен)
|
|||
19
Kigo_Kigo
23.10.20
✎
09:28
|
(18) у меня точка только в 11 откроется, тоже буду пробовать
|
|||
20
Mafiozaa
23.10.20
✎
09:31
|
(19) А скинь ссылку где вычитал, пошарю
|
|||
21
Mafiozaa
23.10.20
✎
09:32
|
(19) У меня в ваши 11, моя уже закрывается))
|
|||
22
Mafiozaa
23.10.20
✎
09:35
|
(19) Нашел вот такую ссылку Поделитесь кодом печати чеков на ШТРИХ-М
вы там скидываете код, и у вас закоменченный FNOperation там есть |
|||
23
Kigo_Kigo
23.10.20
✎
09:44
|
(22) уже все перерабатываю, там я пишу что у меня нигде этот код не появляется, но та ветка в основном о получении и подготовки маркировки, так как у меня не горит, по этому разбираюсь по ходу и не спеша, вот и ваша ветка стала мне полезна
про Объект.FNOperation(); тут http://catalog.mista.ru/1c/articles/617491/ код из 17 можете смело пробовать, только в таблицу СписокТоваров не забудьте добавить "Маркировка", в Чеке в ТЧ колонку "Маркировку", куда загоняйте данные с СканераШК, как разобрать код вы знаете |
|||
24
Kigo_Kigo
23.10.20
✎
09:45
|
А вот еще по теме
Отправка кода через ККТ |
|||
25
Mafiozaa
23.10.20
✎
09:50
|
(23) Ну у меня как, когда оформляю чекккм есть реквизит тч кодмаркировки, в него залетает весь код со сканера и там же обрезается все лишнее, в обработку печати приходят уже готовые данные для отправки
|
|||
26
Kigo_Kigo
23.10.20
✎
09:53
|
код из 17 сам подготавливает и обрезает, ну как хотите, тогда в печать чека надо передававть 2 параметра плюсом GTIN; и SerialNumber;
|
|||
27
Mafiozaa
23.10.20
✎
09:55
|
(26) Это я вижу что он у вас в обработке уже режет, но почему FNOperation после всех процедур, хотя везде пишут что он должен быть до
|
|||
28
Kigo_Kigo
23.10.20
✎
10:03
|
(27) FNOperation() это операция регистрации одной строки одного товара чека
вначале чека Если ПризнВозврата = 0 Тогда Объект.CheckType= 0;// «0» - продажа, «1» - покупка, «2» - возврат продажи, «3» - возврат покупки. Иначе Объект.CheckType= 2; КонецЕсли; рез=Объект.OpenCheck(); Если рез<>0 Тогда Сообщить("НапечататьЧек, ошибка открытия нового чека: "+Объект.ResultCodeDescription); рКодОшибки=Объект.ResultCode; КонецЕсли; //************************************* код регистрации товара //************************************ Если НДСЕсть = 1 Тогд�//Печатаем НДС // В настройках ФР надо настроить ставки: // Налог 1 = 18% - НДС 18% // Налог 2 = 10% - НДС 10% // Налог 3 = 20% - НДС 20% Если СписокТоваров.НДС = 18 Тогда Объект.Tax1 = 1; ИначеЕсли СписокТоваров.НДС = 10 Тогда Объект.Tax1 = 2; ИначеЕсли СписокТоваров.НДС = 20 Тогда Объект.Tax1 = 3; Иначе Объект.Tax1 = 0; КонецЕсли; Объект.Tax2 = 0; Объект.Tax3 = 0; Объект.Tax4 = 0; ДлинаСтроки = 36; Иначе ДлинаСтроки = 0; КонецЕсли; Если ПустоеЗначение(СокрЛП(СписотТоваров.Маркировка)) = 0 Тогда КМ = СокрЛП(СписотТоваров.Маркировка); GTIN = Сред(КМ, 3, 14); SerialNumber = Сред(КМ, 19, 13); Объект.Пароль = Пароль; Объект.MarkingType = 1748// Это "444D" Объект.GTIN = GTIN; Объект.SerialNumber = SerialNumber; Объект.FNSendItemCodeData()// отправка тега маркировки КонецЕсли; Объект.FNOperation(); потом конец цикла потоом закрываем чек Объект.FNCloseCheckEx(); Объект.CloseCheck(); |
|||
29
Kigo_Kigo
23.10.20
✎
10:06
|
(27) в 23 посмотрите там код выкладывали, где он должен быть
Процедура ФнОперация(ТипЧека,Цена,Количество,Налог,Сумма, ПризнакСпособаРасчета, ПризнакПредметаРасчета, Наименование) FR2.CheckType = ТипЧека; FR2.Price = Цена; FR2.Quantity = Количество; FR2.Tax1 = Налог; FR2.Department = 1; FR2.Summ1 = Сумма; FR2.PaymentTypeSign = ПризнакСпособаРасчета; FR2.PaymentItemSign = ПризнакПредметаРасчета; FR2.StringForPrinting = Наименование; FR2.FNOperation(); КонецПроцедуры |
|||
30
Kigo_Kigo
23.10.20
✎
10:36
|
Попробовал с FR2.FNOperation(); не прокатилов в ОФД маркировка не появилась, грусть печаль
|
|||
31
Mafiozaa
23.10.20
✎
10:43
|
(30) Я не смог до конца проверить, точка работает, не могу свободно поиграться, а скажи пожалуйста, какая версия драйвера у тебя 4.15 ... 829?
Если вдруг добьешь,чирикни |
|||
32
Kigo_Kigo
23.10.20
✎
10:54
|
не, драйвер DrvFR_4_15_821, что то я не нашел 829 на офф сайте штриха
|
|||
33
Mafiozaa
23.10.20
✎
10:56
|
||||
34
Kigo_Kigo
23.10.20
✎
11:03
|
(33) Посмотрел на точке 829 стоит, ссори, эт у меня на лок машине для тестов 821
|
|||
35
lodger
23.10.20
✎
11:11
|
(28) а где FNSendItemCodeData()?
|
|||
36
Kigo_Kigo
23.10.20
✎
11:27
|
(35) А повнимательнее посмотреть?
|
|||
37
Kigo_Kigo
23.10.20
✎
11:34
|
Вот полный код, что я делаю не так?
Функция ПечататьЧек(Объект, Пароль, СписокТоваров, Получено1, Скидка, ПризнВозврата, НомерСекции, НомерЧека,ТипНалогов) Если ПризнВозврата = 0 Тогда Объект.CheckType= 0// «0» - продажа, «1» - покупка, «2» - возврат продажи, «3» - возврат покупки. Иначе Объект.CheckType= 2; КонецЕсли; рез=Объект.OpenCheck(); Если рез<>0 Тогда Сообщить("НапечататьЧек, ошибка открытия нового чека: "+Объект.ResultCodeDescription); рКодОшибки=Объект.ResultCode; КонецЕсли; // регистрация товаров Объект.TaxType = ТипНалогов; РезРегистрация = 1; Получено1 = 0; КорректноКудаОтправитьЧек = -1;//-1 не ввден, 1- корректно,0 не корректно Если ПустоеЗначение(КудаОтправитьЧек) = 0 Тогда Если Найти(СокрЛП(КудаОтправитьЧек),"@") <> 0 Тогда КорректноКудаОтправитьЧек = 1; ИначеЕсли Лев(СокрЛП(КудаОтправитьЧек),2) = "+7" Тогда КорректноКудаОтправитьЧек = 1; Иначе КорректноКудаОтправитьЧек = 0; Если Вопрос("Не корректно введен email или номер телефона клиента, пробить обычный чек?",4) = 6 Тогда КорректноКудаОтправитьЧек = -1; Иначе Предупреждение("Проверте email или номер телефона клиента, номер телефона должен начинаться на +7"); Возврат 0; КонецЕсли; КонецЕсли; КонецЕсли; Объект.Password = Пароль; Если СокрЛП(Продавец.ИНН) <> "" Тогда Объект.TagNumber = 1203; Объект.TagType = 7; Объект.TagValueStr = СокрЛП(Продавец.ИНН); Объект.FNSendTag(); КонецЕсли; СуммаСкидкиНаЧек = 0; СписокТоваров.ВыбратьСтроки(); Пока СписокТоваров.ПолучитьСтроку() = 1 Цикл СтрокаДляПечати = СписокТоваров.ТовНаим; Объект.Password = Пароль; Объект.StringForPrinting = Лев(СтрокаДляПечати,48); Если СуммаСкидки = 0 Тогда Объект.Price = СписокТоваров.Цена; Получено1 = Получено1+ СписокТоваров.Цена * СписокТоваров.Количество; Иначе СуммаСкидкиНаЧек =СуммаСкидкиНаЧек +(СписокТоваров.Цена * СписокТоваров.Количество - СписокТоваров.Сумма); ЦенаЦены =Окр(СписокТоваров.Сумма/СписокТоваров.Количество,2); Объект.Price = ЦенаЦены; Получено1 = Получено1+ ЦенаЦены * СписокТоваров.Количество; КонецЕсли; Объект.Quantity = СписокТоваров.Количество; Объект.Department = НомерСекции; НДСЕсть = ""; Попытка НДС = СписокТоваров.НДС; НДСЕсть = 1; Исключение НДСЕсть = 0; КонецПопытки; Если НДСЕсть = 1 Тогда//Печатаем НДС // В настройках ФР надо настроить ставки: // Налог 1 = 18% - НДС 18% // Налог 2 = 10% - НДС 10% // Налог 3 = 20% - НДС 20% Если СписокТоваров.НДС = 18 Тогда Объект.Tax1 = 1; ИначеЕсли СписокТоваров.НДС = 10 Тогда Объект.Tax1 = 2; ИначеЕсли СписокТоваров.НДС = 20 Тогда Объект.Tax1 = 3; Иначе Объект.Tax1 = 0; КонецЕсли; Объект.Tax2 = 0; Объект.Tax3 = 0; Объект.Tax4 = 0; ДлинаСтроки = 36; Иначе ДлинаСтроки = 0; КонецЕсли; Если ПустоеЗначение(СокрЛП(СписокТоваров.Маркировка)) = 0 Тогда КМ = СокрЛП(СписокТоваров.Маркировка); GTIN = Сред(КМ, 3, 14); SerialNumber = Сред(КМ, 19, 13); Объект.Пароль = Пароль; Объект.MarkingType = 17485;// Это "444D" Объект.GTIN = GTIN; Объект.SerialNumber = SerialNumber; Объект.FNSendItemCodeData(); // отправка тега маркировки КонецЕсли; Объект.FNOperation(); Если Объект.ResultCode <> 0 Тогда ОписаниеРезультата = ПолучитьОписаниеРезультата(Объект); АннулированиеЧека(Объект, Пароль); Сообщить(ОписаниеРезультата); Возврат 0; КонецЕсли; КонецЦикла; Если константа.ПисатьСуммуСкидкиВЧеке = 1 тогда СтрокаДляПечати = "Сумма скидки на чек:" + Строка(глФРМ(СуммаСкидкиНаЧек,Валюта,1)); Объект.Password = Пароль; Объект.StringForPrinting = Лев(СтрокаДляПечати,48); Иначе СтрокаДляПечати = "__________________________"; //+ Строка(глФРМ(СуммаСкидки,Валюта,1)); Объект.Password = Пароль; Объект.StringForPrinting = Лев(СтрокаДляПечати,48); КонецЕсли; Объект.Password = Пароль; Если ВидПлатежа = перечисление.ВидыПлатежа.Нал тогда Объект.Summ1 = Получено1; Объект.Summ2 = 0; Иначе Объект.Summ1 = 0; Объект.Summ2 = Получено1; КонецЕсли; Объект.Summ3 = 0; Объект.Summ4 = 0; Объект.FNCloseCheckEx(); Объект.CloseCheck(); Если Объект.ResultCode <> 0 Тогда ОписаниеРезультата = ПолучитьОписаниеРезультата(Объект); АннулированиеЧека(Объект, Пароль); ОтрезатьЧек(Объект, Пароль); Сообщить(ОписаниеРезультата); Возврат 0; КонецЕсли; Объект.Password = Пароль; Объект.GetECRStatus(); Если Объект.ResultCode <> 0 Тогда ОписаниеРезультата = ПолучитьОписаниеРезультата(Объект); Сообщить(ОписаниеРезультата); Возврат 0; КонецЕсли; НомерЧека = Объект.OpenDocumentNumber+?(Объект.ECRAdvancedMode=5,1,0); КонецФункции |
|||
38
lodger
23.10.20
✎
11:43
|
(37) а. я его после FNOperation искал.
|
|||
39
Kigo_Kigo
23.10.20
✎
13:07
|
подниму тему, может кто то что то подскажет?
|
|||
40
victuan1
23.10.20
✎
17:59
|
(39) Сколько времени уже потеряно, может проще готовое решение взять?
http://catalog.mista.ru/public/603118/ |
|||
41
lodger
24.10.20
✎
11:23
|
(39) из Руководство программиста:
FNSendItemCodeData ФНОтправитьКТН Отправляет тег 1162 (Код товарной номенклатуры), привязанный к операции. Метод должен вызываться только после метода FNOperation. |
|||
42
Kigo_Kigo
24.10.20
✎
15:29
|
(41) ТО есть вот так?
Если ПустоеЗначение(СокрЛП(СписокТоваров.Маркировка)) = 0 Тогда КМ = СокрЛП(СписокТоваров.Маркировка); GTIN = Сред(КМ, 3, 14); SerialNumber = Сред(КМ, 19, 13); Объект.Пароль = Пароль; Объект.MarkingType = 17485// Это "444D" Объект.GTIN = GTIN; Объект.SerialNumber = SerialNumber; Объект.FNOperation(); Объект.FNSendItemCodeData();// отправка тега маркировки КонецЕсли; |
|||
43
lodger
24.10.20
✎
15:41
|
Объект.FNOperation();
перед Если ПустоеЗначение(СокрЛП(СписокТоваров.Маркировка)) = 0 Тогда |
|||
44
Mafiozaa
26.10.20
✎
04:55
|
(42) Приветствую, ну что разобрался? Сижу кручу верчу обработку, у тебя не получилось?
|
|||
45
Mafiozaa
26.10.20
✎
05:26
|
(42) Вот нашел такое
Заменить Sale() на FNOperation() Заменить CloseCheck() на CloseCheckEX() После этих манипуляций стало ругаться на Неверное значение свойства GTIN. возможно в типах данных что то не то, попробую,отпишусь |
|||
46
victuan1
26.10.20
✎
05:48
|
(45) Ну-ну. Про FNOperation написано еще в (6).
Заменять CloseCheck() на CloseCheckEX() необязательно. PS. Побежал за покорном)) |
|||
47
Mafiozaa
26.10.20
✎
05:49
|
(46) (42) Привет, было написано да, вот только куда толкать его пришлось искать, ну вручную строкой вбил код, все ушло все четко, щас передам переменную текстом, и все, домучаю)
|
|||
48
Mafiozaa
26.10.20
✎
05:50
|
(46) И за твое содействие спасибо, я сегодня думал если не добью, буду тебе в личку строчить, но слава богу не дошло)
|
|||
49
victuan1
26.10.20
✎
22:19
|
(48) Ну и отлично, что решилось. Удачи!
|
|||
50
Pavlik56
14.01.21
✎
19:00
|
Здравствуйте!
Пожалуйста выложите итоговую версию. Что у Вас получилось. НЕ могу сложить пазл. Задолбала ошибка 55. Где то что-то пропускаю. С самого начала обращения к драйверу. |
|||
51
victuan1
15.01.21
✎
07:18
|
(50) Давно выложена итоговая версия http://catalog.mista.ru/public/603118/
|
|||
52
victuan1
15.01.21
✎
07:18
|
(50) Там есть бесплатная Демо.
|
|||
53
Mafiozaa
15.01.21
✎
08:08
|
(50) Штрих? Версия прошивки?
|
|||
54
Pavlik56
15.01.21
✎
09:55
|
Прошивка у меня 2018 года. Вот жду очереди на прошивку 2020.
Заработало. Оказывается ошибка вылазила на эмуляторе. На реальной кассе заработало. Но всё равно интересно посмотреть на чужой код. У меня еще нет отправки инн кассира и емейла покупателя. Я имел ввиду не программу итоговую. А код работы с кассой. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |