:: Обсуждаем проекты
Разработка реального приложения как пример для начинающих
Extortioner

Сообщений: 854
Откуда: Новосибирск
Дата регистрации: 06.10.2005
Добрый день. Эта тема создана как продолжение моей темы (https://forum.foxclub.ru/read.php?26,364993)
Программа автоматизирует учёт работы отдела тех. поддержки системы "Клиент-Банк".
В версии 1.0.1 пока остались неучтёнными возможность импорта данных из банковской части системы Клиент-Банк и вид долга.
Наверняка у вас будет множество замечаний, прошу вас, высказывайте их, ведь именно для этого я и создал эту тему.



Исправлено 1 раз(а). Последнее : Extortioner, 23.12.08 05:57
Ratings: 0 negative/0 positive
Re: Разработка реального приложения как пример для начинающих
Extortioner

Сообщений: 854
Откуда: Новосибирск
Дата регистрации: 06.10.2005
ещё 2 тома архива



Исправлено 1 раз(а). Последнее : Extortioner, 23.12.08 05:56
Ratings: 0 negative/0 positive
Re: Разработка реального приложения как пример для начинающих
Extortioner

Сообщений: 854
Откуда: Новосибирск
Дата регистрации: 06.10.2005
последний том
Ratings: 0 negative/0 positive
Re: Разработка реального приложения как пример для начинающих
Extortioner

Сообщений: 854
Откуда: Новосибирск
Дата регистрации: 06.10.2005
На всякий случай выкладываю ещё и тексты ХП
ADD_Action
insert into tbl_actions (id_company, id_act_name, date_fin, a_note, id_user, debt)
values (:id_company, :id_act_name, :date_fin, :a_note, :id_user, :debt);

EDIT_Action
update tbl_actions set id_act_name= :id_act_name, date_fin=:date_fin, a_note=:a_note, debt=:debt
where id_actions = :ln_id_actions;

GET_Aciotn_List1
if (:lnUser!=5 and :lnIdActName!=7) then begin
for
select tbl_company.id_company, tbl_company.C_NAME, tbl_company.id_abs, tbl_company.C_NOTE,
tbl_actions.ID_ACTIONS, tbl_actions.date_fin, tbl_actions.debt, tbl_actions.A_NOTE,
tbl_act_name.ID_ACT_NAME, tbl_act_name.act_name, tbl_user.u_name
from tbl_company
inner join tbl_actions on tbl_company.ID_COMPANY = tbl_actions.ID_COMPANY
inner join tbl_act_name on tbl_actions.ID_ACT_NAME = tbl_act_name.ID_ACT_NAME
inner join tbl_user on tbl_actions.ID_USER = tbl_user.ID_USER
where tbl_actions.ID_USER = :lnUser And tbl_actions.DATE_FIN>=:lnDateFin AND tbl_actions.id_act_name = :lnIdActName
into :id_company, :c_name, :id_abs, :c_note, :ID_ACTIONS, :date_fin, :debt, :A_NOTE, :ID_ACT_NAME, :act_name, :u_name
do begin
suspend;
end
exit;
end
if (:lnUser=5 and :lnIdActName!=7) then begin
for
select tbl_company.id_company, tbl_company.C_NAME, tbl_company.id_abs, tbl_company.C_NOTE,
tbl_actions.ID_ACTIONS, tbl_actions.date_fin, tbl_actions.debt, tbl_actions.A_NOTE,
tbl_act_name.ID_ACT_NAME, tbl_act_name.act_name, tbl_user.u_name
from tbl_company
inner join tbl_actions on tbl_company.ID_COMPANY = tbl_actions.ID_COMPANY
inner join tbl_act_name on tbl_actions.ID_ACT_NAME = tbl_act_name.ID_ACT_NAME
inner join tbl_user on tbl_actions.ID_USER = tbl_user.ID_USER
where tbl_actions.DATE_FIN>=:lnDateFin AND tbl_actions.id_act_name = :lnIdActName
into :id_company, :c_name, :id_abs, :c_note, :ID_ACTIONS, :date_fin, :debt, :A_NOTE, :ID_ACT_NAME, :act_name, :u_name
do begin
suspend;
end
exit;
end
if (:lnUser!=5 and :lnIdActName=7) then begin
for
select tbl_company.id_company, tbl_company.C_NAME, tbl_company.id_abs, tbl_company.C_NOTE,
tbl_actions.ID_ACTIONS, tbl_actions.date_fin, tbl_actions.debt, tbl_actions.A_NOTE,
tbl_act_name.ID_ACT_NAME, tbl_act_name.act_name, tbl_user.u_name
from tbl_company
inner join tbl_actions on tbl_company.ID_COMPANY = tbl_actions.ID_COMPANY
inner join tbl_act_name on tbl_actions.ID_ACT_NAME = tbl_act_name.ID_ACT_NAME
inner join tbl_user on tbl_actions.ID_USER = tbl_user.ID_USER
where tbl_actions.ID_USER = :lnUser And tbl_actions.DATE_FIN>=:lnDateFin
into :id_company, :c_name, :id_abs, :c_note, :ID_ACTIONS, :date_fin, :debt, :A_NOTE, :ID_ACT_NAME, :act_name, :u_name
do begin
suspend;
end
exit;
end
if (:lnUser=5 and :lnIdActName=7) then begin
for
select tbl_company.id_company, tbl_company.C_NAME, tbl_company.id_abs, tbl_company.C_NOTE,
tbl_actions.ID_ACTIONS, tbl_actions.date_fin, tbl_actions.debt, tbl_actions.A_NOTE,
tbl_act_name.ID_ACT_NAME, tbl_act_name.act_name, tbl_user.u_name
from tbl_company
inner join tbl_actions on tbl_company.ID_COMPANY = tbl_actions.ID_COMPANY
inner join tbl_act_name on tbl_actions.ID_ACT_NAME = tbl_act_name.ID_ACT_NAME
inner join tbl_user on tbl_actions.ID_USER = tbl_user.ID_USER
where tbl_actions.DATE_FIN>=:lnDateFin
into :id_company, :c_name, :id_abs, :c_note, :ID_ACTIONS, :date_fin, :debt, :A_NOTE, :ID_ACT_NAME, :act_name, :u_name
do begin
suspend;
end
exit;
end

GET_Action_List2
if (:lnChoice=1) then begin
for
select tbl_company.ID_COMPANY, tbl_company.C_NAME, tbl_company.id_abs, tbl_company.C_NOTE,
tbl_actions.ID_ACTIONS, tbl_actions.date_fin, tbl_actions.debt, tbl_actions.A_NOTE,
tbl_act_name.ID_ACT_NAME, tbl_act_name.act_name, tbl_user.u_name
from tbl_company
inner join tbl_actions on tbl_company.ID_COMPANY = tbl_actions.ID_COMPANY
inner join tbl_act_name on tbl_actions.ID_ACT_NAME = tbl_act_name.ID_ACT_NAME
inner join tbl_user on tbl_actions.ID_USER = tbl_user.ID_USER
where tbl_company.ID_ABS = cast (:lcInput as integer)
into :id_company, :c_name, :id_abs, :c_note, :ID_ACTIONS, :date_fin, :debt, :A_NOTE, :ID_ACT_NAME, :act_name, :u_name
do begin
suspend;
end
exit;
end
if (:lnChoice=2) then begin
for
select tbl_company.ID_COMPANY, tbl_company.C_NAME, tbl_company.id_abs, tbl_company.C_NOTE,
tbl_actions.ID_ACTIONS, tbl_actions.date_fin, tbl_actions.debt, tbl_actions.A_NOTE,
tbl_act_name.ID_ACT_NAME, tbl_act_name.act_name, tbl_user.u_name
from tbl_company
inner join tbl_actions on tbl_company.ID_COMPANY = tbl_actions.ID_COMPANY
inner join tbl_act_name on tbl_actions.ID_ACT_NAME = tbl_act_name.ID_ACT_NAME
inner join tbl_user on tbl_actions.ID_USER = tbl_user.ID_USER
where Upper(tbl_company.C_NAME) like UPPER('%'||:lcInput||'%')
into :id_company, :c_name, :id_abs, :c_note, :ID_ACTIONS, :date_fin, :debt, :A_NOTE, :ID_ACT_NAME, :act_name, :u_name
do begin
suspend;
end
exit;
end

GET_All_Actions
for
select id_act_name, act_name from tbl_act_name
into :id_act_name, :act_name
do begin
suspend;
end

GET_ALL_USER
for
select id_user, u_name from tbl_user
into :id_user, :u_name
do begin
suspend;
end

GET_COMPANY_INFO
select C_NAME, C_NOTE from tbl_company where id_company = :lnIdCompany
into :c_name, :c_note;
suspend;

GET_COMPANY_LIST
if (:lnChoose=1) then begin
for
select ID_INTABS, id_company, C_NAME, id_abs from tbl_company where ID_ABS = cast(:lcInput as integer) order by ID_INTABS desc
into :ID_INTABS, :id_company, :c_name, :id_abs
do begin
suspend;
end
exit;
end
if (:lnChoose=2) then begin
for
select ID_INTABS, id_company, C_NAME, id_abs from tbl_company where UPPER(C_NAME) like ('%'||:lcInput||'%') order by ID_INTABS desc
into :ID_INTABS, :id_company, :c_name, :id_abs
do begin
suspend;
end
exit;
end
Get_Order_Info
select id_act_name, id_company, date_fin, a_note, debt from tbl_actions where id_actions = :lnIdActions
into :id_act_name, :id_company, :date_fin, :a_note, :debt;
suspend;
GET_OS
for
select id_os, o_name from tbl_os
into :id_os, _name
do begin
suspend;
end
Get_User_Info
for
select id_user, u_name, role_name from tbl_user where ul_name = :lcULogName
into :id_user, :u_name, :role_name
do begin
suspend;
end
Ratings: 0 negative/0 positive
Re: Разработка реального приложения как пример для начинающих
Влад Колосов

Сообщений: 22664
Откуда: Ростов-на-Дону
Дата регистрации: 05.05.2005
Я бы посмотрел, но не знаю специфики ни банков, ни клиентов


------------------
Совершенство - это не тогда, когда нельзя
ничего прибавить, а тогда, когда нечего убавить.
Ratings: 0 negative/0 positive
Re: Разработка реального приложения как пример для начинающих
ssa

Сообщений: 13007
Откуда: Москва
Дата регистрации: 23.03.2005
После пробежки по коду:
1. У всех ли есть Firebird/interbase? У меня нет, потму проверить в работе не могу.
2. Не слишком ли широка основная форма?
3. Не слишком ли похожи друг на друга "неосновные" формы и не напрашивается ли класс для этих форм.
4. Не слишком ли много копий кода
IF SQLEXEC(gnConnHandle, lcCmdStr, 'cCompInfo') != 1
= AERROR(aErrorArray)
= MESSAGEBOX('Нет соединения c SQL сервером. Ошибка №14',16,'SQL Connect Error')
ENDIF
с разницей только в номере ошибки?
5. Не слишком ли много ALLTRIM() в сочетании с DTOC() и STR() с одним параметром? Зачем они нужны, если ничего в указанных случаях не делают?


------------------
Лень - это неосознанная мудрость.
Ratings: 0 negative/0 positive
Re: Разработка реального приложения как пример для начинающих
Extortioner

Сообщений: 854
Откуда: Новосибирск
Дата регистрации: 06.10.2005
Влад Колосов
Я бы посмотрел, но не знаю специфики ни банков, ни клиентов
По специфике всё просто - представьте, что у вас есть программа (или комплекс программ), которые вы устанавливаете своим клиентам. Есть несколько специалистов, которые выезжают к клиенту и производят установку. Иногда такие программы могут начинать давать сбои по вине клиента ил внутренних глюков приложения - не важно. Важно, что для устранения этих глюков клиенты звонят в службу техподдержки и, скажем так, заказывают какое-то действие. То есть если какой-то глюк, то переустановка, если клиент новый, то установка и тп... Дак вот как раз произведённую этими специалистами работу и нужно учитывать.
То есть ничего оторванного от реальности - можете в качестве примера взять не клиент-банк а, к примеру установку Microsoft Office клиентам, которые сами его установить не могут.
Ratings: 0 negative/0 positive
Re: Разработка реального приложения как пример для начинающих
Extortioner

Сообщений: 854
Откуда: Новосибирск
Дата регистрации: 06.10.2005
ssa
1. У всех ли есть Firebird/interbase? У меня нет, поэтму проверить в работе не могу.
Да я понимаю, что Firebird/Interbase есть не у всех, но просто во-первых все другие сервера БД гораздо больше по объёму для скачивания, во-вторых - в принципе вопрос касался программирования на фоксе, хранимые процедуры написать не так уж и сложно и реализация их на каждом сервере будет своя, надо же было на чём-то остановиться. Почему я выбрал именно Firebird я описал в документе.
ssa
2. Не слишком ли широка основная форма?
Да, согласен, форма широковата, но в специфике приложения было указано, что минимальное разрешение экрана 1280Х1024, для этого (или тем более большего разрешения) форма нормально укладывается в экран. Но, естественно, если у вас есть предложения по переделыванию формы, то прошу вас - высказывайтесь.
По 3,4 и 5 пунктам могу сказать, что на то вопрос и назывался "Разработка реального приложения как пример для начинающих", направьте меня, скажите в какую сторону копать, дайте ссылки, приведите пример, я разберусь, просто возможно потом эту тему будут читать другие начинающие и сталкиваться с теми же проблемами.
Ratings: 0 negative/0 positive
Re: Разработка реального приложения как пример для начинающих
Влад Колосов

Сообщений: 22664
Откуда: Ростов-на-Дону
Дата регистрации: 05.05.2005
Не сложновато ли для начинающего использовать сервер БД, кроме всего прочего? Лучше для образца использовать программу, написанную на чистом фоксе.
Мне кажется, что учебная программа для начинающих должна охватывать все аспекты фокса: формы, классы, отчеты, меню, базы.
В базах триггеры, правила, индексы, каскадные триггеры. A формах особо уделить внимание модальным формам, передаче параметров.
При рассмотрении методов - передача параметров по ссылке.
На уровне объестного программирования - наследование, объявление свойств и методов. Программное создание и работа с формами из библиотеки классов как альтернативный вариант.
Обязательно обработка и протоколирование ошибок.


------------------
Совершенство - это не тогда, когда нельзя
ничего прибавить, а тогда, когда нечего убавить.




Исправлено 1 раз(а). Последнее : Влад Колосов, 24.12.08 17:38
Ratings: 0 negative/0 positive
Re: Разработка реального приложения как пример для начинающих
Extortioner

Сообщений: 854
Откуда: Новосибирск
Дата регистрации: 06.10.2005
Да, наверное по поводу сервера БД я немного погорячился... Просто хотелось отработать и этот вариант, тем более, если всё снабдить комментариями, то получится не так уж и сложно. Но в остальном вы, конечно, правы... Просто поскольку в прошлом обсуждении (в курилке) решили, что идеальных программ не бывает, то давайте уж на моём примере откатаем всё что можно?



Исправлено 1 раз(а). Последнее : Extortioner, 24.12.08 18:49
Ratings: 0 negative/0 positive
Re: Разработка реального приложения как пример для начинающих
Владимир Максимов
Автор

Сообщений: 14098
Откуда: Москва
Дата регистрации: 02.09.2000
Extortioner
Да, наверное по поводу сервера БД я немного погорячился... Просто хотелось отработать и этот вариант, тем более, если всё снабдить комментариями, то получится не так уж и сложно.

Никто не мешает подключаться к файлам DBF как к "внешним" данным. Не совсем "сервер", но принцип построения приложения будет тот же.

Заодно будет наглядный ответ на вопрос, почему нельзя (точнее, не имеет смысла) написать универсальное приложение: и по технологии клиент-сервер, и по технологии файл-сервер.
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 1 (Гостей: 1)

© 2000-2024 Fox Club 
Яндекс.Метрика