Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Создание отчета на СКД програмно          
Sirius83 Подменю пользователя
сообщение 11.11.20, 12:00
Сообщение #1

Говорящий
***
Группа: Пользователи
Сообщений: 52
Спасибо сказали: 3 раз
Рейтинг: 0

Платформа 1С:Підприємство 8.3 (8.3.10.2252)
"Управление производственным предприятием для Украины", редакция 1.3 (1.3.53.1)
Доброго времени! Есть некий отчет по взвешиванию продукции при ручном формировании с заданными параметрами все хорошо формирует

есть задача формировать отчет программно, собственно функция формирования отчета:
Код
Функция СформироватьОтчетПрограммно(Склад)
    Таб = Новый ТабличныйДокумент;    
    
    ТекОтчет = Отчеты.Отчет_РегистрацияВзвешиваний.Создать();
    СКД = ТекОтчет.ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
    Настройки = СКД.НастройкиПоУмолчанию;
    НачДата = НачалоДня(ТекущаяДата()) - 1;
    НачДата = Дата(Год(НачДата),Месяц(НачДата),День(НачДата),20,0,0);
    НачальнаяДата = СКД.Параметры.Найти("НачалоПериода");
    Если НачальнаяДата = Неопределено Тогда
        
        ПараметрПериод = СКД.Параметры.Добавить();
        ПараметрПериод.Имя = "НачалоПериода";
        ПараметрПериод.Заголовок = "НачалоПериода";
        ПараметрПериод.ТипЗначения = Новый ОписаниеТипов("Дата");
        ПараметрПериод.ОграничениеИспользования = Ложь;
        ПараметрПериод.Значение = НачДата;
        ПараметрПериод.Использование =ИспользованиеПараметраКомпоновкиданных.Всегда;
        ПараметрПериод.ВключатьВДоступныеПоля = Истина;    
        НачальнаяДата = ПараметрПериод;
    КонецЕсли;
        
    КонечнаяДата = СКД.Параметры.Найти("КонецПериода");
    
    Если КонечнаяДата = Неопределено Тогда
        
        ПараметрПериод = СКД.Параметры.Добавить();
        ПараметрПериод.Имя = "КонецПериода";
        ПараметрПериод.Заголовок = "КонецПериода";
        ПараметрПериод.ТипЗначения = Новый ОписаниеТипов("Дата");
        ПараметрПериод.ОграничениеИспользования = Ложь;
        ПараметрПериод.Значение = НачДата;
        ПараметрПериод.Использование =ИспользованиеПараметраКомпоновкиданных.Всегда;
        ПараметрПериод.ВключатьВДоступныеПоля = Истина;    
        КонечнаяДата = ПараметрПериод;
        
    КонецЕсли;
    
    
    ПараметрКомпоновки = Новый ПараметрКомпоновкиДанных("НачалоПериода");
    ПараметрСКД = ТекОтчет.КомпоновщикНастроек.Настройки.ПараметрыДанных.НайтиЗначениеПараметра(ПараметрКомпоновки);
    ПараметрСКД.Значение = НачДата;
    ПараметрСКД.Использование = Истина;    
    
    КонДата = Дата(Год(ТекущаяДата()),Месяц(текущаяДата()),День(ТекущаяДата()),20,0,0);
    
    ПараметрКомпоновки = Новый ПараметрКомпоновкиДанных("КонецПериода");
    ПараметрСКД = ТекОтчет.КомпоновщикНастроек.Настройки.ПараметрыДанных.НайтиЗначениеПараметра(ПараметрКомпоновки);
    ПараметрСКД.Значение = КонДата;
    ПараметрСКД.Использование = Истина;        //Помещаем в переменную данные о расшифровке данных
        
    
    ПараметрДанных= ТекОтчет.КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("НачалоПериода");
    ПараметрДанных.Значение = НачДата;
        
    ПараметрДанных.Использование=Истина;
    
    
    ПараметрДанных= ТекОтчет.КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("КонецПериода");
    ПараметрДанных.Значение = КонДата;
    
    ПараметрДанных.Использование=Истина;
    
        
    МассивН = Новый Массив;
    МассивН.Добавить(Справочники.Номенклатура.НайтиПоКоду("00000001198"));
    МассивН.Добавить(Справочники.Номенклатура.НайтиПоКоду("00000001197"));
    МассивН.Добавить(Справочники.Номенклатура.НайтиПоКоду("00000001200"));
    СЗ = Новый СписокЗначений;
    СЗ.ЗагрузитьЗначения(МассивН);
    
    тОтчет = ТекОтчет;
    
    //НастройкиКД = ТекОтчет.КомпоновщикНастроек.ПолучитьНастройки();
    НастройкиКД = Настройки;
    ВидВзвешивания = тОтчет.КомпоновщикНастроек.Настройки.Отбор.ДоступныеПоляОтбора.Элементы.Найти("ВидВзвешивания"); //поле отбора присутствует в СКД
    
    НовыйОтбор = НастройкиКД.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    НовыйОтбор.ЛевоеЗначение = ВидВзвешивания.Поле;
    НовыйОтбор.ПравоеЗначение = Перечисления.ИнтекоВидыВзвешивания.Отгрузка;
    НовыйОтбор.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
    НовыйОтбор.Использование = Истина;
    
    
    Отправитель = тОтчет.КомпоновщикНастроек.Настройки.Отбор.ДоступныеПоляОтбора.Элементы.Найти("Отправитель"); //поле отбора присутствует в СКД
    
    НовыйОтбор = НастройкиКД.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    НовыйОтбор.ЛевоеЗначение = Отправитель.Поле;
    НовыйОтбор.ПравоеЗначение = Склад;
    НовыйОтбор.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
    НовыйОтбор.Использование = Истина;
    
    
    Номенклатура = тОтчет.КомпоновщикНастроек.Настройки.Отбор.ДоступныеПоляОтбора.Элементы.Найти("Номенклатура"); //поле отбора присутствует в СКД
    
    НовыйОтбор = НастройкиКД.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
    НовыйОтбор.ЛевоеЗначение = Номенклатура.Поле;
    НовыйОтбор.ВидСравнения = ВидСравненияКомпоновкиДанных.ВСпискеПоИерархии;
    НовыйОтбор.ПравоеЗначение = СЗ;
    НовыйОтбор.Использование = Истина;
    
    тОтчет.КомпоновщикНастроек.ЗагрузитьНастройки(НастройкиКД);
    //
    
    ///////////////////////////////////////////////////////////////////////////////////////////////////
        ПараметрКомпоновки = Новый ПараметрКомпоновкиДанных("НачалоПериода");
    ПараметрСКД = ТекОтчет.КомпоновщикНастроек.Настройки.ПараметрыДанных.НайтиЗначениеПараметра(ПараметрКомпоновки);
    ПараметрСКД.Значение = НачДата;
    ПараметрСКД.Использование = Истина;    
    
    КонДата = Дата(Год(ТекущаяДата()),Месяц(текущаяДата()),День(ТекущаяДата()),20,0,0);
    
    ПараметрКомпоновки = Новый ПараметрКомпоновкиДанных("КонецПериода");
    ПараметрСКД = ТекОтчет.КомпоновщикНастроек.Настройки.ПараметрыДанных.НайтиЗначениеПараметра(ПараметрКомпоновки);
    ПараметрСКД.Значение = КонДата;
    ПараметрСКД.Использование = Истина;        //Помещаем в переменную данные о расшифровке данных
    
    
    ПараметрДанных= ТекОтчет.КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("НачалоПериода");
    ПараметрДанных.Значение = НачДата;
    
    ПараметрДанных.Использование=Истина;
    
    ПараметрДанных= ТекОтчет.КомпоновщикНастроек.Настройки.ПараметрыДанных.Элементы.Найти("КонецПериода");
    ПараметрДанных.Значение = КонДата;

    ПараметрДанных.Использование=Истина;
    
    
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    
    
    Расшифровка = Новый ДанныеРасшифровкиКомпоновкиДанных;    
    //Формируем макет, с помощью компоновщика макета
    КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;    
    //Передаем в макет компоновки схему, настройки и данные расшифровки
    МакетКомпоновки = КомпоновщикМакета.Выполнить(СКД, ТекОтчет.КомпоновщикНастроек.ПолучитьНастройки(), Расшифровка);    
    ВнешниеПараметры = Новый Структура;    
    //Выполним компоновку с помощью процессора компоновки
    ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
    ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпоновки, ВнешниеПараметры, Расшифровка);    
    //Выводим результат в табличный документ
    ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
    ПроцессорВывода.УстановитьДокумент(Таб);    
    ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных, Истина);  
    
    ТаблицаРезультат = Новый ТаблицаЗначений;
    ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВКоллекциюЗначений;

    ПроцессорВывода.УстановитьОбъект(ТаблицаРезультат);
    ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);

    ВОзврат Таб;    
    
КонецФункции

в результате получаем отчет, но без данных табличных частей.

Ткните пожалуйста носом, где недочет.

sava1 Подменю пользователя
сообщение 11.11.20, 12:29
Сообщение #2

Живет на форуме
Иконка группы
Группа: Местный
Сообщений: 2684
Из: Проскуров
Спасибо сказали: 678 раз
Рейтинг: 656.7

Установка параметров - тупо и неэффективно.
а вооще-то [необходимо зарегистрироваться для просмотра ссылки]

Сообщение отредактировал Vofka - 11.11.20, 12:35

Спасибо сказали: MATEVI,

Moloko Подменю пользователя
сообщение 11.11.20, 12:31
Сообщение #3

Говорящий
***
Группа: Пользователи
Сообщений: 93
Спасибо сказали: 20 раз
Рейтинг: 18

Sirius83 @ Сегодня, 13:00 * ,
У вас есть два пути: легкий и трудный.
Первый - это воспользоваться кнопочкой "сохранение настройки",
второй - это создание отчета через Построитель, на базе Универсального Отчета.
Посмотрите по конфигурации, большинство регистровых отчетов работают именно так.

Vofka Подменю пользователя
сообщение 11.11.20, 12:37
Сообщение #4

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13948
Из: Киев
Спасибо сказали: 4514 раз
Рейтинг: 3635.6

Sirius83, если нажать на настройки в отчете, там и параметры и отбор заполнены как надо?

Sirius83 Подменю пользователя
сообщение 11.11.20, 16:37
Сообщение #5

Говорящий
***
Группа: Пользователи
Сообщений: 52
Спасибо сказали: 3 раз
Рейтинг: 0

Vofka @ Сегодня, 13:37 * ,
Цитата(Vofka @ 11.11.20, 13:37) *
если нажать на настройки в отчете, там и параметры и отбор заполнены как надо?

Да с настройками все ок:



Moloko @ Сегодня, 13:31 * ,

Цитата(Moloko @ 11.11.20, 13:31) *
Первый - это воспользоваться кнопочкой "сохранение настройки",

Так настройки сохраненные

Vofka Подменю пользователя
сообщение 11.11.20, 17:29
Сообщение #6

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13948
Из: Киев
Спасибо сказали: 4514 раз
Рейтинг: 3635.6

Sirius83, выглядит так, будто элементы отбора не совпадают, хотя по названию одинаковые. Я бы попробовал выключить отборы, оставить только Параметры. Если что-то покажет, добавлять оторы и смотреть где пропадают данные.

Sirius83 Подменю пользователя
сообщение 12.11.20, 15:08
Сообщение #7

Говорящий
***
Группа: Пользователи
Сообщений: 52
Спасибо сказали: 3 раз
Рейтинг: 0

Vofka @ Вчера, 18:29 * ,
Я пробовал выключить отборы и оставить только Параметры. Тоже самое, таблица не заполняется.

sava1 Подменю пользователя
сообщение 12.11.20, 15:19
Сообщение #8

Живет на форуме
Иконка группы
Группа: Местный
Сообщений: 2684
Из: Проскуров
Спасибо сказали: 678 раз
Рейтинг: 656.7

Цитата(Sirius83 @ 11.11.20, 12:00) *
ТаблицаРезультат = Новый ТаблицаЗначений;


а здесь что-то есть ?

Sirius83 Подменю пользователя
сообщение 12.11.20, 15:49
Сообщение #9

Говорящий
***
Группа: Пользователи
Сообщений: 52
Спасибо сказали: 3 раз
Рейтинг: 0

sava1 @ Сегодня, 16:19 * ,

sava1 Подменю пользователя
сообщение 12.11.20, 17:16
Сообщение #10

Живет на форуме
Иконка группы
Группа: Местный
Сообщений: 2684
Из: Проскуров
Спасибо сказали: 678 раз
Рейтинг: 656.7

не так - ТаблицаЗначений после компоновки

Sirius83 Подменю пользователя
сообщение 16.11.20, 10:26
Сообщение #11

Говорящий
***
Группа: Пользователи
Сообщений: 52
Спасибо сказали: 3 раз
Рейтинг: 0

sava1 @ Вчера, 18:16 * ,
Тоже самое:

sava1 Подменю пользователя
сообщение 16.11.20, 11:12
Сообщение #12

Живет на форуме
Иконка группы
Группа: Местный
Сообщений: 2684
Из: Проскуров
Спасибо сказали: 678 раз
Рейтинг: 656.7


вот полностью рабочий код -
измените свои Параметры и ттРезультат - Табл.Документ

СКД = ПолучитьМакет("СКД_Заказы");
    Компоновщик = Новый КомпоновщикНастроекКомпоновкиДанных;
    Компоновщик.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(СКД));         
    Компоновщик.ЗагрузитьНастройки(СКД.НастройкиПоУмолчанию);

    НастройкиКомпоновщика = Компоновщик.Настройки;     

    НастройкиКомпоновщика.ПараметрыДанных.УстановитьЗначениеПараметра("Период",Период);
        
        
    Компоновщик.ЗагрузитьНастройки(НастройкиКомпоновщика);
        

        КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
        МакетКомпоновки = КомпоновщикМакета.Выполнить(СКД, НастройкиКомпоновщика,,,Тип("ГенераторМакетаКомпоновкиДанных"));

        ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
        ПроцессорКомпоновки.Инициализировать(МакетКомпоновки);

        ттРезультат = ЭлементыФормы.Результат;
    ттРезультат.Очистить();
        
        ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
        ПроцессорВывода.УстановитьДокумент(ттРезультат);
        ПроцессорВывода.Вывести(ПроцессорКомпоновки);

Спасибо сказали: Sirius83,

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 28.03.24, 14:14
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!