Имя: Пароль:
1C
1С v8
Передать параметры из одной формы в другую
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) Спасибо огромное)
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший