Создание XML файла выгрузки Работников организации с Группировкой по Подразделению Нужен XML файл выгрузки данных вида(выделю как код 8-рки, т.к. выделение xlm кода нет):
Код 1C v 8.х <?xml version="1.0" encoding="UTF-8"?>
<orgstructure>
<department dep_id="7ebb913c-e9c6-11dc-a4f2-0017311416a1" dep_name="генеральный директор" dep_code="П100">
<orgposition user_id="ba68bb79-c377-11dc-a4ca-0017311416a1" user_position_id="ba68bb78-c377-11dc-a4ca-0017311416a1" user_position="генеральный директор" user_is_active="1"/>
</department>
<department dep_id="8132fe4a-0789-11dd-887b-001d60f0496c" dep_name="Бухгалтерия" dep_code="П200">
<orgposition user_id="21448456-15b0-11dd-80a1-00145e3710ab" user_position_id="3c948267-df80-11dc-a4e8-0017311416a1" user_position="специалист" user_is_active="0"/>
<orgposition user_id="d299614a-df9d-11dc-a4e8-0017311416a1" user_position_id="53082fda-edf4-11dd-af3e-00145e3710ab" user_position="заместитель главного бухгалтера" user_is_active="1"/>
<orgposition user_id="8132fe6c-0789-11dd-887b-001d60f0496c" user_position_id="d299614d-df9d-11dc-a4e8-0017311416a1" user_position="секретарь" user_is_active="1"/>
<orgposition user_id="2e81c20e-f190-11dc-a4fb-0017311416a1" user_position_id="2e81c20d-f190-11dc-a4fb-0017311416a1" user_position="бухгалтер" user_is_active="0"/>
<orgposition user_id="ba68bb7e-c377-11dc-a4ca-0017311416a1" user_position_id="53082fd9-edf4-11dd-af3e-00145e3710ab" user_position="главный бухгалтер" user_is_active="1"/>
<orgposition user_id="9893f85a-0403-11df-a872-00215aa545b4" user_position_id="53073825-e5e6-11dc-a4ef-0017311416a1" user_position="делопроизводитель" user_is_active="1"/>
</department>
<department dep_id="6bb91f72-e077-11dd-bf56-00145e3710ab" dep_name="Отдел Продаж" dep_code="П300">
<department dep_id="6bb91f73-e077-11dd-bf56-00145e3710ab" dep_name="Клиентский сервис" dep_code="П310">
<orgposition user_id="02ad5122-e231-11dd-bf56-00145e3710ab" user_position_id="6bb91f6c-e077-11dd-bf56-00145e3710ab" user_position="Специалист" user_is_active="1"/>
</department>
<department dep_id="6bb91f74-e077-11dd-bf56-00145e3710ab" dep_name="Менеджеры" dep_code="П320">
<orgposition user_id="02584921-с235-11dd-bf56-00145e3710ab" user_position_id="7bb98f6c-e577-11dd-bf56-00145e3710ab" user_position="Менеджер" user_is_active="1"/>
</department>
</department>
</orgstructure>
Вот код:
Код 1C v 8.х Процедура ОбойтиУровеньДерева(Строки, Запись)
Для каждого Строка из Строки Цикл
Если ПустаяСтрока(Строка(Строка.Сотрудник)) Тогда
Запись.ЗаписатьНачалоЭлемента("department");
Запись.ЗаписатьАтрибут("dep_id", Строка(Строка.ПодразделениеОрганизации.УникальныйИдентификатор()));
Запись.ЗаписатьАтрибут("dep_name", Строка(Строка.ПодразделениеОрганизации));
Запись.ЗаписатьАтрибут("dep_code", СокрЛП(Строка(Строка.ПодразделениеОрганизации.Код)));
ОбойтиУровеньДерева(Строка.Строки, Запись);
Запись.ЗаписатьКонецЭлемента();
Иначе
Запись.ЗаписатьНачалоЭлемента("orgposition");
Запись.ЗаписатьАтрибут("user_id", Строка(Строка.Сотрудник.УникальныйИдентификатор()));
Запись.ЗаписатьАтрибут("user_position_id", Строка(Строка.Должность.УникальныйИдентификатор()));
Запись.ЗаписатьАтрибут("user_position", Строка(Строка.Должность));
Запись.ЗаписатьАтрибут("user_is_active", ?(Строка.ПричинаИзмененияСостояния = Перечисления.ПричиныИзмененияСостояния.Увольнение,"0","1"));
ОбойтиУровеньДерева(Строка.Строки, Запись);
Запись.ЗаписатьКонецЭлемента();
КонецЕсли
КонецЦикла;
КонецПроцедуры
Процедура КнопкаВыгрузитьНажатие(Кнопка)
ПутьКФайлу = "D:\Vigruzka_"+Формат(ТекущаяДата(),"ДФ=YYYYMMdd")+".xml";
Запись = Новый ЗаписьXML;
Запись.ОткрытьФайл(ПутьКФайлу, "UTF-8");
Запись.ЗаписатьОбъявлениеXML(); //<?xml version="1.0" encoding="UTF-8"?>
Запись.ЗаписатьНачалоЭлемента("orgstructure");
Запрос = Новый Запрос;
Запрос.Текст="
|ВЫБРАТЬ
| РаботникиОрганизацийСрезПоследних.Сотрудник,
| РаботникиОрганизацийСрезПоследних.ПодразделениеОрганизации КАК ПодразделениеОрганизации,
| РаботникиОрганизацийСрезПоследних.Должность,
| РаботникиОрганизацийСрезПоследних.Период,
| РаботникиОрганизацийСрезПоследних.ПодразделениеОрганизации.Порядок КАК ПодразделениеОрганизацииПорядок,
| РаботникиОрганизацийСрезПоследних.ПричинаИзмененияСостояния
|ИЗ
| РегистрСведений.РаботникиОрганизаций.СрезПоследних(&dateper, ) КАК РаботникиОрганизацийСрезПоследних
|
|УПОРЯДОЧИТЬ ПО
| ПодразделениеОрганизацииПорядок
|ИТОГИ ПО
| ПодразделениеОрганизации ИЕРАРХИЯ
|АВТОУПОРЯДОЧИВАНИЕ
|";
Запрос.УстановитьПараметр("dateper", ТекущаяДата());
Результат = Запрос.Выполнить();
Дерево = Результат.Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);
ОбойтиУровеньДерева(Дерево.Строки, Запись);
Запись.ЗаписатьКонецЭлемента();
Запись.Закрыть();
КонецПроцедуры
Категория:
XML, DBF, TXT, CSV Как обойти, перебрать дерево значений? Код 1C v 8.х Процедура ОбойтиУровеньДерева(Строки)
Для каждого Строка из Строки Цикл
//что-то делаем со строкой, например:
Сообщить(Строка.ИмяСуществующегоВСтрокеРеквизита);
ОбойтиУровеньДерева(Строка.Строки);
КонецЦикла;
КонецПроцедуры
//Вызываем перебор так:
Дерево = Новый ДеревоЗначений;
Запрос = Новый Запрос;
Запрос.Текст="ВЫБРАТЬ
|Ном.Ссылка как ссылка
|ИЗ
| Справочник.Номенклатура КАК Ном
|ИТОГИ ПО
|Ном.Ссылка ТОЛЬКО ИЕРАРХИЯ";
Дерево = Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);
// перебор дерева значений
ОбойтиУровеньДерева(Дерево.Строки);
Категория:
Работа с Деревом Значений Выгрузить результат запроса в Дерево Значений, Дерево Значений на форме Код 1C v 8.х // Вывод результата запроса в Табличное Поле - Дерево значений
Запрос=Новый Запрос;
Запрос.Текст="ВЫБРАТЬ
| ВзаиморасчетыСРаботникамиОрганизацийОстатки.ПериодВзаиморасчетов КАК ЗаМесяц,
| ВзаиморасчетыСРаботникамиОрганизацийОстатки.Физлицо КАК Работник,
| ВзаиморасчетыСРаботникамиОрганизацийОстатки.СуммаВзаиморасчетовОстаток КАК Остаток
|ИЗ
| РегистрНакопления.ВзаиморасчетыСРаботникамиОрганизаций.Остатки(, ) КАК ВзаиморасчетыСРаботникамиОрганизацийОстатки
|ГДЕ
| ВзаиморасчетыСРаботникамиОрганизацийОстатки.СуммаВзаиморасчетовОстаток < 5
| И ВзаиморасчетыСРаботникамиОрганизацийОстатки.ПериодВзаиморасчетов > ДАТАВРЕМЯ(2011, 1, 1, 0, 0, 0)
|
|УПОРЯДОЧИТЬ ПО
| ЗаМесяц,
| Работник
|ИТОГИ
| СУММА(Остаток)
|ПО
| ЗаМесяц
|АВТОУПОРЯДОЧИВАНИЕ";
//Выгрузим результат запроса в Табличное Поле с Типом значения Дерево значений
ЭлементыФормы.Долги.Значение = Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);
//Создадим колонки для вывода данных
ЭлементыФормы.Долги.СоздатьКолонки();
//Настроим ширину колонок табличного поля
ЭлементыФормы.Долги.Колонки.Работник.Ширина=23;
ЭлементыФормы.Долги.Колонки.ЗаМесяц.Ширина=17;
ЭлементыФормы.Долги.Колонки.Остаток.Ширина=11;
еще пример:
Код 1C v 8.х Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.Наименование КАК Наименование
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|
|УПОРЯДОЧИТЬ ПО
| Наименование ИЕРАРХИЯ";
Результат = Запрос.Выполнить();
Дерево = Результат.Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);
ЭлементыФормы.Дерево.СоздатьКолонки();
Категория:
Запросы Выгрузка результата запроса в Таблицу и Дерево значений Результат запроса может быть выгружен в таблицу значений или дерево значений с помощью метода Выгрузить. Затем над ними могут быть произведены другие операции: сортировка, свертка, перебор строк и другие действия.
Следующий пример
выгружает результат запроса в таблицу значений с прямым порядком обхода строк:
Код 1C v 8.х Результат = Запрос.Выполнить();
СпособОбхода = ОбходРезультатаЗапроса.Прямой;
ТабЗнач = Результат.Выгрузить(СпособОбхода);
Если используется иерархический обход результата запроса или обход по группировкам, тогда удобнее выгрузить не в таблицу значений, а в
дерево значений , как делается в следующем примере:
Код 1C v 8.х Результат = Запрос.Выполнить();
СпособОбхода = ОбходРезультатаЗапроса.ПоГруппировкамСИерархией;
Дерево = Результат.Выгрузить(СпособОбхода);
Категория:
Запросы Как вывести в справочник в виде дерева значений Код 1C v 8.х
Дерево = Новый ДеревоЗначений;
Запрос = Новый Запрос;
Запрос.Текст="ВЫБРАТЬ
|Ном.Ссылка как ссылка
|ИЗ
| Справочник.Номенклатура КАК Ном
|Упорядочить По
|Ном.Ссылка Иерархия";
// Или
Запрос.Текст="ВЫБРАТЬ
|Ном.Ссылка как ссылка
|ИЗ
| Справочник.Номенклатура КАК Ном
|ИТОГИ ПО
|Ном.Ссылка ТОЛЬКО ИЕРАРХИЯ";
Дерево = Запрос.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкамСИерархией);
ТабличноеПолеТипаДерево =Дерево;
ЭлементыФормы.ТабличноеПолеТипаДерево.СоздатьКолонки();
Категория:
Работа с Деревом Значений