Имя: Пароль:
1C
1C 7.7
v7: Есть ли событие "после записи элемента справочника"
,
0 GrayS19
 
04.05.23
16:52
Делаю обмен с другой программой - выгружаю значения изменившегося элемента справочника в файл. В форме справочника в Процедуре ПриЗаписи() передаю в ГМ ТекущийЭлемент(), но он, естественно, ещё не записан, в нём старое значение. Можно ли поймать событие, когда элемент уже обновлён ? Выкрутился, сделал через ОбработкуОжидания() - читаю его через 1 секунду, он уже записан, но как-то некрасиво.
1 vladmenleo
 
04.05.23
16:58
(0) Выгружаешь в файл - там ведь новые значения? передавай в глобал просто ссылку, а там спр = создатьобъект("твойсправочник"); спр.найтиэлемент(твойэлемент) и будет твое нужное значение
2 FN
 
04.05.23
18:06
Включи УРБД. В таблице _1SUPDTS будут все измененные объекты (даже измененные кодом/обработками).
3 Злопчинский
 
04.05.23
22:37
Можно без УРБД.
В конце процедуры ПриЗаписи генеришь Формексом асинхронное событие, которое отрабатывает после завершения транзакции записи.
У меня так кучу лет работает автообмен 7.7 с WMS.
4 Злопчинский
 
04.05.23
22:41
глСервис.ВнешнееСобытие("FAKIR", "ИЗМЕНЕНИЕНОМЕНКЛАТУРА", ЗначениеВСтрокуВнутр(ТекущийЭлемент()));
   //[*]_progadmin, 22.08.2013, ДОБАВЛЕНО НЕТИПОВОЕ
    
КонецПроцедуры // ПриЗаписи()
5 Злопчинский
 
04.05.23
22:43
Процедура глОбработкаВнешнегоСобытия(Источник, Событие, Данные) Экспорт
    
    Если (Источник = "A100Online") ИЛИ (Источник = "A200Online") Тогда
        
        глОбработкаСобытияОтККМ(Источник, Событие, Данные);    

//[+]progadmin, 22.08.2013, ДОБАВЛЕНО НЕТИПОВОЕ
    Иначе
        глОбработкаFAKIR(Источник, Событие, Данные);
//[+]_progadmin, 22.08.2013, ДОБАВЛЕНО НЕТИПОВОЕ

    КонецЕсли;
    
КонецПроцедуры // глОбработкаВнешнегоСобытия()
6 Злопчинский
 
04.05.23
22:47
или как в (2) - так даже лучше, наверное. И крути роботом обработку содержимого _1SUPDTS
7 HawkEye
 
05.05.23
00:11
(0)
вот вы извращенцы...


в ПриЗаписи()
перед
КонецПроцедуры

напиши Записать();
потом вызови свою процедуру из ГМ с ТекущийЭлемент() - в нем будет новое значение
8 serpentt
 
05.05.23
08:54
(7) Запись элемента будет произведена 2а раза....
9 GrayS19
 
05.05.23
08:57
(7) Это я сразу проверил. Получаю старое значение, до изменения.
10 Андрей_Андреич
 
naïve
05.05.23
09:01
(8) Тебе чернил жалко? ))
11 Харлампий Дымба
 
05.05.23
11:06
(9) Первый пост же: перечитай элемент. спр = создатьобъект("твойсправочник"); спр.найтиэлемент(твойэлемент)
Ну или просто посмотри как в типовой бухии вызывается и работает глУчестьМодифицированныйОбъект()
12 ikea
 
05.05.23
11:15
(0) В чем проблема писать в отдельную табличку (справочник, внешняя таблица DBF) при записи элемент справочника. А при обмене из этой таблички выгружать измененные данные и очищать после выгрузки?
13 Злопчинский
 
05.05.23
11:21
(12) ну так урьд так и делает
14 Arbuz
 
05.05.23
17:35
(0) Дык, есть же ФормаПослеЗаписи(ИсточникСобытия, флРезультат) из 1cpp
15 Злопчинский
 
06.05.23
02:43
(14) хм... Надо будет глянуть, не знал про такую
16 big
 
06.05.23
08:58
(13) А как потом из updts записи удалять безболезненно? Индексы 1С свои делает, не как фокспрошный драйвер. Хотя можно и забить, ибо если нет реальной УРБД, то оно и не надо.
17 Bigbro
 
06.05.23
09:16
а потом шринк/дроп-криэйт
18 Злопчинский
 
06.05.23
10:01
(16) а ты посмотри - в апдейтс индексный файл есть?
19 АгентБезопасной Нацио
 
06.05.23
10:32
(18) конечно есть. По DBSign+TypeID+ObjID, и по DwnldID.
20 Злопчинский
 
06.05.23
23:28
(19) а, сорри, это я с прямым углом перепутал....
21 FirstLine Support
 
07.05.23
11:34
а в семерке есть события? Я и раньше-то не помнил, а теперь уже забыл
22 Aleksey
 
07.05.23
16:59
(21) конечно, полно
23 Злопчинский
 
08.05.23
22:32
а есть более-менее актуальный ALS для 1С++ ?
Положите на скачку если есть
24 Aleksey
 
09.05.23
03:36
25 HawkEye
 
09.05.23
12:36
(8) и что?

(9)  
ГМ
Процедура ТестПриЗаписи(вхЭлемент, вхТекст) Экспорт
    Сообщить(вхТекст + "  " + вхЭлемент.Адрес);
КонецПроцедуры


в справочнике:
Процедура ПриЗаписи()
        ТестПриЗаписи(ТекущийЭлемент(), "до записать");
    Записать();
    ТестПриЗаписи(ТекущийЭлемент(), "после записать");
КонецПроцедуры // ПриЗаписи()

результат:
до записать  старое значение тут
после записать  новое значение тут
26 GrayS19
 
10.05.23
12:52
(25) Проверял, даже проще:

Процедура ПриЗаписи()
    Сообщить("ДО=" + ТекущийЭлемент().Наименование);
    Записать();
    Сообщить("После=" + ТекущийЭлемент().Наименование);
КонецПроцедуры // ПриЗаписи()

Результат:
ДО=Апликация
После=Апликация

измененное после записи наименование - другое
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.