В статье продемонстрированы программные методы экспортирования данных из программы &
quot ;1С:Предприятие 7.7&
quot ;.
Экспорт данных из 1С в Текстовой файл TXT, CSV
Код //сохранение данных таблицы значений в текстовой файл
//аргументы: М - таблица значений
Процедура ВыполнитьЭкспорт(М)
Т=СоздатьОбъект(&
quot ;Текст&
quot ;);
//выборка
М.ВыбратьСтроки();
Пока М.ПолучитьСтроку()=1 Цикл
Состояние(&
quot ;Экспорт: &
quot ;+
Цел(М.НомерСтроки/М.КоличествоСтрок()
0)+&
quot ;%&
quot ;);
тФирма=М.Фирма.ПолныйКод();
тТовар=М.Товар.ПолныйКод();
тСклад=М.Склад.ПолныйКод();
тКоличество=М.Количество;
Т.ДобавитьСтроку(&
quot ;Фирма=&
quot ;+тФирма+&
quot ;;Товар=&
quot ;+тТовар+&
quot ;;Склад=&
quot ;+тСклад+
&
quot ;;Количество=&
quot ;+тКоличество+&
quot ;;&
quot ;);
КонецЦикла;
//файл
Файл=&
quot ;export&
quot ;+Формат(ДатаК,&
quot ;Д ГГГГММДД&
quot ;)+&
quot ;.csv&
quot ;;
Т.Записать(Файл);
Сообщить(&
quot ;Файл с данными сохранен в каталоге
экспортной БД: &
quot ;+КаталогИБ()+Файл);
КонецПроцедуры
Экспорт данных из 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 активно использованы в конфигурации &
quot ;Договоры&
quot ;. Для определения числового кода текстовых констант MS Word использована обработка &
quot ;Константы VBA&
quot ;.
* Конфигурация &
quot ;Договоры&
quot ;
* Универсальная обработка &
quot ;Константы VBA&
quot ;
Код //поиск текста в открытом документе 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 Тогда
ЗапуститьПриложение(СокрЛП(Значение));
КонецЕсли;
КонецПроцедуры