- Установка ПО
Установим Штрих-М Чекопечать Х.ХХ, если Windows 7 или выше будем устанавливать от имени администратора, обязательно устанавливать драйвера Атол и Штрих-М(по мануалу). Затем сделать запрос на ключ для привязки по ПК или ККТ, либо можно прбовать работать в режиме ДЕМО, сумма позиции в чеке не должна превышать 10р, а количество быть не более 1.
-
- Настройка ПО
Скопировать лицензию в корень программы чекопечати(обычно C:\Program Files\ShtrihOFD\) если она есть.
-Флаг «Печатать чек по макету(ShablonCheck.xml)» -печать чека идет по шаблону который задан в одноименном файле
-Пересчет чека без скидки с учетом округления – система пересчитывает чек с учетом скидки на позиции и округляет на весь чек
-Вести лог-в папку «C:\Program Files\ShtrihOFD\Log» пишутся логи: errorFRДД_ММ_гггг.log – лог операций и ошибок по ККТ, MessageFileДД_ММ_гггг.log- лог операций по службе.
-Автоматическое снятие Z-отчета – при очередной операции регистрации, если прошло 24 часа система автоматически снимет отчет с гашением
-Проверять каталог на возможность записи –идет проверка возможно ли записывать в каталог чеков, этонужно для обратной связи, ошибочных или обработанных чеков.
- Доработка конфигурации
-
- Параметры для работы с Чекопечатью
Работать будем в обработке «НастройкаТорговогоОборудования». Добавим тип налогообложения, каталог в который будут сохраняться данные:
Процедура Выполнить:
…
//
Настройка.Установить("КаталогЧекопечати",СокрЛП(УстКаталогЧекопечати));
//
ВыбиратьТипНалогооблажения = УстВыбиратьТипНалогооблажения.ПолучитьЗначение(УстВыбиратьТипНалогооблажения.ТекущаяСтрока());
Настройка.Установить("ВыбиратьТипНалогооблажения",ВыбиратьТипНалогооблажения);
//
…
Процедура ПриОткрытии:
…
//
УстДрайверФР.ДобавитьЗначение(3,"Штрих-М: Чекопечать");
УстКаталогЧекопечати = КаталогЧекопечати;
//
УстВыбиратьТипНалогооблажения.ДобавитьЗначение(0,"ОСН");
УстВыбиратьТипНалогооблажения.ДобавитьЗначение(1,"УСН");
УстВыбиратьТипНалогооблажения.ДобавитьЗначение(2,"УСН доход - расход");
УстВыбиратьТипНалогооблажения.ДобавитьЗначение(3,"ЕНВД");
УстВыбиратьТипНалогооблажения.ДобавитьЗначение(4,"Единый сельхоз налог");
УстВыбиратьТипНалогооблажения.ДобавитьЗначение(5,"ПСН");
Поз = УстВыбиратьТипНалогооблажения.НайтиЗначение(ВыбиратьТипНалогооблажения);
Если Поз>0 Тогда
УстВыбиратьТипНалогооблажения.ТекущаяСтрока(Поз);
КонецЕсли;
//
…
Добавим процедуру выбора каталога чекопечати:
Процедура _ВыбКаталога(Пар)
Если Пар=1 Тогда
ВыбКат=УстКаталогЧекопечати;
КонецЕсли;
Если ФС.ВыбратьКаталог(ВыбКат,"Выберите каталог файлов-чеков")>0 Тогда
Если Пар=1 Тогда
УстКаталогЧекопечати=ВыбКат;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Процедура ВыборФР()
…
Если (ТекДрайверФР=2) ИЛИ (ТекДрайверФР=3) Тогда//
РаботаСФР=1;МетодЧекопечати = Истина;
УстШиринаЛенты.УдалитьВсе();
УстШиринаЛенты.ДобавитьЗначение(0,"0");
УстШиринаЛенты.ТекущаяСтрока(1);
…
Также изменим обработку «ПодключениеТорговогоОборудования».
Процедура «Подкючить»:
…
//>>
КаталогЧекопечати = Настройка.Получить("КаталогЧекопечати");
ВыбиратьТипНалогооблажения = Настройка.Получить("ВыбиратьТипНалогооблажения");
//<<
…
ИначеЕсли (ДрайверФР=2) ИЛИ (ДрайверФР=3) Тогда //
РаботаСФР=1; МетодЧекопечати =Истина;
…
-
- Изменения в глобальном модуле
В глобальный модуль добавим переменные:
//
Перем МетодЧекопечати Экспорт;
Перем Истина Экспорт;
Перем Ложь Экспорт;
Перем КаталогЧекопечати Экспорт;
Перем ВыбиратьТипНалогооблажения Экспорт;
//<<
Процедура ПриНачалеРаботы, обнулим перменную МетодПечати
…
МетодЧекопечати =Ложь;//
…
-
- Обработка “ОбслуживаниеФр”
Для работы с чекопечатью нам нужно создавать файл чек по протоколу для этого изменим процедуру “ПечататьЧек”:
…
//
Если (ДрайверФР>0) И (МетодЧекопечати=Истина) Тогда//MI++>>
ИмяВременное = "checkTemp";
Структура = ИнициализироватьСтруктуру("Заголовок");
//---Заголовок чека--------------------------------//
Структура.ПризнакВозврата = Ложь;
Структура.Налогооблажение = ПолучитьТипНалогооблажения(ВыбиратьТипНалогооблажения);
Если (Док.Вид()="Чек") Тогда
Если (Док.ЧекНаВозврат=1) Тогда
Структура.ПризнакВозврата = Истина;
КонецЕсли;
КонецЕсли;
Если (Док.Вид()="РасходныйКассовый") Тогда
Структура.ПризнакВозврата = Истина;
КонецЕсли;
Если Док.Вид()="Чек" Тогда
Структура.НомерЧека = Док.НомерДок;
Иначе
Структура.НомерЧека = сокрлп(Док.НомерДок)
КонецЕсли;
Если ДобавитьВФайл(ИмяВременное,Структура,"head")=Ложь Тогда
Возврат;
КонецЕсли;
//-------------------------------------------------//
Структура = ИнициализироватьСтруктуру("СтрокаЧека");
//Если (Док.Вид()="РасходныйКассовый") Тогда
//Предупреждение("Тест пересчета");//Дебаг
Если Док.Вид()="Чек" Тогда
ПечататьСкидку = ПечататьЛиСкидку(Док);
//
Док.ВыбратьСтроки();
Пока (Док.ПолучитьСтроку()>0) Цикл
Если Док.Товар.Выбран()=0 Тогда
Продолжить;
КонецЕсли;
Если Док.Количество=0 Тогда
Продолжить;
КонецЕсли;
Структура.Наименование = СокрЛП(Док.Товар.НаимДляКассы); //СокрЛП(Док.Товар.Код)+":"+
Структура.Количество = Строка(Док.Количество*Док.Коэффициент);
Структура.Цена = Строка(Док.Цена);
Структура.Секция = Док.Товар.Секция;
Структура.СуммаСоСкидкой= Строка(Док.СуммаБезСкидки);
Структура.Налог = "4";//ПолучитьНалог(Док.Товар);//.СтавкаНДС-пока нет
Если (Док.СкидкаНаПозицию<>0) Тогда
Если Док.СкидкаНаПозицию>0 Тогда
//Стр="Скидка "+строка(Док.СкидкаНаПозицию)+"%";
Структура.СуммаСкидки = -(Док.СуммаБезСкидки-Док.Сумма);
Иначе
//Стр="Надбавка "+строка(-Док.СкидкаНаПозицию)+"%";
Структура.СуммаСкидки = Док.СуммаБезСкидки-Док.Сумма;
КонецЕсли;
КонецЕсли;
Если (Док.Товар.ВидТовара=Перечисление.ВидыТоваров.Услуга) Тогда
Структура.ПризнакПредметаРасчета = "4";//услуга
Иначе
Структура.ПризнакПредметаРасчета = "1";//товар
КонецЕсли;
//НДС? -пока нет
Если ДобавитьВФайл(ИмяВременное,Структура,"str")=Ложь Тогда
Возврат;
КонецЕсли;
КонецЦикла;
//------Подвал-------------------------------------//
Если (Док.Скидка<>0) Тогда
Если Док.Скидка>0 Тогда
Стр="Скидка "+строка(Док.Скидка)+"%";
Иначе
Стр="Надбавка "+строка(-Док.Скидка)+"%";
КонецЕсли;
СуммаСкидки = (Док.Итог("СуммаБезСкидки")-Док.Итог("Сумма"));
КонецЕсли;
Структура = ИнициализироватьСтруктуру("ПодвалЧека");
//Тут пишем название кредитной карты
Если Док.ОплатаКредитом=1 Тогда
Если Док.КредКарта.Выбран()=1 Тогда
НазваниеКарты = СокрЛП(Док.КредКарта.Наименование);
Структура.Сумма2 = Строка(Док.СуммаКредита);
Иначе
Структура.Сумма2 = Строка(Док.Итог("Сумма"));
КонецЕсли;
КонецЕсли;
Если (Число(Структура.Сумма2)=0) Тогда
Если (Док.Получено=0) Тогда
Структура.Сумма1 = Строка(Док.Итог("Сумма"));
Иначе
Структура.Сумма1 = Строка(Док.Получено);
КонецЕсли;
КонецЕсли;
Если ДобавитьВФайл(ИмяВременное,Структура,"end")=Ложь Тогда
Возврат;
КонецЕсли;
//-------------------------------------------------//
Док.ЧекПробитККМ=1;
//Запомним номер документа
Док.НомерЧекаККМ=ВремНомерЧекаККМ;
ИначеЕсли ((Док.Вид()="ПриходныйКассовый") ИЛИ (Док.Вид()="РасходныйКассовый")) Тогда
ЕстьОснование = Ложь; //Предупреждение("ТТТ");
Док.ВыбратьСтроки();
Пока Док.ПолучитьСтроку() = 1 Цикл
Если ПустоеЗначение(Док.ДокументОснование1)=0 Тогда
ЕстьОснование=Истина;
ДокЧека = Док.ДокументОснование1;
//
ДокЧека.ВыбратьСтроки();
Пока ДокЧека.ПолучитьСтроку() = 1 Цикл
Если ДокЧека.Товар.Выбран()=0 Тогда
Продолжить;
КонецЕсли;
Если ДокЧека.Количество=0 Тогда
Продолжить;
КонецЕсли;
Структура.Наименование = СокрЛП(ДокЧека.Товар.НаимДляКассы); //СокрЛП(Док.Товар.Код)+":"+
Структура.Количество = Строка(ДокЧека.Количество*ДокЧека.Коэффициент);
Структура.Цена = Строка(ДокЧека.РознЦена);
Структура.Секция = ДокЧека.Товар.Секция;
//предупреждение("Дебаг");
Если (ДокЧека.Вид() = "ПриходнаяНакл") Тогда
Структура.СуммаСоСкидкой= Строка(ДокЧека.СуммаРозн);
Иначе
Структура.СуммаСоСкидкой= Строка(ДокЧека.СуммаРозн);
КонецЕсли;
Структура.Налог = "4";//ПолучитьНалог(Док.Товар);//.СтавкаНДС-пока нет
Если (ДокЧека.Вид() = "ПриходнаяНакл") Тогда
Структура.СуммаСкидки = 0;
Иначе
Если (ДокЧека.СкидкаНаПозицию<>0) Тогда
Структура.СуммаСкидки = Строка(-ДокЧека.СуммаРозн+ДокЧека.СуммаРознСоСкидкой);//ДокЧека.СуммаСкидки;
КонецЕсли;
КонецЕсли;
//
Если (ДокЧека.Товар.ВидТовара=Перечисление.ВидыТоваров.Услуга) Тогда
Структура.ПризнакПредметаРасчета = "4";//услуга
Иначе
Структура.ПризнакПредметаРасчета = "1";//товар
КонецЕсли;
Если (ДокЧека.Вид() = "ПриходнаяНакл") Тогда
Если (Док.Итог("Сумма")=0) Тогда
СуммаДок = Док.СуммаДок;
Иначе
СуммаДок = Док.Итог("Сумма");
КонецЕсли;
КонецЕсли;
//НДС? -пока нет
Если ДобавитьВФайл(ИмяВременное,Структура,"str")=Ложь Тогда
Возврат;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЦикла;
Если (ЕстьОснование=Ложь) Тогда
//Распечатаем на чеке Основание и приложение
Если Док.Сотрудник.Выбран()=1 Тогда
Стр=сокрлп(Док.ПриложениеСотрудника);
Иначе
Стр=сокрлп(Док.Приложение);
КонецЕсли;
//-------------------------------------------------//
Если (Док.Итог("Сумма")=0) Тогда
СуммаДок = Док.СуммаДок;
Иначе
СуммаДок = Док.Итог("Сумма");
КонецЕсли;
Структура = ИнициализироватьСтруктуру("СтрокаЧека");
Структура.Наименование = СокрЛП(Стр); //СокрЛП(Док.Товар.Код)+":"+
Структура.Количество = Строка(1);
Структура.Цена = Строка(СуммаДок);
Структура.Секция = "1";
Структура.СуммаСоСкидкой= Строка(СуммаДок);
Структура.Налог = "4";//ПолучитьНалог(Док.Товар);//.СтавкаНДС-пока нет
Структура.ПризнакПредметаРасчета = "4";//услуга
Если ДобавитьВФайл(ИмяВременное,Структура,"str")=Ложь Тогда
Возврат;
КонецЕсли;
КонецЕсли;
//------Подвал-------------------------------------//
Структура = ИнициализироватьСтруктуру("ПодвалЧека");
Если ПустоеЗначение(СуммаДок)=0 Тогда
Структура.Сумма1 = Строка(СуммаДок);
Иначе
Если (Док.Итог("Сумма")=0) Тогда
СуммаДок = Док.СуммаДок;
Иначе
СуммаДок = Док.Итог("Сумма");
КонецЕсли;
Структура.Сумма1 = Строка(СуммаДок);
КонецЕсли;
//
Если ДобавитьВФайл(ИмяВременное,Структура,"end")=Ложь Тогда
Возврат;
КонецЕсли;
//-------------------------------------------------//
Док.ЧекПробитККМ=1;
Док.НомерЧекаККМ=ВремНомерЧекаККМ;
КонецЕсли;
Возврат;
//-------------------------------------------------//
…
Мы можем обрабатывать документы «Чек», «РасходноКассовый», «ПриходноКассовый», причем для ПКО и РКО будет учитывать документ основания если он есть для списка товаров/услуг.
-
- Обработка Отчеты
Для печати отчета с гашением изменим процедуру «Отчет»:
…
//>>
Если (МетодЧекопечати=Истина) Тогда
Пароль = 30;
//Если ВвестиЧисло(Пароль,"Введите пароль",8,0) = 1 Тогда
//КонецЕсли;
// вызов обработки обслуживания ККМ
Расшифровка=СоздатьОбъект("СписокЗначений");
Расшифровка.ДобавитьЗначение(пароль,"пароль");
Расшифровка.ДобавитьЗначение("ИмяОбработки","Отчет");
Если Mode=3 Тогда//Z
Расшифровка.ДобавитьЗначение("ОтчетСГашением","Процесс");
ИначеЕсли Mode=2 Тогда //X
Расшифровка.ДобавитьЗначение("ОтчетБезГашения","Процесс");
Иначе
Возврат;
КонецЕсли;
глРасшифровка = Расшифровка;
глФлагРасшифровки = 1;
ОткрытьФорму("Обработка.ОбслуживаниеФР#");
глФлагРасшифровки = 0;
глРасшифровка = 0;
Возврат;
КонецЕсли;
//<<
…
Примечание
Полное описание команд приложено в файле: «Полное описание команд.txt»
Последняя версия ссылка по Чекопечати:
3.2.01 – Корректировка работы мультилицензии для ККТ Штрих-М. Описание обратной связи для суммы в денежном ящике. Проверка ИНН при отправке на правильную длину. Корректировка мануала про тег в шаблоне “%AddT1%”. Флаг уникальности имени файл-чеков. Правка ошибок при работе с лицензией от предпоследней версии.