![]() |
![]() |
![]() |
|
Получение файлов ДО из БУХ | ☑ | ||
---|---|---|---|---|
0
Terrixus
03.06.25
✎
11:17
|
Добрый день,
разбираюсь с интеграцией ДО с Бухгалтерией. Конкретно, надо получить информацию из справочника Файлы в обработке, т.е. программно на стороне БУХ. Где вообще описаны доступные способы/примеры программно получить подобную информацию. Я не могу их найти. Что-то похожее есть в общих модулях на стороне Бух, но к ним же должна быть документация? Версия БИД Версия 1.1.18, версия ДО 2 Корп |
|||
1
PLUT
гуру
03.06.25
✎
11:19
|
(0) почитайте для начала
Описание веб-сервисов.html Описание механизмов интеграции.doc в каталоге шаблонов 1С, что-то типа: ...tmplts\1c\DocMngCorpRuEng (не знаю, у вас обычный ДО или КОРП) |
|||
2
Bigbro
03.06.25
✎
11:27
|
смотрите в конфигурации про DMService и в частности DMGetObjectListRequest
|
|||
3
rozer76
03.06.25
✎
12:42
|
если нет в штатной интеграции то примерно так:
в ДО http-сервис по ИНН, ну в БУХ можно даже файл открыть, если он хранится в "томах". ПодробностиФункция ПолучитьФайлыGET(Запрос) Попытка Ответ = Новый HTTPСервисОтвет(200); ИНН = Запрос.ПараметрыURL["inn"]; СтрокаJSON = ПолучитьФайлыПоИНН(ИНН); Ответ.УстановитьТелоИзСтроки(СтрокаJSON,КодировкаТекста.UTF8,ИспользованиеByteOrderMark.Использовать); Исключение Ответ = Новый HTTPСервисОтвет(404); ТекстСообщения = СтрШаблон(НСтр("ru = 'Ошибка метода ПолучитьФайлыGET %1'"), ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); Ответ.УстановитьТелоИзСтроки(ТекстСообщения); КонецПопытки; Возврат Ответ; КонецФункции Функция ПолучитьФайлыПоИНН(ИНН) Если НЕ ЗначениеЗаполнено(ИНН) Тогда ВызватьИсключение "Не указан ИНН"; КонецЕсли; Запрос = Новый Запрос; Запрос.УстановитьПараметр("ИНН", ИНН); Запрос.Текст = "ВЫБРАТЬ | ВнутренниеДокументы.Ссылка КАК Ссылка, | ВнутренниеДокументы.Контрагент КАК Контрагент, | ВнутренниеДокументы.Наименование КАК Наименование |ПОМЕСТИТЬ втВладелецФайлов |ИЗ | Справочник.ВнутренниеДокументы КАК ВнутренниеДокументы |ГДЕ | ВнутренниеДокументы.Контрагент.ИНН = &ИНН | И НЕ ВнутренниеДокументы.ПометкаУдаления | И ВнутренниеДокументы.Контрагент <> ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка) |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | втВладелецФайлов.Наименование КАК ВладелецНаименование, | Файлы.ТекущаяВерсияРасширение КАК Расширение, | Файлы.ТекущаяВерсияПутьКФайлу КАК ПутьКФайлуВТоме, | ЕСТЬNULL(Файлы.ТекущаяВерсияТом.ПолныйПутьWindows, """") КАК ПутьКТому, | втВладелецФайлов.Ссылка КАК ВладелецСсылка, | Файлы.Наименование КАК НаименованиеФайла, | Файлы.ДатаСоздания КАК ДатаСозданияФайла |ИЗ | втВладелецФайлов КАК втВладелецФайлов | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Файлы КАК Файлы | ПО втВладелецФайлов.Ссылка = Файлы.ВладелецФайла | И (НЕ Файлы.ПометкаУдаления) | И (НЕ Файлы.Зашифрован) | И (Файлы.ТекущаяВерсияТом <> ЗНАЧЕНИЕ(Справочник.ТомаХраненияФайлов.ПустаяСсылка)) | |УПОРЯДОЧИТЬ ПО | ВладелецНаименование"; УстановитьПривилегированныйРежим(Истина); Результат = Запрос.Выполнить(); Выборка = Результат.Выбрать(); Массив = Новый Массив; Пока Выборка.Следующий()Цикл Если ЗначениеЗаполнено(Выборка.ПутьКТому) И ЗначениеЗаполнено(Выборка.ПутьКФайлуВТоме) Тогда ПутьКФайлу = Выборка.ПутьКТому + Выборка.ПутьКФайлуВТоме; СрокДействияСтрока = ДелопроизводствоКлиентСервер.СформироватьПредставлениеСрокаДействия(Выборка.ВладелецСсылка); СрокДействияСтрока = СтрЗаменить(СрокДействияСтрока,Символы.ПС," "); ПредставлениеВладельца = СтрШаблон(НСтр("ru = '%1 (%2)'"), Выборка.ВладелецНаименование, Выборка.НаименованиеФайла); Структура = Новый Структура("Владелец, Расширение, ПутьКФайлу, СрокДействия, ДатаСозданияФайла", ПредставлениеВладельца, Выборка.Расширение, ПутьКФайлу, СрокДействияСтрока, Выборка.ДатаСозданияФайла); ЗаполнитьЗначенияСвойств(Структура, Выборка); Массив.Добавить(Структура); КонецЕсли; КонецЦикла; УстановитьПривилегированныйРежим(Ложь); НастройкиСериализацииJSON = Новый НастройкиСериализацииJSON; НастройкиСериализацииJSON.ВариантЗаписиДаты = ВариантЗаписиДатыJSON.ЛокальнаяДата; НастройкиСериализацииJSON.ФорматСериализацииДаты = ФорматДатыJSON.ISO; Возврат СериализоватьJSON(Массив,НастройкиСериализацииJSON); КонецФункции |
|||
4
Terrixus
03.06.25
✎
15:20
|
(2) получаю объекты типа DMFile, почему-то слишком мало полей. Например, нет даже расширения, владельца, даты создания... Что я делаю не так? Я могу как-то отфильтровать их по имени владельцу, например?
Вот код Прокси = ИнтеграцияС1СДокументооборотПовтИсп.ПолучитьПрокси(); Запрос = ИнтеграцияС1СДокументооборот.СоздатьОбъект(Прокси, "DMGetObjectListRequest"); Запрос.type = "DMFile"; //Запрос.query = СписокУсловий; Результат = Прокси.execute(Запрос); ИнтеграцияС1СДокументооборот.ПроверитьВозвратВебСервиса(Прокси, Результат); Для Каждого Элемент из Результат.items Цикл Сообщить(СтрШаблон("%1 %2 %3", Элемент.object.name, Элемент.object.objectId.id, Элемент.object.objectId.type )); КонецЦикла; |
|||
5
Garykom
гуру
03.06.25
✎
15:31
|
(4) columnSet установи для возврата
или для каждого в цикле запрашивай конкретный DMFile |
|||
6
Garykom
гуру
03.06.25
✎
15:32
|
(4) для фильтра в ДО изучи в конфигураторе ОбработкаЗапросовXDTO.ОбработатьУниверсальноеСообщение
ищи подходящий |
|||
7
Garykom
гуру
03.06.25
✎
15:33
|
(6)+ например
ИначеЕсли ПроверитьТип(Сообщение, "DMGetFileListByOwnerRequest") Тогда Результат = ПолучитьСписокФайловПоВладельцу(Сообщение); |
|||
8
Garykom
гуру
03.06.25
✎
15:38
|
А еще лучше не страдать с изучением БИДа а допилить один свой универсальный метод и все
Добавь в XDTO пакет DM (в ДО) свой "универсальный" тип (точнее два типа), с неограниченной строкой запроса входящего и результата исходящего И хреначь туда JSON как запрос и как ответ В итоге что хочешь то и запрашивай и сам как надо кодом возвращай через сериализацию JSON Например я так отбор компоновки данных со всеми группами гоняю из ЕРП в ДО И текст запроса для ДО В ответ результат запроса с наложенным через СКД отбором возвращается |
|||
9
Terrixus
03.06.25
✎
16:09
|
Ну вот у меня есть список, который я получил через DMGetObjectListRequest. Каким образом мне получить адрес хранения файла в ДО (хранится в файловом томе, реквизит ТекущаяВерсияПутьКФайлу)
В текущем объекте там такого нет. |
|||
10
Garykom
гуру
03.06.25
✎
16:13
|
(9) адрес нельзя получить этим методом
и нахрена он тебе? можно получить двоичные данные файла или наваять свой метод для получения адреса ну или допилить текущий типа в columnSet передаешь нечто вроде "ТекущаяВерсияПутьКФайлу" или "твойпрефикс_НужныйРеквизит" |
|||
11
Terrixus
03.06.25
✎
16:45
|
"и нахрена он тебе?"
Мне нужно его локально сохранить. Двоичные данные тоже подойдут. Как их получить? Спасибо, выручаете. |
|||
12
Garykom
гуру
03.06.25
✎
16:53
|
binaryData
|
|||
13
Terrixus
03.06.25
✎
16:57
|
Это я понял ) Ну то есть так же, через columnSet.
Я посмотрел глобальным поиском, синтаксис такой Запрос.columnSet.Добавить("name"); Запрос.columnSet.Добавить("binaryData"); Запрос.columnSet.Добавить("extension"); Копирую к себе это условие - "Поле объекта не обнаружено (columnSet)". что я делаю не так? |
|||
14
Garykom
гуру
03.06.25
✎
17:01
|
(12)+ например
ИнтеграцияС1СДокументооборотБазоваяФункциональностьВызовСервера.ФайлыПоВладельцу // Возвращает список XDTO файлов по объекту Документооборота. // // Параметры: // ИдентификаторВладельца - Строка - уникальный идентификатор объекта Документооборота. // ИмяВладельца - Строка - представление объекта Документооборота. // ТипВладельца - Строка - тип XDTO объекта Документооборота. // ВключатьПомеченныеНаУдаление - Булево - Истина, если нужно получить файлы без учета пометки. // // Возвращаемое значение: // ОбъектXDTO - Список объектов XDTO типа DMFile. // Функция ФайлыПоВладельцу(ИдентификаторВладельца, ИмяВладельца, ТипВладельца, ВключатьПомеченныеНаУдаление = Ложь) Экспорт Прокси = ИнтеграцияС1СДокументооборотБазоваяФункциональностьПовтИсп.ПолучитьПрокси(); Запрос = ИнтеграцияС1СДокументооборотБазоваяФункциональность.СоздатьОбъект(Прокси, "DMGetFileListByOwnerRequest"); ПолучаемыеПоля = Запрос.columnSet; // СписокXDTO Владельцы = Запрос.owners; // СписокXDTO ОбъектВладелец = ИнтеграцияС1СДокументооборотБазоваяФункциональность.СоздатьОбъект(Прокси, "DMObject"); ОбъектВладелец.name = ИмяВладельца; ОбъектВладелец.objectID = ИнтеграцияС1СДокументооборотБазоваяФункциональность.СоздатьObjectID( Прокси, Строка(ИдентификаторВладельца), ТипВладельца); Владельцы.Добавить(ОбъектВладелец); ПолучаемыеПоля.Добавить("objectID"); ПолучаемыеПоля.Добавить("signed"); ПолучаемыеПоля.Добавить("name"); ПолучаемыеПоля.Добавить("size"); ПолучаемыеПоля.Добавить("creationDate"); ПолучаемыеПоля.Добавить("modificationDateUniversal"); ПолучаемыеПоля.Добавить("author"); ПолучаемыеПоля.Добавить("extension"); ПолучаемыеПоля.Добавить("description"); ПолучаемыеПоля.Добавить("encrypted"); ПолучаемыеПоля.Добавить("editing"); // добавить binaryData ПолучаемыеПоля.Добавить("binaryData"); Если ВключатьПомеченныеНаУдаление Тогда Запрос.ignoreDeletionMark = Истина; ПолучаемыеПоля.Добавить("deletionMark"); КонецЕсли; // Захват и редактирование файлов. Если ИнтеграцияС1СДокументооборотБазоваяФункциональностьПовтИсп.ДоступенФункционалВерсииСервиса("1.4.8.1") Тогда ПолучаемыеПоля.Добавить("editingUser"); КонецЕсли; Файлы = ИнтеграцияС1СДокументооборотБазоваяФункциональность.ВыполнитьЗапрос(Прокси, Запрос); ИнтеграцияС1СДокументооборотБазоваяФункциональность.ПроверитьВозвратВебСервиса(Прокси, Файлы); Возврат Файлы; КонецФункции |
|||
15
Garykom
гуру
03.06.25
✎
17:01
|
(13) ты какую DM используешь и как?
смотри (14) |
|||
16
Terrixus
03.06.25
✎
17:09
|
(15) понял в чем разница. Я прокси подключаю так
Прокси=ИнтеграцияС1СДокументооборот.ПолучитьПрокси(Истина,"Администратор","",ложь); Если поменять на строку как в сообщении выше, то columnSet ошибку не выдает. |
|||
17
Terrixus
03.06.25
✎
17:12
|
(15) сори, разница не в прокси, а в методе. уже запутался в конец - спасибо, буду разбираться.
|
|||
18
Terrixus
04.06.25
✎
16:49
|
"Добавь в XDTO пакет DM (в ДО) свой "универсальный" тип (точнее два типа), с неограниченной строкой запроса входящего и результата исходящего
И хреначь туда JSON как запрос и как ответ" вообще, звучит красиво. а есть какой-то мануал, как это сделать? отправлять запросы, которые структуру которых я формирую и давать ответы, которые опять я формирую - это вообще все мои проблемы решит в данной области. как настроить? |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |