Имя: Пароль:
1C
1С v8
Запрос: Выбрать 1 для каждого
,
0 diesell
 
14.04.15
14:46
Подскажите запрос, где на пример, для списка контрагентов, выбираются документы заказа, причем только первый документ.
Такой запрос:
ВЫБРАТЬ ПЕРВЫЕ 1
    ЗаказПокупателя.Ссылка КАК Заказ,
    ЗаказПокупателя.Контрагент
ИЗ
    Документ.ЗаказПокупателя КАК ЗаказПокупателя
ГДЕ
    ЗаказПокупателя.Проведен = ИСТИНА
Выбирает только 1 заказ. А надо по 1 для всех контрагентов. Чет голова не может сообразить как.
53 Веселый молочник
 
14.04.15
15:17
срез последних - это минимум/максимум определенного списка дат на определенную дату. в сабже - просто минимум/максимум
54 Веселый молочник
 
14.04.15
15:18
сдавайтесь. вы окружены
55 ХардHard
 
14.04.15
15:19
(52)
табл.Контр
Табл.Дата
Табл.Ссылка

ЛевоеСоед
Табл1.Контр = Табл2.Контр
Табл2.Дата < Табл2.Дата

Где
табл2.Дата Есть Null
56 ХардHard
 
14.04.15
15:21
(55) Писал левой ногой )
57 Веселый молочник
 
14.04.15
15:22
(55) ну в теории да, можно. но зачем.
58 Веселый молочник
 
14.04.15
15:24
(55) и если использовать твои аргументы - любая группировка с Мин и Макс - это срез последних на дату?
59 ХардHard
 
14.04.15
15:24
(57) Мож в книжке той так делали а вы тут спортие про > < .
Те же яйца
60 ХардHard
 
14.04.15
15:25
(58) Где я такое писал ? Я писал что срезы можно делать как группировкой так и соединением 2ух одинаковых таблиц.
61 Веселый молочник
 
14.04.15
15:26
(60) ну т.е. любая группировка с Мин и Макс - это срез?
62 Fragster
 
гуру
14.04.15
15:26
(53) если уж оперировать, то оперировать множествами. для каждого элемента одного множества найти один элемент другого множества по какому-либо критерию. в сабже - два множества - контрагенты и заказы, в книге знаний - даты и курсы...
63 Веселый молочник
 
14.04.15
15:26
а где Defender aka LINN
64 Fragster
 
гуру
14.04.15
15:27
(63) он отчаялся донести для тебя то, что срез может быть не на дату, а на контрагента. в данном случае - срез первых заказов на каждого контрагента...
65 Fragster
 
гуру
14.04.15
15:28
"не на каждую дату,"
66 Веселый молочник
 
14.04.15
15:28
(62) если быть точнее - Контрагент, Заказ, Дата (сабж) и Документ, Дата, Валюта, Курс (статья).
67 VasLe
 
14.04.15
15:28
ВЫБРАТЬ
                ЗаказПокупателя.Контрагент КАК Контрагент,
                ЗаказПокупателя.Ссылка КАК Ссылка
            ИЗ
                Документ.ЗаказПокупателя КАК ЗаказПокупателя
                    ЛЕВОЕ СОЕДИНЕНИЕ Документ.ЗаказПокупателя КАК Фильтр
                    ПО ЗаказПокупателя.Контрагент = Фильтр.Контрагент
                        И ЗаказПокупателя.МоментВремени > Фильтр.МоментВремени
            ГДЕ
                Фильтр.Ссылка ЕСТЬ NULL
68 ХардHard
 
14.04.15
15:28
(61) ДА с чего ты такой бред берешь? %)
69 Fragster
 
гуру
14.04.15
15:29
(66) Дата и контрагент множества заказов и контрагент множества контрагентов
70 Веселый молочник
 
14.04.15
15:30
(65) ну если срез первых заказов на каждого контрагента, тогда принимается.
71 Fragster
 
гуру
14.04.15
15:30
то, что множество контрагентов выделяется из того же множества заказов - ничего не меняет
72 Fragster
 
гуру
14.04.15
15:31
(70) первых, последних, даты, ссылки, какая разница? всё - тлен. просто "срез последних на каждую дату" - это уже устоявшееся за годы название задачи, так как впервые она возникла именно в такой формулировке.
73 Веселый молочник
 
14.04.15
15:31
(69) если честно то уже начинаю терять нить
74 Fragster
 
гуру
14.04.15
15:32
это как задача о рюкзаке, или задача коммивояжера
75 Веселый молочник
 
14.04.15
15:33
(72) в том то и дело. это устоявшееся название задачи именно для "срез последних на каждую дату". именно для тех задач, которые в ссылке. а в сабже просто задача про Мин/Макс, который нужно использовать два раза
76 Fragster
 
гуру
14.04.15
15:33
(53) определи для каждого склада ячейку с наибольшей вместимостью? для каждого покупателя наибольшую просрочку за последний год? и т.п.
77 Fragster
 
гуру
14.04.15
15:34
(75) "на каждую дату" = "для каждого контрагента", "срез последних" = "первый документ заказ покупателя"
78 DexterMorgan
 
14.04.15
15:34
молочник ты дебил, это типичная задача среза на каждую дату в запросе
79 Fragster
 
гуру
14.04.15
15:35
(77) всё тлен, повторюсь
80 Веселый молочник
 
14.04.15
15:35
(78) не аргумент
81 DexterMorgan
 
14.04.15
15:36
(80) оставайся им дальше
82 Веселый молочник
 
14.04.15
15:36
(77) реши задачу "среза последних" используя только Минимум/Максимум и не используя > <
83 ХардHard
 
14.04.15
15:39
(82) в (16) поменяй мин на мах и ограничение верхнее поставь в первой табличке на дату.
84 Fragster
 
гуру
14.04.15
15:40
(82) Выбрать Валюта, Максимум(Дата) Поместить Максимумы Из РС.Валюты;

Выбрать Валюты.Валюта, Валюты.Курс Из Валюты Внутреннее соединение Максимумы по Валюты.Валюта = Максимумы.Валюта и Валюты.Дата = Максимумы.Дата
85 fisher
 
14.04.15
15:42
А еще такой вариант есть:

ВЫБРАТЬ  
    ЗаказПокупателя.Ссылка КАК Заказ,
    ЗаказПокупателя.Контрагент
ИЗ
    Документ.ЗаказПокупателя КАК ЗаказПокупателя
ГДЕ
    ЗаказПокупателя.Ссылка В
        (ВЫБРАТЬ ПЕРВЫЕ 1 З.Ссылка
        ИЗ Документ.ЗаказПокупателя КАК З
        ГДЕ З.Контрагент = ЗаказПокупателя.Контрагент
        УПОРЯДОЧИТЬ ПО З.Дата)

Рулит если несколько последних надо.
86 Веселый молочник
 
14.04.15
15:42
(84) в этом случае ты вроде как всегда будешь получать самый последний курс? не?
87 Fragster
 
гуру
14.04.15
15:42
(82) то, что критерий отбора из того множества, в котором мы ищем соответствие может быть "максимальная дата", а моежт быть и "максимальная дата, меньшая указанной", а может быть и "минимальная дата для определенного контрагента" - разве не одно и то же?
88 Fragster
 
гуру
14.04.15
15:42
(86) для каждой валюты
89 Веселый молочник
 
14.04.15
15:44
(87) не одно, ибо ты упустил кое-что. "максимальная дата, меньшая указанной" + для определенного чего-то (номенклатуры/валюты). ключевое отличие таки в "меньше указанной".
90 Fragster
 
гуру
14.04.15
15:45
(89) какое это имеет значение для общего случая?
91 Веселый молочник
 
14.04.15
15:45
(88) ну и что для каждой валюты. а нам нужно для каждой валюты не последний курс этой валюты, а последний курс этой валюты "к определенной дате"
92 Веселый молочник
 
