Имя: Пароль:
1C
1C 7.7
v7: Мини ФП-6 после модернизации и 1с 7.7
0 lg2marvel
 
15.05.13
16:02
Добрый день. После модернизации фискального регистратора Мини-ФП6 столкнулись с проблемой: иногда при побитии чека первая позиция из накладной не пробивается. Общался с представителями с Юнисистема, сказали что нужно доработать программу, добавить буфер, мол это происходит из-за того что порт блокируется при отправке данных в налоговую.
Сталкивался ли кто с подобной проблемой? У кого-то работает нормально фп6 после модернизации?
1 ЧеловекДуши
 
16.05.13
09:34
2 ЧеловекДуши
 
16.05.13
09:35
3 lg2marvel
 
16.05.13
10:47
Мы друг друга не поняли. Обработка есть, она как бы работает. Но есть проблемы.

Модуль пробития чека:
[code]Перем НазваниеДрайвера;

//===========================================            
Процедура ИнициализацияДрайвера()                      
   
КонецПроцедуры                

//===========================================            
Процедура Инициализация()            
   
   ЭККА = глРасшифровка.Получить("Касса");
   
   Состояние("Инициализация драйвера ЭККА "+ЭККА);
   
   спПараметры = СоздатьОбъект("СписокЗначений");
   глПарсить(ЭККА.ПараметрыИнициализации,спПараметры,РазделительСтрок);
   
   Попытка
       Драйвер = CreateObject("OLE_MiniFP6.FP6");
       глПереченьДрайверов.ДобавитьЗначение(Драйвер,НазваниеДрайвера+ЭККА.Код);
       глКомментарий("Подключен драйвер для ЭККА "+ЭККА,2);
   Исключение
       глКомментарий("Ошибка ЭККА :"+ОписаниеОшибки(),0);
       глКомментарий("Возможно, драйвер не установлен !",2);
   КонецПопытки;
   
   
КонецПроцедуры

//===========================================            
Процедура ПечатьЧека()
   
   Док = глРасшифровка.Получить("Документ"); // Чек
   ДокКО = Док;
   Если Док.Вид() = "ПриходныйКассовый" Тогда
       Док = ДокКО.ДокументОснование;    
   КонецЕсли;
   Если ПустоеЗначение(Док)=1 Тогда
       Возврат;
   КонецЕсли;
   Док.ВыбратьСтроки();
   Пока Док.ПолучитьСтроку()>0 Цикл
       Если Док.ЦенаСНДС=0 Тогда
           Если Вопрос("Нулевая цена у товара "+СокрЛП(Док.Товар.Наименование)+" в строке "+Док.НомерСтроки+". Прервать печать чека?","Да+Нет")="Да" Тогда
               Возврат;
           КонецЕсли;
       КонецЕсли;
       Если Док.СуммаСНДС=0 Тогда
           Если Вопрос("Нулевая сумма у товара "+СокрЛП(Док.Товар.Наименование)+" в строке "+Док.НомерСтроки+". Прервать печать чека?","Да+Нет")="Да" Тогда
               Возврат;
           КонецЕсли;
       КонецЕсли;        
   КонецЦикла;
   
   Если Док.ВидТорговли = Перечисление.ВидыТорговли.Предоплата Тогда
       Если Вопрос("Вид торговли Безналичный расчет, чек будет пробит По карточке. Прервать печать чека?","Да+Нет")="Да" Тогда
           Возврат;
       КонецЕсли;
   КонецЕсли;
   
   Если Док.ВидОперации = 1 Тогда // Это возврат
       глКомментарий("Для данного дрйавера печать чека на возврат не реализована",0);
       Возврат;
   КонецЕсли;
   
   Драйвер = глПереченьДрайверов.Получить(НазваниеДрайвера+ДокКО.ЭККА.Код);
   
   Если ПустоеЗначение(Драйвер)=1 Тогда
       глКомментарий("Не найден драйвер ЭККА",1);
       Возврат;
   КонецЕсли;
   
   спПараметры = СоздатьОбъект("СписокЗначений");
   глПарсить(ДокКО.ЭККА.ПараметрыИнициализации,спПараметры,РазделительСтрок);
   
   Порт = Число(спПараметры.Получить("Порт"));
   Если ПустоеЗначение(Порт)=1 Тогда
       Порт = 1;
   КонецЕсли;
   
   Скорость = Число(спПараметры.Получить("Скорость"));
   Если ПустоеЗначение(Скорость)=1 Тогда
       Скорость = 9600;
   КонецЕсли;
   ЕдиницаВНаименовании = Число(спПараметры.Получить("ЕдиницаВНаименовании"));
   Если ЕдиницаВНаименовании = 1 Тогда
       ДлинаНаименования = Число(спПараметры.Получить("ДлинаНаименования"));
       Если ПустоеЗначение(ДлинаНаименования) = 1 Тогда
           ДлинаНаименования = 11;
       КонецЕсли;
   КонецЕсли;
   
   Попытка
       РезЧек = 1;
       
       Док.ВыбратьСтроки();
       Пробить = 0;
       Пока Док.ПолучитьСтроку()=1 Цикл
           // печать строки
           // поскольку ставку НДС можно задать только для отдела,
           // то предполагаем, что товары разделены по отделам в соответсвии со ставками НДС
           НалоговаяГр = глНалоговаяГруппа(Док.Товар.СтавкаНДС,Док.ЭККА);
           Наименование = СокрЛП(Док.Товар.Наименование);
           
           Если ЕдиницаВНаименовании = 1 Тогда
               Единица = " ("+СокрЛП(Док.Единица)+")";
               Наименование = Лев(Наименование,ДлинаНаименования - СтрДлина(Единица))+Единица;
           КонецЕсли;

           Наименование = Лев(СокрЛП(СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(СтрЗаменить(Наименование,"і","i"), "#", "N"),"ї","i"),"є","е"),"№","N")),50);
           
           Рез = Драйвер.SALE_(Порт,СокрЛП(Число(Док.Товар.Код)),Наименование,Док.Кво,Окр(Док.ЦенаСНДС,2),НалоговаяГр,0);
           Пробить = Пробить + Окр(Док.Кво * Окр(Док.ЦенаСНДС,2),2);
           Если Рез = 0 Тогда
               ТекущийКодОшибки = Драйвер.GetLastErr_();
               глКомментарий(Шаблон("Ошибка печати строки чека по строке [Док.НомерСтроки] документа ! "+ОписаниеОшибки()+"."+ТекущийКодОшибки),0);
               РезЧек = 0;
           КонецЕсли;
       КонецЦикла;
       
       Рез = 1;

       ВидОпл = 3;
       Если Док.ВидТорговли = Перечисление.ВидыТорговли.Предоплата Тогда
           ВидОпл = 0;
       КонецЕсли;
       Рез = Драйвер.PAY_(Порт,Пробить,ВидОпл,1,0);
       Если Рез=0 Тогда
           глКомментарий("Ошибка при оплате чека ! "+Пробить,0);
           Если  Драйвер.AnnulCheck_(Порт) = 1  Тогда
               Сообщить("Чек аннулирован","!");
           КонецЕсли;
       Иначе
           Док.ЧекПробит=1;  
           Док.ДатаЧека=ДокКО.ДатаДок;
           Док.НомерЧека =  Драйвер.NumberCheck_(Порт);
           ДокКО.ЧекПробит=1;
           ДокКО.НомерЧека =  Драйвер.NumberCheck_(Порт);
           ДокКО.ДатаЧека=ДокКО.ДатаДок;
           Если ДокКО.Вид() = "ПриходныйКассовый" Тогда
               тДок = СоздатьОбъект("Документ");
               тДок.НайтиДокумент(Док);
               тДок.ЧекПробит=1;  
               тДок.ДатаЧека=ДокКО.ДатаДок;
               тДок.НомерЧека = ДокКО.НомерЧека;
               тДок.Записать();    
           КонецЕсли;
       КонецЕсли;
       
       Драйвер.ClosePort_();
   Исключение
       глКомментарий("Ошибка ЭККА :"+ОписаниеОшибки());
       Док.ЧекПробит=0;
   КонецПопытки;
   
