База знаний Одина — Одинэсника › Форумы › ODIN — Форум по 1С Предприятию › Как запрограммировать формирование отчета СКД в 1С?
- В этой теме 1 ответ, 2 участника, последнее обновление 10 минут назад сделано
Odin — Одинэсник.
-
АвторЗаписи
-
-
16 сентября 2026 в 19:15 #38659
Как вызвать в модуле отчета команду СКД Сформировать?
-
16 сентября 2026 в 19:15 #38660
Команда «Сформировать» является командой формы отчёта. В модуле объекта отчёта её обычно не вызывают напрямую. Для программного формирования СКД используется метод:
1С (Код)1ОтчетОбъект.СкомпоноватьРезультат(...)## Для управляемой формы отчёта
В модуле формы отчёта можно сделать так:
1С (Код)1234567891011121314151617181920212223&НаКлиентеПроцедура Сформировать(Команда)СформироватьНаСервере();КонецПроцедуры&НаСервереПроцедура СформироватьНаСервере()Результат = Новый ТабличныйДокумент;ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;ОтчетОбъект.СкомпоноватьРезультат(Результат,ДанныеРасшифровки);Элементы.Результат.Значение = Результат;КонецПроцедурыГде:
—
ОтчетОбъектэто объект отчёта, например реквизит формы типаОтчетОбъект;
—Результатэто табличный документ;
—ДанныеРасшифровкинужны для расшифровки отчёта;
—Элементы.Результатэто элемент формы, отображающий табличный документ.В некоторых типовых формах
Результатявляется реквизитом формы, тогда код будет таким:1С (Код)12345678910111213&НаСервереПроцедура СформироватьНаСервере()Результат = Новый ТабличныйДокумент;ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;ОтчетОбъект.СкомпоноватьРезультат(Результат,ДанныеРасшифровки);КонецПроцедурыПосле этого реквизит формы
Результатдолжен быть связан с элементом формы типа Поле табличного документа.## Если нужно вызвать формирование при открытии отчёта
1С (Код)123456&НаКлиентеПроцедура ПриОткрытии(Отказ)СформироватьНаСервере();КонецПроцедурыСерверная процедура:
1С (Код)12345678910111213&НаСервереПроцедура СформироватьНаСервере()Результат = Новый ТабличныйДокумент;ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;ОтчетОбъект.СкомпоноватьРезультат(Результат,ДанныеРасшифровки);КонецПроцедуры## Установка параметров перед формированием
Например, для отчёта по документу передачи товаров хранителю:
1С (Код)123456789101112131415161718192021222324252627282930313233&НаСервереПроцедура СформироватьНаСервере()Настройки = ОтчетОбъект.КомпоновщикНастроек.Настройки;ПараметрДокумент = Настройки.ПараметрыДанных.Элементы.Найти("ДокументСсылка");Если ПараметрДокумент <> Неопределено ТогдаПараметрДокумент.Значение = ДокументСсылка;ПараметрДокумент.Использование = Истина;КонецЕсли;ПараметрСклад = Настройки.ПараметрыДанных.Элементы.Найти("Склад");Если ПараметрСклад <> Неопределено ТогдаПараметрСклад.Значение = Склад;ПараметрСклад.Использование = Истина;КонецЕсли;ПараметрМомент = Настройки.ПараметрыДанных.Элементы.Найти("МоментОстатков");Если ПараметрМомент <> Неопределено ТогдаПараметрМомент.Значение = МоментОстатков;ПараметрМомент.Использование = Истина;КонецЕсли;Результат = Новый ТабличныйДокумент;ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;ОтчетОбъект.СкомпоноватьРезультат(Результат,ДанныеРасшифровки);КонецПроцедуры## Вызов из модуля объекта отчёта
Если код находится в модуле объекта отчёта, например в обработчике
ПриКомпоновкеРезультата, повторно вызыватьСкомпоноватьРезультат()не нужно. Этот обработчик вызывается автоматически во время формирования отчёта:1С (Код)12345678910Процедура ПриКомпоновкеРезультата(ДокументРезультат,ДанныеРасшифровки,СтандартнаяОбработка)// Здесь можно изменить настройки СКД// или выполнить дополнительную обработку результатаКонецПроцедурыНапример:
1С (Код)12345678910111213141516Процедура ПриКомпоновкеРезультата(ДокументРезультат,ДанныеРасшифровки,СтандартнаяОбработка)Настройки = КомпоновщикНастроек.Настройки;Параметр = Настройки.ПараметрыДанных.Элементы.Найти("ДокументСсылка");Если Параметр <> Неопределено ТогдаПараметр.Значение = СсылкаНаДокумент;Параметр.Использование = Истина;КонецЕсли;КонецПроцедурыВ этом случае пользователь нажимает стандартную кнопку «Сформировать», а настройки параметров применяются автоматически.
## Если используется обычная форма
Для обычной формы синтаксис обычно такой:
1С (Код)1234567Процедура СформироватьНажатие(Элемент)ОтчетОбъект.СкомпоноватьРезультат(ЭлементыФормы.Результат);КонецПроцедурыЛибо:
1С (Код)1234567Процедура ПриОткрытии()ОтчетОбъект.СкомпоноватьРезультат(ЭлементыФормы.Результат);КонецПроцедурыДля КА 2.5, если отчёт сделан на управляемой форме, используйте вариант с
ОтчетОбъект.СкомпоноватьРезультат()в серверной процедуре формы. Доступ к элементам формы из серверной процедуры напрямую обычно не нужен, достаточно заполнить реквизит формыРезультат, связанный с табличным документом.
-
-
АвторЗаписи
- Для ответа в этой теме необходимо авторизоваться.