ОбработкаПроверкиЗаполнения/НаСервере

1. Andy19951005 25.05.16 14:57 Сейчас в теме
Добрый день!

В модуле документа
Написал процедуру

&НаСервере
Процедура ОбработкаПроверкиЗаполненияНаСервере(Отказ, ПроверяемыеРеквизиты)    
    ЭтоУслуга = ПроверяемыеРеквизиты.Найти("ЭтоУслуга");
сообщить(ЭтоУслуга);
КонецПроцедуры


1С ее не выпоняет! Почему?
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Vladimirrr 2 25.05.16 15:14 Сейчас в теме
(1) Andy19951005, видимо нет процедуры или события, которое её вызывает
3. BackinSoda 25.05.16 15:14 Сейчас в теме
Попробуйте перенести в модуль менеджера
4. alljoke 25.05.16 15:22 Сейчас в теме
А реквизит такой точно есть?
29. uk09 25.05.16 20:04 Сейчас в теме
похоже, что прав alljoke (4)
А реквизит такой точно есть?...

ПроверяемыеРеквизиты - смотрится в отладчике? Если Да - что в нем ?
5. uk09 25.05.16 15:29 Сейчас в теме
Andy19951005, добрый день!

Если процедура ОбработкаПроверкиЗаполненияНаСервере - предопределенная, то проверьте ее имя.
В форме модуля документа кликните по кнопке выпадающего списка поля "Процедуры и функции". Предопределенные процедуры расположены в конце списка
и начинаются с "<".

Если это процедура, которую добавили сами, проверьте наличие ее вызова и корректность параметров
6. antz 25.05.16 15:33 Сейчас в теме
В свойствах формы к событию ее привязали?
Прикрепленные файлы:
user1021675; Andy19951005; deniseek77; +3 Ответить
7. Andy19951005 25.05.16 15:58 Сейчас в теме
ВСЕМ СПАСИБО.

ПОМОГЛО.
8. Andy19951005 25.05.16 16:05 Сейчас в теме
Написал дальше...

ЭтоУслуга = ПроверяемыеРеквизиты.Найти("ЭтоУслуга");
	ПакетныйТур = ПроверяемыеРеквизиты.Найти("ПакетныйТур");
	
	сообщить(ЭтоУслуга);
	
	Если ЗначениеЗаполнено(ЭтоУслуга) Тогда
	иначе
		Если Не ЗначениеЗаполнено(ПакетныйТур) Тогда
		    // Если он не заполнен, сообщим об этом пользователю
		    Сообщение = Новый СообщениеПользователю();
		    Сообщение.Текст = "Не указан ПакетныйТур!";
		    Сообщение.Поле = "ПакетныйТур";
		    Сообщение.Сообщить();
		        
		    ПроверяемыеРеквизиты.Удалить(ПроверяемыеРеквизиты.Найти("ПакетныйТур"));
			
			Отказ = Истина;
	    КонецЕсли;    
	КонецЕсли;
Показать


Выдает ошибку
{Документ.ТА_ЗаявкаНаТур.Форма.ФормаДокумента.Форма(2543)}: Ошибка при вызове метода контекста (Удалить)
ПроверяемыеРеквизиты.Удалить(ПроверяемыеРеквизиты.Найти("ПакетныйТур"));
по причине:
Несоответствие типов (параметр номер '1')
Несоответствие типов (параметр номер '1')

Ругается на строку
ПроверяемыеРеквизиты.Удалить(ПроверяемыеРеквизиты.Найти("ПакетныйТур"));


Почему?
9. uk09 25.05.16 16:11 Сейчас в теме
Проверьте следующее:

Если ЗначениеЗаполнено(ЭтоУслуга) И ЗначениеЗаполнено(ПакетныйТур) Тогда

Для строки Вашего условия:
Если ЗначениеЗаполнено(ЭтоУслуга) Тогда

ЗначениеЗаполнено(ПакетныйТур)=Ложь справедливо
10. Andy19951005 25.05.16 16:35 Сейчас в теме
Задачка:
Реквизит "ЭтоУслуга" - тип булево.
Нужно если "ЭтоУслуга" = истина
тогда не проверять заполненость поля "ПакетныйТур"

Если я закоментирую
//ЭтоУслуга = ПроверяемыеРеквизиты.Найти("ЭтоУслуга");


То выдает ошибку:
{Документ.ТА_ЗаявкаНаТур.Форма.ФормаДокумента.Форма(2534,28)}: Переменная не определена (ЭтоУслуга)
Если Не ЗначениеЗаполнено(<<?>>ЭтоУслуга) Тогда (Проверка: Сервер)


