Период С
Установить временной интервал дат формирования запроса.
Синтаксис:
[[Период] С <Дата>|<ВнешняяПерем> [ПО <Дата>|<ВнешПеременная>];]
Англоязычный синоним:
[[Period] From <Дата>|<ВнешПеременная> [Till <Дата> | <ВнешПеременная>];]
Параметры:
<Дата> |
Константа типа «Дата», «Документ» или . позиция документа. |
<ВнешПеременная> |
Внешняя переменная типа «Дата», «Документ» или позиция документа. Если указан документ, то за момент времени принимается дата и время документа. |
По |
Добавочное ключевое слово для связки первой части команды со второй, необязательной частью. |
Описание:
Оператор Период С устанавливает интервал дат формирования запроса. Если в описании запроса оператор Период С опущен, то интервал дат формирования запроса устанавливается в точку актуальности
итогов (ТА) (или на РабочуюДату, если не установлена компонента «Оперативный учет»), запрос формируется только на этот момент времени.
Использование данного оператора актуально только в том случае, если запрос строится для выборки данных по регистрам, журналам расчетов и/или документам. Здесь указывается, в каком интервале выбирать движения регистров и/или подборку документов. При выполнении запроса только по справочникам эта секция не играет никакой роли.
Параметрами оператора Период С являются значения момента времени («Дата», «Документ» или позиция документа) начала и конца временного интервала. Следует особо обратить внимание, что если интервал задается с точностью до даты, то интервал времени считается от начала даты нижней границы интервала до конца даты верхней границы интервала. Если вторая часть оператора после ключевого слова По пропущена или значение второго параметра команды равно нулю, то интервал времени применяется от начального момента времени до ТА (или по РабочуюДату, если не установлена компонента «Оперативный учет»). Это особенно важно при формировании запросов по регистрам, т. к. запрос по регистрам может строиться от любой даты в прошлом до ТА. Поэтому, если вы укажете в запросе верхнюю границу интервала большей или равной дате ТА, то программа скорее всего сообщит «Не могу рассчитать регистры за ТА» (поскольку время ТА лежит где то в пределах даты, а запрос пытается учесть всю дату в целом). Поэтому при формировании текста запроса следует вставлять дополнительную проверку типа той, что приведена в следу ющем примере:
Пример:
Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса =
"Счет = Регистр.Cash.Счет;
|Статья = Регистр.Cash.Статья;
|СуммаЭквивалента2 = Регистр.Cash.СуммаЭквивалента2;
|СуммаЭквивалента1 = Регистр.Cash.СуммаЭквивалента1;
......
Если ДатаКонца >= ПолучитьДатуТА() Тогда
ТекстЗапроса = ТекстЗапроса + "Период с ДатаНачала;";
Иначе
ТекстЗапроса = ТекстЗапроса + "Период с ДатаНачала по ДатаКонца;";
КонецЕсли;
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
Возврат;
КонецЕсли;
Работа команды при формировании запросов к журналам расчетов зависит от того, используется ключевое слово "Период" или нет. Применение конструкции "Период С ... По..." приводит к тому, что выборка записей из журнала расчетов осуществляется в разрезе расчетных периодов конкретного журнала, фактически, по времени ввода строк журнала расчетов в систему.
Применение конструкции "С ... По ..." приводит к тому, что выборка записей из журнала расчетов проводится по времени действия записей журнала расчетов, определяемых реквизитами журнала расчетов "ДатаНачала" и "ДатаОкончания", а не временем их ввода в журнал. Более подробно о двойственности временного представления журналов расчетов см. выше, в главе «Работа с Журналами расчетов».
Замечание. Работа запроса с журналами расчетов, с использованием конструкции "Период С ... По ...", аналогична выборке записей в журнале расчетов, организуемой при помощи метода журнала расчетов ВыбратьПериод. С другой стороны, запрос, использующий конструкцию "С ... По ...", аналогичен выборке, организуемой при помощи метода журнала расчетов ВыбратьЗаписи.
Пример:
*
Процедура РасчЛистки()
Перем Запрос, Флаг;
Перем ДатаНач, ДатаКон;
ЖР = СоздатьОбъект{"ЖурналРасчетов.Зарплата");
Нач = ЖР.НачалоТекущегоПериода();
Кон = ЖР.КонецТекущегоПериода();
//Создание объекта типа Запрос
Запрос = СоздатьОбъект("Запрос");
Флаг = Запрос.Выполнить(
"//{{ЗАПРОС(РасчЛистки)
|Период С ДатаНач По ДатаКон; // выборка по расчетным периодам!
|Рез = ЖурналРасчетов.Зарплата.Результат;
|Расч = ЖурналРасчетов.Зарплата.ВидРасч;
|Дни = ЖурналРасчетов.Зарплата.Дни;
|Сотр = ЖурналРасчетов.Зарплата.Объект;
|Группировка Сотр без групп;
|Группировка Расч;
|функция Сум = Сумма(Рез);
|функция Дней = Сумма(Дни);
|Условие(Рез о 0);
|"//}}ЗАПРОС
);
// ...
КонецПроцедуры;
*
//Создание объекта типа Запрос
Запрос = СоздатьОбъект("Запрос");
// ниже формируется текст запроса с выборкой по времени
// действия записей журнала расчетов, а не по расчетным периодам!
ТекстЗапроса =
"//{{ЗАПРОС(Сформировать)
|С ДатаНач По ДатаКон;
|Рез = ЖурналРасчетов.Зарплата.Результат;
|Сотр = ЖурналРасчетов.Зарплата.Объект;
|ПЖ = ЖурналРасчетов.Зарплата.ПериодРегистрации;
|Группировка Сотр без групп;
|Группировка ПЖ;
|Функция Сум = Сумма(Рез);
"//}}ЗАПРОС
;
Флаг = Запрос.Выполнить(ТекстЗапроса);
// ...