Имя: Пароль:
1C
1С v8
Управляемая форма запись данных из XLS (импорт)
0 immunel1978
 
23.04.12
14:30
Есть рабочий код по импорту данных в ТЧ документа (написан для внешней обработки). Подскажите как вставить хотя бы одну строку, чтобы в ТЧ управляемой формы попадали данные из импортированного файла XLS.

Процедура ЗагрузитьизXLS(Команда)
   // Вставить содержимое обработчика.
   
   Если ПустаяСтрока(ИмяФайла) Тогда
       Предупреждение("Для запуска обработки необходимо предварительно выбрать файл Microsoft Excel.");
       Возврат;
   КонецЕсли;
   
   Попытка
       // Загрузка Microsoft Excel
       Состояние("Загрузка Microsoft Excel...");
       ExcelПриложение = Новый COMОбъект("Excel.Application");
   Исключение
       Сообщить("Ошибка при загрузке Microsoft Excel." + Символы.ПС + ОписаниеОшибки(), СтатусСообщения.Внимание);
       Возврат;
   КонецПопытки;
   
   Попытка
       // Открытие файла Microsoft Excel
       Состояние("Открытие файла Microsoft Excel...");
       ExcelФайл = ExcelПриложение.WorkBooks.Open(ИмяФайла);
   Исключение
       Сообщить("Ошибка открытия файла Microsoft Excel." + ИмяФайла + Символы.ПС + ОписаниеОшибки(), СтатусСообщения.Внимание);
   КонецПопытки;
   
   Попытка
       // Обработка файла Microsoft Excel
       Состояние("Обработка файла Microsoft Excel...");
       // Читаем данные первого листа книги
       ExcelЛист = ExcelФайл.Sheets(1);
       
       // Определить количество строк и колонок выбранного листа книги Excel
       xlCellTypeLastCell = 11;
       ExcelПоследняяСтрока = ExcelЛист.Cells.SpecialCells(xlCellTypeLastCell).Row;
       ExcelПоследняяКолонка = ExcelЛист.Cells.SpecialCells(xlCellTypeLastCell).Column;
   Исключение
       Сообщить("Ошибка открытия листа №1 Microsoft Excel." + Символы.ПС + ОписаниеОшибки(), СтатусСообщения.Внимание);
       // Закрыть COM соединение для экономии памяти
       ExcelПриложение.Quit();
   КонецПопытки;
   
   // Создание описателя типов для таблицы значений
   КЧ = Новый КвалификаторыЧисла(15,2);
   КЧ2 = Новый КвалификаторыЧисла(15,4);
   КС = Новый КвалификаторыСтроки(50);
   Массив = Новый Массив;
   Массив.Добавить(Тип("Строка"));
   ОписаниеТиповС = Новый ОписаниеТипов(Массив, , КС);
   Массив.Очистить();
   Массив.Добавить(Тип("Число"));
   ОписаниеТиповЧ = Новый ОписаниеТипов(Массив, , ,КЧ);
   ОписаниеТиповЧ2 = Новый ОписаниеТипов(Массив, , ,КЧ2);

   // Очистить предыдущие значения
   // СтрокаТабличнойЧасти=Элементы.Энергоносители2012.ТекущиеДанные;
   ТаблицаДокумента.Очистить();
   ТаблицаДокумента.Колонки.Очистить();
1 ProProg
 
23.04.12
14:31
Могу продать готовое чтобы ты не мучался. а сразу научился всему по работе с УФ и загрузкой из экселя
2 ProProg
 
23.04.12
14:31
а то с такими темпами ты её еще полгода будешь писать и вылизывать
3 immunel1978
 
23.04.12
14:37
// Создать колонки табличного документа
   ТаблицаДокумента.Колонки.Добавить("Номер",ОписаниеТиповС,"Номер",3); //эту строку писал когда экспорт во внешней обработке
// СтрокаТабличнойЧасти=Элементы.Энергоносители2012.ТекущиеДанные;
СтрокаТабличнойЧасти.СуточнаяВыработкаЭлектроэнергии=СтрокаТабличнойЧасти.РасчетнаяСуточнаяПотребностьГаза-СтрокаТабличнойЧасти.ОбщееПоЗаводуВыработкаГаза;    // вот эту строку надо переделать
// ТаблицаДокумента.Колонки.Добавить("СуточнаяВыработкаЭлектроэнергии",ОписаниеТиповЧ,"СуточнаяВыработкаЭлектроэнергии",6);
4 immunel1978
 
