Deutsch
Germany.ruФорумы → Архив Досок→ Программирование

​Немножко вне рутины...

24.05.17 11:29
Re: ​Немножко вне рутины...
 
Murr патриот
Murr
в ответ AlexNek 23.05.17 22:56

Код то производит запись в поток, значит как раз то очень и относится.

-----

Код должен породить текст.

Вот тот текст, который порождается, меня интересует и интересует очень и очень сильно.

Именно то, какой текст будет порожден кодом и насколько сложно будет модифицировать

порождаемый код и составляет проблему.

То, как это будет реализовано технически - интересует только с позиции чтобы оно никак не

влияло на решение основной задачи.

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

еще как-то упоминать - это, несомненно, плюс.

Аналогично и по параметрам (тут не использовались) - если они НЕ болтаются под руками

- это тоже плюс.


Можно переписать немного по другому

-----

Можно. И даже - будет работать. Мало того - даже пару раз за последние полгода использовал

именно этот формат - нужно было обойти ошибку в подстановке значения с апострофами в

СКЛ. Но это было две строки на 1-1.5 мбайт шаблонов.


Вот два куска кода, делающие одно и то же:

VB


sql = "SELECT " & _

"TO_CHAR(fc.FC_BARCODE,'000000') ""bcd"", " & _

"fc.FC_BATCH_NO ""batchNo"", " & _

"fc.FC_SEQUENCE_NO ""seqNo"", " & _

"fc.FC_PANE_NO ""paneNo"", " & _

"fc.FC_GLAS_SEQ ""compNo"", " & _

"ps.PS_ORDER_NO ""orderNo"", " & _

"ps.PS_ORDER_POS ""itemNo"" " & _

"" & _

"FROM PRD_SEQ ps, PLAN_PARA pp, DAYBOOK db, FLOW_CTRL fc WHERE " & _

"" & _

"fc.FC_BATCH_NO=ps.PS_BATCH_NO AND " & _

"fc.FC_SEQUENCE_NO=ps.PS_SEQUENCE_NO AND " & _

"" & _

"ps.PS_ORDER_NO=db.DB_ORDER_NO AND " & _

"ps.PS_BATCH_NO BETWEEN db.DB_BATCH_NO_FROM AND db.DB_BATCH_NO_TO AND " & _

"" & _

"db.DB_MODE=pp.PP_NUMBER AND " & _

"DECODE(pp.PP_PURPOSE,3,1,4,1,0)=1 AND " & _

"" & _

"NOT EXISTS (" & _

"SELECT LBS_BCD " & _

"FROM C_LOG_BCD_STOCK WHERE " & _

"LBS_BCD=fc.FC_BARCODE AND " & _

"LBS_BATCH_NO=fc.FC_BATCH_NO AND " & _

"LBS_SEQUENCE_NO=fc.FC_SEQUENCE_NO" & _

") AND " & _

"" & _

"ps.PS_ORDER_NO=" & DRBcdStock.Item("orderNo").ToString & " AND " & _

"ps.PS_ORDER_POS=" & DRBcdStock.Item("itemNo").ToString & " AND " & _

"fc.FC_PANE_NO=" & DRBcdStock.Item("paneNo").ToString & " AND " & _

"fc.FC_GLAS_SEQ=" & DRBcdStock.Item("compNo").ToString & " " & _

"ORDER BY TO_CHAR(fc.FC_BARCODE,'000000')"

шаблон


<#@ template language="C#" inherits="Templates.Sql.TSqlTemplateBase" #>

<#@ assembly name="System.Core" #>

<#@ import namespace="System.Linq" #>

<#@ import namespace="System.Text" #>

<#@ import namespace="System.Collections.Generic" #>

SELECT

TO_CHAR(fc.FC_BARCODE,'000000') "bcd",

fc.FC_BATCH_NO "batchNo",

fc.FC_SEQUENCE_NO "seqNo",

fc.FC_PANE_NO "paneNo",

fc.FC_GLAS_SEQ "compNo",

ps.PS_ORDER_NO "orderNo",

ps.PS_ORDER_POS "itemNo"

FROM PRD_SEQ ps,

PLAN_PARA pp,

DAYBOOK db,

FLOW_CTRL fc

WHERE fc.FC_BATCH_NO = ps.PS_BATCH_NO

AND fc.FC_SEQUENCE_NO = ps.PS_SEQUENCE_NO

AND ps.PS_ORDER_NO = db.DB_ORDER_NO

AND ps.PS_BATCH_NO BETWEEN db.DB_BATCH_NO_FROM AND db.DB_BATCH_NO_TO

AND db.DB_MODE = pp.PP_NUMBER

AND DECODE(pp.PP_PURPOSE,3,1,4,1,0) = 1

AND NOT EXISTS (

SELECT LBS_BCD

FROM C_LOG_BCD_STOCK

WHERE LBS_BCD = fc.FC_BARCODE

AND LBS_BATCH_NO = fc.FC_BATCH_NO

AND LBS_SEQUENCE_NO = fc.FC_SEQUENCE_NO

)

AND ps.PS_ORDER_NO = <#= OrderNo #>

AND ps.PS_ORDER_POS = <#= ItemNo #>

AND fc.FC_PANE_NO = <#= PaneNo #>

AND fc.FC_GLAS_SEQ = <#= CompNo #>

ORDER BY TO_CHAR(fc.FC_BARCODE,'000000')

Какой из них проще?

И нахрена во втором писать каждую строку через writer.StoreData(...)?

Тем более, что это сделает компилятор...

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


<#@ template language="C#" inherits="Templates.Sql.TSqlTemplateBase" #>
<#@ assembly name="System.Core" #>
<#@ import namespace="System.Linq" #>
<#@ import namespace="System.Text" #>
<#@ import namespace="System.Collections.Generic" #>
<#
TAsql asql = new TASql();
#>
WITH A AS ( <#= asql.TransformText() #> )
SELECT * FROM A



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

ВБшный код, если нужен, сам нарисуешь.


а каждая Бэшка реализует интерфейс IStoreData

-----

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

 

Перейти на