Как декодировать (преобразовать) Unicode в 1С При разработке очередного обмена с интернет магазином через API столкнулисть что сайт возвращает ответ в виде:
Код VBS {"ok":"true","description":"\u0421\u0442\u0430\u0442\u0443\u0441 \u0437\u0430\u043a\u0430\u0437\u0430 \u0438\u0437\u043c\u0435\u043d\u0435\u043d"}
из кода ясно что это JSON и используя код ПрочитатьJSON
Код 1C v 8.3 Чтение = Новый ЧтениеJSON;
Чтение.УстановитьСтроку(стрВходящая);
ДанныеЛога = ПрочитатьJSON(Чтение);
Чтение.Закрыть();
В переменной ДанныеЛога будет структура в виде
В результате получилась функция с 2-мя вариантами возрата, в зависимости от того как нужно
Код 1C v 8.3 //Функция читает полученный JSON декадируя текст юникод
Функция ДекодироватьUniCodeВJSON(стрВходящая)
// стрВходящая содержит {"ok":"true","description":"\u0421\u0442\u0430\u0442\u0443\u0441 \u0437\u0430\u043a\u0430\u0437\u0430 \u0438\u0437\u043c\u0435\u043d\u0435\u043d"}
Чтение = Новый ЧтениеJSON;
Чтение.УстановитьСтроку(стрВходящая);
ДанныеЛога = ПрочитатьJSON(Чтение);
Чтение.Закрыть();
// Вариант 1 используя перебор структуры и вывод в текстовую переменную
Текст = "";
Для каждого Элемент Из ДанныеЛога Цикл
//добавим разделитель после предыдущего значения
Текст = Текст + ?(НЕ ПустаяСтрока(Текст), Символы.ПС, "");
//добавим представление ключа и значения:
Текст = Текст + Элемент.Ключ + " = " + Элемент.Значение;
КонецЦикла;
Возврат Текст; //Вернет ok = true description = Статус заказа изменен
// Вариант 2 мспользуя ЗаписьJSON
Запись = Новый ЗаписьJSON;
Запись.УстановитьСтроку(Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Нет));
ЗаписатьJSON(Запись, ДанныеЛога,);
Возврат Запись.Закрыть(); // Вернет JSON {"ok":"true","description":"Статус заказа изменен"}
КонецФункции
На просторах интернета была найдена еще одна функция:
Код 1C v 8.3 //Параметры: Строка в Юникод (обязательный) Тип: Строка. Исходная строка.
//Возвращаемое значение: Тип: Строка. Строка обработанных символов.
//Описание: Возвращает преобразованную строку из формата Unicod.
//Автор: Александр Кияница (treedo)
Функция ПереобразоватьЮникод(Строка)
ГотововаяСтрока = "" ;
МасУкр = Новый Массив(66) ;
МасУкр[0]="А"; МасУкр[1]="Б"; МасУкр[2]="В"; МасУкр[3]="Г"; МасУкр[4]="Ґ"; МасУкр[5]="Д";
МасУкр[6]="Е"; МасУкр[7]="Є"; МасУкр[8]="Ж"; МасУкр[9]="З"; МасУкр[10]="И"; МасУкр[11]="І";
МасУкр[12]="Ї"; МасУкр[13]="Й"; МасУкр[14]="К"; МасУкр[15]="Л"; МасУкр[16]="М"; МасУкр[17]="Н";
МасУкр[18]="О"; МасУкр[19]="П"; МасУкр[20]="Р"; МасУкр[21]="С"; МасУкр[22]="Т"; МасУкр[23]="У";
МасУкр[24]="Ф"; МасУкр[25]="Х"; МасУкр[26]="Ц"; МасУкр[27]="Ч"; МасУкр[28]="Ш"; МасУкр[29]="Щ";
МасУкр[30]="Ь"; МасУкр[31]="Ю"; МасУкр[32]="Я";
МасУкр[33]="а"; МасУкр[34]="б"; МасУкр[35]="в"; МасУкр[36]="г"; МасУкр[37]="ґ"; МасУкр[38]="д";
МасУкр[39]="е"; МасУкр[40]="є"; МасУкр[41]="ж"; МасУкр[42]="з"; МасУкр[43]="и"; МасУкр[44]="і";
МасУкр[45]="ї"; МасУкр[46]="й"; МасУкр[47]="к"; МасУкр[48]="л"; МасУкр[49]="м"; МасУкр[50]="н";
МасУкр[51]="о"; МасУкр[52]="п"; МасУкр[53]="р"; МасУкр[54]="с"; МасУкр[55]="т"; МасУкр[56]="у";
МасУкр[57]="ф"; МасУкр[58]="х"; МасУкр[59]="ц"; МасУкр[60]="ч"; МасУкр[61]="ш"; МасУкр[62]="щ";
МасУкр[63]="ь"; МасУкр[31]="ю"; МасУкр[65]="я";
МасКод = Новый Массив(66) ;
МасКод[0]="0410"; МасКод[1]="0411"; МасКод[2]="0412"; МасКод[3]="0413"; МасКод[4]="0490"; МасКод[5]="0414";
МасКод[6]="0415"; МасКод[7]="0404"; МасКод[8]="0416"; МасКод[9]="0417"; МасКод[10]="0418"; МасКод[11]="0406";
МасКод[12]="0407"; МасКод[13]="0419"; МасКод[14]="041A"; МасКод[15]="041B"; МасКод[16]="041C"; МасКод[17]="041D";
МасКод[18]="041E"; МасКод[19]="041F"; МасКод[20]="0420"; МасКод[21]="0421"; МасКод[22]="0422"; МасКод[23]="0423";
МасКод[24]="0424"; МасКод[25]="0425"; МасКод[26]="0426"; МасКод[27]="0427"; МасКод[28]="0428"; МасКод[29]="0429";
МасКод[30]="042C"; МасКод[31]="042E"; МасКод[32]="042F";
МасКод[33]="0430"; МасКод[34]="0431"; МасКод[35]="0432"; МасКод[36]="0413"; МасКод[37]="0491"; МасКод[38]="0434";
МасКод[39]="0435"; МасКод[40]="0454"; МасКод[41]="0436"; МасКод[42]="0437"; МасКод[43]="0438"; МасКод[44]="0456";
МасКод[45]="0457"; МасКод[46]="0439"; МасКод[47]="043A"; МасКод[48]="043B"; МасКод[49]="043C"; МасКод[50]="043D";
МасКод[51]="043E"; МасКод[52]="043F"; МасКод[53]="0440"; МасКод[54]="0441"; МасКод[55]="0442"; МасКод[56]="0443";
МасКод[57]="0444"; МасКод[58]="0445"; МасКод[59]="0446"; МасКод[60]="0447"; МасКод[61]="0448"; МасКод[62]="0449";
МасКод[63]="044C"; МасКод[31]="044E"; МасКод[65]="044F";
тмпСтрока = "" ;
Для Счетчик = 1 По СтрДлина(Строка) Цикл
Если Лев(Строка, 1) = "\" Тогда
Если Лев(Строка, 2) = "\u" Тогда
тмпСтрока = Прав(Лев(Строка, 6),4) ;
Если МасКод.Найти(тмпСтрока) = Неопределено Тогда
СтрокаЗамены = Прав(тмпСтрока, 1) ;
тмпСтрока = СтрЗаменить(тмпСтрока,СтрокаЗамены,ТРег(СтрокаЗамены));
Если МасКод.Найти(тмпСтрока) = Неопределено Тогда
Сообщить("Код символа не найден: " + тмпСтрока) ;
Иначе
ГотововаяСтрока = ГотововаяСтрока + МасУкр[МасКод.Найти(тмпСтрока)] ;
КонецЕсли;
Иначе
ГотововаяСтрока = ГотововаяСтрока + МасУкр[МасКод.Найти(тмпСтрока)] ;
КонецЕсли;
Строка = Прав(Строка, (СтрДлина(Строка)-6)) ;
Иначе
Строка = Прав(Строка, (СтрДлина(Строка)-2)) ;
КонецЕсли;
Иначе
ГотововаяСтрока = ГотововаяСтрока + Лев(Строка, 1) ;
Строка = Прав(Строка, (СтрДлина(Строка)-1)) ;
КонецЕсли;
КонецЦикла;
Возврат ГотововаяСтрока ;
КонецФункции
Категория:
WEB-сервисы, WS-ссылки, XDTO-пакеты Пример создания 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);
КонецЕсли; // Строка корнекта Стр_Конект = "Driver={Microsoft Excel Driver (*.xls)};
|DriverId=790;
|Dbq ="+Стр_Файл+";
|DefaultDir="+Стр_Путь+";";
Об_Конект = Новый COMОбъект("ADODB.Connection");
Попытка Об_Конект.Open(Стр_Конект);
Исключение Сообщить(ОписаниеОшибки());
Сообщить ("Не возможно подключится к Microsoft Excel Driver!!!
|Возможно файл ["+Стр_Файл+"] открыт другим пользователем.");
Возврат Ложь; КонецПопытки;
//формируем запрос
//Здесь есть нюанс первая строка данных всегда будет являться заголовком
//если она пустая то имена клонок формируются следующим образом F<Номер колонки>
Стр_SQL = "SELECT `Лист1$`.Город,`Лист1$`.Заправка FROM`C:\Users\User_scan\Desktop\файл.xls`.`Лист1$``Лист1$`";
Об_РекордСет = Новый COMОбъект("ADODB.Recordset");
//если неудача тогда след. присвоение должно взлететь
//Стр_SQL = "SELECT "+Стр_КолонкиВыбора+" FROM [A"+Ч_Начало+":AZ100000] WHERE "+Стр_УсловиеКлючей;
Попытка Об_РекордСет=Об_Конект.Execute(Стр_SQL);
Исключение Сообщить("Не удадлось выполнить запрос к файлу Excel
|"+ ОписаниеОшибки(),СтатусСообщения.Важное);
Возврат Ложь;
КонецПопытки;
Номер = 1;
Пока НЕ Об_РекордСет.EOF Цикл
// Получаем данные из Об_РекордСет
// ... Номер = Номер +1;
//Сообщить("ВСЕ ОК!!!");
Для каждого ОБ_Поле Из Об_РекордСет.Fields Цикл
// Пример вывода информации Сообщить(ОБ_Поле.Name,Об_РекордСет.Fields(ОБ_Поле.Name).value);
КонецЦикла;
// ... Об_РекордСет.MoveNext();
КонецЦикла;
Сообщить(Номер);
Об_Конект.Close();
// Закрываем конект
Об_Конект=Неопределено;
Об_РекордСет=Неопределено;
Возврат Истина;
Иначе Сообщить("Файл "+ПутьКФайлу+" не найден!");
Возврат Ложь;
КонецЕсли;
КонецФункции
[/pre]
Категория:
COM-объекты, WMI, WSH Excel файл как Внешний источник данных Подключимся и загрузим из файла Excel данные в таблицу значений 1С. Сделать теперь это очень просто.
1. В конфигурации добавляет новый объект метаданных типа "Внешние источники данных" и назовем его просто "Excel".
2. На закладке "Данные" созданного объекта "Excel" добавляем новую таблицу. При этом появится окно мастера добавления таблицы внешнего источника.
Выбираем первый пункт "Вручную", т.к. лично у меня второй пункт "Выбрать из списка таблиц внешнего источника данных" работает нестабильно.
Если Вы все же хотите попробовать добавить таблицу через второй пункт, то в качестве строки соединения в появившемся окне указываем:
Driver={Microsoft Excel Driver (*.xls)};DBQ =C:\Documents and Settings\Admin\Мои документы\finance3.xls; DriverID=790
В этой строке укажите путь к своему файлу. Имя пользователя и пароль я не указывал.
Отмечу, что путь к файлу и строка соединения в дальнейшем не запоминается и нужны эти параметры единожды, чтобы создать автоматически описание полей таблицы источника.
Если соединение прошло нормально, то должен отобразиться список таблиц источника. Флажком можно выбрать нужную таблицу и ее поля.
3. Даем имя новой таблице "Данные". Переходим на вкладку таблицы "Данные". В поле "Имя в источнике данных" указываем имя листа в файле Excel и добавляем в конце знак "$". В моем случае это "Данные$". В табличной части "Поля" добавляем поля и редактируем их тип.
У каждого поля в свойствах должно быть задано как минимум "Имя" и "Имя в источнике данных".
4. Создаем процедуру в которой пишем подключение к источнику и запрос:
Код 1C v 8.х ПараметрыСоединения = Новый ПараметрыСоединенияВнешнегоИсточникаДанных;
ПараметрыСоединения.СтрокаСоединения=
"Driver={Microsoft Excel Driver (*.xls)};DBQ =C:\Documents and Settings\Admin\Мои документы\finance2.xls; DriverID=790";
ВнешниеИсточникиДанных.Excel.УстановитьОбщиеПараметрыСоединения(ПараметрыСоединения);
ВнешниеИсточникиДанных.Excel.УстановитьСоединение();
Запрос = Новый Запрос();
Запрос.Текст = "ВЫБРАТЬ
| Данные.date КАК Дата,
| Данные.time КАК Время,
| Данные.account КАК Счет,
| Данные.amount КАК Сумма,
| Данные.currency КАК Валюта,
| Данные.category КАК Категория,
| Данные.parent КАК КатегорияРодитель
|ИЗ
| ВнешнийИсточникДанных.Excel.Таблица.Данные КАК Данные";
ТЗ = Запрос.Выполнить().Выгрузить();
Вот и все!
Источник:
passion-programmer
Параметры соединения для файла Excel выглядят вот так:
Файлы XLSX (версия Office 2007 и выше)
Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};DBQ =D:\ФайлExcel.xlsx;
Файлы XLS (ранее)
Driver={Microsoft Excel Driver (*.xls)}; DriverID=790; DBQ =D:\ФайлExcel.xls; Категория:
Внешние источники данных Как загрузить данные из Access в 1С ? Загружаем данные из Access в 1С
Код 1C v 8.х Файл = "C:\files\demo.mdb" ;
//СтрокаПодключения = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + Файл + "; Extended Properties=""Excel 8.0;HDR=NO;""";
СтрокаПодключения = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + Файл + ";""";
Connection = Новый COMОбъект("ADODB.Connection");
Попытка
Connection.Open(СтрокаПодключения);
Исключение
Сообщить(ОписаниеОшибки());
Возврат;
КонецПопытки;
Command = Новый COMОбъект("ADODB.Command");
Command.ActiveConnection = Connection;
Command.CommandText = "S_elect * FROM Table1";
Command.CommandType = 1;
RecordSet = Новый COMОбъект("ADODB.RecordSet");
RecordSet = Command.Execute();
стр ="";
Пока RecordSet.EOF() = 0 Цикл
для н=0 по Recordset.Fields.Count -1 цикл
стр = стр + " " + Recordset.Fields(н).Value;
КонецЦикла;
Сообщить(стр);
стр ="";
RecordSet.MoveNext();
КонецЦикла;
RecordSet.Close();
Connection.Close();
Код 1C v 7.x Акцесс = СоздатьОбъект("ADODB.CONNECTION");
Попытка
СтрокаПодключения="Driver={Microsoft Access Driver (*.mdb)};Dbq =C:\mybase.mdb;Uid=Admin;Pwd=";
Акцесс.Open(СтрокаПодключения);
Исключение
Сообщить("Все плохо:"+ОписаниеОшибки());
Возврат;
КонецПопытки;
Команда = СоздатьОбъект("ADODB.Command");
Команда.ActiveConnection=Акцесс;
ТекстСелект = "S_elect * FROM tblCustoms";
НаборЗаписей = СоздатьОбъект("ADODB.RecordSet");
Команда.CommandText=ТекстСелект;
Попытка
НаборЗаписей=Команда.Execute;
Исключение
Сообщить("Обломись:"+ОписаниеОшибки());
КонецПопытки;
Попытка
НаборЗаписей.MoveFirst();
Исключение //нет записей в рекордсете
НаборЗаписей.Close();
Возврат;
КонецПопытки;
Пока НаборЗаписей.EOF()=0 Цикл
ИНН = НаборЗаписей.Fields("INN").Value;
//ну и т.д.
НаборЗаписей.MoveNext();
КонецЦикла;
НаборЗаписей.Close();
// Для тех, у кого в базе Акцесс создана рабочая группа (есть файлик mdw), строка подключения будет такая:
СтрокаПодключения="Driver= Microsoft Access Driver (*.mdb)};systemDB=C:\wg.mdw;Dbq =C:\mybase.mdb;Uid=Admin;Pwd=";
Работа с ACCESS из 1С через DAO
Код 1C v 7.x Процедура Выполнить()
//фасВладелец = СтрЗаменить(фасВладелец," ","_");
Спр = СоздатьОбъект("Справочник.ТоварыВПрайсе");
Спр.ИспользоватьВладельца(ФасВладелец);
dbe = СоздатьОбъект("dao.DBEngine.36");
wksp = dbe.Workspaces(0);
db = 0;
Если ФС.СуществуетФайл(КаталогИБ()+"Pric_list.mdb")=0 Тогда //
db = wksp.CreateDataBase(КаталогИБ()+"Pric_list.mdb",";LANGID=0x0419;Cp=1251;Country=0"); //
db.Execute("Create table [" + Строка(фасВладелец) + "]
|(Rec_ind integer,
|Код text,
|Артикул text,
|Цена integer,
|Товар text,
|Единица text,
|Val text);"
);
db.Execute("Create index Rec_ind on ["+Строка(фасВладелец)+"] (Rec_ind);");
Иначе
db= wksp.OpenDataBase(КаталогИБ()+"Pric_list.mdb");
Попытка
rs = db.OpenRecordset(Строка(фасВладелец));
Исключение
Сообщить("Создается новая таблица");
КонецПопытки;
Если ПустоеЗначение(rs)= 1 Тогда
db.Execute("Create table [" + Строка(фасВладелец) + "]
|(Rec_ind integer,
|Код text,
|Артикул text,
|Цена integer,
|Товар text,
|Единица text,
|Val text);"
);
db.Execute("Create index Rec_ind on ["+Строка(фасВладелец)+"] (Rec_ind);");
КонецЕсли;
db.Execute("Delete * From ["+Строка(фасВладелец)+"];");
КонецЕсли;
rs = db.OpenRecordset(Строка(фасВладелец));
Y = 1;
Спр.ВыбратьЭлементы();
Пока Спр.ПолучитьЭлемент() = 1 Цикл
лсЕдиницы = "";
Если Спр.асТовар.апТип=Перечисление.ТипТовара.Услуга Тогда
лсЕдиницы = "";
ИначеЕсли Спр.асТовар.апТип=Перечисление.ТипТовара.Весовой Тогда
лсЕдиницы = "г";
ИначеЕсли Спр.асТовар.апТип=Перечисление.ТипТовара.Штучный Тогда
лсЕдиницы = "шт.";
КонецЕсли;
Если Спр.ЭтоГруппа() = 0 Тогда
rs.AddNew();
rs.Rec_ind = Y;
rs.Код= Спр.асТовар.ПолныйКод();
rs.Артикул = Спр.асТовар.сАртикул;
rs.Цена = Спр.чЦена;
rs.Товар=Спр.асТовар.сПолнНаименование;
rs.Единица = лсЕдиницы;
rs.Val = Спр.асВалюта.Код;
rs.Update();
Y=Y+1;
КонецЕсли;
КонецЦикла;
db.Close();
Сообщить("Выгрузка завершена");
КонецПроцедуры
Код 1C v 7.x
Процедура ACCESS()
dbe=CreateObject("DAO.DBEngine.36");
wksp=dbe.Workspaces(0);
db=0;
// в ковычках имя фаила с расширением MDB
Если ФС.СуществуетФайл(КаталогПользователя()+"sr.mdb")=0 Тогда
// создание файла базы данных с русским порядком сортировки
db=wksp.CreateDataBase(КаталогПользователя()+"mars_sr.mdb",";LANGID=0x0419;CP=1251;COUNTRY=0");
// DDL - запрос на создание таблицы
// описание языка DDL (подмножество SQL) смотрите в хелпе по MS Access
// не пытайтесь делать это с другими форматами - DDL через DAO поддерживается только для MDB
//Создадим еще таблицу
db.Execute("CREATE TABLE BANKS
|(REC_IND INTEGER,
|BANKCODE INTEGER,
|BANKNAME TEXT ,
|ModifiedFlg BIT,
|ChangeSeqFlg BIT);"
);
// индекс на нужные поля
db.Execute("CREATE INDEX REC_IND ON BANKS (REC_IND);");
Иначе
// просто открываем базу данных в разделенном режиме
db=wksp.OpenDataBase(КаталогПользователя()+"sr.mdb");
// и очищаем имеющиеся данные
db.Execute("DELETE * FROM BANKS;");
КонецЕсли;
// rs-это как раз сама таблица, куда мы будем добавлять записи
rs=db.OpenRecordset("BANKS");
// добавление записи
rs.AddNew();
// присвоение значений полям
rs.REC_IND = "1";
rs.BANKCODE = "34";
rs.BANKNAME = "Инвест";
rs.ModifiedFlg = "1";
// запомним запись
rs.Update();
// и так далее ...
db.Close(); // закрытие базы данных
КонецПроцедуры
Категория:
Работа с Microsoft Office и OpenOffice Получение данных из текстового файла используя COMОбъект "ADODB.Connection" Файл schema.ini содержит описание типов данных. читаем его так:
Код 1C v 8.х ПутьПодключения = "c:\";
СтрокаПодключения = "Driver={Microsoft Text Driver (*.txt; *.csv)};";
СтрокаПодключения = СтрокаПодключения + "Dbq =" + ПутьПодключения + ";";
СтрокаПодключения = СтрокаПодключения + "Uid=" + "Extensions=txt" + ";";
Conn = Новый COMОбъект("ADODB.Connection");
Conn.ConnectionString = СтрокаПодключения;
Conn.Open();
rst = Новый COMОбъект("ADODB.Recordset");
Попытка
rst.Open("S_elect * from file#txt", Conn);
Пока rst.EOF() = 0 Цикл
textstr="";
Для iCount = 0 По rst.Fields.Count-1 Цикл
textstr = textstr + "|" + rst.Fields(iCount).Value;
КонецЦикла;
Сообщить(textstr);
rst.MoveNext();
КонецЦикла;
Исключение
rst.Close();
Conn.Close();
Предупреждение(ОписаниеОшибки());
КонецПопытки;
Категория:
Конвертация данных, Обмен, Перенос Загрузка данных из MS Excel через объект ADODB Данный метод обладает гораздо большей производительностью и простотой, чем банальный объектный метод через COM соединение.
Все что потребуется это создание 2 объектов
* ADODB.Connection
* ADODB. Recordset
Здесь универсальная обработка по загрузке Номенклатуры из Excel:
Код 1C v 8.х // Функция для Платформы 1С 8.0 или 8.1
// Выполняет загрузку из файла Excel
//
// Параметры
// ПутьКФайлу - <Строка> - путь к файлу xls
//
// Автор: ---%%%Gmix 16.03.2006 12:38:48
//
// Возвращаемое значение:
// <Булево> – Истина загрузка произошла
// - Ложь загрузки не было
//
Функция ВыполнитьЗагрузку(ПутьКФайлу) Экспорт
Файл=Новый Файл(ПутьКФайлу);
Если Файл.Существует() Тогда
Стр_Файл=Файл.ПолноеИмя;
// Отрезаем слеш если он есть в конце пути
Стр_Путь=Файл.Путь;
Если Прав(Стр_Путь,1)="\" Тогда
Стр_Путь=Лев(Стр_Путь,СтрДлина(Стр_Путь)-1);
КонецЕсли;
// Строка корнекта
Стр_Конект = "Driver={Microsoft Excel Driver (*.xls)};
|DriverId=790;
|Dbq ="+Стр_Файл+";
|DefaultDir="+Стр_Путь+";";
Об_Конект = Новый COMОбъект("ADODB.Connection");
Попытка
Об_Конект.Open(Стр_Конект);
Исключение
Сообщить ("Не возможно подключится к Microsoft Excel Driver!!!
|Возможно файл ["+Стр_Файл+"] открыт другим пользователем.");
Возврат Ложь;
КонецПопытки;
// формируем запрос
// Здесь есть нюанс первая строка данных всегда будет являться заголовком
// если она пустая то имена клонок формируются следующим образом F<Номер колонки>
Стр_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 Цикл
// Пример вывода информации Сообщить(ОБ_Поле.Name,Об_РекордСет.Fields(ОБ_Поле.Name).value);
КонецЦикла;
// ...
Об_РекордСет.MoveNext();
КонецЦикла;
Об_Конект.Close(); // Закрываем конект
Об_Конект=Неопределено;
Об_РекордСет=Неопределено;
Возврат Истина;
Иначе
Сообщить("Файл "+ПутьКФайлу+" не найден!");
Возврат Ложь;
КонецЕсли;
КонецФункции
Категория:
Конвертация данных, Обмен, Перенос Загрузка данных из MS Excel через объект ADODB Данный метод обладает гораздо большей производительностью и простотой, чем банальный объектный метод через COM соединение.
Все что потребуется это создание 2 объектов
* ADODB.Connection
* ADODB. Recordset
Код 1C v 8.х // Выполняет загрузку из файла Excel
// Параметры
// ПутьКФайлу - <Строка> - путь к файлу xls
// Автор: ---%%%Gmix 16.03.2006 12:38:48
// Возвращаемое значение:
// <Булево> – Истина загрузка произошла
// - Ложь загрузки не было
Функция ВыполнитьЗагрузку(ПутьКФайлу) Экспорт
Файл=Новый Файл(ПутьКФайлу);
Если Файл.Существует() Тогда
Стр_Файл=Файл.ПолноеИмя;
// Отрезаем слеш если он есть в конце пути
Стр_Путь=Файл.Путь;
Если Прав(Стр_Путь,1)="\" Тогда
Стр_Путь=Лев(Стр_Путь,СтрДлина(Стр_Путь)-1);
КонецЕсли;
// Строка корнекта
Стр_Конект = "Driver={Microsoft Excel Driver (*.xls)};
|DriverId=790;
|Dbq ="+Стр_Файл+";
|DefaultDir="+Стр_Путь+";";
Об_Конект = Новый COMОбъект("ADODB.Connection");
Попытка
Об_Конект.Open(Стр_Конект);
Исключение
Сообщить ("Не возможно подключится к Microsoft Excel Driver!!!
|Возможно файл ["+Стр_Файл+"] открыт другим пользователем.");
Возврат Ложь;
КонецПопытки;
// формируем запрос
// Здесь есть нюанс первая строка данных всегда будет являться заголовком
// если она пустая то имена клонок формируются следующим образом F<Номер колонки>
Стр_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 Цикл
// Пример вывода информации Сообщить(ОБ_Поле.Name,Об_РекордСет.Fields(ОБ_Поле.Name).value);
КонецЦикла;
// ...
Об_РекордСет.MoveNext();
КонецЦикла;
Об_Конект.Close(); // Закрываем конект
Об_Конект=Неопределено;
Об_РекордСет=Неопределено;
Возврат Истина;
Иначе
Сообщить("Файл "+ПутьКФайлу+" не найден!");
Возврат Ложь;
КонецЕсли;
КонецФункции
Категория:
Работа с Microsoft Office и OpenOffice