Имя: Пароль:
1C
1C 7.7
v7: "НазначитьВид" все равно выдает список с видами справочников.
, ,
0 Andreyyy
 
25.04.12
14:47
Есть в табличной части реквизит "Погрузка" с типом "Справочник".
В модуле формы процедура (взял пример из бухии типовой в требовании накладной):

Процедура ПриНачалеВыбораЗначения(ЭлементДиалога, Флаг)
   
   Если (ЭлементДиалога = "Погрузка") Тогда
       СписокВидовПогрузок = СоздатьОбъект("СписокЗначений");
       СписокВидовПогрузок.ДобавитьЗначение("Склады", "Склад");
       СписокВидовПогрузок.ДобавитьЗначение("Контрагенты", "Поставщик");
       ВыбранныйВид = "";
       ВыбраннаяПозиция = "";
       Если СписокВидовПогрузок.ВыбратьЗначение(ВыбранныйВид,, ВыбраннаяПозиция,, 2) = 0 Тогда
           Флаг = 0;
           Возврат;
       Иначе
           НазначитьВид(Погрузка, ВыбранныйВид);
       КонецЕсли;
   КонецЕсли;
   
КонецПроцедуры

При начале редактирования ячейки все равно выходит список со видами справочников, только лишь позиционируется на выбранном. В Бухгалтерии сразу открывает выбор нужного справочника. Вроде все сделал одинаково, в чем ошибка ?
1 andrewks
 
25.04.12
14:53
у тебя Флаг=0 не устанавливается, если выбрано значение
2 Andreyyy
 
25.04.12
14:54
(1) С флагом форма выбора не выходит совсем, тогда придется открывать форму подбора и писать обработку подбора.
3 Andreyyy
 
25.04.12
14:56
Повторюсь, сделал так же как в бухгалтерии типовой в документе "Требование накладная", там все работает именно так (в частности когда выбирается вид справочника "Материалы" все отрабатывает корректно без дополнительных усилий).
4 andrewks
 
25.04.12
15:00
мне (1) по слогам повторить?
5 viktor_vv
 
25.04.12
15:04
А че так сложно. Должно и так прокатить.

Процедура ПриРедактированииНовойСтроки()
   Погрузка.ВидыДляВыбора("Склады, Контрагенты");
КонецПроцедуры

Процедура ПриНачалеРедактированияСтроки()
   Погрузка.ВидыДляВыбора("Склады, Контрагенты");
КонецПроцедуры
6 viktor_vv
 
25.04.12
15:05
(5)+ И твоя не нужна. Для типа значения реквизита "Документ" работает.
7 Andreyyy
 
25.04.12
15:15
(4) да хоть стихами.
(5) Спасибо.
8 viktor_vv
 
25.04.12
15:18
Еще может и сюда надо будет.

Процедура ПриВводеСтроки()
   Погрузка.ВидыДляВыбора("Склады, Контрагенты");
КонецПроцедуры

Че-то оно уже совсем не просто получается :).
9 Andreyyy
 
25.04.12
15:57
(4) Процедура из бухгалтерии, где все работает. Ткните пальцем, где "флаг = 0" когда выбирается вид справочника "Материалы".

Процедура ПриНачалеВыбораЗначения(ЭлементДиалога, Флаг)
   
   Если (ЭлементДиалога = "СчетЗатрат") и (Константа.ИспользоватьСписокКорректныхПроводок = Да) Тогда
       СписокКорректныхПроводок = СоздатьОбъект("СписокЗначений");
       СписокКорректныхПроводок.Установить("Счет", СчетПоКоду("10"));
       глЗначениеОтбора = СписокКорректныхПроводок;
       
   ИначеЕсли (ЭлементДиалога = "Материал") Тогда
       СписокВидовМПЗ = СоздатьОбъект("СписокЗначений");
       СписокВидовМПЗ.ДобавитьЗначение("Материалы", "Материалы");
       СписокВидовМПЗ.ДобавитьЗначение("Номенклатура", "Продукция");
       СписокВидовМПЗ.ДобавитьЗначение("Номенклатура", "Полуфабрикат");
       ВыбранныйВид = "";
       ВыбраннаяПозиция = "";
       Если СписокВидовМПЗ.ВыбратьЗначение(ВыбранныйВид,, ВыбраннаяПозиция,, 2) = 0 Тогда
           УдалитьСтроку();
           Флаг = 0;
           Возврат;
           
       Иначе
           НазначитьВид(Материал, ВыбранныйВид);
       КонецЕсли;
       
       Если Материал.Вид() = "Номенклатура" Тогда
           Флаг = 0;
           Если ВыбраннаяПозиция = 2 Тогда // продукция
               ОткрытьФорму("Справочник.Номенклатура.ГотоваяПродукция", Перечисление.ТипыНоменклатуры.Продукция);
               
           Иначе // полуфабрикат
               ОткрытьФорму("Справочник.Номенклатура.ГотоваяПродукция", Перечисление.ТипыНоменклатуры.Полуфабрикат);
           КонецЕсли;
           
       КонецЕсли;
   КонецЕсли;
   
КонецПроцедуры
10 chief accountant
 
25.04.12
15:58
(7) А ничего, что у тебя не полностью код из типовой. Конфа откуда знает какой справочник открывать, ась?
11 chief accountant
 
25.04.12
15:59
(9) забей на флаг
12 andrewks
 
25.04.12
15:59
(9) тыкаю пальцем:

Если Материал.Вид() = "Номенклатура" Тогда
           Флаг = 0;
13 Andreyyy
 
25.04.12
16:02
(12) Внимательно смотрим, если выбран был справочник "Материалы", то где устанавливается флаг ?
14 chief accountant
 
25.04.12
16:03
Мде, маразм крепчал
15 Andreyyy
 
25.04.12
16:04
(10) Код изменен в (0), виды справочников описаны и устанавливаются: НазначитьВид(Погрузка, ВыбранныйВид);
16 Andreyyy
 
25.04.12
16:06
Если Материал.Вид() = "Номенклатура" Тогда
           Флаг = 0;



А если Материал.Вид() = "Материалы" Тогда ГДЕ ЕПТЬ ФЛАГ = 0 ?
И все работает !
17 chief accountant
 
25.04.12
16:13
(10,11) Был не прав, погорячился
(16) У тебя вообще условие отрабатывается или как?
18 Andreyyy
 
25.04.12
16:23
У меня в (0) нет условия, в типовой очевидно его замутили чтобы открывать подбор с фильтром по типу номенклатуры.
19 Andreyyy
 
25.04.12
16:23
(18) к (17)
20 Andreyyy
 
25.04.12
16:24
Как в (5) подсказали все работает как надо.
21 andrewks
 
25.04.12
16:25
значит, давай с начала.

ты хочешь не сам открывать форму выбора, а просто назначить тип, чтобы потом открылся штатный диалог выбора, теперь я правильно тебя понял?

тогда в (0) написано верно.
отладчик пробовал?
22 chief accountant
 
25.04.12
16:27
(18) А это что по твоему?
Если (ЭлементДиалога = "Погрузка") Тогда
23 chief accountant
 
25.04.12
16:29
(21) Ставлю на ЭлементДиалога <> "Погрузка"
24 Andreyyy
 
25.04.12
16:33
(22) Да, это условие отрабатывается и даже позиционируется в списке видов справочников на строке с установленным видом: НазначитьВид(Погрузка, ВыбранныйВид)
25 chief accountant
 
25.04.12
16:35
(24) Вот твой код в типовой, всё работает
   ИначеЕсли (ЭлементДиалога = "Материал") Тогда
       СписокВидовМПЗ = СоздатьОбъект("СписокЗначений");
       СписокВидовМПЗ.ДобавитьЗначение("МестаХранения", "Склад");
       СписокВидовМПЗ.ДобавитьЗначение("Контрагенты", "Поставщик");
       ВыбранныйВид = "";
       ВыбраннаяПозиция = "";
       Если СписокВидовМПЗ.ВыбратьЗначение(ВыбранныйВид,, ВыбраннаяПозиция,, 2) = 0 Тогда
           УдалитьСтроку();
           Флаг = 0;
           Возврат;
           
       Иначе
           НазначитьВид(Материал, ВыбранныйВид);
       КонецЕсли;
       
   КонецЕсли;
26 andrewks
 
25.04.12
16:36
(24) выкладывай мдэшник
27 chief accountant
 
25.04.12
16:37
(26) +1
28 Andreyyy
 
25.04.12
16:46
(21) Именно так.

http://clck.ru/1-ocL
Документ: "ЗаявкаНаТранспортИСборщиков"
29 andrewks
 
25.04.12
16:56
(28) архив битый
30 chief accountant
 
25.04.12
16:59
(29) У меня норм. Ковыряю
31 andrewks
 
25.04.12
17:00
(30) хммм... ща перекачаю
32 chief accountant
 
25.04.12
17:10
Приоткрытии()
   Форма.Погрузка.НеИзменятьВид(1);


всё
33 andrewks
 
25.04.12
17:13
(32) ну вот, только у меня база раскрылась, а интриги уже нет :(
34 chief accountant
 
25.04.12
17:15
(33) :)
36 Andreyyy
 
25.04.12
17:35
(32) Проклятая невнимательность, куда отправлять пиво-чипсы ?)
37 chief accountant
 
25.04.12
17:55
(36) Ну мы с andrewks тоже изначально не туда рыли, так что в расчете :)