Операторы языка запросов
Следует понимать, что не все функции внутри конкретной группировки запроса могут иметь четко интерпретируемый смысл. Например, для группировки по документу движения регистра следующие функции:
|Функция ПрихКол = Приход(Количество); |Функция РасхКол = Расход(Количество);
…имеют четкий смысл – приращения, сделанные документом при движении регистра.
С другой стороны, в той же группировке следующие функции:
|Функция НачКол = НачОст(Количество); |Функция КонКол = КонОст(Количество);
…явно не имеют смысла (в запросах по регистрам, обычно задают период запроса при помощи оператора Период C. Функция НачКол в данном примере должна по смыслу показывать остаток ресурса "Количество" на начальную дату запроса. Внутри группировки по документу вопрос: "Какой начальный остаток ресурса на дату 10.01.97?" по документу, проведенному, например, 13.01.97, не имеет смысла). Поэтому в таких ситуациях функция будет иметь нулевое значение.
Пример:
Запрос = СоздатьОбъект("Запрос"); Текст3апроса= '//{{ЗАПРОС(Функции) |Период с ДатаОтчета; |Товар = Регистр.КвотыТоваров.Товар; |Отдел = Регистр.КвотыТоваров.Отдел; |Сотрудник = Регистр.КвотыТоваров.Сотрудник; |Партнер = Регистр.КвотыТоваров.Партнер; |Док = Регистр.КвотыТоваров.ТекущийДокумент; |Количество = Регистр.КвотыТоваров.КвотаТовара; |Группировка Товар; |Группировка Отдел; |Группировка Сотрудник; |Группировка Партнер; |Группировка Док; |Функция НачКол = НачОст(Количество); |Функция ПрихКол = Приход(Количество); |Функция РасхКол = Расход(Количество); |Функция КонКол = КонОст(Количество); |// Следующие Функции вычисляем только при определенных |// условиях, чтобы получить отфильтрованные итоги |Функция ПрихКолТов = Приход(Количество) Когда (Док.ФлагТовара = 1); |Функция РасхКолТов = Расход(Количество) Когда (Док.ФлагТовара = 1); |Функция ПрихКолОтд = Приход(Количество) Когда (Док.ФлагОтдела = 1); |Функция РасхКолОтд = Расход(Количество) Когда (Док.ФлагОтдела = 1); |Функция ПрихКолСотр = Приход(Количество) Когда (Док.ФлагСотрудника = 1); |Функция РасхКолСотр = Расход(Количество) Когда (Док.ФлагСотрудника = 1); |"//}}ЗАПРОС ; // Если ошибка в запросе, то выход из процедуры Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда Возврат; КонецЕсли;