Имя: Пароль:
1C
1C 7.7
v7: Формула выполняется 2 раза
0 vinogradъ
 
18.11.11
12:51
В колонке ТЧ документа на реквизит с типом справочника прописана формула. При выборе элемента формула выполняется 2 раза: при выборе элемента еще на форме списка справочника и когда уже элемент собственно выбран в ТЧ. Раньше тоже сталкивался с этим, но как-то борол, а сейчас напрочь забыл. Смотрю как делал раньше (где выполнение 1 раз) и не нахожу отличий.
Как побороть?
п.с. в формуле формирование контекстного меню с выбором.
п.п.с. если написать ВыполнятьФормулуТолькоПриИзменении(1), то второй раз формула не выполняется, а нужно, чтобы не было первого выполнения.
1 vinogradъ
 
18.11.11
12:58
?
2 Ёпрст
 
18.11.11
12:59
выкинуть всё вестимо
3 Ёпрст
 
18.11.11
13:02
из формулы
4 vinogradъ
 
18.11.11
13:04
и где писать обработчик события выбора элемента?
5 Ёпрст
 
18.11.11
13:05
в ПриНачалеВыбораЗначения или В ОбработкаВыбораЗначения .. смотря когда тебе надо - ДО выбора или После.
6 aka AMIGO
 
18.11.11
13:10
в формуле напиши в первых строках кода что-то типа
Если ПустоеЗначение(чтоТамВыбираешь)=1 Тогда
Возврат;
7 vinogradъ
 
18.11.11
13:11
ОбработкаВыбораЗначения помогло, спасибо.
Как раньше с формулой обходился - загадка, ну да х.. с ним
8 vinogradъ
 
18.11.11
13:12
(6) было , не помогает
9 Ёпрст
 
18.11.11
13:13
(7) формула выполняется свегда , при беганьи по строкам (если только не стоит
ВыполнятьФормулуТолькоПриИзменении ), а так, только когда реквизит выберешь
10 vinogradъ
 
18.11.11
13:20
Не, не прокатило: менюшка появляется на форме списка справочника, не в ТЧ документа.
11 aka AMIGO
 
18.11.11
13:27
вообще-то, если в ТЧ, то у меня стоит в проце ПриНачалеРедактированияСтроки()
12 vinogradъ
 
18.11.11
13:28
(11) нужно после выбора элемента
13 aka AMIGO
 
18.11.11
13:31
ну, возможно, в ПриОкончанииРедактированияСтроки()
14 vinogradъ
 
18.11.11
13:36
(13) :) после выбора элемента справочника строится менюшка, пользователь выбирает пункт и на основании выбора заполняются остальные колонки текущей строки. Нужно чтобы меню появлялось не на форме списка справочника, а на форме документа в тч.
15 aka AMIGO
 
18.11.11
13:41
(14)так в ТЧ и появляется менюшка..
а управление - двумя приведенными процами..
16 aka AMIGO
 
18.11.11
13:43
а можно и в виде ТЗ, или СЗ, а не меню
17 aka AMIGO
 
18.11.11
13:44
+16 либо небольшую обработку-диалог с реквизитами, вызываемую в модальном режиме
18 vinogradъ
 
18.11.11
13:55
Сделал.
Резюме: если в формуле колонки реквизита с типом справочник прописать процедуру, то она будет выполняться 2 раза: после выбора на форме списка справочника, когда форма списка еще открыта и после подтверждения выбора на ТЧ (перед выходом из ячейки).
Решение: ОбработкаВыбораЗначения с присваиванием ВыбЗнач в реквизит и ФлагСтандОбр = 0. Получаем выполнение формулы только 1 раз и там где нужно.
19 aka AMIGO
 
18.11.11
13:57
вот что вызывается - это обработка для выбора ячейки хранения:
http://s017.radikal.ru/i409/1111/f0/22effbd1c7e4.jpg

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



(18) вот и ладушки :)
AdBlock убивает бесплатный контент. 1Сергей