Выгрузка табдока в excel
Процедура ВыгрузитьШаблон(ВхСтрокаКонтрагент)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ВариантыИсполнения.Владелец КАК Номенклатура,
| ВариантыИсполнения.Ссылка КАК ВИ
|ИЗ
| Справочник.ВариантыИсполнения КАК ВариантыИсполнения
|ГДЕ
| ВариантыИсполнения.ПометкаУдаления = ЛОЖЬ
| И ВариантыИсполнения.Владелец.ПометкаУдаления = ЛОЖЬ
| И ВариантыИсполнения.Владелец В ИЕРАРХИИ(&Номенклатура)
| И ВариантыИсполнения.Активность
| И ВариантыИсполнения.Владелец.Активность
| И ВариантыИсполнения.ТипВИ = ЗНАЧЕНИЕ(Перечисление.ТипыВариантовИсполнения.Стандартный)
|
|СГРУППИРОВАТЬ ПО
| ВариантыИсполнения.Владелец,
| ВариантыИсполнения.Ссылка
|
|УПОРЯДОЧИТЬ ПО
| Номенклатура
|ИТОГИ ПО
| Номенклатура,
| ВИ
|АВТОУПОРЯДОЧИВАНИЕ";
Запрос.УстановитьПараметр("Номенклатура", НоменклатураИерархия.ВыгрузитьЗначения());
//ВыборкаДетали = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
ТабДок = Новый ТабличныйДокумент;
Макет = ПолучитьМакет("Макет");
ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
ОбластьСтрока = Макет.ПолучитьОбласть("Тело");
ТабДок.Вывести(ОбластьШапка);
ТабДок.НачатьАвтогруппировкуСтрок();
ВыборкаДетали = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
РекурсивныйВыводСтрок(ТабДок, ОбластьСтрока, ВыборкаДетали);
ТабДок.ЗакончитьАвтогруппировкуСтрок();
ТабДок.Показать();
конецПроцедуры
ПоказатьПроцедура РекурсивныйВыводСтрок(ТабДок, ОбластьСтрока, ВыборкаДетали)
Пока ВыборкаДетали.Следующий() Цикл
ЗаполнитьЗначенияСвойств(ОбластьСтрока.Параметры, ВыборкаДетали);
ТабДок.Вывести(ОбластьСтрока, ВыборкаДетали.Уровень());
ВыборкаРезультат = ВыборкаДетали.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
РекурсивныйВыводСтрок(ТабДок, ОбластьСтрока, ВыборкаРезультат);
КонецЦикла;
КонецПроцедуры
Показатьвыводит пустые строки,не могу понять почему? Помогите пожалуйста...
Прикрепленные файлы:
По теме из базы знаний
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Все разобралась в макете слишком много полей взяла. Теперь другая проблема,выводит номенклатуру с одинаковыми вариантами исполнения,т.е. повторяющиеся строки. Как исправить?
(2) Не могут в этом запросе строки повторяться. Повторяется номенклатура, а вот варианты исполнения уникальны, хоть и могут иметь одинаковое наименование. Т.е. в справочние вариантов исполнения у вас дубли скорей всего. Можно попробовать вместо ссылки вывести и группировать по ВариантыИсполнения.Ссылка.Наименование, если правильное заполнение в справочнике не принципиально. Но не сработает, если наименования отличаются(например пробел в конце).
Процедура ВыгрузитьШаблон(ВхСтрокаКонтрагент)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ВариантыИсполнения.Владелец КАК Номенклатура,
| ВариантыИсполнения.Ссылка КАК ВИ
|ИЗ
| Справочник.ВариантыИсполнения КАК ВариантыИсполнения
|ГДЕ
| ВариантыИсполнения.ПометкаУдаления = ЛОЖЬ
| И ВариантыИсполнения.Владелец.ПометкаУдаления = ЛОЖЬ
| И ВариантыИсполнения.Владелец В ИЕРАРХИИ(&Номенклатура)
| И ВариантыИсполнения.Активность
| И ВариантыИсполнения.Владелец.Активность
| И ВариантыИсполнения.ТипВИ = ЗНАЧЕНИЕ(Перечисление.ТипыВариантовИсполнения.Стандартный)
|
|СГРУППИРОВАТЬ ПО
| ВариантыИсполнения.Владелец,
| ВариантыИсполнения.Ссылка
|ИТОГИ ПО
| Номенклатура ИЕРАРХИЯ
|АВТОУПОРЯДОЧИВАНИЕ";
Запрос.УстановитьПараметр("Номенклатура", НоменклатураИерархия.ВыгрузитьЗначения());
ВыборкаДетали = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
ТабДок = Новый ТабличныйДокумент;
Макет = ПолучитьМакет("Макет");
ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
ОбластьСтрока = Макет.ПолучитьОбласть("Тело");
струк=Новый Структура;
струк.Вставить("Код",ВхСтрокаКонтрагент.Контрагент.Код);
струк.Вставить("Наименование",ВхСтрокаКонтрагент.Контрагент.Наименование);
струк.Вставить("Адрес",ВхСтрокаКонтрагент.Контрагент.Адрес);
ОбластьШапка.Параметры.Заполнить(струк);
ТабДок.Вывести(ОбластьШапка);
ТабДок.НачатьАвтогруппировкуСтрок();
РекурсивныйВыводСтрок(ТабДок,ОбластьСтрока,ВыборкаДетали);
ТабДок.ЗакончитьАвтогруппировкуСтрок();
ТабДок.Показать();
//ТабДок.Записать("C:\Users\User\Desktop\1.xls", ТипФайлаТабличногоДокумента.XLS);
КонецПроцедуры
Процедура РекурсивныйВыводСтрок(ТабДок, ОбластьСтрока, ВыборкаДетали)
Если НЕ глПустоеЗначение(ВыборкаДетали.ВИ) Тогда
_Дополнительно = Новый Структура;
_Дополнительно.Вставить("ВариантИсполнения",ВыборкаДетали.ВИ);
_Дополнительно.Вставить("ЕдИзм",ВыборкаДетали.Номенклатура.БазоваяЕдИзм);
_ШК = глСформироватьВнутреннийШтрихкод(ВыборкаДетали.Номенклатура,_Дополнительно);
ОбластьСтрока.Параметры.Заполнить(_ШК);
Пока ВыборкаДетали.Следующий() Цикл
_Дополнительно = Новый Структура;
_Дополнительно.Вставить("ВариантИсполнения",ВыборкаДетали.ВИ);
_Дополнительно.Вставить("ЕдИзм",ВыборкаДетали.Номенклатура.БазоваяЕдИзм);
_ШК = глСформироватьВнутреннийШтрихкод(ВыборкаДетали.Номенклатура,_Дополнительно);
ОбластьСтрока.Параметры.Заполнить(_ШК);
КонецЦикла;
КонецЕсли;
Пока ВыборкаДетали.Следующий() Цикл
ЗаполнитьЗначенияСвойств(ОбластьСтрока.Параметры, ВыборкаДетали);
ТабДок.Вывести(ОбластьСтрока, ВыборкаДетали.Уровень());
ВыборкаРезультат = ВыборкаДетали.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам);
РекурсивныйВыводСтрок(ТабДок, ОбластьСтрока, ВыборкаРезультат);
КонецЦикла;
КонецПроцедуры
Показать
а что мешает просто сохранить в эксель?
я бы не парил мозг с выводом в макет кодом, а кинул бы запрос в СКД и после формирования табдок сохранил бы в экесель стандартно
я бы не парил мозг с выводом в макет кодом, а кинул бы запрос в СКД и после формирования табдок сохранил бы в экесель стандартно
Внимание! Тема сдана в архив
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот