Передача значения из модуля формы в модуль объекта
По теме из базы знаний
- Передача данных между формами 7.7
- Шаблон внешней печатной управляемой формы с возможностью передачи параметров из клиентской формы в стандартную общую форму печати документов
- О формах 1С замолвите слово... Необычное использование знакомого всем объекта
- Неочевидные нюансы записи управляемой формы
- Программный интерфейс для доработки форм
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(21) ong1990, да хоть что можно передать, разными способами, в разных ситуациях по разному.
Массив, знаете - это тоже такой параметр, не являющийся конечным значенем. Массив OLE объектов, тоже массив, только никуда вы его не передадите.
У вас вообще там непонятно о чем идет речь. Остается только догадываться.
Приложили бы выкладку кода, что открывается, как открывается, что передается. Тогда бы уже предметно подсказали.
Да и по вопросам видно, что вам бы элементарные курсы по программированию сначала просмотреть, чтобы понимали мат часть, хоть немного.
Массив, знаете - это тоже такой параметр, не являющийся конечным значенем. Массив OLE объектов, тоже массив, только никуда вы его не передадите.
У вас вообще там непонятно о чем идет речь. Остается только догадываться.
Приложили бы выкладку кода, что открывается, как открывается, что передается. Тогда бы уже предметно подсказали.
Да и по вопросам видно, что вам бы элементарные курсы по программированию сначала просмотреть, чтобы понимали мат часть, хоть немного.
(22) Boneman,
Во втором блоке как Вы видете я заполнил массив не найденными значениями.
и мне теперь необходимо по кнопке открыть вторую форму и чтобы она заполнилась данными из массива.
&НаКлиенте
Процедура ЗаполнитьТЧ(Команда)
Объект.Товары.Очистить();
Попытка
COMОбъект = Новый COMОбъект("Excel.Application");
Workbook = COMОбъект.Workbooks.Open(ИмяФайла);
ExcelЛист = COMОбъект.Sheets(1);
ActiveCell = COMОбъект.ActiveCell.SpecialCells(11);
RowCount = ActiveCell.Row;
ColumnCount = ActiveCell.Column;
Для Строка = 1 По RowCount Цикл
Для Колонка = 1 По ColumnCount Цикл
Значение = СокрЛП(ExcelЛист.Cells(Строка,2).Value);
Значение2 = СокрЛП(ExcelЛист.Cells(Строка,1).Value);
Значение3 = СокрЛП(ExcelЛист.Cells(Строка,3).Value);
КонецЦикла;
ДанныеНаСервере(Значение,Значение2,Значение3);
КонецЦикла;
WorkBook.Close();
Исключение
COMОбъект.Quit();
COMОбъект = 0;
СообщениеОбОшибке = НСтр("ru = 'Не удалось прочитать данные из файла. Подробности: '")
+ КраткоеПредставлениеОшибки(ИнформацияОбОшибке());
ВызватьИсключение СообщениеОбОшибке;
КонецПопытки;
КонецПроцедуры
Показать&НаСервере
Процедура ДанныеНаСервере(Значение,Значение2,Значение3)
НайденноеЗначение=Справочники.Номенклатура.НайтиПоНаименованию(Значение,Истина);
НоваяСтрока=Объект.Товары.Добавить();
НоваяСтрока.Номенклатура=НайденноеЗначение;
НоваяСтрока.Атрикул=Значение2;
НоваяСтрока.ЦенаИзПрайса=Значение3;
массив=Новый Массив;
Если НайденноеЗначение=Справочники.Номенклатура.ПустаяСсылка() Тогда
массив.Добавить(Значение);
КонецЕсли;
КонецПроцедуры
ПоказатьВо втором блоке как Вы видете я заполнил массив не найденными значениями.
и мне теперь необходимо по кнопке открыть вторую форму и чтобы она заполнилась данными из массива.
(24) ong1990, массив - у вас назад на клиента не возвращается.
Заполнить вы его заполнили, а где возврат ?
Вам нужно, сделать не процедуру а функцию,
заканчиваться она должна Возврат Массив;
На клиенте этот массив должен где то хранится,
для этого нужно либо объявить переменную в начале модуля формы,
либо завести реквизит такой.
Потом делаем кнопку, откурытия второй формы и в ее обработчике, передать этот массив в нее.
как это делается вам написали в (23)
Заполнить вы его заполнили, а где возврат ?
Вам нужно, сделать не процедуру а функцию,
заканчиваться она должна Возврат Массив;
На клиенте этот массив должен где то хранится,
для этого нужно либо объявить переменную в начале модуля формы,
либо завести реквизит такой.
Потом делаем кнопку, откурытия второй формы и в ее обработчике, передать этот массив в нее.
как это делается вам написали в (23)
(26) ong1990,
что непонятного,
вы передаете массив из первой формы во вторую в параметрах формы,
во второй форме, эти параметры нужно получить, и дальше уже делать то-что нужно.
Это можно сделать, в процедуре ПриСозданииНаСервере - примерно таким кодом.
Можно еще по другому, на вкладке параметр завести такой параметр, поставить галку "ключевой",
и тогда он будет там хранится и доступен на клиенте.
что непонятного,
вы передаете массив из первой формы во вторую в параметрах формы,
во второй форме, эти параметры нужно получить, и дальше уже делать то-что нужно.
Это можно сделать, в процедуре ПриСозданииНаСервере - примерно таким кодом.
Можно еще по другому, на вкладке параметр завести такой параметр, поставить галку "ключевой",
и тогда он будет там хранится и доступен на клиенте.
(27) Boneman
эта Часть правильная?
&НаКлиенте
Перем Масс;
&НаКлиенте
Процедура ЗаполнитьТЧ(Команда)
Объект.Товары.Очистить();
Попытка
COMОбъект = Новый COMОбъект("Excel.Application");
Workbook = COMОбъект.Workbooks.Open(ИмяФайла);
ExcelЛист = COMОбъект.Sheets(1);
ActiveCell = COMОбъект.ActiveCell.SpecialCells(11);
RowCount = ActiveCell.Row;
ColumnCount = ActiveCell.Column;
Для Строка = 1 По RowCount Цикл
Для Колонка = 1 По ColumnCount Цикл
Значение = СокрЛП(ExcelЛист.Cells(Строка,2).Value);
Значение2 = СокрЛП(ExcelЛист.Cells(Строка,1).Value);
Значение3 = СокрЛП(ExcelЛист.Cells(Строка,3).Value);
КонецЦикла;
ДанныеНаСервере(Значение,Значение2,Значение3);
КонецЦикла;
WorkBook.Close();
Исключение
COMОбъект.Quit();
COMОбъект = 0;
СообщениеОбОшибке = НСтр("ru = 'Не удалось прочитать данные из файла. Подробности: '")
+ КраткоеПредставлениеОшибки(ИнформацияОбОшибке());
ВызватьИсключение СообщениеОбОшибке;
КонецПопытки;
КонецПроцедуры
&НаСервере
Функция ДанныеНаСервере(Значение,Значение2,Значение3)
НайденноеЗначение=Справочники.Номенклатура.НайтиПоНаименованию(Значение,Истина);
НоваяСтрока=Объект.Товары.Добавить();
НоваяСтрока.Номенклатура=НайденноеЗначение;
НоваяСтрока.Атрикул=Значение2;
НоваяСтрока.ЦенаИзПрайса=Значение3;
масс=Новый Массив;
Если НайденноеЗначение=Справочники.Номенклатура.ПустаяСсылка() Тогда
масс.Добавить(Значение);
КонецЕсли;
Возврат масс;
КонецФункции
&НаКлиенте
Процедура ПроверитьТЧ(Команда)
ПараметрыНовойФормы = Новый Структура;
ПараметрыНовойФормы.Вставить("Масс", Масс);
ОткрытьФорму("ВнешняяОбработка.АнализПрайсаПоставщика.Форма.ФормаСравнения",ПараметрыНовойФормы);
КонецПроцедуры
Показатьэта Часть правильная?
(30) ong1990,
вот назвать тебе его надо по другому,
ты-же при открытии говоришь
Это значит, что в параметр с именем Масс - запишется значение.
А ты его обозвал "ПараметрыНовойФормы"
ну или можешь сделать
вот назвать тебе его надо по другому,
ты-же при открытии говоришь
ПараметрыНовойФормы.Вставить("Масс", Масс);
Это значит, что в параметр с именем Масс - запишется значение.
А ты его обозвал "ПараметрыНовойФормы"
ну или можешь сделать
ПараметрыНовойФормы.Вставить("ПараметрыНовойФормы", Масс);
(33) Boneman, сделал как Вы сказали. но ничего не происходит.
сделал так Сообщить(Масс.Количество()) оказалось 0... почему хз((((
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
СтандартнаяОбработка=Ложь;
Массив=ЭтаФорма.Параметры.ПараметрыНовойФормы;
Для Каждого Элемент из Массив Цикл
НоваяСтрока=Объект.НоменклатураСравнение.Добавить();
НоваяСтрока.Сравнение=Элемент;
КонецЦикла;
КонецПроцедуры
Показатьсделал так Сообщить(Масс.Количество()) оказалось 0... почему хз((((
(17) ong1990,
Во второй форме
ПараметрыНовойФормы = Новый Структура;
ПараметрыНовойФормы.Вставить("Массив", ТВойМассив);
ОткрытьФорму("Обработка.ТвояОбработка.Форма.ВтораяФорма", ПараметрыНовойФормы);
Во второй форме
Процедура ПриСозданииНаСервере()
ТвойМассивВоВторойФорма = Форма.Параметры.Массив;
КонецПроцедуры
Продолжение. С предыдущей(теперь уже) задачей с Вашей помощью справился. форма уже отрывается с заполненой ТЧ как полагается. вручную вношу в ней изменения и теперь необходимо по кнопке перезаполнить ТЧ первой формы данными из второй формы. Я так понимаю это должно работать по принципу обработки подборатоваров. но чет никак не пойму как первая форма должна получить данные.
(38) ong1990,
Первая форма
Вторая форма
Первая форма
Процедура ОповещениеоВыборе(Результат, Параметры) Экспорт
// в Результат получаешь ТЗ
КонецПроцедуры
Процедура ПолеВводаСогласовалНачалоВыбора(Элемент, СтандартнаяОбработка)
Оповещение = Новый ОписаниеОповещения("ОповещениеоВыборе", ЭтотОбъект);
ОткрытьФорму("----", ПараметрыВыбора, ЭтаФорма, УникальныйИдентификатор, , , Оповещение);
КонецПроцедуры
Вторая форма
Закрыть(ИзмененнаяТЗ)
(39) ditp,
Процедура ОповещениеоВыборе(Результат, Параметры) Экспорт
// в Результат получаешь ТЗ
КонецПроцедуры
Процедура ПолеВводаСогласовалНачалоВыбора(Элемент, СтандартнаяОбработка)
Оповещение = Новый ОписаниеОповещения("ОповещениеоВыборе", ЭтотОбъект);
ОткрытьФорму("----", ПараметрыВыбора, ЭтаФорма, УникальныйИдентификатор, , , Оповещение);
КонецПроцедуры
не совсем понятно что это?
// в Результат получаешь ТЗ
КонецПроцедуры
Процедура ПолеВводаСогласовалНачалоВыбора(Элемент, СтандартнаяОбработка)
Оповещение = Новый ОписаниеОповещения("ОповещениеоВыборе", ЭтотОбъект);
ОткрытьФорму("----", ПараметрыВыбора, ЭтаФорма, УникальныйИдентификатор, , , Оповещение);
КонецПроцедуры
(41) dj_serega, да я не об этом..
а это мне вообще нужно??
Процедура ОповещениеоВыборе(Результат, Параметры) Экспорт
// в Результат получаешь ТЗ
КонецПроцедуры
вот это что??
// в Результат получаешь ТЗ
КонецПроцедуры
а это мне вообще нужно??
Процедура ПолеВводаСогласовалНачалоВыбора(Элемент, СтандартнаяОбработка)
Оповещение = Новый ОписаниеОповещения("ОповещениеоВыборе", ЭтотОбъект);
ОткрытьФорму("----", ПараметрыВыбора, ЭтаФорма, УникальныйИдентификатор, , , Оповещение);
КонецПроцедуры
Оповещение = Новый ОписаниеОповещения("ОповещениеоВыборе", ЭтотОбъект);
ОткрытьФорму("----", ПараметрыВыбора, ЭтаФорма, УникальныйИдентификатор, , , Оповещение);
КонецПроцедуры
(44) ong1990, что непонятно то?
При открытии вторйо формы из первой передаешь в ОткрытьФорму параметр Оповещение, содержащий процедуру, которая будет вызвана при закрытии второй формы.
Во второй форме делаешь кнопку "ОК", по нажатию на которую обработчик вызывает метод Закрыть(ТвояТЗ), где ТвояТЗ - измененная во второй форме таблица.
После этого срабатывает описанная в Оповещении в первой форме процедура, где в параметр Результат получается твоя ТЗ. Делаешь с ней дальше что хочешь.
При открытии вторйо формы из первой передаешь в ОткрытьФорму параметр Оповещение, содержащий процедуру, которая будет вызвана при закрытии второй формы.
Во второй форме делаешь кнопку "ОК", по нажатию на которую обработчик вызывает метод Закрыть(ТвояТЗ), где ТвояТЗ - измененная во второй форме таблица.
После этого срабатывает описанная в Оповещении в первой форме процедура, где в параметр Результат получается твоя ТЗ. Делаешь с ней дальше что хочешь.
(44) ong1990, попробую объяснить "на пальцах".
Когда ты открываешь форму, ты задаешь оповещение. Это и есть та процедура, которая отработает после закрытия этой самой второй формы.
Вот в ней и отрабатываешь результат закрытия формы.
В параметре закрытия ЭтаФорма.Закрыть(результат) - это ты не просто закрываешь вторую форму, а закрываешь и возвращаешь результат, т.е. твои данные.
В первой форме, после этого, сработает оповещение, процедура "оповещение о выборе",
там и окажется этот результат, которым ты заполнишь, все что надо уже в первой форме.
Когда ты открываешь форму, ты задаешь оповещение. Это и есть та процедура, которая отработает после закрытия этой самой второй формы.
Вот в ней и отрабатываешь результат закрытия формы.
В параметре закрытия ЭтаФорма.Закрыть(результат) - это ты не просто закрываешь вторую форму, а закрываешь и возвращаешь результат, т.е. твои данные.
В первой форме, после этого, сработает оповещение, процедура "оповещение о выборе",
там и окажется этот результат, которым ты заполнишь, все что надо уже в первой форме.
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот