Имя: Пароль:
1C
1C 7.7
v7: Корректировка чека Атол 11ф
0 Georg68
 
21.06.23
07:49
Может немного не по теме, но сервисники из Атол послали меня к моей семерке, мол она эту строку печатает, а мы не при делах.
https://cloud.mail.ru/public/ha3A/AfT4MWPtE
Как можно убрать эти лишние строки?
1 big
 
21.06.23
08:13
В обработке надо смотреть ПечатьСтроки(). Вот только не факт, что эти строки "лишние". В них-то как раз и написано всё требуемое по закону: Товар - количество - цена - сумма. ИМХО лишние - это как раз таки другие строки, которые над ними находятся
2 Georg68
 
21.06.23
08:23
да не, в шаблоне документа я могу добавить вторую строку, где и будет прописано количество и цена.
А вот первая строка не убирается никак, даже если все галочки в шаблоне снять.
3 Georg68
 
21.06.23
08:25
Всё бы ничего, но только в этом наименовании товара не печатается артикул товара, а он нужен для быстрой идентификации, ибо частые возвраты и безнальшики еще.
4 serpentt
 
21.06.23
08:42
(0) у атола на сайте есть редактор шаблонов чека, пробовал его?
5 Georg68
 
21.06.23
08:48
Именно сам редактор не пробовал, больно он замороченный, но в мастере шаблона в настройках Фронтола все галки снимаешь, но эта строка не пропадает.
Она откуда то из другого места подтягивается.
6 Злопчинский
 
21.06.23
08:52
в клюшках штатно передается в качестве параметров для печати чеков - передается список товаров, в котором наименование товаров. по коду посмотреть где и передать в качестве наименования Артикул+Наименование.
7 Злопчинский
 
21.06.23
08:54
Вообще естьподозрение что чек печататется какой-то старой обработкой.
в чеке еще система налогообложения должна выводиться, фискальный номер чека (вроде) и еще куча всего...
8 MWWRuza
 
21.06.23
09:03
Там было у АТОЛа что-то про этот косяк, вроде где-то нужно пустую строку передать для обнуления этого ненужного блока. Сейчас не вспомню, готового примера нет, ищите сами. Если не найдете - поищу, я хоть представляю, что искать.
9 MWWRuza
 
21.06.23
09:17
(8) Нет, пардон... Это все так, только это у Штриха было:

ФискальныйРегистратор.StringForPrinting = " "; // Без этого, печатает повтором последнюю строку наименования товара

Сейчас посмотрел по своим конфам, и в АТОЛовских не нашел, зато в Штриховской - вот. Память подвела, но "чуть-чуть" :-)
Может и у АТОЛа что-то на подобии есть, не исключено...
10 Georg68
 
21.06.23
09:21
Чек просто обрезанный, а так там есть все реквизиты, все дела, QR код.
11 victuan1
 
22.06.23
10:22
(10) Ну видно, что обработка печатает дополнительно наименование товаров нефискальной строкой. Надо открыть обработку печати чека на ФР и поправить код.
Для более точно диагноза покажи как этот чек выглядит в ЛК ОФД.
12 Georg68
 
22.06.23
11:00
Как-то так вот выглядит.
https://cloud.mail.ru/public/h3fq/i4ZD5Qnbt
13 Georg68
 
22.06.23
11:02
14 victuan1
 
22.06.23
12:08
(13) Это явно другой чек, не тот что в (0).
Поэтому мне сравнивать нечего и по существу добавить тоже нечего.
15 Georg68
 
22.06.23
13:00
16 vladmenleo
 
22.06.23
13:54
(15) поищи в своей обработке что-то типа
Объект.Caption = чемутотам
и
Объект.PrintString();
это печать нефискальной строки из старой обработки
17 victuan1
 
22.06.23
17:50
(16) Да, согласен. Про это и писал в (11). Видя фото из ЛК, понимаю, что не ошибся.
18 Georg68
 
22.06.23
19:41
////////////////////////////////////////////////////////////////////////////////
// ОПИСАНИЕ МОДУЛЬНЫХ ПЕРЕМЕННЫХ

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

Перем мИмяФайлаОтчета;
Перем мИмяФайлаТоваров;
Перем мИмяФайлаФлагаОтчета; // ???
Перем мИмяФайлаФлагаТоваров; // ???

////////////////////////////////////////////////////////////////////////////////
// СЛУЖЕБНЫЕ ПРОЦЕДУРЫ И ФУНКЦИИ

//******************************************************************************
Функция ПолучитьСуммуЧека(Отчет, ПредыдущийКонЧека)
    
    Сумма = 0;
    Для СчетчикЦикла = ПредыдущийКонЧека + 1 По Отчет.КоличествоСтрок() Цикл
        Сумма = Сумма + Отчет.ПолучитьЗначение(СчетчикЦикла, "Сумма");
    КонецЦикла;
    
    Возврат Сумма;
КонецФункции // ПолучитьСуммуЧека()
// *****************************************************************************
функция ТекущееВремяВСекундах() // ???
    Ч = 0;
    М = 0;
    С = 0;
    ТекущееВремя(Ч, М, С);
    возврат Ч * 60 * 60 + М * 60 + С;
конецфункции
// *****************************************************************************
функция ТекущееВремяВСекундахМинус(Нач) // ???
    Тек = ТекущееВремяВСекундах();
    Если (Тек >= Нач) Тогда
        Рез = Тек - Нач;
    иначе
        Рез = Тек + 24 * 60 * 60 - Нач;
    КонецЕсли;
    
    возврат Рез;
конецфункции
// *****************************************************************************
функция СоздатьФайлФлаг(ПутьФайла, Ждать) // ???
    Файл = СоздатьОбъект("Текст");
    Попытка
        Файл.Записать(сокрлп(ПутьФайла));
    исключение
        сообщить("Не удалось создать файл <"+сокрлп(ПутьФайла)+">!");
        возврат 0;
    конецпопытки;
    Если (Ждать = 1) тогда
        Пока (1 = 1) цикл
            Нач = ТекущееВремяВСекундах();
            Пока (1 = 1) цикл // ждем минуту
                Прошло = ТекущееВремяВСекундахМинус(Нач);
                Состояние("Запрос отчета. Прошло " + Строка(Прошло) + " сек...");
                Если Прошло >= 60 Тогда
                    Прервать;
                КонецЕсли;
                Если (ФС.СуществуетФайл(сокрлп(ПутьФайла)) = 1) тогда
                    возврат 1;
                конецесли;
            конеццикла;
            Если (Вопрос( "ККМ не ответила в течении 60 секунд! Подождать еще?", "Да+Нет" )="Нет") тогда
                возврат 0;
            конецесли;
        конеццикла;
    конецесли;
    возврат 1;
конецфункции
// *****************************************************************************
Функция ЗакрытьСмену(Объект, НомСекции, НомерККМ, КаталогОбмена, Отчет)
    
    //Если СоздатьФайлФлаг(КаталогОбмена + мИмяФайлаФлагаОтчета, 1) = 0 тогда // ???
    //    ОписаниеРезультата = "Не создан файл флаг " + мИмяФайлаОтчета + " в каталоге " + КаталогОбмена;;
    //    Возврат 0;
    //КонецЕсли;

    ФайлОтчета    = СоздатьОбъект("Текст");
    
    Если ФС.СуществуетФайл(КаталогОбмена + мИмяФайлаОтчета) = 0 Тогда
        ОписаниеРезультата = "Отсутствует файл отчета " + мИмяФайлаОтчета + " в каталоге " + КаталогОбмена;
        Возврат 0;
    КонецЕсли;
    
    ФайлОтчета.Открыть(КаталогОбмена + мИмяФайлаОтчета);
    
    // количество строк в файле должно быть как минимум 4 (шапка + 1 строка по товару)
    Если ФайлОтчета.КоличествоСтрок() < 4 Тогда
        ОписаниеРезультата = "В файле отчета отсутствует информация о продажах";
        Возврат 0;
    КонецЕсли;
    
    // выполним проверку шапки
    СтрокаОтчета = " ";
    Пока СтрокаОтчета = " " Цикл
        СтрокаОтчета = сокрлп(ФайлОтчета.ПолучитьСтроку(1));
    КонецЦикла;
    
    Если СтрокаОтчета <> "#" Тогда
        Если СтрокаОтчета = "@" Тогда
            ОписаниеРезультата = "Отчет № " + ФайлОтчета.ПолучитьСтроку(2) + " уже был загружен.";
        Иначе
            ОписаниеРезультата = "Неверный формат файла отчета";
        КонецЕсли;
        
        Возврат 0;
    КонецЕсли;
    
    ЛогНомерИзОтчета = ФайлОтчета.ПолучитьСтроку(2);
    Если ЛогНомерИзОтчета <> НомерККМ Тогда
        ОписаниеРезультата = "Закрытие смены производится для ККМ № " + НомерККМ + ", отчет получен из ККМ № " + ЛогНомерИзОтчета;
        Возврат 0;
    КонецЕсли;
    
    НомерОтчета = ФайлОтчета.ПолучитьСтроку(3);
    
    Состояние("Загружается отчет № " + НомерОтчета + " с POS № " + ЛогНомерИзОтчета + "...");
    
    Отчет    = СоздатьОбъект("ТаблицаЗначений");
    Отчет.НоваяКолонка("Код"           , "Строка");
    Отчет.НоваяКолонка("Штрихкод"      , "Строка");
    Отчет.НоваяКолонка("Цена"          , "Число");
    Отчет.НоваяКолонка("Количество"    , "Число");
    Отчет.НоваяКолонка("СуммаБезСкидки", "Число");
    Отчет.НоваяКолонка("Сумма"         , "Число");
    
    // используется для расчета скидок и надбавок по всем позициям чека
    ПредыдущийКонЧека = Отчет.КоличествоСтрок();
    // используется для расчета скидок и надбавок по всем позициям чека
    ПослРегистрация = 0;
    
    Для Счетчик = 4 По ФайлОтчета.КоличествоСтрок() Цикл
        
        Стр = СтрЗаменить( ФайлОтчета.ПолучитьСтроку(Счетчик), ";", РазделительСтрок );
        НомерТранзакции = Число( СтрПолучитьСтроку( Стр, 1 ) );
        ДатаТранзакции  = Дата( СтрПолучитьСтроку( Стр, 2 ) );
        ВремяТранзакции = СтрПолучитьСтроку( Стр, 3 );
        ТипТранзакции   = Число( СтрПолучитьСтроку( Стр, 4 ) );
        НомерККМ        = Число( СтрПолучитьСтроку( Стр, 5 ) );
        НомерЧека       = Число( СтрПолучитьСтроку( Стр, 6 ) );
        Кассир          = СтрПолучитьСтроку( Стр, 7 );
        Код             = СтрПолучитьСтроку( Стр, 8 );
        Секция          = СтрПолучитьСтроку( Стр, 9 );
        Цена            = Число( СтрЗаменить( СтрПолучитьСтроку( Стр, 10 ), ",", "." ) );
        Количество      = Число( СтрЗаменить( СтрПолучитьСтроку( Стр, 11 ), ",", "." ) );
        СуммаБезСкидки  = Число( СтрЗаменить( СтрПолучитьСтроку( Стр, 12 ), ",", "." ) );
        ТипЧека         = Число( СтрПолучитьСтроку( Стр, 13 ) );
        Сумма           = Число( СтрЗаменить( СтрПолучитьСтроку( Стр, 16 ), ",", "." ) );
        
        
        Если ТипТранзакции = 11 Тогда
            // продажа
            Отчет.НоваяСтрока();
            Отчет.Код            = Код;
            Отчет.Штрихкод       = "";
            Отчет.Цена           = Цена;
            Отчет.Количество     = Количество;
            Отчет.Сумма          = Сумма;
            Отчет.СуммаБезСкидки = СуммаБезСкидки;
            
            ПослРегистрация = Отчет.КоличествоСтрок();
        
        ИначеЕсли ТипТранзакции = 12 Тогда
            // сторно последней регистрации
            
            ТекПоз = Отчет.КоличествоСтрок();
            Пока ТекПоз >= ПослРегистрация Цикл
                Отчет.УдалитьСтроку(ТекПоз);
                ТекПоз = ТекПоз - 1;
            КонецЦикла;
            
            ПослРегистрация = Отчет.КоличествоСтрок();
            
        ИначеЕсли ((ТипТранзакции = 15) или (ТипТранзакции = 17)) И (ПослРегистрация > 0) Тогда
            // скидка на последнюю позицию
            
        ИначеЕсли ((ТипТранзакции = 16) ИЛИ (ТипТранзакции = 18)) И (ПослРегистрация > 0) Тогда
            // надбавка на последнюю позицию
            
        ИначеЕсли (ТипТранзакции = 35) или (ТипТранзакции = 37) Тогда
            // скидка на чек
            
        ИначеЕсли (ТипТранзакции = 36) или (ТипТранзакции = 38) Тогда
            // надбавка на чек
            
        ИначеЕсли ТипТранзакции = 55 Тогда
            // закрытие чека
            ПредыдущийКонЧека = Отчет.КоличествоСтрок();
        ИначеЕсли ТипТранзакции = 56 Тогда
            // отмена чека
            Отчет.КоличествоСтрок(ПредыдущийКонЧека);
        КонецЕсли;
        
    КонецЦикла;    
    
    // свернем таблицу по товару
    Отчет.Свернуть("Код,Штрихкод,Цена", "Количество, Сумма, СуммаБезСкидки");
    
    // занесем в файл информацию о том, что отчет загружен.
    Записано = 0;
    Пока Записано = 0 Цикл
        Попытка
            ФайлОтчета.ЗаменитьСтроку(1,"@");
            ФайлОтчета.Записать(КаталогОбмена + мИмяФайлаОтчета); // ???
            Если сокрлп(ФайлОтчета.ПолучитьСтроку(1)) = "@"  Тогда
               Записано = 1;
            КонецЕсли;
        Исключение
            ОписаниеРезультата = ОписаниеОшибки();
            Возврат 0;
        КонецПопытки;
    КонецЦикла;
    Возврат 1;    // успешное завершение
    
КонецФункции


// *****************************************************************************
Функция ЗагрузитьТовары(Объект, НомСекции, НомерККМ, КаталогОбмена, СписокТоваров)

    ФайлЗагрузки    = СоздатьОбъект("Текст");
    Спр                = СоздатьОбъект("Справочник.Номенклатура");    //тщи
    
    // сформируем шапку
    ФайлЗагрузки.ДобавитьСтроку("##@@&&");                // строка инициализации
    ФайлЗагрузки.ДобавитьСтроку("#");                    // признак загрузки
    ФайлЗагрузки.ДобавитьСтроку("$$$DELETEALLWARES");    // с удалением// ???
    
    СписокТоваров.ВыбратьСтроки();
    Пока СписокТоваров.ПолучитьСтроку() = 1 Цикл
        
        //[+] тщи
        ТекТовар = "";
        Если Спр.НайтиПоКоду(СписокТоваров.Код,0) = 0 Тогда
            Если СписокТоваров.Группа = 1 Тогда
                Сообщить("Не найдена группа с кодом "+СписокТоваров.Код+" "+СписокТоваров.Наименование,"!");
            Иначе
                Сообщить("Не найден товар с кодом "+СписокТоваров.Код+" "+СписокТоваров.Наименование,"!");
            КонецЕсли;
            Продолжить;
        КонецЕсли;
        ТекТовар        = Спр.ТекущийЭлемент();
        ПР = 1; //Товар;
        Если ТекТовар.аисТипМаркировкиГИСМ <= 3 Тогда //алкоголь, меха, ЛП
            ТипМарк = ТекТовар.аисТипМаркировкиГИСМ
        ИначеЕсли ТекТовар.аисТипМаркировкиГИСМ = 4 Тогда //обувь
            ТипМарк = 5
        ИначеЕсли ТекТовар.аисТипМаркировкиГИСМ = 5 Тогда //табак
            ПР = 2; //подакцизный товар
            ТипМарк = 4
        ИначеЕсли ТекТовар.аисТипМаркировкиГИСМ = 6 Тогда //шины
            ТипМарк = 10
        ИначеЕсли ТекТовар.аисТипМаркировкиГИСМ = 7 Тогда //лег.пром
            ТипМарк = 11
        ИначеЕсли ТекТовар.аисТипМаркировкиГИСМ = 8 Тогда //парфюм
            ТипМарк = 9
        ИначеЕсли ТекТовар.аисТипМаркировкиГИСМ = 9 Тогда //фото
            ТипМарк = 8
        Иначе                                             //иная маркированная продукция
            ТипМарк = 7
        КонецЕсли;
        //[-] тщи
                подстр1 =     
                СписокТоваров.Код + ";" +                                   // 1  - код товара
                СписокТоваров.ШтрихКод + ";" +                               // 2  - штрихкод товара
                СокрП(СтрЗаменить(СписокТоваров.Наименование, РазделительСтрок, " ")) + ";" +                  // 3  - наименование
                СокрП(СтрЗаменить(СписокТоваров.Наименование, РазделительСтрок, " ")) + ";" +                   // 4  - наименование для кассы
                СокрЛП(Формат(СписокТоваров.Цена, "Ч15.2")) + ";" +        // 5  - цена
                СокрЛП(Формат(СписокТоваров.Количество, "Ч10.1")) + ";" +  // 6  - количество
                "0;" +                                                     // 7  - вседа 0
                "0;" +                                                     // 8  - скидка на товар
                "0;" +                                                     // 9  - максимальная скидка
                "0;" +                                                     // 10 - дата начала действия скидки
                "0;" +                                                     // 11 - дата окончания действия скидки
                "0;" +                                                     // 12 - время начала действия скидки
                "1;" +                                                     // 13 - (время окончания действия скидки) тщи ПР = Признак предмета расчета, 2 = АТ (58поле СР 2 - Полный)
                "1;" +                                                     // 14 - коэффициент пересчета всегда 1
                "0;" +                                                     // 15 - код товара с базовой единицей
                СписокТоваров.Родитель + ";" +                             // 16 - код родительской группы
                ?(СписокТоваров.Группа = 1, "0;", "1;") +                  // 17 - выгружаем товар (1) или группу (0)
                СписокТоваров.Уровень + ";" +                              // 18 - номер уровня иерархического списка
                "0;" +                                                     // 19 - номер секции
                ";;;;;;;;;;;" +                                            // 20 -
                СокрЛП(СписокТоваров.Код)+".jpg;" +                        // 31 - фото
                
                ";" +                                                        // 32    - описание
                ";" +                                                        // 33    - кратность количества
                ";" +                                                        // 34    - код ценника
                ";" +                                                        // 35    - тип вознаграждения
                ";" +                                                        // 36    - значение вознаграждения
                НомСекции+";" +                                                // 37    - номер секции ККМ
                                                //                            // ГТД (38)
                                                //                            // Код группы печати чека (39)
                                                //                            // Код группы печати копии (40)
                                                //                            // Код группы печати счета (41)
                                                //                            // Код группы печати марки (42)
                                                //                            // Код предприятия (43)
                                                //                            // Не используется (44)
                                                //                            // Номер сообщения в весах с ПЭ (45)
                                                //                            // Не используется (46)
                                                //                            // Значение флага «Визуальный выбор модификаторов при регистрации» (47)
                                                //                            // Левая граница допустимого суммарного удельного веса модификаторов (48)
                                                //                            // Правая граница допустимого суммарного удельного веса модификаторов (49)
                                                //                            // Текстовое сообщение для весов с ПЭ (50)    
                                                                            //53 поле, Необязательное, Целое, Код вида продукции (Значение по умолчанию: 10);
                                                                            //54 поле, Необязательное, Дробное (10.6),Ёмкость тары, л (Значение по умолчанию: 1);
                                                                            //55 поле, Необязательное, Целое, тип номенклатуры (0-обычный товар, 1 - алк.продукция, 2 - мех, 3 - лекарства, 4 - табак, 5 - обувь. Значение по умолчанию: 0)
                                                                            //56 поле, Необязательное, Целое, Маркировка алкогольной продукции (0 – с маркой; 1 – без марки. Значение по умолчанию: 0)
                                                                            //57 поле, Необязательное, Дробное (значение крепости не должно содержать больше трех знаков после десятичного разделителя и не может быть больше 100.), Крепость алкогольной продукции, % (Значение по умолчанию: 0,1).     
                ";;;;;;;;;;;;;;;;;"+                                        // тщи
                ТипМарк                                                        // 55    - тип номенклатуры //тщи 0-обычный товар, 1 - алк.продукция, 2 - мех, 3 - лекарства, 4 - табак, 5 - обувь.
                ;
        ФайлЗагрузки.ДобавитьСтроку(подстр1
                );
    КонецЦикла;

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


// *****************************************************************************
// Описание:
//  обмен данными производится при помощи текстовых файлов, поэтому внешняя
//  компонента не используется и подключать ничего не нужно
Функция Подключить(Компонента, ПрогИд, Объект)
    Возврат 1;
КонецФункции

// *****************************************************************************
// Описание:
//  обмен данными производится при помощи текстовых файлов, поэтому внешняя
//  компонента не используется и отключать ничего не нужно
Функция Отключить(Объект)
    Возврат 1;
КонецФункции

// *****************************************************************************
Процедура ПриОткрытии()
    Перем Объект, Парам, Отчет, Данные;
    
    СтатусВозврата(0);
    Форма.Параметр.Выгрузить(Парам);
    Форма.Параметр.УдалитьВсе();
    
    Если Парам.РазмерСписка() = 0 Тогда
        Рез = 0;
        ОписаниеРезультата = "в обработку не переданы параметры";
    Иначе
            
        Процесс = НРег(Парам.Получить("Процесс"));
        
        Если Процесс = "подключить" Тогда
            Компонента = Парам.Получить("Компонента");
            ПрогИд     = Парам.Получить("ПрогИд");
            
            Рез        = Подключить(Объект, Компонента, ПрогИд);
            
            Форма.Параметр.Установить("Объект", Объект);
            
        ИначеЕсли Процесс = "отключить" Тогда
            Объект = Парам.Получить("Объект");
            
            Рез    = Отключить(Объект);
            
        ИначеЕсли Процесс = "загрузить_товары" Тогда
            Объект        = Парам.Получить("Объект");
            СписокТоваров = Парам.Получить("СписокТоваров");
            НомСекции     = Парам.Получить("НомерСекции");
            НомерККМ      = Парам.Получить("НомерККМ");
            КаталогОбмена = СокрЛП(Парам.Получить("КаталогОбмена"));
            
            Если Прав(КаталогОбмена, 1) <> "\" Тогда
                КаталогОбмена = КаталогОбмена + "\";
            КонецЕсли;
            
            Рез       = ЗагрузитьТовары(Объект, НомСекции, НомерККМ, КаталогОбмена, СписокТоваров);
            
        ИначеЕсли Процесс = "закрыть_смену" Тогда
            Объект    = Парам.Получить("Объект");
            НомСекции = Парам.Получить("НомерСекции");
            НомерККМ  = Парам.Получить("НомерККМ");
            КаталогОбмена = СокрЛП(Парам.Получить("КаталогОбмена"));
            
            Если Прав(КаталогОбмена, 1) <> "\" Тогда
                КаталогОбмена = КаталогОбмена + "\";
            КонецЕсли;
            
            Рез          = ЗакрытьСмену(Объект, НомСекции, НомерККМ, КаталогОбмена, Отчет);
            
            Форма.Параметр.Установить("Отчет", Отчет);
        
        Иначе
            ОписаниеРезультата = "Передан неизвестный процесс";
            Рез = 0;
        КонецЕсли;
            
    КонецЕсли;
    
    Форма.Параметр.Установить("Результат"         , Рез);
    Форма.Параметр.Установить("ОписаниеРезультата", ОписаниеРезультата);
КонецПроцедуры

// *****************************************************************************
// ТЕЛО МОДУЛЯ

мИмяФайлаОтчета    = "report.txt";
мИмяФайлаТоваров    = "goods.txt";

мИмяФайлаФлагаОтчета = "report.flg"; // ???
мИмяФайлаФлагаТоваров    = "goods.flg"; // ???
19 Georg68
 
22.06.23
19:42
Не нашел, что исправить чёт.
20 victuan1
 
22.06.23
20:55
(18) А это код обработки обмена в оффлайн-режиме. Например, со Фронтолом.
А из (0) я понял, что печать чека идет на ФР напрямую из 1С 7.7.
Если понял правильно, то нужен код другой обработки: ее можно увидеть в 1С - Сервис - Настройка торгового оборудования - Фискальный регистратор - кнопка "О" справа от модели регистратора - будет написано имя файла внешней обработки обслуживания.
21 Georg68
 
23.06.23
04:38
Чек печатается на Фронтоле 5.26. Я на него и грешу. 1ска обменивается с фронтолом txt файлом, у неё алиби, я думаю.
22 vladmenleo
 
23.06.23
05:12
(20) По моему все так думали, что речь о прямой печати чека из 1с. правильное ТЗ - 50% правильного решения задачи.
(21) Вам видимо надо обращатся не к сервисникам атол по ккм, а к сервисникам по фронтолам, типа какого ваш фронтол что-то левое отправляет на ккм. При условии конечно-же, что сам фронтол вами не допилен
23 big
 
23.06.23
06:34
(21) Во Фронтоле в настройках документа "ЧЕК" есть подключенные скрипты, которыми и печатается чек. Надо его смотреть. Там несложно, но опыт иметь надо ;)
24 Georg68
 
23.06.23
08:47
Так за неимением в нашей деревне нормальных спецов, всё приходится осваивать самому.
Шаблон чеков во Фронтоле я могу править конечно, но это не помогает. Даже если снять там ВСЕ галки, то есть отказаться от печати всего, строка с наименованием всё равно печатается.
25 victuan1
 
23.06.23
09:18
(21) Тогда это высказывание ложно:
"но сервисники из Атол послали меня к моей семерке, мол она эту строку печатает"
Т.к в этом случае 1С сама ничего не печатает при пробитиии чека.
26 victuan1
 
23.06.23
09:22
(24) У меня в личке указан емайл, могу свести со спецом по Фронтолам.
27 big
 
23.06.23
09:29
(24) Посмотри что в скрипте делается, жмешь кнопку "Тест" и проверяешь результат

https://disk.yandex.ru/i/K7Gp-i-c2A8tCQ
28 Georg68
 
23.06.23
10:03
Всё верно, это шаблон чеков, где я и снимаю все галки, но наименование остаетя
29 big
 
23.06.23
10:11
(28) Я же говорю не про галки, а про скрипт. Смотри что в скрипте написано, пробуй изменять.
30 Georg68
 
23.06.23
11:02
Пробовал закомментировать в скрипте отдельно печать наименования, ошибка выскакивает при тесте. Может так просто нельзя это сделать, нужны более глубокие познания)
31 big
 
23.06.23
11:15
Тогда выкладывай сюда скрипт )
32 Georg68
 
23.06.23
11:56
33 big
 
23.06.23
12:10
(32) Шо это было? )))  Не знаю чем открыть
34 vladmenleo
 
23.06.23
12:26
(33) Far foreva!
function printHeader(print)
{
  print.printLRStringLF(frontol.currentDocument.type.name+" №"+print.addCharLeft(frontol.currentDocument.number,0,8),
                               "Смена №"+print.addCharLeft(frontol.currentDocument.sessionNumber,0,4)," ");
}

function printPosition(print)
{
  if (frontol.currentDocument.position.storno == 1)
    print.printCenterString("СТОРНО"," ");
  print.printStringWordWrap(frontol.currentDocument.position.number+". "+frontol.currentDocument.position.ware.code+" "+frontol.currentDocument.positi
on.ware.mark+" "+frontol.currentDocument.position.ware.text);
  if (frontol.currentDocument.position.storno == 0)
  {
    print.printLRStringLF("  "+(frontol.currentDocument.position.fracSale?print.formatQuantity(frontol.currentDocument.position.quantity):frontol.curr
entDocument.position.quantity)+"*"+
                            print.formatCurrency(frontol.currentDocument.position.priceWithDiscs),
                            print.formatCurrency(frontol.currentDocument.position.sumWithDiscs),"_");
    if (frontol.currentDocument.position.totalSumDiscount != 0)
      if (frontol.currentDocument.position.totalSumDiscount < 0)
        print.printLRStringLF("  "+"+"+print.formatPercent(-frontol.currentDocument.position.totalPercentDiscount)+"%",
               print.formatCurrency(-frontol.currentDocument.position.totalSumDiscount),"_");
      else
        print.printLRStringLF("  "+"-"+print.formatPercent(frontol.currentDocument.position.totalPercentDiscount)+"%",
                print.formatCurrency(frontol.currentDocument.position.totalSumDiscount),"_");
    if (frontol.currentDocument.position.number != frontol.currentDocument.position.count)
      print.printLRStringLF("-","-","-");
  }

}

function printFooter(print)
{
  {
  for(frontol.currentDocument.servicePrintInfo.index = 1;
      frontol.currentDocument.servicePrintInfo.index <= frontol.currentDocument.servicePrintInfo.count;
      frontol.currentDocument.servicePrintInfo.index++)
     if (frontol.currentDocument.servicePrintInfo.printGroup.code == print.printGroup.code)
     {
     }
  }
}
35 vladmenleo
 
23.06.23
12:30
(32)(33) судя по этим скриптам они больше похожи на печать чека который отправляется в ОФД, т.к. есть строки if (frontol.currentDocument.position.number != frontol.currentDocument.position.count)
      print.printLRStringLF("-","-","-"); которые печатают тире после каждой позиции кроме последней, а на чеке из (0) этих тире нет
36 big
 
23.06.23
13:11
(35) Не, Володя, не в ОФД. Скрипт рабочий вполне, только что во Фронтоле протестил ))   А вот то, что он не имеет отношения к картинке в (0) - это однозначно!! )))
37 vladmenleo
 
23.06.23
13:25
(36) Ну я собственно и имел ввиду, что чек в (0) не этим скриптом печатается
38 Georg68
 
23.06.23
17:10
Да, ничего от вас не скроешь, этот скрипт с другой кассы, но они идентичны.
Завтра скачаю с правильного Фронтола. Там просто одна касса осталась, вторая вылетела, сбились настройки, вторую неделю сервис сделать не может.
39 vladmenleo
 
24.06.23
04:08
(38) Ну если для вас проблема выгрузить настройки одной кассы и загрузить в другую, что занимает примерно 5 минут, то проблема с кривым чеком скорее всего для вас нерешаема :-(
40 Georg68
 
24.06.23
05:20
Шаблон чека абсолютно идентичен, на ВСЕХ кассах печатается двойная строка, так что хоть завыгружайся. От перестановки шаблона результат не изменится.
41 vladmenleo
 
24.06.23
06:28
(40) На образце чека, что вы представили в (0) нет строки тире, которая печатается скриптом из (32) Так-что что-то вы путаете, или умалчиваете
42 Georg68
 
24.06.23
07:56
https://cloud.mail.ru/public/GFs4/KGpy9wsRS
Вот этот шаблон с этой кассы точно и работает с Атол 11ф.
43 vladmenleo
 
24.06.23
10:29
(42) Ну вопрос-то прежний, где на чеке из (0) строка печатаемая вот этой частью скрипта
if (frontol.currentDocument.position.number != frontol.currentDocument.position.count)
      print.printLRStringLF("-","-","-");
44 Georg68
 
26.06.23
06:18
https://cloud.mail.ru/public/ha3A/AfT4MWPtE
Синим маркером обведено. Это печатается скриптом.
Зачеркнутое красным печатается, видимо, Фронтолом или ккм. Вопрос остается прежним, где это убрать.)
45 vladmenleo
 
26.06.23
08:44
(44) Вот эта строка скрипта print.printLRStringLF("-","-","-"); печатает ПУНКТИР и именно про него я и спрашиваю, где он на чеке?
46 Злопчинский
 
26.06.23
08:45
(44) читай выше, у тебя тараканы.
Чек с синим и убраным красным будет неправильными. Так как красным будет убрано цена, количество и сумма.
47 Злопчинский
 
26.06.23
08:47
(44) убери то что обведено синим.
Для печати красного в ка, естве наименования товара передавай артикул+наименование.
48 Georg68
 
26.06.23
09:11
Да блин. Я могу в чеке сделать скриптом вторую строку, где будет цена и количество, но тогда у меня будет ТРИ строки на один товар, а то и больше если переносится информация.
Можно было бы подставить артикул в первую строку - я бы её оставил, а остальное убрал.
49 Georg68
 
26.06.23
09:13
Откуда формируется строка, что зачеркнута красным выяснить не могу, уж не говоря о том, что артикул в неё подставить.
50 Злопчинский
 
26.06.23
09:17
А при чем здесь упоминается Фронтол?
ККМ к 1с подключена или автономно работает?
51 big
 
26.06.23
09:37
Уже давай конфиг с Фронтола, а то похоже бестолку тут беседовать ) Лучше глазками поглядеть
52 Georg68
 
26.06.23
11:13
В смысле файлы базы выложить?
Фронтол 5.26
53 big
 
26.06.23
11:16
(52) Лучше саму базу. Чтобы не особо мучаться с конвертацией
54 Georg68
 
26.06.23
13:35
Там больше двух гигов, не реально.
55 Злопчинский
 
26.06.23
13:52
(54) чего больше двух гигов? берешь - делаешь копию папки с базой (если база файловая). удаляешь файлы с расширением *.cdx? заворачиваешь в архив. папка с общим размером в 2 гига ужмется до 150-200 мегабайт. выкладываешь на файлообменник или иным способом пересылаешь заинтересованному лицу
56 Злопчинский
 
26.06.23
13:57
ну и вопрос (50) остался неотвеченным, желательно все-таки ответить...
насколько я помню если не путаю - кассы у тебя работают автономно, обмен списокм товаров файловый.
и если обмен файловый - все что надо посмотреть/подправить как выгружается наименование товара.
а уж как печатается чек - фрронтолом или иным софтом - это уже к "фронтолу" надо идти...
если посмотреть как формируется файл с наименованиями товаров и подправить - это и по удаленке можно, если недолго/просто (а должно быть именно так), стучись
57 big
 
26.06.23
14:00
(54) Она хорошо сжимается. Архивируй main.gdb и выкладывай куда-нибудь
(56) Ты бы хотя бы ветку выше почитал))  Именно об этом уже и идёт речь ))
58 Злопчинский
 
26.06.23
14:18
(57) ну тады ок.
59 Злопчинский
 
26.06.23
14:21
(57) правда непонятно из (0) "но сервисники из Атол послали меня к моей семерке, мол она эту строку печатает, а мы не при делах."
... как 7.7 может ПЕЧАТАТЬ в !!автономную!! кассу? или тут речь должна идти о том, что 7.7 формирует "неправильный" файл обмена?
60 Georg68
 
26.06.23
14:28
61 Злопчинский
 
26.06.23
19:09
(60) какой обработкой в 77 формируется, файл выгрузки для ккм?
62 Харлампий Дымба
 
27.06.23
00:36
Если используется именно обработка из (18), то я бы просто для начала попробовал понять откуда какая строка печатается, может одна из 3го поля (Наименование товара), а вторая из 4го (Наименование для кассы). Проверить так: делаешь выгрузку товаров в кассу, открываешь получившийся txt, правишь первый попавшийся дешевый товар - добавляешь лишний символ в наименование товара, добавляешь другой лишний символ в наименование для кассы, если в этой строке попадётся наименование ещё раз в каком-то поле - добавляешь и туда. Прогружаешь обработанный файл в кассу. Пробиваешь нужный товар. Смотришь на чек. Наименования совпали - скорее всего, проблема в шаблоне чека. Наименование не совпали - проблема в шаблоне чека или где-то есть галочка типа "Выводить пользовательское наименование товара" (в дополнение к "наименование для чека", например). В этом случае может поможет выгрузка пустоты вместо проблемного реквизита. Проблема вряд ли в 1С всё-таки. Скорее в настройках чека.

Но в принципе, тут хорошая компания подобралась, я думаю порешают)

И ещё к (18) - всегда эти обработки с разделителем ";" меня умиляют отсутствием проверки на наличие точки с запятой в наименовании товара и прочих строковых реквизитах. Ну хоть на РазделительСтрок проверяют.
63 Харлампий Дымба
 
27.06.23
00:40
К (3) ну и непонятно - а что мешает делать выгрузку наименования товаров добавляя артикул? Типа
СокрП(СтрЗаменить(СписокТоваров.Наименование, РазделительСтрок, " ")) + " Арт." + СокрЛП(СписокТоваров.Артикул) + ";" +                   // 4  - наименование для кассы
64 Злопчинский
 
27.06.23
01:22
(63) ну так я в (6) еще написал. а с учетом (62) - все должно не сильно долго решаться...
65 big
 
27.06.23
04:29
(62)(63)  Парни, во Фронтоле делается немного не так. Наименование - это наименование, артикул - это артикул. Правится не выгрузка, а скрипт (в самом Фронтоле), который печатает всё, что душе угодно. Правда у ТС Фронтол довольно старенький, но это пофих.
(62) Разделитель ";" это стандарт от Атола, а на символы при выгрузке конечно проверяется. И ещё код номенклатуры приводится в числовому значению, отсекая префиксы и т.п.
66 big
 
27.06.23
05:19
(60) Базу посмотрел - действительно, скрипт отрабатывает немного неверно. Под каждой позицией должна быть строка "-----------------------". Как вариант это сделать fixbase и посмотреть как будет работать.

И похоже, что ККМ печатает по шаблону, который в ней зашит. Тут я не в теме, по идее на ККМ шаблон не должен печатать строки вообще (только шапку и подвал чека), т.к. печать идёт из Фронтола. Надо разобраться какой шаблон загружен в ККМ. Повторюсь - я не полностью в теме, ИМХО надо в ЦТО вопрос задавать.
67 vladmenleo
 
27.06.23
05:49
(66) Наверно надо запустить атоловский редактор шаблонов, считать с кассы и посмотреть что в нем, может кто нарукосуйничал
68 big
 
27.06.23
06:33
(67) Да, Володя, примерно так я это и вижу )
69 serpentt
 
27.06.23
11:19
(68) об Атоловском редакторе тебе писали еще в начале поста, но ты сказал что для тебя это сложно. (
70 big
 
27.06.23
11:50
(69) Хммм... Это точно был я?
71 serpentt
 
27.06.23
14:46
(70) сори , нет конечно, это я топикстартеру писал
72 victuan1
 
28.06.23
06:56
(50) Читай тему с начала!!!
73 victuan1
 
28.06.23
07:01
(62) В обработке всё правильно - это штатная обработка от типовой ТИС, доработанная мною для поддержки маркированных товаров (комментарии //тщи).
Что касается наименования товара - всё как у всех у него в обработке. Проблема именно на стороне Фронтола.