Как в скд задать текущую дату. Получение в запросе цен на дату документа. Правила сравнения двух значений

21.12.2023

Язык выражений системы компоновки данных

Язык выражений системы компоновки данных предназначен для записи выражений, используемых в различных частях системы.

Выражения используются в следующих подсистемах:

  • схема компоновки данных - для описания вычисляемых полей, полей итогов, выражений связи и т.д.;
  • настройки компоновки данных - для описания выражений пользовательских полей;
  • макет компоновки данных - для описания выражений связи наборов данных, описания параметров макета и т.д.

Литералы

В выражении могут присутствовать литералы. Возможны литералы следующих типов:

  • Строка;
  • Число;
  • Дата;
  • Булево.

Строка

Строковый литерал записывается в символах «”», например:

“Строковой литерал“

При необходимости использования внутри строкового литерала символа «”», следует использовать два таких символов.

Например:

“Литерал ““в кавычках“““

Число

Число записывается без пробелов, в десятичном формате. Дробная часть отделяется при помощи символа «.». Например:

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

Операции над строками

Конкатенация (Бинарный +)

Данная операция предназначена для конкатенации двух строк. Например:

Номенклатура.Артикул + “: ”+ Номенклатура.Наименование

Подобно

Данная операция проверяет соответствие строки переданному шаблону.

Значением оператора ПОДОБНО является ИСТИНА, если значение <Выражения> удовлетворяет шаблону, и ЛОЖЬ в противном случае.

Следующие символы в <Строке_шаблона> имеют смысл, отличный от просто очередного символа строки:

  • % - процент: последовательность, содержащая ноль и более произвольных символов;
  • _ - подчеркивание: один произвольный символ;
  • […] - один или несколько символов в квадратных скобках: один символ, любой из перечисленных внутри квадратных скобок. В перечислении могут встречаться диапазоны, например a-z, означающие произвольный символ, входящий в диапазон, включая концы диапазона;
  • [^…] - в квадратных скобках значок отрицания, за которым следует один или несколько символов: любой символ, кроме тех, которые перечислены следом за значком отрицания;

Любой другой символ означает сам себя и не несет никакой дополнительной нагрузки. Если в качестве самого себя необходимо записать один из перечисленных символов, то ему должен предшествовать <Спецсимвол>, указанный после ключевого слова СПЕЦСИМВОЛ (ESCAPE).

Например, шаблон

“%АБВ[абвг]\_абв%” СПЕЦСИМВОЛ “\”

означает подстроку, состоящую из последовательности символов: буквы А; буквы Б; буквы В; одной цифры; одной из букв а, б, в или г; символа подчеркивания; буквы а; буквы б; буквы в. Причем эта последовательность может располагаться, начиная с произвольной позиции в строке.

Операции сравнения

Равно

Данная операция предназначена для сравнения двух операндов на равенство. Например:

Продажи.Контрагент = Продажи.НоменклатураОсновнойПоставщик

Не равно

Данная операция предназначена для сравнения двух операндов на неравенство. Например:

Продажи.Контрагент <> Продажи.НоменклатураОсновнойПоставщик

Меньше

Данная операция предназначена для проверки того, что первый операнд меньше второго. Например:

ПродажиТекщие.Сумма < ПродажиПрошлые.Сумма

Больше

Данная операция предназначена для проверки того, что первый операнд больше второго. Например:

ПродажиТекщие.Сумма > ПродажиПрошлые.Сумма

Меньше или равно

Данная операция предназначена для проверки того, что первый операнд меньше либо равен второму. Например:

ПродажиТекщие.Сумма <= ПродажиПрошлые.Сумма

Больше или равно

Данная операция предназначена для проверки того, что первый операнд больше либо равен второму. Например:

ПродажиТекщие.Сумма >= ПродажиПрошлые.Сумма

Операция В

Данная операция осуществляет проверку наличия значения в переданном списке значений. Результатом операции будет Истина, в случае, если значение найдено, или Ложь - в противном случае. Например:

Номенклатура В (&Товар1, &Товар2)

Операция проверки наличия значения в наборе данных

Операция осуществляет проверку наличия значения в указанном наборе данных. Набор данных для проверки должен содержать одно поле. Например:

Продажи.Контрагент В Контрагенты

Операция проверки значения на NULL

Данная операция возвращает значение Истина в случае, если значение является значением NULL. Например:

Продажи.Контрагент ЕСТЬ NULL

Операция проверки значения на неравенство NULL

Данная операция возвращает значение Истина в случае, если значение не является значением NULL. Например:

Продажи.Контрагент ЕСТЬ НЕ NULL

Логические операции

Логические операции принимают в качестве операндов выражения, имеющие тип Булево.

Операция НЕ

Операция НЕ возвращает значение Истина в случае, если ее операнд имеет значение Ложь, и значение Ложь в случае, если ее операнд имеет значение Истина. Например:

НЕ Документ.Грузополучатель = Документ.Грузоотправитель

Операция И

Операция И возвращает значение Истина в случае, если оба операнда имеют значение Истина, и значение Ложь в случае, если один из операндов имеет значение Ложь. Например:

Документ.Грузополучатель = Документ.Грузоотправитель И Документ.Грузополучатель = &Контрагент

Операция ИЛИ

Операция ИЛИ возвращает значение Истина в случае, если один из операндов имеет значение Истина, и Ложь в случае, если оба операнда имеют значение Ложь. Например:

Документ.Грузополучатель = Документ.Грузоотправитель ИЛИ Документ.Грузополучатель = &Контрагент

Агрегатные функции

Агрегатные функции осуществляют некоторое действие над набором данных.

Сумма

Агрегатная функция Сумма рассчитывает сумму значений выражений, переданных ей в качестве аргумента для всех детальных записей. Например:

Сумма(Продажи.СуммаОборот)

Количество

Функция Количество рассчитывает количество значений отличных от значения NULL. Например:

Количество(Продажи.Контрагент)

Количество различных

Эта функция рассчитывает количество различных значений. Например:

Количество(Различные Продажи.Контрагент)

Максимум

Функция получает максимальное значение. Например:

Максимум(Остатки.Количество)

Минимум

Функция получает минимальное значение. Например:

Минимум(Остатки.Количество)

Среднее

Функция получает среднее значение для значений, отличных от NULL. Например:

Среднее(Остатки.Количество)

Другие операции

Операция ВЫБОР

Операция Выбор предназначена для осуществления выбора одного из нескольких значений при выполнении некоторых условий. Например:

Выбор Когда Сумма > 1000 Тогда Сумма Иначе 0 Конец

Правила сравнения двух значений

Если типы сравниваемых значений отличаются друг от друга, то отношения между значениями определяются на основании приоритета типов:

  • NULL (самый низший);
  • Булево;
  • Число;
  • Дата;
  • Строка;
  • Ссылочные типы

Отношения между различными ссылочными типами определяются на основе ссылочных номеров таблиц, соответствующих тому или иному типу.

Если типы данных совпадают, то производится сравнение значений по следующим правилам:

  • у типа Булево значение ИСТИНА больше значения ЛОЖЬ;
  • у типа Число обычные правила сравнения для чисел;
  • у типа Дата более ранние даты меньше более поздних;
  • у типа Строка - сравнения строк в соответствии с установленными национальными особенностями базы данных;
  • ссылочные типы сравниваются на основе своих значений (номера записи и т. п.).

Работа со значением NULL

Любая операция, в которой значение одного из операндов NULL, будет давать результат NULL.

Есть исключения:

  • операция И будут возвращать NULL только в случае, если ни один из операндов не имеет значение Ложь;
  • операция ИЛИ будет возвращать 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)

Функции общих модулей

Выражение механизма компоновки данных может содержать вызовы функций глобальных общих модулей конфигурации. Никакого дополнительно синтаксиса для вызова таких функций не требуется.

В данном примере будет осуществлен вызов функции "СокращенноеНаименование" из общего модуля конфигурации.

Отметим, что использование функций общих модулей разрешено только при указании соответствующего параметра процессора компоновки данных.

Кроме того, функции общих модулей не могут быть использованы в выражениях пользовательских полей.

При довольно часть встречается необходимость работы с переменными типа «Дата». В данной статье мы рассмотрим основные приемы — передача текущей даты, проверка на пустое значение, произвольная дата.

