В запросе выбрать первые записи #716731


#0 by olbir
Добрый день! Подскажите, пожалуйста, как в запросе выбрать первые записи по каждой номенклатуре ВЫБРАТЬ     ХозрасчетныйОстаткиИОбороты.Счет,     ХозрасчетныйОстаткиИОбороты.Субконто1 КАК Номенклатура,     ХозрасчетныйОстаткиИОбороты.КоличествоКонечныйОстатокДт,     Реализация.Сумма     Реализация.Ссылка.Дата >= &НачалоПериода и Реализация.Ссылка.Дата <= &КонецПериода         УПОРЯДОЧИТЬ ПО  Реализация.Номенклатура, Реализация.Ссылка.Дата
#1 by PR
ИТОГИ
#2 by olbir
? Мне нужны первые записи по каждой номенклатуре
#3 by PR
! Да
#4 by Господин ПЖ
ам/кг кривой запрос
#5 by PR
+ Подсказка из серии "А не в амперах ли измеряется сила тока?". ИТОГИ по номенклатуре.
#6 by olbir
Я вас поняла, но не получается то что нужно ВЫБРАТЬ     ХозрасчетныйОстаткиИОбороты.Счет,     ХозрасчетныйОстаткиИОбороты.Субконто1 КАК Номенклатура,     ХозрасчетныйОстаткиИОбороты.КоличествоКонечныйОстатокДт,     Реализация.Сумма     Реализация.Ссылка.Дата >= &НачалоПериода и Реализация.Ссылка.Дата <= &КонецПериода         УПОРЯДОЧИТЬ ПО  Реализация.Номенклатура, Реализация.Ссылка.Дата     ИТОГИ ПО Реализация.Номенклатура
#7 by PR
Плохо. Фото опять же нет. Лучше всего вызвать программиста.
#8 by salvator
Выбрать первые 1 номенклатура, ссылка из документ реализация упорядочить по дата реализации убыв. Затем соединить с регистром бухгалтерии
#9 by salvator
тьфу, не первые 1, а сгруппировать по номенклатуре с функцией минимум по дате документа
#10 by Крошка Ру
А теперь я что-то не въезжаю... При чем здесь ИТОГИ?
#11 by PR
Рукалицо А как ты предлагаешь делать?
#12 by RomanYS
смущает, что ТС выбирает количество и сумму, а говорит про первые записи Вопрос: нужно вывести количество и сумму из наиболее ранней накладной? Если там несколько строчек с одной номенклатурой?
#13 by mikecool
как итогами выбрать первые 5 записей по каждой номенклатуре?
#14 by Крошка Ру
Рукалицо в ответочку. Как ИТОГИ помогут получить первые записи по каждой номенклатуре из регистра, начиная с НачалаПериода? В вполне работающий вариант.
#15 by olbir
количество и сумму из наиболее ранней накладной
#16 by olbir
можно поподробнее..
#17 by RomanYS
варианта 2: 1)"Коррелированные запросы" - поиск в помощ 2) из , только там придется учесть, что у накладных может быть одинаовое время
#18 by PR
И как спрашивается группировать остальные поля, кроме номенклатуры и даты документа?
#19 by Леха Дум
смотри - там получится таблица, ее по дате и нужно будет и остальным значимым полям соединять с исходной таблицей
#20 by Крошка Ру
Соединяем ТЧ документа и обороты регистра по номенклатуре, группируем по номенклатуре, по периоду - минимум; выгружаем в ВТ. Соединяем ВТ и регистр по номенклатуре и периоду - и вуаля, первые записи из регистра по каждой номенклатуре.
#21 by RomanYS
если у двух ранних документов будет одинаковое время - получишь задвоение
#22 by RomanYS
ГДЕ     ТЧ.Ссылка.Проведен     И ТЧ.Ссылка.Дата МЕЖДУ &НачалоПериода И &КонецПериода ;             (ВЫБРАТЬ ПЕРВЫЕ 1
#23 by salvator
_примерно_ так ВЫБРАТЬ         (ВЫБРАТЬ
#24 by Крошка Ру
Если у двух документов время одинаковое, то и первых записей - две. А по номеру строки - да, группировать нужно. Вложенные запросы... Фи, какая гадость...
#25 by PR
Охренеть новинка отечественного программирования. Ну пусть так. Можно было просто выбрать первый проход по группировке, да. Меньше данных в запросе да, хорошо наверное.
#26 by PR
Не по периоду, а по периоду и регистратору.
#27 by Крошка Ру
Да вариантов-то много существует, выбирай любой. Никто и не говорил, что здесь предложены оптимальные решения
#28 by RomanYS
в поспешил, должно быть так ВЫБРАТЬ     ТЧ.Ссылка,     ТЧ.НомерСтроки, ГДЕ     ТЧ.Ссылка.Проведен     И ТЧ.Ссылка.Дата МЕЖДУ &НачалоПериода И &КонецПериода ;     Реал.Ссылка В             (ВЫБРАТЬ ПЕРВЫЕ 1                 Реализации.Ссылка КАК Ссылка             ИЗ насчет вложенных запросов - в целом согласен, но в данном случае (коррелированный запрос) это исключение. По другому нельзя выбрать, например, первые 10 записей по номенклатуре
#29 by RomanYS
так нельзя: минимум по регистратору может не совпасть с минимумом по дате, в итоге при последующем соединении ничего не получишь
#30 by Леха Дум
выбрать первые 10 записей по номенклатуре при наличии даты можно без кор. запроса
#31 by RomanYS
по каждой номенклатуре, покажи
#32 by Крошка Ру
Да легко:
#33 by RomanYS
да, вариант Но при наличии 3 полей упорядочивания(дата, ссылка, номер строки) условие соединения будет довольно громозким
#34 by Крошка Ру
Да это вообще пипец, какой неоптимальный вариант, выполняться будет кучу времени. Он интересен только с чисто теоретической точки зрения. На практике - лично я такой бы не использовал.
#35 by RomanYS
кстати первый пример из ссылки неправильно отработает ситуацию с одинаковым временем документов Данный способ удобно применять, когда есть одно поле упорядочивания с уникальными значениями
#36 by Крошка Ру
И возвращаясь к твоему запросу из ... Мне кажется или он выдаст записи только по одному регистратору? В частности - смущает строка "ВЫБРАТЬ ПЕРВЫЕ 1". Первые записи по каждой номенклатуре могут ведь и разными регистраторами делаться.
#37 by RomanYS
корень сути (коррелированного запроса) в "ГДЕ Сам был удивлен, что подобное работает в 1С
#38 by Крошка Ру
Смотри: ВЫБРАТЬ ПЕРВЫЕ 1     Реализации.Ссылка КАК Ссылка ИЗ     Реализации КАК Реализации выдаст только 1 ссылку. Соответственно, условие ГДЕ     Реал.Ссылка В             (ВЫБРАТЬ ПЕРВЫЕ 1... выполнится только для одного документа. И итоговый результат будет тоже только по одному документу.
#39 by Крошка Ру
Ааааа!!! Дошло!
#40 by RomanYS
"= Реал.Номенклатура" - это поле из внешнего запроса, т.е. для каждой номенклатуры будет свой документ
#41 by Крошка Ру
Да, понял. Но ведь это не оптимально. Вложенный запрос делается для каждой записи отдельно.
#42 by RomanYS
хз как это внутри работает, но для таких целей имхо это оптимальней
#43 by Крошка Ру
Ну хорошо, получили таблицу с номенклатурой и реализацией, где она первый раз за период упоминается. А в регистре первая запись по номенклатуре может появиться-то с другим регистратором. Или другими.
#44 by RomanYS
смотри на мой взгляд постановка задачи несколько странная, зачем такое может быть нужно?
#45 by Крошка Ру
Так, а если несколько первых записей с разными документами(не реализациями) и одинаковыми датами? А мне такие задачи попадалась: найти первые приходы за период по номенклатуре из списка, последние расходы и т.д.
#46 by RomanYS
"Так, а если несколько первых записей с разными документами(не реализациями) и одинаковыми датами?" вроде нужно найти именно из первых накладных (РТиУ) "А мне такие задачи попадалась: найти первые приходы за период по номенклатуре из списка, последние расходы и т.д." странно что из (первой) накладной берутся количественные показатели, а не , например, дата или контрагент
#47 by Крошка Ру
Не, найти именно первое движение в регистре по номенклатуре, а из реализаций - берется только список номенклатур(почему именно оттуда - вопрос к ТСу). А у меня была задача: по списку номенклатур, и списку складов найти первые поступления(не только покупка) и последние движения за период. Списки формировались отдельно и в процедуру формирования отчета попадали в готовом виде, в качестве входящих данных. Правда, не было задачи найти только одну первую запись. Если несколько одновременных движений - значит несколько.
#48 by RomanYS
"Не, найти именно первое движение в регистре по номенклатуре, а из реализаций - берется только список номенклатур(почему именно оттуда - вопрос к ТСу)." посмотри запрос , ТС явно не это имела в виду Для твоего случая делать тоже самое, но с таблицей регистра
#49 by olbir
Спасибо! То что нужно - добавила только в выборке документов условие по датам и МАКСИМУМ на МИНИМУМ заменила
#50 by EvgeniuXP
по документам никто не шарит - плохая реализация.
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям