powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Помогите пожалуйства сформой и с самим модулем
7 сообщений из 7, страница 1 из 1
Помогите пожалуйства сформой и с самим модулем
    #32616004
ElenaZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У меня в форме считаются суммы по данным из другой формы, суммы по диапазонам даты, а мне нужно то же самое только по диапазонам номеров, нужно написать типо условия, в котором говорится что если в форме TextBox будет пустым, то применяется другой TexBox типо того.
if [vagn] = 0 AND [vagk] = 0
LOCAL b, e, sv, pl, zn, cu, au, ag, pid, pr, vv
b = THISFORM.Begin.Value
e = THISFORM.End.Value
SELECT Vag_cu
SET ORDER TO P_Ident IN Vag_cu
SELECT Party_cu
CALCULATE SUM(Party_cu.sves) FOR Party_cu.date_e >= b AND Party_cu.date_e <= e TO sv
pl = 0
zn = 0
cu = 0
au = 0
ag = 0
pr = 0
vv = 0
SELECT Party_cu
SCAN FOR Party_cu.date_e >= b AND Party_cu.date_e <= e
pid = Party_cu.P_Ident
SEEK pid ORDER P_Ident IN Anal_cu
IF FOUND('Anal_cu')
pl = pl + Anal_cu.pl_ves
zn = zn + Anal_cu.zn_ves
cu = cu + Anal_cu.cu_ves
au = au + Anal_cu.au_ves
ag = ag + Round(Anal_cu.ag_ves,0)
ENDIF
SEEK pid ORDER P_Ident IN Vag_cu
DO WHILE NOT EOF('Vag_cu') AND Vag_cu.P_Ident = pid
pr = pr + Vag_cu.spr
vv = vv + 1
SKIP 1 IN Vag_cu
ENDDO
SELECT Party_cu
ENDSCAN
WITH THISFORM
.SVesS.Value = sv
.Pl_ves.Value = pl
.Zn_ves.Value = zn
.Cu_ves.Value = cu
.Au_ves.Value = au
.Ag_ves.Value = ag
.Pl_pr.Value = ROUND(100*pl/sv, 2)
.Zn_pr.Value = ROUND(100*zn/sv, 2)
.Cu_pr.Value = ROUND(100*cu/sv, 2)
.Au_g_t.Value = ROUND(au/sv, 2)
.Ag_g_t.Value = ROUND(ag/sv, 2)
.Perg.Value = pr
.Vagon.Value = vv
ENDWITH
else
LOCAL s, t, sv, pl, zn, cu, au, ag, pid, pr, vv
s = THISFORM.vagn.Value
t = THISFORM.vagk.Value
SELECT Vag_cu
SET ORDER TO P_Ident IN Vag_cu
SELECT Party_cu
CALCULATE SUM(Party_cu.sves) FOR Party_cu.P_number >= s AND Party_cu.P_number <= t TO sv
pl = 0
zn = 0
cu = 0
au = 0
ag = 0
pr = 0
vv = 0
SELECT Party_cu
SCAN FOR Party_cu.P_number >= s AND Party_cu.P_number <= t
pid = Party_cu.P_Ident
SEEK pid ORDER P_Ident IN Anal_cu
IF FOUND('Anal_cu')
pl = pl + Anal_cu.pl_ves
zn = zn + Anal_cu.zn_ves
cu = cu + Anal_cu.cu_ves
au = au + Anal_cu.au_ves
ag = ag + Round(Anal_cu.ag_ves,0)
ENDIF
SEEK pid ORDER P_Ident IN Vag_cu
DO WHILE NOT EOF('Vag_cu') AND Vag_cu.P_Ident = pid
pr = pr + Vag_cu.spr
vv = vv + 1
SKIP 1 IN Vag_cu
ENDDO
SELECT Party_cu
ENDSCAN
WITH THISFORM
.SVesS.Value = sv
.Pl_ves.Value = pl
.Zn_ves.Value = zn
.Cu_ves.Value = cu
.Au_ves.Value = au
.Ag_ves.Value = ag
.Pl_pr.Value = ROUND(100*pl/sv, 2)
.Zn_pr.Value = ROUND(100*zn/sv, 2)
.Cu_pr.Value = ROUND(100*cu/sv, 2)
.Au_g_t.Value = ROUND(au/sv, 2)
.Ag_g_t.Value = ROUND(ag/sv, 2)
.Perg.Value = pr
.Vagon.Value = vv
ENDIF
ENDWITH
Я в этой программе отметила Text Box как vagn и vagk и также диапазоны дат описываются.
Помогите пожалуйста
...
Рейтинг: 0 / 0
Помогите пожалуйства сформой и с самим модулем
    #32616094
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вопрос непонятен. Что именно ты хочешь узнать?

Как проверить на пустое значение? Для этого существует функция EMPTY()
Как получить ссылку на другую форму? Почитай здесь

http://www.foxclub.ru/kb/index.php?sid=75423&aktion=artikel&rubrik=004&id=4&lang=ru

Как написать универсальное условие на проверку либо дат, либо номеров? В принципе можно, но лучше писать 2 отдельные функции или хотя бы разделять по IF...ELSE...ENDIF
...
Рейтинг: 0 / 0
Помогите пожалуйства сформой и с самим модулем
    #32616166
ElenaZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ВладимирМВопрос непонятен. Что именно ты хочешь узнать?

Как проверить на пустое значение? Для этого существует функция EMPTY()
Как получить ссылку на другую форму? Почитай здесь

http://www.foxclub.ru/kb/index.php?sid=75423&aktion=artikel&rubrik=004&id=4&lang=ru

Как написать универсальное условие на проверку либо дат, либо номеров? В принципе можно, но лучше писать 2 отдельные функции или хотя бы разделять по IF...ELSE...ENDIF

Да я и разделяю, посмотри процедуру, там написано всё, а мне нужно такое условие:
Если TexBox например с такого числа по такое равен нулю, тогда выполняется ссылка на TextBox числа и естественно в процедуре нужно описание ссумирования значений этого диапазона...
Спасибо за ответ. Елена.
...
Рейтинг: 0 / 0
Помогите пожалуйства сформой и с самим модулем
    #32616330
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да можно оставить и так как есть. Но если очень хочется, то можно и так

Код: plaintext
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.
LOCAL sv, pl, zn, cu, au, ag, pr, vv
STORE  0  TO sv, pl, zn, cu, au, ag, pr, vv

LOCAL lcFilter
IF [vagn] =  0  AND [vagk] =  0 
	LOCAL b, e
	b = THISFORM.Begin.Value
	e = THISFORM.End.Value
	lcFilter = "Party_cu.date_e >= b AND Party_cu.date_e <= e"
ELSE
	LOCAL s, t
	s = THISFORM.vagn.Value
	t = THISFORM.vagk.Value
	lcFilter = "Party_cu.P_number >= s AND Party_cu.P_number <= t"
ENDIF

SELECT Party_cu
SCAN FOR &lcFilter
	sv = sv + Party_cu.sves
	IF SEEK(Party_cu.P_Ident,'P_Ident','Anal_cu')
		pl = pl + Anal_cu.pl_ves
		zn = zn + Anal_cu.zn_ves
		cu = cu + Anal_cu.cu_ves
		au = au + Anal_cu.au_ves
		ag = ag + Round(Anal_cu.ag_ves, 0 )
	ENDIF
	IF SEEK(Party_cu.P_Ident,'P_Ident','Vag_cu')
		SELECT Vag_cu
		SCAN WHILE Vag_cu.P_Ident = Party_cu.P_Ident
			pr = pr + Vag_cu.spr
			vv = vv +  1 
		ENDSCAN
	ENDIF
ENDSCAN

WITH THISFORM
	.SVesS.Value = sv
	.Pl_ves.Value = pl
	.Zn_ves.Value = zn
	.Cu_ves.Value = cu
	.Au_ves.Value = au
	.Ag_ves.Value = ag
	.Pl_pr.Value = ROUND( 100 *pl/sv,  2 )
	.Zn_pr.Value = ROUND( 100 *zn/sv,  2 )
	.Cu_pr.Value = ROUND( 100 *cu/sv,  2 )
	.Au_g_t.Value = ROUND(au/sv,  2 )
	.Ag_g_t.Value = ROUND(ag/sv,  2 )
	.Perg.Value = pr
	.Vagon.Value = vv
ENDWITH

Здесь весь фокус в макроподстановке &lcFilter

Или я опять не о том?
...
Рейтинг: 0 / 0
Помогите пожалуйства сформой и с самим модулем
    #32617919
ElenaZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
[quot ВладимирМ]Да можно оставить и так как есть. Но если очень хочется, то можно и так

Код: plaintext
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.
LOCAL sv, pl, zn, cu, au, ag, pr, vv
STORE  0  TO sv, pl, zn, cu, au, ag, pr, vv

LOCAL lcFilter
IF [vagn] =  0  AND [vagk] =  0 
	LOCAL b, e
	b = THISFORM.Begin.Value
	e = THISFORM.End.Value
	lcFilter = "Party_cu.date_e >= b AND Party_cu.date_e <= e"
ELSE
	LOCAL s, t
	s = THISFORM.vagn.Value
	t = THISFORM.vagk.Value
	lcFilter = "Party_cu.P_number >= s AND Party_cu.P_number <= t"
ENDIF

SELECT Party_cu
SCAN FOR &lcFilter
	sv = sv + Party_cu.sves
	IF SEEK(Party_cu.P_Ident,'P_Ident','Anal_cu')
		pl = pl + Anal_cu.pl_ves
		zn = zn + Anal_cu.zn_ves
		cu = cu + Anal_cu.cu_ves
		au = au + Anal_cu.au_ves
		ag = ag + Round(Anal_cu.ag_ves, 0 )
	ENDIF
	IF SEEK(Party_cu.P_Ident,'P_Ident','Vag_cu')
		SELECT Vag_cu
		SCAN WHILE Vag_cu.P_Ident = Party_cu.P_Ident
			pr = pr + Vag_cu.spr
			vv = vv +  1 
		ENDSCAN
	ENDIF
ENDSCAN

WITH THISFORM
	.SVesS.Value = sv
	.Pl_ves.Value = pl
	.Zn_ves.Value = zn
	.Cu_ves.Value = cu
	.Au_ves.Value = au
	.Ag_ves.Value = ag
	.Pl_pr.Value = ROUND( 100 *pl/sv,  2 )
	.Zn_pr.Value = ROUND( 100 *zn/sv,  2 )
	.Cu_pr.Value = ROUND( 100 *cu/sv,  2 )
	.Au_g_t.Value = ROUND(au/sv,  2 )
	.Ag_g_t.Value = ROUND(ag/sv,  2 )
	.Perg.Value = pr
	.Vagon.Value = vv
ENDWITH

Здесь весь фокус в макроподстановке &lcFilter

Или я опять не о том?[/quo


Вадим, я по - другому решила сделать, я буду вводить данные только в одно поле без всякого условия и теперь мне нужно в Prorerties перевести поле Character в Numeric как это можно сделать?
...
Рейтинг: 0 / 0
Помогите пожалуйства сформой и с самим модулем
    #32618043
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ElenaZя буду вводить данные только в одно поле без всякого условия и теперь мне нужно в Prorerties перевести поле Character в Numeric как это можно сделать?

Опять Вы как-то невнятно формулируете задачу.

У Вас на форме есть TextBox. Вы вводите в него некую информацию. Далее Вы хотите проанализировать какого типа информация была введена в этот TextBox?

В этом случае необходимо чтобы в TextBox вводилась только символьная строка. Поскольку только в этом случае обеспечивается универсальность вводимой информации. Для этого достаточно просто ничего не указывать в свойстве ControlSource этого TextBox.

По окончании ввода делаете попытку конвертировать введенную строку в нужный тип данных.

DO CASE
CASE EMPTY(CTOD(ThisForm.TextBox.Value)) = .T.
* введена дата
CASE EMPTY(VAL(ThisForm.TextBox.Value)) = .T.
* возможно, введено число
ENDCASE

Однако, такая конвертация не гарантирует корректного определения того факта, что введен именно нужный тип данных, но в символьном виде.

Например, если введена строка "01\02\03", то функция VAL() вернет значение 1. Вроде бы число получилось, но скорее всего, вводили не число, а дату. Так что, тут надо быть осторожным.

PS:
Если хотите указать тип данных для TextBox, когда не указано свойство ControlSource, то введите пустое значение нужного типа в свойство Value.

Например:

TextBox.Value=0 - тип Integer
TextBox.Value=0.00 - тип Numeric с дробной частью
TextBox.Value={} - тип Date
TextBox.Value=DTOT({}) - тип DateTime

Если в Value ничего не указано, то данные будут символьного типа.
...
Рейтинг: 0 / 0
Помогите пожалуйства сформой и с самим модулем
    #32618044
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Опечатка.

Конечно же надо проверять EMPTY()=.F.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Помогите пожалуйства сформой и с самим модулем
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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