Как обратиться через форму документа к реквизиту справочника?

1. user2070470 03.12.24 10:39 Сейчас в теме
БП Корп 8.3.25.1374/3.0.163.26 работа на расширении.
Задача: Недопустить создание документа реализации по контрагентам физическим лицам с цифрами (номерами лицевых счетов) в ФИО.

Как обратиться к справочнику Контрагенты как физическому лицу?
1.
Пытался через запрос в модуле формы Документ РеализацияТоваровУслуг: ФормаДокументаТовары
&НаСервереБезКонтекста
Функция ПроверитьЗаполненностьНаСервере(Контрагент, ДоговорКонтрагента)
Запрос = Новый Запрос();
	//Запрос.УстановитьПараметр("ФизическоеЛицо", ФизическоеЛицо);
	Запрос.Текст = 
	"ВЫБРАТЬ
	|    Контрагенты.ЮридическоеФизическоеЛицо КАК ЮридическоеФизическоеЛицо
	|ИЗ
	|    Справочник.Контрагенты КАК Контрагенты
	|ГДЕ
	|    Контрагенты.ЮридическоеФизическоеЛицо = &ФизическоеЛицо";  
	Запрос.Параметры.Вставить("ФизическоеЛицо",ФизическоеЛицо);
	ВыборКонтрагента = Запрос.Выполнить().Выбрать(); 
Показать

Ошибка: Переменная не определена (ФизическоеЛицо)
2.
Пытался проверить на наличие цифр без запроса:
Контрагент = Объект.Контрагент; 
Если Контрагент.УникальныйИдентификатор() = ПредопределенноеЗначение("Перечисление.ЮридическоеФизическоеЛицо.ФизическоеЛицо") Тогда
	РезультатПроверкиФЛ = СтроковыеФункцииКлиентСерверРФ.ТолькоКириллицаВСтроке(Контрагент.Наименование, Ложь, "0123456789");
	Если Не РезультатПроверкиФЛ Тогда
		Сообщить("В наименовании ФЛ недопустимые символы");
		Отказ = Истина;
	КонецЕсли;
КонецЕсли;

Ошибка: Переменная не определена (Объект) Почему? Ведь, судя по форме (см. скриншот) путь прописан правильно.
Прикрепленные файлы:
По теме из базы знаний
Найденные решения
41. lehis_S 06.12.24 09:15 Сейчас в теме
(38)
&НаСервере
Функция ПроверитьЗаполненностьНаСервере(Контрагент, ДоговорКонтрагента)
	
	Отказ = Ложь;
	Если Контрагент.ЮридическоеФизическоеЛицо = ПредопределенноеЗначение("Перечисление.ЮридическоеФизическоеЛицо.ФизическоеЛицо") Тогда
		РезультатПроверкиФЛ = СтроковыеФункцииКлиентСерверРФ.ТолькоКириллицаВСтроке(Контрагент.Наименование, Ложь, "0123456789");
		Если Не РезультатПроверкиФЛ Тогда
			Сообщение = Новый СообщениеПользователю;
			Сообщение.Текст = "В наименовании ФЛ недопустимые символы";
			Сообщение.Сообщить();
			Отказ = Истина;
		КонецЕсли;
	КонецЕсли;
	
	Возврат Отказ;
	
КонецФункции	
Показать
user2070470; +1 Ответить
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. RustamZz 03.12.24 10:42 Сейчас в теме
(1) Потому что без контекста нет ни Объекта, ни ФизическогоЛица. Ничего нет.
orakool; user2070470; +2 Ответить
10. user1863362 03.12.24 11:30 Сейчас в теме
(1)
Если Контрагент.УникальныйИдентификатор() = ПредопределенноеЗначение("Перечисление.ЮридическоеФизическоеЛицо.ФизическоеЛицо") Тогда
Кросивое!
orakool; Sashares; +2 Ответить
12. user2116971 03.12.24 11:32 Сейчас в теме
(10) Ого, ты аж до сюда дочитал...
15. user2070470 03.12.24 11:41 Сейчас в теме
(10) Этот код при отладке не выдаёт ошибки, но он и ничего не делает..
16. user2116971 03.12.24 11:42 Сейчас в теме
(15) Потому что он не является ошибочным, но и не является продуктивным. Обычная профанация и видимость деятельности.
3. user790109 10 03.12.24 11:03 Сейчас в теме
Ознакомься что такое &НаСервереБезКонтекста
https://its.1c.ru/db/v8std#content:636:hdoc
Bukaska; user2070470; +2 Ответить
4. user2070470 03.12.24 11:08 Сейчас в теме
(2) Спасибо.
Почему в запросе
Контрагенты.ЮридическоеФизическоеЛицо = &ФизическоеЛицо
не является тем самым контекстом?

Пробовал через отдельную процедуру, явно указав Документ. Но в этом случае вне контекста оказалось Перечисление
&НаКлиенте
Процедура ДК1_КонтрагентНачалоВыбораПосле(Документ, Отказ) 
Контрагент = Документ.Контрагент;
Если Контрагент.Наименование =  Перечисление.ЮридическоеФизическоеЛицо.ФизическоеЛицо Тогда...

Есть универсальный способ задать контекст?
5. RustamZz 03.12.24 11:11 Сейчас в теме
(4)
Есть универсальный способ задать контекст?
Не использовать БезКонтекста.
user2070470; +1 Ответить
6. user2116971 03.12.24 11:11 Сейчас в теме
(4) А разве запрос использует форму?
7. Denis_CFO 49 03.12.24 11:16 Сейчас в теме
(6) ФизическоеЛицо - в данном случае контекст формы. Ваш КЭП :)
8. user2116971 03.12.24 11:17 Сейчас в теме
(7) А ты точно своим ответом попал в правильную контекстную ветку?
9. Denis_CFO 49 03.12.24 11:29 Сейчас в теме
(8) Если ФизическоеЛицо - реквизит формы, то точно туда :)
11. user2116971 03.12.24 11:31 Сейчас в теме
(9) Слушай, откуда ты такой непонятливый постоянно берешься?
13. Denis_CFO 49 03.12.24 11:33 Сейчас в теме
14. user2070470 03.12.24 11:36 Сейчас в теме
(9) В моём случае реквизит Контрагента ЮридическоеФизическоеЛицо тип Перечисления со значениями ФизическоеЛицо и ЮридическоеЛицо.
17. Denis_CFO 49 03.12.24 11:43 Сейчас в теме
(14) Тут разговор чуть-чуть про другое. Не важно, какое там значение реквизиты формы. Разговор идёт о том, что при применении директивы &НаСервереБезКонтекста - процедура/функция не имеет никакого представления о форме, а тем более о переменных/реквизитах, которые на ней имеются. Но может принимать на вход простые типы.
18. user2116971 03.12.24 11:44 Сейчас в теме
(17)
Но может принимать на вход простые типы.
Простые типы? Что это такое?
19. user1863362 03.12.24 11:47 Сейчас в теме
(18)
Простые типы? Что это такое?
Это сложно.
user620512; orakool; Bukaska; Sashares; Denis_CFO; +5 Ответить
21. user2116971 03.12.24 13:39 Сейчас в теме
(18) Оставлю тут историю фраерского слива. А то ту тему все равно снесут админы.

ТС! Никогда не слушай таких вот шарлатанов!!!
Прикрепленные файлы:
20. LeeAreHim 03.12.24 12:55 Сейчас в теме
(4)
Перечисление.ЮридическоеФизическоеЛицо.ФизическоеЛицо

Попробуйте вместо этого
ПредопределенноеЗначение("Перечисление.ЮридическоеФизическоеЛицо.ФизическоеЛицо")

И посмотрите доступность перечислений
22. user2116971 03.12.24 13:42 Сейчас в теме
(20) Как ему этот совет поможет сравнить ГУИД ссылки Справочника и ссылку Перечисления? Именно это он и пытается сделать в своем коде.
Тут хоть запредопределяйся, но сравнение не будет работать.

// А в другом месте он вообще пытается сравнить перечисление с наименованием, да еще и с ошибкой написанное (там даже до сравнения дело не дойдет, упадет на синтаксисе).
24. LeeAreHim 04.12.24 14:32 Сейчас в теме
25. user2070470 04.12.24 15:26 Сейчас в теме
(22) Попытка обратиться непосредственно к перечислениям ни к чему не привела:
&НаКлиенте
Процедура ДК1_ПриОткрытииПосле(Отказ)

//Контрагенты = Объект.Контрагент;
//Контрагенты = Метаданные.Документы.РеализацияТоваровУслуг.Реквизиты.Контрагент;
//Контрагенты = Справочники.Контрагенты.ЭтоФизическоеЛицо(Контрагент);
//Контрагенты = Справочники.Контрагенты.
//Контрагенты = Метаданные.Документы.ЗакупкаТоваров.Реквизиты
//Контрагенты = ЭтотОбъект.  
//Контрагенты = УправлениеСвойствами.ЗначениеСвойства(Контрагенты, "ЮридическоеФизическоеЛицо");
//Контрагенты = ПеречислениеСсылка.ЮридическоеФизическоеЛицо;

Контрагенты = Перечисления.ЮридическоеФизическоеЛицо.ФизическоеЛицо;
Если Контрагенты = ПредопределенноеЗначение("Перечисление.ЮридическоеФизическоеЛицо.ФизическоеЛицо") Тогда
	РезультатПроверкиФЛ = СтроковыеФункцииКлиентСерверРФ.ТолькоКириллицаВСтроке(Объект.Контрагент, Ложь, "-");
	Если Не РезультатПроверкиФЛ Тогда
		Сообщить("В наименовании ФЛ недопустимые символы");
		Отказ = Истина;
	КонецЕсли;
КонецЕсли;	
Показать

Как прописать обращение к перечислению ЮридическоеФизическоеЛицо реквизита справочника Контрагенты?
Прикрепленные файлы:
26. user2116971 04.12.24 15:35 Сейчас в теме
(25) 1. Дружно идём учить доступность менеджеров метаданных в клиент-серверной модели. Проще говоря - смотрим СП.

2. Ты чего проверяешь-то? Те не хочешь обратиться, например, к реквизиту контрагента? Ну к тому самому, который содержит непосредственное значение перечисления? Не? Бред?
27. user1837694 04.12.24 18:29 Сейчас в теме
(26) 1. Извините, я не понял что такое СП
2. В примере же видно, что я обращался, там закомментировано.
28. user2116971 04.12.24 18:31 Сейчас в теме
(27) 1. Структура Предприятия
2. Не видно. Покажи конкретную строчку обращения к реквизиту.

Ну хорошо. Зададим вопрос попроще. Что такое реквизит?
user2070470; +1 Ответить
29. user1837694 04.12.24 18:59 Сейчас в теме
(28) 2. Спасибо, user2116971, я, кажется, понял:
1. Нужно обращаться через Метаданные, которые недоступны.

Переменная не определена. Значит, остаётся только вариант через запрос.
30. пользователь 04.12.24 19:04
Сообщение было скрыто модератором.
...
31. user2070470 05.12.24 13:11 Сейчас в теме
(29) Оказалось, Метаданные недоступны &НаКлиенте.
&НаСервере доступны, но ПредопределенноеЗначение Переменная не определена
КонтрагентыФЛ =  Метаданные.Справочники.Контрагенты.Реквизиты.ЮридическоеФизическоеЛицо;
Если КонтрагентыФЛ = ПредопределенноеЗначение("Перечисление.ЮридическоеФизическоеЛицо.ФизическоеЛицо") Тогда

Как обратиться к перечислению справочника?
Прикрепленные файлы:
32. Sashares 35 05.12.24 13:28 Сейчас в теме
(31) Почитайте хотя бы Радченко, вопросов будет меньше.
Вы вообще не понимаете что делаете.
Радченко поможет понять основы.
https://its.1c.ru/db/pubdevguide83
user2070470; +1 Ответить
33. user2070470 05.12.24 13:48 Сейчас в теме
(32) У Радченко есть глава о перечислениях, но нет ничего о метаданных и предопределенном значении. Что именно не то я делаю?
34. Sashares 35 05.12.24 13:59 Сейчас в теме
(33)
Что именно не то я делаю?

Все.

Метаданные это структура конфигурации. В метаданных содержится, какие в конфигурации есть справочники, документы и какие у них есть реквизиты, какого типа эти реквизиты.
user2070470; +1 Ответить
35. user2070470 05.12.24 16:40 Сейчас в теме
(34) Спасибо, вы очень помогли. На Сервере изначально надо было обращаться через метаданные:
КонтрагентыФЛ =  Метаданные.Справочники.Контрагенты.Реквизиты.ЮридическоеФизическоеЛицо;
Если КонтрагентыФЛ = Метаданные.Перечисления.ЮридическоеФизическоеЛицо.ЗначенияПеречисления.ФизическоеЛицо Тогда

Однако далее, при проверке на наличие цифр в наименовании контрагента в документе РеализацияТоваровУслуг, обращение через метаданные не срабатывает:
РезультатПроверкиФЛ = СтроковыеФункцииКлиентСерверРФ.ТолькоКириллицаВСтроке(Метаданные.Документы.РеализацияТоваровУслуг.Реквизиты.Контрагент.Имя, Ложь, "0123456789");
36. user2116971 05.12.24 16:42 Сейчас в теме
(35) Не останавливайся, твори!!!
orakool; lehis_S; user2070470; +3 Ответить
37. Sashares 35 05.12.24 16:42 Сейчас в теме
(35) Нет, все не верно.
user2070470; +1 Ответить
38. user2070470 06.12.24 08:48 Сейчас в теме
При попытке обратиться из документа РеализацияТоваровУслуг к перечислению &НаКлиенте через ПредопределенноеЗначение

Контрагент = Объект.Контрагент;
	Если Контрагент = ПредопределенноеЗначение("Перечисление.ЮридическоеФизическоеЛицо.ФизическоеЛицо") Тогда

Контрагента видит, а ПредопределенноеЗначение пишет: переменная не определена.
Возможно обратиться из документа в перечисление справочника?
39. user1936660 06.12.24 09:00 Сейчас в теме
(38)
перечисление справочника
Ух ты!

"Война и мир" на печатных машинках...
40. user2070470 06.12.24 09:14 Сейчас в теме
(39) Я заблудился в трёх соснах: Документ > Справочник > Перечисления
И двух кустах: &НаКлиенте и &НаСервере
42. lehis_S 06.12.24 09:22 Сейчас в теме
(40) Откройте отладку там же все видно, какие реквизиты у объекта, какого они типа и т.д.
43. user2116971 06.12.24 09:26 Сейчас в теме
(42) Человек не знает, что такое реквизит, о чем ты?
41. lehis_S 06.12.24 09:15 Сейчас в теме
(38)
&НаСервере
Функция ПроверитьЗаполненностьНаСервере(Контрагент, ДоговорКонтрагента)
	
	Отказ = Ложь;
	Если Контрагент.ЮридическоеФизическоеЛицо = ПредопределенноеЗначение("Перечисление.ЮридическоеФизическоеЛицо.ФизическоеЛицо") Тогда
		РезультатПроверкиФЛ = СтроковыеФункцииКлиентСерверРФ.ТолькоКириллицаВСтроке(Контрагент.Наименование, Ложь, "0123456789");
		Если Не РезультатПроверкиФЛ Тогда
			Сообщение = Новый СообщениеПользователю;
			Сообщение.Текст = "В наименовании ФЛ недопустимые символы";
			Сообщение.Сообщить();
			Отказ = Истина;
		КонецЕсли;
	КонецЕсли;
	
	Возврат Отказ;
	
КонецФункции	
Показать
user2070470; +1 Ответить
Оставьте свое сообщение

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