Имя: Пароль:
1C
1С v8
УТ 11.4. выгрузка в ККМ офлайн - пустой файл выгрузки
0 Misty
 
07.11.19
05:17
Добрый день. УТ 11.4.8.73. Настроила ККМ офлайн. Подключаемое оборудование - Офлайн оборудование, ККМ, АТОЛ:ККМ Офлайн. Формат обмена - фронтол 5.Правило обмена - указала склад, остатки, цены. В самом правиле если посмотреть список товаров, то они отображаются - и цена и ШК. В самом обмене тоже показывает список товаров, жму выгрузить - появляется сообщение, что выполняется выгрузка данных в ККМ офлайн. Потом -данные успешно выгружены. Создаются в папке обмена два файла - товарный и флаг выгрузки. Но сам файл с базой товаров - пустой. Там только три строчки : ##@@&&
#
$$$REPLACEQUANTITY
Подскажите, в чем дело? Спасибо
1 ДенисЧ
 
07.11.19
05:22
В отладчике, вестимо...
2 Misty
 
07.11.19
08:41
Сначала выполняется команда КассаТоварыВыгрузить из обработки выгрузки

&НаКлиенте
Процедура КассыТоварыВыгрузить(Команда)
    
    ТекущиеДанные = Элементы.КассыККМ.ТекущиеДанные;
    Если ТекущиеДанные <> Неопределено И ЗначениеЗаполнено(ТекущиеДанные.ПравилоОбмена) Тогда
        ОписаниеОповещения = Новый ОписаниеОповещения("ПослеВыполненияОбмена", ЭтотОбъект);
        МенеджерОфлайнОборудованияКлиент.НачатьВыгрузкуДанныхНаККМ(ТекущиеДанные.ПодключаемоеОборудование, УникальныйИдентификатор, ОписаниеОповещения);
    Иначе
        ПоказатьПредупреждение(Неопределено, НСтр("ru = 'Команда не может быть выполнена для указанного объекта'"));
    КонецЕсли;
    
КонецПроцедуры

Потом
Процедура НачатьВыгрузкуДанныхНаККМ(ИдентификаторУстройства,
    УникальныйИдентификатор, ОповещениеПриЗавершении, ОтображатьСообщения = Истина) Экспорт
    
    НаборВыгружаемыхДанных = Новый Структура;
    НаборВыгружаемыхДанных.Вставить("Настройки", Истина);
    НаборВыгружаемыхДанных.Вставить("ПрайсЛист", Истина);
    НаборВыгружаемыхДанных.Вставить("Заказы",     Истина);
    НаборВыгружаемыхДанных.Вставить("ПолныйПрайсЛист", Ложь);
    
    Контекст = Новый Структура;
    Контекст.Вставить("СледующееОповещение"     , ОповещениеПриЗавершении);
    Контекст.Вставить("УникальныйИдентификатор" , УникальныйИдентификатор);
    Контекст.Вставить("ОтображатьСообщения"     , ОтображатьСообщения);
    Контекст.Вставить("НаборВыгружаемыхДанных"  , НаборВыгружаемыхДанных);
    Контекст.Вставить("Команда", "ВыгрузитьДанные");
    
Так как команда "ВыгрузитьДанные", то идет по ветке выгрузка данных а не выгрузка товаров.


Процедура НачатьВыполнениеКоманды(ОповещениеПриЗавершении, Команда, ВходныеПараметры = Неопределено, ОбъектДрайвера, Параметры, ПараметрыПодключения) Экспорт
    
    ВыходныеПараметры = Новый Массив();
    
    // Выгрузка товаров в ККМ Offline.
    Если Команда = "ВыгрузитьТовары" Тогда
        Товары                = ВходныеПараметры[0];
        ЧастичнаяВыгрузка    = ВходныеПараметры[1];
        РасширеннаяВыгрузка    = ВходныеПараметры[2];
        НачатьВыгрузкуТоваров(ОповещениеПриЗавершении, Параметры, Товары, ЧастичнаяВыгрузка, ВыходныеПараметры, РасширеннаяВыгрузка);
        
    // Выгрузка данных
    ИначеЕсли Команда = "ВыгрузитьДанные" Тогда
        
        Товары                = ВходныеПараметры.ДанныеДляВыгрузки.ПрайсЛист;
        ЧастичнаяВыгрузка    = НЕ ВходныеПараметры.ДанныеДляВыгрузки.ПрайсЛист.ПолнаяВыгрузка;
        РасширеннаяВыгрузка    = Истина;
        НачатьВыгрузкуТоваров(ОповещениеПриЗавершении, Параметры, Товары, ЧастичнаяВыгрузка, ВыходныеПараметры, РасширеннаяВыгрузка);
        
И опять тот же вопрос - почему???
3 ДенисЧ
 
07.11.19
08:54
А НачатьВыгрузкуТоваров() что говорит?
4 Misty
 
07.11.19
09:02
Процедура ВыгрузкаТоваровЗавершение(Результат, ДополнительныеПараметры) Экспорт
    ВыходныеПараметры = ДополнительныеПараметры.ВыходныеПараметры;
    
    Если Результат Тогда
        
        Разделитель = ПолучитьРазделитель();
        ЧастичнаяВыгрузка = ДополнительныеПараметры.ЧастичнаяВыгрузка;
        РасширеннаяВыгрузка = ДополнительныеПараметры.РасширеннаяВыгрузка;
        Товары = ДополнительныеПараметры.Товары;
        ИмяФайла = ДополнительныеПараметры.ИмяФайла;
        ИмяФайлаФлага = ДополнительныеПараметры.ИмяФайлаФлага;
        ФорматОбмена = ДополнительныеПараметры.ФорматОбмена;
        
        Файл = Новый ТекстовыйДокумент();
        
        Результат = СформироватьФайлТоваров(Файл, РасширеннаяВыгрузка, ЧастичнаяВыгрузка, ФорматОбмена, Разделитель, Товары, ВыходныеПараметры);


Функция СформироватьФайлТоваров

Здесь
    Для Каждого Товар Из Товары.Товары Цикл

эта таблица пустая
5 ДенисЧ
 
07.11.19
09:08
"ДенисЧ ▶ НачатьВыгрузкуТоваров() что говорит?"
" Misty ▶ Процедура ВыгрузкаТоваровЗавершение"

https://sun9-29.userapi.com/c1758/u1963376/69082462/x_d6acd088.jpg
6 Misty
 
07.11.19
09:11
Процедура НачатьВыгрузкуТоваров(ОповещениеПриЗавершении, Параметры, Товары, ЧастичнаяВыгрузка, ВыходныеПараметры, РасширеннаяВыгрузка)
    
    ДополнительныеПараметры = Новый Структура;
    ДополнительныеПараметры.Вставить("ОповещениеПриЗавершении", ОповещениеПриЗавершении);
    ДополнительныеПараметры.Вставить("ВыходныеПараметры", ВыходныеПараметры);
    ДополнительныеПараметры.Вставить("ИмяФайла", Параметры.БазаТоваров);
    ДополнительныеПараметры.Вставить("ИмяФайлаФлага", Параметры.ФлагВыгрузки);
    ДополнительныеПараметры.Вставить("Товары", Товары);
    ДополнительныеПараметры.Вставить("РасширеннаяВыгрузка", РасширеннаяВыгрузка);
    ДополнительныеПараметры.Вставить("ЧастичнаяВыгрузка", ЧастичнаяВыгрузка);
    
    Налоги = ОфлайнОборудованиеАтолККМВызовСервера.ПолучитьНомераНалоговНаККМПоУмолчанию();
    
    Если Параметры.Свойство("НомерНалога0") И ЗначениеЗаполнено(Параметры.НомерНалога0) Тогда
        Налоги.НомерНалога0 = Параметры.НомерНалога0;
    КонецЕсли;
    
    Если Параметры.Свойство("НомерНалога10") И ЗначениеЗаполнено(Параметры.НомерНалога10) Тогда
        Налоги.НомерНалога10 = Параметры.НомерНалога10;
    КонецЕсли;
    
    Если Параметры.Свойство("НомерНалога18") И ЗначениеЗаполнено(Параметры.НомерНалога18) Тогда
        Налоги.НомерНалога18 = Параметры.НомерНалога18;
    КонецЕсли;
    
    Если Параметры.Свойство("НомерНалогаБезНДС") И ЗначениеЗаполнено(Параметры.НомерНалогаБезНДС) Тогда
        Налоги.НомерНалогаБезНДС = Параметры.НомерНалогаБезНДС;
    КонецЕсли;
    
    Если Параметры.Свойство("НомерНалога20") И ЗначениеЗаполнено(Параметры.НомерНалога20) Тогда
        Налоги.НомерНалога20 = Параметры.НомерНалога20;
    КонецЕсли;
    
    ДополнительныеПараметры.Вставить("Налоги", Налоги);
    
    Если Параметры.Свойство("ФорматОбмена") Тогда
        ДополнительныеПараметры.Вставить("ФорматОбмена", Параметры.ФорматОбмена);
    Иначе
        ДополнительныеПараметры.Вставить("ФорматОбмена", 0);
    КонецЕсли;
    
    ОписаниеОповещения = Новый ОписаниеОповещения("ВыгрузкаТоваровЗавершение", ЭтотОбъект, ДополнительныеПараметры);
7 ДенисЧ
 
07.11.19
09:32
(6) Истинная женщина... Начала, но не показала...
Ты же заметила, что привела всего маленький кусочек этой процедуры?
8 Misty
 
07.11.19
09:34
Процедура НачатьВыгрузкуТоваров(ОповещениеПриЗавершении, Параметры, Товары, ЧастичнаяВыгрузка, ВыходныеПараметры, РасширеннаяВыгрузка)
    
    ДополнительныеПараметры = Новый Структура;
    ДополнительныеПараметры.Вставить("ОповещениеПриЗавершении", ОповещениеПриЗавершении);
    ДополнительныеПараметры.Вставить("ВыходныеПараметры", ВыходныеПараметры);
    ДополнительныеПараметры.Вставить("ИмяФайла", Параметры.БазаТоваров);
    ДополнительныеПараметры.Вставить("ИмяФайлаФлага", Параметры.ФлагВыгрузки);
    ДополнительныеПараметры.Вставить("Товары", Товары);
    ДополнительныеПараметры.Вставить("РасширеннаяВыгрузка", РасширеннаяВыгрузка);
    ДополнительныеПараметры.Вставить("ЧастичнаяВыгрузка", ЧастичнаяВыгрузка);
    
    Налоги = ОфлайнОборудованиеАтолККМВызовСервера.ПолучитьНомераНалоговНаККМПоУмолчанию();
    
    Если Параметры.Свойство("НомерНалога0") И ЗначениеЗаполнено(Параметры.НомерНалога0) Тогда
        Налоги.НомерНалога0 = Параметры.НомерНалога0;
    КонецЕсли;
    
    Если Параметры.Свойство("НомерНалога10") И ЗначениеЗаполнено(Параметры.НомерНалога10) Тогда
        Налоги.НомерНалога10 = Параметры.НомерНалога10;
    КонецЕсли;
    
    Если Параметры.Свойство("НомерНалога18") И ЗначениеЗаполнено(Параметры.НомерНалога18) Тогда
        Налоги.НомерНалога18 = Параметры.НомерНалога18;
    КонецЕсли;
    
    Если Параметры.Свойство("НомерНалогаБезНДС") И ЗначениеЗаполнено(Параметры.НомерНалогаБезНДС) Тогда
        Налоги.НомерНалогаБезНДС = Параметры.НомерНалогаБезНДС;
    КонецЕсли;
    
    Если Параметры.Свойство("НомерНалога20") И ЗначениеЗаполнено(Параметры.НомерНалога20) Тогда
        Налоги.НомерНалога20 = Параметры.НомерНалога20;
    КонецЕсли;
    
    ДополнительныеПараметры.Вставить("Налоги", Налоги);
    
    Если Параметры.Свойство("ФорматОбмена") Тогда
        ДополнительныеПараметры.Вставить("ФорматОбмена", Параметры.ФорматОбмена);
    Иначе
        ДополнительныеПараметры.Вставить("ФорматОбмена", 0);
    КонецЕсли;
    
    ОписаниеОповещения = Новый ОписаниеОповещения("ВыгрузкаТоваровЗавершение", ЭтотОбъект, ДополнительныеПараметры);
    
    Если ЧастичнаяВыгрузка Тогда
        НачатьПроверкуОбработанностиФайла(ОписаниеОповещения, Параметры.БазаТоваров); // Проверяем обработанность файла.
    Иначе
        ВыполнитьОбработкуОповещения(ОписаниеОповещения, Истина); // Продолжаем выгрузку.
    КонецЕсли;
    
КонецПроцедуры

Процедура ВыгрузкаТоваровЗавершение(Результат, ДополнительныеПараметры) Экспорт
    
    ВыходныеПараметры = ДополнительныеПараметры.ВыходныеПараметры;
    
    Если Результат Тогда
        
        Разделитель = ПолучитьРазделитель();
        ЧастичнаяВыгрузка = ДополнительныеПараметры.ЧастичнаяВыгрузка;
        РасширеннаяВыгрузка = ДополнительныеПараметры.РасширеннаяВыгрузка;
        Товары = ДополнительныеПараметры.Товары;
        ИмяФайла = ДополнительныеПараметры.ИмяФайла;
        ИмяФайлаФлага = ДополнительныеПараметры.ИмяФайлаФлага;
        ФорматОбмена = ДополнительныеПараметры.ФорматОбмена;
        
        Файл = Новый ТекстовыйДокумент();
        
        Результат = СформироватьФайлТоваров(Файл, РасширеннаяВыгрузка, ЧастичнаяВыгрузка, ФорматОбмена, Разделитель, Товары, ВыходныеПараметры);
        
        Если (ФорматОбмена < 4 ИЛИ ФорматОбмена = 7) И НЕ ЧастичнаяВыгрузка Тогда
            СформироватьСтавкиНДС(Файл, ДополнительныеПараметры.Налоги);
        КонецЕсли;
        
        Если Результат Тогда
            
            Попытка
                
                Файл.Записать(ИмяФайла, "windows-1251");
                
                Если Не ПустаяСтрока(ИмяФайлаФлага) Тогда
                    Файл.Очистить();
                    Файл.Записать(ИмяФайлаФлага, "windows-1251");
                КонецЕсли;
                
            Исключение
                
                ВыходныеПараметры.Добавить(999);
                ОписаниеОшибки = НСтр("ru='Не удалось записать файл товаров по адресу: %Адрес%'");
                ВыходныеПараметры.Добавить(СтрЗаменить(ОписаниеОшибки, "%Адрес%", ИмяФайла));
                Результат = Ложь;
                
            КонецПопытки;
            
        КонецЕсли;
        
        РезультатВыполнения = Новый Структура("Результат, ВыходныеПараметры", Результат, ВыходныеПараметры);
        ВыполнитьОбработкуОповещения(ДополнительныеПараметры.ОповещениеПриЗавершении, РезультатВыполнения);
        
    Иначе
        РезультатВыполнения = Новый Структура("Результат, ВыходныеПараметры", Ложь, ВыходныеПараметры);
        ВыполнитьОбработкуОповещения(ДополнительныеПараметры.ОповещениеПриЗавершении, РезультатВыполнения);
    КонецЕсли;
    
КонецПроцедуры

#КонецОбласти
9 Misty
 
07.11.19
09:35
в Процедуре ВыгрузкаТоваровЗавершение файл с товарами уже пустой
10 ДенисЧ
 
07.11.19
09:35
Пошагово будем? Я вместо отладчика?

Результат = СформироватьФайлТоваров(Файл, РасширеннаяВыгрузка, ЧастичнаяВыгрузка, ФорматОбмена, Разделитель, Товары, ВыходныеПараметры);

Что тут?
11 Misty
 
07.11.19
09:43
Результат = истина

Функция СформироватьФайлТоваров(Файл, РасширеннаяВыгрузка, ЧастичнаяВыгрузка, ФорматОбмена, Разделитель, Товары, ВыходныеПараметры)
    
    Результат = Истина;
    
    Файл.ДобавитьСтроку("##@@&&");
    Файл.ДобавитьСтроку("#");
    
    Если РасширеннаяВыгрузка Тогда
        
        Если ЧастичнаяВыгрузка Тогда
            Файл.ДобавитьСтроку("$$$REPLACEQUANTITY");
        Иначе
            
            Файл.ДобавитьСтроку("$$$DELETEALLWARES");
            Файл.ДобавитьСтроку("$$$DELETEALLBARCODES");
            Файл.ДобавитьСтроку("$$$DELETEALLASPECTREMAINS");
            Файл.ДобавитьСтроку("$$$ADDQUANTITY");
            
        КонецЕсли;
        
        Для Каждого ТекГруппа Из Товары.ГруппыТоваров Цикл
            
            ДанныеДляЗаполнения = Новый Структура;
            ДанныеДляЗаполнения.Вставить("Код", Формат(ТекГруппа.Код, "ЧН=0; ЧГ=0"));
            ДанныеДляЗаполнения.Вставить("Наименование", ПодготовитьСтроку(ТекГруппа.Наименование));
            ДанныеДляЗаполнения.Вставить("КодРодительскойГруппы", Формат(ТекГруппа.КодГруппы, "ЧН=0; ЧГ=0"));
            
            ДобавитьСтрокуВФайл(Файл, Разделитель, ДанныеДляЗаполнения, ФорматОбмена, Истина);
            
        КонецЦикла;
            
    Иначе
        
        Если ЧастичнаяВыгрузка Тогда
            Файл.ДобавитьСтроку("$$$REPLACEQUANTITY");
        Иначе
            Файл.ДобавитьСтроку("$$$DELETEALLWARES");
            Файл.ДобавитьСтроку("$$$DELETEALLBARCODES");
            Файл.ДобавитьСтроку("$$$DELETEALLASPECTREMAINS");
            Файл.ДобавитьСтроку("$$$ADDQUANTITY");
        КонецЕсли;
        
    КонецЕсли;
    
    Для Каждого Товар Из Товары.Товары Цикл
        
        Если Результат Тогда
            
            Параметры = Новый Структура;
            
            Параметры.Вставить("Разделитель", Разделитель);
            Параметры.Вставить("Уровень", "Номенклатура");
            Параметры.Вставить("РасширеннаяВыгрузка", РасширеннаяВыгрузка);
            Параметры.Вставить("ФорматОбмена", ФорматОбмена);
            Параметры.Вставить("Источник", Товар);
            
            Если ЗначениеЗаполнено(Товар.КодЕдиницыИзмерения) Тогда
                
                Для Каждого ЕИ Из Товары.ЕдиницыИзмерения Цикл
                    
                    Если ЕИ.Код = Товар.КодЕдиницыИзмерения Тогда
                        Параметры.Вставить("БазоваяЕИ", ЕИ.Наименование);
                        Прервать;
                    КонецЕсли;
                    
                КонецЦикла;
            Иначе
                Параметры.Вставить("БазоваяЕИ", "");
            КонецЕсли;
            
            ДополнитьФайл(Результат, Файл, ВыходныеПараметры, Параметры);
            
        Иначе
            Прервать;
        КонецЕсли;
        
    КонецЦикла;
    
    Возврат Результат;
    
КонецФункции
12 Misty
 
07.11.19
09:43
таблица товаров пустая
13 ДенисЧ
 
07.11.19
09:44
Продолжим пошаговое выполненение

строка
Для Каждого Товар Из Товары.Товары Цикл

Что в ТОвары.Товары7
14 Misty
 
07.11.19
09:45
ничего, отладчик в этот цикл не попадает
15 ДенисЧ
 
07.11.19
09:48
(14) То есть Товары.Товары - пустая? Так а что выгружать-то будем? )))
Ищи в начале, где она заполняется... Вероятно, есть некая ТЗ на форме, и рядом кнопка заполнить...
16 Misty
 
07.11.19
09:49
Если Команда = "ВыгрузитьТовары" Тогда
        Товары                = ВходныеПараметры[0];
        ЧастичнаяВыгрузка    = ВходныеПараметры[1];
        РасширеннаяВыгрузка    = ВходныеПараметры[2];
        НачатьВыгрузкуТоваров(ОповещениеПриЗавершении, Параметры, Товары, ЧастичнаяВыгрузка, ВыходныеПараметры, РасширеннаяВыгрузка);
        
    // Выгрузка данных

    ИначеЕсли Команда = "ВыгрузитьДанные" Тогда
        
        Товары                = ВходныеПараметры.ДанныеДляВыгрузки.ПрайсЛист;
        ЧастичнаяВыгрузка    = НЕ ВходныеПараметры.ДанныеДляВыгрузки.ПрайсЛист.ПолнаяВыгрузка;
        РасширеннаяВыгрузка    = Истина;
        НачатьВыгрузкуТоваров(ОповещениеПриЗавершении, Параметры, Товары, ЧастичнаяВыгрузка, ВыходныеПараметры, РасширеннаяВыгрузка);


вот здесь я так понимаю заполняется, только идет по ветке выгрузить данные а не выгрузить товары
17 Misty
 
07.11.19
09:51
и мне так кажется что это косяк 1с. Вот думала может кто сталкивался с таким или все таки это где то в настройках что то я не указала