Почему?
11. uk09 25.05.16 17:05 Сейчас в теме
ПакетныйТур = ПроверяемыеРеквизиты.Найти("ПакетныйТур");

///
ПакетныйТур - ссылка на объект, если Найти() отработало положительно
///
.........
.........
Если Не ЗначениеЗаполнено(ПакетныйТур) Тогда
///
   ПакетныйТур = неопределено, значит объекта - нет
///
.........
.........
.........                
     ПроверяемыеРеквизиты.Удалить(ПроверяемыеРеквизиты.Найти("ПакетныйТур"));
Показать


Если объекта - нет, то будет ругаться на попытку удаления
12. Andy19951005 25.05.16 19:00 Сейчас в теме
Проблема не в этом.

Проблема что в процедуре "ОбработкаПроверкиЗаполненияНаСервере"
не находит реквизит "<<?>>ЭтоУслуга"

Почему?
13. uk09 25.05.16 19:10 Сейчас в теме
&НаСервере
Процедура ОбработкаПроверкиЗаполненияНаСервере(Отказ, ПроверяемыеРеквизиты)    
    ЭтоУслуга = ПроверяемыеРеквизиты.Найти("ЭтоУслуга");
сообщить(ЭтоУслуга);
КонецПроцедуры


ЭтоУслуга - неопределено ?
14. Andy19951005 25.05.16 19:22 Сейчас в теме
Да в отладчике выдает
ЭтоУслуга = неопределено
15. Andy19951005 25.05.16 19:26 Сейчас в теме
"ЭтоУслуга" - это реквизит документа - тип "булево" (новый - я добавил).
В процедуре 1С его не видит!
Почему?

Если написать
ЭтоУслуга = ПроверяемыеРеквизиты.Найти("ЭтоУслуга");

тогда видит, но тип неопределено.

Как с этим быть?
16. uk09 25.05.16 19:36 Сейчас в теме
Если написать
ЭтоУслуга = ПроверяемыеРеквизиты.Найти("ЭтоУслуга"); 

тогда видит, но тип неопределено.

Не реквизит видит, а переменную со значением "неопределено"
17. uk09 25.05.16 19:37 Сейчас в теме
ПроверяемыеРеквизиты - чем заполняется?
Напишите процедуру, пожалуйста
18. Andy19951005 25.05.16 19:44 Сейчас в теме
"ЭтоУслуга" - это флаг на форме документа
который должен регулировать необходимость проверки заполнения "ПакетныйТур"

&НаСервере
Процедура ОбработкаПроверкиЗаполненияНаСервере(Отказ, ПроверяемыеРеквизиты)    
	ЭтоУслуга = ПроверяемыеРеквизиты.Найти("ЭтоУслуга");
	ПакетныйТур = ПроверяемыеРеквизиты.Найти("ПакетныйТур");
	
	Если Не ЗначениеЗаполнено(ЭтоУслуга) Тогда
		Если Не ЗначениеЗаполнено(ПакетныйТур) Тогда
		    // Если он не заполнен, сообщим об этом пользователю
		    Сообщение = Новый СообщениеПользователю();
		    Сообщение.Текст = "Не указан ПакетныйТур!";
		    Сообщение.Поле = "ПакетныйТур";
		    Сообщение.Сообщить();
		        
			Отказ = Истина;
		иначе
			ПроверяемыеРеквизиты.Удалить(ПроверяемыеРеквизиты.Найти("ПакетныйТур"));
		КонецЕсли;
	иначе
		Отказ = Ложь;
	КонецЕсли;
КонецПроцедуры
Показать
19. uk09 25.05.16 19:46 Сейчас в теме
флаг на форме документа

а с реквизитом объекта он связан ?
20. Andy19951005 25.05.16 19:47 Сейчас в теме
Форма...
Прикрепленные файлы:
21. uk09 25.05.16 19:47 Сейчас в теме
Если просто флаг на форме, то есть смысл проверять элемент формы
22. Andy19951005 25.05.16 19:49 Сейчас в теме
Конф...
Прикрепленные файлы:
23. Andy19951005 25.05.16 19:52 Сейчас в теме
Если пользователь, поставил этот флаг "ЭтоУслуга",
то 1С не должен требовать обязательное заполнение
поля "ПакетныйТур".
24. uk09 25.05.16 19:53 Сейчас в теме
ПроверяемыеРеквизиты - через что заполняем?
25. uk09 25.05.16 19:55 Сейчас в теме
ЭтоУслуга = ПроверяемыеРеквизиты.Найти("ЭтоУслуга"); 
ПакетныйТур = ПроверяемыеРеквизиты.Найти("ПакетныйТур"); 


ЭтоУслуга - неопределено, а
ПакетныйТур - что присваивается ?
26. uk09 25.05.16 19:58 Сейчас в теме
Если пользователь, поставил этот флаг "ЭтоУслуга",
то 1С не должен требовать обязательное заполнение
поля "ПакетныйТур".

а почему просто не решить через видимость объектов "Выбрать пакетный тур", "Пакетный тур" после установки галочки в "ЭтоУслуга" ?
Andy19951005; +1 Ответить
27. uk09 25.05.16 20:00 Сейчас в теме
Или доступность, если нужно показывать возможности выбора
28. Andy19951005 25.05.16 20:01 Сейчас в теме
ПакетныйТур - неопределено (так же как ЭтоУслуга)
30. Andy19951005 25.05.16 20:10 Сейчас в теме
В принципе подойдет.

Подскажите, пожалуйста, как?

Пишу
&НаСервере
Процедура ЭтоУслугаПриИзмененииНаСервере()
	Если ЭтоУслуга Тогда
		объект.ПакетныйТур
	КонецЕсли;
КонецПроцедуры


Как видимость или доступность управлять?
31. uk09 25.05.16 20:21 Сейчас в теме
&НаКлиенте
Процедура ЭтоУслугаПриИзменении()

  Если ЭтоУслуга Тогда 
    Элемент.ПакетныйТур.Видимость = Ложь;
  КонецЕсли; 

КонецПроцедуры
32. uk09 25.05.16 20:22 Сейчас в теме
"Элемент.ПакетныйТур.Видимость" пишите вручную, чтобы через точки вложенность увидеть, могу и ошибиться, раз пишу вслепую
33. uk09 25.05.16 20:25 Сейчас в теме
Прошу извинить, забыла...

&НаКлиенте 
Процедура ЭтоУслугаПриИзменении() 

  Если ЭтоУслуга Тогда 
    Элемент.ПакетныйТур.Видимость = Ложь;
  Иначе
    Элемент.ПакетныйТур.Видимость = Истина;
  КонецЕсли

КонецЕсли; 
Показать


Доступность - аналогично видимости
Andy19951005; +1 Ответить
34. Andy19951005 25.05.16 20:27 Сейчас в теме
БОЛЬШОЕ СПАСИБО - РАБОТАЕТ!
35. uk09 25.05.16 20:29 Сейчас в теме
С Вас три плюса ! ))
Andy19951005; +1 Ответить
36. Andy19951005 25.05.16 20:33 Сейчас в теме
37. Andy19951005 25.05.16 20:48 Сейчас в теме
Разобрался.
Сделал первое и второе.

Код:
Процедура ОбработкаПроверкиЗаполненияНаСервере(Отказ, ПроверяемыеРеквизиты)
	ПакетныйТур = ПроверяемыеРеквизиты.Найти("ПакетныйТур");
	
	Если объект.ЭтоУслуга = ложь Тогда
		Если ПакетныйТур = Неопределено Тогда
		    Сообщение = Новый СообщениеПользователю();
		    Сообщение.Текст = "Не указан ПакетныйТур!";
		    Сообщение.Поле = "ПакетныйТур";
		    Сообщение.Сообщить();
		        
			Отказ = Истина;
		иначе
			ПроверяемыеРеквизиты.Удалить(ПакетныйТур);
		КонецЕсли;
	иначе
		Отказ = Ложь;
	КонецЕсли;
КонецПроцедуры
Показать
38. u_n_k_n_o_w_n 34 26.07.19 14:59 Сейчас в теме
Добрый день!

Я думаю тоже самое, но более красивее:
Процедура ОбработкаПроверкиЗаполненияНаСервере(Отказ, ПроверяемыеРеквизиты)
	
	ПакетныйТур = ПроверяемыеРеквизиты.Найти("ПакетныйТур");
	
	Отказ = НЕ объект.ЭтоУслуга;
	
	Если Отказ = ложь Тогда
		
        Если Объект.ПакетныйТур = Неопределено Тогда
			
			Сообщение 		= Новый СообщениеПользователю();
            Сообщение.Текст = "Не указан ПакетныйТур!";
            Сообщение.Поле 	= "Объект.ПакетныйТур";
			Сообщение.УстановитьДанные(Объект.Ссылка);
            Сообщение.Сообщить();
			
		КонецЕсли;
		
	КонецЕсли;
	
КонецПроцедуры //ОбработкаПроверкиЗаполненияНаСервере
Показать
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот