СКД смотрю в 2024

Не смог разобраться в стандартных процедурах вызовов отчетов на СКД

 Из карточек номенклатуры вызывается отчет Движение товаров. Хотел изменить, чтобы выводилась детализация по дням.

Стандартно выводится: ПериодСекунда,  Регистратор (документ движения).

Не смог понять, где в отчете Движение товара подключается настройка, чтобы выводить движения по документам! Чтобы отключить и оставить только движения по дням, без дополнения!

Есть  детальные настройки, краткие настройки, добавление периодов. Зарылся!  Отчаялся! ( потерять надежду сделать или получить что-либо, отказаться от попыток сделать или получить что-либо).

 

Главное понял:

В СП написано, что параметры настроек - только для чтения. Но их можно программно менять методом "УстановитьЗначениеПараметра".

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

https://forum.infostart.ru/forum9/topic184968/

 

Когда отчет на СКД обращается в функциям общего модуля, при выводе итогов по группам иерархического справочника функции вызываются многократно!

Для оптимизации нужно

1) В обработке 1С сделать запрос, результат которого выгрузить в таблицу значений.

2) Добавить в таблицу значений нужные колонки. В цикле прочитать строки таблицы значений, посчитать нужные данные функциями модулей, и добавить полученные данные в таблицы значений.

3) Передать таблицу значений в отчет на СКД!

 

"ВычисляемыеПоля" и "Ресурсы" в СКД - различать!

В настройке отчета на СКД есть вкладки:

"Вычисляемые поля"  и "Ресурсы". И там и там значения задаются выражениями. Возможны условия. Можно обращаться только в первичным полям!

Вычисляемые поля - это первичные поля. Их можно посчитать и в исходном запросе. В отличие от запроса, в СКД для расчета вычисляемых полей могут вызываться функции из модулей.

Ресурсы - это для расчета итогов. Агрегатные функции (сумма, количества, минимум, максимум) или выражения, к примеру такое:

"Выбор
    Когда Сумма([СуммаОстаток]) = 0
        Тогда "нет в налич"
    Когда Сумма([СуммаОборот]) > 0
        Тогда Выразить(Сумма([СуммаОстаток]) / (Сумма([СуммаОборот]) / &[ДлинаПериодавднях]), "ЧИСЛО(6,1)")
    Когда Сумма([СуммаОстаток]) > 200 И Сумма([СуммаОборот]) = 0
        Тогда "недвиж"
Конец"

Если для поля средняя продажа считается как количество. Для итога по группе среднедняя продажа может считаться суммой (среднее количество для группы разнородных товаров товаров смысла не имеет).

 

Разбираться

Вызов СКД программно, правка параметров СКД из модулей 1С - все описано в книге Хрусталевой "Разработка сложных отчетов".

 

Настройки СКД - стандартные, фиксированные, пользовательские. Разбираться!

В "настройках" СКД есть:

- параметры данных

- параметров отбора

- параметры вывода

 

 

КомпоновщикНастроекКомпоновкиДанных (DataCompositionSettingsComposer)
Свойства:
- Настройки (Settings)
- ПользовательскиеНастройки (UserSettings)
- ФиксированныеНастройки (FixedSettings)

 

НастройкиКомпоновкиДанных (DataCompositionSettings)
ПараметрыДанных (DataParameters)
Использование: Только чтение.
Описание:
Тип: ЗначенияПараметровДанныхКомпоновкиДанных. 
Содержит значения параметров получения данных.
При сериализации настроек компоновки данных сериализуются только те параметры данных, у которых установлено использование или значение отличается от значения по умолчанию.
Поэтому для правильной десериализации, чтобы восстановить в настройках все параметры, следует компоновщик настроек, к которому относятся настройки, инициализировать источником доступных настроек

 

ЗначенияПараметровДанныхКомпоновкиДанных (DataCompositionDataParameterValues)
Свойства:
ДоступныеПараметры (AvailableParameters)
ДоступныеПоляПараметров (ParameterAvailableFields)
Элементы (Items)

Методы:
НайтиЗначениеПараметра (FindParameterValue)
ПолучитьИдентификаторПоОбъекту (GetIDByObject)
ПолучитьОбъектПоИдентификатору (GetObjectByID)
УстановитьЗначениеПараметра (SetParameterValue)
Описание:
Значения параметров данных. Реализованы в виде значений параметров.
При сериализации объекта каждый элемент коллекции "Элементы" сериализуется только, если у него установлено использование или значение отличается от значения по умолчанию.

 

ЗначенияПараметровДанныхКомпоновкиДанных (DataCompositionDataParameterValues)
УстановитьЗначениеПараметра (SetParameterValue)
Синтаксис:
УстановитьЗначениеПараметра(<Параметр>, <Значение>)
Параметры:
<Параметр> (обязательный)
Тип: Строка, ПараметрКомпоновкиДанных. 
Имя параметра или параметр компоновки данных, значение которого нужно установить.

<Значение> (обязательный)
Значение, которое нужно установить.
Описание: Устанавливает значение параметра и включает свойство Использование. Если параметр с указанным именем не найден, будет вызвано исключение.

 

Варианты отчета

 

Идентификаторы формы отчета

 

Вот старые материалы

Что-то есть тут

https://romin.org/index.php/accounting-3/135-peredat-dannye-tablitsy-znachenij-v-otchet-na-skd?highlight=WyJcdTA0M2ZcdTA0NDBcdTA0M2VcdTA0MzNcdTA0NDBcdTA0MzBcdTA0M2NcdTA0M2NcdTA0M2RcdTA0M2UiXQ==

и тут

"Передать данные таблицы значений в отчет на СКД" https://romin.org/index.php/accounting-3/135-peredat-dannye-tablitsy-znachenij-v-otchet-na-skd

 

В синтакс-помощнике смотри:

ПроцессорКомпоновкиДанных.Инициализировать
DataCompositionProcessor.Initialize
Синтаксис:
Инициализировать(<Макет>, <ВнешниеНаборыДанных>, <ДанныеРасшифровки>, <ВозможностьИспользованияВнешнихФункций>, <ОграничиватьПолучениеПолейПоСсылкамПоПравуПросмотр>, <МенеджерВременныхТаблиц>)

РСА: При вызове отчета на СКД из внешней обработки, если нужно обращаться к функциям в общих модулях, реквизит "ВозможностьИспользованияВнешнихФункций" должен быть True.

 

 

Вот новые материалы

Вот инфа, как понимать простыню програмного вызова отчета на СКД и комменты (см выше)

https://infostart.ru/1c/articles/654836/

 

 

https://forum.infostart.ru/forum9/topic278560/

вот какой-то нерабочий способ передачи параметров в 2022?

хотя у Хрусталевой похожее есть!

 

Вот пример открытия отчета и правки параметров СКД https://forum.infostart.ru/forum9/topic107562/

 

Ветка в 2011 году на мисте https://forum.mista.ru/topic.php?id=526686

 

Вот старое — вывод параметров отчета на форму, чтобы из реквизитов формы править параметры СКД

https://chel1c.ru/%D0%B2%D1%8B%D0%B2%D0%BE%D0%B4-%D0%BF%D0%B0%D1%80%D0%B0%D0%BC%D0%B5%D1%82%D1%80%D0%BE%D0%B2-%D0%BE%D1%82%D1%87%D0%B5%D1%82%D0%B0-%D1%81%D0%BA%D0%B4-%D0%BD%D0%B0-%D1%84%D0%BE%D1%80%D0%BC%D1%83/

 

Вот плейлист ютуба по СКД https://www.youtube.com/watch?v=CD6rHRFooNA&list=PLqwdXsX2o-CitOcWoLdwD5CeiL1PtUU1e

 

Вот про СКД видео 2 часа https://www.youtube.com/watch?v=995ISfG-8So

 

Курс Гилева по СКД - устарел!

https://курсы-по-1с.рф/1c-v8/skd/

https://infostart.ru/1c/articles/124312/

 

Курс 1С по СКД- 11400 руб

https://uc1.1c.ru/course/1s-predpriyatie-8-3-mehanizm-sistemy-komponovki-dannyh-dlya-nachinayuschih-i-professionalov/#toc

 

Сделал вывод собственного отчета из карточек номенклатуры, из списка справочника Номенклатура.

В нестандартный отчет добавлены реквизиты. Из формы справочника открывается отчет и реквизитам отчета присваются значения (даты, список значений со ссылками на номенклатуру). Далее в модуле отчета реквизиты отчета читаются и записываются в параметры СКД (процедура ПриКомпоновкеРезультата).

 

Код в процедуре ПриКомпоновкеРезультата в модуле отчета:

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

 

 

В процедуре "ПриКомпоновкеРезультата" ничего более не делается, и механизм платформы сам выводит отчет.

Если отчет вызывается из меню, тогда реквизиты отчета пустые, тогда в модуле формы в процедуре ПриОткрытии сделано заполнение значениями по умолчанию. Иначе при выводе отчета в СКД      в параметры СКД будут записаны       пустые значения из реквизитов отчета.

 

3. Сперва не смог сделать, чтобы отчет запускался сам (автоматически).  Для запуска отчета нужно нажимать кнопку "Сформировать". А после сделал!

Процедура ПечатьОтчетаРСА(ТипОтчета)
        
        Если ЭтоНовый() Тогда
                Предупреждение("Перед построением отчета необходимо записать элемент!");
                Возврат;
        КонецЕсли;
        
        Отчет = Отчеты.РСА_Движение_товара_по_дням.Создать();  // Оно его создает, но не открывает!     
        // Отчет.ПолучитьФорму().Открыть();   // Вот это откроет, но передача параметров не срабатывает!

        Отчет.ДатаОтчетаНачало = ДобавитьМесяц(ТекущаяДата(), -2); 
        Отчет.ДатаОтчетаКонец  = КонецДня(ТекущаяДата());
        // Отчет.ВыбраннаяНоменклатура=Ссылка;  // Нужно передавать список значений, чтобы одиночное значение или список обрабатывать однообразно
        ВыбНоменклатура=Новый СписокЗначений();
        ВыбНоменклатура.Добавить(Ссылка);  // Ссылка на текущий элемент
        Отчет.ВыбраннаяНоменклатура=ВыбНоменклатура;
                                                
// Делаю, как написано в статье Евгений Соловьёв (Eugen-S) на Инфостарт
        ФормаОтчёта=Отчет.ПолучитьФорму("ФормаОтчета");
        Отчет.СкомпоноватьРезультат(ФормаОтчёта.ЭлементыФормы.Результат, ФормаОтчёта.ДанныеРасшифровки);
        ФормаОтчёта.Открыть();  
        
КонецПроцедуры

 

Вместо ссылки в параметр передается именно список значений.

Потому что в отчете входящий параметр — список значений.

Отчет движения вызывается как для элемента, так и для группы справочника "Номенклатура".

Остается доделать: чтобы для карточек с дублями в список номенклатуры добавлялись бы все дубли!

 

 

 Я так понял, что в отчете нужно создать форму именно для программного вызова отчета на СКД ?

Если от открывать отчет "руками", то форма генерируется автоматически?

 

 При создании обычной формы отчета есть варианты:

- использовать СКД=Да. Тогда все легко, кнопка "Сформировать"  даже не имеет процедур в модуле или форме отчета, однако запускает формирование отчета.

- использовать СКД=Нет. Тогда в модуле появилась

Процедура КнопкаСформироватьНажатие(Кнопка)
    // Вставить содержимое обработчика.
КонецПроцедуры

 

 

 

В отчете "Движение товаров" в форме отчета есть аналогичная процедура

Процедура ДействияФормыСформировать(Кнопка) 
        СформироватьОтчет(ЭлементыФормы.Результат);
 КонецПроцедуры

 

 

 

 

Вот вариант программного открытия отчета от Евгений Соловьёв (Eugen-S). Проверил. Работает! У автора примеры процедур, которые меняют параметры данных, параметры отборов! Смотри!

 Программное открытие отчета СКД с параметрами и отбором 19.08.21
Периодически возникает задача открытия формы отчёта СКД уже со сформированным отчётом, с определёнными параметрами и отборами. В данной публикации рассматриваются способы сделать это как в обычном приложении, так и в управляемом. 
https://infostart.ru  Евгений Соловьёв (Eugen-S)

 

Комменты

 2. Drivingblind 226 09.08.21 13:21
Для новых конфигураций на БСП, где вывод отчетов (в т.ч. внешних) реализован через общую форму "ФормаОтчета", а добавление кнопок отчетов на формы объектов через подключаемые команды и программную дорисовку элементов, такой подход, к сожалению, работать не будет. 

 5. Yashazz 4690 10.08.21 18:27
Столько плюсов за такую тривиальщину, разжёванную в куче руководств... И это притом, что автор совершенно не упоминает параметр формы "Отбор", и ничего не говорит о конфликте с возможно сохранёнными настройками, о тех прелестях, что могут поджидать в событиях самой открываемой формы, о фиксированных настройках.
Кусок примитивного кода, принятый "на ура". Если такое на ИС пользуется спросом, то очень грустно. 

6.  (Eugen-S)
Цитата: И это притом, что автор совершенно не упоминает параметр формы "Отбор"

Ответ: Про параметр формы "Отбор" написано на ИТС, но параметр формы "Отбор", работает только на УФ. И к тому же отбор, заданный через этот параметр попадает в фиксированные настройки и никак не отображается в пользовательских.

Цитата: и ничего не говорит о конфликте с возможно сохранёнными настройками, о тех прелестях, что могут поджидать в событиях самой открываемой формы, о фиксированных настройках.

Ответ: Про остальные сложности, я доходчиво написал в резюме:
Представленные реализации не претендуют на «истину в последней инстанции», безусловно данная задача может иметь и другие варианты реализации 

24. kaaasteeen 01.11.22 13:49
Есть более простой и лаконичный способ открытия СКД отчета с заполненными параметрами(отборами).

УсловияОтбора = Новый Структура("<ИмяПараметра>", <ЗначениеПараметра>); // Тут может быть как параметр, так и отбор.
ПараметрыФормы = Новый Структура("Отбор, СформироватьПриОткрытии", УсловияОтбора, Истина);
ОткрытьФорму("Отчет.<ИмяВашегоОтчета>.ФормаОбъекта", ПараметрыФормы);

P.S. Взято с ИТС. 


 30. ХамитоваРайса 18.04.23 13:55
(24)Не передается отбор в новый отчет. Параметр СформироватьПриОткрытии передается, а отбор как будто не передаю даже. Пыталась таким способом открыть "Карточку счета" в БУ с фильтром по номенклатуре и счету учета. 

...

 

Смотри по программному открытию отчетов на СКД

В 2022 год смотрел программное открытие отчета на СКД, есть отлаженный шаблон. https://romin.org/index.php/accounting-3/131-skd-v-1s-smotryu-v-2022-godu



Вот инфа, как понимать простыню програмного вызова отчета на СКД

https://infostart.ru/1c/articles/654836/

в комментах ему дописали про установку пользовательских полей.

смотри мои собственные комменты!



Вот инфа, как добавлять параметры при вызове отчета на СКД

https://forum.infostart.ru/forum9/topic182739/

Пишут:

- установка параметров напрямую до вызова отчета на СКД.

- и установка параметров в процедуре "ПриКомпонвкеРезультата"

Тут есть вся простыня вызова отчета на СКД с комментами — смотри, чтоб понять всю логику работы.



Cтатья, как добавить параметры отбора при вызове отчета на СКД (дает процедуру для установки отборов)

https://oparin.info/1c/programmnaya-ustanovka-parametrov-i-otborov-skd/



Вот инфа, как добавить отбор — я аналогичное видел! А у меня отбор уже установлен, но мне надо перебрать установленные элементы отбора и изменить значение!

Вот как програмнно установить значение отбора

https://www.vdgb.ru/blog/kak-dobavit-otbor-v-otchete-skd-programmno/


НовыйЭлементОтбора = КомпоновщикНастроек.Настройки.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ПолеОтбора = Новый ПолеКомпоновкиДанных("ИмяПоляКомпановки"); НовыйЭлементОтбора.ЛевоеЗначение = ПолеОтбора; НовыйЭлементОтбора.Использование = Истина; НовыйЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; НовыйЭлементОтбора.ПравоеЗначение = Значение;

Автор: also

Информация взята с сайта http://helpf.pro