|
|
|
При программном изменении реквизита не срабатывают обработчики ПриИзменении Креатив, K1RSAN, Bad_Aleks, Kobol, DemonShinji2, 1cVandal, yalex, Климов Сергей, toypaul, Hawk_1c, ShadowWeaver, eddy_n, программистище, vyaz, fserg84, unenu, zzz_zzz_zzz, JohnGilbert, PR, takefive, DimVad, ZloyBrawler, lEvGl, Timon1405, maxab72, Fish, RomanYS, DiMel_77, vicof, Kigo_Kigo, paramedic, Хряк, PuhUfa, Prog_man, ДенисСмирнов, Волшебник, p-soft, reloc, Trucker, obs191, kubik_live, nick86, azt-yur, inkvizitr
| ☑ | ||
|---|---|---|---|---|
|
0
ShadowWeaver
24.11.25
✎
10:13
|
Всем доброго дня. Может кто подскажет. В расширении для документа "Заказ покупателя" добавляю реквизит "Псевдоним". При его изменении программно подставляется контрагент:
Объект.Контрагент = НайтиЮрЛицоПоУмолчанию(Объект.Псевдоним); Проблема: при таком программном изменении контрагента НЕ срабатывают обработчики ПриИзменении, хотя при ручном изменении через форму всё работает. Как заставить 1С "увидеть" изменение контрагента при программной установке и вызвать всю бизнес-логику как при ручном изменении? |
|||
|
1
Волшебник
24.11.25
✎
10:14
|
вызвать обработчик
|
|||
|
2
ShadowWeaver
24.11.25
✎
10:18
|
Я уже пробовал вызывать ВСЕ обработчики, и они вызываются (видно по отладке), но бизнес-логика не выполняется. В чем может быть причина, что обработчики вызываются, но не выполняют свою логику при программном изменении контрагента?
|
|||
|
3
Волшебник
24.11.25
✎
10:20
|
(2) Не рассказывайте сказки
|
|||
|
4
Fish
гуру
24.11.25
✎
10:23
|
(2) Что-то не сходится.
В (0) написано "НЕ срабатывают обработчики ПриИзменении" в (2) "пробовал вызывать ВСЕ обработчики, и они вызываются (видно по отладке)" Определитесь уже, вызываются нужные обработчики, или нет. |
|||
|
5
ShadowWeaver
24.11.25
✎
10:26
|
&НаКлиенте
Процедура ПЗТПЗТПсевдонимПриИзмененииПеред(Элемент) Если г_ФлагИзменения Тогда Возврат; КонецЕсли; г_ФлагИзменения = Истина; Если Объект.ПЗТПсевдоним = Неопределено Тогда Объект.Контрагент = Неопределено; Иначе Попытка Контрагент = НайтиЮрЛицоПоУмолчанию(Объект.ПЗТПсевдоним); Объект.Контрагент = Контрагент; Исключение Сообщить("Ошибка при определении юрлица по псевдониму: " + ОписаниеОшибки()); Объект.Контрагент = Неопределено; КонецПопытки; КонецЕсли; Если ПЗТПереключательЗонаКМ = "1" Тогда Если ЗначениеЗаполнено(Объект.Контрагент) Тогда ОбновитьЗаголовокПоЗоне(); Иначе Объект.ПЗТЗонаДоставки = Неопределено; Элементы.ПЗТЗонаДоставки.Заголовок = ""; КонецЕсли; КонецЕсли; Если Не ЗначениеЗаполнено(Объект.Грузоотправитель) И ЗначениеЗаполнено(Объект.Контрагент) Тогда Объект.Грузоотправитель = Объект.Контрагент; КонецЕсли; г_ФлагИзменения = Ложь; КонецПроцедуры Вот так я подбираю и подставляю контрагента в реквизит, и обработчик при изминении контрагента - не срабатывает... |
|||
|
6
p-soft
24.11.25
✎
10:26
|
(0) он вызывается только из формы. при программном изменении реквизита обработчики надо тоже вызывать программно.
чаще читайте код стандартных конфиг |
|||
|
7
maxab72
24.11.25
✎
10:26
|
(4) а может они вызываются как у Гоголя "А подать сюда Ляпкина-Тяпкина!". Но после вызова ничего не следует. Обычно в этих интерактивных пишут:
Процедура БольшаяКнопкаУправленияМиромПриИзменении(какойтоконстекст) ОбработкаНажатияБольшойКнопкойУпарвленияМиром(); КонецПроцедуры и при программном изменении вызывают ОбработкаНажатияБольшойКнопкойУпарвленияМиром() |
|||
|
8
ShadowWeaver
24.11.25
✎
10:29
|
пробовал вызвать обработчик после подстановки контрагента, и не работает..
&НаКлиенте Процедура ПЗТПЗТПсевдонимПриИзмененииПеред(Элемент) Если г_ФлагИзменения Тогда Возврат; КонецЕсли; г_ФлагИзменения = Истина; Если Объект.ПЗТПсевдоним = Неопределено Тогда Объект.Контрагент = Неопределено; Иначе Попытка Контрагент = НайтиЮрЛицоПоУмолчанию(Объект.ПЗТПсевдоним); Объект.Контрагент = Контрагент; Исключение Сообщить("Ошибка при определении юрлица по псевдониму: " + ОписаниеОшибки()); Объект.Контрагент = Неопределено; КонецПопытки; КонецЕсли; // Пробовал вызывать так - не работает: КонтрагентПриИзменении(Элементы.Контрагент); Если ПЗТПереключательЗонаКМ = "1" Тогда Если ЗначениеЗаполнено(Объект.Контрагент) Тогда ОбновитьЗаголовокПоЗоне(); Иначе Объект.ПЗТЗонаДоставки = Неопределено; Элементы.ПЗТЗонаДоставки.Заголовок = ""; КонецЕсли; КонецЕсли; Если Не ЗначениеЗаполнено(Объект.Грузоотправитель) И ЗначениеЗаполнено(Объект.Контрагент) Тогда Объект.Грузоотправитель = Объект.Контрагент; КонецЕсли; г_ФлагИзменения = Ложь; КонецПроцедуры |
|||
|
9
lEvGl
гуру
24.11.25
✎
10:29
|
ПЗТПЗТП
ии генерил похоже |
|||
|
10
Волшебник
24.11.25
✎
10:30
|
(9) да и автор бот походу, нулевое логическое мышление, полное отсутствие здравого смысла
|
|||
|
11
ShadowWeaver
24.11.25
✎
10:35
|
Я самый настоящий человек, который просит помощи...
Правильно ли я понял, что после программной установки контрагента нужно вызывать не обработчик ПриИзменении, а процедуру ОбработатьИзменениеКонтрагента()? |
|||
|
12
Fish
гуру
24.11.25
✎
10:36
|
(8) "// Пробовал вызывать так - не работает:
КонтрагентПриИзменении(Элементы.Контрагент);" - Что значит "Не работает"? Не заходит отладчиком в процедуру? |
|||
|
13
ShadowWeaver
24.11.25
✎
10:39
|
(12) Отладчиком смотрел, КонтрагентПриИзменении вызывается, но в документе не подставляется договор, задолженность контрагента и тд.
|
|||
|
14
Fish
гуру
24.11.25
✎
10:41
|
(13) Ну так и иди отладчиком по процедуре КонтрагентПриИзменении. Тогда и увидишь, почему не заполняется.
Мы же не знаем, что у тебя в этой процедуре написано. |
|||
|
15
ShadowWeaver
24.11.25
✎
10:43
|
После выбора Псевдонима и подстановки контрагента, руками выбираешь этого же контрагента - не работает бизнес логика. Если выбрать руками другого контрагента - все работает.
|
|||
|
16
Fish
гуру
24.11.25
✎
10:44
|
(15) Ну так отладчик тебе в помощь. Смотри, что происходит в твоей процедуре "ПриИзменении" и в чём отличие.
|
|||
|
17
ShadowWeaver
24.11.25
✎
10:45
|
Понял, пройду отладчиком по всей цепочке. Спасибо.
|
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |