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


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


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С

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