Отправка письма с данными из нескольких блоков скрипта
В этом документе показано, как в Proceset передать в блок Отправить письмо данные из разных блоков одного скрипта: сформировать CSV по строкам SQL-запроса, передать тему из другого SQL-запроса, а адрес и параметры альтернативного письма получить из блока Ручной запуск. Такой сценарий подходит для регулярной рассылки отчетов, когда данные и параметры письма формируются в разных частях процесса.
Контекст
Отдел операционной аналитики каждый месяц отправляет региональным руководителям отчет по выполненным заказам. В скрипте строки отчета и тема письма возвращаются SQL-блоками, CSV-файл формируется отдельным блоком, а копия отчета упаковывается блоком Архивировать.
Параметры письма формируются в разных местах скрипта: адрес и дополнительная тема приходят из блока Ручной запуск, тема отчета — из SQL-запроса, а файлы — из блоков подготовки файлов. Блок Отправить письмо собирает эти значения в одно письмо, поэтому один и тот же процесс можно использовать для отправки CSV-отчета или его архива.
Скачайте архив с CSV-файлом примера. В запросах ниже данные заданы литералами, поэтому для повторения сценария не требуется заранее создавать таблицу в модели данных.
В примере используются следующие значения:
- Адрес получателя — адрес тестового почтового ящика из блока Ручной запуск
- Тема письма —
Отчет по заказам за июнь 2026из блока Выбрать строки через SQL-запрос - CSV-вложение — результат блока Сформировать CSV
- Архив — результат блока Архивировать
Настройка отправки отчета с данными из нескольких блоков
Настройка отправки отчета выполняется в три этапа:
- Этап 1 — подготовка параметров запуска, темы, строк отчета, CSV-файла и архива
- Этап 2 — настройка маппинга адреса, темы и вложения для CSV-отчета и архива
- Этап 3 — проверка выбранного варианта и публикация скрипта для последующих запусков
Также вы можете ознакомиться с примером рабочего процесса, в котором показано, как оператор формирует ежемесячный отчет, выбирает формат вложения и проверяет доставленное письмо.
Подготовка источников данных и файлов
Для кейса нужна версия Proceset 2606 или новее. Письмо отправляется блоком из пакета Системная почта. Подготовьте почтовый ящик, в котором вы сможете проверить результат.
Блоки выполняются последовательно: Ручной запуск → Выбрать строки через SQL-запрос (тема) → Выбрать строки через SQL-запрос (данные отчета) → Сформировать CSV → Архивировать → Отправить письмо. Эта цепочка остается одинаковой для обоих вариантов письма.
- В рабочем пространстве откройте Панель управления, нажмите Добавить и выберите Скрипт. Задайте название «Отправка отчета по заказам» и нажмите Добавить.
- В блоке Выберите триггер выберите Ручной запуск.

- Откройте Ожидаемые поля блока Ручной запуск. Нажмите Добавить и создайте два поля:
Название Тип поля Массив Обязательное поле recipientСтрока Выключен Включено archive_subjectСтрока Выключен Включено - Нажмите Тестировать в панели блока. Введите в
recipientадрес своего тестового почтового ящика, а вarchive_subject—Архив отчета по заказам за июнь 2026. Выполните тест и проверьте, что в выходных данных появилась одна запись с этими полями. После теста поля будут доступны для маппинга в следующих блоках. - Нажмите + под блоком Ручной запуск. В группе Пространство добавьте блок Выбрать строки через SQL-запрос для темы письма. Введите запрос, который возвращает одну строку:
Проверьте блок и убедитесь, что в выходных данных есть поле
SELECT 'Отчет по заказам за июнь 2026' AS email_subjectemail_subject.
- Под первым SQL-блоком нажмите + и добавьте второй блок Выбрать строки через SQL-запрос для строк отчета. Введите запрос с тестовыми данными:
Проверьте блок. Он должен вернуть три строки с регионами и показателями заказов.
SELECT region, order_count, total_amount FROM ( SELECT 'Север' AS region, 42 AS order_count, 128500.00 AS total_amount UNION ALL SELECT 'Юг', 37, 98400.00 UNION ALL SELECT 'Центр', 51, 176300.00 ) ORDER BY region
- Под вторым SQL-блоком нажмите + и добавьте блок Сформировать CSV. В разделе Колонки CSV задайте имена
region,order_countиtotal_amount, а в соответствующих полях Данные для колонки выберите одноименные поля второго SQL-блока через маппинг. Включите Добавлять заголовки колонок и в поле Разделитель выберите Точка с запятой. После тестирования блок должен вернуть один CSV-файл с тремя строками.
- Под блоком Сформировать CSV нажмите + и добавьте блок Архивировать. В поле Файлы подставьте файловую переменную из блока Сформировать CSV. Проверьте блок: он должен вернуть архив в формате
.gzip.
Настройка блока «Отправить письмо»
Создайте один блок письма и последовательно проверьте два варианта маппинга.
Отправка CSV-отчета с темой из SQL-запроса
- Нажмите + под блоком Архивировать и добавьте блок Отправить письмо из пакета Системная почта. Если в скрипте уже есть блок старой версии, замените его на новую версию блока, доступную с обновления 2606.
- В поле Адрес получателя выберите значение
recipientиз блока Ручной запуск. - В поле Тема письма выберите поле
email_subjectиз первого блока Выбрать строки через SQL-запрос. - В поле Вложения оставьте одну строку и выберите файловую переменную из блока Сформировать CSV. Для поля Сообщение выберите формат Текст и введите
Отчет подготовлен автоматически. - Нажмите Тестировать в правом верхнем углу редактора, чтобы запустить весь скрипт. Для
recipientукажите свой тестовый почтовый ящик, дляarchive_subject—Архив отчета по заказам за июнь 2026. Дождитесь статуса Выполнено.
- Откройте полученное письмо. Проверьте тему
Отчет по заказам за июнь 2026и одно CSV-вложение. В файле должны быть заголовкиregion,order_count,total_amountи три строки по регионам. Сверьте значения с данными из архива примера. После этой проверки переходите ко второму варианту.
В этом варианте адрес, тема и вложение поступают из трех блоков: Ручной запуск, первого SQL-блока и Сформировать CSV.
Отправка архива с адресом и темой из параметров запуска
- В поле Адрес получателя оставьте значение
recipientиз блока Ручной запуск. - В поле Тема письма замените маппинг на
archive_subjectиз блока Ручной запуск. - В поле Вложения замените файловую переменную на результат блока Архивировать. В поле Сообщение укажите
Архив отчета приложен для хранения. - Снова нажмите Тестировать в правом верхнем углу и заполните
recipientиarchive_subjectтеми же значениями. Дождитесь статуса Выполнено. - Проверьте полученное письмо: тема —
Архив отчета по заказам за июнь 2026, вложение — один GZIP-архив. Распакуйте его и убедитесь, что внутри тот же отчет с тремя строками по регионам.
В этом варианте тема и адрес берутся из Ручной запуск, а вложение — из Архивировать. Чтобы отправить оба файла одним письмом, добавьте две строки в режиме списка полей или передайте массив файлов в режиме формулы fx.
Публикация скрипта
Сохраните вариант, который будете использовать для отправки отчета.
- Оставьте в блоке Отправить письмо маппинг нужного варианта. Если после проверки второго варианта вы вернулись к CSV-вложению, восстановите тему из первого SQL-блока и файл из блока Сформировать CSV, затем повторите тест всего скрипта.
- После успешного теста нажмите Опубликовать. Для последующей отправки откройте опубликованный скрипт и нажмите Активировать. При запуске заполните
recipientиarchive_subject. Блок Ручной запуск выполняет скрипт один раз и отключается после завершения.
Результат
За один запуск отправляется одно письмо. В обоих вариантах непосредственный предшественник письма — блок Архивировать: он получает единственный CSV-файл и передает дальше одну запись. Тема и вложение могут браться из других блоков выше по цепочке, но это не меняет количество отправляемых писем.
В первом варианте получатель получает CSV-отчет с темой из SQL-запроса. Во втором — архив отчета с темой из параметров ручного запуска. Для смены варианта достаточно изменить маппинг письма: связи между блоками остаются прежними.
Пример рабочего процесса
Ситуация
В первый рабочий день месяца аналитик формирует отчет по выполненным заказам и отправляет его региональному руководителю. Получатель каждый раз может быть другим, поэтому адрес не фиксируют в настройках письма: оператор вводит его при запуске скрипта. Отчет нужен в двух форматах:
- CSV — чтобы руководитель мог сразу открыть файл и проверить показатели по регионам;
- GZIP-архив — чтобы сохранить отчет в почте или передать его как единый пакет.
Скрипт готовит оба файла за один запуск. Оператор выбирает только итоговый вариант письма: CSV с темой из SQL-запроса или архив с темой, введенной при запуске.
Какие данные вводит оператор
Перед запуском блок Ручной запуск запрашивает два обязательных значения:
| Поле | Пример значения | Как используется |
|---|---|---|
recipient | regional.manager@example.com | Адрес получателя в обоих вариантах письма |
archive_subject | Архив отчета по заказам за июнь 2026 | Тема письма с архивом |
Оператор вводит эти значения в форме запуска и выполняет тест. После выполнения блока они становятся доступны для маппинга в блоке Отправить письмо.

Как формируется отчет
- Первый SQL-блок подготавливает тему для обычного письма —
Отчет по заказам за июнь 2026. Эта тема не зависит от введенных оператором параметров и всегда соответствует отчетному периоду.
- Второй SQL-блок возвращает строки отчета: регион, число заказов и сумму. В примере это три региона — Север, Юг и Центр. В рабочем сценарии вместо тестовых литералов используйте запрос к своей модели данных.

- Блок Сформировать CSV получает три колонки из второго SQL-блока и создает один файл с заголовками. Именно этот файл используется как вложение в первом варианте рассылки.

- Блок Архивировать получает CSV-файл и создает его GZIP-копию. CSV при этом не изменяется, поэтому оба варианта письма используют один и тот же набор исходных данных.

Как скрипт собирает письмо
Блок Отправить письмо располагается после блока Архивировать, но может получать значения из любого предыдущего блока. Настройте маппинг в зависимости от того, какой результат требуется получателю:
| Параметр письма | CSV-отчет | Архив отчета |
|---|---|---|
| Адрес получателя | recipient из Ручной запуск | recipient из Ручной запуск |
| Тема | email_subject из первого SQL-блока | archive_subject из Ручной запуск |
| Вложение | файл из Сформировать CSV | файл из Архивировать |
| Текст сообщения | Отчет подготовлен автоматически. | Архив отчета приложен для хранения. |
На следующем скриншоте видно, что адрес, тема и вложение выбираются независимо друг от друга: адрес берется из Ручной запуск, тема — из первого SQL-блока, вложение — из Архивировать. Для рабочего варианта выберите сочетание из таблицы выше; например, перед отправкой архива замените тему на archive_subject.

Что делает оператор после запуска
- Открывает опубликованный скрипт и нажимает Активировать.
- Вводит адрес получателя и тему архивного письма.
- Дожидается статуса Выполнено.
- Открывает письмо в тестовом почтовом ящике.
- Проверяет тему, одно вложение и содержимое файла: в CSV должны быть заголовки
region,order_count,total_amountи три строки; в архиве — тот же CSV-файл.
Если получателю нужен CSV, оператор оставляет маппинг темы из первого SQL-блока и вложение из Сформировать CSV. Если нужен архив, он заменяет тему на archive_subject, а вложение — на результат Архивировать. Блоки подготовки данных и связи между ними менять не требуется.
Результат и дальнейшие действия
После каждого запуска отправляется одно письмо с одним вложением. Письмо не дублируется, хотя адрес, тема и файл поступают из разных блоков: количество отправок определяется одной записью, которую передает предшествующий блок Архивировать.
Если рассылку нужно повторять каждый месяц, обновите SQL-запросы под новый период и опубликуйте новую версию скрипта. Для отправки обоих файлов в одном письме добавьте в поле Вложения две строки: одну с файлом из Сформировать CSV, вторую — с файлом из Архивировать.
Преимущества для пользователя
- Данные отчета, тема и адрес получателя передаются в одно письмо из разных блоков скрипта
- Подготовка CSV, архивирование и отправка письма выполняются за один запуск
- Получатель задается при запуске, без изменения настроек блока отправки
- Формат вложения меняется с CSV на архив без перестройки цепочки блоков
Насколько полезной была статья?