Для реализации пользовательского интерфейса работы с файлами в 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:
Приглашаю на нульцевый форум 1с.
http://irina1c.comze.com
Хотелось бы сделать его полезным.
Можно не только выкладывать проблемы, но и пообщаться,скажем с модератором. Это кстати молодая программистка Ирина.
ЧтениеХМл лучше всё-таки не использовать, так как у него только порядковое чтение. Лучше юзайте COMОбъект("Msxml2.DOMDocument.4.0")
Post a Comment