helpf.pro
Регистрация
 0 
Распечатать

​Пример создания 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]
Разместил:   Версии: |  Дата:   Прочитано: 2686
 0 
Распечатать
Возможно, вас также заинтересует
Как заполнить табличную часть формы программно? 6
Нужно по кнопке Заполнить - сформировать данные для заполнения табличных частей и заполнить их. Форма имеет вид: Рядом с кнопкой Записать и закрыть добавлена кнопка Заполнить документ , код ее команды: // Код заполнения ТЧ НаСервере П
17 правил для составления оптимального ЗАПРОСа к данным базы 1С 38
Для формирования и выполнения запросов к таблицам базы данных в платформе 1С используется специальный объект языка программирования Запрос . Создается этот объект вызовом конструкции Новый Запрос . Запрос удобно использовать, когда требуется получ
1С 7.x : Как получить курсы валют с сайта НБУ http://www.bank.gov.ua/ за любую дату ? 6
Функция ПолучитьТаблицуКурсовНБУ(ДатаКурса, Ежедневно = 1) // если в качестве второго параметра указать число отличное от 1 - получем валюты, которые котируются на ежемесячной основе Перем Reader, Url, Точки, HtmlTab, Строк, Р, НомСтроки, НомЯче
Google maps : вывод точек на карту и режим панорамы 7
В отличие от яндекс карт в GMaps можно использовать панорамы - за что им большой плюс! Надеюсь в яндексе прочитают этот пост и тоже когда-нибудь это сделают! Для клиента нужно было сделать вывод объектов на карту С возможностью просмотра панора
Microsoft SQL Server Native Client Добавление значения в столбец "datetime" привело к переполнению 1
При формировании отчета на СКД получили ошибку: Microsoft SQL Server Native Client 11.0: Добавление значения в столбец "datetime" привело к переполнению Подробнее текст такой: ... по причине: Ошибка компоновки данных по причине: Ошибка получени
Посмотреть все результаты поиска похожих
Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.