- 1. Расчет суммы нарастающим итогом
- 2. Вычисление предыдущего курса с помощью функции Вычислить Выражение ()
- 3. Сравнение с определенным значением в отчете 1С
- Реализация поставленной задачи с применением функций СКД Массив и СоединитьСтроки
- Описание функции СоединитьСтроки (JoinStrings)
- Обращение к экспортным функциям общего модуля
- Массив значений в одной ячейке
1. Расчет суммы нарастающим итогом
Цель: в отчет о продажах нужно добавить столбцы с кумулятивной суммой для суммы и количества.
Добавьте в наборы данных запрос для регистра «Продажи»:
Добавьте два вычисляемых поля: «Сумма дополнительной суммы» и «Сумма дополнительной суммы». Мы не указываем для них выражение:
Затем в ресурсах указываем выражения для этих полей:
В первом параметре «Выражение» мы указываем агрегатную функцию «Сумма» для поля, для которого мы хотим получить совокупную сумму.
Укажите «Первый» в параметре «Начало» и «Текущий» в параметре «Конец». Следовательно, в столбцах с кумулятивной суммой будут суммироваться все записи от первой до текущей. Для первой записи сумма будет получена только для нее, для второй — суммы первой и второй записей, для третьей — суммы первой, второй и третьей и т.д.
Проверьте отчет в режиме предприятия:
В столбце «Суммарный итог» в первой строке мы видим цифру 2, во второй цифре 5 — сумму первой и второй строк в столбце «Оборачиваемость», в третьей — цифру 8, равную сумма первого, второго и третьего и т д.
2. Вычисление предыдущего курса с помощью функции Вычислить Выражение ()
Другой очень распространенной операцией является отображение в отчете информации о курсе за предыдущий день.
В отчете в программах 1С добавить запрос реестра «Курсы валют».
На вкладке «Расчетные поля» добавьте новое поле: «Предыдущий курс». Итак, давайте определим для него выражение:
В этом случае в функции CalculateExpression () в первом параметре укажите поле «Курс». А в параметрах «Начало» и «Конец» указываем «Предыдущий». Это вычисленное поле будет заполнено значением из предыдущей строки в столбце «Ставка».
Проверяем результат:
Мы видим, что вторая строка столбца «Предыдущий курс» содержит значение первой строки столбца «Курс» и т.д.
3. Сравнение с определенным значением в отчете 1С
Еще одна задача: в отчете нужно указать значение в каждой строке со значением в определенном столбце. Например, в отчете о продажах вычислите процент общих продаж продукта в текущей строке от общих продаж одного из продуктов, которые пользователь укажет в параметрах отчета.
В отчете составляем заявку на регистр «Продажи»:
Давайте добавим вычисляемое поле «Процент», мы не указываем для него выражение, так как расчет процентов будет производиться только на итоговом уровне:
Во вкладке «Параметры» добавьте параметр «ProductForCompare», где пользователь будет указывать, с каким продуктом следует сравнивать. На вкладке «Ресурсы» укажите выражение для поля «Процент».
Здесь мы определяем сумму в поле «AmountTurnover» и для расчета процента продажи продукта, выбранного пользователем, мы умножаем эту сумму на 100, а затем делим на результат функции CalculateExpression().
Мы также переносим на него сумму в поле «ImportoFatturato», но только при условии, что элемент в текущей строке совпадает с элементом, указанным в параметре «Элементы для сравнения».
Также для наглядности настроим оформление столбца «Товар» так, чтобы выбранный пользователем товар выделялся цветом:
Проверяем результат:
В качестве материала для сравнения была выбрана статья «Босиком». Проверим правильность расчета на примере статьи «Валенки».
За выбранный период продано товаров на сумму 12 500 и 4 500 соответственно.
4500 * 100/12500 = 36%. Тот же результат был достигнут и в отчете.
Реализация поставленной задачи с применением функций СКД Массив и СоединитьСтроки
-
- Создадим новый набор данных.
- Вставляем в него вышеуказанный запрос.
- Переходим на вкладку Calculated Fields и добавляем новую запись.
- В поле «Путь к данным» введите ArrayNumbers.
- В поле «Выражение» введите массив (RegistrarNumber).
- Переходим во вкладку «Ресурсы» и добавляем новые записи из раздела «Доступные поля» с помощью кнопки «>».
- Добавим матрицу чисел.
- В поле «Выражение» введите ConnectStrings (Array (RegistrarNumber),»,»,»»).
- В поле «Рассчитать по…» выберите Номенклатура.
- Добавим количество оборотов.
- В поле «Выражение» укажите сумму (количество оборотов).
- В поле «Рассчитать по…» выберите Номенклатура.
-
- Переходим во вкладку «Настройки» и добавляем новую номенклатурную группировку.
- Здесь, на вкладке «Выбранные поля», добавьте новые поля из раздела «Доступные поля» с помощью кнопки «>». Выбираем три поля «Номенклатура», «Матрица чисел», «Число оборотов».
- Наконец, перейдите на вкладку «Другие настройки» и измените две строки: «Положение общих итогов по горизонтали» и «Позиционирование общих итогов по вертикали».
- В поле «Значение» установите значение «Нет». Это необходимо, чтобы запретить выдачу итогов.
Те же шаги, но с некоторыми дополнениями, были использованы для создания отчета о продажах товаров для GTE.
Описание функции СоединитьСтроки (JoinStrings)
JoinStrings Используется для объединения строк в одну строку.
Синтаксис:
JoinStrings (значение, разделитель элементов, разделители столбцов)
Параметры:
- Значение — выражения для объединения в одну строку. Если это массив, элементы массива будут объединены в строку. Если ValuesTable равно, все столбцы и строки в таблице будут объединены в одну строку;
- Разделитель элементов — это строка, содержащая текст, который будет использоваться в качестве разделителя между элементами массива и строками таблицы значений. По умолчанию — символ перевода строки;
- Разделители столбцов: строка, содержащая текст, который будет использоваться в качестве разделителя между столбцами таблицы значений. Дефолт «;».
Обращение к экспортным функциям общего модуля
Функции общей формы могут служить источником данных для заполнения вычисляемого поля.
Некоторые важные моменты:
- Функция должна быть экспортируемой;
- Если функция находится в общем модуле с установленным флагом «Глобальный», она вызывается напрямую по имени, в противном случае функция должна вызываться в соответствии с шаблоном «Общее имя модуля». «Имя вызываемой функции».
В качестве примера использования возьмем тот же запрос на получение документов и выведем прописью «Сумму документа» в отдельном столбце. Сам запрос описывать не будем, перейдем непосредственно к вычисляемым полям:
- Создадим новое поле «AmountRecord»;
- Определим его выражение, как на рис.6;
- В общем модуле создадим функцию экспорта (рис. 7);
- Пропустим этап настройки отчета и сразу посмотрим на результат (рис. 8).
Таким образом, мы видим, что практически любой обработчик данных может быть инициализирован ACS, что значительно расширяет возможности использования схемы.
Массив значений в одной ячейке
Смоделируем ситуацию, когда необходимо получить в отдельной ячейке все номера чеков для дубликата:
- С помощью конструктора реализуем простейший запрос (рис. 2)
- На вкладке «Вычисляемые поля» создадим новое поле и назовем его Массив идентификаторов, заменив фразу Массив (Число) в столбце «Выражение» (рис. 3)
Поэтому мы создали дополнительное вычисляемое поле в нашей схеме;
- Перейдем на вкладку «Ресурсы» и зададим выражение для расчета суммы для контрагента (рис. 4), заменив выражение по умолчанию «Сумма» на «Соединить линии»;
- Во вкладке «Настройки» определите внешний вид нашего отчета, добавьте новую группировку «Контрагент» и укажите выбранные поля (рис. 4);
- Результат доработки виден на рис.5.
Как видно из приведенного выше примера, сложностей с добавлением и обработкой вычисляемых полей нет. Мы использовали две функции: Array () и JoinStrings().
Несколько слов о последнем. Помимо первого параметра, который указывает идентификатор массива, таблицы значений или значения, в нем могут быть установлены два других:
- Разделитель элементов — указывает, какой символ будет отделять элемент массива или строку таблицы значений от другого (в нашем случае мы опустили этот параметр и по умолчанию задали разрыв строки);
- Разделитель столбцов — это символ, используемый для разделения столбцов таблицы значений (по умолчанию используется точка с запятой).
- https://www.koderline.ru/expert/instruktsii/article-yazyk-vyrazheniy-skd-primery-ispolzovaniya-funktsii-vychislit-vyrazhenie-/
- https://www.softmaker.kz/otchety-1s/primer-ispolzovaniya-funkcij-skd-massiv-array-i-soedinitstroki-joinstrings-v-otchyote-1s-8.html
- https://4apple.org/1s-skd-vychisljaemye-polja-summa-polej/
- https://dudom.ru/kompjutery/1s-skd-vychisljaemye-polja-summa-polej/