Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / FoxPro, Visual FoxPro Новый топик    Ответить
 Thisform.grid в процедуре.  [new]
andrepont
Member

Откуда:
Сообщений: 41
Здравствуйте. имеется код который необходимо прописать в lostfocus у 65 полей грида. Пробовал засунуть код в процедуру и в lostfocus прописать её, но fox ругается на
ThisForm.grid2.column1.ControlSource =  IIF(NN_1<=0,'',ALLTRIM(STR(NN_1)))

Как это обойти, а то код объемный прописывать в каждое поле грида не хочется.
3 сен 18, 21:17    [21663142]     Ответить | Цитировать Сообщить модератору
 Re: Thisform.grid в процедуре.  [new]
Sergey Sizov
Member

Откуда:
Сообщений: 1430
andrepont
Здравствуйте. имеется код который необходимо прописать в lostfocus у 65 полей грида.
Для этого придумано ООП.
Пробовал засунуть код в процедуру и в lostfocus прописать её, но fox ругается на
ThisForm.grid2.column1.ControlSource =  IIF(NN_1<=0,'',ALLTRIM(STR(NN_1)))

Как это обойти, а то код объемный прописывать в каждое поле грида не хочется.
Что ЭТО? Какое отношение этот код имеет к LostFocus()? Зачем менять ИСТОЧНИК данных? ВЫ вообще понимаете назначение свойства ControlSource? Вы для какой задачи выбрали такой... неочевидный способ решения?
3 сен 18, 21:55    [21663169]     Ответить | Цитировать Сообщить модератору
 Re: Thisform.grid в процедуре.  [new]
andrepont
Member

Откуда:
Сообщений: 41
Я вычисляю сумму полей таблицы, присваиваю переменной NN_1 это значение, а потом мне необходимо это значение отобразить в итоговой таблице куда через ControlSource я переменную и вывожу.
3 сен 18, 22:04    [21663176]     Ответить | Цитировать Сообщить модератору
 Re: Thisform.grid в процедуре.  [new]
andrepont
Member

Откуда:
Сообщений: 41
Чтоб было понятно мне нужно вот эту конструкцию прописать в lostfocus каждого поля грида, а их 65 шт.

SELECT DISTINCT n_plan_izd.* FROM n_plan_izd WHERE  n_plan_izd.mode <> .T. INTO CURSOR npi

CALCULATE SUM(npi.Plan_1m*npi.St_Trud)TO NN_1
CALCULATE SUM((npi.Plan_2m - npi.Plan_1m)*npi.St_Trud)TO NN_2 
CALCULATE SUM((npi.Plan_3m - npi.Plan_2m)*npi.St_Trud)TO NN_3 
CALCULATE SUM((npi.Plan_4m - npi.Plan_3m)*npi.St_Trud)TO NN_4 
CALCULATE SUM((npi.Plan_5m - npi.Plan_4m)*npi.St_Trud)TO NN_5 
CALCULATE SUM((npi.Plan_6m - npi.Plan_5m)*npi.St_Trud)TO NN_6 
CALCULATE SUM((npi.Plan_7m - npi.Plan_6m)*npi.St_Trud)TO NN_7 
CALCULATE SUM((npi.Plan_8m - npi.Plan_7m)*npi.St_Trud)TO NN_8 
CALCULATE SUM((npi.Plan_9m - npi.Plan_8m)*npi.St_Trud)TO NN_9 
CALCULATE SUM((npi.Plan_10m - npi.Plan_9m)*npi.St_Trud)TO NN_10 
CALCULATE SUM((npi.Plan_11m - npi.Plan_10m)*npi.St_Trud)TO NN_11 
CALCULATE SUM((npi.Plan_12m - npi.Plan_11m)*npi.St_Trud)TO NN_12 
CALCULATE SUM(npi.ozhid_1m*npi.St_Trud)TO NN_13 
CALCULATE SUM((npi.ozhid_2m - npi.ozhid_1m)*npi.St_Trud)TO NN_14 
CALCULATE SUM((npi.ozhid_3m - npi.ozhid_2m)*npi.St_Trud)TO NN_15 
CALCULATE SUM((npi.ozhid_4m - npi.ozhid_3m)*npi.St_Trud)TO NN_16 
CALCULATE SUM((npi.ozhid_5m - npi.ozhid_4m)*npi.St_Trud)TO NN_17 
CALCULATE SUM((npi.ozhid_6m - npi.ozhid_5m)*npi.St_Trud)TO NN_18 
CALCULATE SUM((npi.ozhid_7m - npi.ozhid_6m)*npi.St_Trud)TO NN_19 
CALCULATE SUM((npi.ozhid_8m - npi.ozhid_7m)*npi.St_Trud)TO NN_20 
CALCULATE SUM((npi.ozhid_9m - npi.ozhid_8m)*npi.St_Trud)TO NN_21 
CALCULATE SUM((npi.ozhid_10m - npi.ozhid_9m)*npi.St_Trud)TO NN_22 
CALCULATE SUM((npi.ozhid_11m - npi.ozhid_10m)*npi.St_Trud)TO NN_23 
CALCULATE SUM((npi.ozhid_12m - npi.ozhid_11m)*npi.St_Trud)TO NN_24 
CALCULATE SUM(npi.Plan_G * npi.St_Trud)TO NN_G 

NN_1 = IIF(NN_1<=0,0,NN_1)
NN_2 = IIF(NN_2<=0,0,NN_2)
NN_3 = IIF(NN_3<=0,0,NN_3)
NN_4 = IIF(NN_4<=0,0,NN_4)
NN_5 = IIF(NN_5<=0,0,NN_5)
NN_6 = IIF(NN_6<=0,0,NN_6)
NN_7 = IIF(NN_7<=0,0,NN_7)
NN_8 = IIF(NN_8<=0,0,NN_8)
NN_9 = IIF(NN_9<=0,0,NN_9)
NN_10 = IIF(NN_10<=0,0,NN_10)
NN_11 = IIF(NN_11<=0,0,NN_11)
NN_12 = IIF(NN_12<=0,0,NN_12)
NN_13 = IIF(NN_13<=0,0,NN_13)
NN_14 = IIF(NN_14<=0,0,NN_14)
NN_15 = IIF(NN_15<=0,0,NN_15)
NN_16 = IIF(NN_16<=0,0,NN_16)
NN_17 = IIF(NN_17<=0,0,NN_17)
NN_18 = IIF(NN_18<=0,0,NN_18)
NN_19 = IIF(NN_19<=0,0,NN_19)
NN_20 = IIF(NN_20<=0,0,NN_20)
NN_21 = IIF(NN_21<=0,0,NN_21)
NN_22 = IIF(NN_22<=0,0,NN_22)
NN_23 = IIF(NN_23<=0,0,NN_23)
NN_24 = IIF(NN_24<=0,0,NN_24)

NN_GF = NN_13+NN_14+NN_15+NN_16+NN_17+NN_18+NN_19+NN_20+NN_21+NN_22+NN_23+NN_24

ThisForm.grid2.column1.ControlSource =  ALLTRIM(STR(NN_1))
ThisForm.grid2.column2.ControlSource =  ALLTRIM(STR(NN_2))
ThisForm.grid2.column3.ControlSource =  ALLTRIM(STR(NN_3))
ThisForm.grid2.column4.ControlSource =  ALLTRIM(STR(NN_4))
ThisForm.grid2.column5.ControlSource =  ALLTRIM(STR(NN_5))
ThisForm.grid2.column6.ControlSource =  ALLTRIM(STR(NN_6))
ThisForm.grid2.column7.ControlSource =  ALLTRIM(STR(NN_7))
ThisForm.grid2.column8.ControlSource =  ALLTRIM(STR(NN_8))
ThisForm.grid2.column9.ControlSource =  ALLTRIM(STR(NN_9))
ThisForm.grid2.column10.ControlSource =  ALLTRIM(STR(NN_10))
ThisForm.grid2.column11.ControlSource =  ALLTRIM(STR(NN_11))
ThisForm.grid2.column12.ControlSource =  ALLTRIM(STR(NN_12))
ThisForm.grid3.column1.ControlSource =  ALLTRIM(STR(NN_13))
ThisForm.grid3.column2.ControlSource =  ALLTRIM(STR(NN_14))
ThisForm.grid3.column3.ControlSource =  ALLTRIM(STR(NN_15))
ThisForm.grid3.column4.ControlSource =  ALLTRIM(STR(NN_16))
ThisForm.grid3.column5.ControlSource =  ALLTRIM(STR(NN_17))
ThisForm.grid3.column6.ControlSource =  ALLTRIM(STR(NN_18))
ThisForm.grid3.column7.ControlSource =  ALLTRIM(STR(NN_19))
ThisForm.grid3.column8.ControlSource =  ALLTRIM(STR(NN_20))
ThisForm.grid3.column9.ControlSource =  ALLTRIM(STR(NN_21))
ThisForm.grid3.column10.ControlSource =  ALLTRIM(STR(NN_22))
ThisForm.grid3.column11.ControlSource =  ALLTRIM(STR(NN_23))
ThisForm.grid3.column12.ControlSource =  ALLTRIM(STR(NN_24))
ThisForm.grid2.column13.ControlSource =  ALLTRIM(STR(NN_G))
ThisForm.grid3.column13.ControlSource =  ALLTRIM(STR(NN_GF))
3 сен 18, 23:18    [21663253]     Ответить | Цитировать Сообщить модератору
 Re: Thisform.grid в процедуре.  [new]
Dima T
Member

Откуда:
Сообщений: 13706
Ничего не понял, но попробую угадать: в lostfocus() ты прописал что-то типа
my_proc()

а в my_proc
proc my_proc
ThisForm....


Если так, то так нельзя. Надо передавать ссылку на форму или грид в параметрах, т.е.
my_proc(ThisForm.grid2)

proc my_proc
lpara toGrid
toGrid....


Или добавить форме метод my_method() и из lostfocus() вызывать его
ThisForm.my_method()


Чтобы не прописывать 65 раз вызов одного и того же, можно перебрать их в цикле и привязать вызов через BINDEVENT()

PS Код 21663253 точно не для lostfocus(). Ты бы книжку какую почитал по фоксу, раз уж пишешь на нем.
4 сен 18, 07:24    [21663369]     Ответить | Цитировать Сообщить модератору
 Re: Thisform.grid в процедуре.  [new]
Sergey Sizov
Member

Откуда:
Сообщений: 1430
andrepont
Чтоб было понятно мне нужно вот эту конструкцию прописать в lostfocus каждого поля грида, а их 65 шт.
Не надо повторять мантру про 65 штук. От этого идиотское желание не перестанет быть идиотским.
Далее разбираем код.

SELECT DISTINCT n_plan_izd.* FROM n_plan_izd WHERE  n_plan_izd.mode <> .T. INTO CURSOR npi

CALCULATE SUM(npi.Plan_1m*npi.St_Trud)TO NN_1
CALCULATE SUM((npi.Plan_2m - npi.Plan_1m)*npi.St_Trud)TO NN_2 
CALCULATE SUM((npi.Plan_3m - npi.Plan_2m)*npi.St_Trud)TO NN_3 
CALCULATE SUM((npi.Plan_4m - npi.Plan_3m)*npi.St_Trud)TO NN_4 
CALCULATE SUM((npi.Plan_5m - npi.Plan_4m)*npi.St_Trud)TO NN_5 
CALCULATE SUM((npi.Plan_6m - npi.Plan_5m)*npi.St_Trud)TO NN_6 
CALCULATE SUM((npi.Plan_7m - npi.Plan_6m)*npi.St_Trud)TO NN_7 
CALCULATE SUM((npi.Plan_8m - npi.Plan_7m)*npi.St_Trud)TO NN_8 
CALCULATE SUM((npi.Plan_9m - npi.Plan_8m)*npi.St_Trud)TO NN_9 
CALCULATE SUM((npi.Plan_10m - npi.Plan_9m)*npi.St_Trud)TO NN_10 
CALCULATE SUM((npi.Plan_11m - npi.Plan_10m)*npi.St_Trud)TO NN_11 
CALCULATE SUM((npi.Plan_12m - npi.Plan_11m)*npi.St_Trud)TO NN_12 
CALCULATE SUM(npi.ozhid_1m*npi.St_Trud)TO NN_13 
CALCULATE SUM((npi.ozhid_2m - npi.ozhid_1m)*npi.St_Trud)TO NN_14 
CALCULATE SUM((npi.ozhid_3m - npi.ozhid_2m)*npi.St_Trud)TO NN_15 
CALCULATE SUM((npi.ozhid_4m - npi.ozhid_3m)*npi.St_Trud)TO NN_16 
CALCULATE SUM((npi.ozhid_5m - npi.ozhid_4m)*npi.St_Trud)TO NN_17 
CALCULATE SUM((npi.ozhid_6m - npi.ozhid_5m)*npi.St_Trud)TO NN_18 
CALCULATE SUM((npi.ozhid_7m - npi.ozhid_6m)*npi.St_Trud)TO NN_19 
CALCULATE SUM((npi.ozhid_8m - npi.ozhid_7m)*npi.St_Trud)TO NN_20 
CALCULATE SUM((npi.ozhid_9m - npi.ozhid_8m)*npi.St_Trud)TO NN_21 
CALCULATE SUM((npi.ozhid_10m - npi.ozhid_9m)*npi.St_Trud)TO NN_22 
CALCULATE SUM((npi.ozhid_11m - npi.ozhid_10m)*npi.St_Trud)TO NN_23 
CALCULATE SUM((npi.ozhid_12m - npi.ozhid_11m)*npi.St_Trud)TO NN_24 
CALCULATE SUM(npi.Plan_G * npi.St_Trud)TO NN_G 

NN_1 = IIF(NN_1<=0,0,NN_1)
NN_2 = IIF(NN_2<=0,0,NN_2)
NN_3 = IIF(NN_3<=0,0,NN_3)
NN_4 = IIF(NN_4<=0,0,NN_4)
NN_5 = IIF(NN_5<=0,0,NN_5)
NN_6 = IIF(NN_6<=0,0,NN_6)
NN_7 = IIF(NN_7<=0,0,NN_7)
NN_8 = IIF(NN_8<=0,0,NN_8)
NN_9 = IIF(NN_9<=0,0,NN_9)
NN_10 = IIF(NN_10<=0,0,NN_10)
NN_11 = IIF(NN_11<=0,0,NN_11)
NN_12 = IIF(NN_12<=0,0,NN_12)
NN_13 = IIF(NN_13<=0,0,NN_13)
NN_14 = IIF(NN_14<=0,0,NN_14)
NN_15 = IIF(NN_15<=0,0,NN_15)
NN_16 = IIF(NN_16<=0,0,NN_16)
NN_17 = IIF(NN_17<=0,0,NN_17)
NN_18 = IIF(NN_18<=0,0,NN_18)
NN_19 = IIF(NN_19<=0,0,NN_19)
NN_20 = IIF(NN_20<=0,0,NN_20)
NN_21 = IIF(NN_21<=0,0,NN_21)
NN_22 = IIF(NN_22<=0,0,NN_22)
NN_23 = IIF(NN_23<=0,0,NN_23)
NN_24 = IIF(NN_24<=0,0,NN_24)

ЭТО заменяется на 1(один) запрос с выводом результата в массив NN.
NN_GF = NN_13+NN_14+NN_15+NN_16+NN_17+NN_18+NN_19+NN_20+NN_21+NN_22+NN_23+NN_24
Это меняется на
NN_GF = NN[13]+NN[14}+NN[15}+NN[16]+NN[17]+NN[18]+NN[19]+NN[20]+NN[21]+NN[22]+NN[23]+NN[24]
ThisForm.grid2.column1.ControlSource = ALLTRIM(STR(NN_1))
ThisForm.grid2.column2.ControlSource = ALLTRIM(STR(NN_2))
ThisForm.grid2.column3.ControlSource = ALLTRIM(STR(NN_3))
ThisForm.grid2.column4.ControlSource = ALLTRIM(STR(NN_4))
ThisForm.grid2.column5.ControlSource = ALLTRIM(STR(NN_5))
ThisForm.grid2.column6.ControlSource = ALLTRIM(STR(NN_6))
ThisForm.grid2.column7.ControlSource = ALLTRIM(STR(NN_7))
ThisForm.grid2.column8.ControlSource = ALLTRIM(STR(NN_8))
ThisForm.grid2.column9.ControlSource = ALLTRIM(STR(NN_9))
ThisForm.grid2.column10.ControlSource = ALLTRIM(STR(NN_10))
ThisForm.grid2.column11.ControlSource = ALLTRIM(STR(NN_11))
ThisForm.grid2.column12.ControlSource = ALLTRIM(STR(NN_12))
ThisForm.grid3.column1.ControlSource = ALLTRIM(STR(NN_13))
ThisForm.grid3.column2.ControlSource = ALLTRIM(STR(NN_14))
ThisForm.grid3.column3.ControlSource = ALLTRIM(STR(NN_15))
ThisForm.grid3.column4.ControlSource = ALLTRIM(STR(NN_16))
ThisForm.grid3.column5.ControlSource = ALLTRIM(STR(NN_17))
ThisForm.grid3.column6.ControlSource = ALLTRIM(STR(NN_18))
ThisForm.grid3.column7.ControlSource = ALLTRIM(STR(NN_19))
ThisForm.grid3.column8.ControlSource = ALLTRIM(STR(NN_20))
ThisForm.grid3.column9.ControlSource = ALLTRIM(STR(NN_21))
ThisForm.grid3.column10.ControlSource = ALLTRIM(STR(NN_22))
ThisForm.grid3.column11.ControlSource = ALLTRIM(STR(NN_23))
ThisForm.grid3.column12.ControlSource = ALLTRIM(STR(NN_24))
ThisForm.grid2.column13.ControlSource = ALLTRIM(STR(NN_G))
ThisForm.grid3.column13.ControlSource = ALLTRIM(STR(NN_GF))
[/src]
А вот ЭТО вообще выкидывается за полной ненадобностью ибо установка источника должна производиться 1(один) раз и тут ну совершенно не нужны идиотские Altrim(Str()). И это можно сделать прямо в конструкторе формы. И использовать только NN[] и NN_GF.
4 сен 18, 09:13    [21663440]     Ответить | Цитировать Сообщить модератору
 Re: Thisform.grid в процедуре.  [new]
ВладимирМ
Member

Откуда: г. Москва
Сообщений: 7833
andrepont,

Есть такой мультфильм "Следствие ведут колобки...". И там был фрагмент, когда они ехали на велосипеде по шпалам железной дороги. Их трясло и раскачивало в разные стороны. Неудобно. Поэтому они сделали вмятины в колесах велосипеда, чтобы эти вмятины попали на шпалы. И сразу езда стала ровной и приятной

Так вот, Вы делаете то же самое. По железной дороге, вообще-то, ездят на поезде, ну, или на дрезине. Но никак не на велосипеде, пусть и с квадратными колесами

Объект Grid предназначен для отображение содержимого ТАБЛИЦ. Т.е. неких СПИСКОВ. Он никак не предназначен для отображения переменных памяти. Сделать-то это можно, но, сильно подозреваю, Вам надо совсем не то, что в результате получится

Не знаю, есть ли там где Вы живете эскалатор? Ну, в сериалах, наверное, видели. Это такая движущаяся лестница. Теперь представьте, что каждая ступень этой лестницы - это отдельная запись таблицы. А сам эскалатор - это Grid. Вы видите не все "ступени" (записи таблицы), а только те, которые попадают в область видимости. Те ступени, которые находятся "сверху". Чтобы просмотреть все "ступени" нужно "прокрутить" всю ленту эскалатора

У Вас есть одно значение переменной памяти. Каким образом Вы можете "отобразить" эту переменную на "ступенях эскалатора"? Ну, очевидно, либо "приклеить" к ОДНОЙ ступеньке, либо заменить ОДНУ ступеньку. Обратите внимание - ОДНУ

Возвращаясь, к ControlSource. Если речь идет о Column, то это замена ВСЕХ ступеней. Как Вы вообще себе представляете процесс, при котором вообще все ступени эскалатора выбрасываются и остается только одна? Бред это. Вот никто Вам ничего вразумительного посоветовать и не может. Все дают советы в рамках собственного понимания. Но, поскольку, все они "по умолчанию" предполагают некоторые "совершенно очевидные" вещи, то теперь уже Вы их не понимаете

Прикрепите здесь во вложении либо свой проект, либо картинку того, что Вы хотите увидеть в результате. Ну, хоть в Excel или Word нарисуйте, что должно получиться
4 сен 18, 13:10    [21663874]     Ответить | Цитировать Сообщить модератору
 Re: Thisform.grid в процедуре.  [new]
Sergey Sizov
Member

Откуда:
Сообщений: 1430
ВладимирМ,

да наверняка очередная попытка нарисовать на гриде аналог электронной таблицы, то бишь excel'я.
4 сен 18, 14:48    [21664103]     Ответить | Цитировать Сообщить модератору
 Re: Thisform.grid в процедуре.  [new]
ВладимирМ
Member

Откуда: г. Москва
Сообщений: 7833
Гм... Если я правильно понял, то под Grid с отображением содержимого курсора npi, хочется отобразить Grid с суммами с результатам вычислений по полям этого курсора. Тогда это так делается

ThisForm.grid2.RecordSource = ''

select ;
    SUM(npi.Plan_1m*npi.St_Trud) as NN_1, ;
    SUM((npi.Plan_2m - npi.Plan_1m)*npi.St_Trud) as NN_2, ;
    SUM((npi.Plan_3m - npi.Plan_2m)*npi.St_Trud) as NN_3, ;
    SUM((npi.Plan_4m - npi.Plan_3m)*npi.St_Trud) as NN_4, ;
    SUM((npi.Plan_5m - npi.Plan_4m)*npi.St_Trud) as NN_5, ; 
    SUM((npi.Plan_6m - npi.Plan_5m)*npi.St_Trud) as NN_6, ; 
    SUM((npi.Plan_7m - npi.Plan_6m)*npi.St_Trud) as NN_7, ; 
    SUM((npi.Plan_8m - npi.Plan_7m)*npi.St_Trud) as NN_8, ; 
    SUM((npi.Plan_9m - npi.Plan_8m)*npi.St_Trud) as NN_9, ; 
    SUM((npi.Plan_10m - npi.Plan_9m)*npi.St_Trud) as NN_10, ; 
    SUM((npi.Plan_11m - npi.Plan_10m)*npi.St_Trud) as NN_11, ;
    SUM((npi.Plan_12m - npi.Plan_11m)*npi.St_Trud) as NN_12, ; 
    SUM(npi.ozhid_1m*npi.St_Trud) as NN_13, ; 
    SUM((npi.ozhid_2m - npi.ozhid_1m)*npi.St_Trud) as NN_14, ; 
    SUM((npi.ozhid_3m - npi.ozhid_2m)*npi.St_Trud) as NN_15, ; 
    SUM((npi.ozhid_4m - npi.ozhid_3m)*npi.St_Trud) as NN_16, ; 
    SUM((npi.ozhid_5m - npi.ozhid_4m)*npi.St_Trud) as NN_17, ; 
    SUM((npi.ozhid_6m - npi.ozhid_5m)*npi.St_Trud) as NN_18, ; 
    SUM((npi.ozhid_7m - npi.ozhid_6m)*npi.St_Trud) as NN_19, ; 
    SUM((npi.ozhid_8m - npi.ozhid_7m)*npi.St_Trud) as NN_20, ; 
    SUM((npi.ozhid_9m - npi.ozhid_8m)*npi.St_Trud) as NN_21, ; 
    SUM((npi.ozhid_10m - npi.ozhid_9m)*npi.St_Trud) as NN_22, ; 
    SUM((npi.ozhid_11m - npi.ozhid_10m)*npi.St_Trud) as NN_23, ; 
    SUM((npi.ozhid_12m - npi.ozhid_11m)*npi.St_Trud) as NN_24, ; 
from npi ;
into cursor curSum nofilter

ThisForm.grid2.RecordSource = 'curSum'


Насчет сокрытия отрицательных значений можно потом уточнить. Если я саму идею правильно уловил
4 сен 18, 15:54    [21664271]     Ответить | Цитировать Сообщить модератору
 Re: Thisform.grid в процедуре.  [new]
andrepont
Member

Откуда:
Сообщений: 41
Здравствуйте. Спасибо за комментарии. Прошу сильно не пинать, т.к. в foxpro я 2-й месяц а до этого вообще программированием не занимался вот и приходится методом тыка разбираться т.к. в литературе не всегда понятно. В грид я эти расчеты вывожу для удобства восприятия. А суть в том что мне нужно посчитать суму выражений между полями таблицы и вывести их в грид для удобства восприятия в виде таблички. при этом скрыть отрицательные результаты. А потом посчитать итог, результатом которого будет сумма переменных с NN_13 по NN_24, но есть условие что если переменная меньше 0 то она является 0, т.к. иначе сумма будет недостоверна, далее поместить результат в переменную NN_GF и вывести её в последнюю колонку грида после всех переменных.
4 сен 18, 21:53    [21664730]     Ответить | Цитировать Сообщить модератору
 Re: Thisform.grid в процедуре.  [new]
andrepont
Member

Откуда:
Сообщений: 41
Пример ВладимираМ понятен только как быть с отрицательными значениями. И можно ли переменные с NN_1 по NN_12 отобразить в первой строке, а переменные с NN_13 по NN_24 во второй?
4 сен 18, 22:04    [21664734]     Ответить | Цитировать Сообщить модератору
 Re: Thisform.grid в процедуре.  [new]
andrepont
Member

Откуда:
Сообщений: 41
Вот фото того что должно получиться.

К сообщению приложен файл. Размер - 3Kb
4 сен 18, 22:06    [21664736]     Ответить | Цитировать Сообщить модератору
 Re: Thisform.grid в процедуре.  [new]
ВладимирМ
Member

Откуда: г. Москва
Сообщений: 7833
Начинаем с того, что источник данных Grid - это таблица. Без вариантов. Значит, для Grid итогами нам надо создать таблицу. Можно временную (курсор). Но в любом случае, это должна быть таблица

Судя по картинке, таблица должна иметь 13 столбцов (12 месяцев и год). Вот и создаем такую таблицу примерно так

* init-формы

ThisForm.grid2.RecordSource = ''

create Cursor curTotal ;
   ( ;
    Month_1 N(10,2), ;
    Month_2 N(10,2), ;
    Month_3 N(10,2), ;
    Month_4 N(10,2), ;
    Month_5 N(10,2), ;
    Month_6 N(10,2), ;
    Month_7 N(10,2), ;
    Month_8 N(10,2), ;
    Month_9 N(10,2), ;
    Month_10 N(10,2), ;
    Month_11 N(10,2), ;
    Month_12 N(10,2), ;
    YearNum I ;
    )

* Сразу создаем 2 пустые строки, в которые позже будут записаны результаты расчета
append blank
append blank

ThisForm.grid2.RecordSource = 'curTotal'


Далее выполняется итоговый подсчет по таблице npi и получаем курсор с результатами этого расчета

select ;
    SUM(npi.Plan_1m*npi.St_Trud) as NN_1, ;
    SUM((npi.Plan_2m - npi.Plan_1m)*npi.St_Trud) as NN_2, ;
    SUM((npi.Plan_3m - npi.Plan_2m)*npi.St_Trud) as NN_3, ;
    SUM((npi.Plan_4m - npi.Plan_3m)*npi.St_Trud) as NN_4, ;
    SUM((npi.Plan_5m - npi.Plan_4m)*npi.St_Trud) as NN_5, ; 
    SUM((npi.Plan_6m - npi.Plan_5m)*npi.St_Trud) as NN_6, ; 
    SUM((npi.Plan_7m - npi.Plan_6m)*npi.St_Trud) as NN_7, ; 
    SUM((npi.Plan_8m - npi.Plan_7m)*npi.St_Trud) as NN_8, ; 
    SUM((npi.Plan_9m - npi.Plan_8m)*npi.St_Trud) as NN_9, ; 
    SUM((npi.Plan_10m - npi.Plan_9m)*npi.St_Trud) as NN_10, ; 
    SUM((npi.Plan_11m - npi.Plan_10m)*npi.St_Trud) as NN_11, ;
    SUM((npi.Plan_12m - npi.Plan_11m)*npi.St_Trud) as NN_12, ; 
    SUM(npi.ozhid_1m*npi.St_Trud) as NN_13, ; 
    SUM((npi.ozhid_2m - npi.ozhid_1m)*npi.St_Trud) as NN_14, ; 
    SUM((npi.ozhid_3m - npi.ozhid_2m)*npi.St_Trud) as NN_15, ; 
    SUM((npi.ozhid_4m - npi.ozhid_3m)*npi.St_Trud) as NN_16, ; 
    SUM((npi.ozhid_5m - npi.ozhid_4m)*npi.St_Trud) as NN_17, ; 
    SUM((npi.ozhid_6m - npi.ozhid_5m)*npi.St_Trud) as NN_18, ; 
    SUM((npi.ozhid_7m - npi.ozhid_6m)*npi.St_Trud) as NN_19, ; 
    SUM((npi.ozhid_8m - npi.ozhid_7m)*npi.St_Trud) as NN_20, ; 
    SUM((npi.ozhid_9m - npi.ozhid_8m)*npi.St_Trud) as NN_21, ; 
    SUM((npi.ozhid_10m - npi.ozhid_9m)*npi.St_Trud) as NN_22, ; 
    SUM((npi.ozhid_11m - npi.ozhid_10m)*npi.St_Trud) as NN_23, ; 
    SUM((npi.ozhid_12m - npi.ozhid_11m)*npi.St_Trud) as NN_24, ; 
    SUM(npi.Plan_G * npi.St_Trud) as NN_G ;
from npi ;
into cursor curSum nofilter


А вот теперь, переносим данные из промежуточного результата расчета curSum в таблицу для отображения результата curTotal примерно так

* Переходим в рабочую область нужной таблицы
* Предполагаю, что эта таблица уже имеет 2 строки, поэтому анализ на их наличие не выполняется
select curTotal 

* Первая строка
go top

* Записываем значения в текущую строку
replace ;
    Month_1 with iif(curSum.NN_1 < 0, 0, curSum.NN_1), ;
    Month_2 with iif(curSum.NN_2 < 0, 0, curSum.NN_2), ;
    Month_3 with iif(curSum.NN_3 < 0, 0, curSum.NN_3), ;
    Month_4 with iif(curSum.NN_4 < 0, 0, curSum.NN_4), ;
    Month_5 with iif(curSum.NN_5 < 0, 0, curSum.NN_5), ;
    Month_6 with iif(curSum.NN_6 < 0, 0, curSum.NN_6), ;
    Month_7 with iif(curSum.NN_7 < 0, 0, curSum.NN_7), ;
    Month_8 with iif(curSum.NN_8 < 0, 0, curSum.NN_8), ;
    Month_9 with iif(curSum.NN_9 < 0, 0, curSum.NN_9), ;
    Month_10 with iif(curSum.NN_10 < 0, 0, curSum.NN_10), ;
    Month_11 with iif(curSum.NN_11 < 0, 0, curSum.NN_11), ;
    Month_12 with iif(curSum.NN_12 < 0, 0, curSum.NN_12), ;
    YearNum with curSum.NN_13

* вторая строка
skip

* Записываем значения в текущую строку
replace ;
    Month_1 with iif(curSum.NN_14 < 0, 0, curSum.NN_14), ;
    Month_2 with iif(curSum.NN_15 < 0, 0, curSum.NN_15), ;
    Month_3 with iif(curSum.NN_16 < 0, 0, curSum.NN_16), ;
    Month_4 with iif(curSum.NN_17 < 0, 0, curSum.NN_17), ;
    Month_5 with iif(curSum.NN_18 < 0, 0, curSum.NN_18), ;
    Month_6 with iif(curSum.NN_19 < 0, 0, curSum.NN_19), ;
    Month_7 with iif(curSum.NN_20 < 0, 0, curSum.NN_20), ;
    Month_8 with iif(curSum.NN_21 < 0, 0, curSum.NN_21), ;
    Month_9 with iif(curSum.NN_22 < 0, 0, curSum.NN_22), ;
    Month_10 with iif(curSum.NN_23 < 0, 0, curSum.NN_23), ;
    Month_11 with iif(curSum.NN_24 < 0, 0, curSum.NN_24), ;
    Month_12 with iif(curSum.NN_25 < 0, 0, curSum.NN_25), ;
    YearNum with curSum.NN_G



Собственно, все. Источники данных Grid здесь не меняются. Как была временная таблица CurTotal, так и осталась. Просто меняется содержимое записей этой таблицы
5 сен 18, 11:38    [21665291]     Ответить | Цитировать Сообщить модератору
 Re: Thisform.grid в процедуре.  [new]
andrepont
Member

Откуда:
Сообщений: 41
ВладимирМ спасибо за помощь, ваш пример помог добиться желаемого.
7 сен 18, 20:17    [21668600]     Ответить | Цитировать Сообщить модератору
Все форумы / FoxPro, Visual FoxPro Ответить