В статье продемонстрированы программные методы экспортирова
ни я данных из программы "1С:Предприятие 7.7".
Экспорт данных из 1С в Текстовой файл TXT, CSV
Код //сохране
ни е данных таблицы значе
ни й в текстовой файл
//аргументы: М - таблица значе
ни й
Процедура Выпол
ни тьЭкспорт(М)
Т=СоздатьОбъект("Текст");
//выборка
М.ВыбратьСтроки();
Пока М.ПолучитьСтроку()=1 Цикл
Состоя
ни е("Экспорт: "+
Цел(М.НомерСтроки/М.КоличествоСтрок()
0)+"%");
тФирма=М.Фирма.ПолныйКод();
тТовар=М.Товар.ПолныйКод();
тСклад=М.Склад.ПолныйКод();
тКоличество=М.Количество;
Т.ДобавитьСтроку("Фирма="+тФирма+";Товар="+тТовар+";Склад="+тСклад+
";Количество="+тКоличество+";");
КонецЦикла;
//файл
Файл="export"+Формат(ДатаК,"Д ГГГГММДД")+".csv";
Т.Записать(Файл);
Сообщить("Файл с данными сохранен в каталоге
экспортной БД: "+КаталогИБ()+Файл);
КонецПроцедуры
Экспорт данных из 1С в файл dBase формата DBF
Код //процедура записывает данные об использовани и
отчёта в файл dBase формата DBF
Процедура гЗаписатьСтатистикуИспользовани яОтчета(ИдентификаторОтчета) Экспорт
//путь к файлу; имя файла не должно превышать 8 знаков
Путь=КаталогИБ()+"Stat.dbf";
//создани е нового файла
Б=СоздатьОбъект("XBase");
Если ФС.СуществуетФайл(Путь)=0 Тогда
//добавлени е полей
Б.ДобавитьПоле("REPORT","S",100,0);
Б.ДобавитьПоле("USER","S",50,0);
Б.ДобавитьПоле("DATE","D",10,0);
Б.ДобавитьПоле("TIME","S",5,0);
//создани е файла
Б.СоздатьФайл(Путь);
Б.ЗакрытьФайл();
КонецЕсли;
//открытие файла
Б.ОткрытьФайл(Путь);
Если Б.Открыта()=0 Тогда
Сообщить("Не удалось открыть файл DBF","!");
Возврат;
КонецЕсли;
//добавлени е записи
Б.Добавить();
Б.Date=ТекущаяДата();
Б.Time=ТекущееВремя();
Б.Report=СокрЛП(ИдентификаторОтчета);
Б.User=гПользователь.Наименовани е;
Б.Записать();
//закрытие файла
Б.ЗакрытьФайл();
КонецПроцедуры
Экспорт данных из 1С на лист MS Excel
Код //функция создаёт новую кни гу в MS Excel и выгружает табличную часть заданного документа
Процедура гМногострочка_Экспортировать(Док) Экспорт
//документ
Д=СоздатьОбъект("Документ");
Д.НайтиДокумент(Док);
//приложени е
Оле=СоздатьОбъект("Excel.Application");
Если ФлагВидимость=1 Тогда
Оле.Visible=1;
КонецЕсли;
Кни га=Оле.Workbooks().Add();
Кни га.Windows(1).Caption=Д.Представлени еВида()+" "+СокрЛП(Д.НомерДок);
Лист=Кни га.Activesheet;
//шапка
Колонка=0;
Для i=1 По Метаданные.Документ(Д.Вид()).РеквизитТабличнойЧасти() Цикл
Ж=Метаданные.Документ(Д.Вид()).РеквизитТабличнойЧасти(i);
//колонка
Колонка=Колонка+1;
Ячейка=Лист.Cells(1,Колонка);
//текст
Ячейка.Value=Ж.Идентификатор;
//форматировани е
Ячейка.Font.Bold=1;
Если Ж.Тип="Число" Тогда
Попытка
Лист.Columns(Колонка).NumberFormat="# ##0.00";
Исключени е
Лист.Columns(Колонка).NumberFormat="# ##0,00";
КонецПопытки;
КонецЕсли;
КонецЦикла;
//строки
Д.ВыбратьСтроки();
Пока Д.ПолучитьСтроку()=1 Цикл
Лист.Range("A"+Число(Д.НомерСтроки+1)).Select();
Колонка=0;
//многострочка
Для i=1 По Метаданные.Документ(Д.Вид()).РеквизитТабличнойЧасти() Цикл
Ж=Метаданные.Документ(Д.Вид()).РеквизитТабличнойЧасти(i);
Колонка=Колонка+1;
//значени е
Значени е=Д.ПолучитьАтрибут(Ж.Идентификатор);
Лист.Cells(Д.НомерСтроки+1,Колонка).Value=СокрЛП(Значени е);
КонецЦикла;
КонецЦикла;
//авто подбор ширины
Лист.Cells.EntireColumn.AutoFit();
//закреплени е области
Лист.Range("A2").Select();
Оле.ActiveWindow.FreezePanes=1;
Оле.Visible=1;
КонецПроцедуры
Управлени е MS Word из 1С
Методы работы с MS Word через OLE активно использованы в конфигурации "Договоры". Для определе
ни я числового кода текстовых констант MS Word использована обработка "Константы VBA".
* Конфигурация "Договоры"
* У
ни версальная обработка "Константы VBA"
Код //поиск текста в открытом документе MS Word
Функция Текст_Найти(Оле,аТекст)
Текст=СокрЛП(аТекст);
//поиск
Оле.Selection.Find.ClearFormatting();
Оле.Selection.Find.Text=Текст;
Оле.Selection.Find.MatchCase=0;
Оле.Selection.Find.MatchWholeWord=0;
Оле.Selection.Find.MatchWildcards=0;
Оле.Selection.Find.MatchSoundsLike=0;
Оле.Selection.Find.MatchAllWordForms=0;
Оле.Selection.Find.Forward=1;
Оле.Selection.Find.Wrap=wdFindContinue;
Оле.Selection.Find.Format=0;
Ответ=Оле.Selection.Find.Execute();
//найден
Если Оле.Selection.Find.Found()=0 Тогда
Сообщить("Текст не найден: "+Текст);
Возврат(0);
Иначе
Возврат(1);
КонецЕсли;
КонецФункции
//поиск и замена текста в документе MS Word
Процедура Договор_Замени ть()
//путь
Если ФС.ВыбратьФайл(0,Файл,Каталог,"Открыть старый файл","Файлы MS Word|*.doc")=0 Тогда
Возврат;
КонецЕсли;
//приложени е
Оле=СоздатьОбъект("Word.Application");
Оле.Documents.Open(Каталог+Файл,,1);
//переход курсора в начало текста
Оле.Selection.HomeKey(wdStory);
//замена Номер договора
Если Текст_Найти(Оле,"ДОГОВОР")=1 Тогда
Оле.Selection.EndKey(wdLine,wdCharacter);
Оле.Selection.TypeText("ДОГОВОР № "+гНомерДок(НомерДок));
КонецЕсли;
//замена Дата договора
Если Текст_Найти(Оле,Константа.ГодСтарый)=1 Тогда
Оле.Selection.MoveLeft(wdWord,3);
Оле.Selection.EndKey(wdLine,wdCharacter);
Оле.Selection.TypeText(ДатаДоговора());
КонецЕсли;
//переход курсора в начало текста
Оле.Selection.HomeKey(wdStory);
Оле.Visible=1;
//предупреждени е
Предупреждени е("Создани е нового договора копировани ем старого выполнено.");
КонецПроцедуры
Экспорт данных в файл формата XML
Код //процедура выгружает элементы справочни ка "Физические лица" в файл формата XML
Процедура Лица_Выгрузить()
//справочни к
С=СоздатьОбъект("Справочни к.Лица");
//анализатор
Анализатор=СоздатьОбъект("AddIn.XMLParser");
Корень=Анализатор.СоздатьДокумент();
//данные
Данные=Корень.СоздатьПодчиненныйЭлемент("Данные");
Данные.УстановитьАтрибут("Дата",ТекущаяДата());
Данные.УстановитьАтрибут("Время",ТекущееВремя());
Данные.УстановитьАтрибут("Автор",гПользователь.Наименовани е);
//наполнени е
Группа=Данные;
С.ВыбратьЭлементы();
Пока С.ПолучитьЭлемент()=1 Цикл
Если С.ЭтоГруппа()=1 Тогда
Группа=Данные.СоздатьПодчиненныйЭлемент(С.Наименовани е);
Иначе
Э=Группа.СоздатьПодчиненныйЭлемент("Лицо");
Э.Значени е=С.Код;
Э.УстановитьАтрибут("Наименовани е",С.Наименовани е);
КонецЕсли;
КонецЦикла;
//запись
Корень.Записать("C:\People.xml");
Предупреждени е("ОК");
КонецПроцедуры
Управлени е MS Outlook из 1С
Код //создать новое сообщени е из 1С в MS Outlook
Процедура Письмо_Создать()
//приложени е
Попытка
Оле=CreateObject("Outlook.Application");
ЕстьОшибка=0;
Исключени е
Предупреждени е("Не удалось создать письмо в MS Outlook!");
ЕстьОшибка=1;
КонецПопытки;
//адрес
Адрес=СокрЛП(Лицо.АдресЭ);
//письмо
Если ЕстьОшибка=0 Тогда
//Outlook
Письмо=Оле.CreateItem(0);
Письмо.Subject=Клиент.Наименовани е+?(Лицо.Выбран()=0,"",", "+Лицо.Наименовани е);
Письмо.Body=гЛицо(Лицо);
Если ПустаяСтрока(Адрес)=0 Тогда
Письмо.Recipients.Add(Адрес);
КонецЕсли;
Если ПустаяСтрока(Путь)=0 Тогда
Письмо.Attachments.Add(Путь);
КонецЕсли;
Письмо.Display();
Иначе
//тема
Тема=Клиент.Наименовани е;
Если Лицо.Выбран()=1 Тогда
Тема=Тема+", "+Лицо.Наименовани е+"&body="+СокрЛП(Лицо.Имя);
КонецЕсли;
ЗапуститьПриложени е("mailto:"+Адрес+"?subject="+Тема);
КонецЕсли;
КонецПроцедуры
//создать запись в календаре событий
Процедура Календарь_Создать()
//приложени е
Попытка
Оле=CreateObject("Outlook.Application");
Исключени е
Предупреждени е("Не удалось создать запись в календаре событий в MS Outlook!");
Возврат;
КонецПопытки;
//задача
Задача=Оле.CreateItem(1);
Задача.Subject="Названи е встречи";
Задача.Start="01.11.2007 15:00:00";
Задача.End="01.11.2007 16:00:00";
Задача.Body="Описани е встречи";
Задача.Location="Место встречи";
Задача.ReminderMinutesBeforeStart=30;
Задача.BusyStatus=0;
Задача.MeetingStatus=0;
Задача.Sensitivity=2;
Задача.Save();
КонецПроцедуры
//создать новую задачу из 1С в MS Outlook
Процедура Задача_Создать()
//приложени е
Попытка
Оле=CreateObject("Outlook.Application");
Исключени е
Предупреждени е("Не удалось создать задачу в MS Outlook!");
Возврат;
КонецПопытки;
//задача
Задача=Оле.CreateItem(3);
Задача.Subject=Клиент.Наименовани е;
Задача.StartDate=ДатаДок+Константа.Фирма.ПериодСобытие;
Задача.Display();
Если Лицо.Выбран()=1 Тогда
Задача.Body=
""+Лицо.Наименовани е+"
|"+гЛицо(Лицо)+"
|"+СокрЛП(Лицо.Должность)+"
|моб. "+СокрЛП(Лицо.ТелефонМ)+"
|гор. "+СокрЛП(Лицо.ТелефонГ);
КонецЕсли;
КонецПроцедуры
Запустить из 1С страни цу Интернет, отправить электронное почтовое сообщени е
//создани е почтового сообщени я в ассоциированном почтовом клиенте с заданным электронным адресом
Процедура гКнопкаПочта(Значени е) Экспорт
Если ПустаяСтрока(Значени е)=0 Тогда
ЗапуститьПриложени е("mailto:"+СокрЛП(Значени е));
КонецЕсли;
КонецПроцедуры
//открытие страни цы Интернет по заданному адресу в ассоциированном Интернет-браузере
Процедура гКнопкаИнтернет(Значени е) Экспорт
Если ПустаяСтрока(Значени е)=0 Тогда
ЗапуститьПриложени е(СокрЛП(Значени е));
КонецЕсли;
КонецПроцедуры