Ссылка QoQ в CFSpreadsheet

Я унаследовал страницу, которая строит запрос инвентаризации из четырех таблиц и выводит их с QoQ:

<cfoutput query="getParts">
     <cfquery dbtype="query" name="jobdata">
       select *
       from getJobs
       where partnum = '#getparts.partnum#'
     </cfquery>
     <cfquery dbtype="query" name="orderdata">
       select *
       from getOrders
       where partnum = '#getparts.partnum#'
     </cfquery>
     <cfquery dbtype="query" name="receiptdata">
       select *
       from getIncoming
       where partnum = '#getparts.partnum#'
     </cfquery>

     <tr>
       <td>#partnum#</td>
       <td align="center">#partdescription#</td>
       <td align="center">#allocated#</td>
       <td align="center">#onhand#</td>
       <td align="center">#receiptdata.recqty#</td>
       <td align="center">#jobdata.JobCount#</td>
       <td align="center">#jobdata.QtyNeeded#</td>
       <td align="center">#jobdata.qtySent#</td>
       <td align="center">#orderdata.ordercount#</td>
       <td align="center">#orderdata.ordered#</td>
       <td align="center">#orderdata.shipqty#</td>
     </tr>
</cfoutput>

<cfset filenametouse = 'myFile' />
<cfset theDir = GetDirectoryFromPath(GetCurrentTemplatePath()) /> 
<cfset theFile = theDir & filenametouse & ".xls" /> 

<cflock name="fileActionSentItems" type="exclusive" timeout="30" throwontimeout="true">
<cfset SpreadsheetObj = spreadsheetNew()>
<cfset fcol = {}>
<cfset fcol.dataformat = "@">

<cfset SpreadsheetAddRow(SpreadsheetObj, "Part Number, Description, Allocated, On Hand, Pending Receipt, Job Count, Qty Needed, Qty Issued, Order Count, Qty Ordered, Qty Shipped")>

<cfset SpreadsheetAddRow(SpreadsheetObj,"NOT SURE HOW TO GET DATA HERE")>
<cfset SpreadsheetFormatColumn(SpreadsheetObj,fcol,11)>

<cfspreadsheet action="write" filename="#theFile#" name="SpreadsheetObj" sheetname="Sheet1" overwrite="true" />

Я не уверен, как ссылаться на данные для заполнения ячеек, поскольку они поступают из нескольких запросов. Переписать запрос в один было проблемой, и я пробую другой маршрут, чтобы увидеть, есть ли другой способ, которого я не вижу.


person aparker81    schedule 08.02.2012    source источник
comment
Re: Переписать запрос в один было непросто Просто любопытно, насколько сложны запросы к базе данных и сколько данных? Потому что запросы в цикле обычно являются последним средством, даже с QoQ.   -  person Leigh    schedule 09.02.2012
comment
Еще раз спасибо, Ли. Это исходные запросы. Я работал над объединением их всех, но далеко не продвинулся.   -  person aparker81    schedule 09.02.2012
comment
Похоже, что первые три объединяются по одному и тому же номеру детали и описанию. Попробуйте объединить их и посмотрите, правильно ли работают итоги. pastebin.com/Fxa0Xkj2   -  person Leigh    schedule 09.02.2012


Ответы (1)


Как насчет этого:

<cfset filenametouse = 'myFile' />
<cfset theDir = GetDirectoryFromPath(GetCurrentTemplatePath()) /> 
<cfset theFile = theDir & filenametouse & ".xls" /> 

<cflock name="fileActionSentItems" type="exclusive" timeout="30" throwontimeout="true">
<cfset SpreadsheetObj = spreadsheetNew()>
<cfset fcol = {}>
<cfset fcol.dataformat = "@">

<cfset SpreadsheetAddRow(SpreadsheetObj, "Part Number, Description, Allocated, On Hand, Pending Receipt, Job Count, Qty Needed, Qty Issued, Order Count, Qty Ordered, Qty Shipped")>

<cfoutput query="getParts">
     <cfquery dbtype="query" name="jobdata">
       select *
       from getJobs
       where partnum = '#getparts.partnum#'
     </cfquery>
     <cfquery dbtype="query" name="orderdata">
       select *
       from getOrders
       where partnum = '#getparts.partnum#'
     </cfquery>
     <cfquery dbtype="query" name="receiptdata">
       select *
       from getIncoming
       where partnum = '#getparts.partnum#'
     </cfquery>

     <!--- add all columns to an array --->
     <cfset aColumns = [ partdescription, receiptdata.recqty, jobdata.JobCount ] />

     <cfset SpreadsheetAddRow(SpreadsheetObj, ArrayToList(aColumns)) />
</cfoutput>

<cfspreadsheet action="write" filename="#theFile#" name="SpreadsheetObj" sheetname="Sheet1" overwrite="true" />
person Dan A.    schedule 08.02.2012