23.04.12
14:38
полгода врятли - верхний код переделывал с нуля за день
5 immunel1978
 
23.04.12
14:39
могу купить конечно, но сколько стоит и мне тогда если так быстро - то в теч. дня.
6 sapphire
 
23.04.12
14:40
(0) Наверное, стоит посмотреть РеквизитФормыВЗначение & ЗначениеВРеквизитФормы :)
7 ProProg
 
23.04.12
14:40
8 sapphire
 
23.04.12
14:42
(7) И? Проще "ЗагрузкаДанныхИзТабличногоДокумента.epf" на УФ переписать.
9 immunel1978
 
23.04.12
14:52
ну да, вот и переписываю - у меня проблема - только как Одну строчку переделать

СтрокаТабличнойЧасти=Элементы.Энергоносители2012.ТекущиеДанные; // Захватываем ТЧ документа УФ

СтрокаТабличнойЧасти.СуточнаяВыработкаЭлектроэнергии=СтрокаТабличнойЧасти.РасчетнаяСуточнаяПотребностьГаза-СтрокаТабличнойЧасти.ОбщееПоЗаводуВыработкаГаза;    // вот эту строку надо переделать - где сопоставить с
// ТаблицаДокумента.Колонки.Добавить("СуточнаяВыработкаЭлектроэнергии",ОписаниеТиповЧ,"СуточнаяВыработкаЭлектроэнергии",6); -
10 immunel1978
 
23.04.12
14:52
хотя по моему понял - это в цикле нужно делать


       Стр.Номер                = Строка-6;
       Попытка
           Стр.СуточнаяВыработкаэлектроэнергии    = ExcelЛист.Cells(Строка, 3).Value;               // считываем со строки 3 и 7-го столбца
11 immunel1978
 
23.04.12
14:54
(7) функционал слишком навороченный и его опять прийдется переделывать под мое ТЗ. может быть и научился, но цена.......... проще литературу и память докупить. Спс за предложение
12 sapphire
 
23.04.12
15:03
(0)>> Подскажите как вставить хотя бы одну строку, чтобы в ТЧ управляемой формы попадали данные из импортированного файла XLS
Предполагается, что "ТЧ управляемой формы" = {ТабличнаяЧасть},
тогда
&НаСервере
Процедура ЗагрузитьТЧ(ИмяТабличнойЧасти,ТаблицаЗначений)
 ЭтотОбъект = РеквизитФормыВЗначение("Объект");
 ЭтаТабличнаяЧасть=ЭтотОбъект[ИмяТабличнойЧасти];
 ЭтаТабличнаяЧасть.Загрузить(ТаблицаЗначений);
 ЗначениеВРеквизитФормы(ЭтотОбъект,"Объект");
КонецПроцедуры

//Останется только прочитать данные из XLS и положить в таблицу значений
13 immunel1978
 
26.04.12
10:58
Синтаксис:

ДанныеФормыВЗначение(<Объект>, <Тип>)
Параметры:

<Объект> (обязательный)

Тип: ДанныеФормыСтруктураСКоллекцией; ДанныеФормыКоллекция; ДанныеФормыСтруктура; ДанныеФормыДерево.
Данные формы.
<Тип> (обязательный)

Тип: Тип.
Тип значения, получаемого из данных формы.
Возвращаемое значение:

Тип: Произвольный.

Описание:

Преобразует данные формы в объект прикладного типа.

Доступность:

Сервер, толстый клиент.
Примечание:

Нельзя преобразовать в объект типа Табличная часть.
14 immunel1978
 
26.04.12
11:02
то есть код надо еще переделать.... не знаю только как.  
// Отобразить результаты загрузки в форме элемента
    ЭлементыФормы.ТаблицаДокумента.Значение = ТаблицаДокумента;
    ЭлементыФормы.ТаблицаДокумента.СоздатьКолонки();
   
КонецПроцедуры // ЧтениеXLSФайла(Элемент)
А мне как раз нужно после чтения файла ЗАГРУЗИТЬ Процедура ЗагрузитьТЧ(ИмяТабличнойЧасти,ТаблицаЗначений)
15 immunel1978
 
26.04.12
11:02
// Отобразить результаты загрузки в форме элемента

    ЭлементыФормы.ТаблицаДокумента.Значение = ТаблицаДокумента;
    ЭлементыФормы.ТаблицаДокумента.СоздатьКолонки();
   
КонецПроцедуры // ЧтениеXLSФайла(Элемент)
---- Это конец рабочей процедуры чтения файла