Форум на Kuban.ru (http://forums.kuban.ru/)
-   Территория 1С (http://forums.kuban.ru/f1544/)
-   -   1С 8.1 Помогите привести запрос в человеческий вид (http://forums.kuban.ru/f1544/1s_8_1_pomogite_privesti_zapros_v_chelovecheskij_vid-5163490.html)

Путевый лист 16.12.2013 17:38

1С 8.1 Помогите привести запрос в человеческий вид
 
ВЫБРАТЬ Различные
ИнформационныеКарты.Ссылка,
ИнформационныеКарты.Представление,
ИнформационныеКарты.ВладелецКарты.Ссылка,
ИнформационныеКарты.ВладелецКарты.Представление,
ПродажиПоДисконтнымКартамОбороты.ДисконтнаяКарта,
ПРЕДСТАВЛЕНИЕ(ПродажиПоДисконтнымКартамОбороты.ДисконтнаяКарта),
СУММА(ПродажиПоДисконтнымКартамОбороты.СуммаОборот) КАК СуммаОборот
ИЗ
РегистрНакопления.ПродажиПоДисконтнымКартам.Обороты КАК ПродажиПоДисконтнымКартамОбороты
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ИнформационныеКарты КАК ИнформационныеКарты
ПО ПродажиПоДисконтнымКартамОбороты.ДисконтнаяКарта = ИнформационныеКарты.Ссылка

СГРУППИРОВАТЬ ПО
ИнформационныеКарты.Ссылка,
ИнформационныеКарты.Представление,
ИнформационныеКарты.ВладелецКарты.Ссылка,
ИнформационныеКарты.ВладелецКарты.Представление,
ПродажиПоДисконтнымКартамОбороты.ДисконтнаяКарта

Вот такой запрос сделал я в консоли отчетов. Но мне кажется что до фига лишнего.
Мне надо было по регистру найти обороты всех дисконтных карт, но так чтобы Владелец карты был не пустой (Владелец карты это и реквизит карты и измерения регистра) а потом найти количество документов продажи по каждой карте и последний документ продажи по каждой карте

Ёпрст 16.12.2013 18:20

Ну разве что, выкинуть левое соединение и прописать все через точку в селект листе, что монопенисуально будет, только текст запроса короче будет.

Ёпрст 16.12.2013 18:20

+ выкинуть Различные из текста запроса.

Reaper 16.12.2013 19:00

+ выкинуть группировку

Путевый лист 16.12.2013 19:08

Да просто выкинуть весь запрос и переписать на 7-ку :(
Спасибо, вот только мне казалось что надо к Информационные Карты Левое Соединение регистр. Вот Левое соединение в 7-ке аналог имеет?

angro 16.12.2013 19:40

ВЫБРАТЬ
ИнформационныеКарты.Ссылка,
ИнформационныеКарты.Ссылка.Представление,
ИнформационныеКарты.Ссылка.ВладелецКарты,
ИнформационныеКарты.Ссылка.ВладелецКарты.Представление,
ПродажиПоДисконтнымКартамОбороты.Ссылка.ДисконтнаяКарта,
ПРЕДСТАВЛЕНИЕ(ПродажиПоДисконтнымКартамОбороты.Ссылка.ДисконтнаяКарта),
СУММА(ПродажиПоДисконтнымКартамОбороты.СуммаОборот ) КАК СуммаОборот
ИЗ
РегистрНакопления.ПродажиПоДисконтнымКартам.Обороты(,, ИнформационныеКарты.Ссылка.ВладелецКарты = Значение(Справочник.ХХХ.ПустаяСсылка)) КАК ПродажиПоДисконтнымКартамОбороты

как-то так

Путевый лист 16.12.2013 21:29

Спасибо всем откликнувшимся. я понимаю так, что как и в 7-ном запросе, в 8-ном запросе есть поля которые в группировках не участвуют и есть которые участвуют. и есть какие-то варианты выгрузки в ТЗ, в которых негруппировочные поял могут использоваться а могут и не использоваться

Reaper 16.12.2013 21:59

6-Путевый лист > Нет. Забудь хоккейные запросы, у них нет ничего общего с SQL-подобным языком 8ки.

Путевый лист 17.12.2013 09:47

Перестроил запрос с помощью Добрых людей, самолично вставил конструкцию
|КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ПродажиПоДисконтнымКартамОбороты.Регистратор) Когда (ПродажиПоДисконтнымКартамОбороты.Регистратор ССЫЛКА Документ.ОтчетОРозничныхПродажах)
а она работать не хочет. Понятно что ошибка, но то ли в синтаксисе запроса то ли в логике. Подскажите пожалуйста

Путевый лист 17.12.2013 09:48

Не работает когда добавил
Когда (ПродажиПоДисконтнымКартамОбороты.Регистратор ССЫЛКА Документ.ОтчетОРозничныхПродажах)

Jimbo 17.12.2013 09:56

в обороты(,,регистратор) - добавь

Путевый лист 17.12.2013 10:05

(10) Есть такое. Просто Конструкция "Когда" не верная видимо, там же надо вроде как "Выбор Когда" как-то так

Jimbo 17.12.2013 10:44

ВЫБРАТЬ
ПродажиПоДисконтнымКартамОбороты.ДисконтнаяКарта,
КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ПродажиПоДисконтнымКартамОбороты.Регистратор) КАК КоличествоДокументов,
СУММА( ВЫБОР КОГДА (Регистратор ССЫЛКА Документ.ОтчетОРозничныхПродажах)
тогда
ПродажиПоДисконтнымКартамОбороты.СуммаОборот
иначе 0 конец ) КАК СуммаОборот
ИЗ
РегистрНакопления.ПродажиПоДисконтнымКартам.Обороты(, , Регистратор,
ВладелецДисконтнойКарты <> NULL ) КАК ПродажиПоДисконтнымКартамОбороты

СГРУППИРОВАТЬ ПО
ПродажиПоДисконтнымКартамОбороты.ДисконтнаяКарта

Jimbo 17.12.2013 10:45

последний документ вторым запросом нуна искать

Путевый лист 17.12.2013 11:04

(12,13) Мне надо посчитать именно количество документов-регистраторов одного типа. А вот сумма мне нужна по всем регистраторам.
То есть Выбор Когда Тогда Иначе Конец мне как раз нужен для расчета именно количества документов

Jimbo 17.12.2013 12:40

так и подыми Количество ( ВЫБОР ... )

Путевый лист 17.12.2013 12:50

(15) Так а что писать вместо ПродажиПоДисконтнымКартамОбороты.СуммаОборот??? Ведь это ж количество документов а не суммы. Вот здесь я и затупил

Путевый лист 17.12.2013 13:07

(15) По логике должно быть так:

Путевый лист 17.12.2013 13:14

(15) Количество(Различные ВЫБОР КОГДА (Регистратор ССЫЛКА Документ.ОтчетОРозничныхПродажах)
тогда 1 иначе 0 конец ) КАК КоличествоДокументов

Хотел так - но дало везде 1 значит после Тогда что должно быть для Количества???

Путевый лист 17.12.2013 13:28

(15) Jimbo - Если убрать Различные тогда дает все количество по всем типам регистратора а не по одному как мне нужно

Jimbo 17.12.2013 13:44

КОЛИЧЕСТВО( ВЫБОР КОГДА (Регистратор ССЫЛКА Документ.ОтчетОРозничныхПродажах)
тогда
РАЗЛИЧНЫЕ ПродажиПоДисконтнымКартамОбороты.Регистратор
иначе 0 конец ) КАК КоличествоДокументов,

СУММА( ПродажиПоДисконтнымКартамОбороты.СуммаОборот ) КАК СуммаОборот

Jimbo 17.12.2013 13:45

посмотри видео от Чистова Павла по запросам

Путевый лист 17.12.2013 14:02

(21) ДА боюсь еще рано мне смотреть видео, я еще из младенческого возраста никак не выйду

Путевый лист 17.12.2013 14:07

(21) Jimbo. Ругается гад
{Форма.Форма(42)**: Ошибка при вызове метода контекста (Выполнить): **(15, 7)**: Синтаксическая ошибка "РАЗЛИЧНЫЕ"
тогда <<?>>РАЗЛИЧНЫЕ ПродажиПоДисконтнымКартамОбороты.Регистратор иначе 0 конец ) КАК КоличествоДокументов,
РезультатЗапроса = Запрос.Выполнить();
по причине:
**(15, 7)**: Синтаксическая ошибка "РАЗЛИЧНЫЕ"
тогда <<?>>РАЗЛИЧНЫЕ ПродажиПоДисконтнымКартамОбороты.Регистратор иначе 0 конец ) КАК КоличествоДокументов,

Путевый лист 17.12.2013 14:29

ВОТ ТАК ВЫГЛЯДИТ ТЕПЕРЬ ЗАПРОС
Запрос=Новый Запрос;
Запрос.Текст=
"ВЫБРАТЬ
| Подзапрос.ДисконтнаяКарта,
| Подзапрос.ВладелецДисконтнойКарты,
| Подзапрос.КоличествоДокументов,
| Подзапрос.ДатаПоследнейПродажи,
| Подзапрос.Сумма,
| Подзапрос.ДисконтнаяКарта.Представление,
| Подзапрос.ВладелецДисконтнойКарты.Представление,
| Подзапрос.ДисконтнаяКарта.ВладелецКарты.ДатаРождения КАК ДатаРождения
|ИЗ
| (ВЫБРАТЬ
| ПродажиПоДисконтнымКартамОбороты.ДисконтнаяКарта КАК ДисконтнаяКарта,
| ПродажиПоДисконтнымКартамОбороты.ВладелецДисконтнойКарты КАК ВладелецДисконтнойКарты,
//| КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ПродажиПоДисконтнымКартамОбороты.Регистратор) КАК КоличествоДокументов,
|Количество (РАЗЛИЧНЫЕ ВЫБОР КОГДА (Регистратор ССЫЛКА Документ.ОтчетОРозничныхПродажах)
|тогда
|ПродажиПоДисконтнымКартамОбороты.Регистратор иначе 0 конец ) КАК КоличествоДокументов,
| СУММА(ПродажиПоДисконтнымКартамОбороты.СуммаОборот) КАК Сумма,
| МАКСИМУМ(ПродажиПоДисконтнымКартамОбороты.Период) КАК ДатаПоследнейПродажи
| ИЗ
| РегистрНакопления.ПродажиПоДисконтнымКартам.Обороты(,,Регистратор,ВладелецДисконтнойКарты<>Значение(Справочник.ФизическиеЛица.ПустаяСсылка)) КАК ПродажиПоДисконтнымКартамОбороты
| ГДЕ
//| ПродажиПоДисконтнымКартамОбороты.Регистратор ССЫЛКА Документ.ОтчетОРозничныхПродажах
| ДисконтнаяКарта.ВидДисконтнойКарты В ИЕРАРХИИ(&ВидДК)
| СГРУППИРОВАТЬ ПО
| ПродажиПоДисконтнымКартамОбороты.ВладелецДисконтнойКарты,
| ПродажиПоДисконтнымКартамОбороты.ДисконтнаяКарта) КАК Подзапрос
| ГДЕ Месяц(ВладелецДисконтнойКарты.ДатаРождения)>=1
|УПОРЯДОЧИТЬ ПО
| Месяц(ВладелецДисконтнойКарты.ДатаРождения),
| ВладелецДисконтнойКарты.Наименование
|АВТОУПОРЯДОЧИВАНИЕ"

;

Запрос.УстановитьПараметр("ВидДК",ВидДК);

РезультатЗапроса = Запрос.Выполнить();

Путевый лист 17.12.2013 14:59

(21) Jimbo - вот так работает
|Сумма(ВЫБОР КОГДА (Регистратор ССЫЛКА Документ.ОтчетОРозничныхПродажах)
|тогда
|1 иначе 0 конец ) КАК КоличествоДокументов

Путевый лист 19.12.2013 18:03

7-Reaper
[b]Путевый лист > Нет. Забудь хоккейные запросы, у них нет ничего общего с SQL-подобным языком 8ки.[/b]
Вообще-то я только сейчас понял что левое и правое соединение, внутреннее соединение, полное соединение я много раз делал в 1С 7.7 Например - есть регистр партий и остатков. В обоих есть несоответствие для номенклатуры (застарелые ошибки). Я их и вылавливаю полным соединением. Беру один регистр и сравниваю с другим а потом наоборот. Так что понимание 7-ком 8-[filolog][filolog]ных[/filolog][/filolog] запросов начинается тогда когда он может провести ассоциации 8-[filolog][filolog]ных[/filolog][/filolog] запросов с программированием на 7-ке. Можете меня поздравить. Сегодня я из яслей перешел в детский сад, в младшую группа :(((

Reaper 19.12.2013 18:48

26-Путевый лист >когда семерочник начинает строить ассоциации между клюшками и снеговиком- начинается говнокод.

Путевый лист 19.12.2013 19:07

27 -Reaper Да дело не в ассоциациях а в понимании того как это все формируется и почему. Я пока не могу сделать все так как мне нужно, но по крайней мере я начал понимать почему те варианты что я пробую - ошибочны

Reaper 19.12.2013 22:07

28-Путевый лист > Ты лучше освежи в памяти бинарные операции над множествами - это полезнее.

Путевый лист 19.12.2013 22:18

29-Reaper Подскажи пожалуйста
| Левое Соединение
| (ВЫБРАТЬ
| ПродажиПоДисконтнымКартам.ДисконтнаяКарта,
//| ПродажиПоДисконтнымКартам.Номенклатура Как ПродНоменклатура,
| МАКСИМУМ(ПродажиПоДисконтнымКартам.Период) КАК ДатаПоследнейПродажи
| ИЗ
| РегистрНакопления.ПродажиПоДисконтнымКартам КАК ПродажиПоДисконтнымКартам
//| ГДЕ
//| ПродажиПоДисконтнымКартам.ВладелецДисконтнойКарты <> Неопределено
| СГРУППИРОВАТЬ ПО ПродажиПоДисконтнымКартам.ДисконтнаяКарта)
//| ,ПродажиПоДисконтнымКартам.ВладелецДисконтнойКарты)
| КАК Подзапрос1
| ПО ИнформационныеКарты.Ссылка = Подзапрос1.ДисконтнаяКарта
-----------------------------------------------------
Мне нужно вставить в этот кусок запроса такую вещь:
если проданная номенклатура (измерение регистра накопления ПродажиПоДисконтнымКартам) по дисконтной карте подобно параметру запроса, то 1 иначе 0. Я потом хочу в ГДЕ основной части запрос сделать проверку на 1 чтобы сократить число записей в результате запроса

Путевый лист 19.12.2013 22:22

+29-Reaper
Точнее так: Номенклатура.Наименование ПОДОБНО &СтрокаПоиска


Текущее время: 16:44. Часовой пояс GMT +3.