Как правильно выполнить отбор задач по исполнителю при интеграции 1С:ERP и 1С:Документооборот?

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

Интеграция систем 1С:ERP и 1С:Документооборот через веб-сервис DMService часто сопровождается трудностями при формировании XDTO-запросов. Одной из типичных проблем является получение ошибки «Неизвестное поле в условии отбора: performer» при попытке отобрать задачи по конкретному пользователю. Давайте разберем, почему это происходит и как правильно настроить взаимодействие между конфигурациями.

Выясняем причину ошибки

При использовании DMGetObjectListRequest для получения объектов системы мы сталкиваемся с жесткими ограничениями типизации. Этот объект предназначен для работы с конкретными элементами справочников или задачами бизнес-процессов, но он не обладает гибким механизмом динамической фильтрации, к которому мы привыкли в интерфейсе 1С. Попытка передать свойство performer в этот тип запроса закономерно вызывает ошибку, так как данное поле отсутствует в структуре DMObjectListCondition для этого класса.

Решение проблемы: использование DMGetDynamicListRequest

Если ваша задача — получить список задач, которые отображаются в динамических списках 1С:Документооборот, следует пересмотреть подход к выбору типа запроса. Вместо DMGetObjectListRequest необходимо использовать DMGetDynamicListRequest.

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

  1. Проверка метаданных: При отладке веб-сервиса на стороне 1С:Документооборот в модуле ОбработкаЗапросовXDTOБизнесПроцессыИЗадачи можно обнаружить, что именно DMGetDynamicListRequest является корректным методом для передачи условий фильтрации по исполнителям.
  2. Изменение структуры запроса: При инициализации XDTO-объекта замените тип на соответствующий:
    
    // Заменяем создание типа запроса
    Запрос = Прокси.ФабрикаXDTO.Создать(Прокси.ФабрикаXDTO.Тип("http://www.1c.ru/dm", "DMGetDynamicListRequest"));
    
  3. Применение условий: Теперь система корректно распознает свойство performer внутри условий отбора, так как динамический список ДО ожидает именно такой формат фильтрации для задач.

Альтернативный подход: работа с DMBusinessProcessTask

Если архитектура вашего решения требует использования именно DMGetObjectListRequest, необходимо изменить тип объекта, который вы запрашиваете. Вместо DMTaskAction следует использовать DMBusinessProcessTask.

Однако просто заменить тип недостаточно. Чтобы фильтрация сработала, при передаче исполнителя необходимо соблюдать строгую типизацию:

  1. Создание исполнителя: Значение value для условия отбора должно содержать объект типа DMBusinessProcessTaskExecutor.
  2. Заполнение данных: В этот объект должны быть переданы ID, наименование и тип объекта пользователя из базы 1С:Документооборот.
  3. Использование библиотек: Рекомендуется использовать штатные функции из общих модулей ИнтеграцияС1СДокументооборот, такие как ЗаполнитьОбъектXDTOИзОбъектногоРеквизита, чтобы избежать ошибок сериализации XML при формировании SOAP-запроса.

Советы по отладке интеграции

Работа с веб-сервисами в 1С требует тщательной настройки среды. Чтобы не тратить время на поиск причин ошибок, следуйте этим рекомендациям:

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

← На главную