14.04.15
15:45
(90) думаю у меня все-таки есть определенные трудности с донесением своей идеи
93 Веселый молочник
 
14.04.15
15:46
(90) все таки, попробуй ответить на (82). в (84) решение неверное
94 Fragster
 
гуру
14.04.15
15:47
(91) facepalm
95 Веселый молочник
 
14.04.15
15:48
(94) подожду ответа на (82))))
96 Веселый молочник
 
14.04.15
15:51
попробую по другому. Сабж - это срез последних. Но не на каждую дату. А просто "СрезПоследних". Точнее первых.
97 Fragster
 
гуру
14.04.15
15:53
(95) это все равно, что сказать тебе "реши задачу из (0), но для заказов, поступивших с начала года"
98 Fragster
 
гуру
14.04.15
15:53
какая разница, какой критерий отбора и какой критерий сортировки?
99 Веселый молочник
 
14.04.15
15:54
(97) нифига, не путай задачи.
100 Fragster
 
гуру
14.04.15
15:54
(100)
101 Веселый молочник
 
14.04.15
15:55
кроссавчег
102 Веселый молочник
 
14.04.15
15:55
РегистрСведенийМенеджер.<Имя регистра сведений>.СрезПервых (InformationRegisterManager.<Имя регистра сведений>.SliceFirst)
РегистрСведенийМенеджер.<Имя регистра сведений> (InformationRegisterManager.<Имя регистра сведений>)
СрезПервых (SliceFirst)
Синтаксис:

СрезПервых(<НачалоПериода>, <Отбор>)
Параметры:

<НачалоПериода> (необязательный)

Тип: Дата; МоментВремени; Граница.
Определяет момент времени, начиная с которого необходимо выбрать записи.
Если параметр не указан, то будут получены записи без ограничения по времени.
<Отбор> (необязательный)

Тип: Структура.
Структура, содержащая отбор по измерениям и реквизитам регистра. Имя ключа структуры должно совпадать с именем измерения регистра, заданного в конфигураторе, а значение элемента структуры - задает отбираемое по данному измерению значение.
Структура дополнительно может иметь элементы, соответствующие разделителям регистра с уровнем разделения НезависимоИСовместно, в состав которых входит регистр. Если такой элемент структуры задан для используемого в сеансе разделителя, значение для этого элемента должно совпадать со значением разделителя, иначе будет вызвано исключение.
Если параметр не указан, то отбор не используется.
Возвращаемое значение:

Тип: ТаблицаЗначений.
Таблица значений, заполненная данными найденных записей регистра сведений.
Описание:

Получает наиболее ранние записи регистра, соответствующие установленным в параметрах метода значениям ключевых полей. Записи подбираются для каждого сочетания из всех имеющихся значений измерений регистра.

Доступность:

Сервер, толстый клиент, внешнее соединение.
Примечание:

Применим только для периодических регистров сведений.
Пример:

МаркетингЦен = РегистрыСведений.МаркетингЦен;
ОбновленныеСегодняЦены = МаркетингЦен.СрезПервых(ТекущаяДата());
103 Fragster
 
гуру
14.04.15
15:55
(99) задача - найти один (из нескольких) элемент одного множества, соответствующий одному элементу другого множества по некоторому критерию соответствия.
104 Веселый молочник
 
14.04.15
15:55
в сабже классический срез первых.
105 Fragster
 
гуру
14.04.15
15:57
(104) ну поменяй в сабже "найти заказ с наибольшей суммой". от этого ничего не изменится.
106 Веселый молочник
 
14.04.15
15:57
(103) в том то и дело. по некоторому критерию. но находящемуся не внутри одного из множеств, а снаружи - Конкретная дата, которая передается в запрос. ну я имею ввиду твой пример "для заказов, поступивших с начала года"
107 Веселый молочник
 
14.04.15
15:58
(105) все правильно. ничего не изменится. можно применить "срез первых/последних", только будет анализироваться сумма, а не дата. но опять же - просто срез. а не срез на дату.
108 Fragster
 
гуру
14.04.15
15:59
(106) ну ладно, "заказ с наибольшей суммой, которая была после заказа с наименьшей суммой". всё внутри одного множества
109 Веселый молочник
 
14.04.15
15:59
чет Defender aka LINN приуныл...
110 Fragster
 
гуру
14.04.15
16:00
(109) ему руку от лица не оторвать
111 Веселый молочник
 
14.04.15
16:00
(108) ну нифига ты загнул
112 Fragster
 
гуру
14.04.15
16:01
113 Веселый молочник
 
14.04.15
16:01
ну пока я так и не получил ни ответ на (82), ни доказательства, что в сабже не просто срез первых, а именно срез первых на дату
114 Веселый молочник
 
14.04.15
16:01
(112) баян, см (78)
115 Веселый молочник
 
14.04.15
16:02
кстати, а где не дебил DexterMorgan
116 Fragster
 
гуру
14.04.15
16:03
(113) принципиального отличия между "т1.контрагент = т2.контрагент" и "т1.Дата >= т2.дата" нет
117 Веселый молочник
 
14.04.15
16:05
(116) т.е. ты хочешь сказать что нет принципиальных отличий в срезе последних и в срезе последних на дату?
118 Веселый молочник
 
14.04.15
16:05
(116) т.е. ты хочешь сказать что нет принципиальных отличий в срезе последних и в срезе последних на КАЖДУЮ дату?
119 Веселый молочник
 
14.04.15
16:06
прошу прощения. везде, где выше сравнивал срез последних и срез последних на дату - следую читать как "сред последних (естественно на дату) и срез последних на каждую дату"
120 Drac0
 
14.04.15
16:06
как я вовремя покинул этот театр абсурда. На ровном месте развели срач ,жесть.
121 bolobol
 
14.04.15
16:06
Всё не читал, но 115+ сообщений к ответу ГРУПП(Контр), МИН(Дата, Ссылка)...

Автор явно кого-то явно троллит)
122 Веселый молочник
 
14.04.15
16:06
(120) ну дык. опыт не пропьешь
123 ХардHard
 
14.04.15
16:07
(121) Автор давно получил ответ и ушел.
124 Fragster
 
гуру
14.04.15
16:07
(118) да
125 Веселый молочник
 
14.04.15
16:07
(121) автор давно получил ответ в (16) и ушел)

давай присоединяйся. срез на дату и срез на каждую дату запроса - одно и тоже? и сможешь (82) решить?
126 bolobol
 
14.04.15
16:08
(123) А, да? Хм... А чего обсуждаем?
127 Fragster
 
гуру
14.04.15
16:08
(125) представь, что дата - это одно из измерений. то же самое, что контрагент или валюта...
128 Веселый молочник
 
14.04.15
16:08
(124) однако срез последних на дату без соединения по условию больше меньше не решить? так?
129 bolobol
 
14.04.15
16:09
(125) Срез на каждую дату - это много срезов на дату. Тут ясно. А 82 - сейчас гляну)
130 Веселый молочник
 
14.04.15
16:10
(127) не, маленькими шажками мне в твою вселенну не погрузиться. ты сразу все выдавай.
131 Fragster
 
гуру
14.04.15
16:10
(128) я тебе не про условие соединения больше или меньше. там может быть ЛЮБОЕ условие соединения. то, что у тебя там "равно", а критерий поиска единственной записи - это "минимум" - это частный случай.
132 ХардHard
 
14.04.15
16:13
(125) Одно и тоже . Дата1 - дата документ  (как в сабже контрагент)
Дата2 - дата курса (как в сабюе дата документа) дальше все тоже самое.
133 Fragster
 
гуру
14.04.15
16:13
(131) то, что одна и та же таблица является и источником одного и второго множества - также частный случай
134 Веселый молочник
 
14.04.15
16:14
ладно, попробую вернуться в область, где почти запутался. к сущностям и прочей херне.

в сабже - у нас один источник информации, он самодостаточен, в нем есть все, просто его нужно правильным образом сгруппировать.

