powered by simpleCommunicator - 2.0.41     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Нужна помощь Collections
25 сообщений из 95, страница 1 из 4
Нужна помощь Collections
    #39332562
rikitiki
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Начал только разбираться с коллекциями
понравилась одна статья
вызов типа
Tables(’orders’).Fields(’order_date’).Caption

За код не ругайтесь (только тест)
Если получится буду потом причесывать
Задача:
Есть Нормативные документы (НД), которые обязательны к применению (R1, R2 , ...., R107)
у каждого НД своя сфера (только легковые или только прицепы) + требования на уровне министерства (разные пункты в зависимости от категории ТС, двигателя, новые или б/у)

занес все это в таблицу (прилагается)

создаю класс условий
Код: 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.
DEFINE  CLASS  Vehicle AS COLLECTION

	PROCEDURE INIT
		LOCAL lcVehicle, loVehicle, lcCategory, loCategory,;
			lcFuel, loFuel, lcRegulation, loRegulation
		USE Vehicle_Regulations
		*****************
		SET FILTER TO cRecType = 'S'
		SCAN
			lcVehicle = TRIM(Vehicle_Regulations.cObjectNam)
			loVehicle = CREATEOBJECT('Vehicl')
			loVehicle.cName = lcVehicle
			THIS.ADD(loVehicle, lcVehicle)
		ENDSCAN
		*****************
		SET FILTER TO cRecType = 'C'
		SCAN
			lcCategory = TRIM(Vehicle_Regulations.cObjectNam)
			loCategory = CREATEOBJECT('Categor')
			loCategory.cName = lcCategory
			i = 1
			FOR EACH loVehicle IN THIS
				DO CASE
					CASE '!'$GETWORDNUM(Vehicle_Regulations.cCondition, 1, '.')
						IF THIS.GETKEY(i)$GETWORDNUM(Vehicle_Regulations.cCondition, 1, '.')
						ELSE
							 loVehicle.Category.ADD(loCategory, lcCategory)
						ENDIF 
					CASE '*'$GETWORDNUM(Vehicle_Regulations.cCondition, 1, '.')
						loVehicle.Category.ADD(loCategory, lcCategory)
					OTHERWISE
						IF THIS.GETKEY(i)$GETWORDNUM(Vehicle_Regulations.cCondition, 1, '.')
							 loVehicle.Category.ADD(loCategory, lcCategory)
						ENDIF
				ENDCASE
				i = i + 1
			ENDFOR
		ENDSCAN
		****************
		SET FILTER TO cRecType = 'F'
		SCAN
			lcFuel = TRIM(Vehicle_Regulations.cObjectNam)
			loFuel = CREATEOBJECT('Fue')
			loFuel.cName = lcFuel
			i = 1
			FOR EACH loVehicle IN THIS
				DO CASE
				CASE '!'$GETWORDNUM(Vehicle_Regulations.cCondition, 1, '.')
					IF THIS.GETKEY(i)$GETWORDNUM(Vehicle_Regulations.cCondition, 1, '.')
					ELSE
						i1 = 1
						FOR EACH loCategory IN loVehicle.Category
							DO CASE
							CASE '!'$GETWORDNUM(Vehicle_Regulations.cCondition, 2, '.')
								IF loVehicle.Category.GETKEY(i1)$GETWORDNUM(Vehicle_Regulations.cCondition, 1, '.')
								ELSE
									loCategory.Fuel.ADD(loFuel, lcFuel)
								ENDIF
							CASE '*'$GETWORDNUM(Vehicle_Regulations.cCondition, 2, '.')
								loCategory.Fuel.ADD(loFuel, lcFuel)
							OTHERWISE
								IF loVehicle.Category.GETKEY(i1)$GETWORDNUM(Vehicle_Regulations.cCondition, 2, '.')
									loCategory.Fuel.ADD(loFuel, lcFuel)
								ENDIF
							ENDCASE
							i1 = i1 + 1
						ENDFOR
					ENDIF
				CASE '*'$GETWORDNUM(Vehicle_Regulations.cCondition, 1, '.')
					i1 = 1
					rrrrr = This.GetKey(i)
					zzzzz = loVehicle.Category.Count
					yyyyy = loVehicle.Category
					FOR EACH loCategory IN yyyyy
						DO CASE
						CASE '!'$GETWORDNUM(Vehicle_Regulations.cCondition, 2, '.')
							IF yyyyy.GETKEY(i1)$GETWORDNUM(Vehicle_Regulations.cCondition, 2, '.')
							ELSE
								loCategory.Fuel.ADD(loFuel, lcFuel)
							ENDIF
						CASE '*'$GETWORDNUM(Vehicle_Regulations.cCondition, 2, '.')
							loCategory.Fuel.ADD(loFuel, lcFuel)
						OTHERWISE
							IF loVehicle.Category.GETKEY(i1)$GETWORDNUM(Vehicle_Regulations.cCondition, 2, '.')
								loCategory.Fuel.ADD(loFuel, lcFuel)
							ENDIF
						ENDCASE
						i1 = i1 + 1
					ENDFOR
				OTHERWISE
					i1 = 1
					FOR EACH loCategory IN loVehicle.Category
						DO CASE
						CASE '!'$GETWORDNUM(Vehicle_Regulations.cCondition, 2, '.')
							IF loVehicle.Category.GETKEY(i1)$GETWORDNUM(Vehicle_Regulations.cCondition, 1, '.')
							ELSE
								loCategory.Fuel.ADD(loFuel, lcFuel)
							ENDIF
						CASE '*'$GETWORDNUM(Vehicle_Regulations.cCondition, 2, '.')
							loCategory.Fuel.ADD(loFuel, lcFuel)
						OTHERWISE
							IF loVehicle.Category.GETKEY(i1)$GETWORDNUM(Vehicle_Regulations.cCondition, 2, '.')
								loCategory.Fuel.ADD(loFuel, lcFuel)
							ENDIF
						ENDCASE
						i1 = i1 + 1
					ENDFOR
				ENDCASE

				i = i + 1
			ENDFOR
		ENDSCAN
		SET FILTER TO
		USE IN Vehicle_Regulations
		RELEASE Vehicle
	ENDPROC

	PROCEDURE AddCategory

	ENDPROC
ENDDEFINE

DEFINE CLASS Vehicl AS MyCUSTOM
	ADD OBJECT Category AS COLLECTION
ENDDEFINE

DEFINE CLASS Categor AS MyCUSTOM
	ADD OBJECT Fuel AS COLLECTION
ENDDEFINE
DEFINE CLASS Fue AS MyCUSTOM
	ADD OBJECT Regulation AS COLLECTION
ENDDEFINE

DEFINE CLASS MyCUSTOM AS CUSTOM
	
	HIDDEN BaseClass, Class, ClassLibrary,;
		   Comment, Height, HelpContextID,;
		   Left, Picture, Tag, Top,;
		   Parent, ParentClass,;
		   WhatsThisHelpID, Width
	cName = ''
	cNumberRegulatoryDocument = ''
	cNameRegulatoryDocument = ''
	cRequirem = ''
ENDDEFINE



и на этапе добавления топлива (дизель/бензин) ругается, что такое свойство уже есть
не могу понять почему? Наверное задал не ту коллекцию (FOR EACH loCategory IN loVehicle.Category)
до этого все работает, и вызывается
Код: sql
1.
2.
Vehicle = NEWOBJECT('Vehicle','regulationsrequirem.prg')
ggg = Vehicle('New').Category('M2')


подскажите, что не так?
и еще, месяц назад видел решение для просмотра коллекций в Дебагере
сейчас не могу найти, может у кого есть ссылочка?
...
Рейтинг: 0 / 0
Нужна помощь Collections
    #39332628
rikitiki
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
прошу прощения
ругается не
rikitiki(FOR EACH loCategory IN loVehicle.Category)

а
FOR EACH loCategory IN loVehicle.Category
...
Рейтинг: 0 / 0
Нужна помощь Collections
    #39335076
rikitiki
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Немного разобрался
Вот код, кому интересно (может кто посоветует, как сделать более эффективным?))) )
файл regulationsrequirem.prg
Код: 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.
DEFINE  CLASS  oVehicle AS COLLECTION

	PROCEDURE INIT
		LOCAL lcObject, loObject

		USE Vehicle_Regulations
		SET FILTER TO nRecType = 0
		SCAN
			lcObject = TRIM(Vehicle_Regulations.cObjectNam)
			loObject = CREATEOBJECT('Vehicl', lcObject, lcObject, 1)
			THIS.ADD(loObject, lcObject)
		ENDSCAN
		SET FILTER TO
		USE IN Vehicle_Regulations
		CLEAR CLASS oVehicle
	ENDPROC

