Страница 1 из 1

sGetTune('Boss')

Добавлено: 18 авг 2015, 10:43
novichok
Вот какой странный глюк вылезает -
в моём отчёте по платежам пользователь может выбирать контрагента и расчётный счёт, для чего есть таблицы
table struct schet
(
pik: string,
name: string,
schet1: string
);
table struct kontr
(
pik: string,
inn: string,
name: string,
d_name: string
)
with index (ind = name);

Заканчивается отчёт фамилией директора sGetTune('Boss').

Так вот если пользователь выбрал контрагента или расчётный счёт, то всё нормально, а если не выбрал (т.е. отчёт формируется по всем), то вылазит ошибка - нет настройки Boss.
Почему так? И что делать??? :-(

Re: sGetTune('Boss')

Добавлено: 18 авг 2015, 11:40
Masygreen
хз .. попробуйте сначала получить sGetTune('MYORG')

Re: sGetTune('Boss')

Добавлено: 18 авг 2015, 11:47
novichok
Такая же фигня. Сначала пишет, что нет настройки MYORG, потом - нет настройки Boss.

Re: sGetTune('Boss')

Добавлено: 18 авг 2015, 12:32
KATZ
Понятно, что такого не должно быть, но приведенных данных слишком мало для диагноза. Покажите исходник, что ли... Если он большой, то хотя бы наиболее значимые части (типа обращений к таблицам).

Re: sGetTune('Boss')

Добавлено: 18 авг 2015, 13:27
novichok

Код: Выделить всё

cmDoMarkUnMark:
{
  if (curTable = #tabl_schet)
  {
  if tabl_schet.pik = 'V'
  then tabl_schet.pik := '-'
  else tabl_schet.pik := 'V';
  update current tabl_schet;
  ReReadRecord;
  }
  else
  {
  if tabl_kontr.pik = 'V'
  then tabl_kontr.pik := '-'
  else tabl_kontr.pik := 'V';
  update current tabl_kontr;
  ReReadRecord;
  }
}

cmOK:
{
  stmt := sqlAllocStmt;
  sqlBindCol(stmt, 1, kol1);
  sqlBindCol(stmt, 2, kol2);
  sqlBindCol(stmt, 3, kol3);
  sqlBindCol(stmt, 4, kol4);
  sqlBindCol(stmt, 5, kol5);
  sqlBindCol(stmt, 6, kol6);
  sqlBindParam(stmt, 1, d_n);
  sqlBindParam(stmt, 2, d_k);
  sqlAddStr(query,'select distinct a.nodok,a.datvip,a.name,a.namepl1,a.sumplat,a.co,a.name1,a.schet1 from (');     
  sqlAddStr(query,'select distinct plpor.nrec,plpor.nodok,plpor.datvip,katorg.name name,plpor.namepl1,plpor.sumplat,katbank.name name1,katbank.schet1, ');
  sqlAddStr(query,'fpco.name co from plpor ');
  sqlAddStr(query,'inner join katorg on plpor.cpol=katorg.nrec ');
  sqlAddStr(query,'inner join katbank on plpor.cbankplat=katbank.nrec ');
  sqlAddStr(query,'left join fpco on plpor.cwaymove=fpco.nrec ');
  sqlAddStr(query,'where plpor.tidkgal=1 ');
  sqlAddStr(query,'and (plpor.datvip between ? and ?) ');
  // если по выбранным счетам
  str_bank:='';
  vib_bank:=false;
  PushPos(#tabl_schet);
  _loop tabl_schet
    {
      if tabl_schet.pik = 'V'
      then begin
           if vib_bank=false then sqlAddStr(query,'and (') else sqlAddStr(query,' or ');
           sqlAddStr(query,'((katbank.name='#39+tabl_schet.name+''#39+') and (katbank.schet1='#39+tabl_schet.schet1+''#39+'))');
           vib_bank:=true;
           str_bank:=str_bank+'Р/c № '+tabl_schet.schet1+' в '+tabl_schet.name+', ';
           end;
    }
  if vib_bank=true then sqlAddStr(query,') ');
  PopPos(#tabl_schet);
  //
  // если по выбранным контрагентам
  vib_org:=false;
  PushPos(#tabl_kontr);
  _loop tabl_kontr
    {
      if tabl_kontr.pik = 'V'
      then begin
           if vib_org=false then sqlAddStr(query,'and (') else sqlAddStr(query,' or ');
           sqlAddStr(query,'(katorg.shortname='#39+tabl_kontr.name+''#39+')');
           vib_org:=true;
           end;
    }
  if vib_org=true then sqlAddStr(query,') ');
  PopPos(#tabl_kontr);
  //
  sqlAddStr(query,') a left join nalogfin on a.nrec=nalogfin.csoprdoc ');
  sqlAddStr(query,'order by a.name,a.schet1,a.datvip,a.nodok');
  k_osh:=sqlPrepare(stmt,query);
  if k_osh>0 then message('sqlPrepare. Ошибка '+k_osh);
  k_osh:=sqlExecute(stmt);
  if k_osh>0 then message('sqlExecute. Ошибка '+k_osh);

  if k_osh=0 {
  xlCreateExcelWithTemplate(TranslatePath('%StartPath%')+'RESRAB\Платёжные документы\Платёжки.xlsx', true);  
  xlSetActiveWorkBookByName('1');            
  xlSetActiveSheetByName('Лист 1');    
      
  xlSetCellStringValue(sGetTune('Boss'), 2, 5, 2, 5);

  i:=10;
  sum_sum:=0;
  while sqlFetch(stmt) = tsOk do
  {
    ++i;
    xlSetCellStringValue(i-10, i+3, 1, i+3, 1);
    xlSetCellStringValue('Плат.пор. №'+kol1+' от '+DateToStr(kol2, 'DD.MM.YYYY'), i+3, 2, i+3, 2);
    xlSetCellStringValue(kol3, i+3, 3, i+3, 3);
    xlSetCellStringValue(kol4, i+3, 4, i+3, 4);
    xlSetCellStringValue(kol5, i+3, 5, i+3, 5);
    xlSetCellStringValue(kol6, i+3, 6, i+3, 6);
    sum_sum:=sum_sum+kol5;
  }
  xlSetCellStringValue('Итого по документам:', i+4, 4, i+4, 4);
  xlSetCellStringValue(sum_sum, i+4, 5, i+4, 5);
  
  xlFrameCells(59, 2,1,1, 14, 1, i+3, 7);
  sqlFreeStmt(stmt);
  sqlFreeStr(query);
  xlKillExcel;  }         
}
end;        
Всё, вроде, просто, ничего особенного :-(

Re: sGetTune('Boss')

Добавлено: 18 авг 2015, 17:10
KATZ
В той части, которая показана, криминала не увидел. Видимо, здесь разработчики должны причину искать, она не в випе зарыта, а в бинарниках.

А поправить, в принципе, легко, если всё остальное в норме (т. е. SELECT правильный результат возвращает): в самом начале прочитать ФИО директора и сохранить в переменную, а потом готовое значение использовать.

Re: sGetTune('Boss')

Добавлено: 18 авг 2015, 19:41
edward_K
когда исчерпаете все варианты попробуйте в начале и после k_osh:=sqlExecute(stmt);
в cmOk добавить
stmt:=0;
query:=0;
Вообще после использование запросов их указатели(забыл как красиво называется) нужно освобождать.
Да и лучше обработку вынесите в функцию. Похоже вы тупо сломали галактику :). Точнее из за того что в памяти оказался большой кусок где то чего то накрылось.