Читайте в Initlist - потому как это относится к Quinput,Initlist,Qbrowse
aIn[7] - это передаваемая в справочник переменная значит она формируется до вызова справочника
Перебор остановить нельзя.
Можно анализировать номер записи - в переменных памяти и в доках надо поискать.
Не помню ее наименование. Могу позже поискать
Где то здесь на форуме тоже писали когда то
И если запись не первая то сразу на завершение.
Тогда в принципе быстро проскочить должен перебор
Зависит от количества отмеченных записей :)
gabov пишет:
Т.е там может быть:
1. в случае поиска только по одному полю только один элемент массива aIn[1]
2 в случае одновременномпоиске подвум иболее элементам aIn[1],aIn[2] и т.д.( например по группе и номенкл. номеру)
Я правильно Вас понял?
именно
Цитата
gabov пишет:
2.Если это так ,то как правильнозадать этот параметр?
Вообще то при вводе записи вы вводите в поле ввода значение, потом открываете справочник
При корректировке для заполнения aIn отвечает bPreGet
Цитата
gabov пишет:
3.В отладчике Бэста 4 возможно ли посмотреть значения массива aIn?
Да, вам надо всунуть вашу функцию с точкой останова в то место, где этот массив еще жив
Например в массив пред ввода или постввода или в блок кода перед прорисовкой справочника
gabov пишет:
Теперь при редактировании записи при открытии справочника партнеров курсор встает на первую запись в которой не заполнено краткое наименование партнера.
А чему собственно равно значение переменной ain[7] при открытии справочника ?
Вероятно она имеет пустое значение вот и находит первую пустую запись :)
Запятые проверяйте. У меня работает в простом тестовом примере.
Единственно я уже давно запятые не считаю :) Работаю через класс makerfer (сами себе написали).
Попозже посмотрю
Код
aSortSeek:={;
{"- по коду ",{"Шифр "}, {'CODE'},'UPPER(aIn[7])',,,,'FULLCODE'},;
{"- по наименованию",{"Наименование "}, {'SHORTNAME'},'UPPER(aIn[7])',,,,'FULLNAME'};
}
А вот это у вас не прокатит
asortseek создает собственный массив aIn и разумеется раз 2 строки там 2 элемента
в первой строке надо писать UPPER(aIn[1]), во второй UPPER(aIn[2])
Если что-то получилось и можете поделиться - положите сюда пожалуйста.
Меня неоднократно спрашивали как работать с dll сторонними - все руки не доходили
А на форуме - полезно
Напишите тег именно так как он называется
например для номенклатурника я бы написал "mlabel"
не надо никакие номера искать- я честно так и не понял какой тег вы хотели :)
для Partner.dbf, ключевое значение которого равно UPPER(shortname) надо писать "name"
Вообще весь БЭСт построен на обертках.
У вас в руках тот же инструмент, что и у разработчика.
Вы библиотеку только прилинковать в момент компиляции не можете.
Образцы кода с передачей ссылок я в исходниках БЭСта встречал - значит этим пользуются или пользовались
Вот они
Они закрыты ремарками и судя по формату тут нет типа возвращаемого значения
Но я уверен что если преобразовать к новому стандарту - они бы заработали
разработчик просто перешел на прилинкованные библиотеки (я так думаю)
Надо пробовать - я никогда не делал
Тут только надо четко определиться какой будет формат вызова
DLL_STDCALL - не факт
мне на самом деле не так интересно как пишут в харборе больше нужно было ссылку на описание функции в msdn из shell32, чтобы посмотреть какого типа она возвращает значение
DLL_STDCALL, - 32 все номера возвращаемых типов не помню, напишу как буду в офисе И даже здесь не все однозначно, зависит от языка сборки - отсюда следует четко понимать что не все long для харбора long В частности settimer по классике long но мои программисты Си рекомендовали ставить INT (3)
gabov пишет:
3 Если запустить плагин ,вызвать справочник партнеров и отметить в справочнике партнеров одну или несколько записей и сохранить результат( нажав или Enter или Tab) , то если снова вызвать справочник партнеров при вводе новой записи или
при редактировании любой другой записи ,то прежние отметки INSсохраняются.
А надо бы чтобы при вызове справочника партнеровв другой записи этих отметок не было.
Возможно ли такое?
Есть блок кода, который выполняется перед построением справочника.
В этом блоке кода вам просто надо обнулить ваш массив
gabov пишет:
2.Из описания MAKEREFER : "#DEFINE P_REPL 43 // Блок кода выполняемый при добавлении элемента в массив выбора (bYesArray)"
Как я его не "крутил" так и не понял для чего он нужен, и как заставить его работать? И нужен ли он вообще для данного случая?
Возможно бывает, что не "плоская" таблица и надо выбирать еще откуда то данные, предварительно их обработав
gabov пишет:
Дополнительно добавил bYesNoRepl:={|x| .t.}.
Но не совсем понятно - как можно воспользовать этим параметром.
Если записатьbYesNoRepl:={|x| .f.}.то INS просто для отметки текущей записи не работает.
Может быть он нужен для проверки ,текущего значения (значений) отмечаемой записи или контроля за уже отмеченными записями.
Но как тогда в блоке кода ее проверить?
Думаю что вероятно этот блок кода управляет тем, какие записи отмечать нельзя.
Т.е. здесь должен быть не прямое логическое значение, а условия
ВИндовый SetTimer вызвать можно.
Но вот как определять нужные события, увязать это к окну - боюсь не получится
Даже дельфя свой таймер делали, а БЭСТ далеко не дельфя
МОжет зная задачу что-то другое можно посоветовать ?
имея self формы вы всегда можете программно поменять свойства. а после этого делать то, что задумали :)
Окна в БЭСТе для программистов "дубовые" потому как сложно подобный инструмент создавать
но их возможости огромны.
Еще не было ничего из того. что мы могли сделать в Mайкрософт Навижен и не могли бы тоже самое повторить это в БЭСТе
Другое дело, что надо вокруг этого "шаманить"
БЭСТ "видит" все принтера, которые "видит" любое приложение под виндой.
С одним исключением. При старте БЭСТа принтер уже должен быть "виден"
Если же сеан БЭСТа был запущен а принтер подключили позже к USB (например).
То сеанс БЭСТа надо перезапустить
Плагин “Вход в документ” выполняется сразу после того, как отобразится форма с документом и инициализируются все рабочие переменные, то есть непосредственно перед началом ввода/редактирования данных. Существующая переменная nApp информирует о режиме вызова: nApp=1 – режим редактирования, nApp=3 – ввод данных в новый документ. Если функция возвращает 0 (или .F.), то следующий вход в документ невозможен.
из выше сказанного я не могу войти в документ в следующий раз, а не при текущем открытии?
Как мне этими событиями пользоваться, я не смог нормально воспользоваться ни одним из них.
С событием на вход "косяк" на мой взгляд имеет место
Единственно что переменная nApp несколько устаревшее
Документы становятся сложнее
Сергей Иваницкий пишет:
Я то думал, что разработчики пишут свои функции чтобы облегчить работу тем кто ими пользуется, оказывается это не так.
Функции оставляйте в прошлом пожалуйста
Давайте стараться оперировать классами и методами
Именно объекты облегчают работу тем, кто ими пользуется
и последнее - разработчики пишут функции не для пользователей !!!
неумение ими пользоваться и незнания элементов программирования - не их зона ответственности
Для своих программистов они существенно облегчили работу новыми изменениями
Сергей Иваницкий пишет:
Теперь мне необходимо чтобы ранее созданный документ при некоторых условиях нельзя было редактировать, в БЭСТЕ4 я в событии "Вход в документ" возвращал .F. и документ нельзя было изменить, в бэсте5 оказывается нельзя изменить только шапку документа, и как мне быть?
Вход в документ отвечает не за изменение а за вход в документ.
Вариантов развития несколько:
1.Обращайтесь в службу поддержки с вопросом запретить вход в принципе при событии возвращаемом .F.
По логике вещей так должно быть.
Только выражайтесь точно - вход это вход, а запись - это запись
А то у Вас тема про одно . а говорите про другое
2.Объявляете свою public переменную , управляете ее значениями во входе -.T. или .F.
и если она .F. - то в событии на запись сразу возвращать F.
Сергей Иваницкий пишет:
Зачем разработчик сует в сопроводительную документацию описание этой функции Initlist() могли бы написать про ограничения у меня с ними нет пока тесных отношений и как она там работает мне не ведомо.
Нет никаких ограничений !!!!
Это все равно что писать разработчику почему вы не предупреждаете что в заблокированную запись значения не вносятся...
Это область знания языка программирования.
Разработчик предоставил Вам исходный код ?
предоставил.
Там есть описание класса Initlist ?
Есть
Разработчик сделал удобным чтобы события могли быть в любом инитлист и не надо было специально под отдельный экран просить
Сделал
Должен программист уметь думать над тем что это может дать, изменить и т.п. ?
должен, потому как это не на пользователя рассчитано. а на программиста
Вам говорят что программы абсолютно разные ?
Говорят
Говорят что плагины "в лоб" не перейдут?
Говорят
Все остальное. извините это упрямство и его результаты.