При написании запросов зачастую необходимо сравнивать данные с текущей датой. Во встроенном языке 1С есть функция ТекущаяДата(). Она позволяет определить текущее время и дату на компьютере. Для произведения операций с текущей датой необходимо передавать в запрос значение этой функции в качестве параметра.

Ниже представлен запрос, выбирающий все файлы, присоединенные к авансовым отчетам с датой создания до настоящего момента:

ПримерЗапроса = Новый Запрос;
ПримерЗапроса.Текст =«
|ВЫБРАТЬ
| АвансовыйОтчетПрисоединенныеФайлы.Ссылка
|ИЗ
| Справочник.АвансовыйОтчетПрисоединенныеФайлыКАК АвансовыйОтчетПрисоединенныеФайлы
|ГДЕ
| АвансовыйОтчетПрисоединенныеФайлы.Дата < &ТекДата»;
ПримерЗапроса.УстановитьПараметр(«ТекДата», ТекущаяДата());

Произвольная дата

Рассмотренная выше функция позволяет сравнивать и, следовательно, производить отбор по любому периоду. Такой способ позволяет задать в запросе жесткий отбор без использования дополнительных параметров.

Обратите внимание, что используя эту функцию в примере выше, в качестве входных параметров мы передавали только три числа (год, месяц, день). Последние три (час, минута, секунда) не являются обязательными и при отсутствии заменяются на «0», то есть начало дня.

В рамках данного примера будут получены все файлы, присоединенные к авансовым отчетам до конца прошлого 2016 года. В связи с этим мы укажем час, минуту и секунду, чтобы сравнивать моментом времени «31 декабря 2016 г 23:59:59».

ВЫБРАТЬ
АвансовыйОтчетПрисоединенныеФайлы.Ссылка
ИЗ
Справочник.АвансовыйОтчетПрисоединенныеФайлы КАК АвансовыйОтчетПрисоединенныеФайлы
ГДЕ
АвансовыйОтчетПрисоединенныеФайлы.Дата < ДАТАВРЕМЯ(2016, 12, 31, 23, 59, 59)

Пустая дата

Осуществить проверку переменной на то, содержит ли она в себе незаполненную дату проще всего обычным сравнением. В этом примере мы, используя запрос, выберем все поступления денежных средств на р/с, у которых не заполнена входящая дата.

Предположим, что нам поступила задача, по которой заказчик хочет получить отчет по введенным в базу документам "Реализация товаров и услуг", причем на каждый документ необходимо получать цену из регистра сведений "Цены номенклатуры" на дату документа. Отчет пишется для конфигурации "Управление производственным предприятием" версии 1.3.

К записи из таблицы документа присоединяется запись из виртуальной таблицы "ЦеныНоменклатуры.СрезПоследний" по соответствующим условиям периода, типа цены и номенклатуры. Тип цены получаем из одноименного реквизита документа.

Задача имеет несколько способов решения. Рассмотрим два из них: отчет на СКД с помощью двух наборов данных и получение всех необходимых данных в одном запросе. Теперь по порядку.

Использование СКД

Для реализации подобного отчета на СКД создадим в схеме компоновки данных два набора данных. Первый будет получать список документов, второй цены на даты документов по выбранной номенклатуре и типу цен. Связь между двумя наборами данных осуществляется по номенклатуре, периоду (дата документа) и типу цены. Из первого набора необходимо передвать параметры "Номенклатура", "ТипЦены" и "Период" во второй набор.

Первый набор данных содержит следующий запрос:

Запрос выбирает из таблицы документа и табличной части "Товары" поля: "Ссылка", "Дата", "ТипЦен", "Номенклатура". Теперь рассмотрим второй набор данных:

Во втором наборе данных следует обратить внимание на параметры, передаваемые в запрос. В списке выбираемых полей содержатся параметры "Период, "Номенклатура" и "ТипЦены". Эти же параметры используются в параметрах виртуальной таблицы "ЦеныНоменклатуры.СрезПоследних". Выводить данные параметры в список выбираемых полей необходимо, чтобы из первого набора можно было передавать значения этих параметров во второй набор. Осуществляется это с помощью настроек соединения между наборами данных в вкладке конструктора схемы компоновки данных "Связи наборов данных". Перейдем к ее рассмотрению:

Настройка связей между источниками данных осуществляется по поляем выборки в запросе. Во втором наборе данных в поля выборки мы добавили параметры запроса. При установке связей между наборами, если выбрать для связи поле в колонке "Параметр", значение из колонки "Выражение источник" будет передано в "Выражение приемник" и заполнит выбранный параметр соответствующим значением.

Настроив структуру отчета и сформировав его, мы получим следующий результат:

Отчет работает. Перейдем к рассмотрению варианты получения цены на дату документа в одном запросе.

В одном запросе

Создадим новый отчет с аналогичными выходными полями и настройками отчета. Единственное отличие будет заключаться в источниках данных. На этот раз в отчете будет содержаться единственный набор данных, в котором одним запросом выбираются все товары документов и сопоставленные для них цены. Текст запроса выглядит следующим образом:

"ВЫБРАТЬ | ДокументНоменклатураПериод.Документ, | ДокументНоменклатураПериод.Документ.Дата КАК Дата, | ДокументНоменклатураПериод.Документ.ТипЦен КАК ТипЦен, | ДокументНоменклатураПериод.Номенклатура, | ЦеныНоменклатуры.Цена |ИЗ | (ВЫБРАТЬ | РеализацияТоваровУслугТовары.Ссылка КАК Документ, | РеализацияТоваровУслугТовары.Номенклатура КАК Номенклатура, | МАКСИМУМ(ЦеныНоменклатуры.Период) КАК Период | ИЗ | Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры | ПО РеализацияТоваровУслугТовары.Номенклатура = ЦеныНоменклатуры.Номенклатура | И РеализацияТоваровУслугТовары.Ссылка.Дата >= ЦеныНоменклатуры.Период | И РеализацияТоваровУслугТовары.Ссылка.ТипЦен = ЦеныНоменклатуры.ТипЦен | | СГРУППИРОВАТЬ ПО | РеализацияТоваровУслугТовары.Ссылка, | РеализацияТоваровУслугТовары.Номенклатура) КАК ДокументНоменклатураПериод | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры | ПО ДокументНоменклатураПериод.Номенклатура = ЦеныНоменклатуры.Номенклатура | И ДокументНоменклатураПериод.Документ.ТипЦен = ЦеныНоменклатуры.ТипЦен | И ДокументНоменклатураПериод.Период = ЦеныНоменклатуры.Период"

Принцип работы запроса заключается в получении к документe ближайшей даты изменения цены для каждой использованной номенклатуры в табличной части, а затем присоединение к полученному результату запроса данных из физической таблицы "Цены номенклатуры" по периоду, номенклатуре и типу цен. На первый взгляд, запрос может показаться сложным, однако на самом деле его синтаксис достаточно простой.

Результат выполнения аналогичен результату предыдущего отчета (см. скриншот выше).

Делайте выводы

Какой вариант выполнения задачи лучше? Тут все зависит от конкретных условий. В некоторых ситуациях отчет из двух наборов данных будет работать быстрее, чем получение всех данных для отчета в одном запросе. В рамках статьи мы не сможем коснуться вопросов производительности для рассмотренных способов решения задачи.

Также стоит помнить, что создание отчетов на основе таблиц документов не рекомендуется методикой разработки от фирмы 1С, так как считается, что информация в документах может быть не достоверной. Все отчеты необходимо строить на основании регистров.

СКД 1С расшифровывается как Система Компоновки Данных. СКД 1С – это новый способ написания отчетов в 1С, который позволяет пользователю полностью настраивать отчет самостоятельно.

Минус СКД 1С в том, что его настройки достаточно сложны и не все пользователи усваивают их быстро.

Написание отчетов СКД требует умение работать с запросами в 1С, что мы обсуждали в .

Какова технология создания отчета СКД 1С:

  • Написать запрос 1С в СКД 1С, который обеспечивает получение данных
  • Указать СКД 1С роль полей (вычисляемые поля, ресурсы)
  • Ввести настройки СКД 1С по умолчанию.

Пользователю остается возможность изменить множество настроек по своему желанию.

Какова технология создания отчета по предыдущим технологиям:

  • Написать запрос в программе 1С
  • Разработать форму настроек (уникальную для отчета), которая позволит изменять только выбранные программистом N настроек
  • Написать код (программу) выполнения запроса и построения печатной формы отчета.

Как Вы видите, СКД 1С имеет значительное преимущество как для пользователя, так и для программиста:

  • Программист – избавляет от написания программы для выполнения отчета и настроек
  • Пользователь – получает значительный доступ к настройкам отчета.

Во всех новых конфигурациях 1С все отчеты будут использованы только на СКД 1С.

Давайте посмотрим как создать отчет на СКД 1С самому с нуля.

Создаем отчет СКД 1С

В конфигураторе нажмите кнопку нового файла (меню Файл/Новый).

Выберите тип файла Новый отчет.

Будет создан новый отчет. Введем наименование – без пробелов для конфигурации, синоним для пользователя.

Создадим основную схему СКД 1С.

Создаем запрос для отчета СКД 1С

Источников данных для СКД 1С может быть множество. Чтобы использовать, например, два отдельных запроса – добавьте сначала «Набор данных – объединение», а потом несколько запросов.

В нашем примере мы будем использовать простой запрос.

Набросаем запрос для получения данных.

Работа с конструктором запроса ничем не отличается от обычной, мы обсуждали это в .

В результате формирования запроса, СКД 1С создаст список доступных к использованию полей и заполнит им по умолчанию наименования.

Если наименование неудобное, здесь его можно изменить.

Обратите внимание, что мы использовали в запросе параметр &ДатаНачала. В СКД 1С есть параметр (дата) по умолчанию с названием &Период и Вы можете использовать его.

Причем указывать его в запросе прямо не надо – он будет использован автоматически. Однако есть тонкость – он применяется ко всем таблицам, включая левые соединения и прочее, что может рождать ошибки.

Например, Вы получаете остатки на начало месяца, а левым соединением получаете данные на сегодня. При использовании Период будет применен ко всем таблицам одинаково и запрос будет работать неверно.

Настройки СКД 1С

На закладке Ресурсы укажем те поля, которые будут суммироваться для итогов (т.е. цифры). У полей можно указать функцию суммирования. По умолчанию это Сумма (т.е. суммировать цифры из всех строк и получить итого), а можно использовать Среднее, Количество, Максимум и т.п.

На закладке Параметры запретим ненужные нам, и включим нужные. Здесь же можно задать человеческое название параметра.

Основная настройка производится на закладке Настройки:


Откроем его в режиме Предприятие. Обратите внимание, что мы не занимались никаким программированием, рисованием форм и прочего. Чтобы задать параметр нажмите кнопку Настройки.

Пользователь видит почти такую же форму настроек, как и программист.

Вуаля. Отчет работает.

Настройки СКД 1С

Все настройки отчета СКД 1С производится с помощью нажатия на кнопку Настройки. По крайней мере в шаблоне по умолчанию. Существует возможность создать самому форму отчета СКД 1С и тогда настройки могут быть вынесены в другие формы, нарисованные программистом самостоятельно.

Перетащим Склад из Колонки в Строки.

Перетащим Номенклатуру на Склад.

Нажмите ОК и сформируйте отчет. Ура – мы только что изменили работу отчета в режиме Программирование без программирования.

Нажмите правой кнопкой на Строки (а можно на любое из полей) и выберите Новая группировка.

Раскроем поле Склад и выберем одно из его полей, например Вид склада.

Подумав, мы вспомнили, что хотелось бы, чтобы в одной колонке выводилось сразу несколько полей. Нажмите на только что созданное поле два раза левой кнопкой мыши. Здесь можно добавить поля.

Если Вы добавите новую группировку, но поле не выберете, это означает «Все поля» (отображается как «Детальные записи»). Это выглядит так.

Схватите левой кнопкой мыши нашу группировку (Склад/Номенклатура) и перетащите ее на новую группировку (Вид склада).

Результат наших настроек.

Кроме настроек, о действии которых легко догадаться по их названию (Отбор, Сортировка и т.п.) есть закладке «Другие настройки». Она позволяет разрешить или запретить такие вещи как отображение итогов, расположение группировок в колонках и т.п.

Обратите внимание, что настройки могут быть заданы для всего отчета (выбран Отчет) или для конкретной строки полей (выберите строку, например Номенклатура, и выберите Настройки:Нонменклатура).