1. 1C / Говнокод #14108

    −168

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    Процедура ПараметрНачалоВыбора(Элемент, СтандартнаяОбработка)
    	
    	СтандартнаяОбработка=Ложь;
    	ПараметрВладелец=Справочники.ПараметрыНоменклатуры.ПустаяСсылка();
    	ТипМетаданных = Метаданные.НайтиПоТипу(ТипЗнч(Элемент.Значение));
    	
    	ОткрываемаяФорма  = ПолучитьФорму(ТипМетаданных.ПолноеИмя()+".ФормаВыбора");
    	
    	Отборы = Новый Структура("ТипПараметра,Подчинен",ВидНоменклатуры[Элемент.Имя],ПараметрВладелец);
    	Для Каждого ЭлементСтруктуры из Отборы Цикл
    		ЭлементОтбора = ОткрываемаяФорма.Отбор.Найти(ЭлементСтруктуры.Ключ);
    		Если Не ЭлементОтбора = Неопределено  Тогда
    			ЭлементОтбора.Установить(ЭлементСтруктуры.Значение);
    		КонецЕсли;	
    	КонецЦикла;	
    	ОткрываемаяФорма.НачальноеЗначениеВыбора = Элемент.Значение;
    	ОткрываемаяФорма.ОткрытьМодально(); 	
    	ЭтотОбъект[Элемент.Имя] = ОткрываемаяФорма.ТекущийЭлемент.ТекущаяСтрока;
    	ПараметрПриИзменении(Элемент);
    	
    КонецПроцедуры

    Процедура НачалоВыбора в конфе одного из клиентов. Что-то смущает, но не могу понять что.

    Запостил: rull9ss, 19 Ноября 2013

    Комментарии (8) RSS

    • может то, что это можно сделать без единой строчки кода? :)
      Ответить
      • Но тут отбор идёт по пустому владельцу:
        "ПараметрВладелец=Справочники.ПараметрыН оменклатуры.ПустаяСсылка();"

        И кругом ещё работа с метаданными идёт, очевидно, кто-то хотел сделать, что-то мегауниверсальное
        Ответить
        • отбор по пустому владельцу (Подчинен) можно задать параметрами выбора, "ТипПараметра" через связи параметров выбора. На мой взгляд, тут просто желание сделать кодом то, что можно сделать визуально за пару кликов (возможно из-за незнания). Либо же это действительно остатки какой-то универсальной процедуры, которая ранее помимо установки отборов в форме выбора делала более хитрые вещи.
          Ответить
        • а, это же обычные формы, там нельзя гибко играться с параметрами выбора.
          use managed forms, Luke!
          Ответить
    • ЭтотОбъект[Элемент.Имя] =
      Чем не устроило Элемент.Значение = , тем более, что двумя строками выше устроило.

      = ОткрываемаяФорма.ТекущийЭлемент.ТекущаяС трока;
      - ага, а если я закрою форму не двойным кликом по списку, а нажатием на "Закрыть" или "Ок" или еще что, то ТекущийЭлемент формы что будет? Разве есть у кнопки свойство ТекущаяСтрока? ПРАВИЛЬНО ТАК: Элемент.Значение = ОткрываемаяФорма.ОткрытьМодально();
      Ответить
    • ОткрываемаяФорма = ПолучитьФорму(ТипМетаданных.ПолноеИмя()+ ".ФормаВыбора");
      - млин, а я вот взял и назвал свою форму выбора "ВормаФыбора". Всё, не откроется. Более правильным было бы обратиться к менеджеру за методом ПолучитьФормуВыбора() (напр. Справочники.ИмяСправочника.ПолучитьФорму Выбора()), но тут проблема в платформе: из метаданных получить менеджер не получится. Очень бы не помешал какой-нибудь метод типа ТипМетаданных.ПолучитьМенеджер(). А так придется пробегаться по видам (Справочник, Документ, планы там всякие), типа:
      Если Метаданные.Справочники.Содержит(ТипМетад анных) тогда Справочники[ТипМетаданных.Имя].ПолучитьФормуВыбора()
      ну и так далее.

      ПараметрПриИзменении(Элемент); - насколько я помню, событие "при изменении" и так произойдет, несмотря на СтандартнаяОбработка = Ложь.

      А вот цикл с отборами - грамотно сделано, легко дорабатывается при необходимости (нужно изменить только первую строку).

      Исходя из этой смеси, делаю вывод, что возможно, прогромист повыдирал куски кода из других мест (тааак... вот здесь работает примерно так, как мне нужно.... скопипастю-ка я код). В пользу этого еще говорит тот факт, что в одних местах знак "равно" обернут пробелами с обоих сторон, а в других местах написан слитно.
      Ответить
    • Правильно не использовать модальность, а использовать обработчики оповещения о закрытии.
      Ответить

    Добавить комментарий