Как добавить кнопку ЭДО в документ Операция для открытия существующих электронных документов

Программист 1С v8.3 (Управляемые формы) 1C:Бухгалтерия Бухгалтерский учет IT и автоматизация бизнеса
← На главную

В практике автоматизации на базе 1С часто возникает ситуация, когда типового функционала подсистемы ЭДО (Электронный документооборот) недостаточно. Например, когда бухгалтер создает документ Операция (бухгалтерский учет) для корректировки проводок, возникших на основании Реализации товаров и услуг, ему может потребоваться оперативный доступ к электронному документу (ЭД), который был отправлен контрагенту. Рассмотрим подробно, как реализовать механизм открытия существующего ЭД прямо из формы ручной операции.

Анализ структуры хранения данных ЭДО

Для начала проанализируем, как система 1С понимает, что конкретный документ (объект учета) связан с электронным документом. В современных конфигурациях, использующих БЭД (Библиотеку электронных документов), эта связь не хранится в самом документе реализации. Вместо этого используется вспомогательная структура. Основным «связующим звеном» выступает регистр сведений СостоянияПоОбъектамУчетаЭДО.

В этом регистре измерение ОбъектУчета содержит ссылку на документ (например, на ту самую «Реализацию»), а ресурсные поля и связанные справочники позволяют определить состояние и найти саму ссылку на объект электронного документа. Сами же файлы и метаданные ЭДО хранятся в справочниках ЭлектронныеДокументыВходящие или ЭлектронныеДокументыИсходящие (в зависимости от версии БЭД названия могут варьироваться, например, ЭДПрисоединенныеФайлы).

Поиск ссылки на первичный документ

Поскольку документ ОперацияБух (введенная вручную) сам по себе редко является объектом ЭДО, наша задача — найти документ-основание, к которому привязан ЭД. Разберем типичные ситуации поиска:

  1. Через проводки (субконто): Если в операции заполнены проводки по счетам 62 или 60, в одном из субконто почти всегда указан документ расчетов (Реализация или Поступление).
  2. Через дополнительные реквизиты: Если в организации принято связывать ручные операции с первичкой через доп. сведения.
  3. Через реквизиты документа: Если вы предварительно добавили реквизит ДокументОснование в метаданные операции.

Предположим, что мы ищем реализацию в табличной части проводок. Проанализируем пример кода для поиска ссылки:


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

Программный интерфейс открытия формы ЭДО

Выясним, какие инструменты предоставляет БЭД для открытия форм. Нам не нужно изобретать велосипед и рисовать форму просмотра документа с нуля. В составе типовых конфигураций (ERP, КА, БП 3.0) есть общий модуль ЭДОСлужебныйКлиент, который содержит необходимые методы.

Существует два основных подхода:

  1. Открыть список всех ЭД, связанных с документом: Это удобно, если по реализации было несколько итераций обмена (аннулирования, исправления).
  2. Открыть форму конкретного (текущего) ЭД: Если нужно сразу показать визуальное представление (печатную форму) последнего актуального документа.

Рассмотрим реализацию команды на форме документа Операция. Для этого создадим команду формы с заголовком «ЭДО» и разместим её в командной панели.

Реализация обработчика нажатия кнопки

Разберем по шагам код, который должен быть выполнен при нажатии на кнопку. Нам необходимо получить ссылку на реализацию, проверить наличие связанных ЭД и вызвать команду открытия.


&НаКлиенте
Процедура Подключаемый_ВыполнитьКомандуЭДО(Команда)
    
    // Получаем ссылку на реализацию (через серверный вызов)
    СсылкаНаРеализацию = ПолучитьСсылкуНаРеализациюНаСервере();
    
    Если ЗначениеЗаполнено(СсылкаНаРеализацию) Тогда
        // Используем типовой метод БЭД для открытия списка документов
        // Параметры: Ссылка на объект учета
        ЭДОСлужебныйКлиент.ОткрытьСписокЭлектронныхДокументов(СсылкаНаРеализацию);
    Иначе
        ПоказатьПредупреждение(, "Не удалось найти связанный документ реализации в проводках операции.");
    КонецЕсли;
    
КонецПроцедуры

В данном примере метод ОткрытьСписокЭлектронныхДокументов является наиболее универсальным. Он сам проверит права пользователя, наличие настроек ЭДО и выведет окно со списком всех связанных электронных транзакций.

Важные технические нюансы

При реализации данного функционала следует учитывать права доступа. Если у пользователя, работающего с «Операцией», нет прав на просмотр справочников ЭДО или на чтение документа «Реализация», система выдаст ошибку доступа. Убедитесь, что в профилях пользователей добавлены соответствующие роли, такие как ЧтениеЭлектронныхДокументов.

Также проанализируем ситуацию, когда документ Операция должен не просто «подглядывать» в чужой ЭД, а сам стать полноценным участником обмена. В этом случае программисту необходимо выполнить следующие действия в конфигураторе:

Однако для задачи «просто открыть созданный ранее ЭД» достаточно программного вызова функций ЭДОСлужебныйКлиент с передачей ссылки на исходную реализацию. Это наиболее безопасный метод, не требующий значительного изменения логики типовой конфигурации и облегчающий последующее обновление программы.

Таким образом, мы выяснили, что ключ к решению задачи лежит в правильном поиске связи между ручной операцией и первичным документом через учетные регистры и последующем использовании штатных методов библиотеки электронных документов.

← На главную