Печать чека на Гепарде

Тема в разделе "Торговое оборудование в 1С", создана пользователем 2man, 16 мар 2011.

  1. TopicStarter Overlay
    2man
    Offline

    2man Опытный в 1С

    Регистрация:
    26 ноя 2010
    Сообщения:
    81
    Симпатии:
    0
    Баллы:
    26
    Имеется фискальный регистратор "Гепард-НТС-МФ". Поколение 3, модель 10.
    Надо заставить его печатать чек в документе Накладная.
    В комплекте шли драва на него и обработка для 1С, по идее должна быть еще тестовая конфа, но ее нет ни на сайте, ни на диске. Кое-какой материал нашел здесь: http://kkm.by/gepard_1c.html
    На форму документа "Накладная" добавляю кнопку с процедурой ПечатьЧека()
    Код:
    Процедура ПечатьЧека() 
    Если гВнешняяКомпонента_Загрузить("MercFPrt1C.dll")=0 Тогда
    Возврат;
    КонецЕсли;
    Объект = СоздатьОбъект("AddIn.MercuryFPrt1C");
    //устанавливаем настроки связи
    Объект.НомерПорта = 1;         	
    Объект.СкоростьПорта = 115200;  
    Объект.Пароль = "0000";
    Объект.ВнутрТаймаут = 1000;
    Объект.ВнешТаймаут = 30000;
    Объект.Открыть();      
    Сообщить("Протокол:"+Объект.Протокол);
    ОписаниеРезультата = "";
    // Раскомментируйте только одну из следующих строк в зависимости от желаемого режима печати чека на Меркурий-114.1Ф:
    // - "чек" - режим печати чека по протоколу
    // - "произвольный" - режим печати чека, как произвольного фискального документа
    // - "подкладной" - режим печати подкладного документа
    РежимЧека = "чек";
    //РежимЧека = "произвольный";
    //РежимЧека = "подкладной";
    
    // Получаем имя кассира
    ИмяКассира = ИмяПользователя();
    СуммаЧека = Итог("СуммаСНДС");
    // Если уплаченная сумма меньше суммы чека, считаем, что чек оплачен без сдачи
    Если Получено < СуммаЧека Тогда
    Получено = СуммаЧека;
    КонецЕсли;
    // Способы оформления фискальных документов различаются для различных моделей ККМ
    // Регистрируем кассира
    //Объект.ОткрытьСмену(1, ИмяКассира, 1, 1);
    Объект.ОткрытьФискДок(1);						// Открытие чека продажи
    Попытка
    НомерСтроки = 0;
    // Добавление обязательных реквизитов:
    ПолнаяПечатьЗаголовка(Объект, НомерСтроки);				// - строки клише
    Объект.ДобавитьСерНомер(0, 0, НомерСтроки);			// - серийный номер ККМ
    Объект.ДобавитьНомерДок(0, 31, НомерСтроки);		// - номер документа
    НомерСтроки = НомерСтроки + 1;
    Объект.ДобавитьИНН(0, 0, НомерСтроки);				// - ИНН
    НомерСтроки = НомерСтроки + 1;
    Объект.ДобавитьДатуВремя(0, 0, НомерСтроки);		// - текущие дата и время
    Объект.ДобавитьНомерЧека(0, 31, НомерСтроки);		// - номер документа
    НомерСтроки = НомерСтроки + 1;
    Объект.ДобавитьИнфоОператора(2, 0, 0, НомерСтроки);	// - информация об операторе (номер + имя, если поддерживается)
    НомерСтроки = НомерСтроки + 1;
    // Регистрация товаров
    ВыбратьСтроки();
    Пока ПолучитьСтроку() = 1 Цикл
    // Печать наименования товара:
    Объект.ДобавитьТекст(
    Лев(Товар.Наименование, 40),		// - наименование товара (не более 40 символов)
    0, 									// - флаги
    0,									// - смещение по горизонтали
    НомерСтроки							// - смещение по вертикали
    );
    // Печать реквизита "Цена услуги"
    Объект.ДобавитьЦену(
    0, 									// - тип позиции: услуга, товар или денежная сумма
    Цена,								// - цена товара
    0,									// - товар не является тарой
    0,									// - номер отдела
    0,									// - код товара
    0,									// - значение скидки / надбавки - здесь должно быть равно 0
    Количество * 1000,					// - количество товара
    3,									// - число значащих цифр после десятичной точки для количества
    0,									// - индекс налога
    "",									// - наименование единицы измерения
    0,									// - флаги
    0, 									// - смещение по горизонтали
    НомерСтроки + 1, 					// - смещение по вертикали
    0									// - смещение правой границы
    );
    НомерСтроки = НомерСтроки + 2;
    КонецЦикла;
    // Печать полной суммы чека
    Объект.ДобавитьИтогСумму(0, 0, НомерСтроки, 0);
    НомерСтроки = НомерСтроки + 1;
    // Печать уплаченной суммы
    Объект.ДобавитьСумму(
    0,									// - тип оплаты - наличные
    Получено,							// - сумма наличных
    0,									// - сумма безналичных
    "", 								// - дополнительная информация при безналичном расчете
    0,									// - флаги шрифта
    0,									// - смещение по горизонтали
    НомерСтроки,						// - смещение по вертикали
    0									// - смещение правой границы
    );
    НомерСтроки = НомерСтроки + 1;
    // Печать суммы сдачи
    Объект.ДобавитьСдачу(0, 0, НомерСтроки, 0);
    НомерСтроки = НомерСтроки + 1;
    // Печать суммы налога
    Объект.ДобавитьСуммуНалога(0, 0, 0, НомерСтроки, 39);
    НомерСтроки = НомерСтроки + 1;
    // Закрытие документа
    Объект.ЗакрытьФискДок();
    Исключение
    // Получение текстового описания ошибки
    ОписаниеРезультата = ПолучитьОписаниеРезультата(Объект);
    // Отмена открытого фискального документа
    Объект.ОтменитьФискДок(0);
    Возврат;
    КонецПопытки;
    // Прогон и отрез чековой ленты:
    // - если нож отключен - выполняем прогон на 10 строк (под отрыв)
    Если Объект.ПроверитьСтатусУстр(21) > 0 Тогда
    Объект.ПрогонОтрез(10, 0);
    // - если автоматический отрез отключен - выполняем прогон на 10 строк (под отрыв)
    ИначеЕсли Объект.ЗапроситьАвтоотрез() = 0 Тогда
    Объект.ПрогонОтрез(10, 0);
    КонецЕсли;
    // Запрашиваем информацию об оформленном документе
    Объект.ЗапроситьПослДокИнфо();
    // Извлекаем номер чека
    НомерЧека = Объект.ПослЧекНомер;
    // Не все модели фискальных регистраторов поддерживают запрос номера чека. Для тех, которые не поддерживают,
    // вместо номера чека возвращается 0. При работе с такими регистраторами возвращаем номер документа (он
    // поддерживается всеми моделями и версиями)
    Если НомерЧека = 0 Тогда
    НомерЧека = Объект.ПослДокНомер;
    КонецЕсли; 
    Объект,.Закрыть();
    //// Открываем денежный ящик канал 2
    //Объект.ВнешнийИмпульс(2, 50, 50, 1);   
    //// Открываем денежный ящик канал 1
    //Объект.ВнешнийИмпульс(1, 50, 50, 1);
    //Возврат 1;
    КонецПроцедуры // ПечатьЧека
    
    Дописал для своей конфы и убрал ненужные проверки, но при вызове процедуры валится ошибка:
    MercuryFPrt1C : Ошибка ККМ: неверный формат поля команды (5)
    Проверил методы несколько раз, все верно. Описания ошибки в мануале конечно нету, вот и приходится гадать. Подскажите может хоть направление, в каком копать, а то не могу пока сообразить. Отладчиком не проверяется.
    Если вставить метод ПечатьБуфераДокумента() перед Объект.ОтменитьФискДок(0), то на чеке печатает, что печать чека отменена, т.е. не происходит формирование чека, почему пока не могу сообразить
  2. TopicStarter Overlay
    2man
    Offline

    2man Опытный в 1С

    Регистрация:
    26 ноя 2010
    Сообщения:
    81
    Симпатии:
    0
    Баллы:
    26
    Методом ДокСтатус и ТекОперация после каждого структурного блока отловил, что ошибка валится после выполнения цикла
    Код:
    		// Печать полной суммы чека
    Объект.ДобавитьИтогСумму(0, 0, НомерСтроки, 0);
    НомерСтроки = НомерСтроки + 1;
    // Печать уплаченной суммы
    Объект.ДобавитьСумму(
    0,									// - тип оплаты - наличные
    Получено,							// - сумма наличных
    0,									// - сумма безналичных
    "", 								// - дополнительная информация при безналичном расчете
    0,									// - флаги шрифта
    0,									// - смещение по горизонтали
    НомерСтроки,						// - смещение по вертикали
    0									// - смещение правой границы
    );
    НомерСтроки = НомерСтроки + 1;
    // Печать суммы сдачи
    Объект.ДобавитьСдачу(0, 0, НомерСтроки, 0);
    НомерСтроки = НомерСтроки + 1;
    // Печать суммы налога
    Объект.ДобавитьСуммуНалога(0, 0, 0, НомерСтроки, 39);
    НомерСтроки = НомерСтроки + 1;
    // Закрытие документа
    Объект.ЗакрытьФискДок();
    
    Дальше Исключения процедура не выполняется, т.к. там установлен Возврат, если были ошибки.
    Код:
    	Исключение
    Сообщить("Статус4:"+Объект.ДокСтатус);
    Сообщить("Операция4:"+Объект.ТекОперация);
    
    // Получение текстового описания ошибки
    ОписаниеРезультата = ПолучитьОписаниеРезультата(Объект);
    // Отмена открытого фискального документа
    Объект.ОтменитьФискДок(0);
    Возврат;
    КонецПопытки;
    
  3. Diego
    Offline

    Diego Любитель 1С Команда форума

    Регистрация:
    3 апр 2009
    Сообщения:
    966
    Симпатии:
    2
    Баллы:
    29
    Наверно отваливается при выполнении какой-либо команды с Объектом:
    Объект.ДобавитьИтогСумму(0, 0, НомерСтроки, 0);
    Объект.ДобавитьСумму();
    Объект.ДобавитьСдачу(0, 0, НомерСтроки, 0);
    Объект.ДобавитьСуммуНалога(0, 0, 0, НомерСтроки, 39);

    Может число НомерСтроки превышает определенную максимальную величину?
    Я бы попробовал каждую эту команду засунуть в отдельную Попытку-Исключение (в исключении - Сообщить("Упс, не вышло :)");
  4. TopicStarter Overlay
    2man
    Offline

    2man Опытный в 1С

    Регистрация:
    26 ноя 2010
    Сообщения:
    81
    Симпатии:
    0
    Баллы:
    26
    Разобрался таки.
    Diego, ты верно подметил, проблема изначально была в счетчике строк. Ну а далее посыпались и прочие ошибки, но там c реквизитами пришлось поиграться, так как в мануале не было определенного порядка размещения реквизитов, пришлось все проблем путем решать
  5. 1CZigor
    Offline

    1CZigor

    Регистрация:
    8 дек 2013
    Сообщения:
    5
    Симпатии:
    0
    Баллы:
    1
    Удалось поженить Гепарда и 1С 8?
    --- Объединение сообщений, 3 фев 2015 ---
    Удалось подключить Гепарда к 1С 8 ?
Похожие темы
  1. Chapl
    Ответов:
    4
    Просмотров:
    1.653
  2. Dmitrij
    Ответов:
    1
    Просмотров:
    697
  3. Elenachka
    Ответов:
    1
    Просмотров:
    3.713
Загрузка...

Поделиться этой страницей