ENDDEFINE

DEFINE CLASS Vehicl AS MyCUSTOM

	PROCEDURE INIT(lcName, lcTree, lnTree)
		LOCAL lcOldFilter, lnOldRecno, lcObject,;
			  loObject, lcTreeName, lcCollectionName,;
			  lcAddCollectionName

		DO CASE 
			CASE lnTree = 1
				THIS.ADDOBJECT('Category', 'COLLECTION')
				lcCollectionName = 'Category'
			CASE lnTree = 2
				THIS.ADDOBJECT('Fuel', 'COLLECTION')
				lcCollectionName = 'Fuel'
			CASE lnTree = 3
				THIS.ADDOBJECT('Regulation', 'COLLECTION')
				lcCollectionName = 'Regulation'
		ENDCASE 
		THIS.cName = lcName
		THIS.cTree = lcTree
		lcOldFilter = FILTER()
		lnOldRecno = RECNO()
		SET FILTER TO nRecType = lnTree
		IF !EOF()
			SCAN
				lcObject = TRIM(Vehicle_Regulations.cObjectNam)
				lcTreeName = lcTree + '.' + lcObject
				loObject = CREATEOBJECT('Vehicl', lcObject, lcTreeName, lnTree + 1)
				loObject.cName = lcObject
				loObject.cTree = lcTreeName
				loObject.cNumberRegulatoryDocument = lcObject
				loObject.cNameRegulatoryDocument = Vehicle_Regulations.cHeadLine
*				loObject.cRequirem = Vehicle_Regulations.cRequirem
				IF !EMPTY(ALLTRIM(Vehicle_Regulations.cRequirem))
					loObject.cRequirem = This.RequiremSelect(Vehicle_Regulations.cRequirem, lcTree)
				ELSE 
					loObject.cRequirem = ''
				ENDIF 
				lcAddCollectionName = 'THIS.' + lcCollectionName + '.ADD(loObject, lcObject)'

				FOR i = GETWORDCOUNT(THIS.cTree, '.') TO 1 STEP -1
					DO CASE
						CASE '!'$GETWORDNUM(Vehicle_Regulations.cCondition, i, '.')
							IF GETWORDNUM(THIS.cTree, i, '.')$GETWORDNUM(Vehicle_Regulations.cCondition, i, '.')
								loObject.lPresent = .F.
								EXIT
							ELSE
								LOOP
							ENDIF
						CASE '*'$GETWORDNUM(Vehicle_Regulations.cCondition, i, '.')
							LOOP
						OTHERWISE
							IF GETWORDNUM(THIS.cTree, i, '.')$GETWORDNUM(Vehicle_Regulations.cCondition, i, '.')
								LOOP
							ELSE
								loObject.lPresent = .F.
								LOOP
							ENDIF
					ENDCASE
				ENDFOR
				IF loObject.lPresent
					&lcAddCollectionName
				ENDIF
			ENDSCAN
		ENDIF
		SET FILTER TO &lcOldFilter
		GO lnOldRecno
	ENDPROC 
	
	FUNCTION RequiremSelect(lcRequirem, lcTree)
		LOCAL lcCondition1, lcCondition2, lcCondition,;
			  lcRequiremSelect, llPresent,;
			  lnRequirem, lnCondition
***** ïîäóìàòü		
		IF '{'$lcRequirem
			FOR lnRequirem = 1 TO GETWORDCOUNT(lcRequirem, '{')
				lcCondition = GETWORDNUM(lcRequirem, lnRequirem, '}')
				lcCondition = GETWORDNUM(lcCondition, GETWORDCOUNT(lcCondition, '{'), '{')
				lcRequiremSelect = 	GETWORDNUM(lcCondition, 2, ':')
				lcCondition = GETWORDNUM(lcCondition, 1, ':')
				llPresent = .T.
				FOR lnCondition = GETWORDCOUNT(lcCondition, '.') TO 1 STEP -1
					
					DO CASE
						CASE '!'$GETWORDNUM(lcCondition, lnCondition, '.')
							IF GETWORDNUM(lcTree, lnCondition, '.')$GETWORDNUM(lcCondition, lnCondition, '.')
								llPresent = .F.
								EXIT
							ENDIF
						CASE '*'$GETWORDNUM(lcCondition, lnCondition, '.')
							LOOP
						OTHERWISE
							IF GETWORDNUM(lcTree, lnCondition, '.')$GETWORDNUM(lcCondition, lnCondition, '.')
								LOOP 
							ELSE
								llPresent = .F.
								EXIT
							ENDIF
					ENDCASE
				ENDFOR
				IF llPresent
					RETURN lcRequiremSelect
				ENDIF
			ENDFOR 
				RETURN 'Îøèáêà'
		ELSE 
			RETURN lcRequirem
		ENDIF 
	ENDFUNC 

ENDDEFINE

DEFINE CLASS MyCUSTOM AS CUSTOM
	
	HIDDEN Class, ClassLibrary,;
		   Comment, Height, HelpContextID,;
		   Left, Picture, Tag, Top,;
		   Parent, ParentClass,;
		   WhatsThisHelpID, Width
	cName = ''
	cTree = ''
	cNumberRegulatoryDocument = ''
	cNameRegulatoryDocument = ''
	cRequirem = ''
	lPresent = .T.
ENDDEFINE



далее вызов

Код: sql
1.
2.
3.
4.
5.
6.
7.
oND = Vehicle('New').Category('M1').Fuel('Disel').Regulation
? oND.Count
? Vehicle('New').Category('M1').Fuel('Disel').cTree
FOR EACH loND IN oND
	? loND.cNumberRegulatoryDocument + " '" + loND.cNameRegulatoryDocument + "' "
	? loND.cRequirem
ENDFOR



но возникает вопрос
чисто из интереса
возможно ли regulationsrequirem.prg засунуть в DLL если у меня там только объявление класса?
...
Рейтинг: 0 / 0
Нужна помощь Collections
    #39336135
asdor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rikitiki,
А можно подробнее цель изложить.
Если это просто изучение коллекции, то ОК.
Если для работы, то сильно смущает многое в коде.
Особенно работа с конкретной таблицей. Скан в ините.

По коду, о логике ваще не смог догадаться)
Но.. .есть предположение, что что-то не то)
...
Рейтинг: 0 / 0
Нужна помощь Collections
    #39336791
rikitiki
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
asdor,
Суть такая:
Есть орган по сертификации Дорожных транспортных средств (ОС ДТС)
В страну завозят авто, ОС ДТС должен определить нормативные документы (НД) на соответствие которым нужно проверить ДТС, лаборатория проводит испытания и если ДТС соответствует ОС ДТС выдает сертификат, на основании которого регистрируют ДТС в ГАИ.
НД - это ГОСТы, ДСТУ, Правила ЕЕК ООН, ОСТы (около 200), в Области применения этих НД описано к каким конкретно ДТС они относятся (только легковые, только мопеды, дизеля или прицепы определенной категории)
Категорий ДТС - 17: M1, M2, M3, N1, N2, N3, O1, O2, O3, O4, L1, L2, ..., L7
+ Министерство пишет различные приказы (за год может от 2 до бесконечности) в которых может прописать, что испытывать нужно не на весь конкретный НД, а только несколько пунктов (которые тоже зависят от ряда условий) или испытать мопеды по НД мотоциклов (потому как НД на мопеды нет), или новые авто может разделить на дорогие и не дорогие (просто Ужас!!!!!)
Условия ((сертификация типа, новый авто, б/у, переоборудованный); (категория); (топливо:бензин, дизель, газ(3 вида), алкоголь, электро); (приказы Министерства))
Неизменные условия только (категория), остальные условия могут меняться
Эксперт определяет эти все условия и подбирает НД.
У меня есть база ,где эксперт выбирает только вариант и версию ДТС и автоматически формируются первых 3 условия, остается только Министерство.
Раньше делал так: была таблица первое поле - обозначение НД, остальные поля название условий (где прописывал пункты)
Но так как условия менялись быстро, достало добавлять новые поля в таблицу.
Решил сделать загрузку всех условий при запуске программы
Код: sql
1.
oND = Vehicle('New').Category('M1').Fuel('Disel').Regulation


На форме есть EditBox (НД), туда записываю
Код: sql
1.
2.
3.
4.
FOR EACH loND IN oND
	? loND.cNumberRegulatoryDocument + " '" + loND.cNameRegulatoryDocument + "' "
	? loND.cRequirem
ENDFOR


меняя лишь 'New', 'M1', 'Disel' - наглядно
Код: sql
1.
oND = Vehicle(This.Txt1.Val).Category(This.Cmb1.Val).Fuel(This.Cmb2.Val).Regulation


Эксперт может редактировать EditBox (НД).
Да забыл сказать, эксперт может не проводить испытания по определенным НД, если протокол на это, конкретное НД ему представил заявитель.
вот такая вот "лапша"
Если есть идеи лучше готов выслушать, так как уже немного достало это.
...
Рейтинг: 0 / 0
Нужна помощь Collections
    #39337108
asdor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rikitiki,
Описана некая специфика.
В которую надо въезжать.
Но рисуете некий класс...
А класс, ИМХО - это некий уровень абстракции.
Если все вполне конкретно, то можно и без класса, обойтись просто процедурами.

Может с хранением что то не то.

Попробуйте может нарисовать.
Вот что вроде понял.
Есть категории, у каждой категории, свой набор правил.

Видимо выбрав определенную категорию, или что то не то...
Путано объясняете.
Забудьте пока про министерства.
И попробуйте объяснить терминами БД. Как информация соотносится,
Запутался где категории, где НР. Толи это одно и тоже
...
Рейтинг: 0 / 0
Нужна помощь Collections
    #39337264
asdor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне кажется вам не класс нужен, а правильная схема хранения.
Из сущностей. Что понял. У вас есть набор НД.
Есть список ДТС- он же категория?
(придите к одной терминологии)
Очевидно они связаны. Явно много ко многим.
Так же шла речь о каких то условиях, экспертах... и пр.
Так же, явно много лишних слов (какая разница, кто меняет, министерство, главк, или просто юзер)

В общем, полагаю, вам стоит четко описать взаимоотношения между сущностями. Возможно и ни каких классов не нгужно будет, а надо просто уложить все в разумную схему хранения.

Попробуйте объяснить все техническим языком.
В процессе объяснения, самому может что от прояснится)
...
Рейтинг: 0 / 0
Нужна помощь Collections
    #39337563
rikitiki
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
asdor,

Примерно так (картинку прикрепил),
но я так понимаю, нужно еще промежуточные таблицы
например cat_fuel, cat_nd, и т.д.

попробую сделать и отпишусь, что получилось
...
Рейтинг: 0 / 0
Нужна помощь Collections
    #39337695
asdor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rikitiki,
Не забывайте о бритве Оккама)))

Рисунок хорошо. Но он вряд ли что скажет, без понимания сущностей, и их связей.
Попробуйте написать пояснения.
...
Рейтинг: 0 / 0
Нужна помощь Collections
    #39338505
rikitiki
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
asdor,
Вот, что у меня получилось
Сущность заявка (номер заявки, дата заявки, код авто , ( код нормативка ?), …)
Сущность авто ( код авто , марка, тип, вариант, версия, код категории , код топлива , масса, код состояния авто , …)
Сущность категория ( код категори и, обозначение категории, мин. масса, мах. масса, мин. кол-во мест, мах. кол-во мест)
Сущность топливо ( код топлива , название топлива)
Сущность состояние авто ( код состояния авто , обозначение состояния авто)
Сущность нормативка ( код нормативка , код НД , код пункт НД )
Сущность НД ( код НД , обозначение НД, название НД)
Сущность Пункт НД ( код пункт НД , название пункта)

Между таблицами НД и Пункт НД связь М:М поэтому ввел таблицу Нормативка (как ее привязать к заявке?)

Связь между таблицей Заявка и Нормативка должна быть 1:М

Между таблицами НД и Категория, НД и Топливо, НД и Состояние авто связь М:М, опять вводить промежуточные таблицы?

такие же дела обстоят с таблицей Пункт НД

может добавить в таблицу нормативка ( код категории , код топлива и код состояния )?

у меня в голове уже каша, топчусь на месте, но выхода не вижу

буду очень рад помощи
...
Рейтинг: 0 / 0
Нужна помощь Collections
    #39338579
asdor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rikitiki,
Информации много... но "для размышления" ее нет)
Вы предлагаете какое то свое видение чего то.
А суть задачи... кроме вас никому не ясна.

Давайте так попробуем.
Вы упоминали эксперта. Это для него ПО?
Бум звать его юзер)

Далее... что ему надо?
С чего он начинает?
К нему приезжает авто, и он по нему что то ищет, или наоборот.?

Опишите (вкратце) бизнес процесс

При отношении М:М без третьей таблицы никак))) Но это вовсе не страшно. (особливо, если решите с однозначностью названий)
...
Рейтинг: 0 / 0
Нужна помощь Collections
    #39338757
Rikitiki
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
asdor,

Приезжает авто. Експерт
1. составляет договор с владельцем.
2. регистрирует заявку.
3. Определяет состояние авто по заявке, свидетельству регистрации, таможенной декларации (новое, б/у, переоборудованное, незавершенное)
4. В зависимости от п.3 определяет характеристики авто: по свидетельству о регистрации, табличках на авто, одобрению типа, заявке (производитель, масса, вид топлива, кол-во сидений, марка, тип (легково, грузовой,прицеп,...) еще около 150 параметров)
5. В зависимости от массы, кол-ва сидений, типа авто, скорости, кол-ва колес, наличия двигателя, типа кузова, ... определяет категорию (определения категорий расписано в стандарте)
6. Выдает решение для лаборатории, где указывает нормативные документы на соотвествие которым нужно провести испытания (НД -зависят от категории, вида топлива, состояния авто + правил по сертификации)
7.по результатам испытаний выдает заключение (соответствует/не соответствует)
8 выдает сертификат в котором указывает (заявителя, авто с его хар-ками, нд, номера протоколов)

Например НД (R58) относиться только к категории N2,N3,O2,O3,O4, но в зависимости от состояния авто на новые нужно испытывать на все пункты стандарта, а для б/у и переоборудованных только пункты Х.1-Х.12 и Раздел ХХ. Это нужно отобразить в решении.
Есть НД (R67) которое распространяеться только на газовые авто или только на дизеля (R24) (также разные пункты для разных состояний авто и категорий)
...
Рейтинг: 0 / 0
Нужна помощь Collections
    #39338807
Vik_Fix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Заявка на сертификацию
ID идентификатор заявки
ID_SER
и т.д.

Вид сертификации
ID_SER
Name новый авто, б/у, переоборудованный

Тип топлива
ID_GAZ
Name бензин, дизель, газ(3 вида), алкоголь, электро

Вид ТС
ID_TS
name легковые, мопеды, дизеля или прицепы определенной категории

Нормативные документы (DOC)
ID_DOC
Name Наименование или тип НД ( ГОСТы, ДСТУ, Правила ЕЕК ООН, ОСТы)
Nom Номер документа
Date Дата документа


Дополнительная таблица для DOC отношение DOC к DocP 1:M
ID_DocP
ID_DOC Идентификатор нормативного документа
ID_TS Идентификатор ТС (на какой вид транспорта распространяется его действие)
ID_GAZ
Nom_PP Номер пункта НД по данному ТС (к примеру)

rikitiki вот Вам примерная структура (уж насколько понял из Вашего объяснения) я бы сделал примерно так.
...
Рейтинг: 0 / 0
Нужна помощь Collections
    #39338851
Vik_Fix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Rikitikiasdor,

5. В зависимости от массы, кол-ва сидений, типа авто, скорости, кол-ва колес, наличия двигателя, типа кузова, ... определяет

Думается мне..., лучше создать справочник Авто , к примеру ВАЗ 2108, ВАЗ 1118, нисан **** и т.д. с их характеристиками (тип ТС, количество мостов, колес, тип двигателя и т.д.). В дальнейшем нужно будет только выбрать авто из справочника, указать его состояние.
...
Рейтинг: 0 / 0
Нужна помощь Collections
    #39338861
Rikitiki
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Забыл написать.
В решении несколько НД.
Например:R13;R48(только количество и цвет);R43(п.п. 1.3-1,6; 2.1);R49
...
Рейтинг: 0 / 0
Нужна помощь Collections
    #39338891
Rikitiki
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Vik_FixRikitikiasdor,

5. В зависимости от массы, кол-ва сидений, типа авто, скорости, кол-ва колес, наличия двигателя, типа кузова, ... определяет

Думается мне..., лучше создать справочник Авто , к примеру ВАЗ 2108, ВАЗ 1118, нисан **** и т.д. с их характеристиками (тип ТС, количество мостов, колес, тип двигателя и т.д.). В дальнейшем нужно будет только выбрать авто из справочника, указать его состояние.
Так и есть,
И работает,
Проблема с НД, раньше прописывал жестко правила к конкретным "авто" в процедуре. Выходили изменения и я переписывал процедуры. Достало.
+ попадались уникальные авто- опять переписывал. Захотел создать нечто обобщенное поэтому придумал класс на основе коллекций и 1таблицы условий, чтобы автоматом формировалось все возможные варианты НД для каждого авто.
Проблемка- когда НД десять терпимо, когда 150 злит, когда будет 300, меня пошлют. (имею ввиду время формирования класса)
...
Рейтинг: 0 / 0
Нужна помощь Collections
    #39338971
asdor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот это оказалось самым инофрмативным.
RikitikiТак и есть,
И работает,
Проблема с НД, раньше прописывал жестко правила к конкретным "авто" в процедуре. Выходили изменения и я переписывал процедуры. Достало.
+ попадались уникальные авто- опять переписывал. Захотел создать нечто обобщенное поэтому придумал класс на основе коллекций и 1таблицы условий, чтобы автоматом формировалось все возможные варианты НД для каждого авто.
Проблемка- когда НД десять терпимо, когда 150 злит, когда будет 300, меня пошлют. (имею ввиду время формирования класса)

Вот поверьте, ни при чем тут класс!
Здесь нужно правильную схему БД создать, и не будет проблем.
Итак есть авто и НД
К 1 авто, приписано некое количество НД
В случае изменения, некоторые связи пропадают, новые возникают.
Ясно что связь М:М
Так?
Ясно, что при появлении нового авто, надо все прописать (а можно на клиенте копию сделать с близкого, и ее отредактировать)
Как бы кажется все просто.
Или что то не учли пока?
...
Рейтинг: 0 / 0
Нужна помощь Collections
    #39338978
Vik_Fix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
RikitikiПроблема с НД, раньше прописывал жестко правила к конкретным "авто" в процедуре. Выходили изменения и я переписывал процедуры. Достало.

Вы пропустили первое моё сообщение, обратите внимание на структуру таблиц Doc и DocP. В таблице Doc описываются основные данные о НД (номер, дата, тип, наименование и т.д.), в таблице DocP описываются пункты НД предъявляемые к ТС с определенными характеристиками, Отношение Doc к DocP один ко многим. В результате получаем привязку не к модели автомобиля, а к его характеристикам.
...
Рейтинг: 0 / 0
Нужна помощь Collections
    #39338987
Rikitiki
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Vik_FixRikitikiПроблема с НД, раньше прописывал жестко правила к конкретным "авто" в процедуре. Выходили изменения и я переписывал процедуры. Достало.

Вы пропустили первое моё сообщение, обратите внимание на структуру таблиц Doc и DocP. В таблице Doc описываются основные данные о НД (номер, дата, тип, наименование и т.д.), в таблице DocP описываются пункты НД предъявляемые к ТС с определенными характеристиками, Отношение Doc к DocP один ко многим. В результате получаем привязку не к модели автомобиля, а к его характеристикам.
Я не пропустил, но пока за рулем и не могу попробовать.
...
Рейтинг: 0 / 0
Нужна помощь Collections
    #39339000
Vik_Fix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
RikitikiЯ не пропустил, но пока за рулем и не могу попробовать.
В общем получается, выбрав авто из справочника, мы уже знаем его характеристики, данные характеристики в дальнейшем используем в SQL запросе к таблице DocP и Doc, можно еще добавить поле дата окончания действия пункта НД (на случай его отмены или изменения, дабы сохранить историю). Но это все в общих чертах.
...
Рейтинг: 0 / 0
Нужна помощь Collections
    #39339001
asdor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Судя из вашего описания.
Интерес представляет начиная с п.4
В п.4 и п.5 Юзер Каким то образом (опыт!!!))) ), определят хар-ки авто.
Полагаю, возможно вместо таблицы авто, можно использовать какую то иную сущность, которая собирает в себе эти хар-ки.
Из вашего описания, следует, что у этой таблицы, неограниченное кол-во полей.
В это наверное уперлись? Что здесь менять надо, и это достает.

Можно хранить данные иначе.
Есть табл. с характеристиками - features.
Для начала всего 2 поля id,Name

Есть таблица которая должна отображать сущность из п.4 и п.5 - categ
2 поля id,Name
Теперь между ними создаем связь M:M -LinkFeatures
В результате на любую категорию, можете назначить, произвольное кол-во хар-ик.

К categ привязаны НД (или пункты НД непонятно) Видимо так же M:M

Т.е. БП выглядит так. Определившись с хар-ками, выбрали строку катег, а по ней, подтягивается набор НД.
Не все угадал?)
...
Рейтинг: 0 / 0
Нужна помощь Collections
    #39339012
Vik_Fix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
asdorВ п.4 и п.5 Юзер Каким то образом (опыт!!!))) ), определят хар-ки авто.

Юзер - Ванга), он не правильно выразился, характеристики указаны в заявлении и приложенных к заявлению дополнительных документах.
...
Рейтинг: 0 / 0
Нужна помощь Collections
    #39339014
Rikitiki
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
asdorВот это оказалось самым инофрмативным.
RikitikiТак и есть,
И работает,
Проблема с НД, раньше прописывал жестко правила к конкретным "авто" в процедуре. Выходили изменения и я переписывал процедуры. Достало.
+ попадались уникальные авто- опять переписывал. Захотел создать нечто обобщенное поэтому придумал класс на основе коллекций и 1таблицы условий, чтобы автоматом формировалось все возможные варианты НД для каждого авто.
Проблемка- когда НД десять терпимо, когда 150 злит, когда будет 300, меня пошлют. (имею ввиду время формирования класса)

Вот поверьте, ни при чем тут класс!
Здесь нужно правильную схему БД создать, и не будет проблем.
Итак есть авто и НД
К 1 авто, приписано некое количество НД
В случае изменения, некоторые связи пропадают, новые возникают.
Ясно что связь М:М
Так?
Ясно, что при появлении нового авто, надо все прописать (а можно на клиенте копию сделать с близкого, и ее отредактировать)
Как бы кажется все просто.
Или что то не учли пока?
Если считать,что "авто" в вашем понимании это набор только 3 атрибутов (категория, тип топлива, состояние авто) тогда верно.
Я не хочу связывать НД и транспортное средство (ТС) (атрибуты:марка,версия,вариант,массы, ширина,...)
Поскольку одинаковые ТС попадаются очень редко, а вот "авто"-постоянно.
5органов у каждого своя база, таблицы по нормативке сбрасываю им я.
Прописывать локально -да, но все мне звонят и просят внести изменения. Иногда добиться чего хотят и где просто не реально. Поэтому
Сам изучаю все законы и прописываю всем НД, поскольку сам эксперт.
...
Рейтинг: 0 / 0
Нужна помощь Collections
    #39339052
asdor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Rikitiki,
много неясных слов.
авторЯ не хочу связывать НД и транспортное средство (ТС) (атрибуты:марка,версия,вариант,массы, ширина,...)
Поскольку одинаковые ТС попадаются очень редко, а вот "авто"-постоянно.

Уверен, вы понимаете что сказали. Я нет.
автор5органов у каждого своя база, таблицы по нормативке сбрасываю им я.
Прописывать локально -да, но все мне звонят и просят внести изменения. Иногда добиться чего хотят и где просто не реально. Поэтому
Сам изучаю все законы и прописываю всем НД, поскольку сам эксперт.

Это наверное просто крик души. К делу вряд ли относится)

>Юзер - Ванга), он не правильно выразился, характеристики указаны в заявлении и приложенных к заявлению дополнительных >документах.
Ну а какая разница? Где б они не были. Либо Вангует, либо еще как. Нам отсюда точно не видно. Никакого описания процесса в общем то нет.
...
Рейтинг: 0 / 0
Нужна помощь Collections
    #39339070
rikitiki
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
asdorВ п.4 и п.5 Юзер Каким то образом (опыт!!!))) ), определят хар-ки авто.


))))))))

если ТС стоял на учете (в любой стране), то есть имеется свидетельство регистрации- значит б/у
если произвел замену агрегатов (официальное разрешение на переоборудование) - переоборудованный
может быть новый, но имеется только рама и кабина - считается как незавершенный
остальные - новые

Просто накипело все это. Все требуют новую программу (изменились процедуры и условия), переделываю старую, но хочется сделать более универсально, поскольку еще одного такого перехода не переживу, и ..... застрял.
...
Рейтинг: 0 / 0
25 сообщений из 95, страница 1 из 4
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Нужна помощь Collections
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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