|
|
|
Получение файлов ДО из БУХ | ☑ | ||
|---|---|---|---|---|
|
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 как запрос и как ответ" вообще, звучит красиво. а есть какой-то мануал, как это сделать? отправлять запросы, которые структуру которых я формирую и давать ответы, которые опять я формирую - это вообще все мои проблемы решит в данной области. как настроить? |
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |