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

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

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


Форум

Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Страницы: Пред. 1 2 3 4 След.
RSS
Из забытого прошлого
 
Задача такая:
Нужно создать в БЭСТе 4 дополнительный справочник автомобилей.
В таблице должны быть всего 3 колонки – код партнера (из справочника партнера), имя партнера и марка автомобиля. Далее при печати накладной делаем проверку кода аналитики и кода партнера в справочнике автомобилей, в итоге даем для выбора список авто.

Разработка очень схожая с темами уроков. Но вот нужно сделав один раз выбор партнера, сделать так чтобы в таблицу БД попадали код и имя партнера.
 
FUNCTION Main()
LOCAL aSet,aSetKey,nTop,nBot,cColHead,aBlockCols,cCurproc,aHeads,bDel,aWhen,aPic,nUniMode,aRef,cFindMacro

aSet:=SAVESET()
aSetKey:=SAVESETKEY()


NETUSE("WORK",LOADPATH()+"\real\work.dbf",,.F.)
NETUSE("_PARTNER",LOADPATH()+"\PARTNER.dbf",,.F.)

DISPBOX(2,0,23,79,( CHR( 201 ) + CHR( 205 ) + CHR( 187 ) + CHR( 186 ) + CHR( 188 ) + CHR( 205 ) + CHR( 200 ) + CHR( 186 )+' ' ),"W+/B")

nTop:=3
nBot:=22

cColHead:={" Дата Номер НАИМЕНОВАНИЕ Кол-во Цена Сумма Заказчик"}

cCurProc:={||"2"}

aBlockCols:={{{||FIELD->tek_data},0}, ;
{{||FIELD->tek_nomer},9}, ;
{{||LEFT(FIELD->NAME,16)},16}, ;
{{||STR(FIELD->kol,5)},33}, ;
{{||STR(FIELD->cena,9,2)},39}, ;
{{||STR(FIELD->summa,9,2)},49}, ;
{{||LEFT(FIELD->name_p,16)},59}}


aHeads:={{"Введите дату работ.................:","TEK_DATA"}, ;
{"Введите номер документа............:","TEK_NOMER"}, ;
{"Наименование работ.................:","NAME"}, ;
{"Количество.........................:","KOL","1","1","0"}, ;
{"Цена X :","CENA","1","1","0"}, ;
{"Сумма (руб.).......................:","SUMMA"}, ;
{" Наименование контрагента..:","NAME_P"}}

_PARTNER->( MAKEREFER("PARTNERS","Справочник поставщиков",2 ;
,{" Код ","Наименование поставщика"," УНП"},;
{3,5,16}, "n/w,w+/n",{"SHORTNAME"},{"aIn[7]"},,;
{{||FIELD->CODE},{||FIELD->SHORTNAME},;
{||FIELD->CODE_PR}},,,,,,,,,,,,,,,,,'cFind$UPPER(ShortName)';
,,,,,,,,,,,,,,,,,,,,'NAME') )

bDel:={||.T.}
nUniMode:=2
aWhen:={,,,,,{||aIn[6]:=aIn[4]*aIn[5],.T.}}
aPic:={,,,,,"999999999.99"}
aRef:={,,,,,,"Partners"}

WORK->( INITLIST(nTop,nBot,cColHead,aBlockCols,cCurProc,;
aHeads,aRef,aPic,aWhen,,;
nUniMode,bDel,,,,;
,,,,,;
,,cFindMacro,,,;
,,,,,))

WORK->( DBCLOSEAREA() )
_Partner->( DBCLOSEAREA() )

RESTSETKEY(aSetKey)
RESTSET(aSet)

RETURN NIL

Это код из урока, хочу пока научится на нем затянуть код партнера в таблицу БД
Изменено: Дмитрий Хващевский - 24.05.2010 15:35:56
 
Цитата
Дмитрий Хващевский пишет:
{" Наименование контрагента..:","NAME_P"}}


Лучше сделать вот так:
{" Код контрагента...........:","[имя поля]"},
{" Наименование контрагента..:","NAME_P"}}

а в справочнике

Код
{"SHORTNAME"},{"aIn[7]"}

заменить на
Код
{"code","SHORTNAME"},{"aIn[7]","aIn[8]"}


Ну и соответстветствующие исправления связанные с кодом 2 для справочника -
индекс в справочнике указать и строку проверки(поиска) "UPPER([выражение поиска])"
 
Вот такой код:
FUNCTION Main()
LOCAL aSet,aSetKey,nTop,nBot,cColHead,aBlockCols,cCurproc,aHeads,bDel,nUniMode,aRef,cFindMacro


aSet:=SAVESET()
aSetKey:=SAVESETKEY()
//открываем справочник авто
NETUSE("AVTO",LOADPATH()+"\sclad\Avto.dbf",,.F.)
//открываем справочник партнеров
NETUSE("_PARTNER",LOADPATH()+"\PARTNER.dbf",,.F.)
//задание параметров прямоугольной области
DISPBOX(2,0,23,79,( CHR( 201 ) + CHR( 205 ) + CHR( 187 ) + CHR( 186 ) + CHR( 188 ) + CHR( 205 ) + CHR( 200 ) + CHR( 186 )+' ' ),"W+/B")

nTop:=3
nBot:=22

//Заголовки над полями
cColHead:={" Код НАИМЕНОВАНИЕ МАРКА АВТОМОБИЛЯ"}
//
cCurProc:={||"2"}
//Заголовки колонок реестра
aBlockCols:={{{||FIELD->code},0}, ;
{{||LEFT(FIELD->NAME,24)},7}, ;
{{||LEFT(FIELD->avto,20)},32}}


aHeads:={{"Введите код партнера.:","Code"}, ;
{"Наименование ........:","NAME"}, ;
{"Марка автомобиля.....:","avto"}}

_PARTNER->( MAKEREFER("PARTNERS","Справочник партнеров",2 ;
,{" Код ","Наименование поставщика"," УНП"},;
{3,5,16}, "n/w,w+/n",{"code","SHORTNAME"},{"aIn[1]","aIn[2]"},,;
{{||FIELD->CODE},{||FIELD->SHORTNAME},;
{||FIELD->CODE_PR}},,,,,,,,,,,,,,,,,'cFind$UPPER(ShortName)';
,,,,,,,,,,,,,,,,,,,,'NAME') )

//Запрещение удаления в таблице
bDel:={||.T.}
//Проверка уникальности
nUniMode:=2
//Массив передаваемых переменных
aRef:={,,,,,,"Partners"}

// вызов функции
AVTO->( INITLIST(nTop,nBot,cColHead,aBlockCols,cCurProc,;
aHeads,aRef,,,,;
nUniMode,bDel,,,,;
,,,,,;
,,cFindMacro,,,;
,,,,,))

//Закрываем справочник авто
AVTO->( DBCLOSEAREA() )
//Закрываем справочник партнеров
_Partner->( DBCLOSEAREA() )

RESTSETKEY(aSetKey)
RESTSET(aSet)

RETURN NIL

Почему то, не работает вызов справочника по F2
Изменено: Дмитрий Хващевский - 24.05.2010 17:33:10
 
Вот посмотрите сами

сюда
Код
aHeads:={{"Введите код партнера.:","Code"}, ; 
{"Наименование ........:","NAME"}, ; 
{"Марка автомобиля.....:","avto"}} 

и сюда
Код
aRef:={,,,,,,"Partners"} 

Вы наверно хотите справочник вызвать на первом элементе.
А прописали его для седьмого....
необходимо отслеживать соответствие этих двух массивов.
Первый элемент одного соответствует первому элементу второго
 
:lol: Спасибо.
Все получилось.
Уже наверное надоел, но можно еще Вопрос?
-Как сделать так, чтобы при нажатии F4 - поля были пустые, не запоминали значения полей на котором стоит курсор?
 
Может в предусловии ввода создать массив в котором присвоить ain[i] значения?
Это 9 параметр инитлиста.

P.S. Скачай инструментарий , там в pll функции разработчика, по ним можно набраться опыта, есть примеры.
В справочнике для БЭСТ-4 есть материалы со старого форума которых нет на этом сайте. Все твои Вопросы уже обсуждались и решались уже давно.
С уважением,
Ильин Евгений
 
Цитата
Дмитрий Хващевский пишет:
Как сделать так, чтобы при нажатии F4 - поля были пустые, не запоминали значения полей на котором стоит курсор?

Посмотрите на bPreGet, он отвечает за подобные Вопросы
 
В принципе нормально:
bPreGet:={||aIn[1]:=' ',aIn[2]:=' ',aIn[3]:=' '}

При вводе поля не заполнены, но если нужно подкорректировать,
то приходится набирать заново-поля тоже пустые.Немного не удобно.
Может возможно по другому???
Изменено: Дмитрий Хващевский - 25.05.2010 11:33:31
 
Цитата
Дмитрий Хващевский пишет:
но если нужно подкорректировать,
то приходится набирать заново

Посмотрите на переменную nApp
и примените ее в блоке кода в стиле if(nApp=...,(aIn[1]:=....),)
 
Задачка усложнилась.
Итак нужно создать два справочника водителей и автомобилей.
Справочник водителей первичный. (три колонки - номер и наименование партнера и водитель этой организации)--ЭТО все работает нормально

Справочник автомобилей вторичный (пять колонок - номер и наименование партнера (вызываем справочник партнера), далее марка авто, номер путевого листа (по желанию) и основной водитель (вызываем первичный справочник водителей).

Проблема получилась с вторым справочником.
Вот код.
FUNCTION Main()
LOCAL aSet,aSetKey,nTop,nBot,cColHead,aBlockCols,cCurproc,aHeads,bDel,nUniMode,aRef,cFindMacro


aSet:=SAVESET()
aSetKey:=SAVESETKEY()
//открываем справочник авто
NETUSE("AVTO",LOADPATH()+"\sclad\Avto.dbf",,.F.)
//открываем справочник партнеров
NETUSE("_PARTNER",LOADPATH()+"\PARTNER.dbf",,.F.)
//открываем справочник водителей
NETUSE("_VODITEL",LOADPATH()+"\sclad\voditel.dbf",,.F.)
//задание параметров прямоугольной области
DISPBOX(2,0,23,79,( CHR( 201 ) + CHR( 205 ) + CHR( 187 ) + CHR( 186 ) + CHR( 188 ) + CHR( 205 ) + CHR( 200 ) + CHR( 186 )+' ' ),"W+/B")

nTop:=3
nBot:=22

//Заголовки над полями
cColHead:={"НАИМЕНОВАНИЕ МАРКА и ГОС. НОМЕР АВТОМОБИЛЯ ВОДИТЕЛЬ "}
//
cCurProc:={||"2"}
//Заголовки колонок реестра
aBlockCols:={{{||LEFT(FIELD->NAME,25)},-7}, ;
{{||LEFT(FIELD->marka_gos,26)},19}, ;
{{||LEFT(FIELD->voditel,25)},46}}

aHeads:={{"Введите код партнера...:","Code"}, ;
{"Наименование ..........:","NAME"}, ;
{"Марка и ГОС номер авто.:","marka_gos"}, ;
{"Номер путевого листа...:","plist"}, ;
{"ФИО водителя.......:","voditel"}}

_PARTNER->( MAKEREFER("PARTNERS","Справочник партнеров",2 ;
,{" Код ","Наименование партнера"," УНП"},;
{3,5,16}, "n/w,w+/n",{"code","SHORTNAME"},{"aIn[1]","aIn[2]"},,;
{{||FIELD->CODE},{||FIELD->SHORTNAME},;
{||FIELD->CODE_PR}},,,,,,,,,,,,,,,,,'cFind$UPPER(ShortName)';
,,,,,,,,,,,,,,,,,,,,'NAME') )

_Voditel->( MAKEREFER("VODITEL","Справочник водителей",2 ;
,{" Код ","Наименование партнера"," Водитель"},;
{3,5,16}, "n/w,w+/n",{"voditel"},{"aIn[5]"},,;
{{||FIELD->CODE},{||FIELD->SHORTNAME},;
{||FIELD->Voditel}},,,,,,,,,,,,,,,,,'cFind$UPPER(ShortName)';
,,,,,,,,,,,,,,,,,,,,'NAME') )


//Запрещение удаления в таблице
bDel:={||.T.}
//Проверка уникальности
nUniMode:=2
//Массив передаваемых переменных
aRef:={"Partners",,,,"Voditel"}
//
//bPreGet:={||aIn[1]:=' ',aIn[2]:=' ',aIn[3]:=' X '}
//Коментарий
SHADOWBOX(" F4 - Ввод новой записи F6 - Фильтр F8 - Удаление записи",23,3,23,75,"W/B")

// вызов функции
AVTO->( INITLIST(nTop,nBot,cColHead,aBlockCols,cCurProc,;
aHeads,aRef,,,,;
nUniMode,bDel,,,,;
,,,,,;
,,cFindMacro,,,;
,,,,,))

//Закрываем справочник авто
AVTO->( DBCLOSEAREA() )
//Закрываем справочник партнеров
_Partner->( DBCLOSEAREA() )
//Закрываем справочник водителей
_Voditel->( DBCLOSEAREA() )

RESTSETKEY(aSetKey)
RESTSET(aSet)

RETURN NIL
 
а суть проблемы в чем ?
 
После добавления.

_Voditel->( MAKEREFER("VODITEL","Справочник водителей",2 ;
,{" Код ","Наименование партнера"," Водитель"},;
{3,5,16}, "n/w,w+/n",{"voditel"},{"aIn[5]"},,;
{{||FIELD->CODE},{||FIELD->SHORTNAME},;
{||FIELD->Voditel}},,,,,,,,,,,,,,,,,'cFind$UPPER(ShortName)';
,,,,,,,,,,,,,,,,,,,,'NAME') )

Выдает ошибка выполнения.
Переменная не существует.
 
описание структуры таблицы voditel.dbf в студию
 
aHeads:={{"Введите код партнера.:","Code"}, ;
{"Наименование ........:","NAME"}, ;
{"ФИО водителя.........:","voditel"}}

Этого достаточно?
 
Нашел свою ощибку
 
Если структура таблицы соответствует именам из aHeads - скажите откуда справочник водиетелей должен найти поле SHORTNAME ?
Вероятно в этом причина - такая переменная(имя поля) в таблице не существует
 
Нужно так
_Voditel->( MAKEREFER("VODITEL","Справочник водителей",2 ;
,{" Код ","Наименование партнера"," Водитель"},;
{3,5,16}, "n/w,w+/n",{"voditel"},{"aIn[5]"},,;
{{||FIELD->CODE},{||FIELD->NAME},;
{||FIELD->Voditel}},,,,,,,,,,,,,,,,,'cFind$UPPER(Name)';
,,,,,,,,,,,,,,,,,,,,'NAME') )

А возможно ли дать проверку по коду партнера?
То есть когда ввожу автомобиль, чтобы выдавало водителей только этой организации?
 
Да, сделайте правильный индекс, настройте скоп в справочнике и строку поиска.
 
Можно поподробнее, немножко не понятно.
Если можно пример

Индекс в справочнике водителей - UPPER(code+name+Voditel)
Индекс в справочнике автомобилей - UPPER(code+name+marka_gos)
Изменено: Дмитрий Хващевский - 26.05.2010 16:31:41
 
MakeRefer(;

cRefer, cHead, nTypRefer, cKeyaHeads, aYXN,; // 5

cColor, aSource, aDest, cKeyVal, abFields,; // 10

aSortSeek, aInputHeads, aPict, aWhen, aValid,; // 15

bPost, bPreDisp, bPostDisp, bColor, cKeyValDisp,; // 20

aRef, cHelp0, bCoProc, nRowHelp, nColHelp,; // 25

aGetBlock, cFindMacro, nTag, bScrInit, bScrPost,; // 30

bDispSpr, bYesArray, nTagSeek, aHotKey, aOtherKey,; // 35

bPreGet, bPostGet, bPostRead, bYesReplArray, bYesNoRepl,; // 40

bSayPtica, cHeadPtica, bSayHead, bKeyHead, lEditRefer,; // 45

bYesValue, nOrdSeek, cLeftKey, nPosKey, lHFilter,; // 50

lOnlyF2, aGetOrder, lFilterRefer, lNoInput, bDelInit, ; // 55

bPostDel; X 56

)
Выделил жирным.
По первому смотрите пример в уроках.
По второму - положите в него блок кода с установкой скопа
 
Спасибо попробую разобраться.

Еще столкнулся с такой проблемой.
При поиске в справочнике водителей по первой букве
выдает сообщение ошибка выполнения.файл не индексирован.
Была такая ошибка и при выборе партнера, но как от нее избавился не помню.
Индексация не помогает.
 
bYesValue, nOrdSeek, cLeftKey, nPosKey, lHFilter,; // 50

Выделил элементы отвечающие за поиск по первым буквам, тоже было на форуме
 
С поиском не получилось (у меня на 47 параметре стоит 'NAME')

С поиском по коду немного получше (cKeyVal присвоил значение "UPPER(aIn[1])), теперь она мне выдает справочник не сначала всего, а сначала позиций с нужным кодом.
Только нужно, чтобы она давала только те позиции, у которых определенный код.

Еще заметил такую особенность. Ввел новую запись, затем двигаюсь курсором на одну строку вверх, так она мне стирает на экране половина кода предыдущей позиции, затем курсором спускаюсь на эту позицию и запись появляется.
 
Цитата
Дмитрий Хващевский пишет:
С поиском не получилось (у меня на 47 параметре стоит 'NAME')

Индексный таг называется "NAME"

По поводу "UPPER(aIn[1]))" уже на этом форуме недавно проходили - попробуйте по совету Алексея Новикова через блок кода и сюда наверно надо старшую часть всего индексного ключа до фамилии водителя а не только код (выражение скопа в справочнике повторить)
Страницы: Пред. 1 2 3 4 След.
Читают тему (гостей: 1)