Вход | Регистрация


Форумы на Кубань.Ру


1С:Предприятие ::

Метки:

Ошибка: Данная команда не может выполняться в формуле элемента диалога...

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




Список тем форума

Форум Территория 1С

Рекламное место пустует   Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Ветка сдана в архив. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует