|
Передать параметры из одной формы в другую | ☑ | ||
---|---|---|---|---|
0
Alex70
02.08.18
✎
08:04
|
Всем привет! Есть две формы, главная и форма выбора файла, на первой есть кнопка загрузить, по ней открывается форма выбора файла, в ней указывается имя файла, номер строки, и номер столбца. Вопрос в том как передать параметры ИЗ формы ВЫБОРА ФАЙЛА в ГЛАВНУЮ форму?
________________________________________ Главная форма Процедура ЗагрузкаНоменклатурыНажатие(Элемент) // Очищаем ТЧ СписокНоменклатуры.Очистить(); ДругаяФорма = ЭтотОбъект.ПолучитьФорму("ФормаЗагрузкиНоменклатурыИзЭксель"); Результат = ДругаяФорма.ОткрытьМодально(); НомерЛиста = 1; Если ПустаяСтрока(ИмяФайла) Тогда Предупреждение("Выберите файл Excel!",, "Внимание!"); Возврат; КонецЕсли; Если НЕ ЗначениеЗаполнено(НомерСтроки) ИЛИ НомерСтроки = 0 Тогда Предупреждение("Заполните значение: Номер строки!",, "Внимание!"); Возврат; КонецЕсли; Если НЕ ЗначениеЗаполнено(НомерСтолбца ИЛИ НомерСтолбца = 0) Тогда Предупреждение("Заполните значение: Номер столбца!",, "Внимание!"); Возврат; КонецЕсли; //подключаемся к эксель Книга = Неопределено; Попытка Книга = ПолучитьCOMОбъект(ИмяФайла); Книга.Application.DisplayAlerts = False; Исключение Сообщить("Ошибка при открытии файла с помощью Excel! Загрузка не будет произведена!"); Сообщить(ОписаниеОшибки()); Возврат; КонецПопытки; Лист = Неопределено; Попытка Лист = Книга.WorkSheets(НомерЛиста); Исключение Предупреждение(ОписаниеОшибки(),, "Внимание !"); Книга.Application.Quit(); Возврат; КонецПопытки; ОбластьПоиска = Лист.Cells; НачалоЛиста = Лист.Cells(1, 1); КоличествоСтрок = Лист.Cells(1,1).SpecialCells(11).Row; КоличествоКолонок = Лист.Cells(1,1).SpecialCells(11).Column; ОбластьНоменклатура = ОбластьПоиска.Find("Номенклатура", НачалоЛиста); НомерКолонкиНоменклатура = 0; Если ОбластьНоменклатура <> Неопределено Тогда НомерКолонкиНоменклатура = ОбластьНоменклатура.Column; Иначе Сообщить("Не найдена колонка ""Номенклатура""", СтатусСообщения.Важное); Книга.Application.Quit(); Возврат; КонецЕсли; // считываем по строчно тело файла Для НС = НомерСтроки по КоличествоСтрок Цикл ОбработкаПрерыванияПользователя(); //указав данный оператор, цикл можно прервать в любой момент нажатие ctrl+break НоваяСтрока = СписокНоменклатуры.Добавить(); ТекущееЗначение = Лист.Cells(НС, НомерСтолбца).Text; НоваяСтрока.Номенклатура = ТекущееЗначение; КонецЦикла; Книга.Application.Quit(); КонецПроцедуры ________________________________________ Форма ВЫБОРА ФАЙЛА Процедура ПолеВводаИмяФайлаНачалоВыбора(Элемент, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; ДиалогВыбораФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие); ДиалогВыбораФайла.Фильтр = "СписокНоменклатур|*.xls;*.xlsx"; ДиалогВыбораФайла.Заголовок = "Выберите файл"; ДиалогВыбораФайла.ПредварительныйПросмотр = Ложь; ДиалогВыбораФайла.ИндексФильтра = 0; Если НЕ ДиалогВыбораФайла.Выбрать() Тогда Возврат; КонецЕсли; ИмяФайла = ДиалогВыбораФайла.ПолноеИмяФайла; КонецПроцедуры Процедура ЗагрузитьИзФайлаНажатие(Элемент) //// Очищаем ТЧ //СписокНоменклатуры1.Очистить(); // //НомерЛиста = 1; // //Если ПустаяСтрока(ИмяФайла) Тогда // Предупреждение("Выберите файл Excel!",, "Внимание!"); // Возврат; //КонецЕсли; // //Если НЕ ЗначениеЗаполнено(НомерСтроки) ИЛИ НомерСтроки = 0 Тогда // Предупреждение("Заполните значение: Номер строки!",, "Внимание!"); // Возврат; //КонецЕсли; // //Если НЕ ЗначениеЗаполнено(НомерСтолбца ИЛИ НомерСтолбца = 0) Тогда // Предупреждение("Заполните значение: Номер столбца!",, "Внимание!"); // Возврат; //КонецЕсли; // ////////////////////////////////////////////////////////////////////// ////подключаемся к эксель //Книга = Неопределено; //Попытка // Книга = ПолучитьCOMОбъект(ИмяФайла); // Книга.Application.DisplayAlerts = False; //Исключение // Сообщить("Ошибка при открытии файла с помощью Excel! Загрузка не будет произведена!"); // Сообщить(ОписаниеОшибки()); // Возврат; //КонецПопытки; // //Лист = Неопределено; //Попытка // Лист = Книга.WorkSheets(НомерЛиста); //Исключение // Предупреждение(ОписаниеОшибки(),, "Внимание !"); // Книга.Application.Quit(); // Возврат; //КонецПопытки; //// //подключаемся к эксель ////Попытка ////Excel = Новый COMОбъект("Excel.Application"); ////Excel.WorkBooks.Open(ИмяФайла); ////Состояние("Обработка файла Microsoft Excel..."); ////Исключение ////Сообщить("Ошибка при открытии файла с помощью Excel! Загрузка не будет произведена!"); ////Сообщить(ОписаниеОшибки()); ////Возврат; ////КонецПопытки; ////Попытка //////Открываем необходимый лист ////Книга.Sheets(1).Select(); // лист 1, по умолчанию ////Исключение //////Закрываем Excel ////Книга.ActiveWorkbook.Close(); ////Excel = 0; ////Сообщить("Файл "+Строка(ИмяФайла)+" не соответствует необходимому формату! Первый лист не найден!"); ////ОтменитьТранзакцию(); ////Возврат; ////КонецПопытки; ////Получим количество строк и колонок. ////В разных версиях Excel получаются по-разному, поэтому сначала определим версию Excel // //ОбластьПоиска = Лист.Cells; //НачалоЛиста = Лист.Cells(1, 1); //КоличествоСтрок = Лист.Cells(1,1).SpecialCells(11).Row; //КоличествоКолонок = Лист.Cells(1,1).SpecialCells(11).Column; //ОбластьНоменклатура = ОбластьПоиска.Find("Номенклатура", НачалоЛиста); //НомерКолонкиНоменклатура = 0; //Если ОбластьНоменклатура <> Неопределено Тогда // НомерКолонкиНоменклатура = ОбластьНоменклатура.Column; //Иначе // Сообщить("Не найдена колонка ""Номенклатура""", СтатусСообщения.Важное); // Книга.Application.Quit(); // Возврат; //КонецЕсли; // //// считываем по строчно тело файла //Для НС = НомерСтроки по КоличествоСтрок Цикл // НС указываем с какой строки начинать обработку ////Состояние("Файл "+Строка(ИмяФайла)+": Обрабатывается первый лист "+Строка(Формат(?(КоличествоСтрок = 0,0,((100*НС)/КоличествоСтрок)),"ЧЦ=3; ЧДЦ=0"))+" %"); //ОбработкаПрерыванияПользователя(); //указав данный оператор, цикл можно прервать в любой момент нажатие ctrl+break //НоваяСтрока = СписокНоменклатуры1.Добавить(); // //Для НомерКолонкиНоменклатура = НомерСтолбца по СписокНоменклатуры1.Колонки.Количество() Цикл // ////заполняем строку значениями // ТекущееЗначение = Лист.Cells(НС, НомерСтолбца).Text; // // ИмяКолонки = СписокНоменклатуры1.Колонки[НомерКолонкиНоменклатура-1].Имя; // НоваяСтрока.Номенклатура = ТекущееЗначение; // //КонецЦикла; //КонецЦикла; // //Книга.Application.Quit(); // ////ОбластьПоиска = Лист.Cells; ////НачалоЛиста = Лист.Cells(1, 1); ////КоличествоСтрок = Лист.Cells(1,1).SpecialCells(11).Row; ////КоличествоКолонок = Лист.Cells(1,1).SpecialCells(11).Column; //// ////ОбластьНоменклатура = ОбластьПоиска.Find("Номенклатура", НачалоЛиста); ////НомерКолонкиНоменклатура = 0; ////Если ОбластьНоменклатура <> Неопределено Тогда //// НомерКолонкиНоменклатура = ОбластьНоменклатура.Column; ////Иначе //// Сообщить("Не найдена колонка ""Номенклатура""", СтатусСообщения.Важное); //// Книга.Application.Quit(); //// Возврат; ////КонецЕсли; КонецПроцедуры Процедура ВыполнитьНажатие(Элемент) СтруктураЗначений = Новый Структура; СтруктураЗначений.Вставить("ИмяФайла", ИмяФайла); СтруктураЗначений.Вставить("НомерСтроки", НомерСтроки); СтруктураЗначений.Вставить("НомерСтолбца", НомерСтолбца); ЭтаФорма.Закрыть(СтруктураЗначений); КонецПроцедуры |
|||
1
Alex70
02.08.18
✎
08:06
|
Ругается что в ГЛАВНОЙ ФОРМЕ не определена переменная ИмяФайла, НомерСтроки, НомерКолонки
|
|||
2
Остап Сулейманович
02.08.18
✎
08:08
|
(1) Ты же возвращаешь структуру. Какая переменная?
Вместо Если ПустаяСтрока(ИмяФайла) Тогда пиши Если ПустаяСтрока(Результат.ИмяФайла) Тогда и так дальше. |
|||
3
Alex70
02.08.18
✎
08:13
|
(2) Спасибо огромное)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |