Skip to content
Permalink
master
Switch branches/tags
Go to file
 
 
Cannot retrieve contributors at this time

Дополнительные возможности

Существуют общие события, которые либо относятся к документам обоих направлений, либо к работе модуля в целом.

После обработки ленты событий

Обновление данных существующих документов (например, изменение статуса), получение информации о новых документах происходит при чтении ленты событий.

Выполняется либо при нажатии на кнопку "Обмен с сервером", либо при выполнении регламентного задания при вызове соответствующего метода основного модуля.

Для получения таблицы идентификаторов документов, которые пришли в текущей партии событий (не более 100), используется :doc:`ПослеОбработкиЛентыСобытий <../../func/pm/Posle_Obrabotki_Lenty_Sobytiy>`.

Идентификаторы могут пригодиться для выполнения методов API.

Пример сохранения данных о пользователе или подразделении, которым были переданы документы на согласование.

Для Каждого СтруктураИдентификаторов Из ИдентификаторыДокументов Цикл

  Если ЗначениеЗаполнено(СтруктураИдентификаторов.ДокументЭДО) Тогда
      ДокументЭДО = СтруктураИдентификаторов.ДокументЭДО;
  Иначе

      BoxId          = СтруктураИдентификаторов.BoxId;
      LetterId       = СтруктураИдентификаторов.LetterId;
      DocumentId     = СтруктураИдентификаторов.DocumentId;

      ДокументЭДО = ОсновнойМодуль.ЭДО_Диадок_Документы_ПолучитьДокумент(BoxId, LetterId, DocumentId);

  КонецЕсли;

  Если Не ЗначениеЗаполнено(ДокументЭДО) Тогда
      Продолжить;
  КонецЕсли;

  РеквизитыДокумента = ОсновнойМодуль.ЭДО_ПолучитьРеквизитыДокумента(ДокументЭДО);
  МаршрутизацияДокумента = ОсновнойМодуль.ЭДО_ПолучитьМаршрутизациюДокумента(ПараметрыСервиса, РеквизитыДокумента);
  Если МаршрутизацияДокумента.Количество() > 0 Тогда

      ДанныеМаршрутизации    = МаршрутизацияДокумента[МаршрутизацияДокумента.ВГраница()];
      AttachmentType                 = ДанныеМаршрутизации.AttachmentType;
      Если AttachmentType = "ResolutionRequest" Тогда

          TargetResolution           = Неопределено;
          TargetResolutionString     = Неопределено;

          Если ЗначениеЗаполнено(ДанныеМаршрутизации.User) И ЗначениеЗаполнено(ДанныеМаршрутизации.UserId) Тогда
              TargetResolution               = ДанныеМаршрутизации.UserId;
              TargetResolutionString         = ДанныеМаршрутизации.User;
          ИначеЕсли ЗначениеЗаполнено(ДанныеМаршрутизации.Department) И ЗначениеЗаполнено(ДанныеМаршрутизации.DepartmentId) Тогда
              TargetResolution               = ДанныеМаршрутизации.DepartmentId;
              TargetResolutionString         = ДанныеМаршрутизации.Department;
          КонецЕсли;

          Если ЗначениеЗаполнено(TargetResolution) Тогда
              ОсновнойМодуль.ЭДО_СправочникМенеджер_УстановитьЗначениеДопРеквизита(ДокументЭДО, "TargetResolution", TargetResolution, TargetResolutionString);
          КонецЕсли;

      ИначеЕсли AttachmentType = "Resolution"
          Или AttachmentType = "ResolutionRequestDenial"
          Или AttachmentType = "ResolutionRouteRemovalAttachment" Тогда

              ОсновнойМодуль.ЭДО_СправочникМенеджер_УдалитьДопРеквизит(ДокументЭДО, "TargetResolution");

      КонецЕсли;

  КонецЕсли;

КонецЦикла;

Возврат Истина;

При изменении статуса документа

Если для документов при смене статуса требуется вносить изменения, например в связанный документ 1С, тогда следует использовать функцию :doc:`ПослеУстановкиСтатусаДокумента <../../func/pm/Posle_Ustanovki_Statusa_Dokumenta>`.

Функция выполняется после нажатия на кнопку "Обмен с сервером" и при отправке ответа по входящему документу.

Пример записи в комментарий отправленного документа 1С о том, что он подписан контрагентом:

ДокументДД = Параметры.ДокументДД;
Статус = Параметры.Статус;

Если Найти(Статус, "Подписан") > 0
    И ДокументДД.Документ <> Неопределено Тогда

    Документ1С = ДокументДД.Документ.ПолучитьОбъект();

    Документ1С.Комментарий = "Подписан";
    Документ1С.ОбменДанными.Загрузка = Истина;

    Документ1С.Записать();

КонецЕсли;

Возврат Истина;

Переопределение типов Организации и Контрагентов

Для нетиповых конфигураций может потребоваться изменить тип значения Организации и Контрагентов. В том числе для запросов.

Функция :doc:`ОпределитьТипЗначенияОбъекта <../../func/pm/Opredelit'_Tip_Znacheniya_Obyekta>` предназначена для получения нужного типа по синониму.

Обращение к ней происходит в следующих случаях:

  • при открытии форм организаций и контрагентов в модуле
  • при определении типов значений для отборов СКД и быстрых отборов
  • при получении списка контрагентов
  • при групповом сопоставлении контрагентов

Типовой вариант функции:

Если Параметры.Синоним = "Организации" Тогда
    Результат = "СправочникСсылка.Организации";
ИначеЕсли Параметры.Синоним = "Контрагенты" Тогда
    Результат = "СправочникСсылка.Контрагенты";
Иначе
    Результат = Неопределено;
КонецЕсли;

Фильтр контрагентов для приглашения

В форме списка контрагентов модуля есть возможность оправить приглашение контрагентам из списка 1С.

В раздел "Поиск и приглашение" попадают те контрагенты, с которыми нет партнерских отношений.

Часто в списке контрагентов 1С есть те, с кем уже нет взаимодействий.

Для возможности фильтровать такие варианты, существует функция :doc:`ПолучитьКоличествоДокументовЗаПериод <../../func/pm/Poluchit'_Kolichestvo_Dokumentov_Za_Period>`, которая определяет значение поля "ДокументовЗаПериод".

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

Пример запроса для расчета количества документов "Реализация товаров и услуг":

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

Заполнение комментария в документе 1С

Через настройки в организации есть возможность заполнять определенный комментарий в документе 1С, который был отправлен из базы, или в документе, который отражает входящий электронный документ (после создания или сопоставления).

/image/Комментарий.png

В событии :doc:`ОбновитьКомментарийДокументаУчета <../../func/pm/ОбновитьКомментарийДокументаУчета>` определяется способ заполнения и записи в документ 1С, переданный в ПМ.

Пример заполнения комментария с датой отправки:

/image/Код_комментарий.png