Испытываю потребность в ещё одной точке вызова плагинов. Ситуация такова. В событии "Вход в документ" производится некая подготовительная работа, плодами которой пользуется документ. При сохранении документа происходит откат подготовительной работы. А выход из документа по ESC не отслеживается. Получается что результаты подготовительной работы остаются в базе, мешая впоследствии.
Попытаюсь, конечно, придумать что-то через "работа в реестре". Но было бы удобней иметь событие "Выход из документа", запускаемое независимо от того, как был осуществлён выход из документа.
Испытываю потребность в ещё одной точке вызова плагинов. Ситуация такова. В событии "Вход в документ" производится некая подготовительная работа, плодами которой пользуется документ. При сохранении документа происходит откат подготовительной работы. А выход из документа по ESC не отслеживается. Получается что результаты подготовительной работы остаются в базе, мешая впоследствии.
Попытаюсь, конечно, придумать что-то через "работа в реестре". Но было бы удобней иметь событие "Выход из документа", запускаемое независимо от того, как был осуществлён выход из документа.
А какой документ, собственно? Тут на многие "документы" есть исходный код, которым можно воспользоваться и самому вызывать ввод нового документа....
О чем речь конретно?
Пример, когда не помогут массивы и переменные.
При открытии существующего заказа требуется включить в прайс-лист складские карточки, использованные в заказе. После корректировки заказа открытые карточки необходимо закрыть. Чтобы они не мешались при выписке другого заказа.
Алексей Новиков пишет:
Пример, когда не помогут массивы и переменные.
При открытии существующего заказа требуется включить в прайс-лист складские карточки, использованные в заказе. После корректировки заказа открытые карточки необходимо закрыть. Чтобы они не мешались при выписке другого заказа.
Пока мне это необходимо в БЭСТ-5.
Там есть событие вход в прайс-лист. Правда в СП11 или 12 так и не заработало...
Можно было бы на это событие подвесить все что Вам требуется!!!! (Если Вас правильно понял все будет в одной спецфункции)
А Ваша спецфункция возвращала бы 0 по окончанию и реальный прайс никогда бы не открывался...
Саак Шахламджян пишет:
Можно было бы на это событие подвесить все что Вам требуется!
Можно. Но зачем ради такой ерунды переписывать работу с картотекой?
Я ведь не прошу чего-то такого хитро вывернутого и срочно. Событие "выход из документа" симметрично событию "вход в документ" и является обязательным для обеспечения логической совершенности системы.
Алексей Новиков пишет:
Цитата Саак Шахламджян пишет:
Можно было бы на это событие подвесить все что Вам требуется!
Можно. Но зачем ради такой ерунды переписывать работу с картотекой?
Зачем же переписывать!!!!!
Делаем временную таблицу. Открываем ее тем же алиасом, которым д.б. прайс-лист(естесственно закрыв реальный) и вместо обычного прайса откроется Ваша....
(Правда было бы неплохо знать в какой же момент должен запускаться плагин по "Вход в прайс". Если после этого входа, тогда это вариант, если же до, тогда не получиться... И придется переписывать работу в картотеке.[там и делать-то не особо много. Initlist и выбор]. Но все равно неясно как оно должно работать. Как передается "выбор" в заказ в этом случае...)
P.S. У нас для работы "своего прайса" вообще пришлось даже отказаться от стандартной формы редактирования/создания заказа...
А вообще по поводу исходников, о которых я говорил выше:
Код
PRIVATE oZakaz
PRIVATE aResult
PRIVATE ll
oZakaz := ZakazDoc():New()
oZakaz:DopCode := " 13"
aResult := oZakaz:Edit()
ll := aResult[1]
IF ll
SayAndWait("Заказ был открыт на редактирование.")
ELSE
SayAndWait("Произошли ошибки!")
IF LEN(aResult)>2
SayError(aResult[3])
ENDIF
ENDIF
Можно легко отследить начало редактирования и его окончание. Так что если Вас интересует только редактирование заказа, то можно повесить плагин на работу в реестре:
который бы полностью отслеживал редактирование документа и результат редактирования... (Я только однажды пробовал работу с этими объектами, но ни разу не использовал.)
При определённом количестве свободного рабочего времени и готовности заказчика его оплачивать, можно переписать весь БЭСТ почти с нуля. Как говорила мне когда-то знакомый бухгалтер, "Алексей, мы ведь работаем не для того, чтобы наработаться".
Алексей Новиков пишет:
При определённом количестве свободного рабочего времени и готовности заказчика его оплачивать, можно переписать весь БЭСТ почти с нуля. Как говорила мне когда-то знакомый бухгалтер, "Алексей, мы ведь работаем не для того, чтобы наработаться".
Описанные действия с исходниками только что опробовал...[Специально Для Вас и из чистого любопытства]
Прошло 8 минут со времени моего последнего сообщения. 8 минут так много?
Вот код:
Код
#include "hbclass.ch"
#include "BO_Const.ch"
TestF()
procedure TestF()
Memvar n2Ex
Private n2Ex
SETKEY(13,{||n2Ex:=MyPlugin(MDOC->DOPCODE),n2Ex})
return
STATIC Function MyPlugin(sDopCode)
Memvar oZakaz,aResult,ll
PRIVATE oZakaz
PRIVATE aResult
PRIVATE ll
SayAndWait("Редактирование началось")//момент ДО
oZakaz := ZakazDoc():New()
oZakaz:DopCode := sDopCode
aResult := oZakaz:Edit()
ll := aResult[1]
IF ll
SayAndWait("Заказ был открыт на редактирование.")
//редактирование закончилось. Момент после...
ELSE
SayAndWait("Произошли ошибки!")
//редактирование закончилось с ошибками!!!. Момент после...
IF LEN(aResult)>2
SayError(aResult[3])
//можно и не выводить ошибки
ENDIF
ENDIF
RETURN 1
Алексей Новиков пишет:
Ну да, посрамили в научном споре. Но событие всё равно хочу. :-)
Да это тут ни при чем.
К стати, было бы много удобнее вместо событий дать возможность "ковырять" внутри этих самых форм редактирования. Добывить еще кое-какие события/свойства...(дать возможность вешать плагины внутри этой формы редактирования).
Там бы собственно и было бы Ваше "Закрытие документа"...
Да вообще дало бы миЛьён возможностей (мне бы не пришлось писать создание заказов и пр...)
"Ковырять внутри форм" не соответствует парадигме программы, которая не задумывалась и не позиционируется как средство разработки. При добавлении точки вызова события требуется, чтобы в этой точке состояние системы было каким-то образом зафиксировано. Иначе, в перспективе, устанавливаемые обновления могут запросто разрушить логику работы плагина.
Алексей Новиков пишет:
"Ковырять внутри форм" не соответствует парадигме программы, которая не задумывалась и не позиционируется как средство разработки. При добавлении точки вызова события требуется, чтобы в этой точке состояние системы было каким-то образом зафиксировано. Иначе, в перспективе, устанавливаемые обновления могут запросто разрушить логику работы плагина.
А спецфункции - это разве не ковыряние внутри форм...?
Обновления выходят и ничего...
Тем более событие "Вход в прайс-лист" собственно происходит внутри формы...
(А вот повесить событие по нажатию F4-добавление внутри создания заказа нельзя... Или по F8)
Я имел ввиду не изменение работы самой формы, а лишь "добавление доп точек разрыва" куда можно втиснуться...