можно ли в стандартном источнике данных bda.s_maker STROKI в АРМе УПРАВЛЕНИЕ ПРОДАЖАМИ
добавить поля из картотеки "СТЕЛЛАЖ" И "ЯЧЕЙКА"
на печатных формах в УПРАВЛЕНИИ ПРОДАЖАМИ надо адрес выводить
SQL-запрос по mkart - делается очень долго
потом массивами вывожу адреса в masterdata - НО ВСЕ ЭТО ФОРМИРУЕТСЯ ОЧЧЕНЬ ДОЛГО
второй вариант
создаю свой источник данных в спецфункции с событием "проверка документа"
но и здесь проблемы
во-первых по уму такой adres.dbf надо бы создавать во временной папке локально у пользователя например в C:\TEMP ИЛИ DBCreate(GlobalTmpPath+"adres.dbf",aStru)
(а не в общей папке \DBASE\REAL )
но тогда в SQL-запросе я не смогу обратиться к этому dbf-файлу
во вторых если я оставляю создание этого файла в папке с базой данных то при работе нескольких пользователей появляются проблемы
короче говоря вариант с собственным источником данных НЕ ГОДИТСЯ
ОПИСАНИЕ СОЗДАННОГО ИНТЕРФЕЙСА ЗАПОЛНЕНИЯ АДРЕСОВ БЕЗОПАСНО НЕ ЗАТРАГИВАЯ НАЧАЛЬНЫЙ ОСТАТОК В КАТОТЕКЕ:
1) создаём пункт меню в АРМе "ТОВАРЫ.ГОТОВАЯ ПРОДУКЦИЯ"
для этого добавляем в файл C:\B4_PLUS\DBASE\SCLAD\s_menu.dbf
строку
MENUNOMER,C,10===0
PROMPTNOME,C,3===12
MENUPROMPT,C,44==АДРЕС
MENUMESSEG,C,80==АДРЕСНЫЙ УЧЕТ
MENUBLOCK,C,100=={||HFileEval("adres2.hrb",{})}
2)
ДЛЯ ВОЗМОЖНОСТИ ПОИСКА СОЗДАЁМ ДОПОЛНИТЕЛЬНЫЙ ИНДЕКС
в файл C:\B4_PLUS\DBASE\SCLAD\bases_03.dbf
добавляем строку
ARM,C,2==============03
PATH_DBF,C,20========SCLAD\
NAME_DBF,C,10========MKart
TAG_NOMER,C,2========27
TAG_NAME,C,10========MKart_adr
INDEX,C,85===========UPPER(Status+Sclad+Mesto1+Mesto2+Grup+NNum+Partia)
MESSAGE,C,40=========Картотека
FOR_KEY,C,180========!EMPTY(NNum)
WHILE_KEY,C,10=======
DELETE,L=============ИСТИНА
PACK,L===============ЛОЖЬ
YES_INDEX,L==========ИСТИНА
CRC,N,10,0
ID_ST,N,4,0
USER_CODE,C,6
3)
теперь для появления такого нового индекса проиндекируем выборочно модуль ТОВАРЫ...
ИНДЕКС И ПУНКТ МЕНЮ ГОТОВЫ
есть только маленькая проблема при включенной авторизации при нескольких предприятий в "картотеке предприятий" и использовании справочника меню в настройке->картотеке->авторизации пользователей->справочник меню
в этом случае надо менять файл C:\B4_PLUS\DBASE\SCLAD\s_menu.dbf
в той базе которая в карточке предприятий стоит в самом верху то есть в самой первой независимо от того какой код предприятия 00001 или 00060.
и не забудьте с правочнике меню обновить меню клавишей "ALT-M"
4) код для компиляции adres2.hrb
ниже приведенный код (НАПРИМЕР В ВИДЕ ФАЙЛА adres2.prg) надо скопировать в папку C:\B4_PLUS\pro\plugins\source\SCLAD
скомпилировать его - для этого
зайти в арм ТОВАРЫ... далее в "работа с картотекой"->"номенклатурный справочник"
нажать CTRL+F5 и затем F11
открыть adres2.prg и скомпилировать нажав F2
все можно работать в новом модуле адресного учета ТМЦ на складах
без опасности изменить начальный остаток и текущее количество.
полный код adres2.prg приведу в следующем сообщении ниже
добавить поля из картотеки "СТЕЛЛАЖ" И "ЯЧЕЙКА"
на печатных формах в УПРАВЛЕНИИ ПРОДАЖАМИ надо адрес выводить
SQL-запрос по mkart - делается очень долго
Код |
---|
SELECT rbookm.sclad as код_склада, rbookm.dopcode as ном_док, rbookm.grup as группа, rbookm.nnum as номер, rbookm.partia as код_партии, mkart.mesto1 as место1, mkart.mesto2 as место2 FROM real\rbookm as rbookm LEFT JOIN sclad\mkart as mkart on (rbookm.sclad=mkart.sclad and rbookm.grup=mkart.grup and rbookm.nnum=mkart.nnum and rbookm.partia=mkart.partia) Where rbookm.dopcode=:номер_заказа Order by группа,номер,код_партии |
потом массивами вывожу адреса в masterdata - НО ВСЕ ЭТО ФОРМИРУЕТСЯ ОЧЧЕНЬ ДОЛГО
второй вариант
создаю свой источник данных в спецфункции с событием "проверка документа"
Код |
---|
private aStruOP,cFileOP,cNameOP,aStruADRES,cFileADRES,cNameADRES PRIVATE aSetKey aSetKey:=SaveSetKey() DBPUSH("MDOCM","RBOOKM",,{MDOCM->DOPCODE,MDOC->DOPCODE}) MDOCM->(f_SetRelation("MKART","UPPER(Grup+NNum+Partia+Sclad)")) aStruOP := {} aAdd(aStruOP,{"VarName","C",20,0}) aAdd(aStruOP,{"VarC","C",20,0}) aAdd(aStruOP,{"FieldName","C",10,0}) cFileOP := "adres_op.dbf" cNameOP := GlobalTmpPath+cFileOP DBCreate(cNameOP,aStruOP) aStruADRES := {} aAdd(aStruADRES,{"Sclad","C",6,0}) aAdd(aStruADRES,{"Status","C",1,0}) aAdd(aStruADRES,{"Grup","C",5,0}) aAdd(aStruADRES,{"Nnum","C",13,0}) aAdd(aStruADRES,{"Partia","C",5,0}) aAdd(aStruADRES,{"Name","C",60,0}) aAdd(aStruADRES,{"Mesto1","C",10,0}) aAdd(aStruADRES,{"Mesto2","C",10,0}) cNameADRES :=LOADPATH()+"\real\adres.dbf" DBCreate(cNameADRES,aStruADRES) NetUse("ADRES_op",cNameOP) ADDREC() ADRES_op->VarName :="Заголовок" ADRES_op->VarC :="Движение ТМЦ" DbUnlock() ADDREC() ADRES_op->VarName :="Склад" ADRES_op->FieldName :="SCLAD" DbUnlock() ADDREC() ADRES_op->VarName :="Статус" ADRES_op->FieldName :="STATUS" DbUnlock() ADDREC() ADRES_op->VarName :="Группа" ADRES_op->FieldName :="GRUP" DbUnlock() ADDREC() ADRES_op->VarName :="Номер" ADRES_op->FieldName :="NNUM" DbUnlock() ADDREC() ADRES_op->VarName :="Партия" ADRES_op->FieldName :="PARTIA" DbUnlock() ADDREC() ADRES_op->VarName :="НаименованиеТМЦ" ADRES_op->FieldName :="NAME" DbUnlock() ADDREC() ADRES_op->VarName :="Место1" ADRES_op->FieldName :="MESTO1" DbUnlock() ADDREC() ADRES_op->VarName :="Место2" ADRES_op->FieldName :="MESTO2" DbUnlock() ADRES_op->(dbClosearea()) NetUse("ADRES",cNameADRES) WHILE MDOCM->( !EOF() ) ADRES->(AddRec()) ADRES->SCLAD := MKART->SCLAD ADRES->STATUS := MKART->STATUS ADRES->GRUP := MKART->GRUP ADRES->NNUM := MKART->NNUM ADRES->PARTIA := MKART->PARTIA ADRES->NAME := MKART->NAME ADRES->MESTO1 := MKART->MESTO1 ADRES->MESTO2 := MKART->MESTO2 ADRES->(F_DBUNLOCK()) MDOCM->(DBSKIP()) ENDDO ADRES->(dbClosearea()) DbPop() RestSetKey(aSetkey) |
во-первых по уму такой adres.dbf надо бы создавать во временной папке локально у пользователя например в C:\TEMP ИЛИ DBCreate(GlobalTmpPath+"adres.dbf",aStru)
(а не в общей папке \DBASE\REAL )
но тогда в SQL-запросе я не смогу обратиться к этому dbf-файлу
во вторых если я оставляю создание этого файла в папке с базой данных то при работе нескольких пользователей появляются проблемы
короче говоря вариант с собственным источником данных НЕ ГОДИТСЯ
ОПИСАНИЕ СОЗДАННОГО ИНТЕРФЕЙСА ЗАПОЛНЕНИЯ АДРЕСОВ БЕЗОПАСНО НЕ ЗАТРАГИВАЯ НАЧАЛЬНЫЙ ОСТАТОК В КАТОТЕКЕ:
1) создаём пункт меню в АРМе "ТОВАРЫ.ГОТОВАЯ ПРОДУКЦИЯ"
для этого добавляем в файл C:\B4_PLUS\DBASE\SCLAD\s_menu.dbf
строку
MENUNOMER,C,10===0
PROMPTNOME,C,3===12
MENUPROMPT,C,44==АДРЕС
MENUMESSEG,C,80==АДРЕСНЫЙ УЧЕТ
MENUBLOCK,C,100=={||HFileEval("adres2.hrb",{})}
2)
ДЛЯ ВОЗМОЖНОСТИ ПОИСКА СОЗДАЁМ ДОПОЛНИТЕЛЬНЫЙ ИНДЕКС
в файл C:\B4_PLUS\DBASE\SCLAD\bases_03.dbf
добавляем строку
ARM,C,2==============03
PATH_DBF,C,20========SCLAD\
NAME_DBF,C,10========MKart
TAG_NOMER,C,2========27
TAG_NAME,C,10========MKart_adr
INDEX,C,85===========UPPER(Status+Sclad+Mesto1+Mesto2+Grup+NNum+Partia)
MESSAGE,C,40=========Картотека
FOR_KEY,C,180========!EMPTY(NNum)
WHILE_KEY,C,10=======
DELETE,L=============ИСТИНА
PACK,L===============ЛОЖЬ
YES_INDEX,L==========ИСТИНА
CRC,N,10,0
ID_ST,N,4,0
USER_CODE,C,6
3)
теперь для появления такого нового индекса проиндекируем выборочно модуль ТОВАРЫ...
ИНДЕКС И ПУНКТ МЕНЮ ГОТОВЫ
есть только маленькая проблема при включенной авторизации при нескольких предприятий в "картотеке предприятий" и использовании справочника меню в настройке->картотеке->авторизации пользователей->справочник меню
в этом случае надо менять файл C:\B4_PLUS\DBASE\SCLAD\s_menu.dbf
в той базе которая в карточке предприятий стоит в самом верху то есть в самой первой независимо от того какой код предприятия 00001 или 00060.
и не забудьте с правочнике меню обновить меню клавишей "ALT-M"
4) код для компиляции adres2.hrb
ниже приведенный код (НАПРИМЕР В ВИДЕ ФАЙЛА adres2.prg) надо скопировать в папку C:\B4_PLUS\pro\plugins\source\SCLAD
скомпилировать его - для этого
зайти в арм ТОВАРЫ... далее в "работа с картотекой"->"номенклатурный справочник"
нажать CTRL+F5 и затем F11
открыть adres2.prg и скомпилировать нажав F2
все можно работать в новом модуле адресного учета ТМЦ на складах
без опасности изменить начальный остаток и текущее количество.
полный код adres2.prg приведу в следующем сообщении ниже