|
Выгрузка контрагентов из УТ в 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". Ща впихну туда ещё проверку на нулл)))
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |