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