Имя: Пароль:
1C
 
Формирование отчета из ТЗ
0 Max57
 
18.10.23
11:57
Здравствуйте, уважаемые форумчане. Мне нужно создать отчет на основе полученной ТЗ. Подскажите, пожалуйста, как мне это сделать. Процедуру ПриКомпоновкеРезультата прикладываю.

ПриКомпоновкеРезультата
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
    СтандартнаяОбработка = Ложь;
    
    
    ТекстЗапроса = "ВЫБРАТЬ РАЗЛИЧНЫЕ
|    Номенклатура.Ссылка КАК Ссылка,
|    Номенклатура.Описание КАК Описание,
|    Номенклатура.ФайлКартинки КАК ФайлКартинки,
|    Номенклатура.ВесЧислитель КАК ВесЧислитель,
|    Номенклатура.Артикул КАК Артикул,
|    Номенклатура.Производитель КАК Производитель,
|    Номенклатура.СтранаПроисхождения КАК СтранаПроисхождения,
|    0=0
|ИЗ
|    Справочник.Номенклатура КАК Номенклатура";
    
    Запрос = Новый Запрос;
    Запрос.Текст =
        "ВЫБРАТЬ РАЗЛИЧНЫЕ
        |    НоменклатураДополнительныеРеквизиты.Свойство.Имя КАК СвойствоИмя
        |ИЗ
        |    Справочник.Номенклатура.ДополнительныеРеквизиты КАК НоменклатураДополнительныеРеквизиты";
    
    РезультатЗапроса = Запрос.Выполнить();
    
    ВыборкаДетальныеЗаписи = РезультатЗапроса.Выгрузить();
    Свойства = Новый Массив;
Для каждого Элемент Из ВыборкаДетальныеЗаписи Цикл
    
    Свойства.Добавить(Строка(Элемент.СвойствоИмя));
    //Свойства.Добавить(Строка(Элемент.СвойствоИмя));
                                                    
      КонецЦикла;
Для Индекс = 0 По Свойства.Количество()-1 Цикл
СтрокаЗамены = "НоменклатураДополнительныеРеквизиты"+Индекс+".Значение КАК " + Свойства[Индекс]+","+Символы.ПС + "0=0";
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"0=0",СтрокаЗамены) + Символы.ПС +
        "ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура.ДополнительныеРеквизиты КАК НоменклатураДополнительныеРеквизиты"+(Индекс)+ Символы.ПС +
        "ПО (Номенклатура.Ссылка = НоменклатураДополнительныеРеквизиты"+ (Индекс) +".Ссылка)" + Символы.ПС +
            "И (НоменклатураДополнительныеРеквизиты"+(Индекс)+".Свойство.Имя ="+Символ(34) +Свойства[Индекс]+Символ(34) +")";
                
КонецЦикла;


ПодстрокаПоиска = "," + Символы.ПС + "0=0";
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,ПодстрокаПоиска,"");
Запрос1 = Новый Запрос;
Запрос1.Текст = ТекстЗапроса;
Тз= Запрос1.Выполнить().Выгрузить();
    
    
КонецПроцедуры
1 Max57
 
18.10.23
11:56
Как мне сделать так, чтобы поля в СКД автоматически создавались?
Нашел https://blagin.ru/programmnoe-dobavlenie-polej-i-resursov-v-skd/. Не до конца понял, как мне это переделать под мой отчет.
2 vicof
 
18.10.23
11:56
3 vicof
 
18.10.23
11:58
(1) Прописывать их кодом. В статье из (1) это продемонстрировано.
4 Max57
 
18.10.23
12:04
(3) Спасибо, буду пробовать. Мне с СКД, что-нибудь нужно будет прописывать, кроме Имя объекта, содержащего дынные? Или нужно будет хотя бы одно поле создать?
5 vicof
 
18.10.23
12:09
(4) Если ты все хочешь программно создавать, то и поля нужно будет программно прописывать, и ресурсы, и группировки, и все остальное.
Если есть уже готовая схема компоновки, в которую только нужно вывести данные, то достаточно 10 строчек кода, и ничего дополнительно создавать не нужно.
6 Max57
 
18.10.23
12:24
(5) Мне нужно, чтобы поля создавались программно, так как в отчёте буду выводиться допреквизиты и их могу потом еще добавить.
7 Max57
 
18.10.23
12:39
(5) Подскажите, пожалуйста. Правильно ли я создаю поля?
Для каждого Элемент Из Тз.Колонки Цикл
Поле = СхемаКомпоновкиДанных.НаборыДанных.НаборДанных1.Поля.Добавить(Тип("ПолеНабораДанныхСхемыКомпоновкиДанных"));

    Поле.Заголовок      = Элемент.Заголовок;  
        Поле.ПутьКДанным    = Элемент.Заголовок;
        Поле.Поле           = Элемент.Заголовок;
        Поле.ТипЗначения    = Элемент.ТипЗначения;
        

    
    КонецЦикла;
8 vicof
 
18.10.23
13:06
"Правильно" зависит от многих факторов.
И на этот вопрос должен ответить ты сам.
Тип значения скорей всего нужно будет через описание типов задавать.
Имя поля и тип данных в общем случае отличаются.
2 + 2 = 3.9999999999999999999999999999999...