- Стандартный период в 1С СКД (8.3/8.2)
- Использование параметров — периодов в системе компоновки данных
- Использование дат
- Использование стандартных периодов
- Стандартный период в СКД
- Стандартный период в СКД
- Для того чтобы использовать стандартный период в СКД:
- Получилось вот так:
- Стандартный период в 1С СКД 8.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. Мы работаем в Москве и области.
Источник
Использование параметров — периодов в системе компоновки данных
Использование дат
Для многих отчетов необходимо дать возможность пользователю указывать период, за который необходимо получить отчет. Часто данные периоды требуется указывать не с точностью до секунды, а с точностью до дня. Для того чтобы пользователь имел возможность ввести в параметрах данных дату без времени, достаточно указать в описании параметра данных тип параметра Дата с указанием состава даты «Дата».
После этого пользователь сможет вводить в параметры данных только значения дат, без времени.
Для того чтобы введенные значения интерпретировалось в отчете как начало и конец дня следует в запросе использовать функции НачалоПериода() и КонецПериода() .
ВЫБРАТЬ
ПродажиОбороты.Контрагент,
ПродажиОбороты.Номенклатура,
ПродажиОбороты.КоличествоОборот,
ПродажиОбороты.СуммаОборот
ИЗ
РегистрНакопления.Продажи.Обороты(
<(НАЧАЛОПЕРИОДА(&ПериодНачало, ДЕНЬ))>,
<(КОНЕЦПЕРИОДА(&ПериодКонец, ДЕНЬ))>, , ) КАК ПродажиОбороты
В данном примере в качестве значений параметров виртуальной таблицы будут передаваться начало и конец дней, выбранных пользователем.
Использование стандартных периодов
Система компоновки данных позволяет использовать стандартные периоды для указания периода отчета.
Для того чтобы задействовать данную возможность следует добавить в схему компоновки данных параметр типа СтандартныйПериод , а в параметрах — датах указать соответствующие выражения и запретить их редактирование пользователем.
После такой доработки схемы компоновки пользователю будет доступен для редактирования только параметр Период , значения которого при помощи выражений будут помещены в параметры ПериодНачало и ПериодКонец .
Пользователь будет редактировать параметр в следующем виде:
Для показанного примера в качестве значения параметра ПериодНачала будет использоваться дата 01.01.2019 , а в качестве значения параметра ПериодКонец будет использоваться дата 31.01.2019 .
Реальные значения дат для стандартного периода определяются при исполнении отчета. Таким образом, если выполнять отчет с установленным периодом Этот месяц в январе 2020-го года, то отчет будет исполняться с 01.01.2020 по 31.01.2020 , а если выполнять в феврале 2020-го года, то с 01.02.2020 по 29.02.2020
Заметим, что даты начала и конца стандартного периода также содержат и время. Причем, начальная дата имеет время 00:00:00 , а конечная дата 23:59:59 , таким образом, в запросе не обязательно использовать функции НАЧАЛОПЕРИОДА и КОНЕЦПЕРИОДА .
Источник
Стандартный период в СКД
Стандартный период в СКД
Для того чтобы использовать стандартный период в СКД:
- на вкладке параметры добавляется параметр (в примере с именем «Период»)
- Тип «Стандратный период»
- Ограничение доступности снять (тогда он будет доступен в настройках)
- В других параметрах («Дата1» и «Дата2», которые добавились автоматически, поскольку использовались в Запросе на вкладке «Наборы данных»), вносите выражение (Для «Дата1»: &Период.ДатаНачала) и ограничиваете их видимость.
Теперь остается поставить флажок на вкладке Настройки/Параметры, задать «Значение» по умолчанию, для управляемых форм включить параметры в пользовательские настройки (при необходимости).
В моем случае, форма «обычная», я добавил параметры на форму через свойство формы и поменял расположение и состав командной панели.
Диалог выбора стандартного периода не очень компактен, для экономии места использовал такое «нестандартное решение».
Получилось вот так:
Половина денег, которые идут на рекламу, выбрасываются впустую; но как узнать, какая именно половина?
Источник
Стандартный период в 1С СКД 8.3
Формируя отчеты в 1С, для удобства работы задается период для получения интересующих данных. При этом большинство отчетов любой сложности, создаваемые в программе «1С:Предприятие», строятся через «Систему компоновки данных» (СКД). Это мощный и гибкий инструмент, предназначенный не только для построения разных форм отчетности, но и для вывода информации со сложной структурой, содержащей произвольный набор диаграмм и таблиц.
Данный механизм позволяет устанавливать стандартный период в любых отчетах, благодаря чему оптимизируется и ускоряется работа пользователя с необходимой информацией. Рассмотрим на примере, как реализуется на практике данный механизм.
Для начала откроем конфигурацию базы и перейдем в «Макеты». Пользователю необходимо выбрать «Схемы компоновки данных» – раздел для установки параметров.
Теперь переходим к «Параметрам». В отчете мы имеем два основных параметра – Начало Периода и Конец Периода. Добавим третий – Стандартный период с установкой типа «СтандартныйПериод». В колонке «Выражение» пропишем следующее: &Период.ДатаНачала и &Период.ДатаОкончания. Обязательно устанавливаем флажок «Ограничение доступности».
Далее активируем вкладку «Настройки», устанавливаем галочку «Отображать недоступные параметры» и переходим в пользовательские настройки указанного параметра – «Период». На мониторе откроется окно, где необходимо установить флажок напротив «Включать в пользовательские настройки».
После обновления данных в конфигурации, переходим в пользовательский режим. Выбор периода включает в себя несколько стандартных вариантов: день, 6 или 9 месяцев, 1 год.
В обновленных версиях 1С большинство отчетов уже реализованы с представленным вариантом выбора периода. В этом можно убедиться, открыв любой отчет. Например, «Универсальный отчет», «Анализ взносов в фонды».
Из представленных примеров видно, что в отчетах уже установлен стандартный период. Использование механизма СКД «Стандартный период» существенно упрощает работу, экономит время при формировании отчетов и повышает эффективность рабочего процесса пользователя.
Источник
Ввод периода дат в отборах СКД
Надоело мне вводить периоды вручную — группу делай, границы указывай, лениво и ошибкоопасно. Разработал процедуру:
Процедура ВставитьУсловиеНаИнтервалДат ( Элемент ) Экспорт
Попытка
рТипГруппыОтбора = Тип ( «ГруппаЭлементовОтбораКомпоновкиДанных» );
рТипЭлементаОтбора = Тип ( «ЭлементОтбораКомпоновкиДанных» );
текдан = Элемент . ТекущиеДанные ;
рТипТекдан = ТипЗнч ( текдан );
Если рТипТекдан = Тип ( «ОтборКомпоновкиДанных» ) Тогда
рДоступныеПоля = текдан . ДоступныеПоляОтбора . Элементы ;
ИначеЕсли рТипТекдан = рТипГруппыОтбора или рТипТекдан = рТипЭлементаОтбора Тогда
Сообщить ( «Если условие на интервал дат нужно во вложенной группе, создайте его на верхнем уровне и перетащите в нужную группу.» , СтатусСообщения . Информация );
Предупреждение ( «Автоматическое добавление возможно только на верхнем уровне самого отбора!» ); Возврат;
Иначе
Возврат; // какой-то странный тип
КонецЕсли;
//================================================================================
// Определяем доступные отборы типа «Дата»
//
спв =Новый СписокЗначений ; // если дата не одна, дадим выбор
Для каждого рПоле Из рДоступныеПоля Цикл
Если рПоле . ТипЗначения . СодержитТип ( Тип ( «Дата» )) Тогда
спв . Добавить ( рПоле , рПоле . Заголовок );
КонецЕсли;
КонецЦикла;
Если спв . Количество ()= 0 Тогда
Предупреждение ( «В текущей СКД нет полей отбора типа «»Дата»»!» ); Возврат;
ИначеЕсли спв . Количество ()= 1 Тогда
рПоле = спв . Получить ( 0 ). Значение ;
Иначе
спв . СортироватьПоПредставлению ();
выбзнч = спв . ВыбратьЭлемент ( «Укажите нужное поле:» );
Если выбзнч =Неопределено Тогда Возврат КонецЕсли;
рПоле = выбзнч . Значение ;
КонецЕсли;
//================================================================================
// Запрашиваем вид интервала
//
спвар =Новый СписокЗначений ;
спвар . Добавить ( ВидСравнения . Интервал , «Не включая границы ( )» );
спвар . Добавить ( ВидСравнения . ИнтервалВключаяГраницы , «Включая границы [ ]» );
спвар . Добавить ( ВидСравнения . ИнтервалВключаяНачало , «Включая начало [ )» );
спвар . Добавить ( ВидСравнения . ИнтервалВключаяОкончание , «Включая конец ( ]» );
выбзнч = спвар . ВыбратьЭлемент ( «Укажите тип интервала:» );
Если выбзнч =Неопределено Тогда Возврат КонецЕсли;
// определяемся
Если выбзнч . Значение = ВидСравнения . ИнтервалВключаяГраницы
или выбзнч . Значение = ВидСравнения . ИнтервалВключаяНачало
Тогда
рВидСравненияНачГраницы = ВидСравненияКомпоновкиДанных . БольшеИлиРавно ;
Иначе
рВидСравненияНачГраницы = ВидСравненияКомпоновкиДанных . Больше ;
КонецЕсли;
Если выбзнч . Значение = ВидСравнения . ИнтервалВключаяГраницы
или выбзнч . Значение = ВидСравнения . ИнтервалВключаяОкончание
Тогда
рВидСравненияКонГраницы = ВидСравненияКомпоновкиДанных . МеньшеИлиРавно ;
Иначе
рВидСравненияКонГраницы = ВидСравненияКомпоновкиДанных . Меньше ;
КонецЕсли;
//================================================================================
// Запрашиваем интервал
//
рНачалоПериода = Дата ( 1 , 1 , 1 ); рКонецПериода = Дата ( 1 , 1 , 1 );
// стандартный диалог
рНастройкаПериода =Новый НастройкаПериода ;
рНастройкаПериода . УстановитьПериод ( рНачалоПериода , рКонецПериода );
рНастройкаПериода . РедактироватьКакИнтервал =Истина;
рНастройкаПериода . РедактироватьКакПериод =Истина;
рНастройкаПериода . ВариантНастройки = ВариантНастройкиПериода . Период ;
Если не рНастройкаПериода . Редактировать () Тогда Возврат КонецЕсли;
рНачалоПериода = НачалоДня ( рНастройкаПериода . ПолучитьДатуНачала ());
рКонецПериода = КонецДня ( рНастройкаПериода . ПолучитьДатуОкончания ());
//================================================================================
// Ищем, нет ли уже такой группы и таких элементов в ней (только на текущем уровне отбора!)
//
рГруппа =Неопределено;
рНачГраница =Неопределено;
рКонГраница =Неопределено;
//
рПредставлениеГруппы = «Интервал » + СтрЗаменить ( НРег ( выбзнч . Представление ), «ючая» , «.» )+ » для «»» + СокрЛП ( рПоле . Заголовок )+ «»»» ;
Для каждого элотб Из текдан . Элементы Цикл
ОбработкаПрерыванияПользователя ();
Если ТипЗнч ( элотб )= рТипГруппыОтбора
и элотб . Представление = рПредставлениеГруппы
и элотб . ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных . ГруппаИ
Тогда
рГруппа = элотб ; // ищем внутри неё
Для каждого элотбгр Из рГруппа . Элементы Цикл
ОбработкаПрерыванияПользователя ();
Если ТипЗнч ( элотбгр )= рТипЭлементаОтбора Тогда
Если элотбгр . ВидСравнения = рВидСравненияНачГраницы и элотбгр . ЛевоеЗначение = рПоле . Поле Тогда
рНачГраница = элотбгр ;
ИначеЕсли элотбгр . ВидСравнения = рВидСравненияКонГраницы и элотбгр . ЛевоеЗначение = рПоле . Поле Тогда
рКонГраница = элотбгр ;
КонецЕсли;
КонецЕсли;
КонецЦикла; // по элементам подходящей группы
КонецЕсли;
КонецЦикла;
//================================================================================
// Создаём недостающее, устанавливаем нужное
//
Если рГруппа =Неопределено Тогда
рГруппа = текдан . Элементы . Добавить ( рТипГруппыОтбора );
рГруппа . ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных . ГруппаИ ;
КонецЕсли;
рГруппа . Представление = рПредставлениеГруппы ;
рГруппа . РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных . Обычный ;
рГруппа . Использование =Истина;
//
Если рНачГраница =Неопределено Тогда
рНачГраница = рГруппа . Элементы . Добавить ( рТипЭлементаОтбора );
рНачГраница . ЛевоеЗначение = рПоле . Поле ;
КонецЕсли;
рНачГраница . ВидСравнения = рВидСравненияНачГраницы ;
рНачГраница . ПравоеЗначение = рНачалоПериода ;
рНачГраница . Использование =Истина;
рНачГраница . РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных . Обычный ;
рНачГраница . Представление = «Нач.граница» ;
//
Если рКонГраница =Неопределено Тогда
рКонГраница = рГруппа . Элементы . Добавить ( рТипЭлементаОтбора );
рКонГраница . ЛевоеЗначение = рПоле . Поле ;
КонецЕсли;
рКонГраница . ВидСравнения = рВидСравненияКонГраницы ;
рКонГраница . ПравоеЗначение = рКонецПериода ;
рКонГраница . Использование =Истина;
рКонГраница . РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных . Обычный ;
рКонГраница . Представление = «Кон.граница» ;
Исключение
Сообщить ( «Ошибка при установке условий на интервал дат: » + ОписаниеОшибки (), СтатусСообщения . Важное );
КонецПопытки;
КонецПроцедуры
Сделал вызов этой процедуры в той форме, где находился нужный компоновщик:
РаботаСДиалогами . ВставитьУсловиеНаИнтервалДат ( ЭлементыФормы . дОтборРК );
Стало можно быстро копипастить, а пользователям стало можно удобно вводить период.
Недостаток только в том, что текущей строкой отбора должна быть самая верхняя, корневая.
Плюсить особо не за что, а вот если пригодится кому, будет приятно. 🙂
Источник