КонецПроцедуры                  

//===========================================            
Процедура Отчет()
   
   Сообщить("Драйвер фискального принтера не поддержвает загрузку отчета!");
   
КонецПроцедуры                  

//===========================================            
Процедура ВыгрузитьАртикулы()
   
   Сообщить("Драйвер фискального принтера не поддержвает выгрузку артикулов!");
   
КонецПроцедуры


//===========================================            
Процедура ПриОткрытии()
   Параметр = глРасшифровка.Получить("Парам");
   Если Параметр = "Инициализация" тогда
       Инициализация();
   ИначеЕсли Параметр = "ПодключитьДрайвер" тогда
       ИнициализацияДрайвера();
   ИначеЕсли Параметр = "ВыгрузитьАртикулы" тогда
       ВыгрузитьАртикулы();
   ИначеЕсли Параметр = "ПечатьЧека" тогда
       ПечатьЧека();
   ИначеЕсли Параметр = "Отчет" тогда
       Отчет();
   КонецЕсли;
   СтатусВозврата(0);
КонецПроцедуры

НазваниеДрайвера = "МиниФП6";
[/code]
4 ЧеловекДуши
 
16.05.13
13:36
(3) Попробуй через отладчик отладить :)
5 lg2marvel
 
16.05.13
14:01
Да не вопрос, только вот ошибку поймать не могу. Если позиция не бьется в данный момент времени, то если еще раз нажать кнопку печати чека - обязательно вылезет.
6 Kreont
 
16.05.13
14:10
Может еще так попробуй, в одно время переписывал стандартный вывод на чек (вижу у тебя в коде так же) так, что б сначала получить все данные из сервера на локальный комп в временную ТЗ, а уже потом проход по ней и печать.
По логике клиент-серверной вроде лишнее :), но зато при мини сбоях сети или торможении сервера, чек стал печатался до конца.
7 lg2marvel
 
16.05.13
18:03
11:54:18  _________________________________________________________________
12:52:39  Ошибки при выполнении функции SALE:
12:52:39  
12:52:39  SALE (3, 1923, Гламур  Амба, 10, 10,96, 1)
12:52:39  
12:52:39  ТИП ОШИБКИ  - ненулевой байт статуса устройства:
12:52:39  
12:52:39  БАЙТ СТАТУСА устройства:
12:52:39  - принтер не готов
12:52:39  _________________________________________________________________
вот ошибку выдает при пробитии проблемного чека

(6) Попробую, спасибо
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой