Консультация № 43593
19.05.2006, 16:35
0.00 руб.
0 2 2
Ребята.

Напишите пожалуйста !подробно! как сделать такую простую вещь как
обработка (форма) ,которая показывает на экран т.е. выгружает
файл с диска (диск С:/ например)в формате желательно xls, но можно и dbf и txt.

Мне важен код и форма( выбор файла и т.п. чтоб в ней имя файла было видно.)

Спасибо.

Обсуждение

Неизвестный
19.05.2006, 21:16
общий
это ответ
Здравствуйте, Baim!

Немного неопределенно задан вопрос, трансформирую его к следующему:
"Нужно написать внешнюю обработку, которая будет на экране отображать в виде таблицы содержимое внешнего файла в формате Excel или dbf (с фиксированной структурой таблицы)."
Про текстовый файл это слишком расплывчато (любой файл можно открыть/запустить командой ЗапуститьПриложение(<?>), но не думаю что нужно именно это), поэтому эту часть вопроса не рассматриваю.

Итак, чтобы создать внешний отчет/обработку нужно зайти в Конфигуратор (разумеется) и выбрать меню "Файл / Новый", затем пункт "Внешний отчет (обработка)". Чтобы сохранить его на диск -- меню "Файл / Сохранить", не забывайте сохранять по мере изменения обработки. Далее выбираете меню "Вставить / Таблица значений", курсором указываете размеры этой таблицы (потом можно будет изменить). Одновременно открывается окно свойств таблицы значений, в нем в графе "Идентификатор" укажите "ТЗ" (без кавычек). Внизу формы обработки есть закладки, выбираете закладку "Модуль". Видите там единственную процедуру Сформировать(). В теле этой процедуры собственно и будем записывать все дальнейшие команды. В итоге модуль обработки должен выглядеть так как в Приложении.
Программа расчитана на открытие файла "C:\export.dbf" с колонками field1, field2, field3, которые имеют тип соответственно "строка длиной 20", "число диной 14 с двумя знаками после запятой (т.е. 11 знаков в целой части, один знак на точку и 2 знака после запятой, аналог dbf -- float)" и "дата". При желании можно добавить диалог выбра файла либо поиск файла по маске, автоматическое определение количества, типов колонок и их идентификаторы и много чего еще из сервиса, но это уже выходит за рамки данного конкретного вопроса 8)

Приложение:
//*******************************************Процедура Сформировать() // Определение колонок таблицы значений на форме обработки ТЗ.НоваяКолонка("Поле1","Строка",20); ТЗ.НоваяКолонка("Поле2","Число",14,2); ТЗ.НоваяКолонка("Поле3","Дата"); // Открытие dbf-файла Файл="C:\export.dbf"; ДБФ=СоздатьОбъект("XBase"); ДБФ.ПоказыватьУдаленные(0); ДБФ.ОткрытьФайл(Файл,,1); Для Ном=1 По ДБФ.КоличествоЗаписей() Цикл ДБФ.Перейти(Ном); ТЗ.НоваяСтрока(); // Считываем поля записи под номером Ном ТЗ.Поле1=ДБФ.Field1; ТЗ.Поле2=ДБФ.Field2; ТЗ.Поле3=ДБФ.Field3; КонецЦикла; ДБФ.ЗакрытьФайл();КонецПроцедуры
Неизвестный
23.05.2006, 12:45
общий
это ответ
Здравствуйте, Baim!
Это выбор файла Microsoft Access .mdb
ФС.ВыбратьФайл(0,НазваФайлу,НазваКаталогу,"Виберiть файл","Файли баз даних (*.mdb)|*.mdb");
СтрФайл=НазваКаталогу+НазваФайлу;
Если ФС.СуществуетФайл(СтрФайл)=0 Тогда
Предупреждение("Не знайдено файлу iмпорту");
Возврат;
КонецЕсли;
А вот вывод на экран
Попытка
Connection=CreateObject("ADODB.Connection");
ConnectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+СокрЛП(СтрФайл);
Connection.Open(ConnectionString);
Cmd=CreateObject("ADODB.Command");
Cmd.ActiveConnection=Connection;
Исключение
Предупреждение("Не удалось установить соединение с БД");
Возврат;
КонецПопытки;

Cmd.CommandText="SELECT b.id_azs, b.n_report, b.id_tovar, b.Volume, Format(b.VolumeStart,‘#.###‘) as VS, Format(b.VolumeEnd,‘#.###‘) as VE, Format(b.prihod_smena,‘#.###‘) as prihod_s, Format(b.spisano,‘#.###‘) as spis
|FROM smena b";
Rs=CreateObject("ADODB.RecordSet");
Rs=Cmd.Execute;
Попытка
Rs.MoveFirst();
Пока Rs.EOF() = 0 do
Если (Rs.Fields("id_azs").Value=idAZS)И(Rs.Fields("n_report").Value=НомерОтчета)И(Сп.Принадлежит(Rs.Fields("id_tovar").Value)=0) Тогда
ТЗ.НоваяСтрока();
ТЗ.КолвоЭККАНачало=Окр(Число(СтрЗаменить(Rs.Fields("VS").Value,",",".")),3);
ТЗ.КолвоЭККАКонец=Окр(Число(СтрЗаменить(Rs.Fields("VE").Value,",",".")),3);
ТЗ.Продажа=Rs.Fields("Volume").Value;
ТЗ.Списание=Окр(Число(СтрЗаменить(Rs.Fields("spis").Value,",",".")),3);
ТЗ.Приход=Окр(Число(СтрЗаменить(Rs.Fields("prihod_s").Value,",",".")),3);
ТЗ.Артикул=Прав("00000"+СокрЛП(Rs.Fields("id_tovar").Value),5);
Спр.ВыбратьЭлементыПоРеквизиту("Артикул",Rs.Fields("id_tovar").Value,0,0);
Если Спр.ПолучитьЭлемент()=1 Тогда
ТЗ.ТМЦ=Спр.ТекущийЭлемент();
Если БИ.ПолучитьСубконто(1,,ТЗ.ТМЦ)=1 Тогда
ТЗ.Колво1СНачало=БИ.СНД(3);
ТЗ.Колво1СКонец=БИ.СКД(3);
КонецЕсли;
Иначе
ТЗ.ТМЦ=ПолучитьПустоеЗначение("Справочник.Номенклатура");
КонецЕсли;
КонецЕсли;
Rs.MoveNext();
КонецЦикла;
Исключение
Предупреждение("Ошибка чтения данных. Вероятно, данный отчет совсем пустой");
Возврат;
КонецПопытки;
ТЗ.Сортировать("Артикул");
КолвоОшибок=0;
ТЗ.ВыбратьСтроки();
Пока ТЗ.ПолучитьСтроку()=1 Цикл
Если (СписокКодовКарточек.Принадлежит(Число(ТЗ.Артикул))=1)ИЛИ(СписокКодовПылесоса.Принадлежит(Число(ТЗ.Артикул))=1) Тогда
Продолжить;
КонецЕсли;
Если (ТЗ.КолвоЭККАНачало=ТЗ.Колво1СНачало)И(ТЗ.КолвоЭККАКонец=ТЗ.Колво1СКонец)И(ТЗ.КолвоЭККАНачало+ТЗ.Приход-ТЗ.Продажа-ТЗ.Списание=ТЗ.КолвоЭККАКонец) Тогда
Таб.ВывестиСекцию("Строка");
Иначе
Таб.ВывестиСекцию("СтрокаКр");
КолвоОшибок=КолвоОшибок+1;
КонецЕсли;
КонецЦикла;

А вот файл .mxl
Таб=СоздатьОбъект("Таблица");
Таб.Открыть("\\Natali\export\ТалоныАЗСПарт.mxl");
КолвоСтрок=Таб.ВысотаТаблицы();
Сообщить("Получаем данные...");
Для Сч=2 По КолвоСтрок Цикл
ТЗ.НоваяСтрока();
ВыбОбласть=Таб.Область(Сч,1);
Дата1=Дата(ВыбОбласть.Текст);
Если (Дата1<НачДата)ИЛИ(Дата1>КонДата) Тогда
Сообщить("В импорте найдена неправильная дата "+Дата1+" строка "+Сч);
Возврат;
КонецЕсли;
ТЗ.Дата=Дата1;

А вот .xls
Excel = СоздатьОбъект("Excel.Application");
Excel.Workbooks.Open(Сокрлп(НазваниеФайла));
ЧислоСтрок = Excel.Cells.CurrentRegion.Rows.Count;
ЧислоКолонок = Excel.Cells.CurrentRegion.Columns.Count;
ЗначениеЯчейки=СокрЛП(Строка(Excel.Cells(1,ТекКолонка).Value));

А вот .dbf
База=СоздатьОбъект("XBase");
База.КодоваяСтраница(0);
База.ОткрытьФайл(СтрФайл,);
Если База.Открыта()=0 Тогда
Сообщить("Файл не вiдкрито!");
СтатусВозврата(0);
Возврат;
КонецЕсли;
База.Первая();
ТЗ.УдалитьСтроки();
Пока База.ВКонце()<>1 Цикл
ТЗ.НоваяСтрока();
ТЗ.Операция = База.oper_id;
А вот .txt
СтрФайл="\\asgat\export\1.txt";
Пока ФС.СуществуетФайл(СтрФайл)=0 Цикл
НазваКаталогу="\\asgat\export";
НазваФайлу="1.txt";
Если ФС.ВыбратьФайл(0,НазваФайлу,НазваКаталогу,"Виберiть файл",‘Файли експорту Надра|*.*‘)=0 Тогда
Возврат;
КонецЕсли;
СтрФайл = НазваКаталогу+НазваФайлу;
КонецЦикла;
Баз=СоздатьОбъект("Текст");
Баз.КодоваяСтраница(1);
Баз.Открыть(СтрФайл);
Если Баз.КоличествоСтрок()=0 Тогда
Предупреждение("Файл не вiдкрито!");
Возврат;
КонецЕсли;
Для Инд=2 По Баз.КоличествоСтрок()-1 Цикл
КолвоЗаписей=КолвоЗаписей+1;
НоваяСтрока();
Стр=Баз.ПолучитьСтроку(Инд);

Я Вам набросал куски вполне рабочих отчетов. Других форматов не знаю.
Форма ответа