powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / ERP и учетные системы [игнор отключен] [закрыт для гостей] / Меркурий-ERP
25 сообщений из 357, страница 5 из 15
Меркурий-ERP
    #38909425
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Александр Татарченкоzeon11Александр Татарченко,

Посмотрел структуру БД. Мне понравилось. Должно работать быстро.
Только похоже деревьев совсем нет, отсюда избыточность таблиц.
Удачи!

Кусочек кода для оценки
Модуль расходных накладных

Там страшный, аццкий и невероятный говнокод.
Ты бы лучше не выкладывал, чтобы не позориться
...
Рейтинг: 0 / 0
Меркурий-ERP
    #38909436
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
defecatorАлександр Татарченкопропущено...


Кусочек кода для оценки
Модуль расходных накладных

Там страшный, аццкий и невероятный говнокод.
Ты бы лучше не выкладывал, чтобы не позориться
покажите кусок гениального кода. Всегда интересно посмотреть
...
Рейтинг: 0 / 0
Меркурий-ERP
    #38909443
andr_andrey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Александр Татарченко,

Посмотрел код, титанический труд на Дельфи, за сам код возможно вас тут поругают.
Сложилось впечатление, что решение не Юникоде?
...
Рейтинг: 0 / 0
Меркурий-ERP
    #38909448
Александр Татарченко
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andr_andreyАлександр Татарченко,

Посмотрел код, титанический труд на Дельфи, за сам код возможно вас тут поругают.
Сложилось впечатление, что решение не Юникоде?
Делфи 2010. Юникод полностью. А модуль писал бывший тимлид. Кто может лучше - приглашу на работу)))
...
Рейтинг: 0 / 0
Меркурий-ERP
    #38909463
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iscrafmdefecatorпропущено...


Там страшный, аццкий и невероятный говнокод.
Ты бы лучше не выкладывал, чтобы не позориться
покажите кусок гениального кода. Всегда интересно посмотреть

Гениального кода не бывает.
Бывает код, который пишет человек, понимающий, что он пишет.

Аффтар в данном случае даже не в курсе, чем отличается код:

Код: pascal
1.
2.
3.
4.
5.
6.
qry := TQuery.Create
try
.....
finally
  qry.free;
end ;



от кода в его сорцах:
Код: pascal
1.
2.
3.
4.
5.
try
   qry := TQuery.Create
finally
  qry.free;
end ;



Человек даже не знает, что бывает такое слово CONST, в котором можно константам присваивать имена,
и писать к ним комментарии.

В коде же все константы просто разбросаны в виде значений по 100500 строкам, типа такого:
Код: pascal
1.
  if not(qbd2.FieldByName('cod_rash').AsInteger in [4,6,9]) then



У него есть сервер, поддерживающий хранимки.
Кое-где они используются, но при этом для вызова хранимки на клиента селектами вытаскиваются значения,
которые потом тупо пихаются как параметры на вход процедуры.
Почему нельзя было сразу сделать всё на сервере ?

Что такое Action - аффтар тоже не в курсе, в результате код превращается в длинные портянки типа такой:
Код: pascal
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.
procedure TfrmRashod.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
 //нажатие кнопки
   if (ssCtrl in Shift) and (Key = VK_F2) then btnFilterOnOffClick(nil);

   if (ssAlt in Shift) then
   begin
      phk_6.Visible:=true;
      phk_6.Caption:=trans('+F6 - Сумма');
      phk_2.Visible:=true;
      phk_2.Caption:=trans('+F2 - Вид экрана');
      phk_3.Visible:=false;
      phk_4.Visible:=false;
      phk_5.Visible:=false;
      phk_7.Visible:=false;
      phk_8.Visible:=false;
   end;
   if (ssCtrl in Shift) then
   begin
      phk_5.Visible:=true;
      phk_5.Caption:=trans('+F5 - Копия');
      phk_2.Visible:=false;
      phk_3.Visible:=false;
      phk_4.Visible:=false;
      phk_6.Visible:=false;
      phk_7.Visible:=false;
      phk_8.Caption:=trans('+F5 - Объедин');
      phk_8.Visible:=true;
   end;
   if (ssShift in Shift) then
   begin
      phk_5.Visible:=true;
      phk_5.Caption:=trans('+F5 - На др.склад');
      phk_2.Visible:=false;
      phk_3.Visible:=false;
      phk_4.Visible:=true;
      phk_4.Caption:=trans('+F4 - Маркер');
      phk_6.Visible:=true;
      phk_6.Caption:=trans('+F6 - эксп.1С');
      phk_7.Visible:=false;
      phk_8.Visible:=false;
   end;

   case key of
   vk_F4:if shift=[] then BtnAddClick(self);
   vk_F3:if shift=[] then BtnEditClick(self);
   vk_F8:if shift=[] then BtnDelClick(self);
   vk_Escape:close;
   end;

end;



Не используются параметры в запросах - бедный сервер заставляют каждый раз парсить одно и то же.

Спагетти-код:
Код: pascal
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.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
215.
216.
217.
218.
219.
220.
221.
222.
223.
224.
225.
226.
227.
228.
229.
230.
231.
232.
233.
234.
235.
236.
237.
function TfrmEditRash2.openpodbor: boolean;
var
  sql: string;
  curr_pos: integer;
  locate_fieldname: string;
  nomer_7, fk_7, name_7: string;
  arr, curr_mod: variant;
begin
  //Открываем датасет с подбором в зависимости от заданного фильтра
  if (qbd2.FieldByName('cod_rash').AsString='5')and(cbfilterpost.Visible=false) then
  begin
     if messagebox(self.Handle,pchar('Установить фильтр на товары от получателя?'),pchar('Возврат поставщику'),mb_YESNO)=mryes then
     cbfilterpost.Checked:=true else
     cbfilterpost.Checked:=false;
     cbfilterpost.Visible:=true;
  end;

  result:=true;
  dbgrideh3.columns[0].visible:=false;
  dbgrideh3.columns[5].visible:=true;
  if qbd2.FieldByName('cod_rash').AsString='7' then  //сначла возврат получателя - только по конкретной накладной
  begin
     if qbd2.FieldByName('fk_bd_rash_pol').AsString='' then
     begin
       if not InputQuery(trans('Возврат'),trans('Введите номер расхода, по которому требуется оформить возврат'),nomer_7) then exit;
       arr:=dm.mercury.QueryValues('select bd_2.field_key, cast(date_rash as varchar(10)), fk_cena_rash, IN_PRIH_CENA, bd_cena.name, margin, discount from bd_2 join bd_cena on bd_cena.field_key=bd_2.fk_cena_rash where fk_bd_firm='+qbd2.FieldByName('fk_bd_firm').AsString+' and fk_recipient='+qbd2.FieldByName('fk_recipient').AsString+' and cod_rash<>7 and nomer_rash='''+nomer_7+'''');
       if arr[0]=null then
       begin
         ShowMessage('Накладная под номером '+nomer_7+' на получателя '+qbd2.FieldByName('rec_name').AsString+' не найдена!');
         exit;
       end;
       fk_7:=arr[0];
       name_7:='по расходу №'+nomer_7+' от '+copy(arr[1],9,2)+'.'+copy(arr[1],6,2)+'.'+copy(arr[1],1,4);
       lbl_rash_pol.Caption:=name_7;
       qbd2.Edit;
       qbd2.FieldByName('fk_bd_rash_pol').value:=fk_7;
       qbd2.Post;

     end;
     sql:='select bd_11.field_key as fk_bd_11, bd_tovar.field_key as fk_bd_tovar, bd_tovar.name as tovar_name ';
     sql:=sql+', BD_TOVAR_MOD.field_key as fk_mod, BD_TOVAR_MOD.name as mod_name, BD_ED_IZM.name as ed_izm_name ';
     sql:=sql+', coalesce(BD_ED_IZM.accuracy,0) as ed_izm_acc, bd_11.date_save, bd_tovar.made, bd_tovar.land, bd_11.cena_pr_with_nds';
     sql:=sql+', 0.000 as cnt_rash, bd_11.nds, bd_11.inplace, min(bd_21.cena_with_nds) as cena, sum(bd_21.cnt) as stock';
     sql:=sql+' from bd_21 join bd_11 on bd_11.field_key=bd_21.fk_bd_11 join bd_tovar on bd_tovar.field_key=bd_11.fk_bd_tovar';
     sql:=sql+' left join BD_TOVAR_MOD on bd_tovar_mod.field_key=bd_11.fk_bd_tovar_mod ';
     sql:=sql+' left join BD_ED_IZM on bd_ed_izm.field_key=bd_tovar.fk_bd_ed_izm ';
     sql:=sql+' where bd_21.fk_bd_2='+qbd2.FieldByName('fk_bd_rash_pol').AsString;
     sql:=sql+' group by 1,2,3,4,5,6,7,8,9,10,11,12,13,14';
     sql:=sql+' order by BD_TOVAR.name';
  end else
  if rbaddfrom11.Checked then
  begin //добавление из партий по спецификации (если есть)
     dbgrideh3.columns[0].visible:=true;
     if {(qbd2.FieldByName('cod_rash').AsString<>'5') and} exists_spr_for_add(qBD2.FieldByName('fk_bd_firm').AsString,qBD2.FieldByName('fk_recipient').AsString,qBD2.FieldByName('fk_bd_dogovor').AsString) then
     begin  //есть спецификация, фильтруем по ней
        sql:='select distinct coalesce(bd_1.nomer_prih||'' от '','''')||bd_1.date_prih as prih_name ';
        sql:=sql+', bd_11.field_key as fk_bd_11, BD_TOVAR.field_key as fk_bd_tovar, BD_TOVAR.name as tovar_name, BD_TOVAR_MOD.field_key as fk_mod, BD_TOVAR_MOD.name as mod_name, BD_ED_IZM.name as ed_izm_name ';
        sql:=sql+', coalesce(BD_ED_IZM.accuracy,0) as ed_izm_acc, bd_11.date_save, bd_tovar.made, bd_tovar.land, bd_11.cena_pr_with_nds';
        sql:=sql+', 0.000 as cnt_rash, bd_11.stock, bd_11.nds, bd_11.inplace ';
        sql:=sql+' from BD_11 join bd_spr11 on bd_spr11.fk_bd_tovar=bd_11.fk_bd_tovar ';
        sql:=sql+' join BD_TOVAR on bd_tovar.field_key=bd_11.fk_bd_tovar ';
        sql:=sql+' join BD_1 on bd_1.field_key=bd_11.fk_bd_1 ';
        sql:=sql+' left join BD_TOVAR_MOD on bd_tovar_mod.field_key=bd_11.fk_bd_tovar_mod ';
        sql:=sql+' left join BD_ED_IZM on bd_ed_izm.field_key=bd_tovar.fk_bd_ed_izm';
        sql:=sql+' join bd_spr1 on bd_spr1.field_key=bd_spr11.fk_bd_spr1 ';
        //..если по договору спец. нет, то ищем без договора
       // if qbd2.FieldByName('fk_bd_dogovor').AsString='' then
      //  begin
          sql:=sql+' and bd_spr1.fk_recipient='+qbd2.FieldByName('fk_recipient').AsString;
        //  sql:=sql+' join bd_grt_firm_web on bd_grt_firm_web.fk_bd_grt_firm=bd_spr1.fk_bd_grt_firm ';
      //  end else
        if qbd2.FieldByName('fk_bd_dogovor').AsString<>'' then
        sql:=sql+' and (bd_spr1.fk_bd_dogovor='+qbd2.FieldByName('fk_bd_dogovor').AsString+' or bd_spr1.fk_bd_dogovor is null)';
        sql:=sql+' where bd_11.valid_flag=1 and bd_11.fk_bd_firm='+qbd2.FieldByName('fk_bd_firm').AsString+' and bd_11.stock>0 and bd_spr1.valid_flag=1 and bd_11.priority>0 ';
        if (qbd2.FieldByName('cod_rash').AsString='5')and (cbfilterpost.Visible)and(cbfilterpost.Checked)and(qbd2.FieldByName('fk_recipient').AsString<>'') then
        sql:=sql+' and bd_11.fk_supplier='+qbd2.FieldByName('fk_recipient').AsString;
        sql:=sql+' and bd_spr1.fk_bd_grt_firm in (select w.fk_bd_grt_firm from bd_grt_firm_web w where w.FK_BD_FIRM='+qbd2.FieldByName('fk_bd_firm').AsString+') ';
        sql:=sql+' order by BD_TOVAR.name, bd_11.PRIORITY, bd_11.date_prih';
     end else
     begin
        sql:='select distinct coalesce(bd_1.nomer_prih||'' от '','''')||bd_1.date_prih as prih_name';
        sql:=sql+', bd_11.field_key as fk_bd_11, BD_TOVAR.field_key as fk_bd_tovar, BD_TOVAR.name as tovar_name, BD_TOVAR_MOD.field_key as fk_mod, BD_TOVAR_MOD.name as mod_name, BD_ED_IZM.name as ed_izm_name';
        sql:=sql+', coalesce(BD_ED_IZM.accuracy,0) as ed_izm_acc, bd_11.date_save, bd_tovar.made, bd_tovar.land, bd_11.cena_pr_with_nds';

        sql:=sql+', 0.000 as cnt_rash, bd_11.stock, bd_11.nds, bd_11.inplace ';
        sql:=sql+' from BD_11';
        sql:=sql+' join BD_TOVAR on bd_tovar.field_key=bd_11.fk_bd_tovar ';
        sql:=sql+' join BD_1 on bd_1.field_key=bd_11.fk_bd_1 ';

        sql:=sql+' left join BD_TOVAR_MOD on bd_tovar_mod.field_key=bd_11.fk_bd_tovar_mod ';
        sql:=sql+' left join BD_ED_IZM on bd_ed_izm.field_key=bd_tovar.fk_bd_ed_izm';
        sql:=sql+' where bd_11.valid_flag=1 and bd_11.fk_bd_firm='+qbd2.FieldByName('fk_bd_firm').AsString+' and bd_11.stock>0  and bd_11.priority>0';
        if (qbd2.FieldByName('cod_rash').AsString='5') and (cbfilterpost.Visible) and (cbfilterpost.Checked )and(qbd2.FieldByName('fk_recipient').AsString<>'') then //возврат поставщику
        sql:=sql+' and bd_11.fk_supplier='+qbd2.FieldByName('fk_recipient').AsString;
        sql:=sql+' order by BD_TOVAR.name, bd_11.PRIORITY, bd_11.date_prih';
     end;
  end else
  if rbaddfromstock.Checked then
  begin //добавление по остаткам по спецификации (если есть)

     if {(qbd2.FieldByName('cod_rash').AsString<>'5') and } (exists_spr_for_add(qBD2.FieldByName('fk_bd_firm').AsString,qBD2.FieldByName('fk_recipient').AsString,qBD2.FieldByName('fk_bd_dogovor').AsString)) then
     begin  //есть спецификация, фильтруем по ней
        sql:='select  null as fk_bd_11, bd_tovar.inplace, bd_tovar.nds, bd_tovar.made, bd_tovar.land, BD_TOVAR.field_key as fk_bd_tovar, BD_TOVAR.name as tovar_name';
        sql:=sql+', BD_TOVAR_MOD.field_key as fk_mod, BD_TOVAR_MOD.name as mod_name, BD_ED_IZM.name as ed_izm_name, coalesce(BD_ED_IZM.accuracy,0) as ed_izm_acc ';
        sql:=sql+', 0.000 as cnt_rash, sum(bd_11.stock) as stock ';
        sql:=sql+' from BD_11 join bd_spr11 on bd_spr11.fk_bd_tovar=bd_11.fk_bd_tovar ';
        sql:=sql+' join BD_TOVAR on bd_tovar.field_key=bd_11.fk_bd_tovar ';
        sql:=sql+' left join BD_TOVAR_MOD on bd_tovar_mod.field_key=bd_11.fk_bd_tovar_mod ';
        sql:=sql+' left join BD_ED_IZM on bd_ed_izm.field_key=bd_tovar.fk_bd_ed_izm';
        sql:=sql+' join bd_spr1 on bd_spr1.field_key=bd_spr11.fk_bd_spr1 ';

      //  begin
          sql:=sql+' and bd_spr1.fk_recipient='+qbd2.FieldByName('fk_recipient').AsString;
       //   sql:=sql+' join bd_grt_firm_web on bd_grt_firm_web.fk_bd_grt_firm=bd_spr1.fk_bd_grt_firm ';
      //  end else
        if qbd2.FieldByName('fk_bd_dogovor').AsString<>'' then
        sql:=sql+' and (bd_spr1.fk_bd_dogovor='+qbd2.FieldByName('fk_bd_dogovor').AsString+' or bd_spr1.fk_bd_dogovor is null)';
        sql:=sql+' where bd_11.valid_flag=1 and bd_11.fk_bd_firm='+qbd2.FieldByName('fk_bd_firm').AsString+' and bd_11.stock>0 and bd_spr1.valid_flag=1  and bd_11.priority>0 ';

        if (qbd2.FieldByName('cod_rash').AsString='5')and (cbfilterpost.Visible)and(cbfilterpost.Checked)and(qbd2.FieldByName('fk_recipient').AsString<>'') then
        sql:=sql+' and bd_11.fk_supplier='+qbd2.FieldByName('fk_recipient').AsString;
        sql:=sql+' and bd_spr1.fk_bd_grt_firm in (select w.fk_bd_grt_firm from bd_grt_firm_web w where w.FK_BD_FIRM='+qbd2.FieldByName('fk_bd_firm').AsString+') ';
        sql:=sql+' group by 1,2,3,4,5,6,7,8,9,10,11,12';
        sql:=sql+' order by BD_TOVAR.name';
     end else
     begin
        sql:='select  null as fk_bd_11, bd_tovar.inplace, bd_tovar.nds, bd_tovar.made, bd_tovar.land, BD_TOVAR.field_key as fk_bd_tovar';
        sql:=sql+', BD_TOVAR.name as tovar_name, BD_TOVAR_MOD.field_key as fk_mod, BD_TOVAR_MOD.name as mod_name, BD_ED_IZM.name as ed_izm_name, coalesce(BD_ED_IZM.accuracy,0) as ed_izm_acc ';
        sql:=sql+', 0.000 as cnt_rash, sum(bd_11.stock) as stock ';
        sql:=sql+' from BD_11';
        sql:=sql+' join BD_TOVAR on bd_tovar.field_key=bd_11.fk_bd_tovar ';

                //если возврат поставщику, и есть спецификация поставщика, то фильтруем по ней
      {  if (qbd2.FieldByName('cod_rash').AsString='5') then
        begin
          if exists_sps_for_add(qBD2.FieldByName('fk_bd_firm').AsString,qBD2.FieldByName('fk_recipient').AsString) then
          begin
            sql:=sql+' join bd_sps11 on bd_sps11.fk_bd_tovar=bd_tovar.field_key ';
            sql:=sql+' join bd_sps1 on bd_sps1.field_key=bd_sps11.fk_bd_sps1 and bd_sps1.valid_flag=1 and bd_sps1.fk_supplier='+qBD2.FieldByName('fk_recipient').AsString;
            sql:=sql+' join BD_GRT_FIRM_WEB grp on grp.FK_BD_FIRM='+qBD2.FieldByName('fk_bd_firm').AsString+' and grp.FK_BD_GRT_FIRM=bd_sps1.FK_BD_GRT_FIRM ';
          end;
        end;  }

        sql:=sql+' left join BD_TOVAR_MOD on bd_tovar_mod.field_key=bd_11.fk_bd_tovar_mod ';
        sql:=sql+' left join BD_ED_IZM on bd_ed_izm.field_key=bd_tovar.fk_bd_ed_izm';
        sql:=sql+' where bd_11.valid_flag=1 and bd_11.fk_bd_firm='+qbd2.FieldByName('fk_bd_firm').AsString+' and bd_11.stock>0  and bd_11.priority>0 ';
        if (qbd2.FieldByName('cod_rash').AsString='5') and (cbfilterpost.Visible) and (cbfilterpost.Checked )and(qbd2.FieldByName('fk_recipient').AsString<>'') then //возврат поставщику
        sql:=sql+' and bd_11.fk_supplier='+qbd2.FieldByName('fk_recipient').AsString;
        sql:=sql+' group by 1,2,3,4,5,6,7,8,9,10,11,12';
        sql:=sql+' order by BD_TOVAR.name';
     end;




  end else
  if rbaddfromall.Checked then
  begin //добавление из ассортимента по спецификации (если есть)

     if {(qbd2.FieldByName('cod_rash').AsString<>'5') and} (exists_spr_for_add(qBD2.FieldByName('fk_bd_firm').AsString,qBD2.FieldByName('fk_recipient').AsString,qBD2.FieldByName('fk_bd_dogovor').AsString)) then
     begin  //есть спецификация, фильтруем по ней
        sql:='select null as fk_bd_11, bd_tovar.inplace, bd_tovar.nds, bd_tovar.made, bd_tovar.land, BD_TOVAR.field_key as fk_bd_tovar, BD_TOVAR.name as tovar_name, BD_TOVAR_MOD.field_key as fk_mod';
        sql:=sql+', BD_TOVAR_MOD.name as mod_name, BD_ED_IZM.name as ed_izm_name, coalesce(BD_ED_IZM.accuracy,0) as ed_izm_acc ';
        sql:=sql+', 0.000 as cnt_rash, sum(bd_11.stock) as stock ';
        sql:=sql+' from BD_TOVAR join bd_spr11 on bd_spr11.fk_bd_tovar=bd_tovar.field_key ';
        sql:=sql+' left join BD_11 on bd_tovar.field_key=bd_11.fk_bd_tovar and bd_11.valid_flag=1 and bd_11.fk_bd_firm='+qbd2.FieldByName('fk_bd_firm').AsString+' and bd_11.stock>0  and bd_11.priority>0';
        if (qbd2.FieldByName('cod_rash').AsString='5') and (cbfilterpost.Visible) and (cbfilterpost.Checked )and(qbd2.FieldByName('fk_recipient').AsString<>'') then //возврат поставщику
        sql:=sql+' and (bd_11.fk_supplier='+qbd2.FieldByName('fk_recipient').AsString+')';

        sql:=sql+' left join BD_TOVAR_MOD on bd_tovar_mod.field_key=bd_11.fk_bd_tovar_mod ';
        sql:=sql+' left join BD_ED_IZM on bd_ed_izm.field_key=bd_tovar.fk_bd_ed_izm';
        sql:=sql+' join bd_spr1 on bd_spr1.field_key=bd_spr11.fk_bd_spr1 ';
       { if qbd2.FieldByName('fk_bd_dogovor').AsString='' then
        begin
          sql:=sql+' and bd_spr1.fk_recipient='+qbd2.FieldByName('fk_recipient').AsString;
          sql:=sql+' join bd_grt_firm_web on bd_grt_firm_web.fk_bd_grt_firm=bd_spr1.fk_bd_grt_firm ';
        end else  }
        if qbd2.FieldByName('fk_bd_dogovor').AsString<>'' then
        sql:=sql+' and (bd_spr1.fk_bd_dogovor='+qbd2.FieldByName('fk_bd_dogovor').AsString+' or bd_spr1.fk_bd_dogovor is null)';
        sql:=sql+' where  bd_spr1.valid_flag=1 ';
        sql:=sql+' and bd_spr1.fk_bd_grt_firm in (select w.fk_bd_grt_firm from bd_grt_firm_web w where w.FK_BD_FIRM='+qbd2.FieldByName('fk_bd_firm').AsString+') and bd_spr1.fk_recipient='+qbd2.FieldByName('fk_recipient').AsString;


        sql:=sql+' group by 1,2,3,4,5,6,7,8,9,10,11,12 ';
        sql:=sql+' order by BD_TOVAR.name';
     end else
     begin
        dbgrideh3.columns[5].visible:=false;
        sql:='select distinct  null as fk_bd_11, bd_tovar.inplace, bd_tovar.nds, bd_tovar.made, bd_tovar.land, BD_TOVAR.field_key as fk_bd_tovar, BD_TOVAR.name as tovar_name, ';
        sql:=sql+' BD_TOVAR_MOD.field_key as fk_mod, BD_TOVAR_MOD.name as mod_name, BD_ED_IZM.name as ed_izm_name, coalesce(BD_ED_IZM.accuracy,0) as ed_izm_acc ';
        sql:=sql+', 0.000 as cnt_rash, ';
     //   sql:=sql+'coalesce((select sum(stock) from bd_11 where bd_11.fk_bd_firm='+qbd2.FieldByName('fk_bd_firm').AsString+' and bd_11.stock>0 and bd_tovar.field_key=bd_11.fk_bd_tovar and (BD_TOVAR_MOD.field_key is null or fk_bd_tovar_mod=BD_TOVAR_MOD.field_key) and bd_11.valid_flag=1),0) as stock ';
        sql:=sql+' 0.000 as stock ';
        sql:=sql+' from BD_TOVAR';

        //если возврат поставщику, и есть спецификация поставщика, то фильтруем по ней
       { if (qbd2.FieldByName('cod_rash').AsString='5') then
        begin
          if exists_sps_for_add(qBD2.FieldByName('fk_bd_firm').AsString,qBD2.FieldByName('fk_recipient').AsString) then
          begin
            sql:=sql+' join bd_sps11 on bd_sps11.fk_bd_tovar=bd_tovar.field_key ';
            sql:=sql+' join bd_sps1 on bd_sps1.field_key=bd_sps11.fk_bd_sps1 and bd_sps1.valid_flag=1 and bd_sps1.fk_supplier='+qBD2.FieldByName('fk_recipient').AsString;
            sql:=sql+' join BD_GRT_FIRM_WEB grp on grp.FK_BD_FIRM='+qBD2.FieldByName('fk_bd_firm').AsString+' and grp.FK_BD_GRT_FIRM=bd_sps1.FK_BD_GRT_FIRM ';
          end;
        end;  }

        sql:=sql+' left join BD_TOVAR_MOD on bd_tovar_mod.fk_bd_tovar=bd_tovar.field_key ';
        sql:=sql+' left join BD_ED_IZM on bd_ed_izm.field_key=bd_tovar.fk_bd_ed_izm';
        sql:=sql+' where coalesce(bd_tovar.IS_OLD_FLAG,0)=0';
        sql:=sql+' order by BD_TOVAR.name';
     end;


  end;
  if rbaddfrom11.Checked then locate_fieldname:='fk_bd_11' else locate_fieldname:='fk_bd_tovar';
  locate_fieldname:='fk_bd_tovar';
  if qpodbor.active then
  begin
   curr_pos:=qpodbor.FieldByName(locate_fieldname).asinteger;
   curr_mod:=qpodbor.FieldByName('fk_mod').value;
  end else
  if qBD22.recordcount>0 then
  begin
    curr_pos:=qBD22.FieldByName(locate_fieldname).asinteger;
    curr_mod:=qBD22.FieldByName('fk_bd_tovar_mod').value;
  end else
  begin
    curr_pos:=0;
    curr_mod:=null;
  end;
  qPodbor.Close;
  qPodbor.SQLs.SelectSQL.Text:=sql;
  qPodbor.Open;
  if (curr_pos>0) then//and(not(rbaddfromall.Checked)) then
  qpodbor.locate(locate_fieldname+';fk_mod',vararrayof([curr_pos,curr_mod]),[]);
 // DEBUG.savetxt(sql);
end;



Код, имхо, не профессионального разработчика, а только начинающего изучать RAD, язык программирования и его возможности...
...
Рейтинг: 0 / 0
Меркурий-ERP
    #38909487
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
defecator, спасибо за хороший анализ
...
Рейтинг: 0 / 0
Меркурий-ERP
    #38909663
АнатоЛой
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iscrafmdefecator, спасибо за хороший анализ
И это только навскидку....
1. Половина названий визуальных компонент оставлены по умолчанию.
Ладно бы только те, которые не используются в коде и живут только в декларации и dfm...
Но DBGridEh1, DBGridEh2, DBGridEh3 на одной форме...

2.
if modeopen_telo<>MODE_VIEW then ro_telo:=false else ro_telo:=true;
вместо
ro_telo := modeopen_telo=MODE_VIEW;

3. методы на 5 экранов текста
4. with не существует как инструмента (прошу холивар не разводить :)
5. банальное форматирование

Это не лид, это просто разработчик (работал как лид - без присмотра :) )

Антислив: нет, свои не покажу, комм.тайна, отбирать времени и желания нет. Для примера смотри исходные коды Delphi :)
...
Рейтинг: 0 / 0
Меркурий-ERP
    #38909682
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
АнатоЛойiscrafmdefecator, спасибо за хороший анализ
И это только навскидку....
1. Половина названий визуальных компонент оставлены по умолчанию.
Ладно бы только те, которые не используются в коде и живут только в декларации и dfm...
Но DBGridEh1, DBGridEh2, DBGridEh3 на одной форме...

2.
if modeopen_telo<>MODE_VIEW then ro_telo:=false else ro_telo:=true;
вместо
ro_telo := modeopen_telo=MODE_VIEW;

3. методы на 5 экранов текста
4. with не существует как инструмента (прошу холивар не разводить :)
5. банальное форматирование

Это не лид, это просто разработчик (работал как лид - без присмотра :) )

Антислив: нет, свои не покажу, комм.тайна, отбирать времени и желания нет. Для примера смотри исходные коды Delphi :)
вот это все бла-бла, не более. А Вас сколько символов знак табуляции?

автор if modeopen_telo<>MODE_VIEW then ro_telo:=false else ro_telo:=true;
вместо
ro_telo := modeopen_telo=MODE_VIEW;

какая разница? Еще пропуски между строк посчитайте.
...
Рейтинг: 0 / 0
Меркурий-ERP
    #38910087
irbis_al
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: pascal
1.
2.
3.
sql:='select bd_11.field_key as fk_bd_11, bd_tovar.field_key as fk_bd_tovar, bd_tovar.name as tovar_name ';
     sql:=sql+', BD_TOVAR_MOD.field_key as fk_mod, BD_TOVAR_MOD.name as mod_name, BD_ED_IZM.name as ed_izm_name ';
     sql:=sql+', coalesce(BD_ED_IZM.accuracy,0) as ed_izm_acc, bd_11.date_save, bd_tovar.made, bd_tovar.land, 



А вот я не понял немного...у Вас,что sql прошиты прямо в коде??????
Исключительно по моему субъективному мнению они должны быть в базе данных. и прога должна их тянуть оттуда.
Это придаст гибкость системе.
...
Рейтинг: 0 / 0
Меркурий-ERP
    #38910130
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
irbis_alИсключительно по моему субъективному мнению они должны быть в базе данных. и прога должна их тянуть оттуда.
Это придаст гибкость системе.
для этого нужна еще база данных. В Delphi есть для этого стандартные средства - ресурсы.
...
Рейтинг: 0 / 0
Меркурий-ERP
    #38910149
irbis_al
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iscrafmirbis_alИсключительно по моему субъективному мнению они должны быть в базе данных. и прога должна их тянуть оттуда.
Это придаст гибкость системе.
для этого нужна еще база данных. В Delphi есть для этого стандартные средства - ресурсы.

Я программировал в Delphi(потом перешёл на java)

Но ведь это
Код: pascal
1.
sql:='select bd_11.field_key as fk_bd_11, bd_tovar.field_key as f'



К ресурсам ведь не относится.???
Тут явно готовится sql ...и готовитсЯ прямо в коде ,а не тянется из ресурса.
...
Рейтинг: 0 / 0
Меркурий-ERP
    #38910166
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
irbis_aliscrafmпропущено...

для этого нужна еще база данных. В Delphi есть для этого стандартные средства - ресурсы.

Я программировал в Delphi(потом перешёл на java)

Но ведь это
Код: pascal
1.
sql:='select bd_11.field_key as fk_bd_11, bd_tovar.field_key as f'




К ресурсам ведь не относится.???
Тут явно готовится sql ...и готовитсЯ прямо в коде ,а не тянется из ресурса.
почему на относится? Это просто текст в файле ресурсов
...
Рейтинг: 0 / 0
Меркурий-ERP
    #38910175
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
p.s. у ТС конечно не относится. Я о том, что тексты запросов можно просто в ресурсах хранить, но в код не тянуть. Чтобы поняли друг друга.
...
Рейтинг: 0 / 0
Меркурий-ERP
    #38910214
irbis_al
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iscrafmp.s. у ТС конечно не относится. Я о том, что тексты запросов можно просто в ресурсах хранить, но в код не тянуть. Чтобы поняли друг друга.

Вот теперь понял...а то догнать не мог...и так код посмотрел и эдак.

Вот тогда такой вопрос(Глядя на код возник) ...код базируется на собственном фреймвоке...или просто дельфя просто компилирует и получаем новое.

Например (исключительно по моему субъективному мнению) в хорошей системе...Изменились условия..
Ну например столбец добавляем..исходный Код..мы не должны править и компилировать.(Если иначе это плохо)

1.Мы подправили запрос(в базе или в ресурсах как у Вас).
2.Мы подправили CRUID sql (в базе или ресурсах)
3.Мы подправили файл отвечающий за screen-greed(как правило это xml...но у всех свой взгляд) и в нём прописали этот столбец его формат и имя на экране.
4.Подправили файл редактора screen-CRUID этой записи(добавив типа Tedit)

Фреймвок всё связал и всё ...дополнение готово.На экране видим столбец...он изменяется и т.д,
...
Рейтинг: 0 / 0
Меркурий-ERP
    #38910218
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
irbis_aliscrafmp.s. у ТС конечно не относится. Я о том, что тексты запросов можно просто в ресурсах хранить, но в код не тянуть. Чтобы поняли друг друга.

Вот теперь понял...а то догнать не мог...и так код посмотрел и эдак.

Вот тогда такой вопрос(Глядя на код возник) ...код базируется на собственном фреймвоке...или просто дельфя просто компилирует и получаем новое.

Например (исключительно по моему субъективному мнению) в хорошей системе...Изменились условия..
Ну например столбец добавляем..исходный Код..мы не должны править и компилировать.(Если иначе это плохо)

1.Мы подправили запрос(в базе или в ресурсах как у Вас).
2.Мы подправили CRUID sql (в базе или ресурсах)
3.Мы подправили файл отвечающий за screen-greed(как правило это xml...но у всех свой взгляд) и в нём прописали этот столбец его формат и имя на экране.
4.Подправили файл редактора screen-CRUID этой записи(добавив типа Tedit)

Фреймвок всё связал и всё ...дополнение готово.На экране видим столбец...он изменяется и т.д,
судя по всему - просто жесткий программный код. Но это лучше Автор конечно расскажет.
...
Рейтинг: 0 / 0
Меркурий-ERP
    #38910375
irbis_al
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И вот ещё один момент который меня,как инженера, возмутил

Код: pascal
1.
 arr:=dm.mercury.QueryValues('select first 1 bd_spr1.field_key from bd_spr1 join bd_spr11 on bd_spr1.field_key=bd_spr11.fk_bd_spr1 and cena>0 left join bd_grt_firm_web on bd_grt_firm_web.fk_bd_grt_firm=bd_spr1.fk_bd_grt_firm '+' or bd_spr1.fk_bd_grt_firm is null where fk_recipient='+fk_recipient+' and valid_flag=1 and bd_spr1.fk_bd_dogovor is null and bd_grt_firm_web.fk_bd_firm='+fk_bd_firm);



Почему не используются связанные переменные?????
(Надеюсь автор понимает разницу в связывании и не связывании переменных базы данных)

Вот так желательно
Код: pascal
1.
2.
3.
'fk_recipient=:fk_recipient'
...............................
'bd_grt_firm_web.fk_bd_firm=:fk_bd_firm'
...
Рейтинг: 0 / 0
Меркурий-ERP
    #38911803
MoroZ.Ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот почему open source в России не взлетает. Все цепляются к "говнокоду".
...
Рейтинг: 0 / 0
Меркурий-ERP
    #38911922
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MoroZ.RuВот почему open source в России не взлетает. Все цепляются к "говнокоду".

а не надо взлетать.
Надо просто иметь мозги, когда код пишешь
...
Рейтинг: 0 / 0
Меркурий-ERP
    #38912154
caballero
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MoroZ.RuВот почему open source в России не взлетает. Все цепляются к "говнокоду".
так не пиши говнокод. Кто в этом коде станет разбиратся даже если код открытый.
...
Рейтинг: 0 / 0
Меркурий-ERP
    #38912236
MoroZ.Ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
defecatorа не надо взлетать.
Надо просто иметь мозги, когда код пишешь
Может быть код там действительно очень и очень не оптимальный (может быть даже "индусский"), и автора справедливо затоптали за его назойливость. Но не профессиональная реакция: "А...Там страшный, аццкий и невероятный говнокод!", меня рассмешила. Обычно дети так реагируют.
На англоязычных площадках я почему-то не встречал такой реакции на чужой код. Всегда там полный конструктив и четкие ответы на поставленные вопросы.
...
Рейтинг: 0 / 0
Меркурий-ERP
    #38912237
MoroZ.Ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
caballero,

модель разработки open source подразумевает совместную работу над кодом. Но все мы пишем по-разному, следовательно нужно быть терпимым к чужому коду, иначе никакой совместной работы не получится. Все сразу же закончится на том, что разработчики перессорятся из-за того, что твой код не нравится другому.
К тому же в open source проектах обычно советуют выкладывать код как можно раньше, а в начале код обычно бывает очень "сырой".

А разбираться никто и не будет, пока проект не "взлетел". А не взлетит он потому, что одному человеку обычно не реально написать проект под современные требования. Нет ли тут противоречия?
...
Рейтинг: 0 / 0
Меркурий-ERP
    #38912248
irbis_al
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
М...я что-то изначально пропустил???
Система топика вроде не с открытым кодом.(Сейчас и сайт посмотрел...там нет упоминания этого)
Автор просто выложил часть решения на обозрение.
...
Рейтинг: 0 / 0
Меркурий-ERP
    #38912255
MoroZ.Ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
irbis_al,

все верно. Но раз уж пошло обсуждение качества кода, то можно считать, что это условно система с открытым кодом. Иначе этого обсуждения не могло бы быть.
...
Рейтинг: 0 / 0
Меркурий-ERP
    #38912266
irbis_al
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MoroZ.Ruirbis_al,

все верно. Но раз уж пошло обсуждение качества кода, то можно считать, что это условно система с открытым кодом. Иначе этого обсуждения не могло бы быть.

Но всё же(возможно я ошибаюсь) Системы с открытым кодом базируются на некотором фреймвоке(который кстати может быть и закрыт ...или его открытый код навскидку не понять)
Этот фреймвок позволяет подключать управляющие файлы скрипты(JS,PL/SQL ,Python)...
Эти скрипты уже открытые и они имеют доступ к метаданным и объектам фреймворка.

И это всё таки,- совсем другой уровень.

А тут просто (как я понял) хардкод.
...
Рейтинг: 0 / 0
Меркурий-ERP
    #38912269
MoroZ.Ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
irbis_al,

вот, обсуждение архитектуры приложения - это более продуктивный подход. Ведь в рамках одного приложения может быть самый разный код - оптимальный и не оптимальный, красивый и не красивый, написанный разными авторами. Для хорошей архитектуры приложения качество кода не так уж и важно. В крайнем случае критические куски кода можно и переписать.
...
Рейтинг: 0 / 0
25 сообщений из 357, страница 5 из 15
Форумы / ERP и учетные системы [игнор отключен] [закрыт для гостей] / Меркурий-ERP
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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