|
Источник вызова процедур | ☑ | ||
---|---|---|---|---|
0
elevika
09.11.20
✎
14:37
|
Добрый день :)
Прошерстила много инфы, поняла, что в принципе, не возможно программно определить откуда вызвана процедура. Но может у кого-то возникнет др. решение задачи. Задача такая: есть подписка на событие ПриЗаписи() в спр. Номенклатура. Необходимо реализовать следующее. Когда Номенклатура интерактивно, т.е. из формы элемента, выполнить один набор действий. Когда сохранение номенклатуры вызывается программно, то выполняется др. набор действий. Пробовала указать директиву &Наклиенте, но в случает, если юзер запустил вн. обработку, которая в свою очередь программно выполняет сохранение номенклатуры, т.е. должен быть "не интерактивный набор действий", то в подписке все равно отрабатывется &НаКлиете, т.к. фактически вызов с клиента... Уже голову сломала, что можно ещё сделать |
|||
1
shuhard
09.11.20
✎
14:39
|
(0)[Когда сохранение номенклатуры вызывается программно,]
дык передай в доп.параметры флажок |
|||
2
Fish
09.11.20
✎
14:39
|
Для этого же ДополнительныеСвойства существуют.
|
|||
3
ДенисЧ
09.11.20
✎
14:40
|
В дополнительные свойства пихай флаг
|
|||
4
ДНН
09.11.20
✎
14:44
|
||||
5
MishaD
09.11.20
✎
14:46
|
при записи номенклатуры программно процедуры из формы элемента вообще не должны отрабатывать.
|
|||
6
elevika
09.11.20
✎
14:58
|
(5) Отработка идет на процедурах формы, а в процедуре подписки на событие "ПриЗаписи"
|
|||
7
Answer42
09.11.20
✎
14:59
|
(0) В качестве вредного совета - бросить исключение, сразу поймать, посмотреть на стек от него (вроде в последних версиях сделали)...
|
|||
8
RomanYS
09.11.20
✎
15:02
|
(6) Сделай подписку на ОбработкаПроверкиЗаполнения и там установи флаг ДополнительныеСвойства
|
|||
9
elevika
09.11.20
✎
15:02
|
(1) В подписке на событие "Призаписи" передаются два параметра - Источник и Отказ. Источник - это объект Номенклатура. Как передать доп. параметр?
|
|||
10
H A D G E H O G s
09.11.20
✎
15:04
|
Попытка
ВызватьИсключение ""; Исключение СтэкВызова=ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); КонецПопытки; |
|||
11
RomanYS
09.11.20
✎
15:06
|
(7) (10) :)) Интересно, предполагали ли разработчики платформы, для чего будут использовать этот функционал?
|
|||
12
1CnikPetya
09.11.20
✎
15:06
|
(7) (10) За такое стоить бить. Ногами. Рвать сертификаты и выгонять с позором.
|
|||
13
Волшебник
09.11.20
✎
15:07
|
(12) ой, ладно
|
|||
14
Answer42
09.11.20
✎
15:13
|
(11) Думаю, да.
И это, конечно, был аргумент против реализации этой функциональности. Но если пытаться запрещать все вредные варианты использования, то не стоит продавать отвёртки и пр. Например, ЗУП на инициализации одного из параметров сеанса выполняет запрос, выдающий ошибку на Oracle, таким образом понимает что это Oracle и потом (уже глядя на значение этого параметра сеанса) в некоторых местах выполняет другие запросы. Если пытаться это запретить - нужно оторвать конструкцию Попытка / Исключение вообще. |
|||
15
Волшебник
09.11.20
✎
15:15
|
(14) круто
|
|||
16
elevika
09.11.20
✎
15:16
|
(8) Спасибо. Попробую этот вариант
|
|||
17
ДНН
09.11.20
✎
15:31
|
(0) в (4) ведь есть пример.
В модуле формы номенклатуры в событии ПередЗаписьюНаСервере пишите: ТекущийОбъект.ДополнительныеСвойства.Вставить("ЗаписьИзФормы", Истина); В подписке на событие пишите: Если Источник.ДополнительныеСвойства.Свойство("ЗаписьИзФормы") Тогда //код который должен выполняться при интерактивной записи Иначе //код который должен выполняться при программной записи КонецЕсли; |
|||
18
Жан Пердежон
09.11.20
✎
15:36
|
(0) смотря какие действия из формы - возможно, их правильно будет в самом обработчике события формы описать...
|
|||
19
elevika
09.11.20
✎
15:38
|
(17) Спасибо. Но не хотелось трогать модули справочника. Попробую через подписку ОбработкаПроверкиЗаполнения - она вызывается только из формы
|
|||
20
elevika
09.11.20
✎
15:40
|
(18) Вот не хотелось бы трогать модули формы. Поэтому такие навороты пробую
Но я пока ещё думаю, что рациональнее в нашем случае сделать )) |
|||
21
УдавВПопугаях
09.11.20
✎
15:43
|
(19) чего это такое
а где тогда трогать, в подписке что ли? собственно без разницы: когда перебираем обработкой, ДопСвойства.Вставить(), потом где угодно хоть в подписке, хоть нет проверка на ДопСвойства.Свойство(), все. |
|||
22
Жан Пердежон
09.11.20
✎
15:44
|
(20) не трогать форму не получится (если только уже нет вызова ОМ из этого события), в крайнем случае - расширение в помощь
|
|||
23
УдавВПопугаях
09.11.20
✎
15:49
|
(22) форму обработки можно трогать, а конфы и надобности нет. но смотря что за обработки, если не типовые опять же.
|
|||
24
VladZ
09.11.20
✎
15:57
|
(0) Необходимо на этапе постановки задачи всеми фибрами упираться от задачи вида "Здесь играть, здесь не играть, а здесь я рыбу заворачивал".
|
|||
25
alkorolev
09.11.20
✎
15:59
|
(0) в типовом решении (ЕРП или там УТ) куча дополнительных свойств из формы объекта передается (см. событие ПередЗаписьюНаСервере). По-любому их более чем достаточно - даже форму менять не придется
|
|||
26
alkorolev
09.11.20
✎
16:00
|
ЕРП 2.4.11.91
&НаСервере Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) ПараметрыЗаписи.Вставить("ЭтоНоваяНоменклатура", Не ЗначениеЗаполнено(Объект.Ссылка)); ТекущийОбъект.ИспользоватьИндивидуальныйШаблонЭтикетки = Булево(ИспользоватьИндивидуальныйШаблонЭтикетки); ТекущийОбъект.ИспользоватьИндивидуальныйШаблонЦенника = Булево(ИспользоватьИндивидуальныйШаблонЦенника); ТекущийОбъект.ДополнительныеСвойства.Вставить("НаименованиеДляПечатиСформировано"); ТекущийОбъект.ДополнительныеСвойства.Вставить("РабочееНаименованиеСформировано"); ТекущийОбъект.ДополнительныеСвойства.Вставить("СменаВидаНоменклатурыОтработана"); ТекущийОбъект.ДополнительныеСвойства.Вставить("РабочееНаименованиеПроверено", Истина); // Обработчик механизма "Свойства" УправлениеСвойствами.ПередЗаписьюНаСервере(ЭтаФорма, ТекущийОбъект); МодификацияКонфигурацииПереопределяемый.ПередЗаписьюНаСервере(ЭтаФорма, Отказ, ТекущийОбъект, ПараметрыЗаписи); КонецПроцедуры |
|||
27
УдавВПопугаях
09.11.20
✎
16:02
|
(26) это не изменение модуля объекта?
|
|||
28
alkorolev
09.11.20
✎
16:04
|
(27) какой еще модуль объекта? директива указана и предопределенное событие "ПередЗаписьюНаСервере"
|
|||
29
УдавВПопугаях
09.11.20
✎
16:05
|
не то увидел
|
|||
30
elevika
09.11.20
✎
16:31
|
Всем спасибо за советы и обсуждения. Сделала так:
В подписке на событие "ОбработкаПроверкиЗаполнения" вставила Источник.ДополнительныеСвойства.Вставить("ЗаписьИзФормы", Истина); Этот обработчик вызывается только при записи объекта из формы. Соответственно, значение Истина будет установлено только при записи через форму В подписке на событие "ПриЗаписи" вставила проверку значения Источник.ДополнительныеСвойства.Свойство("ЗаписьИзФормы") |
|||
31
alkorolev
09.11.20
✎
16:38
|
(30) необязателнь. Если сделать СправочникОбъект.ПроверитьЗаполнение() то тоже вызовется
|
|||
32
Жан Пердежон
10.11.20
✎
16:38
|
(30) не только из формы, и в общем случае - неправильно:
ОбработкаПроверкиЗаполнения (FillCheckProcessing) Описание: Вызывается расширением формы при необходимости проверки заполнения реквизитов при записи в форме, а также при выполнении метода ПроверитьЗаполнение. |
|||
33
elevika
16.11.20
✎
15:59
|
(31) (32) Вы правы... Увы, без изменения в модуле элемента справочника не обойтись. Пришлось доп. свойство вставлять в ПередЗаписью() там.
|
|||
34
1Сергей
16.11.20
✎
16:03
|
а вот этого не достаточно?
Если ОбменДанными.Загрузка Тогда Возврат; КонецЕсли; |
|||
35
Фрэнки
16.11.20
✎
16:12
|
А мне вот интересно, для кого такого грамотного разработчика в Типовом коде написано
МодификацияКонфигурацииПереопределяемый.ПередЗаписьюНаСервере(ЭтаФорма, Отказ, ТекущийОбъект, ПараметрыЗаписи); Ведь нарочно указано! Бери этот модуль и метод в Расширение с директивой После и дописывай туда хоть черта лысого... Но нет, надо упереться и ни в коем разе типовой код не смотреть. |
|||
36
Ненавижу 1С
гуру
16.11.20
✎
16:15
|
(14) ну так себе средство, могли бы нормальное средство в платформу зашить
и потом это противоречит идеологии "один код - много платформ" |
|||
37
RomanYS
16.11.20
✎
16:16
|
(33) "Пришлось" в смысле столкнулась с вызовом ОбработкаПроверкиЗаполнения ?
|
|||
38
elevika
16.11.20
✎
16:27
|
(35) Да потому что! )))
Эта конфа на обычных формах и платформа 8.3.5 по ряду причин (только не срашивайте, каких!) |
|||
39
elevika
16.11.20
✎
16:31
|
(38) Нет, но во избежание...
|
|||
40
Фрэнки
16.11.20
✎
17:21
|
эхх... никогда заранее не пишите никаких подробностей задачи, а то подсказывать будут слишком быстро и слишком точно
|
|||
41
Фрэнки
16.11.20
✎
17:21
|
:-)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |