Имя: Пароль:
1C
1С v8
Подскажите синтаксис sql запроса к xls
0 Сайрус
 
22.04.12
20:41
Всем привет. Стоит задача разработки обработки выгрузки из XLS файла в табличную часть Документы.РеализацияТоваров.
С помощью внутреннего языка 1с - сделал, но вот теперь стала задача осуществления вышесказанного с помощью SQL запроса..
Подскажите синтаксис и как вообще строится данный запрос.
п.с. в моем случае в заказ.xls 2 колонки
1. Артикул;
2. Количество.
Артикул = Номенклатуре, Количество = Количеству соответственно.

как вырвать столбцы их файла эксель и в цикле их обойти записав в табЧасть? сам запрос как будет выглядеть?

спасибо заранее.

Жду ответа, как соловей лета.
1 aleks-id
 
22.04.12
20:43
2 Сайрус
 
22.04.12
20:44
Недавно решил эту задачу с помощью внутреннего языка (как говорил выше) сейчас надо на sxl.

Листинг кода с помощью внутреннего языка:

Форма обработки:

&НаКлиенте
Процедура ВыбратьФайл(Команда)
Режим = РежимДиалогаВыбораФайла.Открытие;
ДиалогВыбораФайла = Новый ДиалогВыбораФайла(Режим);

ДиалогВыбораФайла.ПолноеИмяФайла = "";
Текст = "ru = ""Текст""; en = ""Text""";
Фильтр = НСтр(Текст)+"(*.xls)|*.xls";
ДиалогВыбораФайла.Фильтр = Фильтр;
ДиалогВыбораФайла.МножественныйВыбор = Ложь;
ДиалогВыбораФайла.Заголовок = "Выберите файлы";
ДиалогВыбораФайла.Выбрать();
Каталог = ДиалогВыбораФайла.Каталог;
НашФайл = ДиалогВыбораФайла.ВыбранныеФайлы.Получить(0);

ВыбратьФайлНаСервере(НашФайл).ПолучитьФорму("ФормаДокумента").Открыть();

КонецПроцедуры


&НаСервереБезКонтекста
Функция ВыбратьФайлНаСервере(Путь)

Док = ПолучитьCOMОбъект(Путь);


НовыйДокумент = Документы.РеализацияТоваров.СоздатьДокумент();
НовыйДокумент.Дата = ТекущаяДата();

Товар = "НоваяНоменклатура";
счСтроки = 2;
Пока СокрЛП(Товар) <> "" Цикл
Товар = Док.Sheets(1).Cells(счСтроки,1).Value;
Количество = Док.Sheets(1).Cells(счСтроки,2).Value;
Если Товар = Неопределено Тогда

Док.Application.Quit();
НовыйДокумент.Записать();
Ном = НовыйДокумент.Номер;
Форма = Документы.РеализацияТоваров.НайтиПоНомеру(Ном);

Возврат Форма;

КонецЕсли;

Наименование = Справочники.Номенклатура.НайтиПоНаименованию(Товар);
НоваяСтрока = НовыйДокумент.Товары.Добавить();
Структура = Новый Структура("Номенклатура", Наименование);
Цена = РегистрыСведений.ЦеныНоменклатуры.СрезПоследних( ,Структура).ВыгрузитьКолонку("Цена").Получить(0);

НоваяСтрока.Номенклатура = Наименование;
НоваяСтрока.Количество = Количество;
НоваяСтрока.Цена = Цена;
НоваяСтрока.Сумма = Цена * Количество;
НовыйДокумент.Записать();

Сообщить(Строка(Наименование) + "–" + Строка(Количество));
счСтроки = счСтроки + 1;

КонецЦикла;

КонецФункции
3 Сайрус
 
22.04.12
20:45
aleks-id, уже курил этот мануал( не смог понять полностью что да как(
4 Сайрус
 
22.04.12
20:54
Подскажите просто как запрос написать, как в переменные присвоить значения столбцов (артикул и количество) и как организовать цикл по строкам..

главная моя проблема - первый раз сталкиваюсь с SQL. тольо на внутреннем языке имел практику..
5 Сайрус
 
23.04.12
00:56
ап
6 Torquader
 
23.04.12
01:16
Ну и чего бояться SQL?
Если подключаться к Excel через ADO,то каждый лист представляется как таблица - и можно писать запрос select к этой таблице,а далее выбор результатов запроса.
Только нужно помнить,что в ячейках могут быть любые значения,тогда как ADO любит,чтобы они были однотипные.
7 КонецЦикла
 
модератор
23.04.12
01:23
Пример из клюшек...

База =СоздатьОбъект("ODBCDatabase");
   Если База.Соединение("DRIVER=Microsoft Excel Driver (*.xls); DBQ=" + СокрЛП(ИмяФайла)) = 0 Тогда
       Предупреждение("Ошибка открытия файла", 20);
       Возврат;
   КонецЕсли;

   RecordSetXLS =СоздатьОбъект("ODBCRecordSet");
   RecordSetXLS.УстБД(База);

   ТекстЗапроса ="
   |select *
   |from [Лист1$A1:AZ]
   |";

   ТЗ = RecordSetXLS.ВыполнитьИнструкцию(ТекстЗапроса);
8 Сайрус
 
23.04.12
01:29
Torquader, ясно сиб, буду знать.

Только я через COM соединение. ADO - пока не в курсе.. но стало интересно и скоро поучу)

по делу у меня таблица в эксель вида
Артикул | Количество
--------------------
****    | **    
****    | **    
****    | **    
****    | **  

Если на внутреннем языке запрос будет выглядеть так:
Запрос = Новый Запрос("
|ВЫБРАТЬ
|   Таблица.Артикул
|   Таблица.Количество
|ИЗ
|   Таблица");
Результат = Запрос.Выполнить();

То как его написать на SQL я незнаю)
Вот хотелось бы пример от сильных форума сего получить)
Как запрос сам получить и что он вернет черканите плиз, аналогично моему на внутреннем)
буду примного благодарен.



||||||||||
9 Сайрус
 
23.04.12
01:31
КонецЦикла, о, спасибо! Попробую по твоему примеру что-нибудь навоять)
10 Сайрус
 
24.04.12
21:28
{Обработка.ИзXlsВРеализациюSQL.Форма.Форма.Форма(18,8)}: Процедура или функция с указанным именем не определена (СоздатьОбъект)
   База =<<?>>СоздатьОбъект("ODBCDatabase");
{Обработка.ИзXlsВРеализациюSQL.Форма.Форма.Форма(20,16)}: Процедура или функция с указанным именем не определена (СоздатьОбъект)
   RecordSetXLS =<<?>>СоздатьОбъект("ODBCRecordSet");

ругается на СоздатьОбъект()..( В синтаксис помощнике не нашел инфы по этой функции

подскажите почему..

8.2
приложение управляемое.
форма обработки.
11 Агент Инфостарта
 
24.04.12
21:46
(10) Патамушта. Учу читать и думать, дорого.
Это пример из клюшек, для снеговика требуется небольшая переделка.
12 КМ155
 
24.04.12
21:46
(10) Цепляться к xls через ODBC - мсье знает толк в извращениях
13 Сайрус
 
24.04.12
22:08
намек понял) сиб)
14 Сайрус
 
24.04.12
23:40
Всем спс за помощь, задачу выполнил)
с помощью:

       СтрокаПодключения = "Provider=Microsoft.ACE.OLEDB.12.0; Data Source = "+НашФайл;    
   СтрокаПодключения = СтрокаПодключения + "; Extended Properties = "+"""Excel 12.0"+";HDR=NO;IMEX=1"";";
   
   // Подключаемся
   
   Об_Конект = Новый COMОбъект("ADODB.Connection");
   Попытка
       Об_Конект.Open(СтрокаПодключения);
   Исключение
       Сообщить ("Невозможно подключится к Microsoft Excel Driver!!!
       |Возможно файл ["+НашФайл+"] открыт другим пользователем.");
       Возврат;
   КонецПопытки;
   СтрЗапроса = "
   |SELECT *
   |FROM [A" + Формат(НачальнаяСтрока,"ЧГ=0") + ":CZ" + Формат(КонечнаяСтрока,"ЧГ=0") + "]";
   Попытка
       RecordSet = Об_Конект.Execute(СтрЗапроса);
   Исключение
       Сообщить("Не удалось выполнить запрос к файлу Excel
       |"+ ОписаниеОшибки(),СтатусСообщения.Важное);
       Возврат;
   КонецПопытки;

пасибо, реально помогли понять некоторые моменты)
15 Сайрус
 
24.04.12
23:59
еще один неадекватный вопрос)
Что такое "Клюшка" и "Снеговик"?
только, пожалуйста, конкретный вопрос - конкретный ответ) я знаю что глупый вопрос задаю)
16 BigShmax
 
25.04.12
00:01
7.7 - клюшки
8 - снеговик :-)))))))))))))))
17 Сайрус
 
25.04.12
01:31
BigShmax, спасибо) черезчур символический жаргон в этой сфере))
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший