Имя: Пароль:
1C
1С v8
Связи в запросе
,
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) Рад помочь