Имя: Пароль:
1C
1С v8
Условие на измерение регистра в подзапросе
0 tgu82
 
20.12.13
13:03

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


Мне нужно вставить в этот кусок запроса такую вещь:
если проданная номенклатура (измерение регистра накопления ПродажиПоДисконтнымКартам) по дисконтной карте подобно параметру запроса, то 1 иначе 0. Я потом хочу в ГДЕ основной части запрос сделать проверку на 1 чтобы сократить число записей в результате запроса    
Точнее так: Номенклатура.Наименование ПОДОБНО &СтрокаПоиска
1 Wobland
 
20.12.13
13:06
благословить?
2 Wobland
 
20.12.13
13:07
или сразу запретить делать так?
3 tgu82
 
20.12.13
13:15
(1,2) Будьте добры объясните что я сделал не так.
4 tgu82
 
20.12.13
13:16
(1,2) Вроде ж наоборот сделал секцию code, чтобы лучше читалось. Я просто чего-то не знаю видимо
5 Wobland
 
20.12.13
13:17
1) не очень понятно, зачем фильтровать выше, а не здесь
2) не очень понятна необходимость обращения к наименованию
6 Wobland
 
20.12.13
13:17
3) не очень понятна цель ветки: похвастаться или просто уведомить
7 tgu82
 
20.12.13
13:19
(6) Да нет, там же вопрос
Мне нужно вставить в этот кусок запроса такую вещь:
если проданная номенклатура (измерение регистра накопления ПродажиПоДисконтнымКартам) по дисконтной карте подобно параметру запроса, то 1 иначе 0. Я потом хочу в ГДЕ основной части запрос сделать проверку на 1 чтобы сократить число записей в результате запроса    
Точнее так: Номенклатура.Наименование ПОДОБНО &СтрокаПоиска

Не получается у меня с этим условием
8 Wobland
 
20.12.13
13:20
(7) вопрос заканчивается символом "?", так в советских школах учили. как сейчас, не знаю
9 tgu82
 
20.12.13
13:20
(5)
1) не очень понятно, зачем фильтровать выше, а не здесь
2) не очень понятна необходимость обращения к наименованию

Расшифруйте пожалуйста.
10 tgu82
 
20.12.13
13:20
(8) Спасибо, знак вопроса я действительно не поставил
11 Wobland
 
20.12.13
13:21
(9) 1) а почему бы не взять и не отсеять ненужную номенклатуру прямо в подзапросе?
2) наименование - вещь такая, что с ней нужно аккуратней. почему наименование?
12 tgu82
 
20.12.13
13:21
(8) Мне вообще все сделать заново?
Потому что мне помощь по данному вопросу очень нужна
13 tgu82
 
20.12.13
13:23
(11) Вот я и не знаю как отсеять - не получается у меня
Наименование вынужден использовать потому что мне надо именно проверить вхождение в него подстроки заданной в парамтерах запроса
14 Wobland
 
20.12.13
13:25
(13) вот почему именно подстрока?
как вариант
ГДЕ Карта в (&СписокНужных)
15 tgu82
 
20.12.13
13:27
(14) Потому что это размер. То есть я ищу номенклатуру содержащую в наименовании указание размера одежды
16 bolobol
 
20.12.13
13:27
Ещё подробней:

ВЫБРАТЬ
| ПродажиПоДисконтнымКартам.ДисконтнаяКарта,
| МАКСИМУМ(ПродажиПоДисконтнымКартам.Период) КАК ДатаПоследнейПродажи
| ИЗ
| РегистрНакопления.ПродажиПоДисконтнымКартам КАК ПродажиПоДисконтнымКартам
| СГРУППИРОВАТЬ ПО ПродажиПоДисконтнымКартам.ДисконтнаяКарта

- это ваш подзапрос, про номенклатуру с наименованием здесь и речи нет. Тогда в чём задача? Добавить в ВЫБРАТЬ "ВЫБОР КОГДА ПродажиПоДисконтнымКартам.Номенклатура.Наименование ПОДОБНО &СтрокаПоиска ТОГДА 1 ИНАЧЕ 0"?
17 tgu82
 
20.12.13
13:31
(16) Кажется я так пробовал и не пошло.
Просто я убрал все свои комментарии, чтобы легче читался код
18 tgu82
 
20.12.13
13:32
(16) Ругалась на это:
ПродажиПоДисконтнымКартам.Номенклатура.Наименование
Говорит что ее нет в группе ПродажиПоДисконтнымКартам
19 bolobol
 
20.12.13
13:39
Пользуйтесь конструктором и всё будет в группах.
20 Wobland
 
20.12.13
13:46
>проданная номенклатура (измерение регистра накопления ПродажиПоДисконтнымКартам)
и с чего я взял, что измерение типа номенклатура?
21 bolobol
 
20.12.13
13:48
(20) Да какая разница)) в (0) написано: "Точнее так: Номенклатура.Наименование ..." - и чем бы не являлось - всё одно.
22 Wobland
 
20.12.13
13:52
(21) ну я-то предлагал номенклатуру резать в подзапросе, где её нет
23 bolobol
 
20.12.13
14:00
(22) Так и я не понимаю, зачем всю номенклатуру выбирать в виде "1/0", чтобы затем строки с 0 удалить из результата...
24 Wobland
 
20.12.13
14:00
(23) ээ... присоединяюсь
25 bolobol
 
20.12.13
14:01
И в любом случае - задача ТС от наших непониманий не меняется, а Миелофон - наше всё))
26 tgu82
 
20.12.13
14:01
(22,23) Я пробовал номенклатуру резать в подзапросе. Мне главное потом по верхнему запросу отсечь в условии
27 bolobol
 
20.12.13
14:03
(26) Да мы не против! Измерение наверх-то получилось выбрать?
28 tgu82
 
20.12.13
14:03
(27) Вот как раз и не получилось
29 tgu82
 
20.12.13
14:05
(24,27) мне нужны те карты, по которым продавалась номенклатура содержащая в наименовании нужную мне подстроку
30 Wobland
 
20.12.13
14:06
(28) чтобы что-то сделать с номенклатурой (поиметь твой 0 или 1 хотя бы) нужна номенклатура, правда? а у тебя её в подзапросе нет
31 Wobland
 
20.12.13
14:07
(29) берёшь таблицу продаж, соединяешь её с таблицей карт, выкидываешь лишнее
32 tgu82
 
20.12.13
14:08
(30) Так я и спрашиваю как раз о том как правильно мне вставить проданную номенклатуру в подзапрос
33 tgu82
 
20.12.13
14:09
(31) Регистр.ПродажиПоДисконтнымКартам.Номенклатура Как ПродажиПоДисконтнымКартамНоменклатура - не пропускает почему-то
34 Мимохожий Однако
 
20.12.13
14:15
Ты бы показал свой запрос, которые не получается. Народ бы подрихтовал.
35 tgu82
 
20.12.13
14:17
(34) Сейчас попробую. Мне же номенклатура не нужна. Мне только нужна проверка на вхождение. Весь запрос или только эту часть?
36 Мимохожий Однако
 
20.12.13
14:17
Кидай весь запрос, не стесняйся
37 Мимохожий Однако
 
20.12.13
14:19
Возможный план.
В пакетном запросе:
1.Нужная номенклатура
2.Дата продаж из регистра с вложенным запросом из 1.
38 tgu82
 
20.12.13
14:26
(Выбрать ВЫБОР КОГДА ПродажиПоДисконтнымКартам.Номенклатура.Наименование ПОДОБНО &СтрокаПоиска ТОГДА 1 ИНАЧЕ 0 Конец) Как ЭтотРазмер              

Ругается
39 tgu82
 
20.12.13
14:28
ВЫБОР КОГДА ПродажиПоДисконтнымКартам.Номенклатура.Наименование ПОДОБНО &СтрокаПоиска ТОГДА 1 ИНАЧЕ 0 Конец Как ЭтотРазмер    

И так тоже ругается
40 tgu82
 
20.12.13
14:34

"ВЫБРАТЬ РАЗЛИЧНЫЕ
|     ИнформационныеКарты.Ссылка Как ДисконтнаяКарта,
|     ИнформационныеКарты.ВладелецКарты КАК ВладелецДисконтнойКарты,
|     ИнформационныеКарты.ВладелецКарты.ДатаРождения КАК ДатаРождения,
|     МАКСИМУМ(Подзапрос1.ДатаПоследнейПродажи) КАК ДатаСамойПоследнейПродажи,
|     СУММА(ВЫБОР КОГДА ПродажиПоДисконтнымКартамОбороты.Регистратор  ЕСТЬ NULL ТОГДА 0 ИНАЧЕ
|                      ВЫБОР
|                      КОГДА  ПродажиПоДисконтнымКартамОбороты.Регистратор ССЫЛКА Документ.ОтчетОРозничныхПродажах
|                           ТОГДА 1
|                      ИНАЧЕ 0
|                      КОНЕЦ
|                 КОНЕЦ) КАК КоличествоДокументов,
|          СУММА(ЕСТЬNULL(ПродажиПоДисконтнымКартамОбороты.СуммаОборот, 0)) КАК Сумма
|     ИЗ
|          Справочник.ИнформационныеКарты КАК ИнформационныеКарты
|          ЛЕВОЕ Соединение
|         РегистрНакопления.ПродажиПоДисконтнымКартам.Обороты(
|                         &НачПериода,
|                         &КонПериода,
|                         Регистратор
|                                   ) КАК ПродажиПоДисконтнымКартамОбороты
|                                   ПО ИнформационныеКарты.Ссылка = ПродажиПоДисконтнымКартамОбороты.ДисконтнаяКарта
|          Левое Соединение
|            (ВЫБРАТЬ
|              ПродажиПоДисконтнымКартам.ДисконтнаяКарта,
|              МАКСИМУМ(ПродажиПоДисконтнымКартам.Период) КАК ДатаПоследнейПродажи,
|               (Выбрать ВЫБОР КОГДА ПродажиПоДисконтнымКартам.Номенклатура.Наименование ПОДОБНО &СтрокаПоиска ТОГДА 1 ИНАЧЕ 0 Конец) Как ЭтотРазмер              
|          ИЗ
|            РегистрНакопления.ПродажиПоДисконтнымКартам КАК ПродажиПоДисконтнымКартам
|          ГДЕ ПродажиПоДисконтнымКартам.Номенклатура.Наименование ПОДОБНО &СтрокаПоиска
|          СГРУППИРОВАТЬ ПО  ПродажиПоДисконтнымКартам.ДисконтнаяКарта)
|            КАК Подзапрос1
|          ПО ИнформационныеКарты.Ссылка = Подзапрос1.ДисконтнаяКарта
|     ГДЕ
|     ИнформационныеКарты.ВидДисконтнойКарты В ИЕРАРХИИ(&ВидДК) И
|     ИнформационныеКарты.ВладелецКарты.ДатаРождения <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0) И
|     (&МесяцДР = 0
|               ИЛИ МЕСЯЦ(ИнформационныеКарты.ВладелецКарты.ДатаРождения) = &МесяцДР)
|     СГРУППИРОВАТЬ ПО
|     ИнформационныеКарты.ВладелецКарты,
|     ИнформационныеКарты.Ссылка,
|     ИнформационныеКарты.ВладелецКарты.ДатаРождения
|"                                                                                                
;
41 tgu82
 
20.12.13
14:39
(37) Вот такой вот запрос и пока что мои попытки вставить туда поле которому будет присвоено значение либо 0 либо 1 в зависимости от выполнения фильтра по номенклатуре - не увенчались успехом
42 tgu82
 
20.12.13
14:40
(37) А мне надо именно в подзапрос1 это вставлять
43 bolobol
 
20.12.13
14:42
Так ясен пень, что ругается. Откуда текст-то родился, конструктор его даже брать отказывается, не то что записать такое!

Во первых:
(Выбрать ВЫБОР КОГДА ПродажиПоДисконтнымКартам.Номенклатура.Наименование ПОДОБНО &СтрокаПоиска ТОГДА 1 ИНАЧЕ 0 Конец) Как ЭтотРазмер

Зачем слово "Выбрать"?

Во вторых:
СГРУППИРОВАТЬ ПО  ПродажиПоДисконтнымКартам.ДисконтнаяКарта
- А где "по ЭтотРазмер"? - оно же тоже выбрано, а в группировках не учавствует.

И в третьих, где-то цать постов назад вы сами об этом писали!!!
44 tgu82
 
20.12.13
14:45
(43)ВЫБОР КОГДА ПродажиПоДисконтнымКартам.Номенклатура.Наименование ПОДОБНО &СтрокаПоиска ТОГДА 1 ИНАЧЕ 0 Конец Как ЭтотРазмер - это же просто поле для Подзапрос1 или нет? Зачем здесь нужна группировка?
45 bolobol
 
20.12.13
14:51
(44) Верно! А зачем тогда про ГРУППИРОВКИ для подзапрос1 написано?
46 tgu82
 
20.12.13
14:51
43)
|          ГДЕ ПродажиПоДисконтнымКартам.Номенклатура.Наименование ПОДОБНО &СтрокаПоиска
|          СГРУППИРОВАТЬ ПО  ПродажиПоДисконтнымКартам.ДисконтнаяКарта,ЭтотРазмер)
|            КАК Подзапрос1

Ругается что нет такого поля ЭтотРазмер
47 bolobol
 
20.12.13
14:52
Последний раз повторю, и всё: Используйте конструктор запросов! Язык самостоятельно не придумаете.
48 tgu82
 
20.12.13
14:54
(44) |     МАКСИМУМ(Подзапрос1.ДатаПоследнейПродажи) КАК ДатаСамойПоследнейПродажи
Вот для этого используется Подзапрос1
49 tgu82
 
20.12.13
14:55
(47) Подскажите как правильно написать. Для конструктора запроса все равно нужно знать как!!! А я как раз и не знаю
50 bolobol
 
20.12.13
14:59
Конструктор сам напишет, для того и конструктор.
51 bolobol
 
20.12.13
15:01
И
МАКСИМУМ(Подзапрос1.ДатаПоследнейПродажи) КАК ДатаСамойПоследнейПродажи - я бы поправил на "ДатаСамойПоследнейПродажиВРазрезеКартИЕдиницыИлиНуляОтНоменклатуры" - ибо так оно на самом деле будет
52 tgu82
 
20.12.13
15:02
(51) Перевариваю
53 bolobol
 
20.12.13
15:04
Конструктор запустите, удалив лишнее про номенклатуру - добавите в самом конструкторе
54 bolobol
 
20.12.13
15:07
(52) А это в том, что функции работают только в группах _по всем выбранным полям_, что означает, что на каждую отдельную карту, вкупе с 0 по номенклатуре и, отдельно, вкупе с 1 по номенклатуре - получите максимальную дату.
Карта1, 0, макс = вчера
Карта1, 1, макс = позавчера
Карта2, 0, макс = полгоданазад
Карта2, 1, ... и т.д.
55 tgu82
 
20.12.13
15:09
(54) Ага, вот это я понял. И мне это не надо
56 tgu82
 
20.12.13
15:12
(54) Вот засада. Получается что я не могу получить для карты однозначную пару ДатаПоследнейПродажи и вхождение в фильтр по номенклатуре (или невхождение)
57 bolobol
 
20.12.13
15:15
Итого, вырисовывается задача: найти по каждой карте последнюю продажу и узнать, по каким картам в последних продажах были нужные наименования номенклатуры, так?
58 MKZM
 
20.12.13
15:18
Условие на изменение это :
update (//////) where (/////////////////
Вопрос в чем?
59 tgu82
 
20.12.13
15:18
(57) Не совсем так. На выходе мне нужна таблица без записей для карт, не прошедших фильтр по номенклатуре
60 MKZM
 
20.12.13
15:20
(59) А почему "На выходе мне нужна таблица без записей для карт" представляет проблемы?
61 tgu82
 
20.12.13
15:34
(60) Проблемы видимо из-за того что у меня два левых соединения.
62 tgu82
 
20.12.13
15:38
(57) Итого, вырисовывается задача: найти по каждой карте последнюю продажу и узнать, по каким картам в последних продажах были нужные наименования номенклатуры, так?

Неа. Меня интересуют даты последней продажи сами по себе а вхождение в фильтр хотя бы по одной продаже само по себе
63 tgu82
 
20.12.13
15:39
(57) Просто если Дата последней продажи пустая, то и продаж не было вообще и номенклатуры нема никакой
64 bolobol
 
20.12.13
15:47
1. В данном регистре не может быть пустая дата.
2. Даты (во множественном числе) последней продажи не существуют в количестве более одной. Это будет последняя продажа по какой-то карте, если по картам были продажи.
3. А про вхождение чего-то в некий фильтр из продаж - вообще не смог ассоциировать с предложенным в (0) отчётом

Я в растерянности 00
65 bolobol
 
20.12.13
15:54
А с учётом (59) - ясно, что должно быть приоритетней: сначала последняя продажа по карте, затем фильтр по номенклатуре. Из этого следует, что отбора нужно два: Один по последней продаже по карте (ваш подзапрос1), второй по полному соединению с продажами номенклатуры по выбранным дате, карте, номенклатура, где выбор только уникальных карт. Счастье возможно!
66 tgu82
 
20.12.13
15:54
(64) Первое левое соединение внимает продажи за указанный период и количество продаж а второе левое соединение вынимает вообще дату последней продажи по карте и вот мне еще надо добавить сюда проверку на то продавалась ли по данной карте номенлкатура соответствующая условию
67 tgu82
 
20.12.13
15:56
(65) Карта ДатаПоследнейПродажи ЭтотРазмер
      1111  02.05.2013             0
      1122  08.02.2012             1
68 tgu82
 
20.12.13
16:01
(65) И затем через ГДЕ убираются те в которых 0
69 tgu82
 
20.12.13
16:04
(65) второй по полному соединению с продажами номенклатуры по выбранным дате, карте, номенклатура

Да для фильтра по номенклатуре дата по фиг
70 bolobol
 
20.12.13
16:09
Не-не - сотню не наберёшь. Ответ в 65. В 66 некий набор слов. 67 таблица полуответа из 65. В 68 опять задача о превращении 67 в 65. В 69 исключающее условие решения в 65. Это замкнутый круг))
71 tgu82
 
20.12.13
16:10
(70) Да почему
Карта ДатаПоследнейПродажи ЭтотРазмер
1111      02.05.2013             0
1122      08.02.2012             1
1232      ""                     0
72 tgu82
 
20.12.13
16:15
(70) А почему не левое соединение?
73 Аннушка
 
20.12.13
16:38
если я верно поняла задачу, то подзапрос, на мой взгляд, должен быть примерно таким:

выбрать
ПродажиПоДисконтнымКартам.ДисконтнаяКарта,
ПродажиПоДисконтнымКартам.Период
из РегистрНакопления.ПродажиПоДисконтнымКартам.СрезПоследних(&ДатаАкутальности, ДисконтнаяКарта
в(выбрать различные
Продажи.ДисконтнаяКарта
из РегистрНакопления.ПродажиПоДисконтнымКартам КАК Продажи
где Продажи.Номенклатура.Наименование подобно &СтрокаПоиска)) как ПродажиПоДисконтнымКартам

выбрали нужные карты - те по которым были продажи по нужной номенклатуре и запихунли эти карты в условие среза, на выходе имеем дату последней продажи по каждой карте, по которой была продана хотябы одна нужная номенклатура, при этом эта последняя продажа не обязательно по номенклатуре из условия
74 V01tk2010
 
20.12.13
16:53
Срез по регистру накопления порадовал
75 tgu82
 
20.12.13
18:53
(73,74) Вот в семерке я бы сделал такую штуку довольно-быстро и главное все понятно с точки зрения таблиц и запросов к ним правда в алгоритмическом программном коде
76 Wobland
 
20.12.13
18:55
(75) надо учить себя мыслить реляционно
77 tgu82
 
20.12.13
19:00
(75)
Не отвлекаясь на частности
1. Берем все карты
2. Прицепляем к ним сумму продаж за указанный период и количество документов продажи
3. Прицепляем к ним дату последней продажи за все время работы магазина
4. берем всю номенклатуру проданную за все время работы магазина по регистру продажи и добавляем к главной таблице поле полученное таким образом: по каждой карте из главной таблицы запроса смотрим проданную номенклатуру и если она попала в фильтр по номенклатуре, то поле это=0 или поле это=1
5. Очищаем главную таблицу запроса от карт по которым товар из фильтра не продавался
78 tgu82
 
20.12.13
19:06
(76) вот пункт 4-ый меня и интересует. и мне кажется что здесь будет обычное левое соединение с Выбор Когда истина то 1 иначе 0 конец как ПроверкаУсловия и потом фильтрация уже готовой таблицы по этого полю
79 tgu82
 
20.12.13
19:37
(76) Получается что я получаю не одно значение для карты а несколько то есть
Карта Номенклатура Проверка
11222  товар1        1
11222  товар2        0

Левое соединение
Регистр.ПродажиПоДисконтнымКартам.Обороты(,,Регистратор,Номенклатура В Список) Как РегПродКарт
ПО Карты.Ссылка=РегПродКарт.ДисконтнаяКарта

А дальше можно по сумме (если сумма таких продаж>0 значит 1 иначе 0)
80 tgu82
 
21.12.13
17:50
Всем большое спасибо.
Все получилось, местами разобрался :(((
А вот как бы мне не по одному значению фильтр делать а по нескольким? Через временную таблицу?
81 tgu82
 
23.12.13
08:39
Всех с наступающим. Все у меня получилось. В т.ч. и с временными таблицами
82 Аннушка
 
23.12.13
09:16
ох, да((((
вот я облажалась то...