Убрать из формы переключатель по условию
В 1С БП Корп через расширение документ РеализацияТоваровУслуг.ФормаРеквизитыОрганизацииКонтрагентаУслуг расположен реквизит РаспределениеМП с двумя полями переключателя: ЮЛ и ГРП (см. скрин1) , подтягивающих по умолчанию значения перечисления ЮЛ из процедуры &НаСервере ДК1_ПриСозданииНаСервереВместо(Отказ, СтандартнаяОбработка)
Задачей стоит убрать из формы переключатель РаспредлелниеМП, если контрагент - физическое лицо.
Пробовал реализовать через событие ПриИзменении (см. скрин2)
Но по отладке не заходит.
Если ЭтаФорма.РаспредлениеМПМеждуОтделомИГРП.Пустая() Тогда
ЭтаФорма.РаспредлениеМПМеждуОтделомИГРП = Перечисления.ДК1_РаспределениеМП.РаспределениеМПЮЛ
Задачей стоит убрать из формы переключатель РаспредлелниеМП, если контрагент - физическое лицо.
Пробовал реализовать через событие ПриИзменении (см. скрин2)
&НаКлиенте
&ИзменениеИКонтроль ("ПриОткрытииПосле")
Процедура ДК1_ПриОткрытииПосле(Отказ)
#Вставка
Если Контрагент = ПредопределенноеЗначение ("Перечисление.ЮридическоеФизическоеЛицо.ФизическоеЛицо") Тогда
ЭтаФорма.РаспредлениеМПМеждуОтделомИГРП = Неопределено;
КонецЕсли;
ОбновитьИнтрфейс();
#КонецВставки
КонецПроцедуры
ПоказатьНо по отладке не заходит.
Прикрепленные файлы:


