Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Подбор из формы списка справочника
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 7.7
uanr81
Здравствуйте. В табличную часть документа поле "поступл" (тип справочник.ПлатежиПоступления) нужно организовать подбор, справочник справочник.ПлатежиПоступления подчинён справочнику справочник.ВидыРасходПриход с реквизитами для отбора("ДляПрихода" и "ДляРасхода" галочки в свойствах установлены) при котором имеються формысписка "ДляПрихода" и "ДляРасхода" в каждой из этих форм в модуле процедура
Процедура ПриОткрытии()
УстановитьОтбор("ДляПрихода",1);//"1" здесь значение для отбора
КонецПроцедуры

Как сделать чтобы при обработкеподбора открывалась формасписка "ДляПрихода" справочника справочник.Виды.РасходПриход (уже отфильтрованого с нужным значением отбора), затем при выборе элемента-хозяина открывалась формасписка дляПодбора подчинённого справочника справочник.ПлатежиПоступления и потом выбранный элемент залетал в табличную часть???????????.
ОткрытьПодбор("Справочник.ВидыРасходПриход","ДляПрихода",,,);
Процедура ОбработкаПодбора();
//"справочник.ПлатежиПоступления"

Спасибо


 ! 

Правила, п 2, 5
 
Cthulhu
Во-первых - все-таки лучше бы сначала аккуратнее сформулировать - "кто на ком стоял?"
В форме документа? Какого? В реквизиты? В какие? Выполняется ПОДбор (нажатием на кнопку на кнопку, вызывающую процедуру, которая программно открывает подбор с помощью "ОткрытьПодбор") или все-таки ВЫБор значения (нажатием на кнопку выбора или клавишей F4 в самом реквизите)? Какого типа(+вида) реквизит(ы)? и как-откуда-что нужно выбрать - что потом открыть - и что в результате куда подставить?
uanr81
Цитата(Cthulhu @ 28.01.13, 19:41) необходимо зарегистрироваться для просмотра ссылки
Во-первых - все-таки лучше бы сначала аккуратнее сформулировать - "кто на ком стоял?"
В форме документа? Какого? В реквизиты? В какие? Выполняется ПОДбор (нажатием на кнопку на кнопку, вызывающую процедуру, которая программно открывает подбор с помощью "ОткрытьПодбор") или все-таки ВЫБор значения (нажатием на кнопку выбора или клавишей F4 в самом реквизите)? Какого типа(+вида) реквизит(ы)? и как-откуда-что нужно выбрать - что потом открыть - и что в результате куда подставить?

нажатием на кнопку на кнопку, вызывающую процедуру, которая программно открывает подбор с помощью "ОткрытьПодбор". В интерактивном (при тычке в строке табличной части документа для которого происходит подбор ) открываеться форма списка справочника для подбора , но без сортировки по реквизиту. Выбираю владельца, открываеться подчинённый справочник выбираю нужный элемент -- всё нормально залетает в документ. Нужно отсортировать по реквизиту справочник владелец
logist
необходимо зарегистрироваться для просмотра ссылки
Цитата(uanr81 @ 28.01.13, 19:07) необходимо зарегистрироваться для просмотра ссылки
при тычке в строке табличной

Спасибо! Отличное завершение рабочего дня smile.gif)
uanr81
Цитата(uanr81 @ 28.01.13, 20:07) необходимо зарегистрироваться для просмотра ссылки
нажатием на кнопку на кнопку, вызывающую процедуру, которая программно открывает подбор с помощью "ОткрытьПодбор". В интерактивном (при тычке в строке табличной части документа для которого происходит подбор ) открываеться форма списка справочника для подбора , но без сортировки по реквизиту. Выбираю владельца, открываеться подчинённый справочник выбираю нужный элемент -- всё нормально залетает в документ. Нужно отсортировать по реквизиту справочник владелец

Прочтите сначала вроде всё описал


 ! 

Правила, п.13
 

