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

Загрузка данных из текстовых файлов, выбирая SQL запросом данные из этих файлов

Часто бывает потребность загружать данные из текстовых форматов, причем информация для загрузки бьется на 2 и более файлов.
Хорошо бы посредством SQL запроса выбирать данные из этих файлов и производить загрузку! Это вполне возможно и я считаю этот способ наиболее грамотный для решения таких задач!

Рассмотрим вариант как это сделать! Имеем 2 файла:
- Head_XXXXX.txt
- Rows_XXXXX.txt
Где XXXXX – порядковой номер пары файлов

Структура строки в Head_XXXXX.txt
Код
Колонка1 20 символов – Номер заказа
Колонка2 5 символов – Код контрагента
Колонка3 10 символов – Дата заказа
Колонка4 10 символов – Дата доставки
Колонка5 10 символов – Дата сбора
Колонка6 4 символов – Количество строк в ТЧ


Структура строки в Rows_XXXXX.txt
Код
Колонка1 20 символов – Номер заказа
Колонка2 7 символов – Артикул номенклатуры
Колонка3 9 символов – Количество в базовых ед. изм.


В каждой паре файлов несколько Заказов. Необходимо загрузить эти заказы в БД 1С
Для этого воспользуемся Microsoft.Jet.OLEDB.4.0

Для того чтоб данный драйвер корректно понимал структуру файлов необходимо в каталоге расположения данных файлов, перед выполнением запросов, создать специальный текстовый файл schema.ini cо следующими строками:
Код
[ Head_XXXXX]
ColNameHeader=False
Format=FixedLength
Col1=NumberNote Text Width 20
Col2=StoreNum Text Width 5
Col3=DataNote DateTime Width 10
Col4=DataDev DateTime Width 10
Col5=DataDes DateTime Width 10
Col6=CountLine Long Width 4

[Rows_XXXXX]
ColNameHeader=False
Format=FixedLength
Col1=NumberNote Text Width 20
Col2=Articul Text Width 7
Col3=Counts Double Width 9

Как видим, здесь мы задаем структуру таблицы из файла.
Остается только выполнить запрос к полученной текстовой БД и обработать результат:

Ниже приведен пример кода для платформы 1С 8:
Код 1C v 8.х
 // Загружает данные из текстовых данных
//
// Параметры
// Стр_КаталогДанных - <Строка>
//
// Автор: Gmix 04.05.2006 12:22:09
//     
// Возвращаемое значение:
//   <Булево>
//
Функция ЗагрузитьДанныеИзtxt(Стр_КаталогДанных)
            // проверки заполнения
           
            ОБ_ФайлДанных=Новый Файл(Стр_КаталогДанных);
            Если НЕ ОБ_ФайлДанных.ЭтоКаталог() Тогда
                        Сообщить("Необходимо указать каталог данных!",СтатусСообщения.ОченьВажное);
                        Возврат Ложь;
            КонецЕсли;
          
            Если НЕ ОБ_ФайлДанных.Существует() Тогда
                Сообщить("Каталог """+Стр_КаталогДанных+""" не существует!",СтатусСообщения.ОченьВажное);
                        Возврат Ложь;
            КонецЕсли;
           
            ОБ_АДОКонект = Новый COMОбъект("ADODB.Connection");
            ОБ_АДОРекордсетШапка = Новый COMОбъект("ADODB.Recordset");
            ОБ_АДОРекордсетСтроки = Новый COMОбъект("ADODB.Recordset");
           
            //Определяем пару файлов
            Стр_ОкончаниеФайла="";
            ФайлыШапок = НайтиФайлы(Стр_КаталогДанных, "Head_*.txt");
            Для каждого ФайлШапки Из ФайлыШапок Цикл
                        Стр_ОкончаниеФайла=Сред(ФайлШапки.ИмяБезРасширения,6);
                        Стр_таблицаШапки=ФайлШапки.Имя;
                       
                        Стр_ТаблицаСтрок="Rows_"+Стр_ОкончаниеФайла+".txt";
                        Стр_ИмяФайлСтрок=ДобавлениеСлеша(Стр_КаталогДанных)+Стр_ТаблицаСтрок;
                        ФайлСтрок=Новый Файл(Стр_ИмяФайлСтрок);
                        Если НЕ ФайлСтрок.Существует() Тогда
                            Сообщить("Не найден файл строк для файла шапки """+Стр_таблицаШапки+"""! Пара файлов не обработана",СтатусСообщения.Важное);
                                   Продолжить;
                        КонецЕсли;
                       
                        //Создаем схему данных
                        ФайлСхемыДанных=Новый Файл(ДобавлениеСлеша(Стр_КаталогДанных)+"schema.ini");
                        Если ФайлСхемыДанных.Существует() Тогда
                                  Попытка
                                       УдалитьФайлы(ФайлСхемыДанных.Путь,ФайлСхемыДанных.Имя);
                                   Исключение
                                       Сообщить("Не возможно удалить файл """+ФайлСхемыДанных.ПолноеИмя+""" для создания новой схемы данных! Проверте атрибуты файла",СтатусСообщения.Важное);
                                               Возврат Ложь;
                                   КонецПопытки;
                        КонецЕсли;
                       
                        Стр_СхемаДанныхТхт="["+Стр_таблицаШапки+"]
                                                                                  |ColNameHeader=False
                                                                                  |Format=FixedLength
                                                                                  |Col1=NumberNote Text Width 20
                                                                                  |Col2=StoreNum Text Width 5
                                                                                  |Col3=DataNote DateTime Width 10
                                                                                  |Col4=DataDev DateTime Width 10
                                                                                  |Col5=DataDes DateTime Width 10
                                                                                  |Col6=CountLine Long Width 4
                                                                                 
                                                                                  |["+Стр_ТаблицаСтрок+"]
                                                                                  |ColNameHeader=False
                                                                                  |Format=FixedLength
                                                                                  |Col1=NumberNote Text Width 20
                                                                                  |Col2=Articul Text Width 7
                                                                                  |Col3=Counts Double Width 9";
                       
                        ТекстСхемы=Новый ЗаписьТекста(ФайлСхемыДанных.ПолноеИмя, КодировкаТекста.ANSI);
                        ТекстСхемы.Записать(Стр_СхемаДанныхТхт);
                        ТекстСхемы.Закрыть();
                       
                        // Создаем коннект
                        Попытка
                                   ОБ_АДОКонект.Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+Стр_КаталогДанных+";Extended Properties='text;FMT=Delimited;HDR=NO'");
                       Исключение
                                   Сообщить("Невозможно открыть соединение!"+ОписаниеОшибки(),СтатусСообщения.Важное);
                            Возврат Ложь;
                        КонецПопытки;
 
                       Стр_SQL = "S_elect * FROM "+Стр_таблицаШапки;
                      
                        Попытка
                                    ОБ_АДОРекордсетШапка=ОБ_АДОКонект.Execute(Стр_SQL);                
                        Исключение
                            Сообщить("Ошибка выполнения запроса """+Стр_SQL+"""!"+ОписаниеОшибки(),СтатусСообщения.Важное);
                                   Возврат Ложь;          
                        КонецПопытки;
 
                        Пока НЕ ОБ_АДОРекордсетШапка.EOF Цикл
                                  
                                   // Заказ
                                   Стр_НомерЗаказа     = ОБ_АДОРекордсетШапка.Fields("NumberNote").Value;
                                  Стр_КодКА= ОБ_АДОРекордсетШапка.Fields("StoreNum").Value;
                              
                                   Д_ДатаЗаказа= ОБ_АДОРекордсетШапка.Fields("DataNote").Value;
                                   Д_ДатаДоставки= ОБ_АДОРекордсетШапка.Fields("DataDev").Value;
                                   Д_ДатаСбора= ОБ_АДОРекордсетШапка.Fields("DataDes").Value;
                                   Ч_КоличествоСтрок            = ОБ_АДОРекордсетШапка.Fields("CountLine").Value;
                                 
                                   Сообщить("Заказ № "+Стр_НомерЗаказа+" от " +Д_ДатаЗаказа+ " Код контрагента: "+Стр_КодКА+" Дата доставки: "+Д_ДатаДоставки);
                                  
                                   // Обработка строк заказа
                                   Стр_SQL = "S_elect * FROM "+Стр_ТаблицаСтрок+" WHERE NumberNote='"+Стр_НомерЗаказа+"'";

                                   Попытка
                                               ОБ_АДОРекордсетСтроки=ОБ_АДОКонект.Execute(Стр_SQL);               
                                  Исключение
                                               Сообщить("Ошибка выполнения запроса """+Стр_SQL+"""!"+ОписаниеОшибки(),СтатусСообщения.Важное);
                                               Возврат Ложь;          
                                   КонецПопытки;

                                   Сч=0;
                                   Сообщить(" №           Артикул                     Количество");
                                   Пока НЕ ОБ_АДОРекордсетСтроки.EOF Цикл
                                              //Заполняем таб часть документа
                                               Сч=Сч+1;
                                               Стр_Артикул=СокрЛП(ОБ_АДОРекордсетСтроки.Fields("Articul").Value);
                                               Ч_Количество=ОБ_АДОРекордсетСтроки.Fields("Counts").Value;
                                               Сообщить(""+Сч+"    " +Стр_Артикул+ "               "+Ч_Количество);
                                               ОБ_АДОРекордсетСтроки.MoveNext();
                                   КонецЦикла;

                                   ОБ_АДОРекордсетШапка.MoveNext();
                        КонецЦикла;
           КонецЦикла;
    Возврат Истина;
КонецФункции // ЗагрузитьДанныеИзtxt() Gmix 04.05.2006 12:22:21   

Автор: Журавлев Михаил Викторович
Разместил:   Версии: | 8.x | 8.2 УП |  Дата:   Прочитано: 17175
 0 
Распечатать
Возможно, вас также заинтересует
1C: Enterprise Development Tools 52
И вот случилось долгожданное: Вышел 1C: Enterprise Development Tools - это среда для разработки конфигурации в IDE Eclipse. С сайта 1С: « 1C:Enterprise Development Tools » – это инструмент нового поколения для разработчиков бизнес-приложений систем
1Cv8.1CD - Файл данных достиг максимального размера! 9
1С выдает предупреждение " Файл данных достиг максимального размера" . Подскажите из - за чего это и как можно решить ? Превышен размер файла, обычно это сообщение возникает, когда размер файла 1Cv8.1CD приближается к 10 гигабайтам или размер ка
Google maps : вывод точек на карту и режим панорамы 9
В отличие от яндекс карт в GMaps можно использовать панорамы - за что им большой плюс! Надеюсь в яндексе прочитают этот пост и тоже когда-нибудь это сделают! Для клиента нужно было сделать вывод объектов на карту С возможностью просмотра панора
Microsoft SQL Server Native Client Добавление значения в столбец "datetime" привело к переполнению 2
При формировании отчета на СКД получили ошибку: Microsoft SQL Server Native Client 11.0: Добавление значения в столбец "datetime" привело к переполнению Подробнее текст такой: ... по причине: Ошибка компоновки данных по причине: Ошибка получени
ZIP-архив Разделить и Объединить Файл 0
При работе с большими объемами данных могут возникнуть проблемы при пересылке архивных файлов. Типичной такой ситуацией является ограничение некоторых почтовых серверов на размер сообщения - если письмо превышает некий заранее установленный размер, о
Посмотреть все результаты поиска похожих
Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.
Загрузка... Дождитесь завершения!