Стандартный период в 1С СКД (8.3/8.2)
Вы, наверное, встречали, что в некоторых отчетах нет привычного выбора НачалаПериода и КонцаПериода. А есть только одно поле, где можно выбрать значение «Сегодня», «Эта неделя», Этот месяц» и так далее. Называется это в системе СКД 1С «Стандартный период». Действительно, это иногда удобно, ведь редко когда нужны отчеты за полдня или за 14 дней и 32 минуты.
Но здесь возникает вопрос, как же нам передать параметры &НачалаПериода и &КонцаПериода в запрос, а на форме чтобы был виден только один «стандартный период».
Оказывается, это очень просто сделать в механизме 1С СКД, сейчас расскажу.
Сначала создадим новый отчет и зайдем в систему компоновки данных. Напишем простенький запрос с параметрами, задающими период. Например, выведем остатки и обороты за какой-то промежуток времени:
Если вы только начинаете программировать в 1С или просто хотите систематизировать свои знания — попробуйте Школу программирования 1С нашего друга Владимира Милькина. Пошаговые и понятные уроки даже для новичка с поддержкой учителя.
Попробуйте бесплатно по ссылке >>
РегистрНакопления.СвободныеОстатки.Обороты(&ДатаНачала, &ДатаОкончания, Регистратор, ) КАК СвободныеОстаткиОбороты
Теперь займемся параметрами. Кроме стандартных НачалоПериода и КонецПериода, которые мы указали в запросе, добавим еще параметр «СтандартныйПериод» и присвоим ему тип «СтандартныйПериод». А в колонке «Выражение» для параметров НачалоПериода и КонецПериода пропишем следующие выражения:
Не забудем установить флажки «Ограничение доступа» у первых двух параметров. Должна получиться такая картина:
Теперь зайдем в закладку «Настройки» и для параметра «СтандартныйПериод» сделаем следующее:
После всего проделанного сохраняем отчет и открываем его в режиме предприятия. Теперь мы можем выбирать дату следующим образом:
Следует заметить, что при выборе стандартного периода конечная дата всегда будет 23:59:59 (включая последнюю секунду).
Скачать получившийся отчет для 1С Управление торговлей 11.2 можно по ссылке.
К сожалению, мы физически не можем проконсультировать бесплатно всех желающих, но наша команда будет рада оказать услуги по внедрению и обслуживанию 1С. Более подробно о наших услугах можно узнать на странице Услуги 1С или просто позвоните по телефону +7 (499) 350 29 00. Мы работаем в Москве и области.
Источник
Особенности работы с объектом НастройкаПериода
В данном разделе рассмотрены особенности работы с объектом НастройкаПериода . Рассматриваются как работа объекта в табличных полях, отображающих «хронологические» динамические списки (свойство СтандартныйПериод), так и использование этого объекта для предоставления пользователю возможности, например, задавать интервал отчета, период за который нужно обработать данные и т.д.
Диалог Настройка периода
По умолчанию диалог Настройка периода имеет две закладки, которые позволяют выставлять промежуток времени в двух режимах, с использованием разных подходов. Диалог вызывается по команде «Установить интервал дат» в табличном поле или при вызове метода Редактировать() объекта НастройкаПериода .
Закладка «Интервал» дает возможность установить отдельно начало и окончание временного промежутка, причем в привязке к рабочему периоду. Например, задавая интервал «с начала недели по конец месяца», пользователь задает промежуток времени, который определяется по рабочей дате. Т.е. задавая один и тот же интервал в разные дни, пользователь задает разные результирующие интервалы, в общем случае, разной протяженности. Этот подход удобен для динамических списков и отчетов имеющих оперативный характер (текущие продажи, текущие расчеты с контрагентами и т.п.).
Закладка «Период» дает возможность установить размер периода (месяц, квартал, год) и привязать его к той или иной точке времени, в том числе к рабочей дате. Например, Февраль 2003, 1-ый квартал 2004, текущий, т.е. соответствующий текущей дате, квартал. Этот подход более удобен для анализа финансовых показателей прошлого или текущего периода. Например, когда рабочая дата уже Апрель 2004 года, некоторое время еще важно анализировать и корректировать данные первого квартала 2004 года.
На обеих закладках есть возможность установить произвольный период — любые дату начала и окончания периода.
В связи с тем, что интервалы времени на разных закладках задаются по-разному, не всегда можно однозначно отразить период заданный на одной закладке в терминах другой закладки. Например, если в 31-го марта 2004 года задать на закладке «Интервал» промежуток «с начала года по конец месяца» (т.е. промежуток с 01.01.2004 по 31.03.2004), то в терминах закладки «Период» это можно воспринять как «текущий месяц с начала года», «текущий квартал», «текущая дата с начала квартала» и «текущая дата с начала года». С такой неоднозначностью может быть связано то, что простое переключение между закладками приведет к тому, что не изменившись по сути на текущий момент времени, период будет задан уже другим способом.
Использование в динамических списках
Ряд списков динамического просмотра данных содержат такие предопределенные поля, как Дата или Период. В табличных полях таких динамических списков, помимо обычной установки отбора через диалог «Отбор и сортировка», существует стандартная команда «Установить интервал дат». Эта команда дает возможность пользователю не только задать произвольный диапазон просмотра данных, но и задать стандартные интервалы в более удобных терминах — неделя, месяц, квартал, год, а также задать период в привязке к текущей дате.
Команда вызывает диалог «Настройка периода», который является средством интерактивного управления объектом НастройкаПериода. Этот диалог позволяет запомнить стандартную настройку периода, которая будет использоваться для списка при открытии формы. При работе с настройкой периода следует помнить, что установка отбора по дате через окно «Отбор и сортировка» и через окно «Настройка периода» выполняют действия над одним и тем же элементом отбора динамического списка. В некоторых случаях для отбора по дате может быть задан такой диапазон, который не может быть адекватно отражен диалогом Настройка периода.
Дело в том, что диалог «Настройка периода» подразумевает установку интервала в терминах дат без указания времени. Это более понятно и более удобно для пользователя, но приводит к некоторым особенностям. Например, дата начала интервала, заданная через настройку периода, соответствует началу заданного дня (нулевой секунде), а дата окончания интервала — концу заданного дня (время — 23:59:59). Это приводит к тому, что если за счет интерактивных действий пользователя или при использовании встроенного языка для элемента отбора по дате установлено ЗначениеС с ненулевым временем или ЗначениеПо с временем не равным 23:59:59, то диалог «Настройка периода» при открытии отразит эту ситуацию как невыбранную границу начала и конца интервала. Если при этом просто нажать Ok , будет выдано сообщение о невозможности установить такой интервал дат. Т.е. пользователю нужно будет определиться — устанавливать ли интервал на «целые» дни или отказаться от установки периода. Желание устанавливать отбор более точно, чем «днями», может возникнуть при интенсивном документообороте, когда нужно, например, проанализировать документы первой половины дня. В таком случае использование в динамических списках диалога «Отбор и сортировка» неизбежно.
Особенностью диалога «Настройка периода», появляющегося в динамических списках, является также то, что в диалоге имеется флажок «Использовать эту настройку периода при открытии». Установка этого флажка приводит к тому, что при нажатии OK настройка периода будет сохранена для текущего списка и использована при следующем открытии формы.
Использование в отчетах
Очень часто для получения отчета в бизнес-приложениях необходимо задавать интервал, за который формируется отчет. Для этого в соответствующей форме, в которой проводится настройка такого отчета, можно использовать объект НастройкаПериода. Как правило, при этом в форме размещают два поля ввода для даты начала и конца периода формирования отчета, а также копку по которой вызывается метод Редактировать() объекта НастройкаПериода.
При работе с этим объектом в случае, когда в элементах управления формы используются даты с квалификатором типа Дата (без времени), следует учитывать следующие особенности.
- Для того чтобы использовать третий параметр метода УстановитьПериод() (т.е. параметр «Предпочтительно использовать рабочий период»), необходимо запомнить в каком режиме пользователь настроил период — с привязкой к рабочему периоду (например, текущий месяц) или как абсолютный период (например, Апрель 2004). Привязка настройки к рабочему периоду происходит неявно, когда пользователь использует закладку Интервал, или явно — при установке флажка «Рабочий период» на закладке «Период». И в том и в другом случае привязка к рабочему периоду приводит к тому, что свойство ЗначениеПериода получает значение даты «начала отсчета» ( ‘ 00010101 ‘ ). Таким образом, для определения того, что использована привязка к рабочему периоду, достаточно сравнить ЗначениеПериода и ‘ 00010101 ‘ .
- При установке периода (метод УстановитьПериод()) необходимо приводить дату окончания к концу дня, но только в том случае, если в качестве даты окончания не задана дата начала отсчета. Эта особенность связана с тем, что дата начала отсчета ‘ 00010101 0:00:00 ‘ воспринимается объектом НастройкаПериода особым образом. Если ее задать в качестве даты окончания, это будет означать, что ограничение не установлено. Но дата ‘ 00010101 23:59:59 ‘ , как, впрочем, любая дата с ненулевым временем, уже не является «датой начала отсчета».
- Для сохранения заданной пользователем настройки периода между сеансами работы формы можно использовать способность объекта НастройкаПериода сохраняться и восстанавливаться (например, при помощи функций глобального контекста СохранитьЗначение, ВосстановитьЗначение).
Эти особенности проиллюстрированы в демонстрационной конфигурации «Примеры ИТС» на примере формы обработки ПримерИнтернетПочты (закладка формы «Отчет по контрагенту»).
В том случае, если в элементах управления формы используются даты с квалификатором «Дата + Время», пользователь должен быть подготовлен к тому, что он столкнется с поведением, похожим на описанное выше.
Источник
Стандартный параметр &Период и проблемы в использовании
also Что-то вроде FAQ Отзывов (4)
Создадим отчет с одни набором данных запрос:
Теперь перейдем на вкладку параметры и увидим что система, помимо нашего параметра &МояДата создала еще и параметр &Период.
Для того, чтобы наглядно наблюдать за периодами, создадим основную форму отчета и поместим на нее табличное поле с данными: КомпоновщикНастроек.Настройки.ПараметрыДанных
Сохраним отчет и откроем его в предприятии. В табличном поле с параметры отображается только параметр &Период:
Соответственно, любое изменение этого параметра не даст нужного результата.
Почему недоступен параметр &МояДата? Конечно же потому что на вкладке параметры у него установлена галку Ограничение доступности.
Снимаем галку. Теперь в доступных параметрах видим оба. Только при формировании отчета увидим, что отчет реагирует на параметр &Период, а не на &МояДата.
В данном примере самое простое переименовать в запросе параметр &МояДата на &Период и добиться нужного результата. Но может быть у Вас запрос, в котором уже использовался параметр &Период, или Ваши религиозные взгляды не разрешают Вам использовать этот параметр, в любом случае можно решить проблему так:
UPD от пользователя Boo:
Главная проблема при использовании «стандартных» (добавляемых системой) параметров в том что при использовании в отчете нескольких виртуальных таблиц, в случае определения этого параметра, его значение будет использоваться во всех остальных случаях взамен «собственных».
Во втором подзапросе, в качестве параметра даты среза будет использовано значение «стандартного» параметра ПЕРИОД, а не значение ДругаяДата.
Данный «глюк» будет наблюдаться даже в том случае если второй подзапрос вывести во второй набор данных и связать уже средствами СКД. Вариант с использованием во втором запросе ваыражения типа «ДОБАВИТЬКДАТЕ(&Период, МЕСЯЦ, -1) » тоже не сработает, месяц не вычтется. А вот переименование в запросе параметра «Период» в, например, «ПерваяДата», решает эту проблему.
Кстати, точно такая же проблема наблюдается с виртуальными таблицами регистров накопления и бухгалтерии, используемыми для получения, например, оборотов. Там система добавляет параметры «НачалоПериода» и «КонецПериода».
Так что в случае запросов даже чуть повышенной сложности, есть смысл выключать доступность и использование «стандартных периодов».
4 Коммент.
Есть одно уточнение: Реагирует на &Период при одновременном использовании с &МояДата…А то всю голову сломал – по отдельности нормально реагирует…
Главная проблема при использовании “стандартных” (добавляемых системой) параметров в том что при использовании в отчете нескольких виртуальных таблиц, в случае определения этого параметра, его значение будет использоваться во всех остальных случаях взамен “собственных”.
Приведу пример:
ВЫБРАТЬ
РаботникиОрганизацийСрезПоследних.Сотрудник,
РаботникиОрганизацийСрезПоследних.ПричинаИзмененияСостояния,
РаботникиОрганизацийСрезПоследних.Период,
РаботникиОрганизацийСрезПоследнихДругаяДата.Период КАК Период2,
РаботникиОрганизацийСрезПоследнихДругаяДата.ПричинаИзмененияСостояния КАК ПричинаИзмененияСостояния2
ИЗ
РегистрСведений.РаботникиОрганизаций.СрезПоследних(&Период, Сотрудник = &Сотрудник) КАК РаботникиОрганизацийСрезПоследних
ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РаботникиОрганизаций.СрезПоследних(&ДругаяДата, ) КАК РаботникиОрганизацийСрезПоследнихДругаяДата
ПО РаботникиОрганизацийСрезПоследних.Сотрудник = РаботникиОрганизацийСрезПоследнихДругаяДата.Сотрудник
Во втором подзапросе, в качестве параметра даты среза будет использовано значение “стандартного” параметра ПЕРИОД, а не значение ДругаяДата.
Данный “глюк” будет наблюдаться даже в том случае если второй подзапрос вывести во второй набор данных и связать уже средствами СКД. Вариант с использованием во втором запросе ваыражения типа “ДОБАВИТЬКДАТЕ(&Период, МЕСЯЦ, -1) ” тоже не сработает, месяц не вычтется. А вот переименование в запросе параметра “Период” в, например, “ПерваяДата”, решает эту проблему.
Кстати, точно такая же проблема наблюдается с виртуальными таблицами регистров накопления и бухгалтерии, используемыми для получения, например, оборотов. Там система добавляет параметры “НачалоПериода” и “КонецПериода”.
Так что в случае запросов даже чуть повышенной сложности, есть смысл выключать доступность и использование “стандартных периодов”.
Источник