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 След.
Обсуждение задачи по теме УРОК 6 Создание формы рекдатирования/
 
Спасибо.
Обсуждение задачи по теме УРОК 6 Создание формы рекдатирования/
 
Добрый день.
Константин, попробовал запустить пример из 6 урока - Бэст выдает какие-то ошибки.
Нашел ошибки в примере надо EXPORTED: вместо EPORTED:,
в строке RETURN ::clsMetsBO:Open("user\dover\dover.dbf")
надо писать RETURN ::clsMetaBO:Open("user\dover\dover.dbf")
Хотел запустить в режиме отладки, выдает какие-то ошибки.
Посмотрел свойства проекта\запуск\параметры там было написано что-то типа project.bdll Main,
я написал doverenost.bdll frmDover
все равно какие то ошибки, есть ли возможность запускать BestIDE в режиме отладки? и как там поставить точки останова, на картинке в справке в окне кода в BestIde цветом выделены ключевые слова и точки останова, порылся в настройках ничего не нашел, как такого добиться вроде список точек останова есть а как его пополнить не понятно.
И еще хотел бы узнать смысл слов ACCESS и ASSIGN из примера описание "programming in best-5" крайне скудное.
Как правильно написать плагин на событие "Запись документа" в БЭСТ5
 
Цитата
nordk пишет:
Нет никаких ограничений !!!!
Это все равно что писать разработчику почему вы не предупреждаете что в заблокированную запись значения не вносятся...
Это область знания языка программирования.

Разработчик предоставил Вам исходный код ?
предоставил.
Там есть описание класса Initlist ?
Есть
Разработчик сделал удобным чтобы события могли быть в любом инитлист и не надо было специально под отдельный экран просить
Сделал
Должен программист уметь думать над тем что это может дать, изменить и т.п. ?
должен, потому как это не на пользователя рассчитано. а на программиста
Вам говорят что программы абсолютно разные ?
Говорят
Говорят что плагины "в лоб" не перейдут?
Говорят

Все остальное. извините это упрямство и его результаты.
Я то думал, что разработчики пишут свои функции чтобы облегчить работу тем кто ими пользуется, оказывается это не так.
Как правильно написать плагин на событие "Запись документа" в БЭСТ5
 
Я просто хочу понять

Цитата

Плагин “Вход в документ” выполняется сразу после того, как отобразится форма с документом и инициализируются все рабочие переменные, то есть непосредственно перед началом ввода/редактирования данных. Существующая переменная nApp информирует о режиме вызова: nApp=1 – режим редактирования, nApp=3 – ввод данных в новый документ. Если функция возвращает 0 (или .F.), то следующий вход в документ невозможен.
из выше сказанного я не могу войти в документ в следующий раз, а не при текущем открытии?
Как мне этими событиями пользоваться, я не смог нормально воспользоваться ни одним из них.
Как правильно написать плагин на событие "Запись документа" в БЭСТ5
 
Цитата
nordk пишет:
Если даже вы оставите один - по корректировке зайдете, заблокируется только создание нового.
Спасибо, видимо я пишу не понятно, У меня написаны плагины на вход, запись и после записи, на все три события, в них проверяются разные вещи, разумеется некоторые взаимосвязаны. На каждое событие подвешен 1 плагин.
Теперь мне необходимо чтобы ранее созданный документ при некоторых условиях нельзя было редактировать, в БЭСТЕ4 я в событии "Вход в документ" возвращал .F. и документ нельзя было изменить, в бэсте5 оказывается нельзя изменить только шапку документа, и как мне быть?
Как правильно написать плагин на событие "Запись документа" в БЭСТ5
 
Спасибо Константин, что хоть вы пишите. Однако
Цитата
nordk пишет:
Вот последний раз пишу что БЭСТ-4 и БЭСТ-5 разные программы.
Инитлист влечет за собой переназначение событий и так далее.
Пихать его в события - последнее дело.
Не тестировал, не тестирую этот способ и тестировать не буду.
Зачем разработчик сует в сопроводительную документацию описание этой функции Initlist() могли бы написать про ограничения у меня с ними нет пока тесных отношений и как она там работает мне не ведомо.
Цитата
nordk пишет:
Есть объекты - ВСЕ ! Штатный механизм и никакой отсебятины.
Описание объектов крайне скудное programming in best-5.chm, где бы разжиться поподробней.

Цитата
nordk пишет:
Проще всего утверждать что ошибается кто то, а не я сам.... Подходите внимательнее к Вопрос у пожалуйста
Помнится Вы меня как-то тоже убеждали что я не прав пост 31.

Как обойти мою проблему с инитлистом я придумал, корявенько но работать будет, я теперь про другое, может тему открыть?

Цитата
Сергей Иваницкий пишет:
На событие"вход в документ" если вернуть .F. по идее должно быть заблокировано изменение документа, в БЭСТе 4 так и было шапка документа рисовалась синим цветом и никакие попатки сохранить не работали. В БЭСТе5 если на событие "Вход в документ" вернуть .F. документ позволяет изменить например количество товара или цену при нажатии F10 ничего не происходит но если нажать Esc то возникает предложение сохраниться при утвердительном ответе предлагает перформировать счет фактуру и спокойно сохраняет
Я тут сделал скриншотов, не знаю даже может это у меня такой глюк или "особенность"
На событие "вход в документ" написана функция.
Код
Altd()
Return .F.
 
Уважаемые коллеги, скомпилируйте ее и повесьте на событие "вход в документ"
Напомню у меня бэст 5.34.32.13 и попробуйте изменить в существующем документе например количество в любой строке. Нажмите Esc и на Вопрос "Записать откорректированный документ" ответьте записать. Мне интересно это только у меня исправленный документ сохраняется или это так и должно быть?

Как правильно написать плагин на событие "Запись документа" в БЭСТ5
 
Разработчикам видимо не интересно, они непогрешимы
Предлагаю всем желающим откомпилировать 2 маленьких плагина и потестировать срабатывание событий.
напомню у меня БЭСТ5.34.32.13
На открытие и запись:.

Код
altd()
Return  NoOrYes("Нажми кнопку",2,{" Да "," Нет "})=1 
на событие перед записью:

Код
// AltD()
 dbPush()
 NetUse('Mprim01',LoadPath() +'\Sclad\Mprim.dbf')
 DispBox(1,0,23,79,'' )
 SayScreen( "Наименование ",2,1,'W+/B')
 MPRIM01->(InitList(3,20,76,{{{||Mprim01->Name},0}}))
 Mprim01->(DbCloseArea())
 DBPop()
 Return .T.
Я утверждаю (по крайней мере у меня так), что событие "Запись документа" не сработает.
если закомментировать строку
Код
 //MPRIM01->(InitList(3,20,76,{{{||Left(MPrim01->Name,33)},0}})) 
то событие "Запись документа" сработает.

А если при открытии ответить "Нет" вроде как документ нельзя править, оказывается можно исправить содержимое накладной вплоть до добавления или удаленя новых позиций и сохранение происходит по клавише Esc на Вопрос можно ответить "Записать" и все записывает.
Как правильно написать плагин на событие "Запись документа" в БЭСТ5
 
Цитата
nordk пишет:
А мы точно про БЭСТ-5 говорим ?
Точно
Если в плагине на событие "перед записью" не использовать инитлист то все отрабатывает штатно.
Цитата
Сергей Иваницкий пишет:
Еще есть странность На событие"вход в документ" если вернуть .F. по идее должно быть заблокировано изменение документа в БЭСТе 4 так и было шапка документа рисовалась синим цветом и никакие попатки сохранить не работали В БЭСТе5 если на событие "Вход в документ" вернуть .F. документ позволяет изменить например количество товара или цену при нажатии F10 ничего не происходит но если нажать Esc то возникает предложение сохраниться при утвердительном ответе предлагает перформировать счет фактуру и спокойно сохраняет приэтом события перед записью с запись документа не срабатывают. Как тогда блокировать документ?
Тут проверил события срабатывают, просто на выбранный документ ничего не влияло, но то что документ можно изменить и сохранить -факт, хотел прикрепитьвородовские документы со скриншотами, пишет ошибка при сохранении.
Best5.docx При сохранении файла произошла ошибка.Bes5_2.docx При сохранении файла произошла ошибка.
Вызов пользовательских модулей через главное меню БЭСТ5
 
Спасибо поищу.
Как правильно написать плагин на событие "Запись документа" в БЭСТ5
 
Спасибо Константин.
Меня правда интересовало больше почему не срабатывает заявленный механизм соответствующих событий, а не алгоритм программы.
Цитата
Сергей Иваницкий пишет:
Теперь о проблеме, в БЭСТе 5 так не получается у меня.
вернее 2 InitList()-а появляются и работают в смысле заполняются и т. д. но после их завершения если возвращается .T. не вызывается функция "запись документа", если возвращается .F. при следующем нажатии F10 не вызывается не только событие "запись документа" но и событие "перед записью", документ просто сохраняется.
Еще есть странность На событие"вход в документ" если вернуть .F. по идее должно быть заблокировано изменение документа в БЭСТе 4 так и было шапка документа рисовалась синим цветом и никакие попытки сохранить не работали В БЭСТе5 если на событие "Вход в документ" вернуть .F. документ позволяет изменить например количество товара или цену при нажатии F10 ничего не происходит но если нажать Esc то возникает предложение сохраниться при утвердительном ответе предлагает переформировать счет фактуру и спокойно сохраняет при этом события перед записью с запись документа не срабатывают. Как тогда блокировать документ?

Если интересно напишу в чем смысл моего плагина.
я его написал давно и операторы привыкли.
Создается обычная расходная накладная на списание с фасцеха штатными средствами БЭСТ
в общем предполагается её повторное открытие и редактирование в самых широких пределах иногда операторы списывают не ту партию или еще что-то путают и задним числом приходится исправлять отсюда проверки так как может быть расход в сопряженном документе, далее почему 2 инитлиста - просто удобно мне, можно по другому как-то организовать, но зачем? механизм вполне отлажен, создавать каждый раз новый ном. номер на мой взгляд не очень Хорошо пусть выбирают из существующего, если есть создавать приходится не часто, а справочник партий и картотека у меня создавались без участия оператора, по большому счету оператор вводит только группу, ном.номер из справочника, количество и продажную цену если не согласен с предлагаемой.
Насчет создания документа через объект уже подумывал, может так и сделаю видел пример но описания объектов не нашел может Плохо искал. Через гуид строк предложение правильное может воспользуюсь, но оно не отменяет создания дополнительного поля для связи и потом перед сохранением документа записи его строк в БД еще нет и как узнать их гуид не знаю может getmat()?

У меня просбьа попробуйте скомпилировать программу как есть и повесьте ее на событие перед записью а на событие запись что нибудь вроде

Код
altd()
SayAndWait('Ура!')
Return .T. 
Мне интересно, у меня одного такая глючня или у всех, желательно попробовать и с новым и с существующим документом.
Как правильно написать плагин на событие "Запись документа" в БЭСТ5
 
Цитата
nordk пишет:
И вы все это в таком виде решили в БЭСТ-5 потянуть?
Вместо того чтобы сейчас сделать одну табличку сопоставления по возможности автоматизированную и потом кнопушу сделай цепочку накладных сама. А в папку пользователя положить контрольную таблицу связки.
Все телодвижения операторов станут примерно такими: проверить сопоставления.
И посмотреть как потом все само построится в течении пары минут - не надо ничего создавать проверять, добавлять.импортировать
Спасибо за ответ Коенстантин, но я ничего не понял.
К сожаленнию сделать 1 табличку сопоставлений не получится, у нас товар часто фасуется под клиента и размер фасовки или наименование товара заранее неизвестно. Да шаблоны это Хорошо, но вот что делать мне с вполне работающим механизмом на БЭСТ4, почему не вызывается событие на запись документа? вот Вопрос.
Вызов пользовательских модулей через главное меню БЭСТ5
 
Б5.34.32.13
Есть такой раздел в документации, вот только Вопрос можно ли таким образом запустить плагин *.hrb?
я попробовал сделал файл
userbdll.txt
в нем 1 строка
Логистика\Товары. Продукция\Работа с картотекой;Блокировка отгруженных документов;hFileEval(\\Srv2\Best5\Pro\PLUGINS\EXTENSNS\SCLAD\uLock.hrb,{});Sclad;1
что-то не работает, описание какое то куцее, для графической формы вроде все ясно, а вот для текстовой 1 пример без разбора, у меня в БЭСТ4 был такой пункт меню (самостийный)
Пункт в меню появляется, при активации пишет ошибку
"нет функции hFileEval(\\Srv2\Best5\Pro\PLUGINS\EXTENSNS\SCLAD\uLock.hrb,{}) в Sclad"
Уважаемые коллеги подскажите можно ли как-то использовать уже готовый плагин в ползовательском меню?
Как правильно написать плагин на событие "Запись документа" в БЭСТ5
 
Б5.34.32.13
Уважаемые коллеги, в БЭСТ 4 были написаны плагины на вход в документ, проверку перед записью и запись документа в "Реализации со склада". они делали всяки проверки и расчеты и были взаимосвязаны через глобальную переменную aGlobVars. и прекрасно работали.
Переношу плагины в БЭСТ5 проверяю работоспособность и т.д. и вдруг выясняется что событие "Перед записью" глючит, причем весьма странно. У меня перед записью проверяется много чего и все работает нормально за исключением одного.
Опишу проблему. У нас при реализации со склада есть операция (03 Реализация с фасцеха)
При этом происходит списание со склада "Фасцех" иными словами фасуем товар списываем один номенклатурный номер, приходуем на основной склад с другим ном.номером. Реализовано это было так:
на событи "перед записью" проверялась опреция 03 и если это так запускалась функция из 2-х InitList() (создаются 2 временных таблицы БД). В одном InitList()-е товар из документа в другом к этому товару каждой позиции выбирался из справочника другой товар или несколько товаров. соответственно призводятся всякие проверки и пр. После сохранения в uGlobVars[99](объявлена при входе в документ) записываются имена временных таблиц. После этого на событие "запись документа" создается документ прихода на основании таблицы 2 в БД MdocM добавлено поле uLink (С23) (Grup+nnum+partia)через которое устанавливается связь между строками прихода и расхода.
Теперь о проблеме, в БЭСТе 5 так не получается у меня.
вернее 2 InitList()-а появляются и работают в смысле заполняются и т. д. но после их завершения если возвращается .T. не вызывается функция "запись документа", если возвращается .F. при следующем нажатии F10 не вызывается не только событие "запись документа" но и событие "перед записью", документ просто сохраняется. Еще есть странность На событие"вход в документ" если вернуть .F. по идее должно быть заблокировано изменение документа в БЭСТе 4 так и было шапка документа рисовалась синим цветом и никакие попатки сохранить не работали В БЭСТе5 если на событие "Вход в документ" вернуть .F. документ позволяет изменить например количество товара или цену при нажатии F10 ничего не происходит но если нажать Esc то возникает предложение сохраниться при утвердительном ответе предлагает перформировать счет фактуру и спокойно сохраняет приэтом события перед записью с запись документа не срабатывают. Как тогда блокировать документ?
Уважаемые коллеги объясните что не так если можно.
вот листинг 2 InitList() сильно урезано в смысле проверок

Код
//Function u2Init()
 Local cInsDB1, cInsDB2, cInsIdx1, cInsIdx2, aInsStru, I, N, K, K1, J:=0 , CB:=.T.//,BB:={}
 Local aSet, aSetKey//, aScr:=WSelect()
 Local bScr, VK := Chr(10)+Chr(13)
 Local aKval, aEd, aFas, Ch:=.T.,A:={}
 Private aRef, aSortSeek1,cGr,cName,cHeads,cWhen,cGrup:='00001',cValid, _numrec:=0, aKeyFirst:=.F., DocNo:='Новый ',aKols:={},aLinks:={}
// AltD()
 If AllTrim(pCodeOper)='03' //отпуск на фасцех
   bScr:=SaveScreen()
   aSet:=SAVESET()
   aSetKey:=SaveSetKey()
//   WSelect(0)
   SetLastKey(0)
   NetUse('MLabel1',LoadPath() +'\Sclad\Mlabel.dbf')
   MLabel1->(ORDSETFOCUS('MLabel_S'))
   DBPUSH('MKART','MKART')
   DBPUSH('MGrup','Mgrup')
   DBPUSH('Mlabel','MLabel')
   DBPUSH('Spr_Part','TAG_NUM')
   DBPUSH('Mdocm','mdocm',,{'UPPER(Sclad+Vid+Type+CodeDoc+NumDoc+DTOS(Date))',Upper(MDoc->Sclad+MDoc->Vid+MDoc->Type+MDoc->CodeDoc+MDoc->NumDoc+DtoS(MDoc->Date))})
// NetUse('MDOC01',LoadPath() +'\Sclad\MDOC.dbf')
// MDOC01->(ORDSETFOCUS('MDOC'))
   NetUse('MDOCM1',LoadPath() +'\Sclad\MDOCM.dbf')
   MDOCM1->(ORDSETFOCUS('MDOCM'))   // UPPER(Sclad+Vid+Type+CodeDoc+NumDoc+DTOS(Date))
   MDOCM1->(SetScope('UPPER(Sclad+Vid+Type+CodeDoc+NumDoc)', Upper('00000211001'+MDOC->NumDoc1)))
   MDOCM1->(DbGoTop())
//Заполняем таблицу
//AltD()
// создаем временные таблицу
     cInsDB1 := TempFile(m->GlobalTmpPath,"DBF")
     cInsDB2 := TempFile(m->GlobalTmpPath,"DBF")
     cInsIdx1:=Left(cInsDB1,Len(cInsDB1)-3)+'cdx'
     cInsIdx2:=Left(cInsDB2,Len(cInsDB2)-3)+'cdx'
     aInsStru := {{'GRUP','C',5,0},{'NNUM','C',13,0},{'PARTIA','C',5,0},{'NAME','C',25,0},{'KOL','N',19,4},{'KOL1','N',19,4},{'CENA','N',19,4},{'CENA1','N',19,2},{"LINK","C",23,0},{"STAT","N",1,0},{"NUMSTR","N",5,0},{"SERT","C",25,0},{"GTD","C",30,0},{"COUNTRY","C",25,0}}
// Stat = 0 - удалена, 1 - кол. уменьшилось, 2 - без изменений, 3 - кол. увеличелось, 4 - новая запись
     DbCreate(cInsDB1,aInsStru)
     NetUse('TMC1',cInsDB1)
     TMC1->( ORDCREATE(cInsIdx1,'TMCNUM','NUMSTR',{||NUMSTR})  )
     TMC1->( ORDCREATE(cInsIdx1,'TMC','UPPER(GRUP+NNUM+PARTIA)',{||Upper(GRUP+NNUM+PARTIA)})  )
     DbCreate(cInsDB2,aInsStru)
     NetUse('TMC2',cInsDB2)
     TMC2->( ORDCREATE(cInsIdx2,'TMC_LINK','Upper(LINK)',{||Upper(Link)})  )
     TMC2->( ORDCREATE(cInsIdx2,'TMC','UPPER(GRUP+NNUM+PARTIA)',{||Upper(GRUP+NNUM+PARTIA)})  )
     TMC2->(OrdSetFocus('TMC_LINK'))
     N = GetKolMat()
       For I = 1 To N
         AAdd(aLinks,Upper(GetMat(I,105, 5)+GetMat(I,110, 13)+GetMat(I,550,5)))
         AAdd(aKols,GetMat(I,61, 15,.t.))
         TMC1->(ADDREC())
         TMC1->GRUP:= GetMat(I,105, 5)
         TMC1->NNUM:= GetMat(I,110, 13)
         TMC1->PARTIA:= GetMat(I,550,5)
         TMC1->NAME:= GetMat(I,1, 35)
         TMC1->KOL:= GetMat(I,61, 15,.t.)
         TMC1->CENA:= GetMat(I,669, 19,.t.)
         TMC1->LINK:=Upper(GetMat(I,105, 5)+GetMat(I,110, 13)+GetMat(I,550,5))
         TMC1->Stat:=4
         TMC1->NUMSTR := I
         Iif(SPR_PART->(DbSeek(Upper(GetMat(I,105, 18)+GetMat(I,550,5)))),TMC1->Sert:=SPR_Part->SERTIFICAT,)
         Iif(SPR_PART->(DbSeek(Upper(GetMat(I,105, 18)+GetMat(I,550,5)))),TMC1->GTD:=SPR_Part->GTD,)
         Iif(SPR_PART->(DbSeek(Upper(GetMat(I,105, 18)+GetMat(I,550,5)))),TMC1->COUNTRY:=SPR_Part->COUNTRY,)
         TMC1->( F_DBUNLOCK() )
         If GetMat(I,105, 5)='00030'
           TMC2->(ADDREC())
           TMC2->GRUP:= TMC1->GRUP
           TMC2->NNUM:= TMC1->NNUM
           TMC2->PARTIA:= TMC1->PARTIA
           TMC2->NAME:= TMC1->NAME
           TMC2->KOL:= TMC1->KOL
           TMC2->CENA:= TMC1->CENA
           Iif(SPR_PART->(DbSeek(Upper(GetMat(I,105, 18)+GetMat(I,550,5)))),TMC2->CENA1:=SPR_Part->OCENA2,)
           TMC2->LINK:=TMC1->LINK
           TMC2->Stat:=4
           TMC2->Sert:=TMC1->SERT
           TMC2->GTD:=TMC1->GTD
           TMC2->COUNTRY:=TMC1->COUNTRY
           TMC2->( F_DBUNLOCK() )
         EndIf
       Next
   Mdocm1->(OrdSetFocus('MDocM_K'))
   TMC1->(DbGoTop())
   uGlobVars[99]:= cInsDB1 + ',' + cInsDB2 // передача файлов на запись через глобальную переменную
// initlist's
//задание параметров первой прямоугольной области
     DispBox(1,0,13,79,( Chr( 201 ) + Chr( 205 ) + Chr( 187 ) + Chr( 186 ) + Chr( 188 ) + Chr( 205 ) + Chr( 200 ) + Chr( 186 )+' ' ) ,"W+/B")
//задание параметров второй прямоугольной области
     DispBox(13,0,23,79,( Chr( 204 ) + Chr( 205 ) + Chr( 185 ) + Chr( 186 ) + Chr( 188 ) + Chr( 205 ) + Chr( 200 ) + Chr( 186 )+' ' ) ,"W+/B")
//     SayScreen( "==================================T======T======T==============T============",1,1,'W+/B')
     SayScreen( "          Наименование              Квал   Фас    Кол-                Цена  ",2,1,'W+/B')
//     SayScreen("│==================================│======│======│==============│==============│",3,0,'W+/B')
     SayScreen( "Группа        Н/Номер                Партия                                ",12,1,'W+/B')
//     SayScreen("│------------------------------------------------------------------------------│",11,0,'W+/B')
//SayScreen("│==============================================================================│",13,0,'W+/B')
//     SayScreen("│==================================T======T======T==============T==============│",13,0,'W+/B')
     SayScreen( "          Наименование              Квал   Фас    Кол                 Цена  ",14,1,'W+/B')
//     SayScreen("│==================================│======│======│==============│==============│",15,0,'W+/B')
//     SayScreen("│------------------------------------------------------------------------------│",21,0,'W+/B')
     SayScreen( "Группа        Н/Номер                Партия                                ",22,1,'W+/B')
     SayScreen( '[Расх. документ ' + AllTrim(MDOC->Numdoc) + ' '+ DtoC(MDOC->Date)+']',1,3,'GR+/B')
     SayScreen( '[Прих. документ ' + AllTrim(DocNo) + ' '+ DtoC(MDOC->Date1)+']',13,3,'GR+/B')
//Справочники
     cHeads:={;
          {'Группа.................... ','Grup'},;
          {'Н/номер................... ','NNum'},;
          {'Наименование.............. ','Name'},;
          {'Единица измерения......... ','ED'},;
          {'Квалиф.................... ','Marka'},;
          {'Сорт...................... ','Sort'},;
          {'Наимен.................... ','Profil'},;
          {'Вес....................... ','Razmer'};
          }
     cWhen:={{||aIn[1]:=cGrup,.F.}}
     cValid:={,{||sValid()}}
     aSortSeek1:={;
          {"- по номеру      ",{"Группа      ","Шифр         "}, {'GRUP','NNUM'},'UPPER(" "+aIn[1]+aIn[2])',,,,'Mlabel_S'},;
          {"- по наименованию",{"Группа      ","Наименование "}, {'Grup','LEFT(Name,15)'},'UPPER(" "+aIn[1]+aIn[2])',,,,'MLab_St'};
          }
     mLabel1->( MAKEREFER("sl","Номенклатурный справочник",1,{"Гр.","Шифр ","Наименование   ","Ед.","Квал.","Фас.","Доп."},{1,1,15},;
          "n/w,w+/n",{"NNUM"},{"aIn[2]"},'UPPER(" "+aIn[1]+aIn[2])',{{||Field->GRUP},{||Field->NNUM},{||Left(Field->NAME,25)},{||Left(Field->ED,5) },{||Left(Field->Marka,6)},{||Left(Field->RAZMER,6)},{||Left(Field->Sort,10)}},;
          aSortSeek1,cHeads, ,cWhen ,cValid ,;
          ,{||mlabel1->(SetScope("UPPER(Status+GRUP)",Upper(" "+aIn[1]))),.t.} ,{||aIn[4]:=Left(Field->Name,25),.t.}, , ,;
          , , , , ,;
          ,'cFind$UPPER(Name)'))
     mGrup->( MAKEREFER("sg","Cправочник групп",1,{"Группа","Наименование  "},;
          {1,1,15}, "n/w,w+/n",{"CODE"},{"aIn[1]"},'UPPER(aIn[1])',;
          {{||Field->CODE},{||Field->NAME}};
          ,,,,,,,,{||cGrup:=Field->Code,.T.},;
          ,,,,,,,,'cFind$UPPER(Name)'))
     aRef:={'SG','SL'}
// Init2(.T.)
     TMC1->(OrdSetFocus('TMCNUM'))
     TMC1->(DbGoTop())
     Do While INIT1(.T.).And.INIT2(.T.)
     EndDo
// записываем
AltD()
   MLabel1->(DbCloseArea())
   MDocm1->(DbCloseArea())
   DBPOP()
   DBPOP()
   DBPOP()
   DBPOP()
   DBPOP()
 //  WSelect(aScr)
   RestSetKey(aSetKey)
   RESTSET(aSet)
   RestScreen(,,,,bScr)
 EndIf
Return .T.
// Return LastKey()!=27


Function INIT1(lFlag)
 Private nTop,nBot,cColHead,aBlockCols,cCurProc,bDel,aHeads,aColors,aColors1
 Private bPreGet
 Private hnrowact //:=1
//altd()
 nTop:=3
 nBot:=11
 cColHead:=76
 сCurProc:={||MOVE1(lFlag,@hnRowAct,m->_numrec,RecNo())}
//Заголовки колонок реестра
 aBlockCols:={;
      {{||Left(MLabel->Name,33)},0},;
      {{||Left(MLabel->Marka,6)},34},;
      {{||Left(MLabel->Razmer,6)},41},;
      {{||Str(Field->kol,14,4)},48},;
      {{||Str(Field->Cena,14,2)},63};
      }
 bDel:={||.F.}
 aColors :={||Iif( Field->Stat = 0 ,"N+/B",Iif(Field->Stat = 1, 'R+/B',Iif(Field->Stat = 2,'W+/B',Iif(Field->Stat = 3,'G+/B','GR+/B'))))}
 aColors1:={||Iif( Field->Stat = 0 ,"N+/W",Iif(Field->Stat = 1, 'R/W',Iif(Field->Stat = 2,'N/W',Iif(Field->Stat = 3,'G/W','GR/W'))))}
//Комментарии
 If lFlag
//   ScrTitul(24, Chr(24)+Chr(25)+":Перемещение, TAb:Переключение F10:Сохранить Esc:Выход")
      SayScreen( "TAb:Переключение F10:Сохранить Esc:Выход                        ", 24,2,'N/W')

 EndIf
 TMC1->(F_SETRELATION("MLABEL","UPPER(Grup+NNum)"))
 TMC1->(InitList(nTop,nBot,cColHead,aBlockCols,сCurProc,,,,,,,,,,,,,,aColors,aColors1,,,,,,,,,hnrowact))
 Return !(LastKey()=27.Or.LastKey()=-9)
//
//Второй инитлист
Function INIT2(lFlag)
 Private mTop,mBot,mLeft,dColHead,bBlockCols,dCurProc,cDel,bHeads,mLeft,bValid,bWhen,bPost,bScrInit, bPict, bHotKey
 Private cPreGet
 Private rnRowAct //:=1
// AltD()
 mTop:=15
 mBot:=21
 mLeft:=1
//Заголовки над полями
 dColHead:=76
 dCurProc:={||MOVE2(lFlag,@rnRowAct)}
// dCurProc:={||2}
//Заголовки колонок реестра
 bBlockCols:={;
      {{||Left(MLabel->Name,33)},0},;
      {{||Left(MLabel->Marka,6)},34},;
      {{||Left(MLabel->Razmer,6)},41},;
      {{||Str(Field->kol,14,4)},48},;
      {{||Str(Field->Cena,14,2)},63};
      }
//Описание полей ввода
 bHeads:={;
      {"Группа................: ","GRUP"},;
      {"Номенклатурный номер..: ","NNUM"},;
      {"Пвртия................: ","Partia"},;
      {"Наименование..........: ","NAME"},;
      {"Количество............: ","KOL"},;
      {"Цена..................: ","Cena"},;
      {"Цена продажная без НДС: ","Cena1"}}
// bWhen:={,{||uBeforeIn()},{||.F.},{||.F.},,{||uBefore1()},{||uBefore1()}}
// bValid:={,{||uCheck2()},,,{||uCheck5()},{||uCheck6()},{||uCheck7()}}
 bPost:={||uSaveRec()}
// cDel:={||uCheckDel()}
 cDel:={||.F.}
 bPict:={,,,,'99999999999.9999','99999999999.9999','99999999999.9999'}
// bScrInit:={||uBeforeIn()}
 If lFlag
//   ScrTitul(24, Chr(17)+Chr(217)+ ":Изменить F4:Ввод новой F8:Удаление F10:Сохранить Esc:выход")
      SayScreen( "Enter:Изменить F4:Ввод новой F8:Удаление F10:Сохранить Esc:выход", 24,2,'N/W')

 EndIf
 TMC2->(SetScope('Upper(Link)',Upper(TMC1->Link)))
 TMC2->(DbGoTop())
// AltD()
 TMC2->(F_SETRELATION("MLABEL","UPPER(Grup+NNum)"))
 TMC2->(InitList(mTop,mBot,dColHead,bBlockCols,dCurProc,bHeads,m->aRef,bPict,bWhen,bValid,,cDel,bScrInit,,,bPost,,,,,,,,,,,,,,m->bHotKey))
 Return !(LastKey()=27.Or.LastKey()=-9)
Function MOVE1(_xlActiv,hnRowAct,xRec,xRec1)
 Local m1end, m1Ar
 m1End:=2
// AltD()
 m1Ar:=TMC1->( QScroll() )
 hnRowAct:=m1Ar[6]
 If LastKey()=9     // клавиша Tab
//   TMC1->(QOFF())
   SetLastKey(0)
   m1End:=0
 Else
   If LastKey()=-9
       m1End:=0
   Else
     If xRec ==NIL.Or.xRec<>xRec1
       Init2(.F.)
       m->_numrec:=xRec1
     EndIf
     If _xlActiv
       m1End:=2
       TMC1->(F_SETRELATION("MLABEL","UPPER(Grup+NNum)"))
       SayScreen( TMC1->Grup, 12,8,'N/W')
       SayScreen( TMC1->NNUM, 12,23,'N/W')
       SayScreen( TMC1->Partia, 12,45,'N/W')
       SayScreen( MLabel->ED, 2,55,'GR+/B')
//       SayScreen( Left(MLabel->NAME,25), 12,51,'N/W')
     Else
       QOff()
       m1End:=0
     EndIf
   EndIf
 EndIf
 Return m1end

Function MOVE2(_lActiv,rnRowAct)
 Local m2End,m2Ar
 m->aKeyFirst:=.T.
// AltD()
 m2Ar:=TMC2->(QScroll())
 rnRowAct:=m2Ar[6]
// SayAndWait("INIT2"+Str(LastKey()))
 If LastKey()=9.Or.!_lActiv
   TMC2->(QOFF())
   SetLastKey(0)
   m2End:=0
   TMC2->(F_SETRELATION("MLABEL","UPPER(Grup+NNum)"))
   SayScreen( TMC2->Grup, 22,8,'N/W')
   SayScreen( TMC2->NNUM, 22,23,'N/W')
   SayScreen( TMC2->Partia, 22,45,'N/W')
   SayScreen( MLabel->ED, 14,55,'GR+/B')
 Else
//Altd()
   If LastKey()=-9
       m2End:=0
   Else
     m2End:=2
     TMC2->(F_SETRELATION("MLABEL","UPPER(Grup+NNum)"))
     SayScreen( TMC2->Grup, 22,8,'N/W')
     SayScreen( TMC2->NNUM, 22,23,'N/W')
     SayScreen( TMC2->Partia, 22,45,'N/W')
     SayScreen( MLabel->ED, 14,55,'GR+/B')
   EndIf
 EndIf
 Return m2End

Function uSaveRec()
 Local I:=0, K1:="", K2:=""
//AltD()
 Iif(mLabel->(DbSeek(Upper(TMC1->GRUP+TMC1->NNUM))),K1 := mLabel->Marka,)
 Iif(mLabel->(DbSeek(Upper(TMC2->GRUP+TMC2->NNUM))),K2 := mLabel->Marka,)
 TMC2->(RecLock())
 TMC2->Link:=TMC1->Link
 If Upper(AllTrim(K1))==Upper(AllTrim(K2))
   TMC2->Sert:=TMC1->Sert
   TMC2->GTD:=TMC1->GTD
   TMC2->Country:=TMC1->Country
 EndIf
 Iif(nApp=2,TMC2->Stat:=4,)
 TMC2->(F_DBUnlock())
 I := AScan(ALinks,Upper(TMC1->Link))
 If nApp = 2
   aKols[I]:=aKols[I]-aIn[5]
 Else
   aKols[I]:=aKols[I]-aIn[5]+aLastIn[5]
 EndIf
 Return .t.

 
Как правильно написать плагин на событие "Запись документа" в БЭСТ5
 
Цитата
Алексей Новиков пишет:
Добавьте перед qinput вызов semafor(.F.)
А после qInput - semafor(.T.)
Помогло, Спасибо
Аналог поля USER_CODE в MDOC.DBF в БЭСТ5
 
Б5.34.32.13
Уважаемые коллеги, в БЭСТ4 в mdoc.dbf и в других файлах было поле USER_CODE
куда записывался номер пользователя, есть ли аналог в БЭСТ5?
Как правильно написать плагин на событие "Запись документа" в БЭСТ5
 
Б5.34.32.13
В БЭСТ 4 был плагин на запись документа
Код
  Private dScrInit,dHeads, dRow:=14, dCol:=17, dWhen, dValid
     If Empty(mDoc->uDate_Ot).Or. mDoc->uDate_Ot=mDoc->Date 
    dWhen:={{||Iif(Empty(aLastIn[1]),aIn[1]:=mDoc->Date,),.T.}}
    dValid:={{||aIn[1]<=mDoc->Date}}
dScrInit:={||DispBox(dRow,dCol,dRow+2,dCol+30,Chr(201)+Chr(205)+Chr(187)+Chr(186)+Chr(188)+Chr(205)+Chr(200)+Chr(186)+'
 ',"N/W") ,;
      SayScreen('[Введите дату отгрузки]',dRow,dCol+ 3,'B/W'),;
      SayScreen("Дата отгрузки:",dRow + 1,dCol+ 2,'N/W'),;
      1}
    dHeads :={ { {dRow+1,dCol+ 18},'uDate_ot'}   }
    mDoc->(Qinput(dRow,dCol,dRow+3,dCol+30,dHeads,1,,,dWhen,dValid,,dScrInit   ,,,'RESTOFF'))
   EndIf
 Return .T.

Все работало, переношу в БЭСТ5 - не работает пишет
Ошибка "Запись(документ) уже редактируется Вами!"
Я то думал, что документ уже записан.
Уважаемые коллеги ка преодолеть это ?
Необходимо выполнить восстановление серверной части
 
Поместил пользователя в группу администраторов - не помогло, запустил на клиенте бэст от имени администратора - тоже не помогло, снес клиента, установил заново - не помогло.Сергей Павличенко пишет:
Цитата
После выполнения индексации выставляется флаг
Где этот флаг записывается? я проверил каталог где лежит БД БЭСТ5 прав там достаточно для чего угодно.
Что еще попробовать.
Необходимо выполнить восстановление серверной части
 
B5.34.32.11
Уважаемые коллеги.
У меня такая проблема пытался я тут установить сервер терминалов на Server2008
Ну вроде все заработало для тех кто заходит через терминал, а вот при сетевом входе БЭСТ стал писать ошибку "Необходимо выполнить восстановление серверной части" с иезуитским вопросом "выполнить/отмена".
Если возможен монопольный доступ к БД программа что-то делает, типа индексирует, и даже пишет, что все исправила, однако если продолжить вход, опять появляется вышеозначенная фраза и все повторяется.
Я пробовал индексировать на сервере с восстановлением целостности, но не помогло.
Помогите разобраться.
Декларация НДС стр.150
 
Спасибо,
Но есть есть еще Вопрос при формировании декларации по НДС
"Раздел12" выбираем "Не выводить", а он все равно формируется.
Декларация НДС стр.150
 
При создании записи в книге покупок надо выбирать не "Оприходование", а "Прочее" тогда все попадает куда надо.
НДС по товарам мед.назначения
 
Б5.34.32.8
В счет-фактуре имеются товары, в том числе мед.назначения.
Чтобы выделить товары мед.назначения(НДС не облагается) в книге продаж в "книге оп.необлагаемой НДС" выбрали 1010204
В декларацию в раздел 7.эта запись попадает,но другие товары из этой счет-фактуры в декларацию не попадают совсем.
Если не выделять "книге оп.необлагаемой НДС" выбрали 1010204,то овсе попадает в общий раздел декларации.
Уважаемые коллеги подскажите.
Декларация НДС стр.150
 
Б5.34.32.8
Уважаемые коллеги, может кто сталкивался, подскажите.
Мы уплатили таможенный взнос,с нас взяли НДС,
Мы набили счет-фактуру
в книгу покупок,нужно что бы она попала в стр.150 в декларацию.
В книге покупок в графе "код операции по НДС" выбрали 20.
В декларацию раздела 2 стр 150 эта запись не попала, а попала в стр 120 .Что мы делаем не так?
Переменная aGlobVars в БЭСТе 5
 
Б5.34.32.8
Уважаемые коллеги подскажите.
Переношу свои плагины с БЭСТ4 на БЭСТ5 в меню товары. готовая продукция/учет движения товаров/реализация со склада у меня написано несколько плагинов на вход в документ, на прайс лист, на расчет проводок, перед сохранением, .и после сохранения, в БЭСТ4 между ними осуществлялся обмен через переменную aGlobVars (array[100]), я вдруг выяснил, что внутри документа в БЭСТ5, где считаются проводки и перед сохранением и при входе в прайс лист она переопределена и в ней лежит текущий набор строк документа. как бы это обойти.
Я тут хотел обмениваться через MemDat, но выяснилось, что я не могу однозначно идентифицировать текущий документ, Хорошо когда он открыт на редактирование, и то номер можно поменять, а для нового вообще не понятно. Может как то можно прочитать конкретный Get объект в котором хранится текущий номер? ну и педыдущий если было изменение?, Может вообще где нибудь лежит ID документа - то что в проводки например записывается?
Может есть другой вариант обмена данными между моими плагинами
Вывод в Excel из БЭСТ5
 
Цитата
Сергей Джулай пишет:
oApp := oleCreateObject("Excel.Application")
Вот так не пробовали?
Спасибо помогло.

Цитата
nordk пишет:
сколько раз уже на эту тему тут писалось - попробуйте поиском на форуме воспользоваться
Искал, видимо неудачно, на запрос про Excel выпадает множество страниц и в них в основном про штатные возможности в общем поковырялся с полчаса и ничего не нашел.
Спасибо всем.
Есть еще Вопрос несколько не по теме. Я раньше когда был БЭСТ-4 писал плагины и отладку делал на локальной машине и когда все получалось перекидывал *.hrb на сервер и все было Хорошо, Вопрос по бэст5 можно ли как-то тоже сделать у себя на локальной машине нечто подобное, так удобнее работать?
Вывод в Excel из БЭСТ5
 
Б5.34sp32.4
Уважаемые коллеги.
При переходе с БЭСТ 4+ на БЭСТ 5 мне нужно переписать несколько плагинов.
В некоторых имелась функция вывода в Excel в каком то из примеров подсмотрел

Код
  TRY
   oApp := CreateObject( "Excel.Application" ) //попытка создать объект Excel
   CATCH
   Alert("Excel не доступен!")
   Return
   END
все работало, в БЭСТ 5 дает ошибку, появляется окошко "Excel не доступен! опции FLERT не указаны", переменная oApp имеет значение NIL
Страницы: Пред. 1 2 3 4 5 6 7 8 9 10 След.