По теме из базы знаний
- Синхронизация 1С и OpenCart
- Опыт внедрения ESB (интеграционной шины) в ПАО "Газпром нефть"
- Разработка и сценарное тестирование с Vanessa-ADD. Практические примеры сценариев. Шаги встроенной библиотеки
- Консоль кода с поддержкой объявления процедур и функций, с дополнительными функциями отслеживания и вывода значений
- Работа с контактной информацией. Часть 2
Найденные решения
И китайский DeepSeek и Grok3 Маска указали на все ошибки:
1. Событие ПриОткрытииПосле зависит от момента открытия формы, а проверка выполняется только один раз, код может не срабатывать, если данные контрагента еще не загрузились или изменились позже. Нужно использовать ПриИзменении.
2. Неправильное сравнение типа контрагента. Контрагент — это ссылка на справочник "Контрагенты", а не значение перечисления ЮридическоеФизическоеЛицо.
3. Перечисления не могут принимать значение Неопределено. Установка Неопределено не скрывает переключатель.
4. ОбновитьИнтерфейс() не влияет на видимость конкретного элемента формы.
А рабочий код выдал Grok3:
1. Событие ПриОткрытииПосле зависит от момента открытия формы, а проверка выполняется только один раз, код может не срабатывать, если данные контрагента еще не загрузились или изменились позже. Нужно использовать ПриИзменении.
2. Неправильное сравнение типа контрагента. Контрагент — это ссылка на справочник "Контрагенты", а не значение перечисления ЮридическоеФизическоеЛицо.
3. Перечисления не могут принимать значение Неопределено. Установка Неопределено не скрывает переключатель.
4. ОбновитьИнтерфейс() не влияет на видимость конкретного элемента формы.
А рабочий код выдал Grok3:
// Перехват события "ПриСозданииНаСервере" для проверки при открытии формы
&Вместо("ПриСозданииНаСервере")
Процедура ДК1_ПриСозданииНаСервереВместо(Отказ, СтандартнаяОбработка)
// Вызываем стандартную обработку
ПродолжитьВызов(Отказ, СтандартнаяОбработка);
// Проверяем тип контрагента и обновляем видимость
ОбновитьВидимостьРаспределенияМП();
КонецПроцедуры
// Перехват события "КонтрагентПриИзменении" для обработки изменения контрагента
&Вместо("КонтрагентПриИзменении")
Процедура ДК1_КонтрагентПриИзмененииВместо(Элемент)
// Вызываем стандартную обработку
ПродолжитьВызов(Элемент);
// Обновляем видимость на сервере
ОбновитьВидимостьРаспределенияМП();
КонецПроцедуры
// Процедура для управления видимостью переключателя
&НаСервере
Процедура ОбновитьВидимостьРаспределенияМП()
// Проверяем, заполнен ли контрагент
Если ЗначениеЗаполнено(Контрагент) Тогда
// Получаем тип контрагента
ТипКонтрагента = Контрагент.ЮридическоеФизическоеЛицо;
// Если контрагент - физическое лицо, скрываем переключатель
Если ТипКонтрагента = Перечисления.ЮридическоеФизическоеЛицо.ФизическоеЛицо Тогда
Элементы.РаспределениеМП.Видимость = Ложь;
Иначе
Элементы.РаспределениеМП.Видимость = Истина;
КонецЕсли;
Иначе
// Если контрагент не заполнен, показываем переключатель (или скрываем, в зависимости от вашей логики)
Элементы.РаспределениеМП.Видимость = Истина;
КонецЕсли;
КонецПроцедуры
ПоказатьОстальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
И китайский DeepSeek и Grok3 Маска указали на все ошибки:
1. Событие ПриОткрытииПосле зависит от момента открытия формы, а проверка выполняется только один раз, код может не срабатывать, если данные контрагента еще не загрузились или изменились позже. Нужно использовать ПриИзменении.
2. Неправильное сравнение типа контрагента. Контрагент — это ссылка на справочник "Контрагенты", а не значение перечисления ЮридическоеФизическоеЛицо.
3. Перечисления не могут принимать значение Неопределено. Установка Неопределено не скрывает переключатель.
4. ОбновитьИнтерфейс() не влияет на видимость конкретного элемента формы.
А рабочий код выдал Grok3:
1. Событие ПриОткрытииПосле зависит от момента открытия формы, а проверка выполняется только один раз, код может не срабатывать, если данные контрагента еще не загрузились или изменились позже. Нужно использовать ПриИзменении.
2. Неправильное сравнение типа контрагента. Контрагент — это ссылка на справочник "Контрагенты", а не значение перечисления ЮридическоеФизическоеЛицо.
3. Перечисления не могут принимать значение Неопределено. Установка Неопределено не скрывает переключатель.
4. ОбновитьИнтерфейс() не влияет на видимость конкретного элемента формы.
А рабочий код выдал Grok3:
// Перехват события "ПриСозданииНаСервере" для проверки при открытии формы
&Вместо("ПриСозданииНаСервере")
Процедура ДК1_ПриСозданииНаСервереВместо(Отказ, СтандартнаяОбработка)
// Вызываем стандартную обработку
ПродолжитьВызов(Отказ, СтандартнаяОбработка);
// Проверяем тип контрагента и обновляем видимость
ОбновитьВидимостьРаспределенияМП();
КонецПроцедуры
// Перехват события "КонтрагентПриИзменении" для обработки изменения контрагента
&Вместо("КонтрагентПриИзменении")
Процедура ДК1_КонтрагентПриИзмененииВместо(Элемент)
// Вызываем стандартную обработку
ПродолжитьВызов(Элемент);
// Обновляем видимость на сервере
ОбновитьВидимостьРаспределенияМП();
КонецПроцедуры
// Процедура для управления видимостью переключателя
&НаСервере
Процедура ОбновитьВидимостьРаспределенияМП()
// Проверяем, заполнен ли контрагент
Если ЗначениеЗаполнено(Контрагент) Тогда
// Получаем тип контрагента
ТипКонтрагента = Контрагент.ЮридическоеФизическоеЛицо;
// Если контрагент - физическое лицо, скрываем переключатель
Если ТипКонтрагента = Перечисления.ЮридическоеФизическоеЛицо.ФизическоеЛицо Тогда
Элементы.РаспределениеМП.Видимость = Ложь;
Иначе
Элементы.РаспределениеМП.Видимость = Истина;
КонецЕсли;
Иначе
// Если контрагент не заполнен, показываем переключатель (или скрываем, в зависимости от вашей логики)
Элементы.РаспределениеМП.Видимость = Истина;
КонецЕсли;
КонецПроцедуры
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот