powered by simpleCommunicator - 2.0.41     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Необходимо чтобы данные одного пункта не входили в итог. Foxpro 2.6
17 сообщений из 17, страница 1 из 1
Необходимо чтобы данные одного пункта не входили в итог. Foxpro 2.6
    #39294444
dmr55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имеется 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
Необходимо чтобы данные одного пункта не входили в итог. Foxpro 2.6
    #39294649
alextashk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лень ковырять часть кода.
Поэтому предположив, что сумма - 1 строка, а исключаемая строка - 20, меняем итоговую таблицу table1:

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


Лень ковырять часть кода.
Поэтому предположив, что сумма - 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
Необходимо чтобы данные одного пункта не входили в итог. Foxpro 2.6
    #39294744
dmr55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
куда конкретнее нужно вставить
...
Рейтинг: 0 / 0
Необходимо чтобы данные одного пункта не входили в итог. Foxpro 2.6
    #39294851
alextashk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Перед вызовом на печать.

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

Код: 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
Необходимо чтобы данные одного пункта не входили в итог. Foxpro 2.6
    #39295057
alextashk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dmr55,

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

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

Ткните пальцем, где в коде обговаривается 20-й пункт?
...
Рейтинг: 0 / 0
Необходимо чтобы данные одного пункта не входили в итог. Foxpro 2.6
    #39296124
dmr55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
*
* Џ“ЌЉ’ 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
Необходимо чтобы данные одного пункта не входили в итог. Foxpro 2.6
    #39296126
dmr55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Конечно его можно удалить, но он нужен, он не нужен только в итоговом пункте - 1
...
Рейтинг: 0 / 0
Необходимо чтобы данные одного пункта не входили в итог. Foxpro 2.6
    #39296285
alextashk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dmr55,

DO Chet - листинг процедуры
ну и напоследок - наименование суммируемой переменной
...
Рейтинг: 0 / 0
Необходимо чтобы данные одного пункта не входили в итог. Foxpro 2.6
    #39296617
dmr55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
может вам все таки скинуть на емайл данный файл
...
Рейтинг: 0 / 0
Необходимо чтобы данные одного пункта не входили в итог. Foxpro 2.6
    #39296752
alextashk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Необходимо чтобы данные одного пункта не входили в итог. Foxpro 2.6
    #39296757
dmr55
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
отправил
...
Рейтинг: 0 / 0
Необходимо чтобы данные одного пункта не входили в итог. Foxpro 2.6
    #39298092
alextashk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Необходимо чтобы данные одного пункта не входили в итог. Foxpro 2.6
    #39298140
alextashk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
17 сообщений из 17, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Необходимо чтобы данные одного пункта не входили в итог. Foxpro 2.6
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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