ПодготовитьДанныеДляОтправкиВнутреннихДокументов
Синтаксис:
ПодготовитьДанныеДляОтправкиВнутреннихДокументов
Описание:
Обработчик события позволяет дополнить или переопределить список пакетов для отправки внутренних документов. Срабатывает один раз перед вызовом типового обработчика события. Для добавления пакетов в список на отправку подготовьте временные таблицы, а их имена добавьте в возвращаемое значение. Для отключения типовых пакетов выключите стандартную обработку события, подробнее в описании параметра «СтандартнаяОбработка».
- Временные таблицы должны быть следующей структуры:
Документ (тип ДокументСсылка) — учетный документ, на основании которого формируется пакет.
Организация (тип СправочникСсылка) — ссылка на организацию, сопоставленную с ящиком отправителя.
ПодразделениеОтправитель (тип СправочникСсылка) — ссылка на сущность, сопоставленную с подразделением-отправителем.
ПодразделениеПолучатель (тип СправочникСсылка) — ссылка на сущность, сопоставленную с подразделением-получателем.
ДатаДокумента (тип Дата) — дата документа пакета.
НомерДокумента (тип Строка) — номер документа пакета.
СуммаДокумента (тип Число) — необязательный параметр, сумма документа.
ДопРеквизит<N> (тип Произвольный) — необязательный параметр, значение для вывода в дополнительную колонку № <N>, где N — от 1 до 5.
Все поля, кроме описанных выше, игнорируются. Требования к порядку полей запроса отсутствуют. Допускается использовать произвольные параметры запросов. Допускается создание промежуточных временных таблиц, но обеспечьте их уничтожение самостоятельно.
Важно
Имя временной таблицы должно быть уникальным. Поэтому рекомендуется добавлять какой-нибудь префикс к имени таблицы.
Нельзя использовать префикс «Диадок_» в имени временных таблиц. Этот префикс зарезервирован для таблиц, формируемых модулем.
Опция «Отправлять непроведенные документы» игнорируется в типовых обработчиках событий.
Входные параметры:
ПараметрыСобытия (тип Структура)
Элементы структуры:
ВидПакета (тип Строка) — идентификатор вида пакета. Например, «ID_УПД_ВНУТР».
НачалоПериода (тип Дата) — начало периода для выборки данных.
КонецПериода (тип Дата) — конец периода для выборки данных.
СтандартнаяОбработка (тип Булево) — возвращаемый параметр. Ложь, чтобы отключить типовой обработчик.
МенеджерВременныхТаблиц (тип МенеджерВременныхТаблиц) — возвращаемый параметр. Содержит таблицы:
ВТ_УчастникиВнутреннегоДокументооборота — содержит колонки:
Организация1С (тип СправочникСсылка) — сущность, сопоставленная с ящиком Диадока. Например, элементы справочника «Организации».
Подразделение1С (тип СправочникСсылка) — сущность, сопоставленная с подразделением в ящике Диадока. Например, элементы справочников «Подразделения» или «Склады (места хранения)».
ВТ_НастройкиВнутреннегоДокументооборота — содержит колонки:
Организация1С (тип СправочникСсылка) — сущность, сопоставленная с ящиком Диадока.
ВидПакетаID (тип Строка) — идентификатор вида пакета.
- Возвращает:
Массив из Строка — имена добавленных временных таблиц с данными пакетов.
Пример:
Функция Обработчик_ПодготовитьДанныеДляОтправкиВнутреннихДокументов(ПараметрыСобытия)
//ПараметрыСобытия.СтандартнаяОбработка = Ложь;
ИменаТаблиц = Новый Массив;
ВидПакетаID = ПараметрыСобытия.ВидПакета;
МенеджерВТ = ПараметрыСобытия.МенеджерВременныхТаблиц;
ДатаНач = ПараметрыСобытия.НачалоПериода;
ДатаКон = ПараметрыСобытия.КонецПериода;
Если ВидПакетаID = "ID_УПД_ВНУТР" Тогда
ВТ_ПеремещениеОС = ДобавитьТаблицу_ПеремещениеОС(МенеджерВТ, ДатаНач, ДатаКон);
ИменаТаблиц.Добавить(ВТ_ПеремещениеОС);
ВТ_ПередачаОборудования = ДобавитьТаблицу_ПеремещениеТоваров(МенеджерВТ, ДатаНач, ДатаКон);
ИменаТаблиц.Добавить(ВТ_ПередачаОборудования);
КонецЕсли;
Возврат ИменаТаблиц;
КонецФункции
// Формирует временную таблицу для отправки электронных документов на основании документа "Перемещение ОС".
// ВНИМАНИЕ: ЭТО ТОЛЬКО ПРИМЕР РЕАЛИЗАЦИИ.
//
// Параметры:
// МенеджерВТ — МенеджерВременныхТаблиц — хранилище временных таблиц
// ДатаНач — Дата — Начало периода
// ДатаКон — Дата — Конец периода
//
// Возвращаемое значение:
// Строка — имя временной таблицы для отправки документов на основании перемещений ОС
//
Функция ДобавитьТаблицу_ПеремещениеОС(МенеджерВТ, ДатаНач, ДатаКон)
Запрос = Новый Запрос;
// Для запроса следует установить менеджер временных таблиц из параметров события
Запрос.МенеджерВременныхТаблиц = МенеджерВТ;
// Параметры НачалоПериода и КонецПериода определяют интервал выборки данных, установленный пользователем в списке на отправку
Запрос.УстановитьПараметр("НачалоПериода", ДатаНач);
Запрос.УстановитьПараметр("КонецПериода", ДатаКон);
// можно использовать произвольные параметры
Запрос.УстановитьПараметр("МойПараметр", Истина);
Запрос.Текст =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
// Обязательные поля: Организация, ПодразделениеОтправитель, ПодразделениеПолучатель, Документ, НомерДокумента, ДатаДокумента
| ТаблицаДокументов.Организация КАК Организация,
| ВТ_Отправители.Подразделение1С КАК ПодразделениеОтправитель,
| ВТ_Получатели.Подразделение1С КАК ПодразделениеПолучатель,
| ТаблицаДокументов.Номер КАК НомерДокумента,
| ТаблицаДокументов.Дата КАК ДатаДокумента,
| ТаблицаДокументов.Ссылка КАК Документ,
// Необязательные поля (могут отсутствовать в формируемой таблице):
// СуммаДокумента, ДопРеквизит1, ДопРеквизит2, ДопРеквизит2, ДопРеквизит3, ДопРеквизит4, ДопРеквизит5
| 0 КАК СуммаДокумента,
| ТаблицаДокументов.Ответственный КАК ДопРеквизит2,
// Можно добавлять и любые другие поля, но они будут проигнорированы в итоговой выборке
| ТаблицаДокументов.СобытиеОС КАК СобытиеОС,
| ТаблицаДокументов.НачислениеАмортизации КАК НачислениеАмортизации
// Эту таблицу модуль будет использовать для вывода данных в список на отправку.
|ПОМЕСТИТЬ Кастом_ПеремещениеОС
|ИЗ
| Документ.ПеремещениеОС КАК ТаблицаДокументов
// Первое соединение, чтобы исключить из выборки документы, у которых не сопоставлено подразделение—отправитель
| ЛЕВОЕ СОЕДИНЕНИЕ ВТ_УчастникиВнутреннегоДокументооборота КАК ВТ_Отправители
| ПО ТаблицаДокументов.Организация = ВТ_Отправители.Организация1С
| И ТаблицаДокументов.ПодразделениеОрганизации = ВТ_Отправители.Подразделение1С
// Второе соединение с той же таблицей, чтобы исключить из выборки документы, у которых не сопоставлено подразделение—получатель
| ЛЕВОЕ СОЕДИНЕНИЕ ВТ_УчастникиВнутреннегоДокументооборота КАК ВТ_Получатели
| ПО ТаблицаДокументов.Организация = ВТ_Получатели.Организация1С
| И ТаблицаДокументов.ПодразделениеПолучатель = ВТ_Получатели.Подразделение1С
|ГДЕ
| ТаблицаДокументов.Дата МЕЖДУ &НачалоПериода И &КонецПериода
| И НЕ ВТ_Отправители.Подразделение1С ЕСТЬ NULL
| И НЕ ВТ_Получатели.Подразделение1С ЕСТЬ NULL
// Можно использовать собственные параметры запроса
| И &МойПараметр
|;
|
|////////////////////////////////////////////////////////////////////////////////
// Можно определять любые временные таблицы
|ВЫБРАТЬ ПЕРВЫЕ 1
| ИСТИНА КАК Поле1
|ПОМЕСТИТЬ Кастом_ПростоДляПримера
|;
|
|////////////////////////////////////////////////////////////////////////////////
// Служебные временные таблицы следует удалять самостоятельно
|УНИЧТОЖИТЬ Кастом_ПростоДляПримера";
Запрос.ВыполнитьПакет();
// Имя сформированной таблицы необходимо добавить в ответ функции "ПодготовитьДанныеДляОтправкиВнутреннихДокументов"
// ВАЖНО 1: Имя временной таблицы должно быть уникальным. Поэтому рекомендуется добавлять какой—нибудь префикс к имени таблицы
// ВАЖНО 2: Нельзя использовать префикс "Диадок_" в имени временных таблиц. Этот префикс зарезервирован для таблиц, формируемых модулем
Возврат "Кастом_ПеремещениеОС";
КонецФункции
Функция ДобавитьТаблицу_ПеремещениеТоваров(МенеджерВТ, ДатаНач, ДатаКон)
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = МенеджерВТ;
Запрос.УстановитьПараметр("НачалоПериода", ДатаНач);
Запрос.УстановитьПараметр("КонецПериода", ДатаКон);
Запрос.Текст =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ РАЗЛИЧНЫЕ
| ТаблицаДокументов.Организация КАК Организация,
| ВТ_Отправители.Подразделение1С КАК ПодразделениеОтправитель,
| ВТ_Получатели.Подразделение1С КАК ПодразделениеПолучатель,
| ТаблицаДокументов.Номер КАК НомерДокумента,
| ТаблицаДокументов.Дата КАК ДатаДокумента,
| 0 КАК СуммаДокумента,
| ТаблицаДокументов.Ссылка КАК Документ
|ПОМЕСТИТЬ Кастом_ПеремещениеТоваров
|ИЗ
| Документ.ПеремещениеТоваров КАК ТаблицаДокументов
| ЛЕВОЕ СОЕДИНЕНИЕ ВТ_УчастникиВнутреннегоДокументооборота КАК ВТ_Отправители
| ПО ТаблицаДокументов.Организация = ВТ_Отправители.Организация1С
| И ТаблицаДокументов.СкладОтправитель = ВТ_Отправители.Подразделение1С
| ЛЕВОЕ СОЕДИНЕНИЕ ВТ_УчастникиВнутреннегоДокументооборота КАК ВТ_Получатели
| ПО ТаблицаДокументов.Организация = ВТ_Получатели.Организация1С
| И ТаблицаДокументов.СкладПолучатель = ВТ_Получатели.Подразделение1С
|ГДЕ
| ТаблицаДокументов.Проведен
| И ТаблицаДокументов.Дата МЕЖДУ &НачалоПериода И &КонецПериода
| И НЕ ВТ_Отправители.Подразделение1С ЕСТЬ NULL
| И НЕ ВТ_Получатели.Подразделение1С ЕСТЬ NULL";
Запрос.Выполнить();
Возврат "Кастом_ПеремещениеТоваров";
КонецФункции