Разделы сайта
Выбор редакции:
- История отечественной электронной компонентной базы (ЭКБ) летию официальной даты посвящается
- Лучшие процессоры Intel с архитектурой Kaby Lake
- Whatsapp перевод на русский язык — Как переводится WhatsApp (перевод Ватсап с английского на русский) Что значит ватсап перевод
- Не обновляется прошивка на Xiaomi Miui не обновляется
- Как разблокировать телефон "Мегафона" для других операторов?
- Java Update Scheduler что это за программа и нужна ли она?
- Samsung Galaxy Note N7000 - Технические характеристики
- Как настроить почту на андроиде
- Смартфон Tele2 Mini: подробный обзор модели Мобильный телефон теле2 mini характеристики
- Сервисный центр lenovo Безопасная прошивка на леново а319
Реклама
Язык выражений системы компоновки данных (1Cv8). Получение в запросе цен на дату документа Сохраняем отчёт в виде файла |
При довольно часть встречается необходимость работы с переменными типа «Дата». В данной статье мы рассмотрим основные приемы — передача текущей даты, проверка на пустое значение, произвольная дата. При написании запросов зачастую необходимо сравнивать данные с текущей датой. Во встроенном языке 1С есть функция ТекущаяДата(). Она позволяет определить текущее время и дату на компьютере. Для произведения операций с текущей датой необходимо передавать в запрос значение этой функции в качестве параметра. Ниже представлен запрос, выбирающий все файлы, присоединенные к авансовым отчетам с датой создания до настоящего момента:
Произвольная датаРассмотренная выше функция позволяет сравнивать и, следовательно, производить отбор по любому периоду. Такой способ позволяет задать в запросе жесткий отбор без использования дополнительных параметров. Обратите внимание, что используя эту функцию в примере выше, в качестве входных параметров мы передавали только три числа (год, месяц, день). Последние три (час, минута, секунда) не являются обязательными и при отсутствии заменяются на «0», то есть начало дня. В рамках данного примера будут получены все файлы, присоединенные к авансовым отчетам до конца прошлого 2016 года. В связи с этим мы укажем час, минуту и секунду, чтобы сравнивать моментом времени «31 декабря 2016 г 23:59:59».
Пустая датаОсуществить проверку переменной на то, содержит ли она в себе незаполненную дату проще всего обычным сравнением. В этом примере мы, используя запрос, выберем все поступления денежных средств на р/с, у которых не заполнена входящая дата. СКД 1С расшифровывается как Система Компоновки Данных. СКД 1С – это новый способ написания отчетов в 1С, который позволяет пользователю полностью настраивать отчет самостоятельно. Минус СКД 1С в том, что его настройки достаточно сложны и не все пользователи усваивают их быстро. Написание отчетов СКД требует умение работать с запросами в 1С, что мы обсуждали в . Какова технология создания отчета СКД 1С:
Пользователю остается возможность изменить множество настроек по своему желанию. Какова технология создания отчета по предыдущим технологиям:
Как Вы видите, СКД 1С имеет значительное преимущество как для пользователя, так и для программиста:
Во всех новых конфигурациях 1С все отчеты будут использованы только на СКД 1С. Давайте посмотрим как создать отчет на СКД 1С самому с нуля. Создаем отчет СКД 1С В конфигураторе нажмите кнопку нового файла (меню Файл/Новый). Выберите тип файла Новый отчет. Будет создан новый отчет. Введем наименование – без пробелов для конфигурации, синоним для пользователя. Создадим основную схему СКД 1С. Создаем запрос для отчета СКД 1С Источников данных для СКД 1С может быть множество. Чтобы использовать, например, два отдельных запроса – добавьте сначала «Набор данных – объединение», а потом несколько запросов. В нашем примере мы будем использовать простой запрос. Набросаем запрос для получения данных. Работа с конструктором запроса ничем не отличается от обычной, мы обсуждали это в . В результате формирования запроса, СКД 1С создаст список доступных к использованию полей и заполнит им по умолчанию наименования. Если наименование неудобное, здесь его можно изменить. Обратите внимание, что мы использовали в запросе параметр &ДатаНачала. В СКД 1С есть параметр (дата) по умолчанию с названием &Период и Вы можете использовать его. Причем указывать его в запросе прямо не надо – он будет использован автоматически. Однако есть тонкость – он применяется ко всем таблицам, включая левые соединения и прочее, что может рождать ошибки. Например, Вы получаете остатки на начало месяца, а левым соединением получаете данные на сегодня. При использовании Период будет применен ко всем таблицам одинаково и запрос будет работать неверно. Настройки СКД 1С На закладке Ресурсы укажем те поля, которые будут суммироваться для итогов (т.е. цифры). У полей можно указать функцию суммирования. По умолчанию это Сумма (т.е. суммировать цифры из всех строк и получить итого), а можно использовать Среднее, Количество, Максимум и т.п. На закладке Параметры запретим ненужные нам, и включим нужные. Здесь же можно задать человеческое название параметра. Основная настройка производится на закладке Настройки: Откроем его в режиме Предприятие. Обратите внимание, что мы не занимались никаким программированием, рисованием форм и прочего. Чтобы задать параметр нажмите кнопку Настройки. Пользователь видит почти такую же форму настроек, как и программист. Вуаля. Отчет работает. Настройки СКД 1С Все настройки отчета СКД 1С производится с помощью нажатия на кнопку Настройки. По крайней мере в шаблоне по умолчанию. Существует возможность создать самому форму отчета СКД 1С и тогда настройки могут быть вынесены в другие формы, нарисованные программистом самостоятельно. Перетащим Склад из Колонки в Строки. Перетащим Номенклатуру на Склад. Нажмите ОК и сформируйте отчет. Ура – мы только что изменили работу отчета в режиме Программирование без программирования. Нажмите правой кнопкой на Строки (а можно на любое из полей) и выберите Новая группировка. Раскроем поле Склад и выберем одно из его полей, например Вид склада. Подумав, мы вспомнили, что хотелось бы, чтобы в одной колонке выводилось сразу несколько полей. Нажмите на только что созданное поле два раза левой кнопкой мыши. Здесь можно добавить поля. Если Вы добавите новую группировку, но поле не выберете, это означает «Все поля» (отображается как «Детальные записи»). Это выглядит так. Схватите левой кнопкой мыши нашу группировку (Склад/Номенклатура) и перетащите ее на новую группировку (Вид склада). Результат наших настроек. Кроме настроек, о действии которых легко догадаться по их названию (Отбор, Сортировка и т.п.) есть закладке «Другие настройки». Она позволяет разрешить или запретить такие вещи как отображение итогов, расположение группировок в колонках и т.п. Обратите внимание, что настройки могут быть заданы для всего отчета (выбран Отчет) или для конкретной строки полей (выберите строку, например Номенклатура, и выберите Настройки:Нонменклатура). Предположим, что нам поступила задача, по которой заказчик хочет получить отчет по введенным в базу документам "Реализация товаров и услуг", причем на каждый документ необходимо получать цену из регистра сведений "Цены номенклатуры" на дату документа. Отчет пишется для конфигурации "Управление производственным предприятием" версии 1.3. К записи из таблицы документа присоединяется запись из виртуальной таблицы "ЦеныНоменклатуры.СрезПоследний" по соответствующим условиям периода, типа цены и номенклатуры. Тип цены получаем из одноименного реквизита документа. Задача имеет несколько способов решения. Рассмотрим два из них: отчет на СКД с помощью двух наборов данных и получение всех необходимых данных в одном запросе. Теперь по порядку. Использование СКДДля реализации подобного отчета на СКД создадим в схеме компоновки данных два набора данных. Первый будет получать список документов, второй цены на даты документов по выбранной номенклатуре и типу цен. Связь между двумя наборами данных осуществляется по номенклатуре, периоду (дата документа) и типу цены. Из первого набора необходимо передвать параметры "Номенклатура", "ТипЦены" и "Период" во второй набор. Первый набор данных содержит следующий запрос: Запрос выбирает из таблицы документа и табличной части "Товары" поля: "Ссылка", "Дата", "ТипЦен", "Номенклатура". Теперь рассмотрим второй набор данных: Во втором наборе данных следует обратить внимание на параметры, передаваемые в запрос. В списке выбираемых полей содержатся параметры "Период, "Номенклатура" и "ТипЦены". Эти же параметры используются в параметрах виртуальной таблицы "ЦеныНоменклатуры.СрезПоследних". Выводить данные параметры в список выбираемых полей необходимо, чтобы из первого набора можно было передавать значения этих параметров во второй набор. Осуществляется это с помощью настроек соединения между наборами данных в вкладке конструктора схемы компоновки данных "Связи наборов данных". Перейдем к ее рассмотрению: Настройка связей между источниками данных осуществляется по поляем выборки в запросе. Во втором наборе данных в поля выборки мы добавили параметры запроса. При установке связей между наборами, если выбрать для связи поле в колонке "Параметр", значение из колонки "Выражение источник" будет передано в "Выражение приемник" и заполнит выбранный параметр соответствующим значением. Настроив структуру отчета и сформировав его, мы получим следующий результат: Отчет работает. Перейдем к рассмотрению варианты получения цены на дату документа в одном запросе. В одном запросеСоздадим новый отчет с аналогичными выходными полями и настройками отчета. Единственное отличие будет заключаться в источниках данных. На этот раз в отчете будет содержаться единственный набор данных, в котором одним запросом выбираются все товары документов и сопоставленные для них цены. Текст запроса выглядит следующим образом: "ВЫБРАТЬ | ДокументНоменклатураПериод.Документ, | ДокументНоменклатураПериод.Документ.Дата КАК Дата, | ДокументНоменклатураПериод.Документ.ТипЦен КАК ТипЦен, | ДокументНоменклатураПериод.Номенклатура, | ЦеныНоменклатуры.Цена |ИЗ | (ВЫБРАТЬ | РеализацияТоваровУслугТовары.Ссылка КАК Документ, | РеализацияТоваровУслугТовары.Номенклатура КАК Номенклатура, | МАКСИМУМ(ЦеныНоменклатуры.Период) КАК Период | ИЗ | Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры | ПО РеализацияТоваровУслугТовары.Номенклатура = ЦеныНоменклатуры.Номенклатура | И РеализацияТоваровУслугТовары.Ссылка.Дата >= ЦеныНоменклатуры.Период | И РеализацияТоваровУслугТовары.Ссылка.ТипЦен = ЦеныНоменклатуры.ТипЦен | | СГРУППИРОВАТЬ ПО | РеализацияТоваровУслугТовары.Ссылка, | РеализацияТоваровУслугТовары.Номенклатура) КАК ДокументНоменклатураПериод | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры | ПО ДокументНоменклатураПериод.Номенклатура = ЦеныНоменклатуры.Номенклатура | И ДокументНоменклатураПериод.Документ.ТипЦен = ЦеныНоменклатуры.ТипЦен | И ДокументНоменклатураПериод.Период = ЦеныНоменклатуры.Период" Принцип работы запроса заключается в получении к документe ближайшей даты изменения цены для каждой использованной номенклатуры в табличной части, а затем присоединение к полученному результату запроса данных из физической таблицы "Цены номенклатуры" по периоду, номенклатуре и типу цен. На первый взгляд, запрос может показаться сложным, однако на самом деле его синтаксис достаточно простой. Результат выполнения аналогичен результату предыдущего отчета (см. скриншот выше). Делайте выводыКакой вариант выполнения задачи лучше? Тут все зависит от конкретных условий. В некоторых ситуациях отчет из двух наборов данных будет работать быстрее, чем получение всех данных для отчета в одном запросе. В рамках статьи мы не сможем коснуться вопросов производительности для рассмотренных способов решения задачи. Также стоит помнить, что создание отчетов на основе таблиц документов не рекомендуется методикой разработки от фирмы 1С, так как считается, что информация в документах может быть не достоверной. Все отчеты необходимо строить на основании регистров. Язык выражений системы компоновки данныхЯзык выражений системы компоновки данных предназначен для записи выражений, используемых в различных частях системы. Выражения используются в следующих подсистемах:
ЛитералыВ выражении могут присутствовать литералы. Возможны литералы следующих типов:
СтрокаСтроковый литерал записывается в символах «”», например: “Строковой литерал“ При необходимости использования внутри строкового литерала символа «”», следует использовать два таких символов. Например: “Литерал ““в кавычках“““ ЧислоЧисло записывается без пробелов, в десятичном формате. Дробная часть отделяется при помощи символа «.». Например: 10.5 200 ДатаЛитерал типа дата записывается при помощи ключевого литерала ДАТАВРЕМЯ (DATETIME). После данного ключевого слова, в скобках, через запятую перечисляются год, месяц, день, часы, минуты, секунды. Указание времени не обязательно. Например: ДАТАВРЕМЯ(1975, 1, 06) – Шестое января 1975 года ДАТАВРЕМЯ(2006, 12, 2, 23, 56, 57) – Второе декабря 2006 года, 23 часа 56 минут 57 секундода, 23 часа 56 минут 57 секунд БулевоБулевы значения могут быть записаны при помощи литералов Истина (True), Ложь (False). ЗначениеДля указания литералов других типов (системных перечислений, предопределенных данных) используется ключевое слово Значение, после которого в скобках идет указание имени литерала. Значение(ВидСчета. Активный) Операции над числамиУнарный –Данная операция предназначена для изменения знака числа на обратный. Например: Продажи.Количество Унарный +Данная операция не выполняет над числом никаких действий. Например: Продажи.Количество Бинарный -Данная операция предназначена для вычисления разности двух чисел. Например: ОстаткиИОбороты.НачальныйОстаток – ОстаткиИОбороты.КонечныйОстаток ОстаткиИОбороты.НачальныйОстаток - 100 400 – 357 Бинарный +Данная операция предназначена для вычисления суммы двух чисел. Например: ОстаткиИОбороты.НачальныйОстаток + ОстаткиИОбороты.Оборот ОстаткиИОбороты.НачальныйОстаток + 100 400 + 357 ПроизведениеДанная операция предназначена для вычисления произведения двух чисел. Например: Номенклатура.Цена * 1.2 2 * 3.14 ДелениеДанная операция предназначена для получения результата деления одного операнда на другой. Например: Номенклатура.Цена / 1.2 2 / 3.14 Остаток от деленияДанная операция предназначена для получения остатка от деления одного операнда на другой. Например: Номенклатура.Цена % 1.2 2 % 3.14 Операции над строкамиКонкатенация (Бинарный +)Данная операция предназначена для конкатенации двух строк. Например: Номенклатура.Артикул + “: ”+ Номенклатура.Наименование ПодобноДанная операция проверяет соответствие строки переданному шаблону. Значением оператора ПОДОБНО является ИСТИНА, если значение <Выражения> удовлетворяет шаблону, и ЛОЖЬ в противном случае. Следующие символы в <Строке_шаблона> имеют смысл, отличный от просто очередного символа строки:
Любой другой символ означает сам себя и не несет никакой дополнительной нагрузки. Если в качестве самого себя необходимо записать один из перечисленных символов, то ему должен предшествовать <Спецсимвол>, указанный после ключевого слова СПЕЦСИМВОЛ (ESCAPE). Например, шаблон “%АБВ[абвг]\_абв%” СПЕЦСИМВОЛ “\” означает подстроку, состоящую из последовательности символов: буквы А; буквы Б; буквы В; одной цифры; одной из букв а, б, в или г; символа подчеркивания; буквы а; буквы б; буквы в. Причем эта последовательность может располагаться, начиная с произвольной позиции в строке. Операции сравненияРавноДанная операция предназначена для сравнения двух операндов на равенство. Например: Продажи.Контрагент = Продажи.НоменклатураОсновнойПоставщик Не равноДанная операция предназначена для сравнения двух операндов на неравенство. Например: Продажи.Контрагент <> Продажи.НоменклатураОсновнойПоставщик МеньшеДанная операция предназначена для проверки того, что первый операнд меньше второго. Например: ПродажиТекщие.Сумма < ПродажиПрошлые.Сумма БольшеДанная операция предназначена для проверки того, что первый операнд больше второго. Например: ПродажиТекщие.Сумма > ПродажиПрошлые.Сумма Меньше или равноДанная операция предназначена для проверки того, что первый операнд меньше либо равен второму. Например: ПродажиТекщие.Сумма <= ПродажиПрошлые.Сумма Больше или равноДанная операция предназначена для проверки того, что первый операнд больше либо равен второму. Например: ПродажиТекщие.Сумма >= ПродажиПрошлые.Сумма Операция ВДанная операция осуществляет проверку наличия значения в переданном списке значений. Результатом операции будет Истина, в случае, если значение найдено, или Ложь - в противном случае. Например: Номенклатура В (&Товар1, &Товар2) Операция проверки наличия значения в наборе данныхОперация осуществляет проверку наличия значения в указанном наборе данных. Набор данных для проверки должен содержать одно поле. Например: Продажи.Контрагент В Контрагенты Операция проверки значения на NULLДанная операция возвращает значение Истина в случае, если значение является значением NULL. Например: Продажи.Контрагент ЕСТЬ NULL Операция проверки значения на неравенство NULLДанная операция возвращает значение Истина в случае, если значение не является значением NULL. Например: Продажи.Контрагент ЕСТЬ НЕ NULL Логические операцииЛогические операции принимают в качестве операндов выражения, имеющие тип Булево. Операция НЕОперация НЕ возвращает значение Истина в случае, если ее операнд имеет значение Ложь, и значение Ложь в случае, если ее операнд имеет значение Истина. Например: НЕ Документ.Грузополучатель = Документ.Грузоотправитель Операция ИОперация И возвращает значение Истина в случае, если оба операнда имеют значение Истина, и значение Ложь в случае, если один из операндов имеет значение Ложь. Например: Документ.Грузополучатель = Документ.Грузоотправитель И Документ.Грузополучатель = &Контрагент Операция ИЛИОперация ИЛИ возвращает значение Истина в случае, если один из операндов имеет значение Истина, и Ложь в случае, если оба операнда имеют значение Ложь. Например: Документ.Грузополучатель = Документ.Грузоотправитель ИЛИ Документ.Грузополучатель = &Контрагент Агрегатные функцииАгрегатные функции осуществляют некоторое действие над набором данных. СуммаАгрегатная функция Сумма рассчитывает сумму значений выражений, переданных ей в качестве аргумента для всех детальных записей. Например: Сумма(Продажи.СуммаОборот) КоличествоФункция Количество рассчитывает количество значений отличных от значения NULL. Например: Количество(Продажи.Контрагент) Количество различныхЭта функция рассчитывает количество различных значений. Например: Количество(Различные Продажи.Контрагент) МаксимумФункция получает максимальное значение. Например: Максимум(Остатки.Количество) МинимумФункция получает минимальное значение. Например: Минимум(Остатки.Количество) СреднееФункция получает среднее значение для значений, отличных от NULL. Например: Среднее(Остатки.Количество) Другие операцииОперация ВЫБОРОперация Выбор предназначена для осуществления выбора одного из нескольких значений при выполнении некоторых условий. Например: Выбор Когда Сумма > 1000 Тогда Сумма Иначе 0 Конец Правила сравнения двух значенийЕсли типы сравниваемых значений отличаются друг от друга, то отношения между значениями определяются на основании приоритета типов:
Отношения между различными ссылочными типами определяются на основе ссылочных номеров таблиц, соответствующих тому или иному типу. Если типы данных совпадают, то производится сравнение значений по следующим правилам:
Работа со значением NULLЛюбая операция, в которой значение одного из операндов NULL, будет давать результат NULL. Есть исключения:
Приоритеты операцийОперации имеют следующие приоритеты (первая строка имеет низший приоритет):
Функции языка выражений системы компоновки данныхВычислитьФункция Вычислить предназначена для вычисления выражения в контексте некоторой группировки. Функция имеет следующие параметры:
В данном примере в результате получится отношение суммы по полю "Продажи.СуммаОборот" записи группировки к сумме того же поля во всей компоновке. УровеньФункция предназначена для получения текущего уровня записи. Уровень() НомерПоПорядкуПолучить следующий порядковый номер. НомерПоПорядку() НомерПоПорядкуВГруппировкеВозвращает следующий порядковый номер в текущей группировке. НомерПоПорядкуВГруппировке() ФорматПолучить отформатированную строку переданного значения. Форматная строка задается в соответствии с форматной строкой 1С:Предприятие. Параметры:
Формат(РасходныеНакладные.СуммаДок, "ЧДЦ=2") НачалоПериодаПараметры:
НачалоПериода(ДатаВремя(2002, 10, 12, 10, 15, 34), "Месяц") Результат: 01.10.2002 0:00:00 КонецПериодаФункция предназначена для выделения определенной даты из заданной даты. Параметры:
КонецПериода(ДатаВремя(2002, 10, 12, 10, 15, 34), "Неделя") Результат: 13.10.2002 23:59:59 ДобавитьКДатеФункция предназначена для прибавления к дате некоторой величины. Параметры:
ДобавитьКДате(ДатаВремя(2002, 10, 12, 10, 15, 34), "Месяц", 1) Результат: 12.11.2002 10:15:34 РазностьДатФункция предназначена для получения разницы между двумя датами. Параметры:
РАЗНОСТЬДАТ(ДАТАВРЕМЯ(2002, 10, 12, 10, 15, 34), ДАТАВРЕМЯ(2002, 10, 14, 9, 18, 06), "ДЕНЬ") Результат: ПодстрокаДанная функция предназначена для выделения подстроки из строки. Параметры:
ПОДСТРОКА(Контрагенты.Адрес, 1, 4) ДлинаСтрокиФункция предназначена для определения длины строки. Параметр:
Строка(Контрагенты.Адрес) ГодДанная функция предназначена для выделения года из значения типа Дата. Параметр:
ГОД(РасхНакл.Дата) КварталДанная функция предназначена для выделения номера квартала из значения типа Дата. Номер квартала в норме находится в диапазоне от 1 до 4. Параметр
МесяцДанная функция предназначена для выделения номера месяца из значения типа Дата. Номер месяца в норме находится в диапа-зоне от 1 до 12.
ДеньГодаДанная функция предназначена для получения дня года из значения типа Дата. День года в норме находится в диапазоне от 1 до 365(366).
ДеньДанная функция предназначена для получения дня месяца из значения типа Дата. День месяца в норме находится в диапазоне от 1 до 31.
НеделяДанная функция предназначена для получения номера недели года из значения типа Дата. Недели года нумеруются, начиная с 1.
ДеньНеделиДанная функция предназначена для получения дня недели из значения типа Дата. День недели в норме находится в диапазоне от 1 (понедельник) до 7(воскресенье).
ЧасДанная функция предназначена для получения часа суток из значения типа Дата. Час суток находится в диапазоне от 0 до 23.
МинутаДанная функция предназначена для получения минуты часа из значения типа Дата. Минута часа находится в диапазоне от 0 до 59.
СекундаДанная функция предназначена для получения секунды минуты из значения типа Дата. Секунда минуты находится в диапазоне от 0 до 59.
ВыразитьДанная функция предназначена для выделения типа из выражения, которое может содержать составной тип. В случае, если выражение будет содержать тип, отличный от требуемого типа, будет возвращено значение NULL. Параметры:
Выразить(Данные.Реквизит1, "Число(10,3)") ЕстьNullДанная функция возвращает значение второго параметра в случае, если значение первого параметра NULL. В противном случае будет возвращено значение первого параметра. ЕстьNULL(Сумма(Продажи.СуммаОборот), 0) Функции общих модулейВыражение механизма компоновки данных может содержать вызовы функций глобальных общих модулей конфигурации. Никакого дополнительно синтаксиса для вызова таких функций не требуется. В данном примере будет осуществлен вызов функции "СокращенноеНаименование" из общего модуля конфигурации. Отметим, что использование функций общих модулей разрешено только при указании соответствующего параметра процессора компоновки данных. Кроме того, функции общих модулей не могут быть использованы в выражениях пользовательских полей. В свете ближайшего выхода 8.2.14, попытаюсь описать некоторые новые функции системы компоновки данных. Открываем схему компоновки данных, желательно во внешнем отчете, чтобы было проще редактировать. Добавляем набор данных типа запрос и пишем, либо вручную, либо с помощью конструктора запросов простейший запрос: 1. Настраиваем запрос в СКД. 2. Настраиваем вычисляемые поля в СКД 3. Выполняем настройку компоновки данных на закладке настройки 4. Запускаем 1С Предприятие 8.2.14. Открываем отчет. Формируем, получаем. Описание самих новых функций: 1. ТекущаяДата() Возвращает системную дату. При компоновке макета компоновки во всех выражениях, которые присутствуют в компоновке, функция ТекущаяДата() заменяется значением текущей даты. 2. ВЫЧИСЛИТЬВЫРАЖЕНИЕ() Синтаксис: ВычислитьВыражение(,) Описание: Функция предназначена для вычисления выражения в контексте некоторой группировки. Функция учитывает отбор группировок, но не учитывает иерархические отборы. Функция не может применяться к группировке в групповом отборе этой группировки. Например, в отборе группировки Номенклатура нельзя использовать выражение ВычислитьВыражение(«Сумма(СуммаОборот)", «ОбщийИтог») > 1000 . Но такое выражение можно использовать в иерархическом отборе. Если конечная запись предшествует начальной, то считается, что записи для расчета детальных данных и расчета агрегатных функций отсутствуют. При расчете интервальных выражений для общего итога (параметр Группировка имеет значение ОбщийИтог ) считается, что записи для расчета детальных данных и расчета агрегатных функций отсутствуют. Компоновщик макета при генерации выражения функции ВычислитьВыражение , в случае если выражение упорядочивания содержит поля, которые не могут быть использованы в группировке, заменяет функцию ВычислитьВыражение на NULL . Параметры Тип: Строка . Выражение, которое надо вычислить. Тип: Строка . Содержит имя группировки, в контексте которой необходимо вычислить выражение. В случае если в качестве имени группировки используется пустая строка, вычисление будет выполнено в контексте текущей группировки. В случае если в качестве имени группировки будет использована строка ОбщийИтог , вычисление будет выполнено в контексте общего итога. В остальных случаях вычисление будет выполняться в контексте родительской группировки с таким именем. Например: Сумма(Продажи.СуммаОборот)/Вычислить("Сумма(Продажи.СуммаОборот)", "ОбщийИтог") В данном примере в результате получится отношение суммы по полю Продажи.СуммаОборот записи группировки к сумме того же поля во всей компоновке; Тип: Строка . Параметр может принимать следующие значения: · ОбщийИтог — выражение будет вычисляться для всех записей группировки. · Иерархия — выражение будет вычисляться для родительской иерархической записи, если таковая имеется, и для всей группировки, если родительской иерархической записи не имеется. · Группировка — выражение будет вычисляться для текущей групповой записи группировки. · ГруппировкаНеРесурса — при вычисление функции для групповой записи по ресурсам, выражение будет вычислено для первой групповой записи исходной группировки. При вычислении функции ВычислитьВыражение() со значением ГруппировкаНеРесурса для групповых записей, не являющихся группировками по ресурсам, функция вычисляется так же, как бы она вычислялась в том случае, если значение параметра было равно значению Группировка . Компоновщик макета компоновки данных при генерации макета компоновки данных при выводе в макет поля-ресурса, по которому выполняется группировка, помещает в макет выражение, вычисляемое при помощи функции ВычислитьВыражение() , с указанием параметра ГруппировкаНеРесурса . Для остальных ресурсов в группировке по ресурсу помещаются обычные выражения ресурсов. Тип: Строка . Указывает, с какой записи нужно начинать фрагмент, в котором рассчитывать агрегатные функции выражения и из какой записи получать значения полей вне агрегатных функций. Значение может быть одним из следующих: · Первая (First ) · Последняя (Last ) · Предыдущая (Previous ) · Следующая (Next ) · Текущая (Current ) · ОграничивающееЗначение (BoundaryValue ) ОграничивающееЗначение Тип: Строка . Указывает, до какой записи нужно продолжать фрагмент, в котором рассчитывать агрегатные функции выражения. Значение может быть одним из следующих: · Первая (First ) . Необходимо получать первую запись группировки. После слова в скобках можно указывать выражение, результат которого будет использоваться как смещение от начала группировки. Получаемое значение должно целым быть числом, больше нуля. Например, Первая(3) - получение третьей записи от начала группировки. Если первая запись выходит за пределы группировки, то считается, что записей нет. Например, если записей 3, а требуется получить Первая(4) , то считается, что записей нет. · Последняя (Last ) . Необходимо получить последнюю запись группировки. После слова в скобках можно указывать выражение, результат которого будет использоваться как смещение от конца группировки. Получаемое значение должно целым быть числом, больше нуля. Например, Последняя(3) - получение третьей записи от конца группировки. Если последняя запись выходит за пределы группировки, то считается, что записей нет. Например, если записей 3, а требуется получить Последняя(4) , то считается, что записей нет. · Предыдущая (Previous ) . Необходимо получить предыдущую запись группировки. После слова в скобках можно указывать выражение, результат которого будет использоваться как смещение назад от текущей записи группировки. Например, Предыдущая(2) - получение предыдущей от предыдущей записи. Если предыдущая запись выходит за пределы группировки (например, для второй записи группировки требуется получить Предыдущая(3) , то получается первая запись группировки. При получении предыдущей записи для итога по группировке считается, что получается первая запись. · Следующая (Next ) . Необходимо получить следующую запись группировки. После слова в скобках можно указывать выражение, результат которого будет использоваться как смещение вперед от текущей записи группировки. Например, Следующая(2) - получение следующей от следующей записи. Если следующая запись выходит за пределы группировки, то считается, что записей нет. Например, если записей 3 и для третьей записи получают Следующая() , то считается, что записей нет. При получении следующей записи для итога по группировке считается, что записи нет. · Текущая (Current ) . Необходимо получить текущую запись. При получении для итога по группировке получается первая запись. · ОграничивающееЗначение (BoundaryValue ) . Необходимость получить запись по указанному значению. После слова ОграничивающееЗначение в скобках нужно указать выражение, со значения которого нужно начинать фрагмент, первого поля упорядочивания. В качестве записи будет получаться первая запись, значение поля упорядочивания у которой больше или равно указанному значению. Например, если в качестве поля упорядочивания используется поле Период , и оно имеет значения 01.01.2010 , 01.02.2010 , 01.03.2010 , и требуется получить ОграничивающееЗначение(ДатаВремя(2010, 1, 15)) , то будет получена запись с датой 01.02.2010 . Тип: Строка . Перечисляются выражения, разделенные запятыми, которые описываютправила упорядочивания. Если не указана, то упорядочивание выполняется также как и у группировки, для которой вычисляется выражение. После каждого выражения можно указать ключевое слово Возр (для упорядочивания по возрастанию), Убыв (для упорядочивания по убывания) и Автоупорядочивание (для упорядочивания ссылочных полей по полям, по которым нужно упорядочивать объект, на который выполняется ссылка). Слово Автоупорядочивание может использоваться как со словом Возр , так и со словом Убыв . Тип: Строка . Аналогично параметру Сортировка . Применяется для упорядочивания иерархических записей. Если не указано, компоновщик макета генерирует упорядочивание в соответствии с упорядочиванием, указанным в параметре Сортировка . Тип: Строка . Указывает правило определения предыдущей или следующий записи в случае если есть несколько записей с одинаковым значением упорядочивания: · Отдельно (Separately ) обозначает, что для определения предыдущей и следующей записей используется последовательность упорядоченных записей. Значение по умолчанию. · Вместе (Together ) обозначает, что предыдущая и следующие записи определяются на основании значений выражений упорядочивания. Например, если полученная последовательность упорядочена по дате:
Отдельно , то: § предыдущей записью к записи 3 будет запись 2. Текущая, Текущая (соответственно, параметры Начало и Конец ), то для записи 2 этот фрагмент будет состоять из одной записи 2. Выражение будет равно 20. Если значение параметра равно Вместе , то: § предыдущей записью к записи 3 будет запись 1. § если расчетный фрагмент определяется как Текущая, Текущая (соответственно, параметры Начало и Конец ), то для записи 2 этот фрагмент будет состоять из записей 2 и 3. Выражение ВычислитьВыражение(«Сумма(Значение)", Текущая, Текущая) будет равно 50. При указании значение параметра равного Вместе , в параметрах Начало и Конец нельзя указывать смещение для позиций Первая , Последняя , Предыдущая , Следующая . ВычислитьВыражение("Сумма(СуммаОборот)", "Первая", "Текущая") Если требуется получить значение группировки в предыдущей строке, то можно использовать следующее выражение: ВычислитьВыражение("Курс", "Предыдущая") Список новых функций:ВычислитьВыражениеСГруппировкойМассив (,) - Функция возвращает массив, каждый элемент которого содержит результат вычисления выражения для группировки по указанному полю. ВычислитьВыражениеСГруппировкойТаблицаЗначений (,) - Функция возвращает таблицу значений, каждая строка которой содержит результат вычисления выражений для группировки по указанному полю ЗначениеЗаполнено () - Возвращает Истина , если значение отлично от значения данного типа по умолчанию, отлично от значения NULL , отлично от пустой ссылки, отлично от значения Неопределено . Для логических значений осуществляется проверка на значение NULL . Для строк осуществляется проверка на отсутствие не пробельных символов Формат (, ) - Получить отформатированную строку переданного значения. Форматная строка задается в соответствии с форматной строкой системы «1С:Предприятие». Подстрока (, , ) - Данная функция предназначена для выделения подстроки из строки. ДлинаСтроки () - Функция предназначена для определения длины строки. Параметр — выражение строкового типа Строка () - Если в качестве параметра передан массив, то функция возвращает строку, содержащую строковые представления всех элементов массива, разделенных символами "; ". Если в качестве параметра передана таблица значений, то функция возвращает строку, содержащую строковые представления всех строк таблицы значений, причем представления ячеек каждой строки разделяются символами "; ", а строки — смиволом перевода строки. Если у какого либо элемента строковое представление пустое, то вместо его представления выводится строка. |
Читайте: |
---|
Популярное:
Новое
- Лучшие процессоры Intel с архитектурой Kaby Lake
- Whatsapp перевод на русский язык — Как переводится WhatsApp (перевод Ватсап с английского на русский) Что значит ватсап перевод
- Не обновляется прошивка на Xiaomi Miui не обновляется
- Как разблокировать телефон "Мегафона" для других операторов?
- Java Update Scheduler что это за программа и нужна ли она?
- Samsung Galaxy Note N7000 - Технические характеристики
- Как настроить почту на андроиде
- Смартфон Tele2 Mini: подробный обзор модели Мобильный телефон теле2 mini характеристики
- Сервисный центр lenovo Безопасная прошивка на леново а319
- Что делать, если не скачивается файл с Интернета?