Алексей Новиков пишет:
Ну да, посрамили в научном споре. Но событие всё равно хочу. :-)
Да это тут ни при чем.
К стати, было бы много удобнее вместо событий дать возможность "ковырять" внутри этих самых форм редактирования. Добывить еще кое-какие события/свойства...(дать возможность вешать плагины внутри этой формы редактирования).
Там бы собственно и было бы Ваше "Закрытие документа"...
Да вообще дало бы миЛьён возможностей (мне бы не пришлось писать создание заказов и пр...)
Алексей Новиков пишет:
При определённом количестве свободного рабочего времени и готовности заказчика его оплачивать, можно переписать весь БЭСТ почти с нуля. Как говорила мне когда-то знакомый бухгалтер, "Алексей, мы ведь работаем не для того, чтобы наработаться".
Описанные действия с исходниками только что опробовал...[Специально Для Вас и из чистого любопытства]
Прошло 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
А вообще по поводу исходников, о которых я говорил выше:
Код
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
Можно легко отследить начало редактирования и его окончание. Так что если Вас интересует только редактирование заказа, то можно повесить плагин на работу в реестре:
который бы полностью отслеживал редактирование документа и результат редактирования... (Я только однажды пробовал работу с этими объектами, но ни разу не использовал.)
Алексей Новиков пишет:
Цитата Саак Шахламджян пишет:
Можно было бы на это событие подвесить все что Вам требуется!
Можно. Но зачем ради такой ерунды переписывать работу с картотекой?
Зачем же переписывать!!!!!
Делаем временную таблицу. Открываем ее тем же алиасом, которым д.б. прайс-лист(естесственно закрыв реальный) и вместо обычного прайса откроется Ваша....
(Правда было бы неплохо знать в какой же момент должен запускаться плагин по "Вход в прайс". Если после этого входа, тогда это вариант, если же до, тогда не получиться... И придется переписывать работу в картотеке.[там и делать-то не особо много. Initlist и выбор]. Но все равно неясно как оно должно работать. Как передается "выбор" в заказ в этом случае...)
P.S. У нас для работы "своего прайса" вообще пришлось даже отказаться от стандартной формы редактирования/создания заказа...
Алексей Новиков пишет:
Пример, когда не помогут массивы и переменные.
При открытии существующего заказа требуется включить в прайс-лист складские карточки, использованные в заказе. После корректировки заказа открытые карточки необходимо закрыть. Чтобы они не мешались при выписке другого заказа.
Пока мне это необходимо в БЭСТ-5.
Там есть событие вход в прайс-лист. Правда в СП11 или 12 так и не заработало...
Можно было бы на это событие подвесить все что Вам требуется!!!! (Если Вас правильно понял все будет в одной спецфункции)
А Ваша спецфункция возвращала бы 0 по окончанию и реальный прайс никогда бы не открывался...
nordk пишет:
Правило номер один.
Используйте свои имена алиасов.
Т.е. таблицу надо открыть со своим именем алиаса в плагине а потом аккуратно закрыть.
Скоб лучше накладывать через SETSCOPE()
И указывать имена тегов, на которые Вы хотите наложить скоб. Потому что не факт что все теги имеют одинаковую старшую часть ключа.
После установки скоба следует "пошевелить" курсор средствами DBGOTOP(),DBSEEK() и т.п. Т.е. курсор должен оказаться на записи соответствующей скобу.
Дальше все будет работать без проблем.
Неужели думаете я не делал DbGotop(), ..GoBottom()?? Использовал, говорю же. После отработки плагина упорно удет на ту запись где стояло до этого...
Сделал ВСЕ как Вы сказали. Таблицы сам открыл, сделал все, что мне надо. Упорно "перегружает" таблицу, попадая на первую строку....
P.S. DbPush()/pop все равно удобнее пользоваться... Сразу и таблицу выбираем и/или индекс выбираем и/или ставим фильтр и/или скоб и сохраняем предыдущие параметры...
Испытываю потребность в ещё одной точке вызова плагинов. Ситуация такова. В событии "Вход в документ" производится некая подготовительная работа, плодами которой пользуется документ. При сохранении документа происходит откат подготовительной работы. А выход из документа по ESC не отслеживается. Получается что результаты подготовительной работы остаются в базе, мешая впоследствии.
Попытаюсь, конечно, придумать что-то через "работа в реестре". Но было бы удобней иметь событие "Выход из документа", запускаемое независимо от того, как был осуществлён выход из документа.
А какой документ, собственно? Тут на многие "документы" есть исходный код, которым можно воспользоваться и самому вызывать ввод нового документа....
О чем речь конретно?
Скоб в реестре стоит такой:
DbPush("MDOC","Rbook","",{"STATUS+UPPER(DOPCODE)+DTOS(DATE)","4","4"})
/*К стати функция SetScope() НЕ РАБОТАЕТ как указано в описании. Все собирался задать этот , но "руки не доходили". Наверное со времен СП8 или 10 пользуюсь DbPush, т.к. Сет Скоп не ставит нижнюю и верхнюю границы!!!!*/
И естественно данная запись выходит за пределы скоба.
Проблема:
После выполнения спецфункции, котрая переводит сводник в заявки на продажу в черновики (это делает кусок приведенного выше кода) происходит следущее:
В РЕЕСТРЕ активной становиться первая строка, а должна предыдущая...
(Т.е. таблица полностью перегружается...)
Как сделать правильно!!???
Такое ощущение что спецфункция вызывается так:
nRecno:=RecNo()
FileEval("UserFile")
Goto nRecno
//А т.к. запись nRecno выходит за пределы скоба, таблица перегружается...
Попутно еще ы. Из описания:
QUp (nBot) – вверх на одну позицию со скроллингом в области nTop–nBot;
Я честно говоря так и не понял как она работает...
Когда мне нужно переместить а "курсор" в InitList на поз вверх или вних я делаю так:
KEYBOARD Chr(5)
KEYBOARD Chr(24).
: что же делает QUp()/QDown() [Делают они все что угодно, но не перемещают указатель активной строки].
Как правильно делать перещение по реестру (имитация нажатия курс клавиш верх/низ)
В названии парнеров справочника партнеров появились "невидимые" символы (окончание строки). Откуда они появились неизвестно. При редактировании карточки партнера БЭСТОМ ничего не помогает, они не исчезают.
Жаль так и не узнал всей правды о базе нормирования...
По поводу кнопок. Оди довольно просто стираются... Почему сразу не догадался, не знаю... Можно просто добавить новые, примерно так:
Код
Memvar lMyButtonWasSet
Public lMyButtonWasSet
if Empty(lMyButtonWasSet)
lMyButtonWasSet:=.F.
endif
SETKEY(-7,{||StartDel(),1})
if !(lMyButtonWasSet)
// ClearButtons() // Если нужно стереть кнопочки.
lMyButtonWasSet:=.T.
addbutton('МоЙа КнопГа',1256)
SetButtons()
endif
....
Невозможен вариант редактирования существующих кнопок и/или меню кнопок.
Требуется распечатка этих же карточек еще и при создании документов движения.
Имущество-> Документы движения. При создании/редактировании этих документов при вводе новой строки можно создавать эти самые карточки, а вот распечатать их отсюда нельзя!!!
При нажатии на F9, печать вообще ничего не происзодит, не открывается даже папка с выбором шаблонов печати!!!
(Я даже скопировать не могу отчет...)
Что по поводу а №3??? По поводу нумерации в партиях?
Показать 24 символа номера в самом реестре возможности нет.
Выравнивание номеров с/ф доработают в Sp14.
СПАСИБО!!!
Кажется начал понимать. Номер у счета-фактуры длинный, а раньше часть отображалась. А теперь это будет исправлено в СП14.
Похоже это поле было увеличено?
И сейчас часть отображается только потому что "новые пробелы" в номере стоят перед номером.
nordk пишет:
На вход в форму событие есть, но пока не работает.
Что касается переменных, то если понять структуру построения формы, то с ними можно разобраться...
И потом а как собственно Вы программно хотите менять форму если не через работу с переменными ?
Пока что я еще ничего не собрался, а только интересуюсь и обсуждаю. То не стоит воздействовать на форму, а теперь вот выясняется, что возможно и стоит.
Придется для этого изучать переменные. И скорее всего методом тыка? А их много. Нелегкий это труд и неблагодарный, в общем-то.
К стати в Б-5 есть в перемешку графические с консольными формы. Из графич вызывается консольная, графическая при этом не закрывается.
nordk пишет:
Прошу прощения.
ПРограммно доступ к форме мы имеем.
По крайней мере в событии до записи я в области переменных все вижу.
СОбытие на вход в форму не запускается....а не форма недоступна. Проверяем этот режим.
ИМХО толку от этих переменных мало. Ковыряться в них очень тяжело, да и непонятно что к чему (их там много, если они все там).
Ведь насколько я понимаю они ни задокументированы ни исходников нет. Собственно, что они есть, что их нет...
А событие на вход форму как я понял должно работать, т.е. предусмотрено такое?
1. Счета фактуры!!!! А, караул, подскажите что не так:
Имущество-> Оборотные активы -> документы движения.
открываем документ поступление в эксплуатацию. Нажимаем кнопочку фактура.
Здесь ничего нельзя сделать!!!! Ни создать/сформировать/посмотреть!!!!
Что не так сделали!!? Подскажите!!!
2. Нумерация номенклатуры.
Имущество->Справочники->номенклатура имущества.
При вводе новой номенклатуры пишет номер не уникален!!!! Хотя такого номера в данной категории нет!!!!
Помогите!!! В чем дело!!?
3. Партии!!!!!
Имущество -> Картотека имущества.
Бухгалтерия не может понять: нумерация партий идет подряд. Т.е. почему не может быть 2 одинаковых
номера партии у разных номенклатурных номеров!!!!???? (так как это, например в Товары.Продукция)
Программа не дает этого сделать!!!!
4. Распечатка.
Имущество -> Картотека имущества. Как распечатать карточку!!!??? Нет шаблонов.
Бухгалтерия обещала, если не убить, то НГ испортить!!!!!!
nordk пишет:
Организацию выбора пробелом мы рассматривали в одном из уроков.
Используется aGetBlock
Функции RotateAndReader() и RotateBlock()
Похоже, что это все на старом форуме. Во всяком случае тут не помниться такого (и поиск пустой). На старом не догадался посмотреть. Сейчас попробую почитать ур.5 и ур.6 (на старом).
И каким образом мне сделать, например, меню "настройка"? (А куча вариантов в окошке NoorYes смотриться ужасно просто...)
Хотя бы как сделать выбор пробелом?
А что происходит при базе нормирования= =0? Это по идее значит, что независимо от количества изделий будет расходоваться все равно одно и то же количество компонента? (В Б-5 этого компонента нуль при расчете потребности материалов)
К стати там базу нормирования можно поставить меньше нуля. Это нехорошо как-то или специально задумано?