Имя: Пароль:
1C
1С v8
Выгрузка контрагентов из УТ в DBF
0 _stay true_
 
04.10.13
11:30
Здравсвтуйте. Пытаюсь сделать обработку, которая выгружала бы данные по контрагентам из УТ 10.3(типовая) в файл DBF с такой струтктурой полей:

KODKON - код контрагента

KONTRAG - наименование контрагента

KODKL = KODKON.

KLIENT = KONTRAG.



INFSYS - Имя базы

KODUR1 - внутренний код 1С для первого уровня дерева Контрагентов

UR1 - значение первого уровня для конкретного Контрагента

KODUR2 - внутренний код 1С для второго уровня дерева Контрагентов

UR2 - значение второго уровня для конкретного Контрагента

KODUR3 - внутренний код 1С для третьего уровня дерева Контрагентов

UR3 - значение третьего уровня для конкретного Контрагента

KODUR4 - внутренний код 1С для четвертого уровня дерева Контрагентов

UR4 - значение четвертого уровня для конкретного Контрагента

MANAGER - торговый представитель из карточки Контрагента

SUPER - супервайзер из карточки Контрагента



Если у Контрагента нет второго уровня (например, Контрагент находится в первой папке дерева), то в поля KODUR2 и UR2 дублируются значение первого уровня.

Если у Контрагента нет третьего уровня (например, Контрагент находится во второй папке дерева), то в поле KODUR3 и UR3 дублируются значения второго уровня.

То есть если нет уровня, то дублируется значение предыдущего.

Написал процедуру. Результат такой: всё выгружается корректно, кроме дублирования уровней: если есть все 4 уровня - всё корректно, если нет какого-то - выгружаются только те, что есть, а остальные остаются пустыми. Подскажите, где в процедуре я ошибся? Код процедуры:

Процедура ВыгрузкаКонтрагентов()

//для кнопки Контрагенты
ИмяФайла= Каталог+"\Kontr.dbf";
//структура файла DBF
ДБФ = Новый XBase;
ДБФ.Кодировка = КодировкаXBase.OEM;
ДБФ.поля.Добавить("KODKON","S",20); //KODKON - аналог выгрузки продаж код контрагента (в файле последний вариант, который ты присылал)
ДБФ.поля.Добавить("KONTRAG","S",100);//KONTRAG - аналог выгрузки продаж //наименование контрагента
ДБФ.поля.Добавить("KODKL","S",20); //KODKL код контрагента - аналог выгрузки продаж
ДБФ.поля.Добавить("KLIENT","S",100);//KLIENT - аналог выгрузки продаж
ДБФ.поля.Добавить("INFSYS","S",100);//INFSYS наименование инф. базы - аналог выгрузки продаж
ДБФ.поля.Добавить("KODUR1", "S", 100);//KODUR1 - внутренний код 1С для первого уровня дерева Контрагентов
ДБФ.Поля.Добавить("UR1", "S", 100); //UR1 - значение первого уровня для конкретного Контрагента
ДБФ.поля.Добавить("KODUR2", "S", 100);//KODUR2 - внутренний код 1С для второго уровня дерева Контрагентов
ДБФ.Поля.Добавить("UR2", "S", 100);//UR2 - значение второго уровня для конкретного Контрагента
ДБФ.поля.Добавить("KODUR3", "S", 100);//KODUR3 - внутренний код 1С для третьего уровня дерева Контрагентов
ДБФ.Поля.Добавить("UR3", "S", 100);//UR3 - значение третьего уровня для конкретного Контрагента
ДБФ.поля.Добавить("KODUR4", "S", 100);//KODUR4 - внутренний код 1С для четвертого уровня дерева Контрагентов
ДБФ.Поля.Добавить("UR4", "S", 100);//UR4 - значение четвертого уровня для конкретного Контрагента
ДБФ.Поля.Добавить("OTDEL", "S", 100);//OTDEL - отдел (если такой признак есть в 1С)
ДБФ.поля.Добавить("MANAGER", "S", 100);//MANAGER - торговый представитель из карточки Контрагента
ДБФ.поля.Добавить("SUPER","S",100);//SUPER - супервайзер из карточки Контрагента
    
ДБФ.СоздатьФайл(ИмяФайла);
    Если  ДБФ.Открыта() Тогда
        ДБФ.ЗакрытьФайл();
    КонецЕсли;
    ДБФ.ОткрытьФайл(ИмяФайла);
    Если не ДБФ.Открыта() Тогда
        Предупреждение("Невозможно открыть файл " + ИмяФайла);
        Возврат;
    КонецЕсли;
    
    //Запрос
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
                   |    РеализацияТоваровУслугТовары.Ссылка.Контрагент.Код КАК KODKON,
                   |    РеализацияТоваровУслугТовары.Ссылка.Контрагент.Наименование КАК KONTRAG,
                   |    ВЫБОР
                   |        КОГДА РеализацияТоваровУслугТовары.Ссылка.Грузополучатель = ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка)
                   |            ТОГДА РеализацияТоваровУслугТовары.Ссылка.Контрагент.Код
                   |        ИНАЧЕ РеализацияТоваровУслугТовары.Ссылка.Грузополучатель.Код
                   |    КОНЕЦ КАК KODKL,
                   |    ВЫБОР
                   |        КОГДА РеализацияТоваровУслугТовары.Ссылка.Грузополучатель = ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка)
                   |            ТОГДА РеализацияТоваровУслугТовары.Ссылка.Контрагент.Наименование
                   |        ИНАЧЕ РеализацияТоваровУслугТовары.Ссылка.Грузополучатель.Наименование
                   |    КОНЕЦ КАК KLIENT,
                   |    РеализацияТоваровУслугТовары.Ссылка.Контрагент.Супервайзер.Наименование КАК SUPER,
                   |    РеализацияТоваровУслугТовары.Ссылка.Контрагент.ТорговыйПредстовитель.Наименование КАК MANAGER,
                   |    РеализацияТоваровУслугТовары.Ссылка.Контрагент.Родитель КАК UR1,
                   |    ВЫБОР
                   |        КОГДА РеализацияТоваровУслугТовары.Ссылка.Контрагент.Родитель.Родитель = ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка)
                   |            ТОГДА РеализацияТоваровУслугТовары.Ссылка.Контрагент.Родитель
                   |        ИНАЧЕ РеализацияТоваровУслугТовары.Ссылка.Контрагент.Родитель.Родитель
                   |    КОНЕЦ КАК UR2,
                   |    ВЫБОР
                   |        КОГДА РеализацияТоваровУслугТовары.Ссылка.Контрагент.Родитель.Родитель.Родитель = ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка)
                   |            ТОГДА РеализацияТоваровУслугТовары.Ссылка.Контрагент.Родитель.Родитель
                   |        ИНАЧЕ РеализацияТоваровУслугТовары.Ссылка.Контрагент.Родитель.Родитель.Родитель
                   |    КОНЕЦ КАК UR3,
                   |    ВЫБОР
                   |        КОГДА РеализацияТоваровУслугТовары.Ссылка.Контрагент.Родитель.Родитель.Родитель.Родитель = ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка)
                   |            ТОГДА РеализацияТоваровУслугТовары.Ссылка.Контрагент.Родитель.Родитель.Родитель
                   |        ИНАЧЕ РеализацияТоваровУслугТовары.Ссылка.Контрагент.Родитель.Родитель.Родитель.Родитель
                   |    КОНЕЦ КАК UR4,
                   |    РеализацияТоваровУслугТовары.Ссылка.Контрагент.Родитель.Код КАК KODUR1,
                   |    ВЫБОР
                   |        КОГДА РеализацияТоваровУслугТовары.Ссылка.Контрагент.Родитель.Родитель = ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка)
                   |            ТОГДА РеализацияТоваровУслугТовары.Ссылка.Контрагент.Родитель.Код
                   |        ИНАЧЕ РеализацияТоваровУслугТовары.Ссылка.Контрагент.Родитель.Родитель.Код
                   |    КОНЕЦ КАК KODUR2,
                   |    ВЫБОР
                   |        КОГДА РеализацияТоваровУслугТовары.Ссылка.Контрагент.Родитель.Родитель.Родитель = ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка)
                   |            ТОГДА РеализацияТоваровУслугТовары.Ссылка.Контрагент.Родитель.Родитель.Код
                   |        ИНАЧЕ РеализацияТоваровУслугТовары.Ссылка.Контрагент.Родитель.Родитель.Родитель.Код
                   |    КОНЕЦ КАК KODUR3,
                   |    ВЫБОР
                   |        КОГДА РеализацияТоваровУслугТовары.Ссылка.Контрагент.Родитель.Родитель.Родитель.Родитель = ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка)
                   |            ТОГДА РеализацияТоваровУслугТовары.Ссылка.Контрагент.Родитель.Родитель.Родитель.Код
                   |        ИНАЧЕ РеализацияТоваровУслугТовары.Ссылка.Контрагент.Родитель.Родитель.Родитель.Родитель.Код
                   |    КОНЕЦ КАК KODUR4
                   |ИЗ
                   |    Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары
                   |ГДЕ
                   |    РеализацияТоваровУслугТовары.Ссылка.ПометкаУдаления = ЛОЖЬ
                   |    И РеализацияТоваровУслугТовары.Ссылка.Дата МЕЖДУ &НачПериода И &КонПериода
                   |
                   |СГРУППИРОВАТЬ ПО
                   |    РеализацияТоваровУслугТовары.Ссылка.Контрагент.Код,
                   |    РеализацияТоваровУслугТовары.Ссылка.Контрагент.Наименование,
                   |    ВЫБОР
                   |        КОГДА РеализацияТоваровУслугТовары.Ссылка.Грузополучатель = ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка)
                   |            ТОГДА РеализацияТоваровУслугТовары.Ссылка.Контрагент.Код
                   |        ИНАЧЕ РеализацияТоваровУслугТовары.Ссылка.Грузополучатель.Код
                   |    КОНЕЦ,
                   |    ВЫБОР
                   |        КОГДА РеализацияТоваровУслугТовары.Ссылка.Грузополучатель = ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка)
                   |            ТОГДА РеализацияТоваровУслугТовары.Ссылка.Контрагент.Наименование
                   |        ИНАЧЕ РеализацияТоваровУслугТовары.Ссылка.Грузополучатель.Наименование
                   |    КОНЕЦ,
                   |    РеализацияТоваровУслугТовары.Ссылка.Контрагент.Супервайзер.Наименование,
                   |    РеализацияТоваровУслугТовары.Ссылка.Контрагент.ТорговыйПредстовитель.Наименование,
                   |    РеализацияТоваровУслугТовары.Ссылка.Контрагент.Родитель,
                   |    ВЫБОР
                   |        КОГДА РеализацияТоваровУслугТовары.Ссылка.Контрагент.Родитель.Родитель = ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка)
                   |            ТОГДА РеализацияТоваровУслугТовары.Ссылка.Контрагент.Родитель
                   |        ИНАЧЕ РеализацияТоваровУслугТовары.Ссылка.Контрагент.Родитель.Родитель
                   |    КОНЕЦ,
                   |    ВЫБОР
                   |        КОГДА РеализацияТоваровУслугТовары.Ссылка.Контрагент.Родитель.Родитель.Родитель = ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка)
                   |            ТОГДА РеализацияТоваровУслугТовары.Ссылка.Контрагент.Родитель.Родитель
                   |        ИНАЧЕ РеализацияТоваровУслугТовары.Ссылка.Контрагент.Родитель.Родитель.Родитель
                   |    КОНЕЦ,
                   |    ВЫБОР
                   |        КОГДА РеализацияТоваровУслугТовары.Ссылка.Контрагент.Родитель.Родитель.Родитель.Родитель = ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка)
                   |            ТОГДА РеализацияТоваровУслугТовары.Ссылка.Контрагент.Родитель.Родитель.Родитель
                   |        ИНАЧЕ РеализацияТоваровУслугТовары.Ссылка.Контрагент.Родитель.Родитель.Родитель.Родитель
                   |    КОНЕЦ,
                   |    ВЫБОР
                   |        КОГДА РеализацияТоваровУслугТовары.Ссылка.Контрагент.Родитель.Родитель.Родитель.Родитель = ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка)
                   |            ТОГДА РеализацияТоваровУслугТовары.Ссылка.Контрагент.Родитель.Родитель.Родитель.Код
                   |        ИНАЧЕ РеализацияТоваровУслугТовары.Ссылка.Контрагент.Родитель.Родитель.Родитель.Родитель.Код
                   |    КОНЕЦ,
                   |    ВЫБОР
                   |        КОГДА РеализацияТоваровУслугТовары.Ссылка.Контрагент.Родитель.Родитель.Родитель.Родитель = ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка)
                   |            ТОГДА РеализацияТоваровУслугТовары.Ссылка.Контрагент.Родитель.Родитель.Родитель.Код
                   |        ИНАЧЕ РеализацияТоваровУслугТовары.Ссылка.Контрагент.Родитель.Родитель.Родитель.Родитель.Код
                   |    КОНЕЦ,
                   |    РеализацияТоваровУслугТовары.Ссылка.Контрагент.Родитель.Код,
                   |    ВЫБОР
                   |        КОГДА РеализацияТоваровУслугТовары.Ссылка.Контрагент.Родитель.Родитель = ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка)
                   |            ТОГДА РеализацияТоваровУслугТовары.Ссылка.Контрагент.Родитель.Код
                   |        ИНАЧЕ РеализацияТоваровУслугТовары.Ссылка.Контрагент.Родитель.Родитель.Код
                   |    КОНЕЦ,
                   |    ВЫБОР
                   |        КОГДА РеализацияТоваровУслугТовары.Ссылка.Контрагент.Родитель.Родитель.Родитель = ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка)
                   |            ТОГДА РеализацияТоваровУслугТовары.Ссылка.Контрагент.Родитель.Родитель.Код
                   |        ИНАЧЕ РеализацияТоваровУслугТовары.Ссылка.Контрагент.Родитель.Родитель.Родитель.Код
                   |    КОНЕЦ";    
    
                  
    //установка параметров запроса (НачПериода и КонПериода в данном примере должны быть непустыми)
    Запрос.УстановитьПараметр("НачПериода",НачалоДня(НачПериода));
    Запрос.УстановитьПараметр("КонПериода",КонецДня(КонПериода));
    Результат = Запрос.Выполнить();
    Выборка = Результат.Выбрать();
    
    СтрокВыгрузки = Выборка.Количество();
    Пока Выборка.Следующий() Цикл
        ДБФ.Добавить();
        
        ДБФ.KODKON       = Строка(Выборка.KODKON);
        ДБФ.KONTRAG        = Строка(Выборка.KONTRAG);
         ДБФ.KODKL       = Строка(Выборка.KODKL);
        ДБФ.KLIENT        = Строка(Выборка.KLIENT);
        ДБФ.KODUR1      = Строка(Выборка.KODUR1);
        ДБФ.UR1         = Строка(Выборка.UR1);
        ДБФ.KODUR2      = Строка(Выборка.KODUR2);
        ДБФ.UR2         = Строка(Выборка.UR2);
        ДБФ.KODUR3      = Строка(Выборка.KODUR3);
        ДБФ.UR3         = Строка(Выборка.UR3);
        ДБФ.KODUR4      = Строка(Выборка.KODUR4);
        ДБФ.UR4         = Строка(Выборка.UR4);
        ДБФ.SUPER       = Выборка.SUPER;
        ДБФ.MANAGER     = Строка(Выборка.MANAGER);
        ДБФ.INFSYS        = "Таир";
        
    
        Клиент = Справочники.Контрагенты.НайтиПоКоду(Выборка.KODKL);
        
        ДБФ.MANAGER   = ПолучитьРодителяКлиентаПоУровню(Клиент,2);
        ДБФ.SUPER     = Выборка.SUPER;

//Завершающее сообщение
ДБФ.Записать();

//СтрокВыгружено=СтрокВыгружено+1;
Индикатор1 = Окр(СтрокВыгружено/СтрокВыгрузки*100,0);
КонецЦикла;
Индикатор1 = 0;

ДБФ.ЗакрытьФайл();
Предупреждение("Выгрузка в файл "+ИмяФайла+" завершена");

КонецПроцедуры
1 _stay true_
 
04.10.13
13:19
Разобрался. Оказывается, "пустые" уровни - нифига не пустые, а имеют значение "Null". Ща впихну туда ещё проверку на нулл)))
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой