Пользователь

Добро пожаловать,

Регистрация или входРегистрация или вход
Потеряли пароль?Потеряли пароль?

Ник:
Пароль:

Меню сайта




Ваше мнение
Оцените скорость загрузки страниц сайта

Реактивная
Быстрая
Нормальная
Неважная
Медленная
Черепашья


Результаты
Другие опросы

Всего голосов: 971
Комментарии: 4


Наши партнеры



Статистика




Programming books  Download software  Documentation  Scripts  Content Managment Systems(CMS)  Templates  Icon Sets  Articles  Contacts  Voting  Site Search




Статьи и обзоры



Импорт данных в 1С

1С-Предприятие - это программный комплекс, контролирующий все стадии товарооборота, от поступления товара на склад до его продажи и проведения через бухгалтерские книги. Первоначально этот комплекс задумывался как бухгалтерская программа и назывался 1C-Бухгалтерия. В практической работе приходится проводить импорт данных в "1С:Предприятие" из различных внешних приложений, обслуживающих базы данных. Встроенный язык программы "1С:Предприятие" и стандартизированные методы построения баз данных позволяют создавать универсальные обработки по импорту данных из внешних источников. Написание универсальной обработки, зачастую, - это сложный, но и достаточно увлекательный процесс. Сложным я могу назвать его потому, что на этапе разработки нужно заранее предусмотреть все возможные варианты импортирования и обработки данных. А увлекательным процесс написания универсальных обработок по импорту данных в 1С мне видится потому, что постоянно ощущаешь огромные выгоды от использования обработки в последующей работе.

Файловая система

Для начала давайте посмотрим, как проводится работа с файловой системой из программы 1С:Предприятие.

Код
//открытие файла заданного типа
Функция гФайл_Открыть(Файл,Каталог,ФлагВсе,ФлагТекст=0,ФлагКнига=0,
ФлагДокумент=0,ФлагПрезентация=0,ФлагАкробат=0) Экспорт
//меню
Если ПустоеЗначение(Файл)=0 Тогда
А=СоздатьОбъект("СписокЗначений");
А.ДобавитьЗначение(0,"Открыть");
А.ДобавитьЗначение(1,"Выбрать");
Ответ=0;
Если А.ВыбратьЗначение(Ответ,,,,1)=0 Тогда
Возврат(0);
ИначеЕсли Ответ=0 Тогда
ЗапуститьПриложение(Каталог+Файл);
Возврат(0);
ИначеЕсли Ответ=1 Тогда
ФС.УстТекКаталог(Каталог);
КонецЕсли;
КонецЕсли;
//формат
Список="";
Если ФлагВсе=1 Тогда
Список=Список+"|Все файлы|*.*";
КонецЕсли;
Если ФлагТекст=1 Тогда
Список=Список+"|Текстовые файлы|*.txt";
КонецЕсли;
Если ФлагКнига=1 Тогда
Список=Список+"|Книги MS Excel|*.xls";
КонецЕсли;
Если ФлагДокумент=1 Тогда
Список=Список+"|Документы MS Word|*.doc";
КонецЕсли;
Если ФлагПрезентация=1 Тогда
Список=Список+"|Презентации MS PowerPoint|*.pps";
КонецЕсли;
Если ФлагАкробат=1 Тогда
Список=Список+"|Документы Adobe Acrobat|*.pdf";
КонецЕсли;
Список=Сред(Список,2);
//
Возврат ФС.ВыбратьФайл(0,Файл,Каталог,"Открыть файл",Список);
КонецФункции

//процедура определяет название файла и каталога на основании заданной адресной строки
Процедура гПуть_Получить(Путь,Файл,Каталог) Экспорт
Текст=СтрЗаменить(Путь,"\",РазделительСтрок);
//каталог
Для i=1 По СтрКоличествоСтрок(Текст-1) Цикл
Каталог=Каталог+СтрПолучитьСтроку(Текст,i)+"\";
КонецЦикла;
//файл
Файл=СтрПолучитьСтроку(Текст,СтрКоличествоСтрок(Текст));
КонецПроцедуры


Импорт данных в 1С из MS Excel

Программу Microsoft Excel сегодня можно называть стандартом работы с электронными таблицами. Именно поэтому довольно часто приходится встречаться с ситуациями, когда массивы данных хранятся именно в файлах формата MS Excel. Для того, чтобы умело импортировать данные из файлов формата MS Excel в базу данных 1С:Предприятия, вы можете воспользоваться следующими примерами.

Код
//подключение к MS Excel через OLE
Функция гКнига_Открыть(Файл,Каталог,Область,Высота,Ширина) Экспорт
Оле=СоздатьОбъект("Excel.Application");
//поиск в открытом приложении
Для i=1 По Оле.Workbooks.Count Цикл
ТекКнига=Оле.Workbooks(i);
Если ТекКнига.Name=Файл Тогда
Книга=ТекКнига;
Прервать;
КонецЕсли;
КонецЦикла;
//открытие файла
Если ПустоеЗначение(Книга)=1 Тогда
Книга=Оле.Workbooks.Open(Каталог+Файл);
КонецЕсли;
Оле.Visible=1;
//выбор листа
Если Книга.Worksheets.Count=1 Тогда
НомерЛиста=1;
Иначе
Список=СоздатьОбъект("СписокЗначений");
Для i=1 По Книга.Worksheets.Count Цикл
Список.ДобавитьЗначение(i,Книга.Worksheets(i).Name);
КонецЦикла;
Если Список.ВыбратьЗначение(НомерЛиста,"Выбор листа - "+Книга.Name)=0 Тогда
Возврат(0);
КонецЕсли;
КонецЕсли;
//лист
Лист=Книга.Worksheets(НомерЛиста);
Лист.Activate();
//данные
Область=Книга.Worksheets(НомерЛиста).Cells.CurrentRegion;
Высота=Область.Rows.Count;
Ширина=Область.Columns.Count;
//
Возврат(1);
КонецФункции

//импорт цен из файла MS Excel
//поиск элемента справочника проводится по полному коду
Процедура ИмпортироватьЦеныТовара()
Перем Файл,Каталог,Область,Высота,Ширина;
//открытие
Каталог=КаталогПользователя();
Файл="";
Если ФС.ВыбратьФайл(0,Файл,Каталог,"Открыть файл","Файлы MS Excel|*.xls")=0 Тогда
Возврат;
ИначеЕсли гКнига_Открыть(Файл,Каталог,Область,Высота,Ширина)=0 Тогда
Возврат;
КонецЕсли;
//справочник
С=СоздатьОбъект("Справочник.Товары");
С.ИспользоватьРодителя("");
С.ИспользоватьДату(РабочаяДата(),1);
//данные
Для Стр=2 По Высота Цикл
Состояние("Прогресс: "+Цел(Стр/Высота0)+"%");
//код
ТекКод=СокрЛП(Область.Cells(Стр,1).Text);
Если С.НайтиПоКоду(ТекКод,2)=0 Тогда
Сообщить("Не найден товар по коду: "+ТекКод,"!");
Продолжить;
КонецЕсли;
//цена
ТекЦена=Число(Область.Cells(Стр,2).Text);
Если ТекЦена=0 Тогда
Продолжить;
КонецЕсли;
//значение
С.УстановитьАтрибут("Цена",ТекЦена);
//запись
Попытка
С.Записать();
Исключение
Сообщить("Ошибка записи: "+ОписаниеОшибки(),"!");
КонецПопытки;
КонецЦикла;
Предупреждение("Импортированы цены для "+Высота+" наименований товаров");
КонецПроцедуры


Импорт данных в 1С из текстового файла.

Основными преимуществами текстовых файлов являются их маленький размер и простота хранения данных внутри файла. Пожалуй, именно поэтому многие данные до сего дня передаются посредством текстовых файлов. Учитывая существующую потребность, вам могут потребоваться умения в импортировании данных в 1С из текстового файла. И нижеприведённые примеры помогут вам в приобретении необходимых знаний.

Самым распространённым случаем передачи данных текстовым файлом является способ выгрузки данных из системы Клиент-Банк. В примере, приведённом ниже, вы можете увидеть, каким образом производится загрузка данных о банковских операциях в 1С из текстового файла, в который предварительно выгружены данные из системы Банк-Клиент.

Код
//импорт данных выписки из текстового файла программы "Банк-Клиент"
Процедура ИмпортироватьВыписку()
//настройка
Н=СоздатьОбъект("Справочник.НастройкиИмпортаВыписки");
Если РСчет.НастройкаИмпортаВыписки.Выбран()=1 Тогда
Н.НайтиЭлемент(РСчет.НастройкаИмпортаВыписки);
ИначеЕсли Н.Выбрать("Выбор настройки импорта","ДляВыбора")=0 Тогда
Возврат;
КонецЕсли;
//очистка строк
Если КоличествоСтрок()>0 Тогда
Если Вопрос("Удалить строки?","ОК+Отмена")="Отмена" Тогда
Возврат;
КонецЕсли;
УдалитьСтроки();
КонецЕсли;
//файл
Файл=Формат(ДатаДок,"Д ДДММГГ");
Файл=СтрЗаменить(Файл,".","");
Файл=СокрЛП(Н.Каталог)+"\"+Файл+".txt");
Если ФС.СуществуетФайл(Файл)=0 Тогда
Сообщить("Файл не найден: "+Файл,"!");
Предупреждение("Файл электронной выписки за "+ДатаДок+" не найден!");
Возврат;
КонецЕсли;
//источник
Т=СоздатьОбъект("Текст");
Т.Открыть(Файл);
Если Т.КоличествоСтрок()=0 Тогда
Сообщить("Файл пустой: "+Файл, "!");
Предупреждение("Файл электронной выписки за "+ДатаДок+" пустой!");
Возврат;
КонецЕсли;
//установки
ОснСчет=СокрЛП(РСчет.НомерСчета);
ОснМфо=Формат(РСчет.Банк.Код,"Ч(0)9");
ОснВалюта=СокрЛП(РСчет.Валюта.Код);
СтавкаНдс=Константа.БазНдс.Ставка.Получить(ДатаДок);
К=СоздатьОбъект("Справочник.Контрагенты");
//выбор
Для й=1 По Т.КоличествоСтрок() Цикл
Стр=Т.ПолучитьСтроку(й);
Если ПустаяСтрока(Стр)=1 Тогда
Прервать;
КонецЕсли;
//перекодировка
Если Н.ФлагДос=1 Тогда
Стр=OemToAnsi(Стр);
Стр=СтрЗаменить(Стр,"\"+Симв(34),Симв(34));
КонецЕсли;
//деление
Стр=СтрЗаменить(Стр,Симв(34)+" "+Симв(34),РазделительСтрок);
//данные
Имя1=СтрПолучитьСтроку(Стр,3);
Окпо1=СтрПолучитьСтроку(Стр,4);
Банк1=СтрПолучитьСтроку(Стр,5);
ТекМфо1=СтрПолучитьСтроку(Стр,6);
ТекСчет1=СтрПолучитьСтроку(Стр,7);
Имя2=СтрПолучитьСтроку(Стр,8);
Окпо2=СтрПолучитьСтроку(Стр,9);
Банк2=СтрПолучитьСтроку(Стр,10);
ТекМфо2=СтрПолучитьСтроку(Стр,11);
ТекСчет2=СтрПолучитьСтроку(Стр,12);
ТекВалюта=СтрПолучитьСтроку(Стр,13);
ТекСумма=СтрПолучитьСтроку(Стр,14);
ТекИнфо=СтрПолучитьСтроку(Стр,16);
//проверка
Если Не(Оснвалюта=ТекВалюта) Тогда
Сообщить("Строка "+й+": Не найдена Валюта "+РСчет.Валюта.Наименование+" по коду: "+ОснВалюта,"!");
Продолжить;
ИначеЕсли Не(ОснМфо=ТекМфо1) И Не(ОснМфо=ТекМфо2) Тогда
Сообщить("Строка "+й+": Не найден Банк "+РСчет.Банк.Наименование+" по коду МФО: "+ОснМфо,"!");
Продолжить;
ИначеЕсли Не(ОснСчет=ТекСчет1) И Не(ОснСчет=ТекСчет2) Тогда
Сообщить("Строка "+й+": Не найден РСчет по коду: "+ОснСчет,"!");
Продолжить;
КонецЕсли;
//строка
НоваяСтрока();
Если (ОснМфо=ТекМфо1) И (ОснСчет=ТекСчет1) Тогда
//приход
УстановитьАтрибут("ПриходРасход",Перечисление.ПлюсМинус.Плюс);
УстановитьАтрибут("Счет",Н.СчетД);
КодКлиента=Окпо2;
ИмяКлиента=Имя2;
Иначе
//расход
УстановитьАтрибут("ПриходРасход",Перечисление.ПлюсМинус.Минус);
УстановитьАтрибут("Счет",Н.СчетК);
КодКлиента=Окпо1;
ИмяКлиента=Имя1;
КонецЕсли;
//содержание
УстановитьАтрибут("Содержание",ТекИнфо);
//сумма
УстановитьАтрибут("ВидНдс",Константа.БазНдс);
УстановитьАтрибут("СуммаСНдс",ТекСумма);
УстановитьАтрибут("Ндс",СуммаСНдс*СтавкаНдс/(1+СтавкаНдс));
//субконто
НазначитьТип("Субконто",ВидыСубконто.Контрагенты);
Если К.НайтиПоРеквизиту("ЕДРПОУ",КодКлиента,1)=1 Тогда
УстановитьАтрибут("Субконто",К.ТекущийЭлемент());
ИначеЕсли Н.ФлагСоздать=1 Тогда
К.Новый();
К.Наименование=ИмяКлиента;
К.ПолнНаименование=ИмяКлиента;
К.Едрпоу=КодКлиента;
К.Записать();
Сообщить("Строка "+й+": Новый контрагент: "+ИмяКлиента);
//контрагент
УстановитьАтрибут("Субконто",К.ТекущийЭлемент());
Иначе
Сообщить("Строка "+й+": Не найден Контрагент по коду ЕГРПОУ: "+КодКлиента,"!");
КонецЕсли;
КонецЦикла;
Предупреждение("Обработка выполнена");
КонецПроцедуры


Импорт данных из файла формата DBF

Старый добрый формат dBase по-прежнему используется для хранения массивов данных. Чего уж говорить, если обычная версия 1С:Предприятия (не SQL) сама хранит базы данных в файлах с расширением DBF? Формат файлов DBF, на мой взгляд, очень удобен для передачи данных в базу 1С, поскольку преимуществами файла формата dBase являются маленький размер и матричная система хранения данных.

Программист 1С может встретиться с необходимостью импортировать данные в 1С из файла DBF, в который экспортированы данные о банковских операциях из системы Банк-Клиент. В нижеприведённом примере вы можете увидеть пример обработки файла DBF, из которого в 1С импортируется банковская выписка.

Код
//импорт банковских операций в базу 1С из внешнего файла DBF, созданного в системе Банк-Клиент
Процедура КнопкаИмпорт()
Перем Файл,Каталог;
Если Вопрос("Импортировать данные?","ОК+Отмена")="Отмена" Тогда
Возврат;
ИначеЕсли ФС.ВыбратьФайл(0,Файл,Каталог,"Открыть файл","Файлы Клиент-Банк (dbf)|*.dbf|Все файлы|*.*")=0 Тогда
Возврат;
КонецЕсли;
//удаление строк
Если КоличествоСтрок()>0 Тогда
Если Вопрос("Удалить все строки табличной части документа?","Да+Нет")="Да" Тогда
УдалитьСтроки();
КонецЕсли;
КонецЕсли;
//создание нового файла
Б=СоздатьОбъект("XBase");
Б.ОткрытьФайл(Каталог+Файл,,1);
Если Б.Открыта()=0 Тогда
Сообщить("Не удалось открыть файл DBF","!");
Возврат;
КонецЕсли;
//справочник
С=СоздатьОбъект("Справочник.Контрагенты");
//строки
Счетчик=0;
Для й=1 По Б.КоличествоЗаписей() Цикл
Б.Перейти(й);
//проверка
Если Не(Б.OperData=ДатаДок) Тогда
Продолжить;
ИначеЕсли Не(Б.KodVal=980) Тогда
Продолжить;
ИначеЕсли Не(Число(Б.Kod_Cred)=Число(Фирма.РегКод)) Тогда
Продолжить;
ИначеЕсли Не(Число(Б.Mfo_Cred)=Число(Фирма.Банк.Код)) Тогда
Продолжить;
ИначеЕсли Не(Число(Б.Acc_Credit)=Число(Фирма.Счет)) Тогда
Продолжить;
КонецЕсли;
//строка
НоваяСтрока();
УстановитьАтрибут("Сумма",Б.OperSum);
УстановитьАтрибут("Примечание",СокрЛП(Б.Naznach));
//контрагент
Если С.НайтиПоРеквизиту("РегКод",Б.Kod_Deb,1)=0 Тогда
С.Новый();
С.Наименование=СокрЛП(Б.Naim_Deb);
С.РегКод=Б.Kod_Deb;
С.Записать();
КонецЕсли;
УстановитьАтрибут("Контрагент",С.ТекущийЭлемент());
//счётчик
Счетчик=Счетчик+1;
КонецЦикла;
//закрытие файла
Б.ЗакрытьФайл();
//извещение
Предупреждение("Импортировано строк: "+Счетчик);
КонецПроцедуры


Импорт данных из файла формата XML

С недавних пор набирает популярность новый формат передачи многомерных массивов данных, который носит название eXtensible Markup Language или XML. Возможности нового языка разметки, используемого для хранения данных, огромны настолько, что его стали использовать даже для. передачи данных в программу 1С:Предприятие. Поэтому современный специалист по платформе 1С обязан уметь импортировать данные в 1С из файла, имеющего формат XML.

//процедура формирует печатную таблицу с данными, содержащимися в файле формата XML
Процедура Сформировать()
Перем Файл,Каталог;
Если ФС.ВыбратьФайл(0,Файл,Каталог,"Открытие документа XML","Документы XML|*.xml")=0 Тогда
Возврат;
КонецЕсли;
//таблица
Т=СоздатьОбъект("Таблица");
Т.ИсходнаяТаблица("");
Т.ВывестиСекцию("Шапка");
//документ
Анализатор=СоздатьОбъект("AddIn.XMLParser");
Д=Анализатор.СоздатьДокумент();
Д.Загрузить(Каталог+Файл);
//узлы
Узел=Д.ВыбратьУзел("Данные");
Для i=1 По Узел.КоличествоПодчиненных() Цикл
ТекУзел=Узел.ПолучитьПодчиненныйПоНомеру(i);
Состояние(ТекУзел.Текст);
//строка
тЭлемент=ТекУзел.Наименование;
тЗначение=ТекУзел.Значение;
Т.ВывестиСекцию("Строка");
КонецЦикла;
//таблица
Т.Опции(1,1,1,0);
Т.ПовторятьПриПечатиСтроки(1,1);
Т.ТолькоПросмотр(1);
Т.Показать("XML");
КонецПроцедуры


Ну вот собственно и все. Надеюсь данная статья оказалась вам полезна.



Нет комментариев. Почему бы Вам не оставить свой?
Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.
Внимание! Если у вас не получилось найти нужную информацию, используйте рубрикатор или воспользуйтесь поиском


.



Статьи и обзоры Программирование Импорт данных в практической работе приходится проводить импорт данных & quot Предприятие& из различных внешних приложений обслуживающих базы Встроенный язык программы стандартизированные методы построения баз позволяют создавать универсальные обработки по импорту источников Написание универсальной зачастую это сложный но достаточно увлекательный процесс Сложным могу назвать его потому что на этапе разработки