Версия для печати темы (https://pro1c.org.ua/index.php?s=713702077b31c6951c8f9120c28ec0e6&showtopic=38301)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование обычных форм 1С 8.2 и не интерфейсной логики _ Создать общую процедуру из процедуры на форме

Автор: Constantus 03.07.17, 10:43

Приветствую, форумчане!
"Управление торговлей 10.3", (Моби-С 5.5). "ABBYY Ukraine", 2003-2014 (2.3.20.1)

Имеется часть кода в форме приОткрытии:

    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |    ПользователиСклады.Склады,
    |    ПользователиСклады.Склады.Ссылка Как сСклад
    |ИЗ
    |    Справочник.Пользователи.Склады КАК ПользователиСклады
    |ГДЕ
    |    ПользователиСклады.Ссылка = &сПользователь";
    
    Запрос.УстановитьПараметр("сПользователь", ПараметрыСеанса.ТекущийПользователь);
    Результат = Запрос.Выполнить().Выгрузить();
    МассивДокументов = Результат.ВыгрузитьКолонку("сСклад");
    СписокДокументов= Новый СписокЗначений;
        сп = Новый СписокЗначений();
        сп.Добавить("Все доступные...");
        
    Для Каждого Стр из МассивДокументов Цикл
        СписокДокументов.Добавить(Стр);
        сп.Добавить(Стр);
    КонецЦикла;    
    
    ЭтаФорма.Отбор.Склад.Использование=Истина;
    ЭлементыФормы.Список.Значение.Отбор.Склад.ВидСравнения = ВидСравнения.ВСписке;
    ЭлементыФормы.Список.НастройкаОтбора.Склад.Доступность = Ложь;
    ЭтаФорма.Отбор.Склад.Значение = СписокДокументов;

    ЭлементыФормы.ПолеВыбора1.СписокВыбора = сп;
    ЭлементыФормы.ПолеВыбора1.Значение = сп.Получить(0).Значение;


Т.е. этот код используется на многих формах, то решил перенести этот кусок кода как процедуру в Общие Модули.
Никак не могу сообразить как трансформировать этот код в процедуре в Общем модуле, чтобы компактно к ней обращаться из модуля формы?
Направьте мысль...

Автор: Flexy 03.07.17, 10:49

Процедура УстановитьДоступностьСкладов(Форма, ИмяСпискаФормы, ПолеВыбораФормы, Пользователь) Экспорт
Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |    ПользователиСклады.Склады,
    |    ПользователиСклады.Склады.Ссылка Как сСклад
    |ИЗ
    |    Справочник.Пользователи.Склады КАК ПользователиСклады
    |ГДЕ
    |    ПользователиСклады.Ссылка = &сПользователь";
    
    Запрос.УстановитьПараметр("сПользователь", Пользователь);
    Результат = Запрос.Выполнить().Выгрузить();
    МассивДокументов = Результат.ВыгрузитьКолонку("сСклад");
    СписокДокументов= Новый СписокЗначений;
        сп = Новый СписокЗначений();
        сп.Добавить("Все доступные...");
        
    Для Каждого Стр из МассивДокументов Цикл
        СписокДокументов.Добавить(Стр);
        сп.Добавить(Стр);
    КонецЦикла;    
    
    Форма.Отбор.Склад.Использование=Истина;
    Форма.ЭлементыФормы[ИмяСпискаФормы].Значение.Отбор.Склад.ВидСравнения = ВидСравнения.ВСписке;
    Форма.ЭлементыФормы[ИмяСпискаФормы].НастройкаОтбора.Склад.Доступность = Ложь;
    Форма.Отбор.Склад.Значение = СписокДокументов;

    Форма.ЭлементыФормы[ПолеВыбораФормы].СписокВыбора = сп;
    Форма.ЭлементыФормы[ПолеВыбораФормы].Значение = сп.Получить(0).Значение;
КонецПроцедуры

Автор: Constantus 03.07.17, 11:56

Flexy @ Сегодня, 13:49 * ,


Мой.УстановитьДоступностьСкладов(ЭтаФорма,ЭлементыФормы.Список,ЭлементыФормы.ПолеВыбора1,ПараметрыСеанса.ТекущийПользователь);


Ругается на ЭлементыФормы.Список и ,ЭлементыФормы.ПолеВыбора1

{ОбщийМодуль.Мой.Модуль(338)}: Получение элемента по индексу для значения не определено
    Форма.ЭлементыФормы[ИмяСпискаФормы].Значение.Отбор.Склад.ВидСравнения = ВидСравнения.ВСписке;


Как правильно передать значения?

Автор: Flexy 03.07.17, 11:59

Цитата(Constantus @ 03.07.17, 11:56) *
Как правильно передать значения?

Передавайте туда имена элементов формы строкой.
Мой.УстановитьДоступностьСкладов(ЭтаФорма,"ДокументСписок", "ПолеВыбора1", ПараметрыСеанса.ТекущийПользователь);

Автор: Constantus 03.07.17, 12:09

Flexy @ Сегодня, 14:59 * ,


Как сказать "Спасибо" дважды? :-)

Автор: cos12 03.07.17, 20:04

Цитата(Constantus @ 03.07.17, 13:09) *
Как сказать "Спасибо" дважды? :-)

под каждым сообщением)

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua