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

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

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


Форум

Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Страницы: 1 2 След.
RSS
проверка после ввода initlist
 
Здравствуйте, уважаемые.

Собственно вот такая вот не сложная формула

(INT (aIn[1]) / 59 + 1) * 59

Её можно как-то вставить в initlist ?

Конечно, понятно, что можно отдельную функцию нарисовать, но может всё намного проще? Какой-нибудь параметр в aHeads, или какой-нибудь параметр самого инитлиста?

Заренее благодарен.
 
Конечно да.
Вы внимательно ознакомились с описанием параметров функции и примерами ее работы?
С уважением,
Ильин Евгений
 
При работе с конкретным get-объектом в InitList
Перед вводом контроль идет в массиве aWhen
После ввода в массиве aValid
 
Цитата
itman пишет:
Конечно да.
Вы внимательно ознакомились с описанием параметров функции и примерами ее работы?

года 2 назад вникал. Сейчас позабыл всё =)

Цитата
nordk пишет:
При работе с конкретным get-объектом в InitList
Перед вводом контроль идет в массиве aWhen
После ввода в массиве aValid


Пытался Valid сделать. По ходу, с синтаксисом что-то не так делаю =(

aValid:= {(If aIn[1] <> 0, (INT (aIn[1]) / 59 + 1) * 59) }

ругается, что переменная не определена.
 
В массив aValid адо писать либо значение для макроса (кавычки), либо блок кода.
Результат дествия должен иметь логическое значение .T. или .F.
На старом форуме поищите тему по слову "Урок"
 
Цитата
nordk пишет:
В массив aValid адо писать либо значение для макроса (кавычки), либо блок кода.
Результат дествия должен иметь логическое значение .T. или .F.
На старом форуме поищите тему по слову "Урок"


Нашёл. Я и говорю. У меня проблемы с синтаксисом, похоже.
мне нужно что бы после ввода (в aHeads) программа получившееся число делила на 59 без остатка, и прибавляла 59 (скидки/наценки, что бы ндс не полз). Например, набивает продавец наценку 1000 р, что бы программа понимала, что это 16+1*59, то есть не 1000 р, а 1003 р.
 
aValid:= {;
{||aIn[1]:=(INT(aIn[1])/59+1)*59},;
{||aIn[2]:=(INT(aIn[2])/59+1)*59},;
{||aIn[3]:=(INT(aIn[3])/59+1)*59},;
{||aIn[4]:=(INT(aIn[4])/59+1)*59} }

вот такой вариант компилиться , но выдаёт "переменная не существует" =(
 
Может это выражение сделать функцией и в блоке передавать ей параметр? И возврат не забыть .T. or .F., может поэтому ругается, кстати?
С уважением,
Ильин Евгений
 
Цитата
itman пишет:
Может это выражение сделать функцией и в блоке передавать ей параметр? И возврат не забыть .T. or .F., может поэтому ругается, кстати?

Может, и по этому, хотя я с .T. пробовал - та же фигня =(

Функцией в блоке... надо попробовать.. жаль, я синтаксис Плохо помню
 
Убери выражение и просто в каждом блоке поставь .t.
Что изменится?
С уважением,
Ильин Евгений
 
Цитата
NotWar пишет:
aValid:= {;
{||aIn[1]:=(INT(aIn[1])/59+1)*59},;
{||aIn[2]:=(INT(aIn[2])/59+1)*59},;
{||aIn[3]:=(INT(aIn[3])/59+1)*59},;
{||aIn[4]:=(INT(aIn[4])/59+1)*59} }

вот такой вариант компилиться , но выдаёт "переменная не существует" =(


При компиляции блок кода не проверяется на то он и блок кода.
ВОт так должно работать
Код
aValid:= {; 
{||aIn[1]:=(INT(aIn[1])/59+1)*59,.T.},; 
{||aIn[2]:=(INT(aIn[2])/59+1)*59,.T.},; 
{||aIn[3]:=(INT(aIn[3])/59+1)*59,.T.},; 
{||aIn[4]:=(INT(aIn[4])/59+1)*59,.T.} }

Если ругается то проблема в другом месте - нужен тогда весь код.
 
Всё получилось. Ну и накрутил я там на эти вэн/валид..

Вот, если кому интересно:

Цитата
aWhen:={{||aIn[1]:=na_59_1()},{||aIn[2]:=na_59_2()},{||aIn[3]:=na_59_3()}}
aValid:={{||aIn[1]:=na_59_1()},{||aIn[2]:=na_59_2()},{||aIn[3]:=na_59_3()}}


Ну и одна из "на 59" (остальные по аналогии):

Цитата
Function NA_59_1()

Private cel1,p10,p11,p12,p13, CcceNew1,cccc,cccs,cccs0,cccs1

cccc:=mdocm->cenaout
cccs:=mdocm->sumout
//cccs0:=aIn[1]
cccs0:=MdocM->SubS1

p10:=aIn[1]
p11:=INT(aIn[1])
p12:=INT(aIn[1]/59)
p13:=p10/59

if p12 <> p13 .and. p10 > 0
cel1:= VAL(STR((p12+1)*59, 9,2))
else
cel1:=VAL(STR(p10, 9,2))


// cel1:=0
endif

aPict:={"@KS30","@KS30","@KS30","@KS30"}

cccs1:=cel1

If cccs0 <> cccs1
if cccs0 > cccs1
CcceNew1:=mdocm->cenaout-(cccs0-cccs1)
If cccc <> CcceNew1
MdocM->(reclock())
MdocM->cenaout:=CcceNew1
MdocM->sumout:=ROUND(MdocM->kol*CcceNew1,2)
MdocM->SubS1:=cel1
MdocM->(f_dbunlock())
endif
else
CcceNew1:=mdocm->cenaout+cccs1-cccs0
If cccc <> CcceNew1
MdocM->(reclock())
MdocM->cenaout:=CcceNew1
MdocM->sumout:=ROUND(MdocM->kol*CcceNew1,2)
MdocM->SubS1:=cel1
MdocM->(f_dbunlock())
endif
endif
endif

return cel1
:super:

Кто разберётся с моими "переменными" - тому памятник ставить можно :funny:
 
>> aPict:={"@KS30","@KS30","@KS30","@KS30"}
Что это?
С уважением, Новиков Алексей.
 
Цитата
Алексей Новиков пишет:
>> aPict:={"@KS30","@KS30","@KS30","@KS30"}
Что это?


:lol: лишняя строчка. Должна восприниматься, как приват переменная = она не мешает.
 
Молодцом, комментарии набей на переменные и операции, а то потом просто так сам не разберешься :lol:
С уважением,
Ильин Евгений
 
Господа, благодаря всеми горячо любимым юзерам, задачка усложняется.

Нужно между реальных строчек с этими самыми сабсами вставить их отображение (т. е. переменные) в процентах. Соответственно, при редактировании процентов всё должно красиво пересчитываться. Т. е. примерно вот так:

Цитата
aHeads:={;
{"A................:","MDocM->SubS1"},; //1
{"A%...............:","PERC1"},; //2
{"B................:","MDocM->SubS2"},; //3
{"B%...............:","PERC2"},; //4
{"C................:","MDocM->SubC1"},; //5
{"C%...............:","PERC3"},; //6
{"X.................","MDocM->SubC2"} } //7


Я так понял, это паплик переменные работают на протяжении всей функции и в подфункциях, но значения им присваиваются только перед aHeads, а в aWhen/aValid не обновляются (в отладчике строчка проскакивает ОК, а значения переменным не присваиваются :mecry: )
 
Посмотрите на bPreGet, если Вам нужна инициализация значений элементов aIn до создания окна ввода/редактирования.
Этот блок кода для этого и создан.
Если я правильно понимаю Вашу проблему конечно...
 
Похоже, не совсем правильно вы понимаете.
"процентные" переменные (perc1,2,3) я проинициализировал перед aHeads вот так
Цитата
Perc1:=ROUND(mdocm->subs1/(mdocm->cenaout/100) ,2)
Perc2:=ROUND(mdocm->subs2/(mdocm->cenaout/100) ,2)
Perc3:=ROUND(mdocm->subc1/(mdocm->cenaout/100) ,2)
отображаются нормально, только в When/Valid новые значения им не присваиваются.
 
Цитата
NotWar пишет:
When/Valid новые значения им не присваиваются.

Значения им там не присваиваться не могут.
Проверить очень просто.
напишите в один из элементов aWhen
{||test()}
и дальше
FUNCTION TEST()
ALTD()
PERC:=1
RETURN.T.

Потом в отладчике Вы увидите как это все работает....

Действительно до конца не могу понять о чем Вы пишете.
То ли речь идет про обновление экрана - при переприсвоении значений экран никто перерисоывать не будет (я про инструмент)
Или возможно речь про номера элементов массива - аHeads увеличили а aWhen/aValid ему в соответствие не привели - трудно очень понять суть по отрывочной информации
 
Речь идёт о скидках и наценках (собственно, эти пользовательские сабсы и сабци). Они реально присутствуют в базе. Их как раз этот плагин и высчитывает - округляет что бы нацело на 59 делились, пересчитывает цену. Всего их 4 шт. Но иногда нужно забивать эти скидки не в денежном эквиваленте, а в процентном (от цены). Но процентных полей в базе нету. Т. е. их надо как-то объявить на время работы программы. Что бы вбивая проценты (например, 3 процента от цены) автоматически прорисовывалась (пересчитывалась, нацело делилась на 59 и записывалась в соответствующее поля бд скидка/наценка) в денежном эквиваленте, а в процентном просто рисовалась.
Только я никак не могу понять как это грамотно сделать.
 
Покажите строку объявления этих переменных в начале функции и сами массивы aWhen/aValid как сейчас выглядят

Или если можно еще раз весь код приведите
 
Цитата
Perc1:=ROUND(mdocm->subs1/(mdocm->cenaout/100) ,2)
Perc2:=ROUND(mdocm->subs2/(mdocm->cenaout/100) ,2)
Perc3:=ROUND(mdocm->subc1/(mdocm->cenaout/100) ,2)
объявляю паблик перед аХедс
и
Цитата
aWhen:={{||aIn[1]:=na_59_1()},{||aIn[2]:=Na_59_p1()},{||aIn[3]:=na_59_2()},{||aIn[4]:=Na_59_p2()},{||aIn[5]:=na_59_3()},{||aIn[6]:=Na_59_p3()}}
валид такой же один в один. Без процентов т.е. вот так
Цитата
aWhen:={{||aIn[1]:=na_59_1()},{||aIn[2]:=na_59_2()},{||aIn[3]:=na_59_3()}
всё работает
Изменено: NotWar - 26.05.2010 17:15:21
 
Переменные достаточно объявить Private в самом начале.
И может даже лучше сделать Private

Покажите вот эту функцию
Na_59_p1()
 
я её уже выкладывал. см. выше. Она же может возвращать только значения для текущего аИн, да?
 
Выше не нашел - повторите плз...
Там только na_59_1
Страницы: 1 2 След.
Читают тему (гостей: 1)