|
Условие в запросе | ☑ | ||
---|---|---|---|---|
0
kalisto
09.09.15
✎
02:14
|
Доброго времени суток.
Мне надо переделать отчет по Валовой прибыли. Суть проблемы в том, что мне надо данные для этого отчета брать из своего регистра при определенных условиях. Вот кусок запроса из отчета, в котором мне нужно прописать условие: РегистрНакопления.Продажи.Обороты(&ДатаНач, &ДатаКон, Регистратор, {(Организация).* КАК Организация, (Проект).* КАК Проект, (Подразделение).* КАК Подразделение, (Контрагент).* КАК Покупатель, (ДоговорКонтрагента).* КАК ДоговорПокупателя, (Номенклатура).* КАК Номенклатура, (ХарактеристикаНоменклатуры).* КАК ХарактеристикаНоменклатуры, (ЗаказПокупателя).* КАК ЗаказПокупателя}) КАК ПродажиОбороты | ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ | ПартииТоваровНаСкладах.Номенклатура КАК Номенклатура, | ПартииТоваровНаСкладах.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры, | ВЫБОР | КОГДА ПартииТоваровНаСкладах.ДокументДвижения <> НЕОПРЕДЕЛЕНО | ТОГДА ПартииТоваровНаСкладах.ДокументДвижения | ИНАЧЕ ПартииТоваровНаСкладах.Регистратор | КОНЕЦ КАК Регистратор, | СУММА(ВЫБОР | КОГДА ПартииТоваровНаСкладах.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход) | ТОГДА ПартииТоваровНаСкладах.Стоимость * -1 | ИНАЧЕ ПартииТоваровНаСкладах.Стоимость | КОНЕЦ) КАК СтоимостьОборот | ИЗ | РегистрНакопления.ПартииТоваровНаСкладах КАК ПартииТоваровНаСкладах | ГДЕ | ПартииТоваровНаСкладах.Период МЕЖДУ &ДатаНачала И &ДатаКонца | {ГДЕ | ПартииТоваровНаСкладах.Номенклатура.* КАК Номенклатура, | ПартииТоваровНаСкладах.ХарактеристикаНоменклатуры.* КАК ХарактеристикаНоменклатуры} | | СГРУППИРОВАТЬ ПО | ПартииТоваровНаСкладах.Номенклатура, | ПартииТоваровНаСкладах.ХарактеристикаНоменклатуры, | ВЫБОР | КОГДА ПартииТоваровНаСкладах.ДокументДвижения <> НЕОПРЕДЕЛЕНО | ТОГДА ПартииТоваровНаСкладах.ДокументДвижения | ИНАЧЕ ПартииТоваровНаСкладах.Регистратор | КОНЕЦ) КАК ТаблицаРегистраПродажиСебестоимость Мне нужно здесь встроить условие, что если документ оприходования в регистре ПартииТоваровНаСкладах это документ ОприходованиеТоваров, тогда обратиться нужно к другому регистру (собственный регистр, например Уценка), и оттуда выудить Стоимость и записать в СтоимостьОборот. |
|||
1
kalisto
09.09.15
✎
02:14
|
Подскажите пожалуйста, как это можно сделать.
|
|||
2
rphosts
09.09.15
✎
03:18
|
можно так:
Запрос.текст = СтрЗаменить(Запрос.текст, "ИсходныйРегистр", "ДругойРегистр") а можно так: Выбрать бла-бла-бла Из ИсходныйРегистр Где &ВыбиратьИзИсходногоРегистра Объединить ВСЕ Выбрать бла-бла-бла Из ДругойРегистр Где НЕ &ВыбиратьИзИсходногоРегистра |
|||
3
kalisto
09.09.15
✎
09:17
|
Спасибо. Попробую.
|
|||
4
kalisto
10.09.15
✎
00:51
|
То что подсказал rphosts не совсем подходит. Могу ли я использовать такую конструкцию (встроить ее в кусок кода, показанный выше):
СУММА( ВЫБОР | КОГДА ПартииТоваровНаСкладах.ДокументОприходования ССЫЛКА Документ.ОприходованиеТоваров | ТОГДА | (ВЫБРАТЬ | ПартииТоваровУценка.Номенклатура КАК НоменклатураУценка | ИЗ | РегистрНакопления.ПартииТоваровНаСкладахУценка КАК ПартииТоваровУценка | ГДЕ | ПартииТоваровУценка.Период МЕЖДУ &ДатаНачала И &ДатаКонца ) | | | | ИНАЧЕ | ВЫБОР | КОГДА ПартииТоваровНаСкладах.ВидДвижения = ЗНАЧЕНИЕ(ВидДвиженияНакопления.Приход) | ТОГДА ПартииТоваровНаСкладах.Стоимость * -1 | ИНАЧЕ ПартииТоваровНаСкладах.Стоимость | КОНЕЦ | КОНЕЦ | ) КАК СтоимостьОборот Сейчас программа ругается на такой код: Синтаксическая ошибка "ВЫБРАТЬ" (<<?>>ВЫБРАТЬ Подскажите, как правильно написать такое условие. Очень надо. |
|||
5
kalisto
10.09.15
✎
00:53
|
Правда, первое условие не дописано. Потом дополню его, как положено. Главное сейчас понять возможен такой вариант кода или нет.
|
|||
6
Franchiser
гуру
10.09.15
✎
01:00
|
В полях запроса 1с нельзя использовать другой запрос.
|
|||
7
kalisto
10.09.15
✎
01:04
|
Как же быть... Именно в этом месте нужно брать данные из регистра Уценка при условии, что документ оприходования - Оприходование товаров.
|
|||
8
palsergeich
10.09.15
✎
01:06
|
А если написать запрос, отладить, и разорвать строковой переменной, которая будет определятся до запроса? Типо какого
Исходный "ВЫБРАТЬ | Контакт.Ссылка |ИЗ | Документ.Контакт КАК Контакт" Преобразуем Если ЧешетсяПравоеУхо Тогда ИмяНужногоДокумента = "ПоступлениеТоваровИУслуг" Иначе ИмяНужногоДокумента = "ЗаказыПокупателей" КонецЕсли; "ВЫБРАТЬ | ДанныеИзРегистра.Ссылка |ИЗ | Документ."+ИмяНужногоДокумента+"КАК ДанныеИзРегистра"; так поступают в типовых |
|||
9
Franchiser
гуру
10.09.15
✎
01:07
|
Можешь попробовать такого рода конструкцию:
и ПартииТоваровНаСкладах.Номенклатура В (ВЫБРАТЬ ПартииТоваровУценка.Номенклатура КАК НоменклатураУценка ИЗ РегистрНакопления.ПартииТоваровНаСкладахУценка КАК ПартииТоваровУценка ГДЕ ПартииТоваровУценка.Период МЕЖДУ &ДатаНачала И &ДатаКонца ) |
|||
10
Franchiser
гуру
10.09.15
✎
01:08
|
(8) да, поступают
|
|||
11
Franchiser
гуру
10.09.15
✎
01:11
|
(8) только так ты дважды запрос собираешься запускать?
|
|||
12
Franchiser
гуру
10.09.15
✎
01:12
|
В типовых так делают для генерации текста запроса при обходе метаданных
|
|||
13
kalisto
10.09.15
✎
01:13
|
(9) вот эта конструкция больше подходит. Спасибо, сейчас попробую.
|
|||
14
palsergeich
10.09.15
✎
01:14
|
по постановки задачи скорее всего не подойдет
Запрос в текущем виде плохо читается( Нужно ставить тогда условие Выбор Когда Регистратор ССЫЛКА Документ.ОприходованиеТоваров Тогда Запрос1 Когда Регистратор ССЫЛКА Документ.Уценка тогда ВторойЗапрос Конец Но это ппц как не оптимально. Я бы переписал запрос.... |
|||
15
palsergeich
10.09.15
✎
01:19
|
Сделал бы объединение 2х запрсов где разделил бы записи по условию типа регистратора, Внутри этих запросов соединил бы с нужными реистрами. И все было бы Тип Топ.
|
|||
16
kalisto
10.09.15
✎
01:24
|
Мне-то фактически нужна не номенклатура, а стоимость. Это я решила попробовать сначала хоть что-нибудь выудить из Уценки. А Уценка - это регистр, из которого нужно выуживать стоимость (вместо ПартииТоваровНаСкладах.Стоимость), если в регистре ПартииТоваровНаСкладах партией является док Оприходование.
|
|||
17
kalisto
10.09.15
✎
01:29
|
Если бы там не было функции Сумма, было бы легче. Получается, что себестоимость сразу собирается из всех документов движения. И в итоге не разобрать, какая туда попала партия. Это почти стандартный отчет по Валовой прибыли, поэтому переделывать его много мороки.
|
|||
18
palsergeich
10.09.15
✎
01:35
|
а в чем сложность после объединения сгруппировать и просуммировать ресурс?
Наоборот будет проще - 1 ый запрос - Изначальный запрос остается без изменений, только условие по типу регистратора и без группировок, 2ой - Условие по типу регистратора и соединение с другим регистром. Поместить во Временную или во вложенный запрос и сгруппировать. А так получится ведро костылей, да еще и дико не оптимальное,которое тормозить все будет, и времени в 10 раз больше в итоге потратите, и поддерживать сложнее. |
|||
19
patria0muerte
10.09.15
✎
03:56
|
Я бы примерно так попробовал сделать
ВЫБРАТЬ ВЫБОР КОГДА ПартииТоваровНаСкладах.ДокументОприходования ССЫЛКА Документ.ОприходованиеТоваров ТОГДА ЕСТЬNULL(ПартииТоваровУценка.Стоимость,0) = 0 ИНАЧЕ ПартииТоваровНаСкладах.Стоимость КОНЕЦ КАК Стоимость ИЗ РегистрНакопления.ПартииТоваровНаСкладах КАК ПартииТоваровНаСкладах ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ПартииТоваровНаСкладахУценка КАК ПартииТоваровУценка ПО ПартииТоваровНаСкладах.ДокументОприходования = ПартииТоваровУценка.ДокументОприходования |
|||
20
patria0muerte
10.09.15
✎
03:59
|
Т.е. изначально джойнишь нужный регистр, а при выборе проверяешь тип ссылки и уже берешь нужную стоимость.
|
|||
21
kalisto
10.09.15
✎
23:04
|
(20) Спасибо, так и сделала.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |