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