DEF VAR str_eia AS CHAR. DEF VAR str_sql AS CHAR.

 DEF VAR n_par AS INT. DEF VAR par_1 AS CHAR.

 DEF VAR i AS INT. DEF VAR j AS INT. DEF VAR tblfld AS CHAR.

 DEF VAR ind AS LOG. DEF VAR simv AS CHAR.

 DEF VAR eia_gen AS CHAR. DEF VAR sql_gen AS CHAR.

 DEF VAR eia_tek AS CHAR. DEF VAR sql_new AS CHAR.

 DEF VAR sql_set AS CHAR. DEF VAR par_2 AS CHAR.

 

 str_eia = "Перечислить молочные продукты".

 

 str_sql =

 "select katalog.NAME  from katalog WHERE katalog.cod_good IN " + CHR(10) +

   "(select katalog.cod_good  from katalog, depart " +  CHR(10) +

              "where katalog.cod_dep = depart.cod_dep " +  CHR(10) +

                "and depart.name_dep = 'молочные продукты').".

 

  n_par = NUM-ENTRIES(str_sql, "~'").

  MESSAGE n_par {vab.i}. IF n_par < 2 THEN RETURN.

  par_1 = ENTRY(2, str_sql, "~'").  MESSAGE "par_1 =" par_1  {vab.i}.

 

  j = INDEX(str_sql,par_1) - 2.

  ind = YES. i = 0. tblfld = "".

  DO WHILE j > 0  AND ind :

   simv = SUBSTR(str_sql,j,1).

   IF simv = "=" THEN DO: i = 1. j = j - 1. NEXT. END.

   tblfld = simv + tblfld.

   /* MESSAGE "simv =" simv  "i =" i {vab.i}. */

   IF simv = " " THEN

    IF i < 2  THEN  DO: j = j - 1. NEXT. END.

    ELSE DO: ind = NO. NEXT. END.  

   j = j - 1. i = 2.

  END.

  MESSAGE "tblfld =" tblfld {vab.i}.

 

  eia_gen = REPLACE(str_eia, par_1, "@p_1").

  MESSAGE "eia_gen =" eia_gen {vab.i}.

  sql_gen = REPLACE(str_sql, par_1, "@p_1").

  MESSAGE "sql_gen =" SKIP sql_gen {vab.i}.

 

  str_eia = "Перечислить замороженные продукты".

  str_eia = "Перечислить Корма для животных,предметы ухода".

 

  par_1 = "?".

  FOR EACH depart:

   eia_tek = REPLACE(eia_gen, "@p_1", depart.name_dep).

   ind = str_eia MATCHES "*" + eia_tek + "*".

   IF NOT ind THEN NEXT.

   par_1 = depart.name_dep.

   LEAVE.

  END.

  

  MESSAGE "par_1 =" par_1 {vab.i}.

  sql_new = REPLACE(sql_gen, "@p_1", par_1).

  MESSAGE "sql_new =" SKIP sql_new {vab.i}.

 

  /* Перечислить молочные продукты, гастрономия, Бакалея,

     Кондитерские изделия, Соки и т.д., Табачные изделия 

     а как такое обощение ?

  */  

 

  sql_set = REPLACE(sql_gen, "= ~'@p_1~'", "IN (@p_2)").

  MESSAGE "sql_set =" SKIP sql_set {vab.i}.

  str_eia = "Перечислить молочные продукты, гастрономия, Бакалея,

     Кондитерские изделия, Соки и т.д., Табачные изделия, Консервация ".

 

  /* str_eia = "Табачные изделия ". */

 

 

  FOR EACH depart:

   IF NOT str_eia MATCHES "*" + depart.name_dep + "*" THEN NEXT.

   IF par_2 = "" THEN par_2 = "~'" + depart.name_dep + "~'".

   ELSE par_2 = par_2 + "," + "~'" + depart.name_dep + "~'".

  END.

 

  sql_new = REPLACE(sql_set, "@p_2", par_2).

  MESSAGE "sql_new =" SKIP sql_new {vab.i}. 

 

  OUTPUT TO eval_sql.p.

   PUT UNFORMATTED sql_new SKIP.

  OUTPUT CLOSE.

 

 

  /*

  COMPILE eval_sql.p NO-ERROR.

  IF ERROR-STATUS:ERROR THEN

   DO :

     MESSAGE "Ошибка N" ERROR-STATUS:GET-MESSAGE ( ERROR-STATUS:NUM-MESSAGES  )  {vab.i}.

   END.

  ELSE   MESSAGE "Успешная компиляция" {vab.i}.

  */

 

  Комментарии:  в   str_eia  задан ея-запрос , а в str_sql  его трансляция на SQL (пример).

 Автоматические формируемое обобщение этого примера заносится в  sql_new .