в случае же среза на каждую дату - у нас есть два источника - например документы с датами и курсы с датами.
135 Веселый молочник
 
14.04.15
16:15
(133) ну тут уже почти готов на мировую, ибо судя по всему разные взгляд на одно и тоже.
136 Веселый молочник
 
14.04.15
16:16
(133) ибо для меня это не частный случай
137 bolobol
 
14.04.15
16:17
(82): реши задачу "среза последних" используя только Минимум/Максимум и не используя > <

Ссылка. Число
01/02.. 15
02/02.. 22
03/02.0 37
03/02.1 36
04/02.. 28
05/02.. 29

СрезПоследних:
ВЫБРАТЬ МАКС(Ссылка) ПОМЕСТИТЬ МаксСсылка ИЗ Таб ГДЕ Дата = "03/02"
ВЫБРАТЬ Число ИЗ МаксСсылка ВНУТРЕННЕЕ Таб ПО Ссылка = Ссылка

Не оно? <> вообще не смог прикрутить...
138 Бледно Золотистый
 
14.04.15
16:17
Узбагойся уже. Прав ты, прав, возьми печеньку с полки.
139 Fragster
 
гуру
14.04.15
16:17
(136) ну считай, что где-то там есть "Выбрать Различные Контрагент Поместить МножествоКонтрагентов Из Заказы"
140 Fragster
 
гуру
14.04.15
16:19
на эту тему есть неплохой анекдот

Как убить синего слона?
Ответ: ружьём для синего слона
Как убить красного слона?
Ответ: ружьём для красного слона
Как убить зелёного слона?
Ответ: Нет, не ружьем для зелёного слона! Нужно взять палку и бить слона, пока он не посинеет, после этого можно воспользоваться ружьём для синего слона!
141 Веселый молочник
 
14.04.15
16:19
(137) мой косяк. имелось ввиду срез последних на каждую дату
142 Fragster
 
гуру
14.04.15
16:20
и даже - Как убить синего слона?
- Из винтовки для синих слонов.
- А как убить красного слона?
- Его надо душить, до тех пор пока он не посинеет, затем застрелить из
винтовки для синих слонов.
- А как убить зеленого слона?
- Нужно рассказывать ему похабные анекдоты, пока он не покраснеет, затем
душить, пока не посинеет, затем застрелить из винтовки для синих
слонов.
- А как убить желтого слона?
- Дурак, желтых слонов не бывает!
143 Веселый молочник
 
14.04.15
16:22
все-таки срез последних и срез последних на каждую дату - это разные вещи. и принцип получения отличается.
144 Веселый молочник
 
14.04.15
16:23
ключевое - "на каждую дату"
145 Веселый молочник
 
14.04.15
16:26
ну чего вы, не сдавайтесь
146 koreav
 
14.04.15
16:27
походу в молоке что-то
147 Бледно Золотистый
 
14.04.15
16:28
(146) Да просто таблетки не принял вовремя. Весна.
148 Веселый молочник
 
14.04.15
16:29
(146) (147) присоединяйтесь, срач отменный, всем хватит
149 bolobol
 
14.04.15
16:29
(144) Так там просто "ГДЕ Дата = "03/02"" убрать надо, ГРУПП(Дата) добавить. Будет каждой даты срез, не?
150 Веселый молочник
 
14.04.15
16:40
(149) тогда вообще не понятно что получается, возьми пример из базы знаний по ссылке, и убери там <>
151 Bober
 
14.04.15
16:43
(140) хочешь спасти человека? возможно он еще не достиг предела в платформенных механизмах.
152 bolobol
 
14.04.15
16:52
(150) Вы в смысле что я отбираю в каждую дату срез последних? Ну, да - в (0) задача именно такая - для каждого имеющегося контрагента (в моём примере Даты) - получить максимальное.

А если ещё и саму дату надо будет сравнивать на непревышение (т.е. имеем отсутствующие даты в исходной таблице) - то знаки сравнения на непревышение использовать придётся - это ограничительный момент, который к (0) не относится.
Независимо от того, куда вы едете — это в гору и против ветра!