Simple-Scada forum

Simple-Scada 2 => Ошибки => Тема начата: deldemo от 20 Декабря 2017, 17:07:41

Название: Редактор скриптов
Отправлено: deldemo от 20 Декабря 2017, 17:07:41
Здравствуйте.
Заметил такой нюанс. Если в редакторе скриптов объявить процедуру и нечего больше то скрип не компилируется, но стоит добавить хоть одну переменную в var сразу все проходит.
Название: Re: Редактор скриптов
Отправлено: Simple-Scada от 20 Декабря 2017, 17:10:47
Здравствуйте.
У нас компиляция проходит. Можете привести пример кода и ошибки?
Название: Re: Редактор скриптов
Отправлено: deldemo от 20 Декабря 2017, 17:24:15
Вот код
Код: (delphi)
var
  aVirtual: Int64;

  {Обновляем таблицу tblSpisok_TH03 "Перечень компонентов ручного ввода"}
  procedure UpdateTableTH03;
  var
    aQuery:string;
  begin
    aQuery :=    'SELECT    AR.AR_ARTICLE_ID              AS AR_ARTICLE_ID '+
                           ',AR.AR_NAME                   AS AR_NAME'+

                           ',CASE WHEN SUM(ROUND(TMP.TDB_DOSINGWEIGHT, 2)) = SUM(ROUND(TMP.TDB_DOSINGWEIGHT, 0)) '+
                           'THEN '+
                           'CONVERT(varchar(10), SUM(TMP.TDB_DOSINGWEIGHT)) + ''.00'' '+
                           'ELSE '+
                           'CASE WHEN SUM(ROUND(TMP.TDB_DOSINGWEIGHT, 2)) = SUM(ROUND(TMP.TDB_DOSINGWEIGHT, 1)) '+
                           'THEN '+
                           'CONVERT(varchar(10), SUM(TMP.TDB_DOSINGWEIGHT)) + ''0'' '+
                           'ELSE '+
                           'CONVERT(varchar(10), SUM(ROUND(TMP.TDB_DOSINGWEIGHT, 2))) '+
                           'END '+
                           'END AS TDB_DOSINGWEIGHT '+

                           ',CASE TMP.TDB_ACTIVE WHEN 1 THEN ''Добавлен'' ELSE '''' end  AS ACTIVE '+
                 'FROM TMP_DOSINGBATCHES TMP '+
                 'INNER JOIN CFG_BATCHES BD ON BD.BD_PLC_BATCHNUMBER = TMP.TDB_PLC_BATCHNUMBER '+
                 'INNER JOIN CFG_RAWMATERIAL RM ON RM.RM_RAWMAT_ID = TMP.TDB_RAWMAT_ID '+
                 'INNER JOIN CFG_ARTICLE AR ON AR.AR_ARTICLE_ID = RM.RM_RAWMAT_ID '+
                 'WHERE   BD_BATCHNUMBER = (SELECT MAX(BD_BATCHNUMBER) '+
                 'FROM CFG_BATCHES '+
                 'INNER JOIN TMP_DOSINGBATCHES ON TDB_PLC_BATCHNUMBER = BD_PLC_BATCHNUMBER '+
                 'INNER JOIN CFG_WEIGHER ON WG_WEIGHER_ID = TDB_WEIGHER_ID '+
                 'INNER JOIN CFG_UNITS ON UN_BATCHNUMBER = BD_BATCHNUMBER '+
                 'INNER JOIN CFG_UNIT_DEVICES ON UN_UNIT_ID = UDS_UNIT_ID AND WG_DEVICE_ID = UDS_DEVICE_ID '+
                 'AND UN_BATCHNUMBER > 1 '+
                 'AND TDB_WEIGHER_ID = 6) '+
                 'AND TMP.TDB_WEIGHER_ID = 6 '+
                 'AND TMP.TDB_MODIFYTYPE <> ''D'' '+
                 'GROUP BY TMP.TDB_PLC_BATCHNUMBER'+
                 ',RTRIM(AR.AR_ARTICLECODE)'+
                 ',AR.AR_NAME '+
                 ',AR.AR_ARTICLE_ID '+
                 ',TMP.TDB_WEIGHER_ID '+
                 ',TMP.TDB_ACTIVE '+
                 'ORDER BY TMP.TDB_PLC_BATCHNUMBER, MIN(TDB_SEQUENCENUMBER) ';

    tblSpisok_TH03.RunSQL(aQuery, tsSaveFixRow);
  end;

  {Процедура проверяет все ли сырье добавлено}
  procedure CheckAddedTableTH03;
  var
    aQuery:string;
  begin

    aQuery :=    'SELECT   CASE WHEN sum(convert(int,TMP.TDB_ACTIVE)) = COUNT(*) '+
                          'THEN 1 '+
                          'ELSE 0 '+                 
                          'END AS TMP_READY '+
                 'FROM TMP_DOSINGBATCHES TMP '+
                 'INNER JOIN CFG_BATCHES BD ON BD.BD_PLC_BATCHNUMBER = TMP.TDB_PLC_BATCHNUMBER '+
                 'INNER JOIN CFG_RAWMATERIAL RM ON RM.RM_RAWMAT_ID = TMP.TDB_RAWMAT_ID '+
                 'INNER JOIN CFG_ARTICLE AR ON AR.AR_ARTICLE_ID = RM.RM_RAWMAT_ID '+
                 'WHERE   BD_BATCHNUMBER = (SELECT MAX(BD_BATCHNUMBER) '+
                 'FROM CFG_BATCHES '+
                 'INNER JOIN TMP_DOSINGBATCHES ON TDB_PLC_BATCHNUMBER = BD_PLC_BATCHNUMBER '+
                 'INNER JOIN CFG_WEIGHER ON WG_WEIGHER_ID = TDB_WEIGHER_ID '+
                 'INNER JOIN CFG_UNITS ON UN_BATCHNUMBER = BD_BATCHNUMBER '+
                 'INNER JOIN CFG_UNIT_DEVICES ON UN_UNIT_ID = UDS_UNIT_ID AND WG_DEVICE_ID = UDS_DEVICE_ID '+
                          'AND UN_BATCHNUMBER > 1 '+
                          'AND TDB_WEIGHER_ID = 6) '+
                          'AND TMP.TDB_WEIGHER_ID = 6 '+
                          'AND TMP.TDB_MODIFYTYPE <> ''D''';

    RunSQL(aQuery, nil, 54);
  end;

{********************************************************************************************}

begin
  if DataSet.Tag = 50 then
    vPM01_ID.Value := DataSet[0].AsStr;
  if DataSet.Tag = 51 then
    vMB02_ID.Value := DataSet[0].AsStr;
  if DataSet.Tag = 52 then
    begin
      imgLoading_1.Visible:=false;
      imgLoading_2.Visible:=false;
      btnReport_reload.States[0].FontAlpha:=179;
      //tblReport_dosing.Alpha:=255;
    end;
  if DataSet.Tag = 53 then {Обнавляем таблицу tblSpisok_TH03 после отметки строки}
    begin
      UpdateTableTH03;
      CheckAddedTableTH03;
    end;
end.
если убрать aVirtual: Int64; компиляция не идет
Название: Re: Редактор скриптов
Отправлено: deldemo от 20 Декабря 2017, 17:25:25
процедуру не нужно обьявлять в var области?
Название: Re: Редактор скриптов
Отправлено: Simple-Scada от 20 Декабря 2017, 19:14:11
процедуру не нужно обьявлять в var области?
Не совсем. Просто не допускаются пустые var области. Они должны содержать объявление переменных, в ином случае (если объявлять нечего) ключевое слово var должно быть удалено.
Название: Re: Редактор скриптов
Отправлено: deldemo от 21 Декабря 2017, 07:16:47
Спасибо!