View previous topic :: View next topic |
Author |
Message |
c_systems
Joined: 26 Jun 2003 Posts: 20 Location: Наталья Occupation: Комплексные системы Interests: Челябинск
|
Posted: 15 Jun 2007 13:01 Post subject: Урок 203. Пример для начинающих. |
|
|
Описание задачи:
Требуется в накладной прихода при оприходовании собственной продукции (только некоторые операции в одном конкретном виде движения) в момент ввода количества (веса) запрашивать перед этим дополнительно "Вес брутто" и "Вес тары", а вычисленную разницу - "Вес нетто" сохранять в поле "количество". "Вес брутто" и "Вес нетто" также сохранять в базе с последующей возможностью просмотра и модификации.
С чего начать? |
|
Back to top |
|
|
nordk
Joined: 27 Jun 2005 Posts: 1000 Location: Горбунов Константин Occupation: БЭСТ-Партнер Interests: СПб
|
Posted: 15 Jun 2007 14:26 Post subject: |
|
|
Начнем с того как это будем делать.
Предлагаю идти через новое событие "прайс-лист ".
Сделайте простенький плагин.
Пусть он ничего не делает только выводит сообщение, скажем "ОК".
Дальше в нужном Вам виде движения подвесьте этот плагин
по CTRL-F5 на событие "прайс-лист".
Дальше внутри накладной попробуйте зайти в картотеку товаров и увидите что Ваш плагин выполнился. Таким образом убедитесь в том,
что Вы в этом месте подвесив свое решение получите свой механизм ввода в накладн |
|
Back to top |
|
|
c_systems
Joined: 26 Jun 2003 Posts: 20 Location: Наталья Occupation: Комплексные системы Interests: Челябинск
|
Posted: 15 Jun 2007 16:47 Post subject: |
|
|
1. непонятно "событие прайс-лист"
Если я из реестра делаю Ctrl-F5 мне предлагается вызов: "по требованию", "вход в д-т", "проверка док-та", "запись", "перед удалением", "после удаления" , "вход в реестр", "позиционир.Ctrl-F7", "позиционир.Shift-F7" и "картотека товаров".
И почему употребляете тогда отпугивающее словосочетание "прайс-лист" ?
2.Если навесить плагин на "картотеку" - он вызывается только когда в настройке вида движения стоит "раскрывать картотеку-да", "запрашивать группу -да"
У клиентов все настроено как "раскрывать картотеку -нет", для их специфики это очень удобно.
И как быть? |
|
Back to top |
|
|
nordk
Joined: 27 Jun 2005 Posts: 1000 Location: Горбунов Константин Occupation: БЭСТ-Партнер Interests: СПб
|
Posted: 15 Jun 2007 17:29 Post subject: |
|
|
Вобщем-то это единый механизм с заказами. Там картотеку называют прайс-листом и собственно файл с исходным текстом так звучит. А называется это картотека товаров в модуле "Товары".
Простите за неточность формулировки
По поводу раскрывать картотеку да - это действительно так.
По поводу групп - от этого параметра не зависит.
Вы разрешаете открывать картотеку только в определенном виде движения и использоваться это будет для ввода в том, виде как
вы это хотите реализовать при нажатии ALT-F4/
На стандартной работе по F4 это совершенно никак не сказывается.
И потом у Вас не картотека будет раскрываться а будет запускаться Ваша программа по вводу расхода как Вам надо. Поэтому почему этот
параметр кого-то должен пугать от того что он включен для
конкретного вида движения (повторяю) ? |
|
Back to top |
|
|
c_systems
Joined: 26 Jun 2003 Posts: 20 Location: Наталья Occupation: Комплексные системы Interests: Челябинск
|
Posted: 16 Jun 2007 12:07 Post subject: |
|
|
Все, разобралась - я не сообразила про ALT-F4 и включила в настройке виде движения "раскрывать картотеку"
Сообщение выдается. Что дальш |
|
Back to top |
|
|
nordk
Joined: 27 Jun 2005 Posts: 1000 Location: Горбунов Константин Occupation: БЭСТ-Партнер Interests: СПб
|
Posted: 16 Jun 2007 18:16 Post subject: |
|
|
Теперь на это событие будем писать свой интерфейс ввода строк.
Необходимо для себя решить в каком виде Вы хотите это делать:
по типу раскрытой картотеки или просто что-то вроде строк как в накладной и ввод построчно через F4 или еще как.
То есть требуется описание того, как Вы хотите осуществлять ввод стро |
|
Back to top |
|
|
c_systems
Joined: 26 Jun 2003 Posts: 20 Location: Наталья Occupation: Комплексные системы Interests: Челябинск
|
Posted: 18 Jun 2007 16:29 Post subject: |
|
|
Желательно ввод без раскрывания картотеки, как стандартный ввод по F4, чтоб окошко так же выглядело - там и строка пустая есть для моих двух доп.параметров.
Но хотелось бы услышать - а как проще, в смысле объемности и сложности плагина?
P.S.Временно уезжаю, смогу продолжить ч-з несколько дне |
|
Back to top |
|
|
nordk
Joined: 27 Jun 2005 Posts: 1000 Location: Горбунов Константин Occupation: БЭСТ-Партнер Interests: СПб
|
Posted: 18 Jun 2007 19:45 Post subject: |
|
|
Да без разницы.
Тогда сделайте плагин с таким набором действий:
Создаете временный файл
Если некий массив например aStroki не пуст, то в этом
файле создаете строки по элементам массива.
Описание массива было в другой теме. тут
Дальше откройте этот файл Инитлистом
и сделайте его заполнение по F4 нужным Вам образом.
Текст получившийся размещайте сюда.
Если в таком объеме сложно - давайте делать по частя |
|
Back to top |
|
|
c_systems
Joined: 26 Jun 2003 Posts: 20 Location: Наталья Occupation: Комплексные системы Interests: Челябинск
|
Posted: 27 Jun 2007 17:54 Post subject: |
|
|
Конечно по частям.
Итак:
function main()
LOCAL cFile,aStroki,cHd
cFile := GlobalTmpPath+"cEdit.txt"
altd()
if file(cFile)
erase(cFile)
endif
cHd:=fcreate(cFile)
if cHd<>-1
aStroki:=array(18)
//массив нужно инициализировать или обращаться к какому-
//то существующему?
Ini_cFile(cHd,aStroki)
else
Alert('Невозможно создать временный файл!')
endif
fclose(cHd)
return 100
// Что нужно возвращать?
// В описании написано .T. или .F. - но так не работает, выдается
//ошибка "алиас MKART не существует"
function Ini_cFile(lFile,lArr)
lArr[1]:=space(29)
lArr[2]:=space(5)
str2File(lArr[1],lFile,.T.)
str2File(lArr[2],lFile,.T.)
str2File('Вот и все',lFile,.T.)
return lArr
Пока так, итак уже вопросы появились. |
|
Back to top |
|
|
nordk
Joined: 27 Jun 2005 Posts: 1000 Location: Горбунов Константин Occupation: БЭСТ-Партнер Interests: СПб
|
Posted: 28 Jun 2007 14:39 Post subject: |
|
|
Ну чтож начинаем разбор полетов
c_systems wrote: | Конечно по частям.
Итак:
[color=red]function main()
LOCAL cFile,aStroki,cHd |
В этом месте никто не мешает
а строгий размер в харборе вещь не обязательная
Дальше в начале программы надо применить aSaveSet и aSaveSetKey() а в конце RestSetKey() и RestSet() с описанием в HELP познакомьтесь плз
Code: | cFile := GlobalTmpPath+"cEdit.txt" |
Вот здесь непонятно почему текстовый файл создаете.
Надо бы DBF наверно
Quote: | //массив нужно инициализировать или обращаться к какому-
//то существующему? |
Я Вам Выше ссылку дал про существующий массив и его формат
Нажмите на слово "тут"
[ Code: | return 100[/color]
// Что нужно возвращать?
// В описании написано .T. или .F. - но так не работает, выдается
//ошибка "алиас MKART не существует" |
Возвращайте NIL
Ошибка скорее всего связана с тем что Вы алиас умудряетесь
сместить и RestSet поможе |
|
Back to top |
|
|
c_systems
Joined: 26 Jun 2003 Posts: 20 Location: Наталья Occupation: Комплексные системы Interests: Челябинск
|
Posted: 28 Jun 2007 17:50 Post subject: |
|
|
nordk wrote: |
Code: | cFile := GlobalTmpPath+"cEdit.txt" |
Вот здесь непонятно почему текстовый файл создаете.
Надо бы DBF наверно
|
ОБъясните дальнейший принцип работы: почему DBF, DBF какой структуры? Из ваших коротких ответов и слишком большого из без комментариев урока по ссылке ничего не понятно.
nordk wrote: |
Я Вам Выше ссылку дал про существующий массив и его формат
Нажмите на слово "тут" |
Я ссылку смотрела. Вы видимо что-то недоговариваете или неточно излагаете, т.к. мне читающей ваши объяснения много чего непонятно - как обращаться к массиву? Зачем вообще создаем aStroki если есть aGlobvars да еще и временный dbf?
Пока исправила так:
function main()
LOCAL cFile,cHd,aSet,aSetKey
LOCAL aStroki:={}
aSet:=SAVESET()
aSetKey:=SAVESETKEY()
cFile := GlobalTmpPath+"cEdit.dbf"
altd()
if file(cFile)
erase(cFile)
endif
cHd:=fcreate(cFile)
if cHd<>-1
aStroki:=array(1
Ini_cFile(cHd,aStroki)
else
Alert('Невозможно создать временный файл!')
endif
fclose(cHd)
RESTSETKEY(aSetKey)
RESTSET(aSet)
return NIL |
|
Back to top |
|
|
nordk
Joined: 27 Jun 2005 Posts: 1000 Location: Горбунов Константин Occupation: БЭСТ-Партнер Interests: СПб
|
Posted: 28 Jun 2007 18:08 Post subject: |
|
|
Ок, начинаем сначала.
1.Нам нужен свой интерфейс ввода данных.
В этом интерфейсе мы будем набирать строки, а стало
быть уодбно применить стандартный InitList
InitList работает на DBF - стало быть нам нужен dbf.
Время ушло но насколько я помню Вам нужны доп.поля,
которые в стандартном массиве отсутствуют - их будем хранить
в своем массиве.
Основной массив не aGlobVars - я вроде писал в теме, что
потом переделали на aGlobWork (Точно не помню надо в отладчике
взглянуть).
Общая направленность такая:
Делаем свой интерфейс ввода. По окончании ввода все данные
из него через массив возвращаем в стандартную накладную.
Если накладная уже была не пустой - берем из нее в свой интерфейс
существующее. Недостающие параметры сохраняем при записи в mdocm, а до этого храним в своем массиве.
По общему пути решения так понятно или все равно не до конца ? |
|
Back to top |
|
|
c_systems
Joined: 26 Jun 2003 Posts: 20 Location: Наталья Occupation: Комплексные системы Interests: Челябинск
|
Posted: 29 Jun 2007 14:47 Post subject: |
|
|
По общему пути понятно.
По массиву еще раз - мне нужны два доп.поля - вес общий и вес тары, значит dbf создавать только с двумя числовыми полями?
и в моем фрагменте aStroki:={18} тоже не нужо получается... |
|
Back to top |
|
|
nordk
Joined: 27 Jun 2005 Posts: 1000 Location: Горбунов Константин Occupation: БЭСТ-Партнер Interests: СПб
|
Posted: 01 Jul 2007 21:03 Post subject: |
|
|
Нет не правильно. DBF- файл должен содержать информацию из массива по ссылке плюс Ваши 2 поля.
Ваш массив пока оставьте омжет в нем Ваши поля будем хранить - пока неясно, но он и не мешает.
В основном массиве обратите внимание что первый элемент по своей структуре содержит информацию сразу несколький полей таблицы. |
|
Back to top |
|
|
c_systems
Joined: 26 Jun 2003 Posts: 20 Location: Наталья Occupation: Комплексные системы Interests: Челябинск
|
Posted: 02 Jul 2007 14:06 Post subject: |
|
|
Текст основной пр-мы:
function main()
LOCAL cFile,cHd,aSet,aSetKey,resalias
LOCAL aStroki:={}
aSet:=SAVESET()
aSetKey:=SAVESETKEY()
resalias:=alias()
cFile := GlobalTmpPath+"cEdit.dbf"
altd()
if file(cFile)
erase(cFile)
endif
cHd:=dbcreate(cFile,{{'tovar','C',29,0},;
{'ed','C',5,0},;
{'Kol' ,'N',19,4},;
{'cena' ,'N',19,8},;
{'kol0','N',19,4},;
{'ves','N',19,4},;
{'tara','N',19,4}})
dbusearea(.t.,,cFile,'cEdit',.t.)
select cEdit
// if cHd<>-1
aStroki:=array(1
Ini_cFile(aStroki)
// else
// Alert('Невозможно создать временный файл!')
// endif
cEdit->(dbclosearea())
RESTSETKEY(aSetKey)
RESTSET(aSet)
select(resalias)
return NIL
Тут вопрос - как проверить что dbf нормально создался? cHd всегда NIL... |
|
Back to top |
|
|
|