Имя: Пароль:
1C
1C 7.7
v7: Печать QR кода 7.7
0 Mafiozaa
 
21.09.20
03:19
Приветствую, возникла сложность, полез в тест драйвер 4.15,зашел в печать графики, увидел PrintBarcodeGraph,залез в обработку выставил настройку баркода, но по итогу даже qrcodom даже не пахнет,
1 big
 
21.09.20
05:40
2 victuan1
 
21.09.20
05:53
Если Способ = -1 Тогда
                //источник Штрих-М-ПТК, печать QR кодов, ЕГАИС (пост 177)
                //http://egais2016.ru/forum/viewtopic.php?t=4102&start=10#p30835                    
                Объект.BarCode = АдресЧека;
                Объект.BarcodeType = 3;
                Объект.BarWidth = Коэф;
                Объект.LineNumber = 130*Коэф;
                //Объект.FirstLineNumber = 1;
                Объект.PrintBarcodeText = 0; //не выводим текст ШК
                Объект.BarcodeAlignment = 0; //по центру
//                    Объект.Password = Пароль;    //повторное обращение
                Объект.PrintBarcodeGraph();
                Объект.Barcode = ""; //освободим память, занятую штрихкодом
                    
            ИначеЕсли Способ = 0 Тогда
                //источник http://forum.infostart.ru/forum40/topic152404/message1571904/#message1571904
                Объект.BarCode = АдресЧека;
                Объект.BarcodeType = 3;
                //Объект.BarcodeStartBlockNumber = 0;
                Объект.BarcodeParameter1 = 0;
                Объект.BarcodeParameter2 = 0;
                Объект.BarcodeParameter3 = Коэф;  //Размер точки, 3-8
                Объект.BarcodeParameter4 = 0;
                Объект.BarcodeParameter5 = 0;
                Объект.BarcodeAlignment  = 0; //по центру
//                Объект.Password = Пароль;    //повторное обращение
                Объект.LoadAndPrint2DBarcode();
                Объект.Barcode = ""; //освободим память, занятую штрихкодом
                
            ИначеЕсли Способ = 1 Тогда
                //источник: http://forum.shtrih-m.ru/viewtopic.php?f=1&t=31385&start=15
                DataHex = ПараметрыФР.Получить("АдресЧекаHex");
                Объект.BarcodeDataLength = СтрДлина(DataHex) / 2;
                j = -1;  size = 128;
                //загрузка блоков данных по 128 байт
                Пока СтрДлина(DataHex) > 0 Цикл
                    j = j + 1;
                    Объект.BlockType = 0;
                    Объект.BlockNumber = j;
                    Объект.BlockDataHex = Left(DataHex, size);
//                    Объект.Password = Пароль;    //повторное обращение
                    Объект.LoadBlockData();
                    Если Объект.ResultCode <> 0 Тогда
                        прервать
                    КонецЕсли;
                    DataHex = Mid(DataHex, size+1);
                КонецЦикла;
                
                Если Объект.ResultCode = 0 Тогда
                    Объект.BarcodeType = 3;
                    Объект.BarcodeStartBlockNumber = 0;
                    Объект.BarcodeParameter1 = 0;
                    Объект.BarcodeParameter2 = 0;
                    Объект.BarcodeParameter3 = Коэф;  //Размер точки, 3-8
                    Объект.BarcodeParameter4 = 0;
                    Объект.BarcodeParameter5 = 0;
                    Объект.BarcodeAlignment  = 0; //по центру
//                    Объект.Password = Пароль;    //повторное обращение
                    Объект.Print2DBarcode();
                КонецЕсли;
                
                //Объект.BarcodeDataLength = 0;
                //для i = 0 по j Цикл //очистим память ФР от данных штрихкода
                //    Объект.BlockType = 0;
                //    Объект.BlockNumber = i;
                //    Объект.BlockDataHex = "";
                //    Объект.Password = Пароль;
                //    Объект.LoadBlockData();
                //КонецЦикла;        
                
            Иначе    //зарезевировано для др. команд - пока означает, не выводить QR-код
                //*******************    
            КонецЕсли;
3 Mafiozaa
 
22.09.20
03:07
(2) (1) Где бы не вызывал процедуру,все равно не печатает,посмотрите может я что то не то делаю

Перем ОписаниеРезультата;
Перем ШиринаСтроки;

//******************************************************************************
Функция ПолучитьОписаниеРезультата(Объект)
    Возврат Объект.ResultCodeDescription;
КонецФункции // ПолучитьОписаниеРезультата()

//********************************************************************************
// Эта функция будет работать только при запуске системы (т.е. подключение и отключение кассы)
Функция ОбработкаОшибок(Объект)
    Если Объект.ResultCode <> 0 Тогда
        ОписаниеРезультата = ПолучитьОписаниеРезультата(Объект);
        
        Если Объект.ResultCode = 88 Тогда
            Объект.ContinuePrint();
        КонецЕсли;
        
        Возврат 1;
    Иначе
        Возврат 0;
    КонецЕсли;
КонецФункции

//********************************************************************************
Функция ОбработкаОшибокПриПечати(Объект);
    Код = Объект.ResultCode;
    Если Код <> 0 Тогда
        Если (Код = 88) Тогда
            Объект.ContinuePrint();
            Возврат "Повтор";
        Иначе
            Возврат Вопрос("ОШИБКА ККМ: " + Объект.ResultCodeDescription + ".","Повтор+Отмена");
        КонецЕсли;
    Иначе
        Возврат 0;
    КонецЕсли;
КонецФункции

//********************************************************************************
Функция ПечатьСтроки(Стр,Объект)
    Пока "на экране окно вопроса" = "на экране окно вопроса" Цикл
        Объект.UseReceiptRibbon = 1;
        Объект.UseJournalRibbon = 1;
        Объект.StringForPrinting = Стр;
        Объект.PrintString();
        Результат = ОбработкаОшибокПриПечати(Объект);
        Если Результат = "Отмена" Тогда
            Объект.CancelCheck();
            Возврат 0;
        ИначеЕсли Результат = 0 Тогда
            Возврат 1;
        КонецЕсли;
    КонецЦикла;
КонецФункции

//********************************************************************************
Функция ПечататьПоСередине(СтрНаим,Длина,Объект)
    Если СтрДлина(СтрНаим) <= Длина Тогда
        СтрокаПробелов = "";
        ЧислоПробелов = Окр((Длина - СтрДлина(СтрНаим))/2,0,0);
        Для Индекс = 1 По ЧислоПробелов Цикл
            СтрокаПробелов = СтрокаПробелов + " ";
        КонецЦикла;
        СтрНаим = СтрокаПробелов + СтрНаим;
        Если ПечатьСтроки(СтрНаим,Объект) = 0 Тогда
            Возврат 1;
        КонецЕсли;
        
        Возврат 0;
    Иначе
        ТекСтрока = СтрНаим;
        Пока СтрДлина(СтрНаим) > Длина Цикл
            ТекСтрока = Лев(СтрНаим,Длина);
            Если ПечатьСтроки(ТекСтрока,Объект) = 0 Тогда
                Возврат 1;
            КонецЕсли;
            СтрНаим = Прав(СтрНаим,СтрДлина(СтрНаим) - Длина);
            Если СтрДлина(СтрНаим) <= Длина Тогда
                СтрокаПробелов = "";
                ЧислоПробелов = Окр((Длина - СтрДлина(СтрНаим))/2,0,0);
                Для Индекс = 1 По ЧислоПробелов Цикл
                    СтрокаПробелов = СтрокаПробелов + " ";
                КонецЦикла;
                СтрНаим = СтрокаПробелов + СтрНаим;
                Если ПечатьСтроки(СтрНаим,Объект) = 0 Тогда
                    Возврат 1;
                КонецЕсли;
            КонецЕсли;
        КонецЦикла;
    КонецЕсли;
    Возврат 0;
КонецФункции

//********************************************************************************
// Бъет строку СтрНаим по циклу на меньшие, длинной Длина и печатает на ККМ
Функция БитьНаименованиеИПечатать(СтрНаим,Длина,Объект);
    Если СтрДлина(СтрНаим) <= Длина Тогда
        Если ПечатьСтроки(СтрНаим,Объект) = 0 Тогда
            Возврат 1;
        КонецЕсли;
        Возврат 0;
    Иначе
        ТекСтрока = СтрНаим;
        Пока СтрДлина(СтрНаим) > Длина Цикл
            ТекСтрока = Лев(СтрНаим,Длина);
            Если ПечатьСтроки(ТекСтрока,Объект) = 0 Тогда
                Возврат 1;
            КонецЕсли;
            СтрНаим = Прав(СтрНаим,СтрДлина(СтрНаим) - Длина);
            Если СтрДлина(СтрНаим) <= Длина Тогда
                Если ПечатьСтроки(СтрНаим,Объект) = 0 Тогда
                    Возврат 1;
                КонецЕсли;
            КонецЕсли;
        КонецЦикла;
    КонецЕсли;
    Возврат 0;
КонецФункции

//********************************************************************************
Функция Подключить(Компонента, ПрогИд, Пароль, Объект)
    Рез = 0;
    Объект = "";
    
    Если ЗагрузитьВнешнююКомпоненту(Компонента) = 0  Тогда
        ОписаниеРезультата = "не удалось загрузить внешнюю компоненту """ + Компонента + """";
    Иначе
        
        Объект = СоздатьОбъект("AddIn." + ПрогИд);  // Создание объекта внешней компоненты
    КонецЕсли;
        
    Если ПустоеЗначение(Объект) = 1 Тогда
        ОписаниеРезультата = "ну удалось создать объект внешней компоненты с программым идентификатром AddIn." + ПрогИд;
    Иначе
        
        Объект.Password = Пароль;
        Объект.Connect();
        Если ОбработкаОшибок(Объект) = 1 Тогда
        Иначе
            Рез = 1;
        КонецЕсли;
        Объект.Disconnect();
    КонецЕсли;

    Возврат Рез;
КонецФункции

//********************************************************************************
Функция Отключить(Объект)
    Рез = 0;
    
    Если ПустоеЗначение(Объект) = 1 Тогда
        Рез = 1; // нет объекта, ничего не нужно отключать
    Иначе
        // пеключим ФР нерабочий режим
        
        Объект.Password = 30;
        Объект.Disconnect();
        
        Если ОбработкаОшибок(Объект) = 1 Тогда
        Иначе
            Рез = 1;
        КонецЕсли;
    КонецЕсли;
    
    Возврат Рез;    
КонецФункции

//********************************************************************************
Функция ВозвратПозиции(Отдел,Сумма,Количество,Объект)
    Пока "на экране окно вопроса" = "на экране окно вопроса" Цикл
        Объект.StringForPrinting     = "";
        Объект.Price                 = Сумма;
        Объект.Quantity             = Количество;
        Объект.Department             = Отдел;
        Объект.ReturnSale();
        Результат = ОбработкаОшибокПриПечати(Объект);
        Если Результат = "Отмена" Тогда
            Объект.CancelCheck();
            Возврат 0;
        ИначеЕсли Результат = 0 Тогда
            Возврат 1;
        КонецЕсли;
    КонецЦикла;
КонецФункции

//********************************************************************************
Функция ЗакрытиеЧека(СуммаЧека,Получено,Объект)
    Пока "на экране окно вопроса" = "на экране окно вопроса" Цикл
        Если (СуммаЧека = Получено) Или (Получено = 0) Тогда
            Объект.Summ1 = СуммаЧека;
        Иначе
            Объект.Summ1 = Получено;
        КонецЕсли;
        Объект.CloseCheck();
        Результат = ОбработкаОшибокПриПечати(Объект);
        Если Результат = "Отмена" Тогда
            Объект.CancelCheck();
            Возврат 0;
        ИначеЕсли Результат = 0 Тогда
            Возврат 1;
        КонецЕсли;
    КонецЦикла;
КонецФункции

//********************************************************************************
Функция РегистрацияПозиции(Отдел,Сумма,Количество,Объект)
    Пока "на экране окно вопроса" = "на экране окно вопроса" Цикл
        Объект.StringForPrinting     = "";
        Объект.Price                 = Сумма;
        Объект.Quantity             = Количество;
        Объект.Department             = Отдел;
        Объект.Sale();
        Результат = ОбработкаОшибокПриПечати(Объект);
        Если Результат = "Отмена" Тогда
            Объект.CancelCheck();
            Возврат 0;
        ИначеЕсли Результат = 0 Тогда
            Возврат 1;
        КонецЕсли;
    КонецЦикла;
КонецФункции
//********************************************************************************
Процедура ПечатьQR(Объект)
    Объект.Password = 30;
    Объект.Barcode = "123412";
    Объект.BarcodeType = 3;
    Объект.LineNumber = 256;
    Объект.FirstLineNumber = 1;
    Объект.BarcodeAlignment = 0;
    Объект.PrintBarcodeGraph();
КонецПроцедуры

//********************************************************************************
Функция ПечататьЧек(Объект, СписокТоваров, СуммаЧека, Получено, Скидка, ПризнВозврата, НомерСекции, НомерЧека)
    
    Если ПустоеЗначение(Объект) = 1 Тогда
        ОписаниеРезультата = "устройство не подключено";
        Возврат 0;
    КонецЕсли;
    
    // регистрация товаров
    РезРегистрация = 1;
    
    Пока "на экране окно вопроса" = "на экране окно вопроса" Цикл
        Объект.Password = 1;
        Объект.Connect();
        Результат = ОбработкаОшибокПриПечати(Объект);
        Если Результат = "Отмена" Тогда
            Объект.Disconnect();
            Возврат 0;
        ИначеЕсли Результат = 0 Тогда
            Прервать;
        КонецЕсли;
    КонецЦикла;
    Пока "на экране окно вопроса" = "на экране окно вопроса" Цикл
        Объект.GetECRStatus();
        Результат = ОбработкаОшибокПриПечати(Объект);
        Если Результат = "Отмена" Тогда
            Объект.Disconnect();
            Возврат 0;
        ИначеЕсли Результат = 0 Тогда
            Прервать;
        КонецЕсли;
    КонецЦикла;
    
    Если Объект.ECRAdvancedMode = 3 Тогда
        Объект.ContinuePrint();
        Пока "на экране окно вопроса" = "на экране окно вопроса" Цикл
            Объект.GetECRStatus();
            Результат = ОбработкаОшибокПриПечати(Объект);
            Если Результат = "Отмена" Тогда
                Объект.Disconnect();
                Возврат 0;
            ИначеЕсли Результат = 0 Тогда
                Прервать;
            КонецЕсли;
        КонецЦикла;
    КонецЕсли;  
    
    //Получим ширину ленты, т.к. она разнаф для разных ФР-ов
    Попытка            
        Пока "на экране окно вопроса" = "на экране окно вопроса" Цикл
            Объект.GetDeviceMetrics();
            Результат = ОбработкаОшибокПриПечати(Объект);
            Если Результат = "Отмена" Тогда
                Объект.Disconnect();
                Возврат 0;
            ИначеЕсли Результат = 0 Тогда
                Прервать;
            КонецЕсли;
        КонецЦикла;
        //Теперь через свойсвто драйвера UModel получим тип устройства и
        //установим ширину строки, в зависимости от типа устройства  
        ТипУстр=Число(Объект.UModel);
        Если (ТипУстр=0) ИЛИ (ТипУстр=1) ИЛИ (ТипУстр=4) ИЛИ (ТипУстр=8) Тогда
            //Штрих-ФР-Ф или Штрих-ФР-К
            ШиринаСтроки=36;    
        ИначеЕсли (ТипУстр=2) Тогда
            //Элвес-Мини-ФР-Ф
            ШиринаСтроки=24;    
        ИначеЕсли (ТипУстр=5) ИЛИ (ТипУстр=11) Тогда
            //Штрих-950К
            ШиринаСтроки=40;    
        ИначеЕсли (ТипУстр=6) Тогда
            //Элвес-ФР-К    
            ШиринаСтроки=32;    
        ИначеЕсли (ТипУстр=7) ИЛИ (ТипУстр=14) Тогда
            //Штрих-Мини-ФР-К
            ШиринаСтроки=36;
        ИначеЕсли (ТипУстр=9) ИЛИ (ТипУстр=12) Тогда
            //Штрих-Комбо-ФРК
            ШиринаСтроки=48;
        Иначе
            ШиринаСтроки=36;    
        КонецЕсли;
    Исключение
        ШиринаСтроки=36;    
    КонецПопытки;
    
    Если ПризнВозврата = 0 Тогда
        СтрокаПечати = "ЧЕК ПРОДАЖИ";
    Иначе
        СтрокаПечати = "ЧЕК ВОЗВРАТА";
    КонецЕсли;
    Если ПечататьПоСередине(СтрокаПечати,ШиринаСтроки,Объект) = 1 Тогда
        Возврат 0;
    КонецЕсли;
    
    СписокТоваров.ВыбратьСтроки();
    Пока СписокТоваров.ПолучитьСтроку() = 1 Цикл
        Стр = Лев("------------------------------------",ШиринаСтроки);
        Если ПечатьСтроки(Стр,Объект) = 0 Тогда
            Возврат 0;
        КонецЕсли;
        
        СтрокаНаименования = СокрЛП(ВРЕГ(Строка(СписокТоваров.НомерСтроки) + "." + СписокТоваров.ТовНаим));
        Если БитьНаименованиеИПечатать(СтрокаНаименования,ШиринаСтроки,Объект) = 1 Тогда
            Возврат 0;
        КонецЕсли;
        
        _ПредстЦена = СОКРЛП(Строка(Формат(СписокТоваров.Цена,"Ч15.2")));
        Если СписокТоваров.Количество > 1 Тогда
            Стр = Строка(СписокТоваров.Количество) + " х " + Строка(_ПредстЦена);
            Если ПечатьСтроки(Стр,Объект) = 0 Тогда
                Возврат 0;
            КонецЕсли;
        КонецЕсли;
        
        А = 0;
        ПредстСуммаБезСкидки = СОКРЛП(Строка(Формат(СписокТоваров.Цена * СписокТоваров.Количество,"Ч15.2")));
        СтрокаСтоимости = "Стоимость";
        Пока А < (ШиринаСтроки - СтрДлина(ПредстСуммаБезСкидки) - СтрДлина("Стоимость")) Цикл
            А = А + 1;
            СтрокаСтоимости = СтрокаСтоимости + ".";
        КонецЦикла;
        СтрокаСтоимости = СтрокаСтоимости + Строка(ПредстСуммаБезСкидки);
        Если ПечатьСтроки(СтрокаСтоимости,Объект) = 0 Тогда
            Возврат 0;
        КонецЕсли;
        
    КонецЦикла;
        
    СуммаИтого = СуммаЧека;
    // сумма со скидкой
    СуммаИтогоСоСкидкой = СуммаЧека;
    Если ПустоеЗначение(Скидка) = 0 Тогда
        // сумма без скидки
        СуммаИтого = СуммаИтого / (1 - Скидка / 100);
        
        // Если скидка на все позиции, тогда печатаем в конце чека
        Если Скидка > 0 Тогда
            Стр = Лев("------------------------------------",ШиринаСтроки);
            Если ПечатьСтроки(Стр,Объект) = 0 Тогда
                Возврат 0;
            КонецЕсли;
            
            А = 0;
            ПредстСтоимость = СОКРЛП(Строка(Формат(СуммаИтого,"Ч15.2")));
            СтрокаСтоимости = "Итого без ск.";
            Пока А < (ШиринаСтроки - СтрДлина(ПредстСтоимость) - СтрДлина("Итого без ск.")) Цикл
                А = А + 1;
                СтрокаСтоимости = СтрокаСтоимости + ".";
            КонецЦикла;
            СтрокаСтоимости = СтрокаСтоимости + Строка(ПредстСтоимость);
            Если ПечатьСтроки(СтрокаСтоимости,Объект) = 0 Тогда
                Возврат 0;
            КонецЕсли;
            
            А = 0;
            ПредстСкидка = СОКРЛП(Строка(Формат(Скидка,"Ч15.2")));
            СтрокаСкидки = "Скидка";
            Пока А < (ШиринаСтроки - СтрДлина(ПредстСкидка) - СтрДлина("Скидка") - СтрДлина("%")) Цикл
                А = А + 1;
                СтрокаСкидки = СтрокаСкидки + ".";
            КонецЦикла;
            СтрокаСкидки = СтрокаСкидки + Строка(ПредстСкидка) + "%";
            Если ПечатьСтроки(СтрокаСкидки,Объект) = 0 Тогда
                Возврат 0;
            КонецЕсли;
            
            А = 0;
            
            //СуммаИтогоСоСкидкой = СуммаИтого * (1 - Скидка/100);
            ПредстСтоимость = СОКРЛП(Строка(Формат(СуммаИтого * (1 - Скидка/100),"Ч15.2")));
            СтрокаСтоимости = "Итого со ск.";
            Пока А < (ШиринаСтроки - СтрДлина(ПредстСтоимость) - СтрДлина("Итого со ск.")) Цикл
                А = А + 1;
                СтрокаСтоимости = СтрокаСтоимости + ".";
            КонецЦикла;
            СтрокаСтоимости = СтрокаСтоимости + Строка(ПредстСтоимость);
            Если ПечатьСтроки(СтрокаСтоимости,Объект) = 0 Тогда
                Возврат 0;
            КонецЕсли;
            
        ИначеЕсли Скидка < 0 Тогда
            Стр = Лев("------------------------------------",ШиринаСтроки);
            Если ПечатьСтроки(Стр,Объект) = 0 Тогда
                Возврат 0;
            КонецЕсли;
            
            
            А = 0;
            ПредстСтоимость = СОКРЛП(Строка(Формат(СуммаИтого,"Ч15.2")));
            СтрокаСтоимости = "Итого без над.";
            Пока А < (ШиринаСтроки - СтрДлина(ПредстСтоимость) - СтрДлина("Итого без над.")) Цикл
                А = А + 1;
                СтрокаСтоимости = СтрокаСтоимости + ".";
            КонецЦикла;
            СтрокаСтоимости = СтрокаСтоимости + Строка(ПредстСтоимость);
            Если ПечатьСтроки(СтрокаСтоимости,Объект) = 0 Тогда
                Возврат 0;
            КонецЕсли;
            
            А = 0;
            ПредстСкидка = СОКРЛП(Строка(Формат( - Скидка,"Ч15.2")));
            СтрокаСкидки = "Надбавка";
            Пока А < (ШиринаСтроки - СтрДлина(ПредстСкидка) - СтрДлина("Надбавка") - СтрДлина("%")) Цикл
                А = А + 1;
                СтрокаСкидки = СтрокаСкидки + ".";
            КонецЦикла;
            СтрокаСкидки = СтрокаСкидки + Строка(ПредстСкидка) + "%";
            Если ПечатьСтроки(СтрокаСкидки,Объект) = 0 Тогда
                Возврат 0;
            КонецЕсли;
            
            А = 0;
            //СуммаИтогоСоСкидкой = СуммаИтого * (1 - Скидка/100);
            ПредстСтоимость = СОКРЛП(Строка(Формат(СуммаИтого * (1 - Скидка/100),"Ч15.2")));
            СтрокаСтоимости = "Итого с над.";
            Пока А < (ШиринаСтроки - СтрДлина(ПредстСтоимость) - СтрДлина("Итого с над.")) Цикл
                А = А + 1;
                СтрокаСтоимости = СтрокаСтоимости + ".";
            КонецЦикла;
            СтрокаСтоимости = СтрокаСтоимости + Строка(ПредстСтоимость);
            Если ПечатьСтроки(СтрокаСтоимости,Объект) = 0 Тогда
                Возврат 0;
            КонецЕсли;
            
        КонецЕсли;
    КонецЕсли;
    
    Стр = Лев("===================================",ШиринаСтроки);
    Если ПечатьСтроки(Стр,Объект) = 0 Тогда
        Возврат 0;
    КонецЕсли;
    
    СуммаДокумента = СуммаИтогоСоСкидкой;
    
    Отдел = Число(НомерСекции);
    Если ПризнВозврата = 0 Тогда
        Если РегистрацияПозиции(Отдел,СуммаДокумента,1,Объект) = 0 Тогда
            Возврат 0;
        КонецЕсли;
    Иначе
        Если ВозвратПозиции(Отдел,СуммаДокумента,1,Объект) = 0 Тогда
            Возврат 0;
        КонецЕсли;
    КонецЕсли;
    
    Если (Получено > 0) И (Получено > СуммаЧека) Тогда
        Если ЗакрытиеЧека(СуммаЧека,Окр(Получено,2,1),Объект) = 0 Тогда
            Возврат 0;
        КонецЕсли;
        
    Иначе
        Если ЗакрытиеЧека(СуммаЧека,Окр(0,2,1),Объект) = 0 Тогда
            Возврат 0;
        КонецЕсли;
    КонецЕсли;
    
    Если ОбработкаОшибок(Объект) = 0 Тогда
        Объект.GetECRStatus();
        НомерЧека = Объект.OpenDocumentNumber + 1;
    Иначе
        Возврат 0;
    КонецЕсли;
    Объект.Disconnect();
    
    
    Возврат 1;
КонецФункции

//********************************************************************************
Функция ЗакрытьСмену(Объект, ПарольАдмин, ПарольПольз)
    Рез = 0;
    
    Если ПустоеЗначение(Объект) = 1 Тогда
        ОписаниеРезультата = "устройство не подключено";
    Иначе
        // переключение в режим снятия отчета (нужен пароль администратора)
        Пока "на экране окно вопроса" = "на экране окно вопроса" Цикл
            Объект.Password = 1;
            Объект.Connect();
            Результат = ОбработкаОшибокПриПечати(Объект);
            Если Результат = "Отмена" Тогда
                Объект.Disconnect();
                Возврат 0;
            ИначеЕсли Результат = 0 Тогда
                Прервать;
            КонецЕсли;
        КонецЦикла;
        
        Пока "на экране окно вопроса" = "на экране окно вопроса" Цикл
            Пароль = ПарольАдмин;
            Если ВвестиЧисло(Пароль,"Введите пароль",8,0) = 0 Тогда
                Возврат 0;
            Конецесли;
            Объект.Password = Строка(Пароль);
            Объект.Connect();
        
            Результат = ОбработкаОшибокПриПечати(Объект);
            Если Результат = "Отмена" Тогда
                Объект.Disconnect();
                Возврат 0;
            ИначеЕсли Результат = 0 Тогда
                Прервать;
            КонецЕсли;
        КонецЦикла;
        
        Объект.GetECRStatus();
        Если ОбработкаОшибок(Объект) = 1 Тогда
            Объект.Disconnect();
            Возврат 0;
        КонецЕсли;
        Если Объект.ECRAdvancedMode = 3 Тогда
            Объект.ContinuePrint();
            Объект.Password = Строка(Пароль);
            Объект.GetECRStatus();
            Если ОбработкаОшибок(Объект) = 1 Тогда
                Объект.Disconnect();
                Возврат 0;
            КонецЕсли;
        КонецЕсли;
        Если Объект.ECRMode = 4 Тогда
            Предупреждение("Обнуленная касса!");
            Объект.Disconnect();
            Возврат 0;
        КонецЕсли;
        Если Вопрос("Вы действительно хотите снять суточный отчет с гашением?",3) <> 6 Тогда
            Объект.Disconnect();
            Возврат 0;
        КонецЕсли;
        Объект.PrintReportWithCleaning();
        ОбработкаОшибок(Объект);
        Объект.Disconnect();
        Рез = 1;
    КонецЕсли;
    
    Возврат Рез;
КонецФункции

//********************************************************************************
Процедура ПриОткрытии()
    Перем Объект, НомерЧека, Парам;
    
    СтатусВозврата(0);
    Форма.Параметр.Выгрузить(Парам);
    Форма.Параметр.УдалитьВсе();
    
    Если Парам.РазмерСписка() = 0 Тогда
        Рез = 0;
        ОписаниеРезультата = "в обработку не переданы параметры";
    Иначе
        
        Процесс = НРег(Парам.Получить("Процесс"));
        
        Если Процесс = "подключить" Тогда
            Компонента = Парам.Получить("Компонента");
            ПрогИд     = Парам.Получить("ПрогИд");
            Пароль     = Парам.Получить("ПарольПользователя");
            
            Рез = Подключить(Компонента, ПрогИд, Пароль, Объект);
            
            Форма.Параметр.Установить("Объект", Объект);
            
        ИначеЕсли Процесс = "отключить" Тогда
            Объект = Парам.Получить("Объект");
            Рез = Отключить(Объект);
            
        ИначеЕсли Процесс = "печатать_чек" Тогда
            Объект        = Парам.Получить("Объект");
            СписокТоваров = Парам.Получить("СписокТоваров");
            СуммаЧека     = Парам.Получить("СуммаЧека");
            Получено      = Парам.Получить("Получено");
            ЧекНаВозврат  = Парам.Получить("Возврат");
            НомерСекции   = Парам.Получить("НомерСекции");
            Скидка        = Парам.Получить("Скидка");
            
            Рез = ПечататьЧек(Объект, СписокТоваров, СуммаЧека, Получено, Скидка, ЧекНаВозврат, НомерСекции, НомерЧека);
            
            Форма.Параметр.Установить("НомерЧека", НомерЧека);
            
        ИначеЕсли Процесс = "закрыть_смену" Тогда
            Объект  = Парам.Получить("Объект");
            Пароль1 = Парам.Получить("ПарольАдминистратора");
            Пароль2 = Парам.Получить("ПарольПользователя");
            Рез = ЗакрытьСмену(Объект, Пароль1, Пароль2);
        Иначе
            ОписаниеРезультата = "неизвестная команда";
            Рез = 0;
        КонецЕсли;
    КонецЕсли;
    
    Форма.Параметр.Установить("Результат"         , Рез);
    Форма.Параметр.Установить("ОписаниеРезультата", ОписаниеРезультата);
    
КонецПроцедуры
ОписаниеРезультата = "";
ШиринаСтроки = 40;