10.02.2012 06:46
Danil_
 
Пришло ТЗ для редактирования документа ТОРГ-2 в приходящих накладных

Цитата:
на 1 стр. не проставляется № товарной накладной, дата.
№ счет-фактуры, дата.

В строке Грузоотправитель нужно , чтобы машина подтягивала физический
адрес поставщика( из раздела контрагенты)
Таблица, с которой берутся все данные для supermag.SVSpecNaclRep, но там нет поля с интересующими нас данными.
Они есть в таблице supermag.smwaybillsin. В поле SUPPLIERDOC - Накладная поставщика, SUPPLIERINVOICE - Счет-фактура поставщика.
Как мне связать эти таблицы в запросе? По каким ключам или через какие промежуточные таблицы?
Я еще не разобрался до конца в супермаговской структуре.
10.02.2012 08:11
Mtirt
 
Мне оказалось сложным понять, что вы реально хотите?
Научить вас писать любые запросы?
Написать за вас этот конкретный запрос?
10.02.2012 08:34
Danil_
 
Запросы уметь писаю, слава богу.
И что такое примари кей тоже знаю.
И даже что такое джоин знаю и пользовался.
Можете написать конкретно этот запрос, подсказать по какому ключу связать.
10.02.2012 08:38
Mtirt
 
Ключ - номер(id или docid) и тип документа (doctype).
13.02.2012 05:10
Danil_
 
Что было:

Код:
SELECT s.displayitem displayitem, 
s.ARTICLE ARTICLE, 
s.NAME NAME, 
s.SPECITEM SPECITEM, 
round(s.QuantByDoc,-s.Prec)  QUANTBYDOC, 
s.REASON REASON,
round(s.itemprice,:P_Prec) itemprice, 
round(s.quantity,-s.Prec) quantity_fact,
s.MESABBREV MESABBREV,
s.Prec Prec,
round(s.TotalPrice,:P_Prec) TotalPrice_fact,
round(nvl(t.TotalPrice,0),:P_Prec) TotalPrice_doc       
FROM supermag.SVSpecNaclRep s, supermag.TTPrintNacl t
WHERE s.DOCID = :P_DOC_ID
     AND s.DOCTYPE = :P_DOC_TYPE
     and t.doctype(+)=s.doctype
     and t.docid(+)=s.docid
     and t.specitem(+)=s.specitem
 and s.Quantity!=nvl(t.Quantity,0)
ORDER BY &P_SORT,s.displayitem

Что стало:
Код:
SELECT s.displayitem displayitem, 
s.ARTICLE ARTICLE, 
s.NAME NAME, 
s.SPECITEM SPECITEM, 
round(s.QuantByDoc,-s.Prec)  QUANTBYDOC, 
s.REASON REASON,
round(s.itemprice,:P_Prec) itemprice, 
round(s.quantity,-s.Prec) quantity_fact,
s.MESABBREV MESABBREV,
s.Prec Prec,
round(s.TotalPrice,:P_Prec) TotalPrice_fact,
round(nvl(t.TotalPrice,0),:P_Prec) TotalPrice_doc,
sm.supplierdoc supplierdoc, -- добавил накладную поставщика
sm.supplierinvoice, -- добавил счет-фактуру поставщика
sm.supplinvoicecreate -- добавил дату создания счет-фактуры
FROM supermag.SVSpecNaclRep s, supermag.TTPrintNacl t, supermag.smwaybillsin sm -- добавил таблицу
WHERE s.DOCID = :P_DOC_ID
     AND s.DOCTYPE = :P_DOC_TYPE
     and t.doctype(+)=s.doctype
     and t.docid(+)=s.docid
     and t.specitem(+)=s.specitem 
     and t.docid = sm.id -- добавил
     and t.doctype = sm.doctype -- добавил
 and s.Quantity!=nvl(t.Quantity,0)
ORDER BY &P_SORT,s.displayitem
Меня интересуют 2 последних "добавил". Вы ведь это имели ввиду, связать по двум ключам?
13.02.2012 06:13
Danil_
 
Опечатка
Код:
     and t.docid = sm.id -- добавил
     and t.doctype = sm.doctype -- добавил
а надо

Код:
     and s.docid = sm.id -- добавил
     and s.doctype = sm.doctype -- добавил
13.02.2012 07:13
Mtirt
 
Результат тебя устраивает? Значит связал правильно.
13.02.2012 07:39
Danil_
 
1. Просто, как я понял, вы посоветовали связать по двум ключам, что я и сделал. Но я не очень понимаю зачем именно по двум ключам надо было связать.

2. При выполнении в супермаге мой измененный отчет ТОРГ-2 выдает ошибку

REP-1213: Поле 'F_SUPPLIERDOC' ссылается на столбец 'supplierdoc' с частотой ниже его группы.

Вот запрос мною написанный для этого значения
Код:
function CF_SUPPLIERDOCFormula return Char is
SUPPLIERDOC supermag.smwaybillsin.supplierdoc%type;
begin
	select
	sm.supplierdoc into SUPPLIERDOC
	from
	supermag.smwaybillsin sm
	where
	sm.id=:P_DOC_ID and sm.doctype=:P_DOC_TYPE;
	return  
	(SUPPLIERDOC);
	exception
	when others then return '';
end;
Скрин схемы отчета, запросов и функций


Что еще нужно проверить и посмотреть, чтобы устранить ошибку пункта 2?

Добавлено через 1 минуту 37 секунд
Как ее исправить?
13.02.2012 07:49
Mtirt
 
У меня идиотский вопрос.
Зачем делать отдельное вычисляемое поле, если ты переделал исходных запрос для получения этих-же данных?
13.02.2012 07:56
Danil_
 
Затем что с репорт билдером я первый месяц работаю и у меня просто нет опыта.
Подскажите, пожалуйста, как правильно, потому что я признаю, что я полный 0 в работе с репортом, но очень хочу набраться опыта.
Часовой пояс GMT +3, время: 10:26.

Форум на базе vBulletin®
Copyright © Jelsoft Enterprises Ltd.
В случае заимствования информации гипертекстовая индексируемая ссылка на Форум обязательна.