Пример создания SQL запроса к EXEL. Код 1C v 8.3 [c83]
Здесь я расскажу как правильно формировать SQL запрос к EXEL дабы правильно подрубаться через разные методы подключения и создания ComОбьектов, так как в инете много разного пишут по этому поводу но конкретики что делать нет. . . .
Приступим, создаем или открываем заполненную таблицу exel, далее заходим во вкладку данные выбираем "Из других источников и выбираем ИЗ Microsoft Quer" далее выбираете источник Базы Данных "Exel Files" далее будет выбор книги не стал делать скрин так как там просто нужно выбрать файл какой мы открываем( "Пользователь /ПутьФайла/Файл" ) , далее появится форма создания запроса здесь выбираем нужный лист жмем стрелку переноса в столбцы запроса жмём далее, пропускаем все предложенные варианты, так как там будет предрлагатся задать правило отбора данных, порядок сортировки и тп. задача стояла в простом запросе так что пропускаем все условия, далее на заключительном шаге выбираем "Просмотр или изменение данных Microsoft Quer" жмём готово.
Откроется "Microsoft Query" представляет собой программу для переноса данных из внешних источников в программы Microsoft Office, в частности Microsoft Excel - это из справки о программе, а на деле это программа дает возможность строить правильный запрос к exel как сложные так и простые, о построении сложных подробнее можно почитать в справке о программе, а чтобы увидеть как обратится к exel из 1 с достаточно нажать кнопку SQL так называемый режим SQL и мы увидим запрос SQL который можно использовать при написании выгрузки и загрузки exel. . . в моём случае загрузка в бд через ADODB. Connection упиралась в SQLзапрос, так как я не мог его построить правильно, а здесь уже готовый запрос который подходит по синтаксису к 1 с.
Пример кода чтения EXEL.
Функция ВыполнитьЗагрузку(ПутьКФайлу) Экспорт
Файл= Новый Файл( ПутьКФайлу) ;
Если Файл. Существует( ) Тогда Стр_Файл= Файл. ПолноеИмя;
Если Прав( Стр_Путь, 1 ) = "\" Тогда Стр_Путь= Лев( Стр_Путь, СтрДлина( Стр_Путь) - 1 ) ;
КонецЕсли ;
|DriverId=790;
|Dbq="+Стр_Файл+";
|DefaultDir="+Стр_Путь+";";
Об_Конект = Новый COMОбъект( "ADODB.Connection" ) ;
Попытка Об_Конект. Open( Стр_Конект) ;
Исключение Сообщить( ОписаниеОшибки( ) ) ;
Сообщить ( "Не возможно подключится к Microsoft Excel Driver!!!
|Возможно файл [" + Стр_Файл+ "] открыт другим пользователем." ) ;
Возврат Ложь ; КонецПопытки ;
Стр_SQL = "SELECT `Лист1$`.Город,`Лист1$`.Заправка FROM`C:\Users\User_scan\Desktop\файл.xls`.`Лист1$``Лист1$`" ;
Об_РекордСет = Новый COMОбъект( "ADODB.Recordset" ) ;
Попытка Об_РекордСет= Об_Конект. Execute( Стр_SQL) ;
Исключение Сообщить( "Не удадлось выполнить запрос к файлу Excel
|" + ОписаниеОшибки( ) , СтатусСообщения. Важное) ;
Возврат Ложь ;
КонецПопытки ;
Номер = 1 ;
Пока НЕ Об_РекордСет. EOF Цикл
Для каждого ОБ_Поле Из Об_РекордСет. Fields Цикл
КонецЦикла ;
КонецЦикла ;
Сообщить( Номер) ;
Об_Конект. Close( ) ;
Об_Конект= Неопределено ;
Об_РекордСет= Неопределено ;
Возврат Истина ;
Иначе Сообщить( "Файл " + ПутьКФайлу+ " не найден!" ) ;
Возврат Ложь ;
КонецЕсли ;
КонецФункции
[/pre]
Категория:
COM-объекты, WMI, WSH Фоновые задания 1С, примеры работы и параллельного запуска В рамках выполнения проекта столкнулся с интересной задачей ускорения загрузки данных из других информационных баз. Задача загрузки данных предполагала выполнение к внешней базе несвязанных между собой запросов, результаты которых помещаются в одну таблицу значений. Когда на оптимизацию запроса рука уже не поднималась, приступил к ускорению загрузки с помощью распараллеливания процессов. Отмечу, что элементы кода в данном посте приведены для клиент-серверного варианта и укрупнено для общего понимания подхода.
Что у нас в 1с Предприятии 8.2 имеется для распараллеливания & это фоновые задачи . Метод, который будет вызываться в фоновой задаче, должен быть прописан в серверном общем модуле и быть экспортным. Естественно нам понадобиться в фоновую задачу передавать и забирать значения.
В моем случае передача значений в фоновую задачу происходила через параметры. Метод ЗагрузитьИзВИБ имеет два параметра это ВходнойПараметр и АдресВХранилище. ВходнойПараметр это структура, в которую сгружаются все данные, необходимые для проведения загрузки. АдресВХранилище это адрес во временном хранилище, по которому будет передан результат загрузки. Сам код метода фонового задания выглядит так:
Код 1C v 8.х Процедура ЗагрузитьИзВИБ(ВходнойПараметр,АдресВХранилище) Экспорт
ТаблицаДляЗаполнения = ВходнойПараметр. ТаблицаДляЗаполнения;
ДанныеОбъекта = ВходнойПараметр. ДанныеОбъекта;
ВыполнитьЗагрузку( ТаблицаДляЗаполнения, ДанныеОбъекта) ;
ПоместитьВоВременноеХранилище( ТаблицаДляЗаполнения, АдресВХранилище) ;
КонецПроцедуры
Зачем нам в фоновую задачу передавать адрес во временном хранилище. Наша фоновая задача должна куда-то положить результат, причем так чтобы мы знали где его потом взять.
Для того чтобы запустить фоновые задачи выполняется следующий код:
Код 1C v 8.х МассивАдресовВХранилище = Новый Массив;
МассивЗапущенныхЗаданий = Новый Массив;
Сч = 1 ;
Пока Сч < = КоличествоПотоков Цикл
Ключ = Новый УникальныйИдентификатор;
ВходнойПараметр = Новый Структура;
ВходнойПараметр. Вставить( "ТаблицаДляЗаполнения" , ТаблицаДляЗаполнения) ;
ВходнойПараметр. Вставить( "ДанныеОбъекта" , ДанныеОбъекта) ;
АдресВХранилище = ПоместитьВоВременноеХранилище( Неопределено ) ;
МассивПараметров = Новый Массив;
МассивПараметров. Добавить( ВходнойПараметр) ;
МассивПараметров. Добавить( АдресВХранилище) ;
МассивАдресовВХранилище. Добавить( АдресВХранилище) ;
МассивЗапущенныхЗаданий. Добавить( ФоновыеЗадания. Выполнить( "ОбщийМодульСервер.ЗагрузитьИзВИБ" , МассивПараметров, Ключ, "Загрузка" ) ) ;
Сч = Сч + 1 ;
КонецЦикла ;
Перед запуском фоновой задачи через ФоновыеЗадания.Выполнить() мы формируем массив параметров. Значения из массива параметров переходят в метод фонового задания в качестве параметров. В МассивЗапущенныхЗаданий хранятся все фоновые задачи, которые мы запустили. Теперь надо подождать их ожидания.
ФоновыеЗадания.ОжидатьЗавершения(МассивЗапущенныхЗаданий);
После того как все задачи были завершены, можем приступить к получению из них данных. Для этого мы проходим по всем адресам в хранилище, которые хранятся в массиве МассивАдресовВХранилище . После получения результата фонового задания перегоняем его в общую таблицу.
Код 1C v 8.х Для Каждого ТекАдресВХранилище Из МассивАдресовВХранилище Цикл
ТекТаблица = ПолучитьИзВременногоХранилища( ТекАдресВХранилище) ;
Для Каждого ТекСтрокаДанные Из ТекТаблица Цикл
НоваяСтрока = НашаОбщаяТаблица. Добавить( ) ;
ЗаполнитьЗначенияСвойств( НоваяСтрока, ТекСтрокаДанные) ;
КонецЦикла ;
КонецЦикла ;
Вопрос определения оптимального количества потоков выходит за рамки данного поста. А после получения некоторых результатов на рабочих данных пока что выходит и за рамки моего сознания . Но если у вас есть идеи как посчитать нужное количество потоков, пишите в комментариях, с радостью почитаю.
Источник
Категория:
Регламентные задания, Фоновые задания Скрипт автообновления типовых конфигураций Батник на "языке 1С" для клиент серверных баз, скачивает с сайта ИТС нужное обновление, бекапит базу и обновляет. Подойдет как рабочая заготовка для собственных "обновляторов". В текущем виде все работает. Надо только занести свои переменные.
Код 1C v 8.3
Перем мРасположениеОбновлений;
Перем мИтсЛогин;
Перем мИтсПароль;
Перем home;
Перем DumpIB;
Перем ФайлСписокОбновленийZIP;
Перем ФайлСписокОбновленийXML;
Перем КодВозврата;
Функция ФайлСуществует(Знач ПутьКФайлу) Экспорт
Файл = Новый Файл( ПутьКФайлу) ;
Возврат Файл. Существует( ) ;
КонецФункции
Процедура УстановитьКонстанты()
каталог_tmplts = "D:\tmplts" ;
мИтсЛогин = "---" ;
мИтсПароль = "---" ;
мРасположениеОбновлений = каталог_tmplts + "\1c" ;
home = каталог_tmplts + "\1Cupdate" ;
DumpIB = home + "\DumpIB\" ;
ФайлСписокОбновленийXML = home + "\v8cscdsc.xml" ;
ФайлСписокОбновленийZIP = home + "\v8upd11.zip" ;
Если НЕ ФайлСуществует( home) Тогда
СоздатьКаталог( home) ;
КонецЕсли ;
Если НЕ ФайлСуществует( DumpIB) Тогда
СоздатьКаталог( DumpIB) ;
КонецЕсли ;
Если НЕ ФайлСуществует( мРасположениеОбновлений) Тогда
СоздатьКаталог( мРасположениеОбновлений) ;
КонецЕсли ;
КонецПроцедуры
Функция ВернутьРелизИПлатформу(мИмяСервера,мИмяБазы,мВерсияПлатформы,мБазаЛогин,мБазаПароль)
ПараметрыБазы = Неопределено ;
Попытка
COMОбъект = Новый COMОбъект( "V" + мВерсияПлатформы+ ".COMConnector" ) ;
Исключение
Сообщить( "Не удалось создать COM-объект!" ) ;
Возврат ПараметрыБазы;
КонецПопытки ;
ПутьКБазе = "srvr="" " + СокрЛП( мИмяСервера) + """ ;" + "ref="" " + СокрЛП( мИмяБазы) + """ ;" ;
СтрокаСоединения = ПутьКБазе + "Usr="" " + СокрЛП( мБазаЛогин) + """ ;" + "Pwd="" " + СокрЛП( мБазаПароль) + """ ;" ;
Попытка
V82 = COMОбъект. Connect( СтрокаСоединения) ;
Исключение
Сообщить( СтрокаСоединения) ;
Сообщить( "Внешнее соединение не установлено!" ) ;
Возврат ПараметрыБазы;
КонецПопытки ;
ПараметрыБазы = Новый Структура;
ПараметрыБазы. Вставить( "ТекущаяВерсия" , v82. Метаданные. Версия) ;
ПараметрыБазы. Вставить( "ПутьКПлатформе" , v82. КаталогПрограммы( ) + "1cv8.exe" ) ;
Возврат ПараметрыБазы;
КонецФункции
Процедура УстановитьCOMСоединение(мИмяСервера,мИмяБазы,мВерсияПлатформы,мБазаЛогин,мБазаПароль)
Попытка
COMОбъект = Новый COMОбъект( "V" + мВерсияПлатформы+ ".COMConnector" ) ;
Исключение
Сообщить( "Не удалось создать COM-объект!" ) ;
Возврат ;
КонецПопытки ;
ПутьКБазе = "srvr="" " + СокрЛП( мИмяСервера) + """ ;" +
"ref="" " + СокрЛП( мИмяБазы) + """ ;" ;
СтрокаСоединения = ПутьКБазе +
"Usr="" " + СокрЛП( мБазаЛогин) + """ ;" +
"Pwd="" " + СокрЛП( мБазаПароль) + """ ;" ;
Сообщить( СтрокаСоединения) ;
Попытка
V82 = COMОбъект. Connect( СтрокаСоединения) ;
Исключение
Сообщить( СтрокаСоединения) ;
Сообщить( "Внешнее соединение не установлено!" ) ;
Возврат ;
КонецПопытки ;
КонецПроцедуры
Функция ВыполнитьЗагрузкуСпискаОбновлений(ИмяФайлаЗагрузки,ТекущаяВерсияКонфигурации)
СообщениеОбОшибке = "Ошибка при чтении файла списка обновлений." ;
Если НЕ ФайлСуществует( ИмяФайлаЗагрузки) Тогда
Сообщить( "Нету XML файла (списка обновлений)" ) ;
Возврат Неопределено ;
КонецЕсли ;
ВерсияДляОбновления = Неопределено ;
Попытка
ЧтениеXML = Новый ЧтениеXML;
ЧтениеXML. ОткрытьФайл( ИмяФайлаЗагрузки) ;
ЧтениеXML. Прочитать( ) ;
ЧтениеXML. Прочитать( ) ;
ЧтениеXML. Прочитать( ) ;
ДатаФормирования = ЧтениеXML. Значение;
ЧтениеXML. Прочитать( ) ;
Пока ЧтениеXML. Прочитать( ) Цикл
Если ЧтениеXML. Имя = "v8u:updateList" Тогда
Прервать ;
Иначе
Конфигурация = ЧтениеXML. ПолучитьАтрибут( "configuration" ) ;
Пока ЧтениеXML. Прочитать( ) Цикл
Если ЧтениеXML. Имя = "v8u:update" Тогда
Прервать ;
Иначе
Если ЧтениеXML. Имя = "v8u:vendor" Тогда
ЧтениеXML. Прочитать( ) ;
Поставщик = ЧтениеXML. Значение;
ИначеЕсли ЧтениеXML. Имя = "v8u:version" Тогда
ЧтениеXML. Прочитать( ) ;
Версия = ЧтениеXML. Значение;
ИначеЕсли ЧтениеXML. Имя = "v8u:file" Тогда
ЧтениеXML. Прочитать( ) ;
ПутьКФайлуОбновления = ЧтениеXML. Значение;
ИначеЕсли ЧтениеXML. Имя = "v8u:size" Тогда
ЧтениеXML. Прочитать( ) ;
РазмерФайлаОбновления = ЧтениеXML. Значение;
ИначеЕсли ЧтениеXML. Имя = "v8u:target" Тогда
ЧтениеXML. Прочитать( ) ;
Если ЧтениеXML. Значение = ТекущаяВерсияКонфигурации Тогда
ВерсияДляОбновления = Версия;
КонецЕсли ;
КонецЕсли ;
ЧтениеXML. Прочитать( ) ;
КонецЕсли ;
КонецЦикла ;
КонецЕсли ;
КонецЦикла ;
Исключение
Сообщить( СообщениеОбОшибке) ;
ЧтениеXML. Закрыть( ) ;
Возврат Неопределено ;
КонецПопытки ;
ЧтениеXML. Закрыть( ) ;
Возврат ВерсияДляОбновления;
КонецФункции
Процедура ПроверитьОбновлениеКонфигурации(мИмяСервера,мИмяБазы,мТипКонфигурации,мВерсияРелиза,мВерсияПлатформы,мБазаЛогин,мБазаПароль)
Сообщить( "----------------------------------------------------------------------" ) ;
УдалитьФайлы( ФайлСписокОбновленийXML) ;
УдалитьФайлы( ФайлСписокОбновленийZIP) ;
СерверОбновлений = Новый HTTPСоединение( "downloads.1c.ru" , , мИтсЛогин, мИтсПароль, ) ;
ЗапросКСерверуОбновлений = Новый HTTPЗапрос( "/ipp/ITSREPV/V8Update/Configs/" + мТипКонфигурации+ "/" + мВерсияРелиза+ "/" + мВерсияПлатформы+ "/v8upd11.zip" ) ;
СерверОбновлений. Получить( ЗапросКСерверуОбновлений, ФайлСписокОбновленийZIP) ;
ФайлZip = Новый ЧтениеZipФайла( ФайлСписокОбновленийZIP) ;
ФайлZip. ИзвлечьВсе( home) ;
ФайлZip. Закрыть( ) ;
УдалитьФайлы( ФайлСписокОбновленийZIP) ;
ПараметрыComБазы = ВернутьРелизИПлатформу( мИмяСервера, мИмяБазы, мВерсияПлатформы, мБазаЛогин, мБазаПароль) ;
Если ПараметрыComБазы = Неопределено Тогда
Возврат ;
КонецЕсли ;
ВерсияДляОбновления = ВыполнитьЗагрузкуСпискаОбновлений( ФайлСписокОбновленийXML, ПараметрыComБазы. ТекущаяВерсия) ;
ТребуетсяОбновление = Ложь ;
Если ВерсияДляОбновления = Неопределено Тогда
Сообщить( мИмяБазы + " ver: " + ПараметрыComБазы. ТекущаяВерсия+ " ОБНОВЛЕНИЕ НЕ ТРЕБУЕТСЯ" ) ;
Возврат ;
КонецЕсли ;
Сообщить( мИмяБазы + " ver: " + ПараметрыComБазы. ТекущаяВерсия+ " update: " + ВерсияДляОбновления) ;
КомандаПакетногоАрхивирования = """ " + ПараметрыComБазы. ПутьКПлатформе + """ " + " CONFIG /S" + мИмяСервера+ "\" + мИмяБазы+ " /N"" " + мБазаЛогин+ """ /P"" " + мБазаПароль+ """ /DumpIB " + DumpIB + мИмяБазы + ".dt /OUT "" " + home+ "\" + мИмяБазы+ ".log"" -NoTruncate" ;
ЗапуститьПриложение( КомандаПакетногоАрхивирования, , Истина , КодВозврата) ;
Если КодВозврата = 0 Тогда
Сообщить( "Резервная копия успешно создана." ) ;
Иначе
Сообщить( "Ошибка при создании резервной копии" ) ;
Возврат ;
КонецЕсли ;
Версия_Для_Обновления = СтрЗаменить( ВерсияДляОбновления, "." , "_" ) ;
Если НЕ ФайлСуществует( мРасположениеОбновлений + "\" + мТипКонфигурации+ "\" + Версия_Для_Обновления+ "\" ) Тогда
Заголовки = Новый Соответствие( ) ;
Заголовки. Вставить( "User-Agent" , "1C+Enterprise/8.2" ) ;
СерверОбновлений = Новый HTTPСоединение( "downloads.v8.1c.ru" , , мИтсЛогин, мИтсПароль, ) ;
СтрокаЗапросHTTP = "/tmplts/1c/" + мТипКонфигурации+ "/" + Версия_Для_Обновления + "/1cv8.zip" ;
Сообщить( СтрокаЗапросHTTP) ;
ЗапросКСерверуОбновлений = Новый HTTPЗапрос( СтрокаЗапросHTTP, Заголовки) ;
СерверОбновлений. Получить( ЗапросКСерверуОбновлений, мРасположениеОбновлений+ "\1cv8.zip" ) ;
ФайлZip = Новый ЧтениеZipФайла( мРасположениеОбновлений+ "\1cv8.zip" ) ;
ФайлZip. ИзвлечьВсе( мРасположениеОбновлений+ "\" + мТипКонфигурации+ "\" + Версия_Для_Обновления) ;
ФайлZip. Закрыть( ) ;
УдалитьФайлы( мРасположениеОбновлений+ "\1cv8.zip" ) ;
КонецЕсли ;
КомандаПакетногоОбновления = """ " + ПараметрыComБазы. ПутьКПлатформе + """ " + " CONFIG /S" + мИмяСервера+ "\" + мИмяБазы+ " /N"" " + мБазаЛогин+ """ /P"" " + мБазаПароль+ """ /UpdateCfg " + мРасположениеОбновлений+ "\" + мТипКонфигурации+ "\" + Версия_Для_Обновления + "\1cv8.cfu /UpdateDBCfg /OUT "" " + home+ "\" + мИмяБазы+ ".log"" -NoTruncate" ;
ЗапуститьПриложение( КомандаПакетногоОбновления, , Истина , КодВозврата) ;
Если КодВозврата = 0 Тогда
Сообщить( "База Успешно обновлена" ) ;
Иначе
Сообщить( "ОШИБКА ПРИ ОБНОВЛЕНИИ" ) ;
Возврат ;
КонецЕсли ;
ПараметрыComБазы = ВернутьРелизИПлатформу( мИмяСервера, мИмяБазы, мВерсияПлатформы, мБазаЛогин, мБазаПароль) ;
Если ПараметрыComБазы = Неопределено Тогда
Возврат ;
КонецЕсли ;
ВерсияДляОбновления = ВыполнитьЗагрузкуСпискаОбновлений( ФайлСписокОбновленийXML, ПараметрыComБазы. ТекущаяВерсия) ;
ТребуетсяОбновление = Ложь ;
Если ВерсияДляОбновления = Неопределено Тогда
Сообщить( мИмяБазы + " ver: " + ПараметрыComБазы. ТекущаяВерсия+ " ОБНОВЛЕНИЕ НЕ ТРЕБУЕТСЯ" ) ;
Возврат ;
КонецЕсли ;
Сообщить( мИмяБазы + " ver: " + ПараметрыComБазы. ТекущаяВерсия+ " update: " + ВерсияДляОбновления) ;
КонецПроцедуры
УстановитьКонстанты( ) ;
ПроверитьОбновлениеКонфигурации( "ka1sql1:1641" , "up_el" , "HRM" , "25" , "82" , "Администратор" , "Администратор" ) ;
ПроверитьОбновлениеКонфигурации( "ka1sql1:1641" , "up_spb" , "HRM" , "25" , "82" , "Администратор" , "Администратор" ) ;
ПроверитьОбновлениеКонфигурации( "ka1sql1:1741" , "bp_domx" , "Accounting" , "30" , "83" , "Администратор" , "Администратор" ) ;
ПроверитьОбновлениеКонфигурации( "ka1sql1:1741" , "bp_el" , "Accounting" , "30" , "83" , "Администратор" , "Администратор" ) ;
ПроверитьОбновлениеКонфигурации( "ka1sql1:1741" , "bp_ip" , "Accounting" , "30" , "83" , "Администратор" , "Администратор" ) ;
ПроверитьОбновлениеКонфигурации( "ka1sql1:1741" , "bp_guild" , "Accounting" , "30" , "83" , "Администратор" , "Администратор" ) ;
ПроверитьОбновлениеКонфигурации( "ka1sql1:1741" , "bp_lebedeva" , "Accounting" , "30" , "83" , "Администратор" , "Администратор" ) ;
ПроверитьОбновлениеКонфигурации( "ka1sql1:1741" , "bp_porsche" , "Accounting" , "30" , "83" , "Администратор" , "Администратор" ) ;
ПроверитьОбновлениеКонфигурации( "ka1sql1:1641" , "up_service" , "HRM" , "25" , "82" , "Администратор" , "Администратор" ) ;
Источник
Категория:
Администрирование Написании Выгрузки и Загрузки Данных используя Универсальный обмен данными в формате XML Написании обработок для выгрузки и загрузки данных используя методы обработки "Универсальный обмен данными в формате xml"
Принцип работы:
При изменении даты в форме, табличное поле заполняется документами за выбранную дату.
Сами правила обмена были вставлены в обработку как макет с типом "Двоичные данные".
При ВЫГРУЗКЕ используется код:
Код 1C v 8.х Процедура ДействияФормыВыгрузка(Кнопка)
ДиалогФайла = Новый ДиалогВыбораФайла( РежимДиалогаВыбораФайла. Сохранение) ;
ДиалогФайла. Фильтр = "Файл данных (*.xml)|*.xml" ;
ДиалогФайла. ПолноеИмяФайла = "Retail_" + СтрЗаменить( Формат( Дата, "ДФ=dd.MM.yyyy" ) , "." , "-" ) ;
Если ДиалогФайла. Выбрать( ) Тогда
ИмяФайла = ДиалогФайла. ПолноеИмяФайла;
Попытка
ВыгрузитьДанные( ИмяФайла) ;
ДвоичныеДанные = Новый ДвоичныеДанные( ИмяФайла) ;
ДвоичныеДанные. Записать( ИмяФайла) ;
Исключение
Предупреждение( "Внешний файл не сохранен
|" + ОписаниеОшибки( ) ) ;
КонецПопытки ;
КонецЕсли ;
КонецПроцедуры
Процедура ВыгрузитьДанные(ИмяФайлаОбмена)
Обработка= Обработки. УниверсальныйОбменДаннымиXML. Создать( ) ;
Обработка. РежимОбмена= "Выгрузка" ;
ВремФайл = ПолучитьИмяВременногоФайла( "xml" ) ;
МакетПравилОбмена = ПолучитьМакет( "ПравилаВыгрузки" ) ;
МакетПравилОбмена. Записать( ВремФайл) ;
Обработка. ИмяФайлаПравилОбмена = ВремФайл;
Обработка. ЗагружатьДанныеВРежимеОбмена = Истина ;
Обработка. ЗаписыватьРегистрыНаборамиЗаписей = Истина ;
Обработка. ЗапоминатьЗагруженныеОбъекты = Истина ;
Обработка. ИспользоватьОтборПоДатеДляВсехОбъектов = Истина ;
СписокДок = Новый Массив;
Для каждого Стр Из Документы Цикл
Если НЕ Стр. Флаг Тогда
Продолжить;
КонецЕсли ;
СписокДок. Добавить( Стр. Реализация) ;
КонецЦикла ;
Обработка. ДатаНачала = Дата;
Обработка. ДатаОкончания = КонецДня( Дата) ;
Обработка. ВыгружатьТолькоРазрешенные = Истина ;
Обработка. ИмяФайлаОбмена = ИмяФайлаОбмена;
Обработка. ТипУдаленияРегистрацииИзмененийДляУзловОбменаПослеВыгрузки = 0 ;
Обработка. ЗагрузитьПравилаОбмена( ) ;
Обработка. Параметры. Вставить( "Документы" , СписокДок) ;
Обработка. ВыполнитьВыгрузку( ) ;
КонецПроцедуры
Отбор по документам осуществляется с помощью параметра "Документы", описанного в правилах обмена.
При ЗАГРУЗКЕ используем следующий код:
Код 1C v 8.х ОбработкаОбмена = Обработки. УниверсальныйОбменДаннымиXML. Создать( ) ;
ОбработкаОбмена. ИмяФайлаОбмена = ФайлЗагрузки;
ОбработкаОбмена. РежимОбмена = "Загрузка" ;
ОбработкаОбмена. ОткрытьФайлЗагрузки( Истина ) ;
ОбработкаОбмена. АрхивироватьФайл = Ложь ; ;
ОбработкаОбмена. ВыполнитьЗагрузку( ) ;
ОбработкаОбмена = Неопределено ;
Посмотрите по этой теме:
Обработка - Универсальный обмен данными в формате XML
Автоматическая выгрузка / загрузка данных используя Универсальный обмен данными в формате XML и Регламентное Задание
Автоматизация обмена данных используя обработку "Универсальный обмен данными в формате XML" Категория:
Обработки Программное использование универсальной обработки Выгрузка Загрузка Данных XML Для работы, необходимо взять
обработку "ВыгрузкаЗагрузкаДанныхXML" , которая находится в шаблоне "Конвертация данных".
Пример обработки(автор Misha Macklaud):
Скачивать файлы может только зарегистрированный пользователь!
а это ее код:
Код 1C v 8.х Процедура КнопкаВыполнитьНажатие(Кнопка)
ОбработкаОбмен = Обработки. ВыгрузкаЗагрузкаДанныхXML. Создать( ) ;
ОбработкаОбмен. Инициализация( ) ;
ОбработкаОбмен. ОбработанныхКонстант = 0 ;
ОбработкаОбмен. ОбработанныхНаборовЗаписей = 0 ;
СписокОбъектовВыгрузки = Новый СписокЗначений;
СписокОбъектовВыгрузки. Добавить( Метаданные. Документы. РеализацияТоваровУслуг) ;
СписокОбъектовВыгрузки. Добавить( Метаданные. Документы. ПоступлениеТоваровУслуг) ;
СписокОбъектовВыгрузки. Добавить( Метаданные. Документы. ТребованиеНакладная) ;
Для й= 0 По СписокОбъектовВыгрузки. Количество( ) - 1 Цикл
СтрокаВыгрузки = ОбработкаОбмен. ДеревоМетаданных. Строки. Найти( СписокОбъектовВыгрузки[й]. Значение, "ОбъектМД" , Истина ) ;
СтрокаВыгрузки. Выгружать= 1 ;
ОбработкаОбмен. ОбработкаИзмененияСостоянияВыгружать( СтрокаВыгрузки) ;
Построитель = ОбработкаОбмен. ПодготовитьПостроительДляВыгрузки( СтрокаВыгрузки) ;
СписокСсылокВыгрузки = Новый СписокЗначений;
Для Каждого СтрокаТабДокументы Из ТабДокументы Цикл
Если ( СтрокаТабДокументы. Документ. Метаданные( ) = СписокОбъектовВыгрузки[й]. Значение) И ( СтрокаТабДокументы. ФлагВыгружать) Тогда
СписокСсылокВыгрузки. Добавить( СтрокаТабДокументы. Документ. Ссылка) ;
КонецЕсли ;
КонецЦикла ;
Отбор = Построитель. Отбор;
Отбор. Добавить( "Ссылка" , "Ссылка" ) ;
Отбор[0 ]. Использование = Истина ;
Отбор[0 ]. ВидСравнения = ВидСравнения. ВСписке;
Отбор[0 ]. Значение = СписокСсылокВыгрузки;
СтрокаВыгрузки. НастройкиПостроителя = Построитель. ПолучитьНастройки( ) ;
СтрокаВыгрузки. ИспользоватьОтбор = Истина ;
КонецЦикла ;
СписокОбъектовВыгрузки. Очистить( ) ;
Для й= 0 По СписокОбъектовВыгрузки. Количество( ) - 1 Цикл
СтрокаВыгрузки = ОбработкаОбмен. ДеревоМетаданных. Строки. Найти( СписокОбъектовВыгрузки[й]. Значение, "ОбъектМД" , Истина ) ;
СтрокаВыгрузки. ВыгружатьПриНеобходимости = 0 ;
ОбработкаОбмен. ОбработкаИзмененияСостоянияВыгружать( СтрокаВыгрузки) ;
КонецЦикла ;
СписокОбъектовВыгрузки. Очистить( ) ;
СписокОбъектовВыгрузки. Добавить( Метаданные. Справочники. Номенклатура) ;
Для й= 0 По СписокОбъектовВыгрузки. Количество( ) - 1 Цикл
СтрокаВыгрузки = ОбработкаОбмен. ДеревоМетаданных. Строки. Найти( СписокОбъектовВыгрузки[й]. Значение, "ОбъектМД" , Истина ) ;
СтрокаВыгрузки. Выгружать= 1 ;
ОбработкаОбмен. ОбработкаИзмененияСостоянияВыгружать( СтрокаВыгрузки) ;
КонецЦикла ;
ИмяФайлаЗагрузки = "D:\А-Б.xml" ;
ОбработкаОбмен. ВыполнитьЗагрузку( ИмяФайлаЗагрузки) ;
ИмяФайлаВыгрузки = "D:\Б-А.xml" ;
ОбработкаОбмен. ВыполнитьВыгрузку( ИмяФайлаВыгрузки) ;
КонецПроцедуры
Процедура ВыбПериодНажатие(Элемент)
НастройкаПериода = Новый НастройкаПериода;
НастройкаПериода. РедактироватьКакИнтервал = Истина ;
НастройкаПериода. РедактироватьКакПериод = Истина ;
НастройкаПериода. ВариантНастройки = ВариантНастройкиПериода. Период;
НастройкаПериода. УстановитьПериод( НачПериода, ? ( КонПериода= '0001 - 01 - 01 ', КонПериода, КонецДня( КонПериода) ) ) ;
Если НастройкаПериода. Редактировать( ) Тогда
НачПериода = НастройкаПериода. ПолучитьДатуНачала( ) ;
КонПериода = НастройкаПериода. ПолучитьДатуОкончания( ) ;
КонецЕсли ;
КонецПроцедуры
Процедура ПриОткрытии()
НачПериода = ТекущаяДата( ) ;
КонПериода = ТекущаяДата( ) ;
КонецПроцедуры
Процедура ЗаполнитьТабЧастьОбъектом(Запрос,ОбъектЗапроса,ТЗ)
Запрос. Текст = "ВЫБРАТЬ
| ОбъектЗапроса.Ссылка
|ИЗ
| Документ." + ОбъектЗапроса+ " КАК ОбъектЗапроса
|ГДЕ
| ОбъектЗапроса.ПометкаУдаления = ЛОЖЬ И
| ОбъектЗапроса.Дата МЕЖДУ &ДатаНач И &ДатаКон" ;
Запрос. УстановитьПараметр( "ДатаНач" , НачалоДня( НачПериода) ) ;
Запрос. УстановитьПараметр( "ДатаКон" , КонецДня( КонПериода) ) ;
Выборка = Запрос. Выполнить( ) . Выбрать( ) ;
Пока Выборка. Следующий( ) Цикл
НоваяСтрока = ТЗ. Добавить( ) ;
НоваяСтрока. Дата = Выборка. Ссылка. Дата;
НоваяСтрока. Документ = Выборка. Ссылка;
КонецЦикла ;
КонецПроцедуры
Процедура ЗаполнитьНажатие(Элемент)
ТабДокументы. Очистить( ) ;
ТЗ = Новый ТаблицаЗначений;
ТЗ. Колонки. Добавить( "Дата" ) ;
ТЗ. Колонки. Добавить( "Документ" ) ;
Запрос = Новый Запрос;
Если флРеализация Тогда
ОбъектЗапроса = "РеализацияТоваровУслуг" ;
ЗаполнитьТабЧастьОбъектом( Запрос, ОбъектЗапроса, ТЗ) ;
КонецЕсли ;
Если флПоступление Тогда
ОбъектЗапроса = "ПоступлениеТоваровУслуг" ;
ЗаполнитьТабЧастьОбъектом( Запрос, ОбъектЗапроса, ТЗ) ;
КонецЕсли ;
Если флТребованиеНакладная Тогда
ОбъектЗапроса = "ТребованиеНакладная" ;
ЗаполнитьТабЧастьОбъектом( Запрос, ОбъектЗапроса, ТЗ) ;
КонецЕсли ;
ТЗ. Сортировать( "Дата" ) ;
Для Каждого Стр Из ТЗ Цикл
НоваяСтрока = ТабДокументы. Добавить( ) ;
НоваяСтрока. Документ = Стр. Документ;
НоваяСтрока. ФлагВыгружать = Истина ;
КонецЦикла ;
КонецПроцедуры
Категория:
Конвертация данных, Обмен, Перенос Автоматизация обмена данных используя обработку "Универсальный обмен данными в формате XML" Автоматизация обмена между базами используя обработку "Универсальный обмен данными в формате XML"
В основу данной публикации положены найденные мною материалы по cозданию обмена между двумя базами с использованием обработки "Универсальный обмен данными в формате XML" . Но предлагается вариант автоматизации решения задачи которая позволяет выполнять обмен неквалифицированным пользователям, либо по регламенту. Скажем такой обмен применим если вы не можите по ряду причин использовать РБД, либо совсем разные конфигурации баз (случаи бывают разные, а хочется максимально настраиваемой гибкости).
Вначале безусловно воспользуемся конфигурацией "Конвертация данных" чтобы создать необходимые нам правила обмена (как - это отдельная тема).
Итак Собственно сама ВЫГРУЗКА:
Код 1C v 8.х Обработка = Обработки. УниверсальныйОбменДаннымиXML. Создать( ) ;
Обработка. РежимОбмена = "Выгрузка" ;
Обработка. ВыводВОкноСообщенийИнформационныхСообщений = Истина ;
При необходимости можно задать период выгрузки ( как пример) :
Обработка. ДатаНачала = ТекущаяДата( ) ;
Обработка. ДатаОкончания = ТекущаяДата( ) ;
Обработка. ИмяФайлаПравилОбмена = "D:\ПравилаОбменаДанными.xml" ;
Источник = ЭтотОбъект. Ссылка;
ИмяФайла = Строка( ТипЗнч( Источник) ) + " " + Строка( Источник. Номер) ;
Обработка. ИмяФайлаОбмена = "D:\E\" + Источник + ".xml" ;
Обработка. ЗагрузитьПравилаОбмена( ) ;
Основные параметры мы определили, теперь надо настроить отбор, если в этом нет необходимости то просто запускаете выгрузку:
Обработка. ВыполнитьВыгрузку( ) ;
Настройка ОТБОРА:
Тут надо обратить внимание на массив "ВременнаяТаблицаПравил.Строки[1]" и в частности на индекс массива строк,
1 - это ветка "Справочники". Ну и так далее по аналогии
Код 1C v 8.х ВременнаяТаблицаПравил = Обработка. ТаблицаПравилВыгрузки. Скопировать( ) ;
Для Каждого СтрокаУровня2 Из ВременнаяТаблицаПравил. Строки[1 ]. Строки Цикл
Наименование = СтрокаУровня2 . Имя;
Если Наименование < > "ПеремещениеТоваров00001" Тогда
СтрокаУровня2 . Включить = 0 ;
КонецЕсли ;
КонецЦикла ;
Для Каждого СтрокаУровня2 Из ВременнаяТаблицаПравил. Строки[2 ]. Строки Цикл
Наименование = СтрокаУровня2 . Имя;
Если Наименование < > "ПеремещениеТоваров00001" Тогда
СтрокаУровня2 . Включить = 0 ;
КонецЕсли ;
КонецЦикла ;
Сдесь вы определяете искомое правило выгрузки которое нужно оставить включенным на определенной ветке (сами можите варьировать чего и сколько)
Код 1C v 8.х Для Каждого СтрокаУровня2 Из ВременнаяТаблицаПравил. Строки[0 ]. Строки Цикл
Наименование = СтрокаУровня2 . Имя;
Если Наименование = "ПеремещениеТоваров00001" Тогда
СтрокаУровня2 . Включить = 1 ;
Иначе
СтрокаУровня2 . Включить = 0 ;
КонецЕсли ;
КонецЦикла ;
Обработка. ТаблицаПравилВыгрузки = ВременнаяТаблицаПравил. Скопировать( ) ;
Теперь настраиваем ОТБОР смысл которого передать в нашу выгрузку ссылку на документ(ты) который(е) хотим выгрузить:
Код 1C v 8.х Для Каждого СтрокаУровня2 Из ВременнаяТаблицаПравил. Строки[0 ]. Строки Цикл
Наименование = СтрокаУровня2 . Имя;
Если Наименование = "ПеремещениеТоваров00001" Тогда
ТекущееПВД = СтрокаУровня2 ;
Построитель = Новый ПостроительОтчета;
Если ТекущееПВД. ИмяОбъектаДляЗапроса < > Неопределено Тогда
Построитель. Текст =
"ВЫБРАТЬ Разрешенные _.* ИЗ " + ТекущееПВД. ИмяОбъектаДляЗапроса + " КАК _
|
|
|{ГДЕ _.Ссылка.* КАК " + СтрЗаменить( ТекущееПВД. ИмяОбъектаДляЗапроса, "." , "_" ) + "}" ;
КонецЕсли ;
Отбор = Построитель. Отбор;
Если Отбор. Найти( "Документ_ПеремещениеТоваров" ) = Неопределено Тогда
Отбор. Добавить( "Документ_ПеремещениеТоваров" ) ;
КонецЕсли ;
Массив = Новый Массив;
Массив. Добавить( Тип( "ДокументСсылка.ПеремещениеТоваров" ) ) ;
ОписаниеТиповС = Новый ОписаниеТипов( Массив, , ) ;
Отбор["Документ_ПеремещениеТоваров" ]. Использование = Истина ;
Отбор["Документ_ПеремещениеТоваров" ]. Значение = ЭтотОбъект. Ссылка;
Отбор["Документ_ПеремещениеТоваров" ]. ВидСравнения = ВидСравнения. Равно;
ДоступностьПостроителя = Истина ;
Если Построитель. Отбор. Количество( ) > 0 Тогда
ТекущееПВД. НастройкиПостроителя = Построитель. ПолучитьНастройки( ) ;
ТекущееПВД. ИспользоватьОтбор = ИСТИНА ;
КонецЕсли ;
КонецЕсли ;
КонецЦикла ;
Обработка.ТаблицаПравилВыгрузки = ВременнаяТаблицаПравил.Скопировать();
Ну и собственно запускаем саму выгрузку и получаем файл для загрузки:
Код 1C v 8.х Обработка. АрхивироватьФайл = Истина ;
Обработка. ВыполнитьВыгрузку( ) ;
Далее процесс загрузки:
Он довольно прост
Код 1C v 8.х МассивФайлов = НайтиФайлы( "D:\E\" , "*.zip" ) ;
Для Каждого Стм Из МассивФайлов Цикл
ТекстВопроса = "Загрузить - " + Стм. ПолноеИмя;
Ответ = Вопрос( ТекстВопроса, РежимДиалогаВопрос. ДаНет, , КодВозвратаДиалога. Да) ;
Если Ответ = КодВозвратаДиалога. Да Тогда
Обработка = Обработки. УниверсальныйОбменДаннымиXML. Создать( ) ;
Обработка. ИмяФайлаОбмена = Стм. ПолноеИмя;
Обработка. РежимОбмена = "Загрузка" ;
Обработка. ЗаписыватьРегистрыНаборамиЗаписей = Истина ;
Обработка. ЗаписыватьВИнформационнуюБазуТолькоИзмененныеОбъекты = Истина ;
Обработка. ЗагружатьДанныеВРежимеОбмена = Истина ;
Обработка. ВыполнитьЗагрузку( ) ;
УдалитьФайлы( Стм. ПолноеИмя) ;
КонецЕсли ;
КонецЦикла ;
Расширение .zip для файлов обмена пусть вас не смущает, обработка самостоятельно упакует .xml файл в архив:
Код 1C v 8.х Обработка. АрхивироватьФайл = Истина ;
И также самостоятельно уже без дополнительных указаний распакует и загрузит. Это существенно уменьшает размеры файла обмена.
Категория:
Конвертация данных, Обмен, Перенос Автоматическая выгрузка загрузка данных используя регламентное задание Для обмена данными между программами необходимо сделать следующее:
1. При помощи Конвертации Данных создать правила выгрузки данных
2. Нужно чтобы в конфигурации была обработка
УниверсальныйОбменДаннымиXML , желательно последней версии!
(При помощи ее и созданных правил будут выгрузаться и заружаться данные)
3. В 1-вой базе Добавляем Регламентное задание:
Имя - Выгрузка
Использование - !(галочка)
Расписание настройте обязательно.
Имя метода - Общий модуль в котором процедура ВыгрузимИзЗУП():
Код 1C v 8.х
Процедура ВыгрузимИзЗУП() Экспорт
Обработина = Обработки. УниверсальныйОбменДаннымиXML. Создать( ) ;
Обработина. РежимОбмена = "Выгрузка" ;
Обработина. ДатаНачала = НачалоДня( ДобавитьМесяц( ТекущаяДата( ) , - 1 ) ) ;
Обработина. ДатаОкончания = КонецМесяца( ТекущаяДата( ) ) ;
Обработина. ИмяФайлаОбмена = "D:\ZUP_BUH_EXCH\Upload.xml" ;
Обработина. ИмяФайлаПравилОбмена = "D:\ZUP_BUH_EXCH\Zup-Buh.xml" ;
Обработина. ЗагрузитьПравилаОбмена( ) ;
Обработина. ВыполнитьВыгрузку( ) ;
КонецПроцедуры
4. Во 2-ой базе Добавляем Регламентное задание:
Имя - Загрузка
Использование - !(галочка)
Расписание настройте обязательно.
Имя метода - Общий модуль в котором процедура ЗагрузкаВБУХ():
Код 1C v 8.х Процедура ЗагрузкаВБУХ() Экспорт
Обработина = Обработки. УниверсальныйОбменДаннымиXML. Создать( ) ;
Обработина. ИмяФайлаОбмена = "D:\ZUP_BUH_EXCH\Upload.xml" ;
Обработина. РежимОбмена = "Загрузка" ;
Обработина. ОптимизированнаяЗаписьОбъектов = Истина ;
Обработина. ЗаписыватьРегистрыНаборамиЗаписей = Истина ;
Обработина. ЗаписыватьВИнформационнуюБазуТолькоИзмененныеОбъекты = Истина ;
Обработина. ЗагружатьДанныеВРежимеОбмена = Истина ;
Обработина. ВыполнитьЗагрузку( ) ;
КонецПроцедуры
Категория:
Конвертация данных, Обмен, Перенос Загрузка данных из MS Excel через объект ADODB Данный метод обладает гораздо большей производительностью и простотой, чем банальный объектный метод через COM соединение.
Все что потребуется это создание 2 объектов
* ADODB.Connection
* ADODB. Recordset
Здесь универсальная обработка по загрузке Номенклатуры из Excel:
Код 1C v 8.х
Функция ВыполнитьЗагрузку(ПутьКФайлу) Экспорт
Файл= Новый Файл( ПутьКФайлу) ;
Если Файл. Существует( ) Тогда
Стр_Файл= Файл. ПолноеИмя;
Стр_Путь= Файл. Путь;
Если Прав( Стр_Путь, 1 ) = "\" Тогда
Стр_Путь= Лев( Стр_Путь, СтрДлина( Стр_Путь) - 1 ) ;
КонецЕсли ;
Стр_Конект = "Driver={Microsoft Excel Driver (*.xls)};
|DriverId=790;
|Dbq=" + Стр_Файл+ ";
|DefaultDir=" + Стр_Путь+ ";" ;
Об_Конект = Новый COMОбъект( "ADODB.Connection" ) ;
Попытка
Об_Конект. Open( Стр_Конект) ;
Исключение
Сообщить ( "Не возможно подключится к Microsoft Excel Driver!!!
|Возможно файл [" + Стр_Файл+ "] открыт другим пользователем." ) ;
Возврат Ложь ;
КонецПопытки ;
Стр_SQL = "S_elect
| F1 as Артикул,
| F2 as Наименование,
| F3 as ПолноеНаименование
| FROM [A1:AZ100000]
| WHERE ((F1 Is Not Null) AND (F1 <>''))" ;
Об_РекордСет = Новый COMОбъект( "ADODB.Recordset" ) ;
Попытка
Об_РекордСет= Об_Конект. Execute( Стр_SQL) ;
Исключение
Сообщить( "Не удадлось выполнить запрос к файлу Excel
|" + ОписаниеОшибки( ) , СтатусСообщения. Важное) ;
Возврат Ложь ;
КонецПопытки ;
Пока НЕ Об_РекордСет. EOF Цикл
Сообщить( "" ) ;
Для каждого ОБ_Поле Из Об_РекордСет. Fields Цикл
КонецЦикла ;
Об_РекордСет. MoveNext( ) ;
КонецЦикла ;
Об_Конект. Close( ) ;
Об_Конект= Неопределено ;
Об_РекордСет= Неопределено ;
Возврат Истина ;
Иначе
Сообщить( "Файл " + ПутьКФайлу+ " не найден!" ) ;
Возврат Ложь ;
КонецЕсли ;
КонецФункции
Категория:
Конвертация данных, Обмен, Перенос Загрузка данных из MS Excel через объект ADODB Данный метод обладает гораздо большей производительностью и простотой, чем банальный объектный метод через COM соединение.
Все что потребуется это создание 2 объектов
* ADODB.Connection
* ADODB. Recordset
Код 1C v 8.х
Функция ВыполнитьЗагрузку(ПутьКФайлу) Экспорт
Файл= Новый Файл( ПутьКФайлу) ;
Если Файл. Существует( ) Тогда
Стр_Файл= Файл. ПолноеИмя;
Стр_Путь= Файл. Путь;
Если Прав( Стр_Путь, 1 ) = "\" Тогда
Стр_Путь= Лев( Стр_Путь, СтрДлина( Стр_Путь) - 1 ) ;
КонецЕсли ;
Стр_Конект = "Driver={Microsoft Excel Driver (*.xls)};
|DriverId=790;
|Dbq=" + Стр_Файл+ ";
|DefaultDir=" + Стр_Путь+ ";" ;
Об_Конект = Новый COMОбъект( "ADODB.Connection" ) ;
Попытка
Об_Конект. Open( Стр_Конект) ;
Исключение
Сообщить ( "Не возможно подключится к Microsoft Excel Driver!!!
|Возможно файл [" + Стр_Файл+ "] открыт другим пользователем." ) ;
Возврат Ложь ;
КонецПопытки ;
Стр_SQL = "S_elect
| F1 as Артикул,
| F2 as Наименование,
| F3 as ПолноеНаименование
| FROM [A1:AZ100000]
| WHERE ((F1 Is Not Null) AND (F1 <>''))" ;
Об_РекордСет = Новый COMОбъект( "ADODB.Recordset" ) ;
Попытка
Об_РекордСет= Об_Конект. Execute( Стр_SQL) ;
Исключение
Сообщить( "Не удадлось выполнить запрос к файлу Excel
|" + ОписаниеОшибки( ) , СтатусСообщения. Важное) ;
Возврат Ложь ;
КонецПопытки ;
Пока НЕ Об_РекордСет. EOF Цикл
Сообщить( "" ) ;
Для каждого ОБ_Поле Из Об_РекордСет. Fields Цикл
КонецЦикла ;
Об_РекордСет. MoveNext( ) ;
КонецЦикла ;
Об_Конект. Close( ) ;
Об_Конект= Неопределено ;
Об_РекордСет= Неопределено ;
Возврат Истина ;
Иначе
Сообщить( "Файл " + ПутьКФайлу+ " не найден!" ) ;
Возврат Ложь ;
КонецЕсли ;
КонецФункции
Категория:
Работа с Microsoft Office и OpenOffice