Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Источник вызова процедур

Источник вызова процедур
Я
   elevika
 
09.11.20 - 14:37
Добрый день :)
Прошерстила много инфы, поняла, что в принципе, не возможно программно определить откуда вызвана процедура. Но может у кого-то возникнет др. решение задачи.
Задача такая: есть подписка на событие ПриЗаписи() в спр. Номенклатура. Необходимо реализовать следующее. Когда Номенклатура интерактивно, т.е. из формы элемента, выполнить один набор действий. Когда сохранение номенклатуры вызывается программно, то выполняется др. набор действий.
Пробовала указать директиву &Наклиенте, но в случает, если юзер запустил вн. обработку, которая в свою очередь программно выполняет сохранение номенклатуры, т.е. должен быть "не интерактивный набор действий", то в подписке все равно отрабатывется &НаКлиете, т.к. фактически вызов с клиента...
Уже голову сломала, что можно ещё сделать
   shuhard
 
1 - 09.11.20 - 14:39
(0)[Когда сохранение номенклатуры вызывается программно,]
дык передай в доп.параметры флажок
   Fish
 
2 - 09.11.20 - 14:39
Для этого же ДополнительныеСвойства существуют.
   ДенисЧ
 
3 - 09.11.20 - 14:40
В дополнительные свойства пихай флаг
   ДНН
 
4 - 09.11.20 - 14:44
   MishaD
 
5 - 09.11.20 - 14:46
при записи номенклатуры программно процедуры из формы элемента вообще не должны отрабатывать.
   elevika
 
6 - 09.11.20 - 14:58
(5) Отработка идет на процедурах формы, а в процедуре подписки на событие "ПриЗаписи"
   Answer42
 
7 - 09.11.20 - 14:59
(0)  В качестве вредного совета - бросить исключение, сразу поймать, посмотреть на стек от него (вроде в последних версиях сделали)...
   RomanYS
 
8 - 09.11.20 - 15:02
(6) Сделай подписку на ОбработкаПроверкиЗаполнения и там установи флаг ДополнительныеСвойства
   elevika
 
9 - 09.11.20 - 15:02
(1) В подписке на событие "Призаписи" передаются два параметра - Источник и Отказ. Источник - это объект Номенклатура. Как передать доп. параметр?
   H A D G E H O G s
 
10 - 09.11.20 - 15:04
Попытка
        ВызватьИсключение "";
    Исключение
        СтэкВызова=ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
    КонецПопытки;
   RomanYS
 
11 - 09.11.20 - 15:06
(7) (10) :)) Интересно, предполагали ли разработчики платформы, для чего будут использовать этот функционал?
   1CnikPetya
 
12 - 09.11.20 - 15:06
(7) (10) За такое стоить бить. Ногами. Рвать сертификаты и выгонять с позором.
   Волшебник
 
13 - 09.11.20 - 15:07
(12) ой, ладно
   Answer42
 
14 - 09.11.20 - 15:13
(11) Думаю, да.
И это, конечно, был аргумент против реализации этой функциональности.
Но если пытаться запрещать все вредные варианты использования, то не стоит продавать отвёртки и пр.
Например, ЗУП на инициализации одного из параметров сеанса выполняет запрос, выдающий ошибку на Oracle, таким образом понимает что это Oracle и потом (уже глядя на значение этого параметра сеанса) в некоторых местах выполняет другие запросы. Если пытаться это запретить - нужно оторвать конструкцию Попытка / Исключение вообще.
   Волшебник
 
15 - 09.11.20 - 15:15
(14) круто
   elevika
 
16 - 09.11.20 - 15:16
(8) Спасибо. Попробую этот вариант
   ДНН
 
17 - 09.11.20 - 15:31
(0) в (4) ведь есть пример.
В модуле формы номенклатуры в событии ПередЗаписьюНаСервере пишите:
ТекущийОбъект.ДополнительныеСвойства.Вставить("ЗаписьИзФормы", Истина);

В подписке на событие пишите:
Если Источник.ДополнительныеСвойства.Свойство("ЗаписьИзФормы") Тогда
//код который должен выполняться при интерактивной записи

Иначе
//код который должен выполняться при программной записи

КонецЕсли;
   Жан Пердежон
 
18 - 09.11.20 - 15:36
(0) смотря какие действия из формы - возможно, их правильно будет в самом обработчике события формы описать...
   elevika
 
19 - 09.11.20 - 15:38
(17) Спасибо. Но не хотелось трогать модули справочника. Попробую через подписку ОбработкаПроверкиЗаполнения - она вызывается только из формы
   elevika
 
20 - 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) форму обработки можно трогать, а конфы и надобности нет. но смотря что за обработки, если не типовые опять же.
   VladZ
 
24 - 09.11.20 - 15:57
(0) Необходимо на этапе постановки задачи всеми фибрами упираться от задачи вида "Здесь играть, здесь не играть, а здесь я рыбу заворачивал".
   alkorolev
 
25 - 09.11.20 - 15:59
(0) в типовом решении (ЕРП или там УТ) куча дополнительных свойств из формы объекта передается (см. событие ПередЗаписьюНаСервере). По-любому их более чем достаточно - даже форму менять не придется
   alkorolev
 
26 - 09.11.20 - 16:00
ЕРП 2.4.11.91
&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
    
    ПараметрыЗаписи.Вставить("ЭтоНоваяНоменклатура", Не ЗначениеЗаполнено(Объект.Ссылка));
    
    ТекущийОбъект.ИспользоватьИндивидуальныйШаблонЭтикетки = Булево(ИспользоватьИндивидуальныйШаблонЭтикетки);
    ТекущийОбъект.ИспользоватьИндивидуальныйШаблонЦенника  = Булево(ИспользоватьИндивидуальныйШаблонЦенника);
    
    ТекущийОбъект.ДополнительныеСвойства.Вставить("НаименованиеДляПечатиСформировано");
    ТекущийОбъект.ДополнительныеСвойства.Вставить("РабочееНаименованиеСформировано");
    ТекущийОбъект.ДополнительныеСвойства.Вставить("СменаВидаНоменклатурыОтработана");
    ТекущийОбъект.ДополнительныеСвойства.Вставить("РабочееНаименованиеПроверено", Истина);
    
    // Обработчик механизма "Свойства"

    УправлениеСвойствами.ПередЗаписьюНаСервере(ЭтаФорма, ТекущийОбъект);
    
    МодификацияКонфигурацииПереопределяемый.ПередЗаписьюНаСервере(ЭтаФорма, Отказ, ТекущийОбъект, ПараметрыЗаписи);
    
КонецПроцедуры
   УдавВПопугаях
 
27 - 09.11.20 - 16:02
(26) это не изменение модуля объекта?
   alkorolev
 
28 - 09.11.20 - 16:04
(27) какой еще модуль объекта? директива указана и предопределенное событие "ПередЗаписьюНаСервере"
   УдавВПопугаях
 
29 - 09.11.20 - 16:05
не то увидел
   elevika
 
30 - 09.11.20 - 16:31
Всем спасибо за советы и обсуждения. Сделала так:
В подписке на событие "ОбработкаПроверкиЗаполнения" вставила Источник.ДополнительныеСвойства.Вставить("ЗаписьИзФормы", Истина);
Этот обработчик вызывается только при записи объекта из формы. Соответственно, значение Истина будет установлено только при записи через форму

В подписке на событие "ПриЗаписи" вставила проверку значения Источник.ДополнительныеСвойства.Свойство("ЗаписьИзФормы")
 
 Рекламное место пустует
   alkorolev
 
31 - 09.11.20 - 16:38
(30) необязателнь. Если сделать СправочникОбъект.ПроверитьЗаполнение() то тоже вызовется
   Жан Пердежон
 
32 - 10.11.20 - 16:38
(30) не только из формы, и в общем случае - неправильно:

ОбработкаПроверкиЗаполнения (FillCheckProcessing)
Описание:
Вызывается расширением формы при необходимости проверки заполнения реквизитов при записи в форме, а также при выполнении метода ПроверитьЗаполнение.
   elevika
 
33 - 16.11.20 - 15:59
(31) (32) Вы правы... Увы, без изменения в модуле элемента справочника не обойтись. Пришлось доп. свойство вставлять в ПередЗаписью() там.
   1Сергей
 
34 - 16.11.20 - 16:03
а вот этого не достаточно?
Если ОбменДанными.Загрузка Тогда
     Возврат;
КонецЕсли;
   Фрэнки
 
35 - 16.11.20 - 16:12
А мне вот интересно, для кого такого грамотного разработчика в Типовом коде написано
МодификацияКонфигурацииПереопределяемый.ПередЗаписьюНаСервере(ЭтаФорма, Отказ, ТекущийОбъект, ПараметрыЗаписи);

Ведь нарочно указано!

Бери этот модуль и метод в Расширение с директивой После и дописывай туда хоть черта лысого... Но нет, надо упереться и ни в коем разе типовой код не смотреть.
   Ненавижу 1С
 
36 - 16.11.20 - 16:15
(14) ну так себе средство, могли бы нормальное средство в платформу зашить
и потом это противоречит идеологии "один код - много платформ"
   RomanYS
 
37 - 16.11.20 - 16:16
(33) "Пришлось" в смысле столкнулась с вызовом ОбработкаПроверкиЗаполнения ?
   elevika
 
38 - 16.11.20 - 16:27
(35) Да потому что! )))
Эта конфа на обычных формах и платформа 8.3.5 по ряду причин (только не срашивайте, каких!)
   elevika
 
39 - 16.11.20 - 16:31
(38) Нет, но во избежание...
   Фрэнки
 
40 - 16.11.20 - 17:21
эхх... никогда заранее не пишите никаких подробностей задачи, а то подсказывать будут слишком быстро и слишком точно
   Фрэнки
 
41 - 16.11.20 - 17:21
:-)


Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.