Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?

Официальный форум Simple-Scada.

Автор Тема: Редактор скриптов  (Прочитано 3688 раз)

deldemo

  • Старожил
  • ****
  • Сообщений: 308
    • Просмотр профиля
Редактор скриптов
« : 20 Декабря 2017, 17:07:41 »
Здравствуйте.
Заметил такой нюанс. Если в редакторе скриптов объявить процедуру и нечего больше то скрип не компилируется, но стоит добавить хоть одну переменную в var сразу все проходит.

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3214
    • Просмотр профиля
    • Simple-Scada
Re: Редактор скриптов
« Ответ #1 : 20 Декабря 2017, 17:10:47 »
Здравствуйте.
У нас компиляция проходит. Можете привести пример кода и ошибки?

deldemo

  • Старожил
  • ****
  • Сообщений: 308
    • Просмотр профиля
Re: Редактор скриптов
« Ответ #2 : 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; компиляция не идет
« Изменён: 26 Мая 2018, 10:49:46 от Simple-Scada »

deldemo

  • Старожил
  • ****
  • Сообщений: 308
    • Просмотр профиля
Re: Редактор скриптов
« Ответ #3 : 20 Декабря 2017, 17:25:25 »
процедуру не нужно обьявлять в var области?

Simple-Scada

  • Администратор
  • *****
  • Сообщений: 3214
    • Просмотр профиля
    • Simple-Scada
Re: Редактор скриптов
« Ответ #4 : 20 Декабря 2017, 19:14:11 »
процедуру не нужно обьявлять в var области?
Не совсем. Просто не допускаются пустые var области. Они должны содержать объявление переменных, в ином случае (если объявлять нечего) ключевое слово var должно быть удалено.

deldemo

  • Старожил
  • ****
  • Сообщений: 308
    • Просмотр профиля
Re: Редактор скриптов
« Ответ #5 : 21 Декабря 2017, 07:16:47 »
Спасибо!