Заказ звонка

Закрыть

*
*
*

Ошибка в отчете

Страницы: 1
RSS
Ошибка в отчете
Здравствуйте! Уважаемы разработчики, нужна ваша помощь.

Есть отчет, вот SQL код в нем:

--не существенная часть, тут просто вытягивается информация из стандартных таблиц

sel ect CQ.nmk_id, V_MANUFACTURING_PROCESSES.NOMENCLATURE_ITEM_NOTE
into #rasceh
fr om (%CurrentQuery%) CQ
left join V_VERSIONS on V_VERSIONS.NOMENCLATURE_ITEM_ID=CQ.NMK_ID and V_VERSIONS.VERSION_TYPE='T' and (V_VERSIONS.VERSION_STATE='0' or V_VERSIONS.VERSION_STATE='1')
left join V_MANUFACTURING_PROCESSES on V_MANUFACTURING_PROCESSES.VERSION_ID=V_VERSIONS.ID AND
V_MANUFACTURING_PROCESSES.VERSION_ID=V_VERSIONS.ID and V_MANUFACTURING_PROCESSES.CLASS_NOTE='РасЦех'

sel ect distinct CQ.VER_ID, CQ.NMK_CLASSIF_TYPE_NAME, CQ.NMK_NOTE + ' ' + CQ.NMK_NAME DD, RSPT.QUANTITY, V_MANUFACTURING_PROCESSES.NOMENCLATURE_ITEM_NAME,
massa.PARAMETER_VALUE mas, ed.MAT_MEASURE_NOTE, kdz.PARAMETER_VALUE kdz, nras.PARAMETER_VALUE nra, tehprim.PARAMETER_VALUE tehprim,
V_NOMENCLATURE.NOTE,
#rasceh.NOMENCLATURE_ITEM_NOTE + V_PROCESS_ITEM_REQUISITES.MAT_CONSUMER_SHOP_NUMBER + 'Сб' rasceh, CQ.QUANTITY quan2
, CLASSES.id, CQ.nmk_id
into #izdelie_info
fr om (%CurrentQuery%) CQ
LEFT JOIN REPORT_TOTALSPEC_TREE RSPT ON RSPT.NMK_ID = CQ.NMK_ID AND RSPT.VER_ID = CQ.VER_ID
LEFT JOIN V_NOMENCLATURE on V_NOMENCLATURE.ID=RSPT.PARENT_ID
left join V_VERSIONS on V_VERSIONS.NOMENCLATURE_ITEM_ID=CQ.NMK_ID and V_VERSIONS.VERSION_TYPE='T' and (V_VERSIONS.VERSION_STATE='0' or V_VERSIONS.VERSION_STATE='1')
left join V_MANUFACTURING_PROCESSES on V_MANUFACTURING_PROCESSES.VERSION_ID=V_VERSIONS.ID AND
V_MANUFACTURING_PROCESSES.VERSION_ID=V_VERSIONS.ID
and (V_MANUFACTURING_PROCESSES.CLASS_NOTE='М' or V_MANUFACTURING_PROCESSES.CLASS_NOTE='СТД' or V_MANUFACTURING_PROCESSES.CLASS_NOTE='ДопМ')
left join V_PROCESS_ITEM_REQUISITES ed on ed.PROCESS_ITEM_ID=V_MANUFACTURING_PROCESSES.PROCESS_ITEM_ID
left join V_NOMENCLATURE_PARAMETERS massa on massa.NOMENCLATURE_ITEM_ID=CQ.NMK_ID and massa.PARAMETER_UNIQUE_CODE='NMZ_MASSDE'
left join V_PROCESSES_PARAMETERS kdz on kdz.PROCESS_ITEM_ID=V_MANUFACTURING_PROCESSES.PROCESS_ITEM_ID and kdz.PARAMETER_UNIQUE_CODE='TCS_MZ_KDZ'
left join V_PROCESSES_PARAMETERS nras on nras.PROCESS_ITEM_ID=V_MANUFACTURING_PROCESSES.PROCESS_ITEM_ID and nras.PARAMETER_UNIQUE_CODE='TCS_MZ_NR'
left join V_PROCESSES_PARAMETERS tehprim on tehprim.PROCESS_ITEM_ID=V_MANUFACTURING_PROCESSES.PROCESS_ITEM_ID and tehprim.PARAMETER_UNIQUE_CODE='GUID2140'
left join #rasceh on #rasceh.nmk_id=CQ.nmk_id
left join V_VERSIONS vs on vs.NOMENCLATURE_ITEM_ID=V_NOMENCLATURE.ID and vs.VERSION_TYPE='T' and (vs.VERSION_STATE='0' or vs.VERSION_STATE='1')
left join V_MANUFACTURING_PROCESSES tp on tp.VERSION_ID=vs.ID AND
tp.VERSION_ID=vs.ID and tp.CLASS_NOTE='РасЦех'
left join V_PROCESS_ITEM_REQUISITES on V_PROCESS_ITEM_REQUISITES.PROCESS_ITEM_ID=V_MANUFACTURING_PROCESSES.PROCESS_ITEM_ID
left join dbo.CLASSES on dbo.CLASSES.class=CQ.NMK_CLASSIF_TYPE_NAME collate Cyrillic_General_CI_AS
where CQ.NMK_CLASSIF_TYPE_NOTE IN('ДЕ', 'СТД')
order by CLASSES.id, CQ.NMK_NOTE + ' ' + CQ.NMK_NAME
dr op table #rasceh

sel ect distinct 'id_' + cast(v_versions.nomenclature_item_id as varchar) id, v_nomenclature.note + ' ' + v_nomenclature.name note
into #id_izdeliya
fr om (%CurrentQuery%) CQ
left join v_versions on v_versions.id = CQ.ver_id
left join v_nomenclature on v_nomenclature.id = v_versions.nomenclature_item_id

--В БД есть созданная мной таблица, которая хранит такие же данные которые генерируются кодом выше. Весь смысл в том чтобы сравнить вновь вытянутые данные с теми которые уже хранятся. Дальше написал код который проверяет существуют ли записи с такой версией в той таблице, если нет - заливает их, есть - сравнивает старые записи с новыми, на основе этого записывает в таблицу result_izv_OGT результаты сравнения, затем затирает записи в созданной мной таблице __OGT_izvesheniya, и на их место пишет новые (читай новую информацию).

declare @flag int
declare @version int
sel ect @version = ver_id fr om #izdelie_info
delete result_izv_OGT
sel ect @flag = count(*) fr om __OGT_izvesheniya where ver_id = @version
sel ect @flag

if @flag > 0
begin
declare @sql varchar(5000)
set @sql = 'ins ert into result_izv_OGT sel ect * fr om (
sel ect izdinf.nmk_classif_type_name, izdinf.dd, izdinf.quantity new_quan, oldinf.quantity old_quan,
izdinf.nomenclature_item_name new_material, oldinf.nomenclature_item_name old_material,
izdinf.mas new_mas, oldinf.mas old_mas, izdinf.mat_measure_note, izdinf.kdz new_kdz, oldinf.kdz old_kdz,
izdinf.nra new_nra, oldinf.nra old_nra, izdinf.tehprim new_tehprim, oldinf.tehprim old_tehprim,
izdinf.note, izdinf.rasceh new_rasceh, izdinf.rasceh old_rasceh, izdinf.quan2 new_quan2, oldinf.quan2 old_quan2, izdinf.id, izdinf.nmk_id
from #izdelie_info izdinf
left join __OGT_izvesheniya oldinf on oldinf.ver_id = izdinf.ver_id and oldinf.nmk_id = izdinf.nmk_id
wh ere (oldinf.quantity <> izdinf.quantity) or (oldinf.nomenclature_item_name <> izdinf.nomenclature_item_name)
or (oldinf.mas <> izdinf.mas) or (oldinf.kdz <> izdinf.kdz) or (oldinf.nra <> izdinf.nra) or
(oldinf.tehprim <> izdinf.tehprim) or (oldinf.rasceh <> izdinf.rasceh) or (oldinf.quan2 <> izdinf.quan2)
uni on all
sel ect nmk_classif_type_name,''Удалена: '' + dd, quantity, null, nomenclature_item_name, null, mas, null,
mat_measure_note, kdz, null, nra, null, tehprim, null, note, rasceh, null, quan2, null, id, nmk_id
from __OGT_izvesheniya izv wh ere nmk_id not in (sel ect distinct nmk_id fr om #izdelie_info) and izv.ver_id = (select distinct ver_id fr om #izdelie_info)
uni on all
select nmk_classif_type_name, ''Добавлена: '' + dd, quantity, null, nomenclature_item_name, null, mas, null,
mat_measure_note, kdz, null, nra, null, tehprim, null, note, rasceh, null, quan2, null, id, nmk_id
fr om #izdelie_info wh ere #izdelie_info.nmk_id not in (select distinct __OGT_izvesheniya.nmk_id fr om __OGT_izvesheniya wh ere ver_id =
(select distinct ver_id fr om #izdelie_info))) res'
ex ec(@sql)
set @sql = 'delete fr om __OGT_izvesheniya wh ere ver_id = (select distinct ver_id fr om #izdelie_info)'
ex ec(@sql)
set @sql = 'ins ert into __OGT_izvesheniya sel ect * fr om #izdelie_info'
ex ec(@sql)
end
else
begin
declare @sql2 varchar(5000)
se t @sql2 = 'ins ert in to __OGT_izvesheniya sel ect * fr om #izdelie_info'
ex ec(@sql2)
end

--после всего этого из таблицы "результат" вытягиваются записи для вывода на бланк
sel ect result_izv_OGT.*, izd.note fr om result_izv_OGT, #id_izdeliya izd

Надеюсь объяснил все понятно. Проблема в чем. Если весь этот код лежит в бланке ошибки не возникает, однако на лист не выходит ни одной записи, причем все операторы отрабатывают как надо, записи в таблицах сравниваются, перезаписываются и т.д.
Если же выполнить весь код в студии, а в бланке оставить только:
select * fr om result_izv_OGT
То бланк заполняется записями. Из этого сделал вывод что последний оператор select в коде каким-то образом не прочитывается. Подскажите как решить эту проблему? Заранее благодарен.

PS: самих комментариев -- в коде бланка разумеется нет.
Изменено: Роман Серов - 06.12.2012 08:53:15
Предположу, что репортер выполняет только запросы выбора данных, ну и установлены ли права доступа к таблице пользователю репортера?
Права были, насчет выбора данных мб вы и правы. Нашел решение без хранимых процедур, скажу лишь что операторы delete и insert отрабатывают без проблем. Тем не менее, большое спасибо за помощь smile:)
Страницы: 1
Читают тему (гостей: 1, пользователей: 0, из них скрытых: 0)