Гость
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Необходимо чтобы данные одного пункта не входили в итог. Foxpro 2.6 / 17 сообщений из 17, страница 1 из 1
19.08.2016, 11:07
    #39294444
dmr55
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Необходимо чтобы данные одного пункта не входили в итог. Foxpro 2.6
Имеется 20 пунктов, 1 пункт – это итог, который составляет сумму 2-20 пунктов.
Необходимо исключить 20 пункт из итога, т.е. чтобы в 1 пункте не суммировались данные 20 пункта.
В каждый пункт входят определенные коды KODOP, в пунктах не бывает одинаковых KODOP

Часть кода

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
DIMENSION KODR(60)
   KODR(1) = '    1'
…
   KODR(59) = '20.00'
   
      NL = 0
   NST = 0
   @ 0, 0 CLEAR TO 24, 79
   @ 5, 25 SAY ' ” Ћ ђ Њ Ђ  111   '
   @ 7, 20 SAY '123’    123 ‘ — … ’  '
   IF .NOT.FILES('rabf111.dbf')
      SELECT 9
      USE strufl
      COPY TO strkart STRUCTURE
      USE
      SELECT 8
      USE strkart
      APPEND BLANK
      REPLACE FIELD_NAME WITH 'KOD'
      REPLACE FIELD_TYPE WITH 'C'
      REPLACE FIELD_LEN WITH 5
      REPLACE FIELD_DEC WITH 0
      APPEND BLANK
      REPLACE FIELD_NAME WITH 'OPERWS'
      REPLACE FIELD_TYPE WITH 'N'
      REPLACE FIELD_LEN WITH 6
      REPLACE FIELD_DEC WITH 0
      APPEND BLANK
      REPLACE FIELD_NAME WITH 'OPERDETI'
      REPLACE FIELD_TYPE WITH 'N'
      REPLACE FIELD_LEN WITH 7
      REPLACE FIELD_DEC WITH 0
      APPEND BLANK
      REPLACE FIELD_NAME WITH 'UMEROPER'
      REPLACE FIELD_TYPE WITH 'N'
      REPLACE FIELD_LEN WITH 6
      REPLACE FIELD_DEC WITH 0
      USE
      SELECT 3
      CREATE rabf111 FROM strkart
      USE
      ERASE strkart.dbf
   ELSE
      USE rabf111
      ZAP
      USE
   ENDIF
   CLOSE ALL
   SET PROCEDURE TO prf111
   SELECT 3
   USE rabf111
   INDEX ON KOD TO inrab111
   USE
   SELECT 4
   USE zagfor11 INDEXES inzagf11
   SELECT 3
   USE rabf111 INDEXES inrab111
   I = 1
   DO WHILE I<60
      APPEND BLANK
      REPLACE KOD WITH KODR(I)
      I = I+1
      LOOP
   ENDDO
   GOTO TOP

   SELECT 1
   USE kartwib    
   
SET FILTER TO (DATW>=MINDAT.AND.DATW<=MAXDAT).AND.SRDOOP>0)
brow
   GOTO TOP




   SELECT 2
   USE operwib INDEXES inoperp
   @ 21, 10 SAY 123 '+STR(OBRZAP,6)
   SELECT 1
   KODOPR = 0
   UM = 0
   ITOGO = 0
   DO WHILE .NOT.EOF()
      OBRZAP = OBRZAP+1
      @ 21, 31 SAY STR(OBRZAP,6)
      WOZR = INT((DATP-DATR)/365)
      DSRAB = TRIM(DSSTAT)
      IF EFFEKT=6
         UM = UM+1
      ENDIF
      SELECT 2
      SEEK (A->INDEF)
      IF .NOT.FOUND()
         SELECT 1
         SKIP
         LOOP
      ENDIF
      ITOGO = ITOGO+1
      INDEFR = INDEF
      III = 0
      III1 = 0
      III2 = 0
      III3 = 0
      SELECT 3
      SEEK (KODR(1))
      IF FOUND()
         IF A->EFFEKT=6
            REPLACE UMEROPER WITH UMEROPER+1
         ENDIF
      ENDIF
      SELECT 2
      DO WHILE INDEF=INDEFR
         III = 0
         III1 = 0
         III2 = 0
	 III3 = 0	
         KODOPR = KODOP
         IF KODOP>0.AND.KODOP<9999
            SELECT 3
            III = 1
            SEEK (KODR(1))
            DO CHET
         ELSE
            SELECT 2
            SKIP
            LOOP
         ENDIF
         DO WHILE .T.
            SELECT 3
*Џ“ЌЉ’ 2.00
IF B->KODOP=199.OR.(B->KODOP>=501.and.B->KODOP<=516);
.OR.(B->KODOP>=518.and.B->KODOP<=546);
.OR.(B->KODOP>=548.and.B->KODOP<=564)
	III = 2
	SEEK (KODR(2))
	DO CHET
	IF (B->KODOP>=501.and.B->KODOP<=510).OR.(B->KODOP>=512.and.B;
        ->KODOP<=516).OR.(B->KODOP>=518.and.B->KODOP<=524);
        .OR.(B->KODOP>=535.and.B->KODOP<=546);
        .OR.(B->KODOP>=548.and.B->KODOP<=563)
	III1 = 3
	SEEK (KODR(3))
	DO CHET
        EXIT
     ENDIF
     IF B->KODOP=199.OR.B->KODOP=511.OR.(B->KODOP>=525;
     .and.B->KODOP<=534).OR.B->KODOP=564;
        III1 = 4
        SEEK (KODR(4))
        DO CHET
        EXIT
     ENDIF
      EXIT
   ENDIF

…
*
* Џ“ЌЉ’ 20.00
*
IF (B->KODOP>=1.and.B->KODOP<=14);
.OR.(B->KODOP>=17.and.B->KODOP<=22).OR.B->KODOP=205
 	III = 59
        SEEK (KODR(59))
        DO CHET
	EXIT
        ENDIF

? B -> KODOP, ' indef=', A -> INDEF
WAIT
III = 59
SEEK (KODR(59))
DO CHET
EXIT
ENDDO
SELECT 2
SKIP
LOOP
ENDDO
IF III=0
   III = 48
   ? 'indef=', A -> INDEF
   WAIT
ENDIF

...
Рейтинг: 0 / 0
19.08.2016, 15:04
    #39294649
alextashk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Необходимо чтобы данные одного пункта не входили в итог. Foxpro 2.6
Лень ковырять часть кода.
Поэтому предположив, что сумма - 1 строка, а исключаемая строка - 20, меняем итоговую таблицу table1:

Код: plsql
1.
2.
3.
4.
Goto 20
lnSum = table1.sum
Goto 1
Replace sum with sum1 - lnSum
...
Рейтинг: 0 / 0
19.08.2016, 15:06
    #39294653
alextashk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Необходимо чтобы данные одного пункта не входили в итог. Foxpro 2.6
Поправка


Лень ковырять часть кода.
Поэтому предположив, что сумма - 1 строка, а исключаемая строка - 20, меняем итоговую таблицу table1:

Код: sql
1.
2.
3.
4.
5.
Select table1
Goto 20
lnSum = table1.sum
Goto 1
Replace sum with sum - lnSum
...
Рейтинг: 0 / 0
19.08.2016, 18:03
    #39294744
dmr55
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Необходимо чтобы данные одного пункта не входили в итог. Foxpro 2.6
куда конкретнее нужно вставить
...
Рейтинг: 0 / 0
20.08.2016, 05:20
    #39294851
alextashk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Необходимо чтобы данные одного пункта не входили в итог. Foxpro 2.6
Перед вызовом на печать.

В приведенном Вами коде я не нашел это место.
...
Рейтинг: 0 / 0
20.08.2016, 20:28
    #39295011
dmr55
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Необходимо чтобы данные одного пункта не входили в итог. Foxpro 2.6
Это продолжение кода, получается здесь

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
SELECT 3
SEEK (KODR(III))
IF FOUND()
   IF A->EFFEKT=6
      REPLACE UMEROPER WITH UMEROPER+1
   ENDIF
ENDIF
IF III1<>0
   SEEK (KODR(III1))
   IF FOUND()
      IF A->EFFEKT=6
         REPLACE UMEROPER WITH UMEROPER+1
      ENDIF
   ENDIF
ENDIF
IF III2<>0
   SEEK (KODR(III2))
   IF FOUND()
      IF A->EFFEKT=6
         REPLACE UMEROPER WITH UMEROPER+1
      ENDIF
   ENDIF
ENDIF
SELECT 1
SKIP
LOOP
ENDDO
PPF1 = 'otbor.txt'
SAVE SCREEN TO SCR
SET DEVICE TO PRINTER
SET PRINTER ON
SET CONSOLE OFF
set print to &ppf1
SELECT 3
GOTO TOP
OBOPER = OPERWS
? SPACE(60)+'  ”®а¬a 14'
? SPACE(10)+'888888888888 '+DTOC(MINDAT)+' Ї® '+DTOC;
(MAXDAT)
? 'ЪДДДДДВДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДВДДДДДВДДДДДВДДДДДВДДДДДДї'
? 'і     і                                        іЋЎйҐҐі‚ в.зі“¬Ґа-і%;
 ®в  і'
? 'і     і HaЁ¬Ґ­®ўa­ЁҐ ®ЇҐаaжЁ©                  ізЁб«®і­Ґва¤і«®   і®ЎйҐЈ®і'
? 'і     і                                        і®ЇҐ- іў®§а і®ЇҐ- ізЁб«a;
 і'
? 'і     і                                        іаaжЁ©ібв   іаЁа®ўі®ЇҐаaжі'
? 'ГДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЕДДДДДЕДДДДДЕДДДДДЕДДДДДДґ'
? 'і  1  і                  2                     і  3  і  4  і  5  і ;
 3   і'
? 'ГДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЕДДДДДЕДДДДДЕДДДДДЕДДДДДДґ'
I = 1
DO WHILE .NOT.EOF()
   I = 1
   SELECT 4
   SEEK (C->KOD)
   SELECT 3
   ? 'і'+KOD+'і'+SUBSTR(D->NAIMR,I,40)+'і'+STR(OPERWS,5)+'і'+STR(OPERDETI;
,5)+'і'
   ?? STR(UMEROPER,5)+'і'+STR(ROUND((OPERWS/OBOPER)*100,2),6,2)+'і'
   NST = NST+1
   DO WHILE I<120
      I = I+40
      IF SUBSTR(D->NAIMR,I,40)<>SPACE(40)
         ? 'і'+SPACE(5)+'і'+SUBSTR(D->NAIMR,I,40)+'і'+SPACE(5)+'і'+SPACE;
(5)+'і'+SPACE(5)+'і'+SPACE(6)+'і'
         NST = NST+1
         LOOP
      ELSE
         EXIT
      ENDIF
   ENDDO
   ? 'і'+REPLICATE('Д',71)+'і'
   NST = NST+1
   SELECT 3
   SKIP
   LOOP
ENDDO
? '8888888888888888    '+STR(ITOGO,6)+SPACE(10)+'8888 ';
+STR(UM,5)+SPACE(13)+'і'
NST = NST+1
? 'і'+REPLICATE('Д',71)+'і'
SET CONSOLE ON
SET PRINTER OFF
SET PRINTER TO
SET DEVICE TO SCREEN
CLOSE DATABASES
CLEAR
SET COLOR TO GR+/R
@ 2, 5 SAY '      88888888     '+STR(ITOGO,6)
AA = INKEY(2)
!readme.com &ppf1
@ 24, 1 SAY '111111111111111111111 -<ENTER>;
,‚л室 -<ESC> '
A_Z = INKEY(0)
IF A_Z=29
   COPY FILE &ppf1 TO prn
ENDIF
IF A_Z=1
   IMFAIL = SPACE(12)
   SET COLOR TO GR+/R,W/B
   @ 0, 1 SAY ' “Єa¦ЁвҐ Ё¬п дa©«a ' GET IMFAIL
   READ
   SET COLOR TO N/BG,GR+/RB
   CLOSE ALL
   erase &imfail
   rename otbor.txt to &imfail
   @ 0, 1 SAY SPACE(78)
ENDIF
IF A_Z=13
   ITOGO = 0
   SET COLOR TO N/BG,W+/RB
   CLEAR
   LOOP
ENDIF
IF A_Z=27
   CLOSE ALL
   RETURN
ENDIF
ERASE otbor.txt
RETURN
ENDDO

...
Рейтинг: 0 / 0
21.08.2016, 07:12
    #39295057
alextashk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Необходимо чтобы данные одного пункта не входили в итог. Foxpro 2.6
dmr55,

Клева. Выходная форма для АЦПУ.

Приложите также ваш текстовый файл..
...
Рейтинг: 0 / 0
21.08.2016, 15:39
    #39295129
dmr55
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Необходимо чтобы данные одного пункта не входили в итог. Foxpro 2.6
Смысл кидать файл, если я показываю практический весь код файла
...
Рейтинг: 0 / 0
23.08.2016, 08:15
    #39295883
alextashk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Необходимо чтобы данные одного пункта не входили в итог. Foxpro 2.6
dmr55,

Ткните пальцем, где в коде обговаривается 20-й пункт?
...
Рейтинг: 0 / 0
23.08.2016, 11:49
    #39296124
dmr55
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Необходимо чтобы данные одного пункта не входили в итог. Foxpro 2.6
*
* Џ“ЌЉ’ 20.00
*
IF (B->KODOP>=1.and.B->KODOP<=14);
.OR.(B->KODOP>=17.and.B->KODOP<=22).OR.B->KODOP=205
III = 59
SEEK (KODR(59))
DO CHET
EXIT
ENDIF

Необходимо чтобы этот пункт не входил в итог
...
Рейтинг: 0 / 0
23.08.2016, 11:51
    #39296126
dmr55
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Необходимо чтобы данные одного пункта не входили в итог. Foxpro 2.6
Конечно его можно удалить, но он нужен, он не нужен только в итоговом пункте - 1
...
Рейтинг: 0 / 0
23.08.2016, 14:13
    #39296285
alextashk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Необходимо чтобы данные одного пункта не входили в итог. Foxpro 2.6
dmr55,

DO Chet - листинг процедуры
ну и напоследок - наименование суммируемой переменной
...
Рейтинг: 0 / 0
23.08.2016, 19:18
    #39296617
dmr55
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Необходимо чтобы данные одного пункта не входили в итог. Foxpro 2.6
может вам все таки скинуть на емайл данный файл
...
Рейтинг: 0 / 0
24.08.2016, 05:01
    #39296752
alextashk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Необходимо чтобы данные одного пункта не входили в итог. Foxpro 2.6
...
Рейтинг: 0 / 0
24.08.2016, 06:11
    #39296757
dmr55
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Необходимо чтобы данные одного пункта не входили в итог. Foxpro 2.6
отправил
...
Рейтинг: 0 / 0
25.08.2016, 16:42
    #39298092
alextashk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Необходимо чтобы данные одного пункта не входили в итог. Foxpro 2.6
dmr55,

Слов нет, одни эмоции - по поводу оформления программы.
Нифига непонятно. Так же непонятно, что Вам требуется.
Попробуем вывести Вашу форму в таблицу, потом Вы вычитаете что надо откуда надо
и выводите на печать.

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
CREATE CURSOR curTemp (kod C(5), NAIMR C(40), OPERWS N(5), OPERDETI N(5), UMEROPER N(5), OPERWS N(6,2))
SELECT 3
GOTO TOP
I = 1
DO WHILE .NOT. EOF()
   I = 1
   SELECT 4
   SEEK (C->KOD)
   SELECT curTemp
   APPEND BLANK
   REPLACE kod WITH C->kod, NaimR WITH D->naimr, operws WITH c->operws, operdeti WITH c->operdeti,;
         umeroper WITH c->umeroper, operws WITH ROUND((OPERWS/OBOPER)*100,2)
   SELECT 3
   DO WHILE I<120
      I = I+40
      IF SUBSTR(D->NAIMR,I,40)<>SPACE(40)
            REPLACE kod WITH SPACE(5), NaimR WITH D->naimr, operws WITH 0, operdeti WITH 0,;
         umeroper WITH 0, operws WITH 0
         LOOP
      ELSE
         EXIT
      ENDIF
   ENDDO
   SELECT 3
   SKIP
   LOOP
ENDDO
...
Рейтинг: 0 / 0
25.08.2016, 17:34
    #39298140
alextashk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Необходимо чтобы данные одного пункта не входили в итог. Foxpro 2.6
alextashkdmr55,

Слов нет, одни эмоции - по поводу оформления программы.
Нифига непонятно. Так же непонятно, что Вам требуется.
Попробуем вывести Вашу форму в таблицу, потом Вы вычитаете что надо откуда надо
и выводите на печать.

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
CREATE CURSOR curTemp (kod C(5), NAIMR C(40), OPERWS N(5), OPERDETI N(5), UMEROPER N(5), OPERWS N(6,2))
SELECT 3
GOTO TOP
I = 1
DO WHILE .NOT. EOF()
   I = 1
   SELECT 4
   SEEK (C->KOD)
   SELECT curTemp
   APPEND BLANK
   REPLACE kod WITH C->kod, NaimR WITH D->naimr, operws WITH c->operws, operdeti WITH c->operdeti,;
         umeroper WITH c->umeroper, operws WITH ROUND((OPERWS/OBOPER)*100,2)
   SELECT 3
   DO WHILE I<120
      I = I+40
      IF SUBSTR(D->NAIMR,I,40)<>SPACE(40)
           SELECT curTemp
             APPEND BLANK
            REPLACE kod WITH SPACE(5), NaimR WITH D->naimr, operws WITH 0, operdeti WITH 0,;
         umeroper WITH 0, operws WITH 0
         SELECT 3
        LOOP
      ELSE
         EXIT
      ENDIF
   ENDDO
   SELECT 3
   SKIP
   LOOP
ENDDO
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Необходимо чтобы данные одного пункта не входили в итог. Foxpro 2.6 / 17 сообщений из 17, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]