В этот отчете как раз запрос набора данных собирается каждый раз в зависимости от количества интервалов заданные в настройках , и значений параметров в запросе используется очень много.
Отчеты, СКД, построитель
Размещаем на форме отчета поле выбора «ПолеВыбораВарианта». В модуль формы добавляем:
Для автоматического формирования отчета на СКД при открытии его формы надо добавить в модуль формы в процедуру ПриСозданииНаСервере:
а для автоматического формирования из команды надо добавить в модуль команды в процедуру ОбработкаКоманды:
Что бы избежать запроса на сохранение варианта отчета при его закрытии надо в клиентскую процедуру ПередЗакрытием вставить:
Стандартный период в СКД 1С 8.3, 8.2
Программное формирование отчета на СКД и изменение выводимой формы
Отчет на СКД можно сформировать программно в процедуре «ПриКомпоновкеРезультата()» модуля отчета:
Программный вывод отчета и расшифровки к нему
ДанныеРасшифровкиОтчета — это переменная модуля формы отчета (то, что объявляется через ключевое слово Перем). ЭлементыФормы.Результат — Результат это имя табличного документа куда выводится отчет.
На табличном документе идет в обработчики событий и делаем обработчик на событие ОбработкаРасшифровки. Процедура обработчик будет иметь вид похожий на это:
Результат работы этого когда: двойной клик на любой ячейке ссылочного типа производит открытие этого элемента. Будь то документ, элемент справочника или ещё что-нибудь.
Все так же идем в обработчики события поля табличного документа и устанавливаем обработчик на ОбработкаРасшифровки:
Вместо выводов: если вы хотите открывать ссылочные типы, тогда какой вариант использовать — дело ваше. Преимущество первого над вторым, я вижу, только в компактности и универсальности кода. Как насчет быстродействия, например, я не мерял. Но если же вам нужно получить результат расшифровки и как-то его обработать дополнительно — вы можете воспользоваться вариантом №2.
При программном выводе отчета возможно вмешаться в выводимою форму. В примере ниже показано добавление наименования Родителя (/Родитель/) к тексту выводимого поля Номенклатура:
При программном формировании отчета можно добавить свою область шапки или подвала в формируемый отчет:
Для получения правильных остатков в запрос схемы компановки данных СКД должны быть включены поля и с Начальным, и с Конечным остатками виртуальной таблицы, а выводить можно уже только один из них.
Комментарии
Спасибо огромное за статью и прикреплённый пример. Очень помогло в работе.
Промокоды на Займер на скидки
Спасибо — просто спасли. Только у меня Период не видит в модуле
положила все в модуль Объекта(база ЗиК 3), в СКД в Параметры добавила «Период» =стандартный период,НачалоПериода=&Период.ДатаНачала ; КонецПериода.. Не видит здесь Период и все..
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) экспорт
СтандартнаяОбработка = Ложь;
//ДанныеПечати = ПолучитьИзВременногоХранилища(Адр);
Запрос = Новый Запрос;
Запрос.Текст ;
//Запрос.УстановитьПараметр(«НачалоПериода», Период.ДатаНачала);
//Запрос.УстановитьПараметр(«КонецПериода», Период.ДатаОкончания);
НачалоПериода=Дата(«01.11.2016 00:00:00»); ;
Запрос.УстановитьПараметр(«НачалоПериода», НачалоПериода);
Запрос.УстановитьПараметр(«КонецПериода», КонецПериода);
Запрос.УстановитьПараметр(«СовмПроф», «Доплата за совм. проф. (4)»);
//Если СовмещСотрудник.Пустой() тогда
// //Сообщить(«В ЭТОЙ ГРУППЕ НЕТ КОНТРАГЕНТОВ » );
//конецесли;
Запрос = Новый Запрос;
Запрос.Текст ;
ффф= Перечисления.ГруппыНачисленияУдержанияВыплаты.Начислено ;
//Запрос.УстановитьПараметр(«НачалоПериода», Период.ДатаНачала);
//Запрос.УстановитьПараметр(«КонецПериода», Период.ДатаОкончания);
Запрос.УстановитьПараметр(«НачалоПериода», НачалоПериода);
Запрос.УстановитьПараметр(«КонецПериода»,КонецПериода);
ПланВидовРЕЗ= РезультатПакета[6].Выгрузить();
ПланВидовРЕЗ.сортировать(«ПланВидовРасчетаНаименование»);
СотрРез = РезультатПакета[9].Выгрузить();
ДанныеПечати = РезультатПакета[10].Выгрузить(); //окончательный итог Сотрудник
//начисл_Сотр_подр = РезультатПакета[9].Выгрузить();
//начисл_Сотр_подр.сортировать(«Группа»);
//РезультатЗапроса.сортировать(«Группа,СпрОтрВБух_ВидДеятельности,ВидДеятельностиНАШ»);
ДанныеПечати.сортировать(«Сотрудник»);
ДанныеПечати.Колонки.Добавить(«ПодразделенияРодитель», Новый ОписаниеТипов(«строка»));
ДанныеПечати.Колонки.Добавить(«ВидДеятельностиНаш», Новый ОписаниеТипов(«строка»));
Если МассивНайденныеСтроки.Количество() > 0 Тогда
Для Каждого Ст Из МассивНайденныеСтроки Цикл
Стр.ВидДеятельностиНаш = Ст.СовмещСпособОтражения;
Если Ст.СовмещПодразделениеКуда = NULL Тогда
Счет =»»;
СубСчет =»»;
ПодразделениеСпрОтр =»»;
ВидДеятельностиСпрОтр =»»;
резЗапр = 0;
//Из схемы возьмем настройки по умолчанию
Настройки = СхемаКомпоновкиДанных.НастройкиПоУмолчанию;
//Помещаем в переменную данные о расшифровке данных
ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;
//Формируем макет, с помощью компоновщика макета
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
//Передаем в макет компоновки схему, настройки и данные расшифровки
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, Настройки, ДанныеРасшифровки);
Статья: Работа с внешними наборами данных в СКД | Новичок 1С
Работа с внешними наборами данных в СКД
Для использования в отчёте на СКД произвольной таблицы значений необходимо настроить соответствующим образом схему компоновки данных и прописать программный вывод отчёта.
1.2. На закладке «Наборы данных» добавляем набор данных — объект.
1.3. Добавляем необходимые поля набора данных (достаточно указать Поле) и указываем Имя объекта, содержащего данные.
1.4. Если в СКД есть другие наборы данных (например, Запрос), то создаём связи наборов данных на закладке «Связи наборов данных».
2.1. В модуле объекта отчёта создаём процедуру-обработчик ПриКомпоновкеРезультата.
2.2. В процедуре ПриКомпоновкеРезультата отключаем стандартную обработку.
2.3. Формируем таблицу значений произвольным образом. Имена колонок таблицы значений должны совпадать с полями набора данных в СКД (п.1.3).
2.6. Помещаем данные о расшифровке в соответствующую переменную.
2.8. Передаём в макет компоновки схему, настройки и данные расшифровки.
2.9. Выполняем компоновку с помощью процессора компоновки. Для этого выполняем метод процессора компоновки данных Инициализировать(). В качестве параметров передаём макет компоновки данных, внешние наборы данных (тип: Структура, ключ структуры должен совпадать с именем объекта в схеме компоновки данных (п.1.3), значение — сформированная таблица значений), данные расшифровки.
Помимо таблиц значений в качестве внешних наборов данных могут использоваться результаты запросов, табличные части.
Тип: Структура.
Ключ структуры соответствует имени внешнего набора данных. Значение структуры — внешнему набору данных.
Тип: ДанныеРасшифровкиКомпоновкиДанных.
Объект, в котором нужно заполнить данные расшифровки. Если не указан, то расшифровка заполняться не будет.
Тип: Булево.
Указывает возможность использования функции общих модулей конфигурации в выражениях компоновки данных.
Значение по умолчанию: Ложь.
То же самое относится и к наборам данных, если мы описали множество наборов данных в схеме, но используем только некоторые из них, то только по используемым наборам данных система будет получать информацию, а остальные наборы данных будут удалены из результирующего макета компоновки данных.
Стандартный период в 1С СКД (8.3/8.2)
Вы, наверное, встречали, что в некоторых отчетах нет привычного выбора НачалаПериода и КонцаПериода. А есть только одно поле, где можно выбрать значение «Сегодня», «Эта неделя», Этот месяц» и так далее. Называется это в системе СКД 1С «Стандартный период». Действительно, это иногда удобно, ведь редко когда нужны отчеты за полдня или за 14 дней и 32 минуты.
Но здесь возникает вопрос, как же нам передать параметры &НачалаПериода и &КонцаПериода в запрос, а на форме чтобы был виден только один «стандартный период».
Оказывается, это очень просто сделать в механизме 1С СКД, сейчас расскажу.
Сначала создадим новый отчет и зайдем в систему компоновки данных. Напишем простенький запрос с параметрами, задающими период. Например, выведем остатки и обороты за какой-то промежуток времени:
Если вы только начинаете программировать в 1С или просто хотите систематизировать свои знания — попробуйте Школу программирования 1С нашего друга Владимира Милькина. Пошаговые и понятные уроки даже для новичка с поддержкой учителя.
Попробуйте бесплатно по ссылке >>
РегистрНакопления.СвободныеОстатки.Обороты(&ДатаНачала, &ДатаОкончания, Регистратор, ) КАК СвободныеОстаткиОбороты
Теперь займемся параметрами. Кроме стандартных НачалоПериода и КонецПериода, которые мы указали в запросе, добавим еще параметр «СтандартныйПериод» и присвоим ему тип «СтандартныйПериод». А в колонке «Выражение» для параметров НачалоПериода и КонецПериода пропишем следующие выражения:
Не забудем установить флажки «Ограничение доступа» у первых двух параметров. Должна получиться такая картина:
Теперь зайдем в закладку «Настройки» и для параметра «СтандартныйПериод» сделаем следующее:
После всего проделанного сохраняем отчет и открываем его в режиме предприятия. Теперь мы можем выбирать дату следующим образом:
Следует заметить, что при выборе стандартного периода конечная дата всегда будет 23:59:59 (включая последнюю секунду).
Скачать получившийся отчет для 1С Управление торговлей 11.2 можно по ссылке.
К сожалению, мы физически не можем проконсультировать бесплатно всех желающих, но наша команда будет рада оказать услуги по внедрению и обслуживанию 1С. Более подробно о наших услугах можно узнать на странице Услуги 1С или просто позвоните по телефону +7 (499) 350 29 00. Мы работаем в Москве и области.
Пример использования внешнего источника данных в СКД: Статьи и материалы.
Микрофинансирование → Микрокредиты → Специальные предложения → Скачать файлы → Обзор Быстроденег → Предмет договора → Ответственность сторон → Отличные наличные→ Экспресс займы