|
|
|
Как сформировать отчет на СКД по заполненным данным табличной части с тремя колонками | ☑ | ||
|---|---|---|---|---|
|
0
kenzori
05.06.25
✎
08:22
|
используя параметры текущего документа сформировать отчет на скд по данным тч
|
|||
|
1
Ненавижу 1С
гуру
05.06.25
✎
08:25
|
задача с собеседования?
|
|||
|
2
Мультук
гуру
05.06.25
✎
08:34
|
(0)
Если документ сохранен, то тривиально. Если НЕ сохранён, то придется строить отчёт СКД программно Примерно вот так. Отборы здесь передаются как "НастройкиОтбор", но их тоже можно формировать программно В функции "ПолучитьОписаниеПолей" ничего сложного нет, но там комментарии, а чистить мне лень
тзДанные = Объект.Товары.Выгрузить(, "тут пишем нужные поля");
СтруктураОписаниеПолей = ПолучитьОписаниеПолей(тзДанные);
Функция СоздатьВыполнитьСКД(пСтр, НастройкиОтбор)
ТаблицаЗначений = пСТр.тзДанные;
СтруктураОписаниеПолей = пСТр.СтруктураОписаниеПолей;
//Создание объекта СКД.
СКД = Новый СхемаКомпоновкиДанных;
//Создание Источника. Нужно создать обязательный локальный.
ИсточникДанных = СКД.ИсточникиДанных.Добавить();
ИсточникДанных.Имя = "ИсточникДанных1";
ИсточникДанных.ТипИсточникаДанных = "local";
//Создание набора данных
НаборДанных = СКД.НаборыДанных.Добавить(Тип("НаборДанныхОбъектСхемыКомпоновкиДанных"));
НаборДанных.Имя = "НаборДанных1";
НаборДанных.ИмяОбъекта = "ВнешнаяТЗ";
НаборДанных.ИсточникДанных = "ИсточникДанных1";
//Заполнение полей набора данных
ЗаполнитьПоляНабораДанных(НаборДанных, СтруктураОписаниеПолей);
//Заполнение выбранных полей отчета
ЗаполнитьВыбранныеПоляОтчета(СКД, СтруктураОписаниеПолей);
//Заполнить структуру отчета. Детальные записи
Структура = СКД.ВариантыНастроек[0].Настройки.Структура.Добавить(Тип("ГруппировкаКомпоновкиДанных"));
Структура.Использование = Истина;
Структура.Выбор.Элементы.Добавить(Тип("АвтоВыбранноеПолеКомпоновкиДанных"));
Структура.Порядок.Элементы.Добавить(Тип("АвтоЭлементПорядкаКомпоновкиДанных"));
КомпоновщикНастроек = Новый КомпоновщикНастроекКомпоновкиДанных;
КомпоновщикНастроек.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СКД));
СкопироватьНастройОтбора(НастройкиОтбор.Отбор.Элементы, СКД.НастройкиПоУмолчанию.Отбор.Элементы);
КомпоновщикНастроек.ЗагрузитьНастройки(СКД.НастройкиПоУмолчанию);
ВнешниеНаборыДанных = Новый Структура("ВнешнаяТЗ", ТаблицаЗначений);
ТаблицаДанных = Новый ТаблицаЗначений;
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновкиДанных = КомпоновщикМакета.Выполнить(СКД, КомпоновщикНастроек.ПолучитьНастройки(),,,Тип("ГенераторМакетаКомпоновкиДанныхДляКоллекцииЗначений"));
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(МакетКомпоновкиДанных, ВнешниеНаборыДанных);
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;
ПроцессорВывода.УстановитьОбъект(ТаблицаДанных);
ПроцессорВывода.НачатьВывод();
ПроцессорВывода.Вывести(ПроцессорКомпоновки);
ПроцессорВывода.ЗакончитьВывод();
Возврат ТаблицаДанных;
КонецФункции
Процедура ЗаполнитьПоляНабораДанных(НаборДанных, СтруктураОписаниеПолей) Экспорт
Для каждого строка из СтруктураОписаниеПолей Цикл
ДобавленноеПоле = НаборДанных.Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных"));
ДобавленноеПоле.Заголовок = строка.Ключ;
ДобавленноеПоле.ПутьКДанным = строка.Ключ;
ДобавленноеПоле.Поле = строка.Ключ;
ДобавленноеПоле.ТипЗначения = строка.Значение ;//Новый ОписаниеТипов(НовыйТип);
КонецЦикла;
КонецПроцедуры
Процедура ЗаполнитьВыбранныеПоляОтчета(СКД, СтруктураОписаниеПолей)
Для каждого строка из СтруктураОписаниеПолей Цикл
ВыбранноеПоле = СКД.ВариантыНастроек[0].Настройки.Выбор.Элементы.Добавить(Тип("ВыбранноеПолеКомпоновкиДанных"));
ВыбранноеПоле.Использование = Истина;
ВыбранноеПоле.Поле = Новый ПолеКомпоновкиДанных(строка.Ключ);
КонецЦикла;
КонецПроцедуры
|
|||
|
3
toypaul
гуру
05.06.25
✎
08:34
|
(2) а может документ и данные записаны. тогда это все конечно интересно, но совсем не нужно :)
|
|||
|
4
Мультук
гуру
05.06.25
✎
08:39
|
(3)
Увы мне, у меня была задача принять решение ДО записи. Конечно же, когда код был написан и оттестирован, всё переиграли. P.S. Хотя, наверное, не стоило городить огород и нужно было проверять в приЗаписи и кидать Отказ = Истина, но что было сделано, то было сделано. |
|||
|
5
kenzori
05.06.25
✎
09:20
|
(4) Если записаны данные, не сработает?
|
|||
|
6
Shurjk
05.06.25
✎
09:21
|
(1) Вопрос на вакансию в 500 тыщ 🤣
|
|||
|
7
toypaul
гуру
05.06.25
✎
09:42
|
(5) сработает. но если записаны, то все гораздо проще чем в (2)
|
|||
|
8
kenzori
05.06.25
✎
10:14
|
(7) Можете сказать, примерно куда копать? Если второй сложнее
|
|||
|
9
toypaul
гуру
05.06.25
✎
10:00
|
Ну как-то так https://www.youtube.com/watch?v=0TrFvHoKh8Q&t=286s и тут наверное https://infostart.ru/1c/reports/89516/
Короче смысл в том, что создаешь отчет (или обработку - точно не скажу) со схемой СКД (тут-то вопросов надеюсь нет?) и цепляешь ее к печатным формам, если вопрос был про то как это к документу потом прицепить. |
|||
|
10
Мультук
гуру
05.06.25
✎
10:03
|
(8)
Для начала напишите внешний отчёт на СКД, который будет выводить нужную информацию. Отбор по документу через параметры или отборы. Если всё что я написал выше непонятно, то https://курсы-по-1с.рф/1c-v8/skd/ Не обязательно к этим парням, возможно нужен курс попроще. У этих же ребят есть бесплатный курс по СКД, где прямо разжевывают, что такое СКД. |
|||
|
11
kenzori
05.06.25
✎
13:00
|
(9) мне печатные формы не подходят мне нужен отчет на скд, где группировки итоги, ну отчет я сделал, может как-то можно адаптировать такой отбор в скд через запрос? или как-то еще Чтобы формировать отчет исходя из этого отбора?
Для Каждого СтрокаПродукции Из Объект.Продукция Цикл
СтрокаПродукции.Показывать = Ложь;
Если Лев(СтрокаПродукции.Номенклатура.Наименование, 2) = "ВП" Тогда
Если СтрокаПродукции.Спецификация = Неопределено Тогда
СтрокаПродукции.Показывать = Истина;
Иначе
СтрокаПродукции.Показывать = Истина;
Для каждого Комплектующее Из СтрокаПродукции.Спецификация.ИсходныеКомплектующие Цикл
Если Лев(Комплектующее.Номенклатура.Наименование, 26) = "Диафрагма вулканизационная"
ИЛИ Лев(Комплектующее.Номенклатура.Наименование, 2) = "ВД"
ИЛИ Лев(Комплектующее.Номенклатура.Наименование, 20) = "Диафрагма ""10"" х 355"
ИЛИ Лев(Комплектующее.Номенклатура.Наименование, 20) = "Диафрагма ""9"" х 355"
ИЛИ Лев(Комплектующее.Номенклатура.Наименование, 20) = "Диафрагма 11""х345"
ИЛИ Лев(Комплектующее.Номенклатура.Наименование, 20) = "Диафрагма ""12"" х 370"
ИЛИ Лев(Комплектующее.Номенклатура.Наименование, 20) = "Диафрагма 12х340"
ИЛИ Лев(Комплектующее.Номенклатура.Наименование, 30) = "Вулканизационные диафрагмы"
Тогда
СтрокаПродукции.Показывать = Ложь;
Прервать;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЕсли;
КонецЦикла;
ПрименитьОтбор();
Процедура ПрименитьОтбор();
Элементы.Продукция.ОтборСтрок = Новый ФиксированнаяСтруктура("Показывать", Истина);
Элементы.Продукция.Обновить();
КонецПроцедуры; |
|||
|
12
kenzori
05.06.25
✎
13:05
|
(10) у меня есть отчет который заполняется по параметрам документам и выводит данные по этим параметрам, но мне нужно отбор сделать как я ниже описал, возможно ли это в скд , в запросе ЛЕВ и т.д. не нашел, не знаю подобно ли подойдет, или такое в запросе не реализуемо? как тогда по другому в скд можно
|
|||
|
13
toypaul
гуру
05.06.25
✎
13:05
|
(11) Недавно взяли котенка. Когда он сделал лужу, пришлось его натыкать мордой в эту лужу. Судя по коду, учиться и учиться еще. И не на форуме, а на курсах где-то или у старших товарищей.
А то будут тыкать на форуме мордой в лужу. |
|||
|
14
craxx
05.06.25
✎
12:15
|
(11) не показывай никому этот код больше.
|
|||
|
15
Волшебник
05.06.25
✎
13:06
|
(12) в запросе есть ПОДСТРОКА
ВЫБРАТЬ ПОДСТРОКА("Привет, мир!", 9, 3) |
|||
|
16
lucky_
05.06.25
✎
14:04
|
(12) "в запросе ЛЕВ и т.д. не нашёл".
обнови платформу до "8.3.20" или ищи лучше. |
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |