Поиск по блогу

Thursday, June 19, 2008

Програмная работа с файлами в 1С:Предприятие 8

Для реализации пользовательского интерфейса работы с файлами в 1С8 можно пользоваться следующими процедурами.
Для отображения имени файла в форме, с которой работает пользователь, разместим на ней элемент управления "ПолеВвода" (Имя: ИмяФайла; ТипЗначения: Строка; Длина: Неограниченна, КнопкаВыбора, КнопкаОткрытия, КнопкаОчистки: Истина);

Определим обработчики для этого ЭУ:

// Обработчик НачалоВыбора
Процедура ИмяФайлаНачалоВыбора(Элемент, СтандартнаяОбработка)

ВыборФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
ВыборФайла.ПроверятьСуществованиеФайла = Истина;
ВыборФайла.Заголовок = "Выберите файл для импорта";

// Здесь xxo и xx1 расширения файлов, которые пользователь сможет выбрать
ВыборФайла.Фильтр = "Файл (*.xx0)*.xx0Файл (*.xx1)*.xx1";

Если НЕ ВыборФайла.Выбрать() Тогда
Возврат;
КонецЕсли;

ПолеВвода.Значение = ВыборФайла.ВыбранныеФайлы[0];

КонецПроцедуры // ИмяФайлаНачалоВыбора

// Обработчик Открытие
Процедура ИмяФайлаОткрытие(Элемент, СтандартнаяОбработка)

Попытка
ЗапуститьПриложение(Элемент.Значение);
Исключение
Предупреждение("Не удалось открыть файл.");
КонецПопытки;

КонецПроцедуры // ИмяФайлаОткрытие

После этого мы можем использовать полученное имя файла для его открытия и работы с ним.
Если это текстовый документ, тогда код может быть таким:

// Выполняет действия над текстовым документом
// Получает: ИмяФайла-Строка-Полное имя открываемого файла
Процедура ОбработатьТекстовыйДокумент(ИмяФайла)

ТекстДок = Новый ТекстовыйДокумент;

Попытка
ТекстДок.Прочитать(ИмяФайла);
Исключение
Предупреждение("Файл не найден");
Возврат;
КонецПопытки;

// Дальнейшие действия надокументом...

КонецПроцедуры // ОбработатьТекстовыйДокумент

Для документа XML напишем:

// Выполняет действия над XML-документом
// Получает: ИмяФайла-Строка-Полное имя открываемого файла
Процедура ОбработатьXMLДокумент(ИмяФайла)

ЧтениеXML = Новый ЧтениеXML;

Попытка
ЧтениеXML.ОткрытьФайл(ИмяФайла);
Исключение
Предупреждение("Файл не найден");
Возврат;
КонецПопытки;

Пока ЧтениеXML.Прочитать() Цикл

// Обработка узла XML...

КонецЦикла;

КонецПроцедуры // ОбработатьXMLДокумент

Если-же мы открываем COM-соединение, например с MS Excel, то код может быть примерно таким:

// Открывает COM-соединение и выполняет над ним действия
// Получает: ИмяФайла-Строка-Полное имя файла запуска приложения
Процедура ПолучитьДанныеЧерезCOM(ИмяФайла)

Состояние("Попытка открытия файла...");
Попытка
Excel = Новый COMОбъект("Excel.Application");
WB = Excel.Workbooks.Open(ИмяФайла);
WS = WB.Worksheets(1); //указываем номер листа - 1
arr = WS.UsedRange.Value;
WB.Close(0);
Исключение

Предупреждение("Файл не найден");
Возврат;
КонецПопытки;

Состояние("Обработка данных...");

МассивКолонок = arr.Выгрузить();
ТаблицаСДанными = Новый ТаблицаЗначений;
ОписаниеТипов = Новый ОписаниеТипов("Строка, Число");
ТаблицаСДанными.Колонки.Добавить("Колонка0", ОписаниеТипов);

Для инд=0 По МассивКолонок[0].ВГраница() Цикл
НоваяСтрокаДанных = ТаблицаСДанными.Добавить();
НоваяСтрокаДанных.Колонка0 = МассивКолонок[0][инд];
КонецЦикла;

Для инд=1 По МассивКолонок.ВГраница() Цикл
НоваяКолонкаДанных = ТаблицаСДанными.Колонки.Добавить("Колонка"+Строка(инд), ОписаниеТипов);
ТаблицаСДанными.ЗагрузитьКолонку(МассивКолонок[инд], НоваяКолонкаДанных);
КонецЦикла;

// Обрабатываем полученную таблицу значений

КонецПроцедуры // ПолучитьДанныеЧерезCOM

2 comments:

roma86 said...

Приглашаю на нульцевый форум 1с.
http://irina1c.comze.com
Хотелось бы сделать его полезным.

Можно не только выкладывать проблемы, но и пообщаться,скажем с модератором. Это кстати молодая программистка Ирина.

pohom said...

ЧтениеХМл лучше всё-таки не использовать, так как у него только порядковое чтение. Лучше юзайте COMОбъект("Msxml2.DOMDocument.4.0")

 
Google+