Переключение на Главную Страницу Страницы: 1 ОтправитьПечать
Обычная тема ПриЗаписи() (число прочтений - 5543 )
DionX
Senior Member
****
Отсутствует



Сообщений: 373
Местоположение: Кемерово
Зарегистрирован: 22. Августа 2006
Пол: Мужской
ПриЗаписи()
12. Февраля 2007 :: 07:08
Печать  
Как можно отловить запись элемента спраочника? Понятно, что при интерактивной записи в проце ПриЗаписи(), а если элемент справочника изменяется/добавляется программно?
  
Наверх
ICQ  
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: ПриЗаписи()
Ответ #1 - 12. Февраля 2007 :: 08:04
Печать  
Такое делал romix http://www.kb.mista.ru/article.php?id=380
Использовать это пока боюсь.
  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: ПриЗаписи()
Ответ #2 - 12. Февраля 2007 :: 08:08
Печать  
Можно еще на триггерах сделать.
  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
spock
1c++ developer
1c++ moderator
Отсутствует



Сообщений: 822
Местоположение: Новосибирск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: ПриЗаписи()
Ответ #3 - 12. Февраля 2007 :: 08:09
Печать  
romix сделал только для документов. Для справочников оказалось несколько сложнее.
  
Наверх
ICQ  
IP записан
 
DionX
Senior Member
****
Отсутствует



Сообщений: 373
Местоположение: Кемерово
Зарегистрирован: 22. Августа 2006
Пол: Мужской
Re: ПриЗаписи()
Ответ #4 - 13. Февраля 2007 :: 00:43
Печать  
steban писал(а) 12. Февраля 2007 :: 08:08:
Можно еще на триггерах сделать.

с триггерами было бы гуд.
но на дбф их не повешаешь Нерешительный
  
Наверх
ICQ  
IP записан
 
steban
1c++ developer
Отсутствует


#define sizeof(x) rand()

Сообщений: 787
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: ПриЗаписи()
Ответ #5 - 17. Февраля 2007 :: 06:55
Печать  
Вот буквально вчера на горизонте появилось еще одно решение: http://infostart.ru/projects/783/?ref=1746
  

int getRandomNumber()&&{&&  return 4; //chosen by fair dice roll&&         //guaranteed to be random&&}
Наверх
 
IP записан
 
Boris_1c
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 129
Зарегистрирован: 29. Января 2007
Re: ПриЗаписи()
Ответ #6 - 17. Февраля 2007 :: 10:49
Печать  
Нечто похожее хочу сделать и я.
http://www.1cpp.ru/forum/YaBB.pl?num=1171577514

Мне правда нужно для реализации собственного механизма блокировки базы, типа один проводит остальные ждут. Задумка такая:

1. Справочник редактируется в форме - добавляем/изменяем в эту форму функцию ПриЗаписи()
2. Модуль формы документа - добавляем/изменяем функцию ПриЗаписи()

В конце процедуры ПриЗаписи() или перед всеми возвратами из модуля добавляем что-то типа:  
Если СтатусВозврата()=1 Тогда Записать_(контекст); СтатусВозврата(0); КонецЕсли;

3. Все модули где встречаются констукции вида Док.Записать(); Спр.Записать(); проеобразуем к виду: Записать_(Док); Записать_(Спр);


Записать_(контекст); - функция в глобальнике которая отслежует блокировки, выполняет регистрацию изменений, проверяет права на изменение документа и т.д. и т.п.

Все это можно проделать с имеющейся конфой, но в дальнейшем надо строго придерживаться определенных правил типа Записать_(Док); а не Док.Записать();

Очень бы хотелось каким-то макаром перехватить модуль перед компиляцией и автоматом профурычить в нем описанные выше изменения.
  
Наверх
 
IP записан
 
lustin
1c++ power user
Отсутствует


1C *.*, ROR, Java - на
этом остановимся

Сообщений: 907
Местоположение: Москва
Зарегистрирован: 20. Октября 2006
Пол: Мужской
Re: ПриЗаписи()
Ответ #7 - 21. Марта 2007 :: 08:03
Печать  
steban писал(а) 12. Февраля 2007 :: 08:04:
Такое делал romix http://www.kb.mista.ru/article.php?id=380
Использовать это пока боюсь.


Опытным путем выявлено

1Сv7.7.025 (SQL и не SQL), база данных формата ДБФ
Win 2003 + Терминальный сервер Citrix MetaFrame

Подобный код

ЗагрузитьВнешнююКомпоненту(КаталогПрограммы()+"1cpp.dll"); //2.5.0.2
ЗагрузитьВнешнююКомпоненту(КаталогПрограммы()+"vk_log_write_doc.dll");  

ВЫзовет несколько ошибок:

1. При создании объекта класса 1С++ - "ZLib Engine" сообщит о вызове недопустимого метода

2. При появлении Окна сообщений вызванного методом сообщить() пройзойдет принудительное закрытие процесса 1С...

3. А также вполне возможен просто вылет 1С без предупреждения

4. "Ошибка при инициализации объекта из компоненты <Неизвестная компонента>"
- такая ошибка тоже возможна при вызове объекта Индексированная таблица

P.S Хотя локально без использования Терминала база в тестовом режиме проработала на ура, даже при загрузке:
Код
Выбрать все
......
ЗагрузитьВнешнююКомпоненту(КаталогПрограммы()+"vkloader.dll");
  Попытка
    
     Загрузчик = СоздатьОбъект("ЗагрузчикВК");

    ВывестиОшибкуЗагрузкиКомпоненты(
	Загрузчик.ЗагрузитьВК(КаталогПрограммы()+"1cpp.dll", "Addin.1C++=fde5ae76-00b3-4bdb-921b-d5937997b1b7"));
    ЗагрузитьВнешнююКомпоненту(КаталогПрограммы()+"turbomd.dll");
    ЗагрузитьВнешнююКомпоненту(КаталогПрограммы()+"formex.dll");
    ЗагрузитьВнешнююКомпоненту(КаталогПрограммы()+"RWidjets.dll");  
ВывестиОшибкуЗагрузкиКомпоненты(
    Загрузчик.ЗагрузитьВК(КаталогПрограммы()+"vk_log_write_doc.dll", "Addin.vk_log_write_doc=772FB187-6F4B-44DE-BCCA-586564B617BC"));
.......
 


ВывестиОшибкуЗагрузкиКомпоненты(
   Загрузчик.ЗагрузитьВК(КаталогПрограммы()+"vk_log_write_doc.dll", "Addin.vk_log_write_doc=772FB187-6F4B-44DE-BCCA-586564B617BC"));

можно заменить на простое ЗагрузитьВнешнююКомпоненту()

Но ситуация не поменется

P.S.S Так что я сильно сомневаюсь в использовании разработки romix'a...
  

бизнес-процесс как техническое задание прекрасно, только у бизнеса нет процессов; у бизнеса есть желание выжить
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: ПриЗаписи()
Ответ #8 - 21. Марта 2007 :: 13:51
Печать  
Ты ему об этом сообщи, пусть посмотрит Улыбка
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer &amp;&amp; tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
Переключение на Главную Страницу Страницы: 1
ОтправитьПечать