BEST logo логотип компании БЭСТ - программы для бизнеса ПРОДАЖИ
+7 (991) 312-04-37
trade@bestnet.ru
ПОДДЕРЖКА
+7 (495) 775-66-76
consult@bestnet.ru
СКАЧАТЬ
Обновления
Дистрибутивы
Авторизация

Логин:
Пароль:
Забыли свой пароль?
Регистрация
ВАШ ВОПРОС

Доступ к Личному кабинету закрыт!
Как получить доступ?


Форум

Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Выбрать дату в календареВыбрать дату в календаре

Страницы: Пред. 1 2 3 4 5 6 7 8 9 10 11 ... 95 След.
Как правильно написать плагин на событие "Запись документа" в БЭСТ5
 
СОбытие на вход не будет работать если у вас несколько плагинов подвешены на вход - будет работать по первому.
Если даже вы оставите один - по корректировке зайдете, заблокируется только создание нового.
\И разумеется по корректировке вы измените документ.

Такую цепочку развития я подтверждаю.

И еще раз пишу к контролю записи это не имеет никакого отношения
Как правильно написать плагин на событие "Запись документа" в БЭСТ5
 
Цитата
На событие "вход в документ" написана функция.

ПРИЧЕМ ТУТ ВХОД
Защиту надо ставить не на вход а на запись !!!!
Как правильно написать плагин на событие "Запись документа" в БЭСТ5
 
Цитата
Сергей Иваницкий пишет:
Описание объектов крайне скудное programming in best-5.chm, где бы разжиться поподробней.

Полный исходный код лежит у вас в папке БЭСТа при установке комплекса.
Подробней просто некуда.
Использование QINPUT() при выборе нескольких значений из справочника
 
ВОт вы начали читать - читайте до конца пожалуйста.
Сейчас ОЧЕНЬ загружен другим серъезным проектом.
Тем не менее что то подсказать могу


1.Мы определили сам массив, но не определили какие значения в него складывать собственно - из какого поля

Код
   bYesReplArray - блок кода для заполнения массива значений, если вернет
                   NIL, то заполнения не присходит
Пример:
Код
bYesReplArray:={|| FIELD->CODE }
2.Выход из справочника наверно надо делать по клавише ТАB
Код
  bCoProc     - блок кода или имя сопроцедуры для Browse
Пример:
Код
{|| IIF(LastKey()==K_TAB, Keyb(K_ENTER), Nil) }
Вот как минимум сразу бросается в глаза
Использование QINPUT() при выборе нескольких значений из справочника
 
Нуу - значит еще чего-то не объявили - надо искать....
По INS стали отмечаться ?
Использование QINPUT() при выборе нескольких значений из справочника
 
myRecs объявите privat - справочник внутри у себя не может видеть Ваши локальные переменные.
А блоки кода при компиляции не проверяются на "видимость"
Как правильно написать плагин на событие "Запись документа" в БЭСТ5
 
По поводу Инитлист
Вот последний раз пишу что БЭСТ-4 и БЭСТ-5 разные программы.
Инитлист влечет за собой переназначение событий и так далее.
Пихать его в события - последнее дело.
Не тестировал, не тестирую этот способ и тестировать не буду.

Уже столько раз на практике самым отъявленным доказательствам разбивал эти рассуждения
И показывал работу событий. нет желания тратить на это время
Хотите - ковыряйтесь ищите и помните. что теперь это класс. а не как раньше и все возможности надо восстанавливать
Включая назначенные кнопки.
В каждом случае надо сидеть и ковырять переменные.
Есть объекты - ВСЕ ! Штатный механизм и никакой отсебятины.

Что касается события "перед записью"
написал простейший код

RETURN .F.

Проще некуда
Подвесил - ни при записи, ни запись после ESC, ни запись перед печатью - все перекрыто.
Где Вы там запутались - не знаю.
Проще всего утверждать что ошибается кто то, а не я сам.... Подходите внимательнее к Вопросу пожалуйста
Использование QINPUT() при выборе нескольких значений из справочника
 
Нееее вы значит не то нашли

k_stol->( MAKEREFER("SCLADS","Справочник столовых",2,{"Код столовой","Наименование столовой"},{3,5,15},,{"KSTOL","zsclad->shortname"},{"aIn[2]","aIn[3]"},"UPPER(aIn[2])",{{||field->KSTOL},{||zsclad->(DBSEEK(UPPER(k_stol->KSTOL))),zsclad->SHORTNAME}}) )
Использование QINPUT() при выборе нескольких значений из справочника
 
· bYesArray - очень Хорошо что Вы про него вычитали
Я когда вычитываю - думаю надо попробовать, а под рукой ничего нет полезного\
А когда надо - никогда не вспоминаю
Попробуйте вот что
создайте справочник на какое-нибудь поле ввода
и пропишите в нем вот так
bYesArray:={|x| IF(ValType(x)=='A',m->MyRecs:=x,m->myRecs)},
где myRecs - объявите такую переменную
И после возвращения из справочника посмотрите в отладчике что в ней лежит
Если у вас все получится - я обещаю порыть в исходниках как такой справочник вызвать просто по нажатию кнопки а не через режим
ввода/корректировки.
Главное даст он в справочнике по Ins отмечать или нет - если никакие больше параметры объявлять для
этого не надо -по идее все должно получиться
Использование QINPUT() при выборе нескольких значений из справочника
 
Ну давайте разбирать на примере.
Допустим я в Инитлисте настроил некий реестр, в котором отображается группа и номенклатура и их я туда собираюсь заводить через справочник
Справочник собираюсь заводить на поле ввода номенклатуры.

Тогда в окне ввода у меня будут 2 поля:
1) группа
2) номенклатура
Соответственно в момент ввода данных БЭСТом будет создан внутренний массив aIn[]

группа это aIn[1]
номенклатура это aIn[2]

значит при открытии номенклатурного справочника я должен найти запись
ключ поиска определяется указанным в makerefer именем индексного ключа или если имя не указано текущим индексом в алиасе
допустим я выбрал ключ "mlabel" - он мне подходит больше всего
Значит искать я должен по выражению UPPER(GRUP+NNUM) - (группа + номенклатура) Смотрим вверх.
для справочника введенные значения лежат еще не в базе а в массиве
Значит я должен писать UPPER(ain[1]+aIn[2])
ну и раз выражение должно быть символьным то заключаем его в кавычки "UPPER(ain[1]+aIn[2])"
Изменено: nordk - 03.06.2015 16:46:16
Как правильно написать плагин на событие "Запись документа" в БЭСТ5
 
А мы точно про БЭСТ-5 говорим ?
я каждый день обрабатываю события и чтобы у меня не сработал отладчик....
А вы вообще режим отладки включаете ? Может в этом дело ? Для меня это как то само собой и значения не придаю даже
Как правильно написать плагин на событие "Запись документа" в БЭСТ5
 
Еще хочу добавить.
Когда мне пришлось доводить до ума работу БЭСТ-Питания.
У меня была задача всяких разных фасовок и новых имн блюд и т.п.
Я никогда не знал что и как будет.
Я просто увязывал новое наименование с созданием номенклатурного номера, если нужно создать
Решил сам для себя в какие группы и как их буду нумеровать
Продумал эти правила.

А дальше просто создаю документ через штатный объект.
При его создании когда доходит до момента наполнения его строками - создаю перед этим нужные номенклатуры.
Вы говорите фасовка ?
А аналитика которая живет не дальше самой накладной ???
Если допустим у меня амбар зерна.
И я начинаю его фасовать всякий раз как попало.
Пример отпускаю 100 кг зерна и один мешок 50 кг, второй 20, третий 30
Чтобы я стал делать ?
1.Готовлю документ списания 100 кг зерна на фасовку
2.готовлю документ прихода фасованного зерна - ТА ЖЕ НОМЕНКЛАТУРА !!!!! только в накладной прихода в аналитику строки пишу 50
во второй 20, в третью 30
3.готовлю документ продажи клиенту такой же документ с такими же аналитиками с продажными суммами по строкам
Все документы собраны в одну пачку.
Теперь в эту пачку добавляю режим печати 3 документа и с/ф к нему
Последним действием говорю БЭСТу - "фас"
Он по моим инструкциям делает все документы - пользователь сидит минуты 3 и наблюдает за процессом или если хотите
"курит бамбук". Берет бумажку из принтера, печать, подпись и поехали.
Причем все это мне позволяет сделать с компьютера прямо в амбаре. подключенного к весам если надо. с планшета или
терминала сбора данных....
Просто совершенно другие бизнес процессы - раньше такого мы просто не могли
Как правильно написать плагин на событие "Запись документа" в БЭСТ5
 
Давайте так - это мое сугубо личное убеждение.
БЭСТ-4 и БЭСТ-5 это программы разных классов.
И старый подход это примерно как из запорожца бензиновую печку в иномарку пытаться засовывать.
Плагин адаптировать можно конечно, но почему бы не использовать всю мощь нового ?

Событие вызывается - вы можете навставлять вызовы отладчика и во всем убедиться
Копошиться над ним правильно ли ? Надо ли свои ресурсы на это это тратить - вот в чем Вопрос ?
Лично мне свое время на это жалко....даже в качестве помощи
У вас старые связки по старым индексным ключам - теперь в строках есть аналитика, а лучше просто использовать гуиды
и так далее и так далее
Надо открывать отладчик и по нему пошагово все смотреть.

Насчет не получится - вы сделали алгоритм сопоставления ?
У Вас он получился ? Раз плагин был и работал - значит получился....
Только дальше то что.
Оператор должен руками создать один документ, потом руками создать второй, залить туда строки
Куча контролей перед записью и так далее....

Вместо этого смотрите в примере как делается документ
И хотябы вот в том экране с двумя инитлистами делаете кнопку создать документы.
Вызываете функцию по которой оба документа создадутся сами без участия рук оператора
И ваша задача остается только наполнить эти инит-листы информацией и все !!!
А на запись и удаление поставить защиту по гуидам строк документов
И для сопоставления этих строк завести одну табличку из двух полей
гуид строки документа расхода и гуид строки связанного с ним документа прихода - ВСЕ
Если строка найдена во второй, то первую нельзя править и удалять
как то так

До конца мне Ваша задача не ясна
но общий путь я попытался пояснить
Понимаю что в отличии от меня впервые вы будете делать это не быстро
Но поверьте - когда в этом руку набьете и создание подобной схемы не будет занимать у вас
больше чем 2 дня - вы все прочувствуете и по другому никогда больше в товарах ничего делать не захотите
Вызов пользовательских модулей через главное меню БЭСТ5
 
Нужно собирать bdll библиотеку.
Потому что для пункта меню Вы должны прописать имя библиотеки и имя функции в ней
Поищите на форуме темы- уроки по этому поводу
Печать типов оплат в чеке, КПМ+Штрих ФР-К печать в чеке типов оплат
 
Постоянно меняют версию прошивок кассы в Штрихе - описание полей взял у них на сайте.
Главное подсказал где смотреть :)
Как правильно написать плагин на событие "Запись документа" в БЭСТ5
 
[QUOTE]Сергей Иваницкий пишет:
При этом происходит списание со склада "Фасцех" иными словами фасуем товар списываем один номенклатурный номер, приходуем на основной склад с другим ном.номером. Реализовано это было так:
на событи "перед записью" проверялась опреция 03 и если это так запускалась функция из 2-х InitList() (создаются 2 временных таблицы БД). В одном InitList()-е товар из документа в другом к этому товару каждой позиции выбирался из справочника другой товар или несколько товаров. соответственно призводятся всякие проверки и пр. После сохранения в uGlobVars[99](объявлена при входе в документ) записываются имена временных таблиц. После этого на событие "запись документа" создается документ прихода на основании таблицы 2 в БД MdocM добавлено поле uLink (С23) (Grup+nnum+partia)через которое устанавливается связь между строками прихода и расхода.
[/QUOTE]И вы все это в таком виде решили в БЭСТ-5 потянуть?
Вместо того чтобы сейчас сделать одну табличку сопоставления по возможности автоматизированную и потом кнопушу сделай цепочку накладных сама. А в папку пользователя положить контрольную таблицу связки.
Все телодвижения операторов станут примерно такими: проверить сопоставления.
И посмотреть как потом все само построится в течении пары минут - не надо ничего создавать проверять, добавлять.импортировать
ВООБЩЕ ничего !
Надо найти время и сделать нормально. Переходите на новую программу - сделайте нормальный грамотный плагин людям.
Упростите им жизнь !
Изменено: nordk - 02.06.2015 16:38:07
Как правильно написать плагин на событие "Запись документа" в БЭСТ5
 
Мои рекомендации нвйти время, серъезно задуматься и сделать лучше чем было.
БЭСТ-5 позволяет гораздо лучше возможности
Использование QINPUT() при выборе нескольких значений из справочника
 
у Makerefer есть параметр seek, он отвечает за поиск записи в справочнике при его открытии
Мог немного ошибиться в названии параметра - посмотрите в описании
Аналог поля USER_CODE в MDOC.DBF в БЭСТ5
 
нет надобности в этом поле
Если надо свое поле добавить - кто Вам не дает ?
Использование QINPUT() при выборе нескольких значений из справочника
 
тут путаница в подходах работы
В БЭСТ-5 я собираю библиотеку и подгружаю.
И разумеется мои функции становятся видны если они не static
В случае с Б4 они скорее всего и так и так будут не видны и слово static можно не писать перед именем функции
Использование QINPUT() при выборе нескольких значений из справочника
 
Б4 не помню и тестировать нет времени.....
В Б5 обязательно заходит и останавливается

static означает что эта функция "видна" только внутри плагина
и исключает ошибку "пересечения" имен с функциями разработчика
Т.е. когда плагин завершит работу эта функция перестанет существовать для БЭСТа
быстрый ввод штрих-кодов, как?
 
Штатного нет.
Плагинами делается запросто через объект "накладная" или объект "номенклатура" - не понял где именно надо до конца
Если надо можем помочь на возмездной основе.
остальное в приват
Изменено: nordk - 28.05.2015 19:41:00
Использование QINPUT() при выборе нескольких значений из справочника
 
Еще в Б4 после перекомпиляции иногда надо либо запускать с перезагрузкой отладчика либо с перезапуском БЭСТа
Иначе он из памяти может старый плагин брать
Использование QINPUT() при выборе нескольких значений из справочника
 
Значит на шаг раньше ругается
{{||FIELD->tek_nomer},9} - вот сюда попробуйте его поставить просто {||test()}
Использование QINPUT() при выборе нескольких значений из справочника
 
Столько воды утекло :)
Я давно уже пользуюсь классом, который сами себе сделали
Тем не менее по коду
У Вас не рисуется третий столбец, раз первые 2 вы видите
Вижу описание его ,
Код
aType[VAL(FIELD->TYPE),2]


Вижу что переменная объявлена.
Значениями заполнена.
Но вот что у вас в базе work/
Либо там нет поля type либо она пустая, без единой строчки

Как я обычно поступаю, когда не могу разобраться в блоке кода
Вместо всего в блок кода переписываю в виде
Код
{||test(aType),16}

Затем создаю эту функцию с точкой останова для отладчика


Код
   
Код
static FUNCTION test(aType)
Код
Local cRezult
ALTD()
  cRezult:= |IF(!EMPTY(FIELD->TYPE),aType[VAL(FIELD->TYPE),2],SPACE(25))  
return cRezult


И уже тут в отладчике смотрю на переменные, текущую рабочую область и поля
И как правило нахожу причину проблемы
Изменено: nordk - 22.05.2015 14:28:00
Страницы: Пред. 1 2 3 4 5 6 7 8 9 10 11 ... 95 След.