Имя: Пароль:
 
1C
 
Ошибка: Данная команда не может выполняться в формуле элемента диалога...
Ø
0 WED
 
11.11.04
11:30
По кнопке на форме элемента справочника вызывается процедура. В процедуре требуется осуществить запись текущего элемента:
...
 Запись();
...
На это 1С ругается:Данная команда не может выполняться в формуле элемента диалога!
Как можно обойти?
v77.20.SQL.
1 AnRy
 
11.11.04
11:42
Записать();
2 WED
 
11.11.04
11:44
2(1) Да я в курсе, что Записать(), а не Запись() - я просто опечатался.
3 Lvk
 
11.11.04
11:47
Если есть ТИС 9.2., то см. кнопки на форме документа Перемещение ТМЦ
4 Zanuda
 
11.11.04
11:47
ТекущийЭлемент.Записать() (или ТекущийЭлемент().Записать()).
5 WED
 
11.11.04
11:49
2(3) Нету.
2(4) ТекущийЭлемент().Записать(); = Не выбран элемент!
6 Болван
 
11.11.04
11:49
1 - А процедура как называеться?
2 - Посмотри в процедуре ПриЗаписи() нет ли там Записать()
7 WED
 
11.11.04
11:52
2(6)
1.Процедура Пересчет()
2.Нет.
8 Самый умный
 
11.11.04
11:54
(7) а расскажи-ка что у тебя написано в формуле элемента диалога...
9 WED
 
11.11.04
12:00
2(8) Ничего особенного, только вызов этой процедуры Пересчет()
Её код:
//*******************************************
Процедура Пересчет()
  
  Записать();
  
  Спр=СоздатьОбъект("Справочник.Ресурсы");
  Спр.ИспользоватьВладельца(Контекст);
  Спр.ВыбратьЭлементы();
  
  Пока Спр.ПолучитьЭлемент()>0 Цикл
......
КонецПроцедуры;
Вобщем смысл её таков:
После изменений в элементе-владельце (в текущем элементе), нужно пересчитать некоторые значения в элементах подчиненного справочника "Ресурсы", а для этого надо сначала записать все эти изменения.. Вот запись изменений мне и не удается... Можно,конечно, сделать две кнопки "Запись" и "Пересчет", но как-то это не красиво.
10 bsg
 
11.11.04
12:03
Попробуй Записать() применить к объекту.
11 WED
 
11.11.04
12:04
2(11) А точнее?
12 bsg
 
11.11.04
12:09
(11) Показалось, это делается из списка справочника.
В кнопку #Записать; Пересчет()
13 MetaEditor
 
11.11.04
12:12
 Спр.ИспользоватьВладельца(ТекущийЭлемент());
14 WED
 
11.11.04
12:13
2(12) НЕ пойдет.
Мне надо:
1. Записать текущий эл.
2. Пересчитать подчиненные.
3. Поскольку подчиненные изменились - пересчитать одну цифру в текущем.
4. Снова записать.
Из-за п.4 #Записть в кнопке не пойдет.
15 MetaEditor
 
11.11.04
12:19
так и думал, покажи как делаешь запись текущего после пересчёта подч. справочника
16 GrayT
 
11.11.04
12:19
Перем МожноЗакрыть;
Процедура ПоКнопке
 МожноЗакрыть=0;
Процедура ПРиЗакрытии
 Если МожноЗакрыть=0
   Записать()
   СтатусВозврата(0)
С синора брал, а где не помню
17 WED
 
11.11.04
12:19
2(13) А это, простите, к чему?
18 WED
 
11.11.04
12:23
2(16) Пока никак - вперся с первоначальной записью.
Еще момент: если вкнопке прописать формулу так: #Записать; Пересчет()
то процедура Пересчет() НЕ ВЫЗЫВАЕТСЯ. Совсем.
19 Самый умный
 
11.11.04
12:25
(17) а чего ты вообще паришься? вызывай свой пересчет в процедуре ПриЗаписи()
20 WED
 
11.11.04
12:25
гм...мой 18ый относился к 16ому посту.
2(16) А это-то здесь причем. Мне не надо закрывать форму. Мне надо осуществить запись элемента в процедуре, вызываемой по кнопке на его форме.
21 Самый умный
 
11.11.04
12:28
+19 так, мне кажеЦа, правильнее всего будет....
22 WED
 
11.11.04
12:28
2(19) А ты порядок действий в (14) посмотри внимательно, и поймешь почему парюсь - мне надо записать, а потом пересчитать, а потом опять записать. А ты предлагаешь: пересчитать, записать. Потому что в ПриЗаписи выполняется ПЕРЕД записью данных.
23 Самый умный
 
11.11.04
12:32
(22) кстати, в (13) тебе правильно сказали: Спр.ИспользоватьВладельца(ТекущийЭлемент());
и еще: зачем тебе все-таки записывать ДО вызова пересчета?
24 Болван
 
11.11.04
12:34
(22)Не тупи твой порядок действий
1. Записать текущий эл.
2. Пересчитать подчиненные.
3. Поскольку подчиненные изменились - пересчитать одну цифру в текущем.
4. Снова записать.
получиться такой
1. Пересчитать подчиненные.
2. Поскольку подчиненные изменились - пересчитать одну цифру в текущем.
3. Снова записать.
И НЕ НАДО 2 РАЗА ЗАПИСЫВАТЬ!!!! что сократит также время выполнения модуля
25 MetaEditor
 
11.11.04
12:37
24) а если пересчет зависит от изменённых данных в текущем?
26 Пух
 
11.11.04
12:38
2(0) Что я не так делаю?
Создал элемент справочника. Повесил кнопку с Пересчет()
В модуле элемента:
Процедура Пересчет()
  Записать();
  Телефон = "7777";
  Записать();
КонецПроцедуры
Процедура ПриЗаписи()
КонецПроцедуры
Все записывает, все меняет ни на что не ругается...
27 Самый умный
 
11.11.04
12:40
(26) я тоже про это уже думал... скорее всего у WED'а что-то все-таки еще в формуле элемента диалога записано....
28 Болван
 
11.11.04
12:42
(25)1:0 ступил ,
(26) вот и я говорю пусть весь код покажет , млят гдето накалывают не пойму где , должен же записывать полюбому
29 bsg
 
11.11.04
12:43
Два в одном - два развода на одной странице.
Есть ли возможность спозиционироваться программно в форме списка?
Данная команда не может выполняться в формуле элемента диалога...
30 Самый умный
 
11.11.04
12:43
(25) ну и что?
31 Просто Директор
 
11.11.04
12:44
А объект- то создан?
32 MetaEditor
 
11.11.04
12:44
неспокойно мне всёж по поводу пересчёта подчиненных...
полный текст дать можно?
33 MetaEditor
 
11.11.04
12:47
30) 25 - провокация.....
прошла...
34 WED
 
11.11.04
12:48
2(25) ИМЕННО! Мне подчиненные и надо пересчитать, чтобы рассчитать их сумму для нового количества в текущем. А вот новую (рассчитанную при пересчете) сумму подчиненных надо занести в текущий. Вот и получается, что надо записать изменения в текущем (чтобы при пересчете подчиненных брались новые значения владельца), пересчитать подчиненные (и получить новую сумму подчиненных),(занести новую сумму в текущий) и опять записать.
Весь этот гемморой из-за того, что в процедуре пересчета подчиненных используются данные не непосредственно из переданного контекста, а переданный контекст (элемент-владелец) находится в справочнике и данные берутся из него. Такая беда из-за того,что процедура пересчета вызывается из множества мест и достаточно универсальна.
Отсю.да рождается второй вариант решения данной проблемы: Переделка всех процедур пересчета. Иерархия подчинения справочников довольно-таки не малая: 1-3-2-2 (к главному подчиняются три справочника, а им в свою очередь еще два, а к ним еще два).
35 WED
 
11.11.04
12:51
Народ. Никакого развода. Есть форма элемента. На ней кнопка "Применить", в формуле которой только вызов процеджуры Пересчет.
//*******************************************
Процедура Пересчет()
  //здесь должна быть запись
  
  Спр=СоздатьОбъект("Справочник.РесурсыРасценкиСметы");
  Спр.ИспользоватьВладельца(Контекст);
  Спр.ВыбратьЭлементы();
  
  Пока Спр.ПолучитьЭлемент()>0 Цикл
    глРасчетРесурсаРасценки(Спр);
    Попытка
      Спр.Записать();
    Исключение
      Предупреждение("Не удалось произвести расчет ресурса."+симв(13)+"Закройте все ресурсы расценки"+симв(13)+"и повторите расчет",60);
      Прервать;
    КонецПопытки;
  КонецЦикла;
  
  
  глРасчетРасценки(Контекст);
  //и здесь должна быть запись
КонецПроцедуры
глРасчетРесурсаРасценки(Спр) - процедура пересчета подчиненного элемента.
глРасчетРасценки(Контекст) - процедура пересчета текущего.
Всё.
36 MetaEditor
 
11.11.04
12:54
самое интересное в глобальных процедурах...
не отстану... покажи её...
37 Самый умный
 
11.11.04
12:55
(35) НАФИГА ты передаешь контекст?
38 Пух
 
11.11.04
13:00
Т.е. Процедура Пересчет() с закоментированными Записать() в начале и конце процедуры отрабатывается нормально?
39 WED
 
11.11.04
13:02
Блин! Долбанный диал-ап :( Столько написал и в пустую.
Короче: Нашел я проблему.. как ни смешно, но на мысль натолкнул ПУХ, со своим "что я делаю неправильно".... Вобщем начал от открытия формы рыть... и нарыл вот что: Если в процедуре ПриОткрытии есть Записать() или вызов процедуры с Записать(), то получите выше указанную ошибку и совсем не важно, что НИ В ОДНОМ из элементов формы НЕТ вызова этой процедуры...
40 WED
 
11.11.04
13:05
СПАСИБО ВСЕМ. Серьезно. Спасибо народ... И извините, что время отнял.
41 MetaEditor
 
11.11.04
13:07
Записать() работает в контексте формы. При открытии - формы ещё нет = полтора часа моз#######ва...
42 WED
 
11.11.04
13:11
2(41) Да понятно, что при открытии Записать() не может работать, а ты попробуй сообрази, если 1С ошибку пишет про формулу элемента формы....