Имя: Пароль:
1C
1C 7.7
v7: Связать между собой неподчиненые справочники
,
0 geniusbsd
 
16.02.18
13:39
День добрый Натолкните на мысли как реализовать
Есть Справочник ОборудованиеКлиента подчинен Справочнику Контрагенты. На форме элемента справочника есть реквизиты
ТипОборудования - тип перечисление ВидТовара
Производитель  - тип справочник Производитли
Серия - тип справочник ТМЦ
ТМЦ имеет вид
Ноутбук
1 geniusbsd
 
16.02.18
13:44
ТМЦ имеет вид
Ноутбук
        Asus
             K73
Как сделать так что бы при выборе реквизита серия
при выбраных реквизитах
Тип Оборудования -Ноутбук
Производитель ASUS
Сразу попасть в Нужную группу справчника ТМЦ
2 Darych
 
16.02.18
13:47
ну видимо при выборе в процедуре написать то, что вам нужно
3 user-ok
 
16.02.18
13:49
Процедура ПриНачалеВыбораЗначения(<?>,)
КонецПроцедуры
Синтаксис:
ПриНачалеВыбораЗначения(<ИдентЭлемДиалога>,<ФлагСтандОбр>)
Назначение:
Предопределенная процедура после выбора значения в форме выбора (выбор может быть инициирован в немодальном режиме интерактивно, при помощи элемента диалога с ''педалькой'').
<ИдентЭлемДиалога> - идентификатор элемента диалога, которым инициализирован выбор значения.
<ФлагСтандОбр> - флаг, изначально, при вызове процедуры равен 1, если в теле процедуры значение этого параметра поменять на 0, то стандартный процесс выбора значения не будет происходить.
Замечание:
Данная процедура может располагаться только в программном модуле формы.
4 Kigo_Kigo
 
16.02.18
13:53
(1) Как узнать, в какую группу надо попасть?
5 geniusbsd
 
16.02.18
13:56
(3) Это я знаю
(4) Вот и я не могу понять как это узнать
6 geniusbsd
 
16.02.18
13:58
Просто есль бы асусу делали только ноутбуки то проблем бы не было, а вот есть еще планшеты мониторы и.тд
найти поНаименованию находит первый попавшийся
7 Масянька
 
16.02.18
13:59
(5) Нарисуй структуру обоих справочников - мне не очень понятно, что есть что.
8 uno-group
 
16.02.18
14:00
УстановитьОтборПоРеквизиту или видимость по спискузначений
9 aka AMIGO
 
16.02.18
14:01
(6) ИМХО кто-то должен побеспокоиться о способе связи элементов справочников, конфигурации на это наплевать.
10 geniusbsd
 
16.02.18
14:03
В обоих справочниках есть одинаковый элемент ТипОборудования
11 aka AMIGO
 
16.02.18
14:04
Или так: в Запросе связать элементы справочников по какому-нибудь признаку, выдать список, и пусть юзер жмакает по нужному элементу списка
12 Масянька
 
16.02.18
14:04
(6) Разные папки для ноутов, планшетов и пр. Поиск по заданной папке. Я говорю - мне без структуры ни фиги не понятно.
13 aka AMIGO
 
16.02.18
14:04
(10) Вот, в запросе и свяжи по Типу
14 geniusbsd
 
16.02.18
14:08
(12)
ТМЦ Реквизиты
Наименование
Производитель
Видоборудования

Производители
Наименование
ВидОборудования
15 Масянька
 
16.02.18
14:13
(14) А теперь распиши пример из (1).
16 Darych
 
16.02.18
14:13
(14) и что???... ну обзови группы в тмц так, как те проще будет в процедуре искать.. ну все в твоих руках\голове.. в чем ВОПРОС то?.. ты что-нить делать пробовал?
17 aka AMIGO
 
16.02.18
14:16
http://helpme1c.ru/yazyk-zaprosov-1s-8-3-dlya-nachinayushhix-programmistov-paketnye-zaprosy-i-vremennye-tablicy
Обучение языку. Работа с ВТ.
Там-же есть Связать и Объединить, всё нужное, чтобы получить нужный результат
18 Darych
 
16.02.18
14:18
(17) у него клюшки)
19 aka AMIGO
 
16.02.18
14:20
(18) Блин.. только что увидел, невнимателен! Извини, ТС! :)
20 Масянька
 
16.02.18
14:21
(19) Пятница... Хочу, блин, блинов :)
21 geniusbsd
 
16.02.18
14:23
(15)

На Форме выбираем
ТипОборудования Ноутбук
Производитель ASUS(ТипОборудования Ноутбук)
Мне нужно попасть в Папку  ТМЦ ASUS в папке Ноутбуки
22 geniusbsd
 
16.02.18
14:24
(16)

Процедура ПриНачалеВыбораЗначения(Рекв,Фл)
    Перем ВыбЗначение,парам;
    Если Рекв = "Производитель" Тогда
        фл=0;    
    //    Парам=ТипОборудования;
    // Производитель.УстановитьОтбор("Вид",ТипОборудования);
     Сп=СоздатьОбъект("СписокЗначений");
Сп.ДобавитьЗначение(ТипОборудования,"ТипОборудования");    
    ОткрытьФорму("Справочник.Производители.ФормаСписка",сп);
    КонецЕсли;
    
    
     Если Рекв = "Модель" Тогда
    
        СпрТов = СоздатьОбъект("Справочник.ТМЦ");
        //СпрТов.НайтиПоКоду("0000004717",0);
        СпрТов.НайтиПоРеквизиту("Вид",ТипОборудования,1);
        //Сообщить(СпрТов.ТекущийЭлемент().Родитель.Родитель);
        СпрТов.НайтиПоНаименованию(СокрЛП(Производитель.ТекущийЭлемент()),0);
    //    Модель
    //    Модель.ИспользоватьРодителя(СпрТов.ТекущийЭлемент(),0);  
Модель.ИспользоватьРодителя(спртов.ТекущийЭлемент(),0);
КонецЕсли;
23 Масянька
 
16.02.18
14:29
(22)         мНоменклатура.ИспользоватьРодителя(ГруппаСправочникаДляПечати, 0);
        мНоменклатура.ВыбратьЭлементы(1);
24 geniusbsd
 
16.02.18
14:37
Немного не то ине нужно открыть форму списка с отбором
25 HawkEye
 
16.02.18
14:47
(6) ПоискПоНаименованию в рекурсию с Режимом 1...
26 HawkEye
 
16.02.18
14:51
(22) для чего СЗ с одним значением?
Сп=СоздатьОбъект("СписокЗначений");
Сп.ДобавитьЗначение(ТипОборудования,"ТипОборудования");    
    ОткрытьФорму("Справочник.Производители.ФормаСписка",сп);


если после закрытия открытия формы Производители, надо будет что-нибудь вернуть.. лучше использовать подбор.



зачем два раза искать?
СпрТов.НайтиПоРеквизиту("Вид",ТипОборудования,1);
       СпрТов.НайтиПоНаименованию(СокрЛП(Производитель.ТекущийЭлемент()),0);

?

почему нет проверок нашел ли?
27 Масянька
 
16.02.18
14:54
(24) Трудно в стандарте глянуть?
Процедура ПриОткрытии()
    
    Если ТипЗначенияСтр(Форма.Параметр) = "Справочник" Тогда
        Если (Форма.Параметр.Вид() = "Контрагенты") И
             (Форма.Параметр.Выбран() = 1) И (Форма.Параметр.ЭтоГруппа() = 0) Тогда
                 
            ИспользоватьВладельца(Форма.Параметр);
            ИерархическийСписок(1, 1);
            Форма.ОбработкаВыбораСтроки(1);
        КонецЕсли;
    Иначе
        ИерархическийСписок(1, 0);
    КонецЕсли;
    
КонецПроцедуры // ПриОткрытии()
Вместо владельца - передаешь свои параметры.
28 geniusbsd
 
16.02.18
15:54
Если Рекв = "Модель" Тогда     
СпрТов = СоздатьОбъект("Справочник.ТМЦ");    
Пока СпрТов.ПолучитьЭлемент() = 1 Цикл
Если (СокрЛП(СпрТов.Вид) =СокрЛП(ТипОборудования)) И(СокрЛП(СпрТов.Наименование)=СокрЛП(Производитель)) И  (СпрТов.ЭтоГруппа()=1) тогда
    Сообщить(СпрТов);
    Прервать;
    КонецЕсли;
КонецЦикла;
Модель.ИспользоватьРодителя(спртов.ТекущийЭлемент(),0);
КонецЕсли;

Сделал так вроде работает    

    

    КонецПроцедуры
29 HawkEye
 
16.02.18
16:11
(28) для таких поисков лучше использовать составнойреквизит в справочнике... и по нему искать один раз, а не перебирать каждый раз всю номенклатуру.
30 HawkEye
 
16.02.18
16:13
+29, либо уж использовать ВыбратьЭлементыПоРеквизиту с режимомгруппы = 1... всяко меньше элементов перебирать
Ошибка? Это не ошибка, это системная функция.