|
Связи в запросе | ☑ | ||
---|---|---|---|---|
0
jyupiter
24.06.16
✎
08:00
|
Комплексная автоматизация 1,1 на платформе 8,2.
РАУЗ подключен. В документе "Списание товаров" цена не указывается непосредственно, а сумма рассчитывается по регистру "Учёт затрат (упр)" в процессе проведения документа. Есть отчёт по списаниям, на основе анализа этого регистра. К отчёту нужно прикрутить цену товара на дату документа (чтобы можно было сравнить с расчётной ценой). Это практически сделано, но остался последний момент: в запросе надо установить связь между Номенклатурой из регистра сведений "Цены номенклатуры" и Затратой из регистра сведений "Аналитика учёта затрат." Но конструктор запроса эту связь установить не даёт, потому что она противоречит другой связи, "Цен номенклатуры" и "Учёта затрат (упр)" по Периоду. Игра с галочками (поставить/убрать) не помогла, противоречие сохраняется при любом их наборе. Есть ли какая-то возможность связать "Учёт затрат (упр)" и "Цены номенклатуры" по Номенклатуре? |
|||
1
4St
24.06.16
✎
08:22
|
Например, пакетный запрос с временными таблицами
|
|||
2
jyupiter
24.06.16
✎
09:03
|
Если это ответ, то он мне непонятен.
У меня и так запрос с временной таблицей. Но из-за того, что я не могу сообразить, как в этом запросе связать Аналитику учета затрат из рег.накопления "Учёт затрат" с Номенклатурой из рег.сведений "Цены номенклатуры", запрос делается в сто раз дольше |
|||
3
novichok79
24.06.16
✎
09:19
|
может быть использовать вложенные запросы для каждой связи, чтобы не возникало конфликта при установке связей между таблицами?
|
|||
4
aleks_default
24.06.16
✎
09:22
|
все там возможно.
Виды связи какие ВЕУТРЕННИЕ? ЛЕВЫЕ? в условии связи двух таблиц можно указывать поле из третьей Короче, покажи запрос. |
|||
5
sash-ml
24.06.16
✎
09:24
|
поменяй местами левую и правую таблицу в последней связи, либо добавь еще одну таблицу "Цены номенклатуры2"
|
|||
6
jyupiter
24.06.16
✎
10:56
|
Текст запроса
"ВЫБРАТЬ РАЗРЕШЕННЫЕ | УчетЗатратОбороты.КоличествоРасход КАК Количество, | ВЫБОР | КОГДА АналитикаУчетаЗатратРС.Затрата.ЕдиницаИзмеренияМест.Коэффициент = 0 | ТОГДА 0 | ИНАЧЕ ВЫРАЗИТЬ(УчетЗатратОбороты.КоличествоРасход / АналитикаУчетаЗатратРС.Затрата.ЕдиницаИзмеренияМест.Коэффициент КАК ЧИСЛО(10, 2)) | КОНЕЦ КАК КоличествоМест, | УчетЗатратОбороты.СтоимостьРасход КАК Сумма, | ЗначенияСвойствОбъектов.Значение КАК ПричинаСписания, | УчетЗатратОбороты.Регистратор КАК Регистратор, | УчетЗатратОбороты.Регистратор.Дата КАК РегистраторДата, | АналитикаУчетаЗатратРС.Затрата КАК Номенклатура, | АналитикаВидаУчетаРС.Склад КАК Склад, | АналитикаУчетаЗатратРС.Затрата.Проект КАК Проект, | АналитикаВидаУчетаБУ.Организация КАК Организация, | МАКСИМУМ(ЦеныНоменклатуры.Период) КАК ДатаЦены, | ВЫБОР | КОГДА УчетЗатратОбороты.КоличествоРасход = 0 | ТОГДА 0 | ИНАЧЕ ВЫРАЗИТЬ(УчетЗатратОбороты.СтоимостьРасход / УчетЗатратОбороты.КоличествоРасход КАК ЧИСЛО(10, 2)) | КОНЕЦ КАК ЦенаРасчетная |ПОМЕСТИТЬ ВТ_Данные |ИЗ | РегистрНакопления.УчетЗатрат.Обороты(&НачПериода, &КонПериода, Регистратор, ) КАК УчетЗатратОбороты | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АналитикаУчетаЗатрат КАК АналитикаУчетаЗатратРС | ПО УчетЗатратОбороты.АналитикаУчетаЗатрат = АналитикаУчетаЗатратРС.Ссылка | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АналитикаВидаУчета КАК АналитикаВидаУчетаРС | ПО УчетЗатратОбороты.АналитикаВидаУчета = АналитикаВидаУчетаРС.Ссылка | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов | ПО УчетЗатратОбороты.Регистратор = ЗначенияСвойствОбъектов.Объект | И (ЗначенияСвойствОбъектов.Свойство.Наименование = ""Списание - Причина списания"") | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.УчетЗатратРегл.Обороты(&НачПериода, &КонПериода, Регистратор, ) КАК УчетЗатратРеглОбороты | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.АналитикаВидаУчета КАК АналитикаВидаУчетаБУ | ПО УчетЗатратРеглОбороты.АналитикаВидаУчета = АналитикаВидаУчетаБУ.Ссылка | ПО УчетЗатратОбороты.Регистратор = УчетЗатратРеглОбороты.Регистратор | И УчетЗатратОбороты.АналитикаУчетаЗатрат = УчетЗатратРеглОбороты.АналитикаУчетаЗатрат | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры | ПО УчетЗатратОбороты.Период >= ЦеныНоменклатуры.Период |ГДЕ | УчетЗатратОбороты.Регистратор ССЫЛКА Документ.СписаниеТоваров | И ВЫБОР | КОГДА &ЕстьНоменклатура | ТОГДА АналитикаУчетаЗатратРС.Затрата В ИЕРАРХИИ (&Номенклатура) | ИНАЧЕ ИСТИНА | КОНЕЦ | И ВЫБОР | КОГДА &ЕстьПроект | ТОГДА АналитикаУчетаЗатратРС.Затрата.Проект В (&Проект) | ИНАЧЕ ИСТИНА | КОНЕЦ | И ВЫБОР | КОГДА &ЕстьСклад | ТОГДА АналитикаВидаУчетаРС.Склад В (&Склад) | ИНАЧЕ ИСТИНА | КОНЕЦ | И ВЫБОР | КОГДА &ЕстьПричина | ТОГДА ЗначенияСвойствОбъектов.Значение = &ПричинаСписания | ИНАЧЕ ИСТИНА | КОНЕЦ | И ВЫБОР | КОГДА &ЕстьОрганизация | ТОГДА АналитикаВидаУчетаБУ.Организация В ИЕРАРХИИ (&Организация) | ИНАЧЕ ИСТИНА | КОНЕЦ | И ЦеныНоменклатуры.ТипЦен = &Закупочные | |СГРУППИРОВАТЬ ПО | УчетЗатратОбороты.КоличествоРасход, | УчетЗатратОбороты.СтоимостьРасход, | ЗначенияСвойствОбъектов.Значение, | УчетЗатратОбороты.Регистратор, | АналитикаУчетаЗатратРС.Затрата, | АналитикаВидаУчетаРС.Склад, | АналитикаУчетаЗатратРС.Затрата.Проект, | АналитикаВидаУчетаБУ.Организация, | ВЫБОР | КОГДА АналитикаУчетаЗатратРС.Затрата.ЕдиницаИзмеренияМест.Коэффициент = 0 | ТОГДА 0 | ИНАЧЕ ВЫРАЗИТЬ(УчетЗатратОбороты.КоличествоРасход / АналитикаУчетаЗатратРС.Затрата.ЕдиницаИзмеренияМест.Коэффициент КАК ЧИСЛО(10, 2)) | КОНЕЦ, | УчетЗатратОбороты.Регистратор.Дата |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ РАЗЛИЧНЫЕ | ВТ_Данные.Количество КАК Количество, | ВТ_Данные.КоличествоМест КАК КоличествоМест, | ВТ_Данные.Сумма КАК Сумма, | ВТ_Данные.ПричинаСписания КАК ПричинаСписания, | ВТ_Данные.Регистратор КАК Регистратор, | ВТ_Данные.РегистраторДата, | ВТ_Данные.Номенклатура, | ВТ_Данные.Склад КАК Склад, | ВТ_Данные.Проект КАК Проект, | ВТ_Данные.Организация, | ВТ_Данные.ДатаЦены, | ВТ_Данные.ЦенаРасчетная, | ЦеныНоменклатуры.Цена КАК ЦенаЗакупочная |ИЗ | ВТ_Данные КАК ВТ_Данные | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры | ПО ВТ_Данные.Номенклатура = ЦеныНоменклатуры.Номенклатура | И ВТ_Данные.ДатаЦены = ЦеныНоменклатуры.Период |ГДЕ | ЦеныНоменклатуры.ТипЦен = &Закупочные | |УПОРЯДОЧИТЬ ПО | ВТ_Данные.Организация, | ВТ_Данные.Склад, | ВТ_Данные.ПричинаСписания, | ВТ_Данные.Проект, | ВТ_Данные.РегистраторДата |ИТОГИ | СУММА(Количество), | СУММА(КоличествоМест), | СУММА(Сумма) |ПО | ОБЩИЕ, | Склад, | ПричинаСписания, | Проект, | Регистратор |АВТОУПОРЯДОЧИВАНИЕ" |
|||
7
jyupiter
24.06.16
✎
11:00
|
(5) пробовал менять всякое туда-сюда, безуспешно
(3) не понимаю, как это сделать |
|||
8
AceVi
24.06.16
✎
11:35
|
(7) Делай не так.
Вместо ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры КАК ЦеныНоменклатуры | ПО УчетЗатратОбороты.Период >= ЦеныНоменклатуры.Период в первом запросе - убери его вообще. И сделай как положено во втором запросе в подзапросе получи ДатуСрезаПоследнего из ЦеныНоменклатуры по ВТ_Данные .Период. Тогда не будет ругаться и все сделает как надо. Ты знаешь как делать стандартный срез последних на дату в запросе? |
|||
9
4St
24.06.16
✎
12:27
|
(2) В первом запросе идет связь 7 таблиц. Это много, тяжело для понимания и непредсказуемо при выполнении (как оптимизатору в SQL понравится, так и сделает, там происходит магия). В таких случаях удобнее разбивать большой запрос на отдельные, каждый из которых будет давать простой, понятный и предсказуемый результат.
Одна из задач, которую выполняет данный запрос, звучит так: "связать РегистрНакопления.УчетЗатрат.Обороты и РегистрСведений.ЦеныНоменклатуры" (.СрезПоследних?) по номенклатуре, но в РН "УчетЗатрат" есть только ссылка на справочник "КлючиАналитикиЧеготоТам"". Поэтому первым делом я бы соединил РегистрНакопления.УчетЗатрат.Обороты и РегистрСведений.АналитикаУчетаЗатрат, получив таким образом колонку "Номенклатура" в полученной временной таблице. Эту ВТ уже соединял бы с остальными регистрами, предварительно проиндексировав по полям связи. |
|||
10
jyupiter
24.06.16
✎
12:33
|
Спасибо за идеи, я попробую
|
|||
11
jyupiter
27.06.16
✎
03:04
|
(9) Да, так всё прекрасно получилось, большое спасибо
|
|||
12
4St
27.06.16
✎
08:04
|
(11) Рад помочь
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |