Данное описание оставляю больше для себя, чтобы не забыть, ну и, может, еще кому поможет, т.к. не нашел нигде нормального описания.
Загрузка происходит прямым подключением к SQL базе.
Пример подключения к SQL базе и функция выполнения запроса
&НаСервере
Функция БазаДВ_ПодключитьсяКСерверу(ДанныеПодключения)
СтрокаПодключения = "DRIVER={SQL Server Native Client 11.0};SERVER="+ДанныеПодключения.Сервер+";UID="+ДанныеПодключения.Пользователь+";PWD="+ДанныеПодключения.Пароль+";DATABASE="+ДанныеПодключения.База;
Соединение = Новый COMОбъект("ADODB.Connection");
Соединение.ConnectionString = СтрокаПодключения;
Соединение.ConnectionTimeout = 30;
Соединение.CommandTimeout = 600;
Соединение.Open();
Возврат Соединение;
КонецФункции
&НаСервере
Функция БазаДВ_ВыполнитьЗапрос(Соединение, ТекстЗапроса)
Результ = Неопределено;
Команда = Новый COMОбъект("ADODB.Command");
Попытка
Команда.CommandText = ТекстЗапроса;
Команда.ActiveConnection = Соединение;
Результ = Команда.Execute()
Исключение
ЛогДобавить(ОписаниеОшибки());
КонецПопытки;
Возврат Результ;
КонецФункции
Основная проблема была понять, из каких таблиц брать данные для загрузки. В этом может помочь программа "DocsVision Explorer".
С помощью нее можно просматривать типы полей, данные в объектах. Также есть возможность выгрузки данных в XML для анализа, иногда только это и помогает понять, как хранятся данные.
Далее идут примеры готовых запросов для получения данных.
Список сотрудников с должностями.
select Employ.FirstName ,Employ.MiddleName ,Employ.LastName ,Employ.AccountName ,Employ.Email ,Employ.DisplayString ,Employ.SysAccountName ,Position.Name as PositionName ,Employ.Status from [dvtable_{DBC8AE9D-C1D2-4D5E-978B-339D22B32482}] as Employ left join [dvtable_{CFDFE60A-21A8-4010-84E9-9D2DF348508C}] as Position on Employ.Position = Position.RowID
Получение универсальных документов со свойствами.
select Osnova.InstanceID as id, NameProject.DisplayValue as NameProject, Sostoyanie.DisplayValue as Sostoyanie, DataDogovora.DisplayValue as DataDogovora, Nomer.DisplayValue as Nomer, TypeDogovor.DisplayValue as TypeDogovor, VidDoc.DisplayValue as VidDoc, Comment.DisplayValue as Comment, Summa.DisplayValue as Summa, KodProekta.DisplayValue as KodProekta, DateOkonchania.DisplayValue as DateOkonchania, KontragentSpr.FullName as KontragentFullName, KontragentSpr.INN as KontragentINN, KontragentSpr.KPP as KontragentKPP, RegistratorSpr.FirstName as RegistratorFirstName, RegistratorSpr.LastName as RegistratorLastName, RegistratorSpr.MiddleName as RegistratorMiddleName, OtvetstvenniySpr.FirstName as OtvetstvenniyFirstName, OtvetstvenniySpr.LastName as OtvetstvenniyLastName, OtvetstvenniySpr.MiddleName as OtvetstvenniyMiddleName, IspolnitelSDOSpr.FirstName as IspolnitelSDOFirstName, IspolnitelSDOSpr.LastName as IspolnitelSDOLastName, IspolnitelSDOSpr.MiddleName as IspolnitelSDOMiddleName from [dvtable_{4BF5A4C4-CA53-4294-9D6B-00FAA48AB320}] as Osnova // dvtable_{4BF5A4C4-CA53-4294-9D6B-00FAA48AB320} Универсальный документ left outer join [dvtable_{d25f1089-c63d-43e1-9fa4-864c48eeccb4}] AS Sostoyanie ON // dvtable_{d25f1089-c63d-43e1-9fa4-864c48eeccb4} вложенная таблица свойств документа Sostoyanie.InstanceID = Osnova.InstanceID and Sostoyanie.Name = 'Состояние' left outer join [dvtable_{d25f1089-c63d-43e1-9fa4-864c48eeccb4}] AS DataDogovora ON DataDogovora.InstanceID = Osnova.InstanceID and DataDogovora.Name = 'Дата договора' left outer join [dvtable_{d25f1089-c63d-43e1-9fa4-864c48eeccb4}] AS Nomer ON Nomer.InstanceID = Osnova.InstanceID and Nomer.Name = 'Юр. номер' left outer join [dvtable_{d25f1089-c63d-43e1-9fa4-864c48eeccb4}] AS TypeDogovor ON TypeDogovor.InstanceID = Osnova.InstanceID and TypeDogovor.Name = 'Тип договора' left outer join [dvtable_{d25f1089-c63d-43e1-9fa4-864c48eeccb4}] AS VidDoc ON VidDoc.InstanceID = Osnova.InstanceID and VidDoc.Name = 'Вид документа' left outer join [dvtable_{d25f1089-c63d-43e1-9fa4-864c48eeccb4}] AS Comment ON Comment.InstanceID = Osnova.InstanceID and Comment.Name = 'Комментарии' left outer join [dvtable_{d25f1089-c63d-43e1-9fa4-864c48eeccb4}] AS Summa ON Summa.InstanceID = Osnova.InstanceID and Summa.Name = 'Сумма' left outer join [dvtable_{d25f1089-c63d-43e1-9fa4-864c48eeccb4}] AS KodProekta ON KodProekta.InstanceID = Osnova.InstanceID and KodProekta.Name = 'Код проекта' left outer join [dvtable_{d25f1089-c63d-43e1-9fa4-864c48eeccb4}] AS NameProject ON NameProject.InstanceID = Osnova.InstanceID and NameProject.Name = 'Наименование проекта' left outer join [dvtable_{d25f1089-c63d-43e1-9fa4-864c48eeccb4}] AS DateOkonchania ON DateOkonchania.InstanceID = Osnova.InstanceID and DateOkonchania.Name = 'Дата окончания договора' left outer join [dvtable_{d25f1089-c63d-43e1-9fa4-864c48eeccb4}] AS Registrator ON Registrator.InstanceID = Osnova.InstanceID and Registrator.Name = 'Регистратор' left outer join [dvtable_{DBC8AE9D-C1D2-4D5E-978B-339D22B32482}] AS RegistratorSpr ON // dvtable_{DBC8AE9D-C1D2-4D5E-978B-339D22B32482} Сотрудники RegistratorSpr.RowID = Registrator.Value left outer join [dvtable_{d25f1089-c63d-43e1-9fa4-864c48eeccb4}] AS Otvetstvenniy ON Otvetstvenniy.InstanceID = Osnova.InstanceID and Otvetstvenniy.Name = 'Ответственный исполнитель' left outer join [dvtable_{DBC8AE9D-C1D2-4D5E-978B-339D22B32482}] AS OtvetstvenniySpr ON OtvetstvenniySpr.RowID = Otvetstvenniy.Value left outer join [dvtable_{d25f1089-c63d-43e1-9fa4-864c48eeccb4}] AS IspolnitelSDO ON IspolnitelSDO.InstanceID = Osnova.InstanceID and IspolnitelSDO.Name = 'Исполнитель СДО' left outer join [dvtable_{DBC8AE9D-C1D2-4D5E-978B-339D22B32482}] AS IspolnitelSDOSpr ON IspolnitelSDOSpr.RowID = IspolnitelSDO.Value left outer join [dvtable_{d25f1089-c63d-43e1-9fa4-864c48eeccb4}] AS Kontragent ON Kontragent.InstanceID = Osnova.InstanceID and Kontragent.Name = 'Контрагент' left outer join [dvtable_{C78ABDED-DB1C-4217-AE0D-51A400546923}] AS KontragentSpr ON // dvtable_{C78ABDED-DB1C-4217-AE0D-51A400546923} Контрагенты KontragentSpr.RowID = Kontragent.Value where Sostoyanie.DisplayValue <> 'Аннулирован' order by DataDogovora.Value
Получение связанных документов.
select Osnova.InstanceID as id, Links.LinkDesc as LinkDesc, Links.Link as Link from [dvtable_{4BF5A4C4-CA53-4294-9D6B-00FAA48AB320}] as Osnova left outer join [dvtable_{d25f1089-c63d-43e1-9fa4-864c48eeccb4}] AS Sostoyanie ON Sostoyanie.InstanceID = Osnova.InstanceID and Sostoyanie.Name = 'Состояние' left outer join [dvtable_{d25f1089-c63d-43e1-9fa4-864c48eeccb4}] AS DataDogovora ON DataDogovora.InstanceID = Osnova.InstanceID and DataDogovora.Name = 'Дата договора' left outer join [dvtable_{d25f1089-c63d-43e1-9fa4-864c48eeccb4}] AS TypeDogovor ON TypeDogovor.InstanceID = Osnova.InstanceID and TypeDogovor.Name = 'Тип договора' left outer join [dvtable_{d25f1089-c63d-43e1-9fa4-864c48eeccb4}] AS KodProekta ON KodProekta.InstanceID = Osnova.InstanceID and KodProekta.Name = 'Код проекта' left outer join [dvtable_{EF30744A-7A2C-4ADC-B275-28FF3C57E754}] AS Links ON Links.InstanceID = Osnova.InstanceID where Links.Link is not null order by id
Получение списка прикрепленных файлов
select Osnova.InstanceID as InstanceID, Nomer.DisplayValue as Nomer, CardFile.FileName, CardFile.FileID, max(VersionedFileCard.Version) as MaxVesrionNumber into #tmpVersionFiles // Помещаем во временную таблицу from [dvtable_{4BF5A4C4-CA53-4294-9D6B-00FAA48AB320}] as Osnova left outer join [dvtable_{d25f1089-c63d-43e1-9fa4-864c48eeccb4}] AS Nomer ON Nomer.InstanceID = Osnova.InstanceID and Nomer.Name = 'Юр. номер' left outer join [dvtable_{d25f1089-c63d-43e1-9fa4-864c48eeccb4}] AS NameProject ON NameProject.InstanceID = Osnova.InstanceID and NameProject.Name = 'Наименование проекта' left outer join [dvtable_{3F8270DB-3603-463C-BA59-26B89EBB6CB5}] AS FileReferences ON /* Список Файлов основная таблица*/ FileReferences.InstanceID = Osnova.FilesID left outer join [dvtable_{E962AC85-0F53-4439-A1CD-171E46C3EF91}] AS FileReferencesRow ON /* Список Файлов строки */ FileReferences.InstanceID = FileReferencesRow.InstanceID left outer join [dvtable_{B4562DF8-AF19-4D0F-85CA-53A311354D39}] AS CardFile ON /* Карточка файла */ FileReferencesRow.CardFileID = CardFile.InstanceID left outer join [dvtable_{F831372E-8A76-4ABC-AF15-D86DC5FFBE12}] AS VersionedFileCard ON /* Карточка файла с версиями */ CardFile.FileID = VersionedFileCard.InstanceID group by Osnova.InstanceID, Nomer.DisplayValue, CardFile.FileName, CardFile.FileID // ======= Получаем данные из временной таблицы и связываем с таблицей файлов. select #tmpVersionFiles.InstanceID as id, #tmpVersionFiles.FileName as FileName, #tmpVersionFiles.MaxVesrionNumber as MaxVesrionNumber, VersionedFileCard.FileID as FileID, /* ид версии */ Files.BinaryID as BinaryID from #tmpVersionFiles left outer join [dvtable_{F831372E-8A76-4ABC-AF15-D86DC5FFBE12}] AS VersionedFileCard ON /* Карточка файла с версиями */ #tmpVersionFiles.FileID = VersionedFileCard.InstanceID and #tmpVersionFiles.MaxVesrionNumber = VersionedFileCard.Version left outer join [dvsys_files] AS Files ON /* Файлы */ VersionedFileCard.FileID = Files.FileID left outer join dvsys_binaries AS binaries ON /* Бинарные данные */ binaries.id = Files.BinaryID where #tmpVersionFiles.FileID is not null order by #tmpVersionFiles.InstanceID
Получение файла и запись на диск
Запрос получения файла по ID
select data from [dvsys_binaries] where ID = ‘"+ИдБинарныхДанных+"’
Где ИдБинарныхДанных = это поле из вышележашего запроса.
Получение и запись бинарных данных в файл лучше делать через Stream.
&НаСервереБезКонтекста
Функция ПолучитьФайлАДО_Stream(Value, ИмяФайла)
Файл = Неопределено;
Stream = Новый COMОбъект("ADODB.Stream");
Stream.Type = 1;
Stream.Open();
Stream.Write(Value);
Stream.SaveToFile(ИмяФайла);
Stream.Close();
КонецФункции
Related Posts
- Получение логина и пароля техподдержки 1С из базы
- Класс для вывода отчета в Excel
- Счет-фактура для УПП
- Библиотека классов для создания внешней компоненты 1С на C#
- Акт об оказании услуг (со скидками) — внешняя печатная форма для Управление торговлей 11.1.10.86
- Прайс-лист с артикулом в отдельной колонке