Главная
Новый форум
 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Урок 203. Пример для начинающих.
Goto page 1, 2  Next
 
Post new topic   Reply to topic   printer-friendly view     Forum Index -> Программирование в БЭСТ-4
View previous topic :: View next topic  
Author Message
c_systems



Joined: 26 Jun 2003
Posts: 20
Location: Наталья
Occupation: Комплексные системы
Interests: Челябинск

PostPosted: 15 Jun 2007 13:01    Post subject: Урок 203. Пример для начинающих. Reply with quote

Описание задачи:
Требуется в накладной прихода при оприходовании собственной продукции (только некоторые операции в одном конкретном виде движения) в момент ввода количества (веса) запрашивать перед этим дополнительно "Вес брутто" и "Вес тары", а вычисленную разницу - "Вес нетто" сохранять в поле "количество". "Вес брутто" и "Вес нетто" также сохранять в базе с последующей возможностью просмотра и модификации.
С чего начать?
Back to top
View user's profile Send private message Send e-mail
nordk



Joined: 27 Jun 2005
Posts: 1000
Location: Горбунов Константин
Occupation: БЭСТ-Партнер
Interests: СПб

PostPosted: 15 Jun 2007 14:26    Post subject: Reply with quote

Начнем с того как это будем делать.
Предлагаю идти через новое событие "прайс-лист ".
Сделайте простенький плагин.
Пусть он ничего не делает только выводит сообщение, скажем "ОК".
Дальше в нужном Вам виде движения подвесьте этот плагин
по CTRL-F5 на событие "прайс-лист".
Дальше внутри накладной попробуйте зайти в картотеку товаров и увидите что Ваш плагин выполнился. Таким образом убедитесь в том,
что Вы в этом месте подвесив свое решение получите свой механизм ввода в накладн
Back to top
View user's profile Send private message Send e-mail
c_systems



Joined: 26 Jun 2003
Posts: 20
Location: Наталья
Occupation: Комплексные системы
Interests: Челябинск

PostPosted: 15 Jun 2007 16:47    Post subject: Reply with quote

1. непонятно "событие прайс-лист"
Если я из реестра делаю Ctrl-F5 мне предлагается вызов: "по требованию", "вход в д-т", "проверка док-та", "запись", "перед удалением", "после удаления" , "вход в реестр", "позиционир.Ctrl-F7", "позиционир.Shift-F7" и "картотека товаров".
И почему употребляете тогда отпугивающее словосочетание "прайс-лист" ?

2.Если навесить плагин на "картотеку" - он вызывается только когда в настройке вида движения стоит "раскрывать картотеку-да", "запрашивать группу -да"
У клиентов все настроено как "раскрывать картотеку -нет", для их специфики это очень удобно.
И как быть?
Back to top
View user's profile Send private message Send e-mail
nordk



Joined: 27 Jun 2005
Posts: 1000
Location: Горбунов Константин
Occupation: БЭСТ-Партнер
Interests: СПб

PostPosted: 15 Jun 2007 17:29    Post subject: Reply with quote

Вобщем-то это единый механизм с заказами. Там картотеку называют прайс-листом и собственно файл с исходным текстом так звучит. А называется это картотека товаров в модуле "Товары".
Простите за неточность формулировки
По поводу раскрывать картотеку да - это действительно так.
По поводу групп - от этого параметра не зависит.
Вы разрешаете открывать картотеку только в определенном виде движения и использоваться это будет для ввода в том, виде как
вы это хотите реализовать при нажатии ALT-F4/
На стандартной работе по F4 это совершенно никак не сказывается.
И потом у Вас не картотека будет раскрываться а будет запускаться Ваша программа по вводу расхода как Вам надо. Поэтому почему этот
параметр кого-то должен пугать от того что он включен для
конкретного вида движения (повторяю) ?
Back to top
View user's profile Send private message Send e-mail
c_systems



Joined: 26 Jun 2003
Posts: 20
Location: Наталья
Occupation: Комплексные системы
Interests: Челябинск

PostPosted: 16 Jun 2007 12:07    Post subject: Reply with quote

Все, разобралась - я не сообразила про ALT-F4 и включила в настройке виде движения "раскрывать картотеку"
Сообщение выдается. Что дальш
Back to top
View user's profile Send private message Send e-mail
nordk



Joined: 27 Jun 2005
Posts: 1000
Location: Горбунов Константин
Occupation: БЭСТ-Партнер
Interests: СПб

PostPosted: 16 Jun 2007 18:16    Post subject: Reply with quote

Теперь на это событие будем писать свой интерфейс ввода строк.
Необходимо для себя решить в каком виде Вы хотите это делать:
по типу раскрытой картотеки или просто что-то вроде строк как в накладной и ввод построчно через F4 или еще как.
То есть требуется описание того, как Вы хотите осуществлять ввод стро
Back to top
View user's profile Send private message Send e-mail
c_systems



Joined: 26 Jun 2003
Posts: 20
Location: Наталья
Occupation: Комплексные системы
Interests: Челябинск

PostPosted: 18 Jun 2007 16:29    Post subject: Reply with quote

Желательно ввод без раскрывания картотеки, как стандартный ввод по F4, чтоб окошко так же выглядело - там и строка пустая есть для моих двух доп.параметров.
Но хотелось бы услышать - а как проще, в смысле объемности и сложности плагина?

P.S.Временно уезжаю, смогу продолжить ч-з несколько дне
Back to top
View user's profile Send private message Send e-mail
nordk



Joined: 27 Jun 2005
Posts: 1000
Location: Горбунов Константин
Occupation: БЭСТ-Партнер
Interests: СПб

PostPosted: 18 Jun 2007 19:45    Post subject: Reply with quote

Да без разницы.
Тогда сделайте плагин с таким набором действий:
Создаете временный файл
Если некий массив например aStroki не пуст, то в этом
файле создаете строки по элементам массива.
Описание массива было в другой теме. тут
Дальше откройте этот файл Инитлистом
и сделайте его заполнение по F4 нужным Вам образом.
Текст получившийся размещайте сюда.
Если в таком объеме сложно - давайте делать по частя
Back to top
View user's profile Send private message Send e-mail
c_systems



Joined: 26 Jun 2003
Posts: 20
Location: Наталья
Occupation: Комплексные системы
Interests: Челябинск

PostPosted: 27 Jun 2007 17:54    Post subject: Reply with quote

Конечно по частям.
Итак:

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
View user's profile Send private message Send e-mail
nordk



Joined: 27 Jun 2005
Posts: 1000
Location: Горбунов Константин
Occupation: БЭСТ-Партнер
Interests: СПб

PostPosted: 28 Jun 2007 14:39    Post subject: Reply with quote

Ну чтож начинаем разбор полетов

c_systems wrote:
Конечно по частям.
Итак:

[color=red]function main()
LOCAL cFile,aStroki,cHd


В этом месте никто не мешает
Code:
LOCAL aStroki:={}

а строгий размер в харборе вещь не обязательная
Дальше в начале программы надо применить aSaveSet и aSaveSetKey() а в конце RestSetKey() и RestSet() с описанием в HELP познакомьтесь плз

Code:
 cFile := GlobalTmpPath+"cEdit.txt"

Вот здесь непонятно почему текстовый файл создаете.
Надо бы DBF наверно

Quote:
//массив нужно инициализировать или обращаться к какому-
//то существующему?

Я Вам Выше ссылку дал про существующий массив и его формат
Нажмите на слово "тут"

[
Code:
return 100[/color]
// Что нужно возвращать?
// В описании написано .T. или .F. - но так не работает, выдается
//ошибка "алиас MKART не существует"


Возвращайте NIL
Ошибка скорее всего связана с тем что Вы алиас умудряетесь
сместить и RestSet поможе
Back to top
View user's profile Send private message Send e-mail
c_systems



Joined: 26 Jun 2003
Posts: 20
Location: Наталья
Occupation: Комплексные системы
Interests: Челябинск

PostPosted: 28 Jun 2007 17:50    Post subject: Reply with quote

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
View user's profile Send private message Send e-mail
nordk



Joined: 27 Jun 2005
Posts: 1000
Location: Горбунов Константин
Occupation: БЭСТ-Партнер
Interests: СПб

PostPosted: 28 Jun 2007 18:08    Post subject: Reply with quote

Ок, начинаем сначала.
1.Нам нужен свой интерфейс ввода данных.
В этом интерфейсе мы будем набирать строки, а стало
быть уодбно применить стандартный InitList
InitList работает на DBF - стало быть нам нужен dbf.
Время ушло но насколько я помню Вам нужны доп.поля,
которые в стандартном массиве отсутствуют - их будем хранить
в своем массиве.

Основной массив не aGlobVars - я вроде писал в теме, что
потом переделали на aGlobWork (Точно не помню надо в отладчике
взглянуть).
Общая направленность такая:
Делаем свой интерфейс ввода. По окончании ввода все данные
из него через массив возвращаем в стандартную накладную.
Если накладная уже была не пустой - берем из нее в свой интерфейс
существующее. Недостающие параметры сохраняем при записи в mdocm, а до этого храним в своем массиве.

По общему пути решения так понятно или все равно не до конца ?
Back to top
View user's profile Send private message Send e-mail
c_systems



Joined: 26 Jun 2003
Posts: 20
Location: Наталья
Occupation: Комплексные системы
Interests: Челябинск

PostPosted: 29 Jun 2007 14:47    Post subject: Reply with quote

По общему пути понятно.
По массиву еще раз - мне нужны два доп.поля - вес общий и вес тары, значит dbf создавать только с двумя числовыми полями?

и в моем фрагменте aStroki:={18} тоже не нужо получается...
Back to top
View user's profile Send private message Send e-mail
nordk



Joined: 27 Jun 2005
Posts: 1000
Location: Горбунов Константин
Occupation: БЭСТ-Партнер
Interests: СПб

PostPosted: 01 Jul 2007 21:03    Post subject: Reply with quote

Нет не правильно. DBF- файл должен содержать информацию из массива по ссылке плюс Ваши 2 поля.
Ваш массив пока оставьте омжет в нем Ваши поля будем хранить - пока неясно, но он и не мешает.
В основном массиве обратите внимание что первый элемент по своей структуре содержит информацию сразу несколький полей таблицы.
Back to top
View user's profile Send private message Send e-mail
c_systems



Joined: 26 Jun 2003
Posts: 20
Location: Наталья
Occupation: Комплексные системы
Interests: Челябинск

PostPosted: 02 Jul 2007 14:06    Post subject: Reply with quote

Текст основной пр-мы:
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
View user's profile Send private message Send e-mail
Display posts from previous:   
Post new topic   Reply to topic   printer-friendly view     Forum Index -> Программирование в БЭСТ-4 All times are GMT + 4 Hours
Goto page 1, 2  Next
Page 1 of 2

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © phpBB Group

Rambler
Rambler's Top100 Рейтинг@Mail.ru