![]() |
![]() |
![]() |
|
Как сформировать отчет на СКД по заполненным данным табличной части с тремя колонками | ☑ | ||
---|---|---|---|---|
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" или ищи лучше. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |