Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
09 дек 2024, 15:56

Переменная не определена

Автор qwerty12345, 29 ноя 2024, 20:19

0 Пользователей и 1 гость просматривают эту тему.

qwerty12345

Всем привет! Создаю свою первую обработку в жизни. Требуется изменить в документе реквизит Способ выполнения работ (скрин1). Там два варианта Хозспособ и Подрядный. Форму я создал, в обработчике ошибки.

antoneus

Ну, во-первых с сервера не видны клиентские процедуры и функции.
Во-вторых, вы вызываете процедуру, из которой вызываете вызвавшую процедуру. И так они будут друг друга вызывать, пока не переполнится стек и 1С не упадет.
Все действо должно происходить в процедуре ИзменитьСпособВыполненияРаботНаСервере, не надо из нее больше ничего вызывать.

qwerty12345

antoneus, так?

&НаСервере
Процедура ИзменитьСпособВыполненияРаботНаСервере()
   ИзменитьСпособВыполненияРаботНаСервере();
   КонецПроцедуры

&НаКлиенте
Процедура ИзменитьСпособВыполненияРабот(Команда)
    Отказ = Ложь;
   ИзменитьСпособВыполненияРабот (ВыполнениеМероприятия, НовоеСпособВыполненияРабот, Отказ);
КонецПроцедуры

служебные сообщения:
{ВнешняяОбработка.ИзменитьСпособВыполненияРабот.Форма.Форма.Форма(10,56)}: Слишком много фактических параметров (ИзменитьСпособВыполненияРабот)
   ИзменитьСпособВыполненияРабот (ВыполнениеМероприятия, <<?>>НовоеСпособВыполненияРабот, Отказ); (Проверка: Тонкий клиент)

antoneus

Вы передаете в процедуру ИзменитьСпособВыполненияРаботНаСервере какие-то параметры, но в сигнатуре процедуры у вас никаких параметров не принимается. Вы с программированием хоть отдаленно знакомы?

qwerty12345

antoneus, нет. первая обработка

qwerty12345

может это ближе к правде?


&НаСервере
Процедура ИзменитьСпособВыполненияРаботНаСервере()
   Если ВыполнениеМероприятия.Пустая() Тогда
ДокОбъект=ВыполнениеМероприятия.ПолучитьОбъект();
ДокОбъект.СпособыСтроительства=СпособВыполненияРабот;
ДокОбъект.Записать(РежимЗаписиДокумента.Проведение);

КонецЕсли
КонецПроцедуры

&НаКлиенте
Процедура ИзменитьСпособВыполненияРабот(Команда)
   ИзменитьСпособВыполненияРаботНаСервере();
КонецПроцедуры


qwerty12345

или так?

&НаСервере
Процедура 
   // Получаем документ
    ДокументОбъект = Документ(мрскВыполнениеМероприятия);
    // Устанавливаем новое значение реквизита
    ДокументОбъект.СпособВыполненияРабот = НовоеСпособВыполненияРабот;
   // Сохраняем изменения
    ДокументОбъект.Записать();
 


КонецПроцедуры



&НаКлиенте
Процедура ИзменитьСпособВыполненияРабот(Команда)
   ИзменитьСпособВыполненияРаботНаСервере();
КонецПроцедуры

fruitella

Ты вызываешь процедуру ИзменитьСпособВыполненияРаботНаСервере();

Только ты для своей процедуры не дал ни какого наименования, у тебя там написано процедура, но имени ни какого ты не дал.

Собственно тут будет синтаксическая ошибка.

Далее у тебя идет
/ Получаем документ
    ДокументОбъект = Документ(мрскВыполнениеМероприятия);

Чтобы получить объект документа, тебе нужна ссылка. А у тебя тут вызывается функция с названием Документ, которой ты передал параметр мрскВыполненияМероприятия и которая должна вернуть объекта документа. У тебя такая функция точно есть и она действительно возвращает объект дока?

Ну на последок, для записи документов нужно в метод Записать() тоже передавать параметр:
РежимЗаписиДокумента.Запись
РежимЗаписиДокумента.Проведение

Т.е. Последний кусок будет таким:
ДокументОбъект.Записать(РежимЗаписиДокумента.Запись);

//или
ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение);

antoneus

Цитата: fruitella от 30 ноя 2024, 00:17Ты вызываешь процедуру ИзменитьСпособВыполненияРаботНаСервере();

но делаешь это без уважения :)

antoneus

Цитата: qwerty12345 от 29 ноя 2024, 23:00&НаСервере
Процедура ИзменитьСпособВыполненияРаботНаСервере()
   Если ВыполнениеМероприятия.Пустая() Тогда
ДокОбъект=ВыполнениеМероприятия.ПолучитьОбъект();
ДокОбъект.СпособыСтроительства=СпособВыполненияРабот;
ДокОбъект.Записать(РежимЗаписиДокумента.Проведение);

КонецЕсли
КонецПроцедуры

&НаКлиенте
Процедура ИзменитьСпособВыполненияРабот(Команда)
   ИзменитьСпособВыполненияРаботНаСервере();
КонецПроцедуры

Вот это ГОРАЗДО ближе к правде. Только

Если НЕ ВыполнениеМероприятия.Пустая() Тогда

Теги: #обработка 

Похожие темы (5)

Рейтинг@Mail.ru

Поиск