В типовой конфигурации «1С:Бухгалтерия предприятия 3.0» (БП 3.0) для многих документов, таких как «Реализация товаров и услуг» или «Счет на оплату покупателю», реализована удобная возможность отправки печатных форм по электронной почте прямо из формы списка. Однако для документа Отчет комитенту такая функциональность в некоторых релизах может отсутствовать в командной панели списка. Разберем подробно, как реализовать эту задачу с помощью расширения, не внося изменений в основную конфигурацию, и при этом избежать типичных ошибок при работе с глобальными командами.
Нам необходимо добавить стандартную кнопку с иконкой конверта в командную панель формы списка документа ОтчетКомитенту. При нажатии на эту кнопку система должна формировать выбранные печатные формы (например, сам «Отчет комитенту» и «Акт об оказании услуг») и открывать окно подготовки электронного письма. Мы будем использовать механизм расширений, так как это позволяет сохранить конфигурацию на поддержке и упрощает процесс обновления.
Первым делом создадим новое расширение или откроем существующее. Нам необходимо добавить в расширение следующие объекты основной конфигурации:
ОтчетКомитенту (только сам объект, без всех форм и реквизитов, если они не нужны для логики).ОтправитьПоЭлектроннойПочте. Это глобальная команда, которая отвечает за вызов почтового клиента БСП (Библиотеки стандартных подсистем).ОтчетКомитенту, если кнопка не появится автоматически после манипуляций с командой.Это самый важный и технически тонкий момент. Глобальная команда ОтправитьПоЭлектроннойПочте имеет свойство Тип параметра команды, в котором перечислены все документы, для которых она доступна. Нам нужно добавить туда наш ДокументСсылка.ОтчетКомитенту.
Проанализируем ситуацию: при попытке просто добавить документ в список типов в расширении, конфигуратор может выдать ошибку: «Значение контролируемого свойства ТипПараметраКоманды у объекта ОбщаяКоманда.ОтправитьПоЭлектроннойПочте не совпадает со значением в расширяемой конфигурации». Это происходит из-за строгого контроля свойств.
Как исправить:
ОтправитьПоЭлектроннойПочте (внутри расширения) найдите строку Тип параметра команды.ДокументСсылка.ОтчетКомитенту.Просто добавить команду недостаточно. При нажатии на кнопку система обращается к менеджеру документа, чтобы понять, какие именно печатные формы нужно отправить. Выясним причину возможной ошибки: если метод не описан, вы получите сообщение {ОбщийМодуль.ОтправкаПочтовыхСообщений.Модуль(492)}: Метод объекта не обнаружен (ДобавитьКомандыОтправки).
Нам необходимо создать в расширении Модуль менеджера документа ОтчетКомитенту и добавить в него процедуру. Рассмотрим пример кода:
&После("ДобавитьКомандыОтправки")
Процедура Расш1_ДобавитьКомандыОтправки(КомандыОтправки) Экспорт
// Регистрируем команду отправки для конкретных макетов
Команда = КомандыОтправки.Добавить();
Команда.Представление = НСтр("ru = 'Отчет комитенту (с актом)'");
Команда.Идентификатор = "ОтчетКомитенту"; // Имя макета из модуля менеджера
Команда.ДополнительныеПараметры.Вставить("Получатель", "Менеджер");
КонецПроцедуры
Важно помнить: процедура должна быть обязательно помечена ключевым словом Экспорт. В параметре КомандыОтправки мы описываем, какие представления увидит пользователь, если форм несколько.
Поскольку механизм отправки почты в БП 3.0 неразрывно связан с подсистемой печати, убедимся, что документ корректно предоставляет данные для формирования печатных форм. Если вы хотите отправлять специфические формы, они должны быть описаны в процедуре ПриОпределенииКомандПечати. Обычно в типовых решениях она уже есть, и мы можем подключиться к ней через &После.
&После("ПриОпределенииКомандПечати")
Процедура Расш1_ПриОпределенииКомандПечати(КомандыПечати) Экспорт
// Здесь обычно уже есть типовой код,
// расширение просто позволяет убедиться, что команды доступны.
КонецПроцедуры
Если после выполнения предыдущих шагов кнопка все равно не появилась в режиме «1С:Предприятие», проанализируем настройки формы списка. Возможны две причины:
Автозаполнение установлено в значение Ложь, глобальные команды не добавятся автоматически. В этом случае откройте форму списка в расширении и вручную перетащите команду ОбщиеКоманды.ОтправитьПоЭлектроннойПочте в дерево элементов формы (в командную панель).Рассмотрим ситуацию, когда при нажатии на кнопку ничего не происходит или возникает ошибка прав доступа. Убедитесь, что для пользователя, тестирующего функционал, доступны роли:
Чтение учетных записей электронной почтыИспользование общей команды Отправить по электронной почтеТакже стоит проверить, правильно ли заимствован объект в расширение. Если вы используете аннотацию &Вместо для процедуры ДобавитьКомандыОтправки, убедитесь, что вы вызываете базовую логику или полностью копируете поведение типового метода, иначе вы можете «сломать» отправку в других документах, если расширение написано некорректно. Однако использование &После является более безопасным и предпочтительным методом.
Резюмируем: Для реализации отправки почты из списка «Отчетов комитенту» нам потребовалось обойти ограничение платформы на изменение типов глобальных команд (через отключение контроля свойств), расширить модуль менеджера документа экспортной процедурой ДобавитьКомандыОтправки и, при необходимости, вручную разместить команду на форме списка. Теперь пользователь сможет отправлять акты и отчеты контрагентам в один клик, значительно экономя рабочее время.