Попробую перефразировать. Нужно открыть подбор из формы документа , вначале выбрать элемент-владелец на форме спика справочника владельца, при выборе которого - откроеться формасписка подчиненных элементов, где при выборе элемента осуществиться тот выбор и выбранный элемент попадёт в табличную часть документа
Cthulhu
С трудом продираясь через сложно-подчиненные конструкции, все-таки уточню: я правильно понял, что проблема заключается в сортировке формы списка справочника владельцев - при выборе владельца, для которого потом в реквизит выбирается элемент подчиненного справочника? если "да" - то вроде никто не отменял при просмотре формы списка Справочника "Меню"-"Действия"-"Сортировка"-"По наименованию" (или на форме списка ПКМ - "Сортировка"-"По наименованию", или даже просто Ctrl+2)... при этом во следующие разы эта самая форма списка будет открываться именно с той сортировкой, которая была (установлена) в прошлый раз.
или об чём таки речь?..
uanr81
Цитата(Cthulhu @ 29.01.13, 18:44) необходимо зарегистрироваться для просмотра ссылки
С трудом продираясь через сложно-подчиненные конструкции, все-таки уточню: я правильно понял, что проблема заключается в сортировке формы списка справочника владельцев - при выборе владельца, для которого потом в реквизит выбирается элемент подчиненного справочника? если "да" - то вроде никто не отменял при просмотре формы списка Справочника "Меню"-"Действия"-"Сортировка"-"По наименованию" (или на форме списка ПКМ - "Сортировка"-"По наименованию", или даже просто Ctrl+2)... при этом во следующие разы эта самая форма списка будет открываться именно с той сортировкой, которая была (установлена) в прошлый раз.
или об чём таки речь?..

"справочник.ПлатежиПоступления" подчинён "справочник.ВидыРасходПриход". У хозяина два реквизита для отбора -"ДляПрихода", "ДляРасхода". Если элемент используеться, в данном реквизите устанавливаеться "1", элемент может использоваться и для одного и для другого и для обоих сразу. В документ для которого идёт подбор тип значения подбора "справочник.ПлатежиПоступления", какя должна быть процедура?
процедура добавить() 
    открытьподбор("Справочник.ВидыРасходПриход","ДляРасхода");
конецпроцедуры
  процедура обработкаподбора(эл,конт)
  новаястрока();
  расход=эл;
  конецпроцедуры

в формесписка "ДляРасхода"
Процедура ПриОткрытии()
УстановитьОтбор("ДляРасхода",1);
КонецПроцедуры

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

открываеться форма "не выбран владелец" , я уже и так писал
процедура добавить() 
    открытьподбор("Справочник.ВидыРасходПриход","ДляРасхода");
конецпроцедуры
  процедура обработкаподбора(эл,конт)
  открытьподбор("Справочник.ПлатежиПоступления,"ДляВыбора",ел);// здесь в форму передавал элемент //владелец, только не понятно а куда вторую процедуру обработку подбора всунуть?
  конецпроцедуры

Сделал так :
перем спрпп,спрврп,спхоз,спподч;
процедура добавить()
    перем хоз,подч,нп,пост;
    хоз="";
    подч="";
    спподч.УдалитьВсе();
    если спхоз.ВыбратьЗначение(хоз,"Выбери тип затрат",,,0)=1 тогда    
        спрпп.ИспользоватьВладельца(хоз);
        спрпп.выбратьэлементы();
        пока спрпп.получитьэлемент()=1 цикл
            спподч.добавитьзначение(спрпп.текущийэлемент());    
        конеццикла;
        если  спподч.ВыбратьЗначение(подч,"Выбери затрату",,,0)=1 тогда
            подск="Из казны в: "+строка(подч.наименование);
            су=0;
            если ВвестиЧисло(су,подск,8,2,)=1 тогда
            новаястрока();
            Расход=подч;
            сумма=су;
            конецесли;
        конецесли;
    конецесли;
конецпроцедуры
спрпп=создатьобъект("справочник.ПлатежиПоступления");
спрврп=создатьобъект("справочник.ВидыРасходПриход");  
спхоз=создатьобъект("списокзначений");
спподч=создатьобъект("списокзначений");
спрврп.ВыбратьЭлементыПоРеквизиту("ДляРасхода",1,,);
пока спрврп.получитьэлемент()=1 цикл
    спхоз.добавитьзначение(спрврп.текущийэлемент());
конеццикла;

Но вопрос остался открытым. Спасибо за то что прочли. С этими подборами что то не выходит, подскажите как с ними справиться
Cthulhu
Да вроде из ОбработкаПодбора при выборе владельца - никто не мешает сделать ОткрытьПодбор подчиненного справочника с установкой для него выбранного владельца, и в этой же ОбработкаПодбора выбранное из подчиненного справочника значение - занести в реквизит... надеюсь, что про различение в ОработкаПодбора того, что именно выбрано (по типу+виду выбранного значения) и так поятно?..
uanr81
спасибо Cthulhu, всё заработало. Вот код
процедура добавить() 
    открытьподбор("Справочник.ВидыРасходПриход","ДляРасхода",,0);
конецпроцедуры
  процедура обработкаподбора(эл,конт)
  если эл.вид()="ВидыРасходПриход" тогда
  открытьподбор("Справочник.ПлатежиПоступления","ДляРастрат",,0,эл);//В этой форме - процедура приоткрытии() метод использоватьвладельца(форма.параметр,0)
иначеесли эл.вид()="ПлатежиПоступления" тогда
  подск="Из казны в: "+строка(эл.наименование);
            су=0;
            если ВвестиЧисло(су,подск,8,2,)=1 тогда
            новаястрока();
            Расход=эл;
            сумма=су;
            конецесли;
  конецесли;
  конецпроцедуры

По суте для подбора можно пройти сколько угодно уровней подчинения. Ещё раз спасибо Cthulhu и всем кто потратил на меня время
Cthulhu
Цитата(uanr81 @ 09.02.13, 11:31) необходимо зарегистрироваться для просмотра ссылки
... для подбора можно ...

Пара замечаний.
1. В обработке подбора такой код потенциально ошибочен - потому что метод ".Вид()" есть не у всех типов данных. Лучше подобных ситуаций избегать - предварительно анализируя ТИП полученного из подбора значения: конструкцию
Если эл.Вид()="ВидыРасходПриход" ... ИначеЕсли эл.Вид()="ПлатежиПоступления" ... КонецЕсли;

лучше "обернуть" в проверку типа полученного из подбора значения - например (в данном конкретном случае):
Если ТипЗначенияСтр(эл)="Справочник" Тогда <... тот же код ...> КонецЕсли;


2. Некоторые операции в открытой форме можно сделать кодом прямо из того места, в котором эта форма открывается (и в которую возвращается управление после того, как форма открыта и ф ней отработала предопределенная процедура "ПриОткрытии), например (в данном конкретном случае):
//открытьподбор("Справочник.ПлатежиПоступления","ДляРастрат",,0,эл);//В этой форме - процедура приоткрытии() метод использоватьвладельца(форма.параметр,0)
тКонт=Эл; // а можно и пропустить - если переменная "тКонт" описана в "Перем"
открытьподбор("Справочник.ПлатежиПоступления","ДляРастрат",,0,тКонт); // получили в переменную контекст открытой для подбора формы
тКонт.ИспользоватьВладельца(эл); // установили в открытой для побдора форме отбор по нужному владельцу
// при этом никаких изменений в саму открываемую для подбора (или просто по ОткрытьФорму - так, на будущее) форму (списка) никаких изменений вносить не надо.

При этом в открытую форму управление перейдет уже после завершения выполнения всего кода после ОткрытьПодбор/ОткрытьФорму (до конца процедуры).
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.