Имя: Пароль:
1C
1С v8
Составить запрос
0 Csar
 
05.02.14
17:26
Всем привет.
Помогите, пожалуйста, сформировать текст запроса, который делал бы выборку из регистра сведений (непериодический)  с ограничением по дате документа (Документ - это поле регистра, а дата документа - обязательный параметр). Пример регистра такой (примерная расшифровка полей):
"Номенклатура/Документ/ОстальныеПоля"
Нужно выбрать все записи за определенный период (по дате документа как поля), НО бывают записи с одинаковыми полями "Номенклатура", но разными полями "Документ". Так вот нужно, что бы в выборку попадали записи регистра с неповторяющимися полями "Номенклатура" и, в случае, если существует две или более записи с одинаковыми полями "Номенклатура", то нужно брать запись с наиболее поздней датой поля "Документ", но также с проверкой на вхождение в указанный период.
1 Csar
 
05.02.14
17:27
С запросом без условия на отсев лишних записей по полю Номенклатура нет никаких проблем, а вот как реализовать отсев дублированной номенклатуры, да еще и выбором записи с наиболее поздней датой Документа - это не могу реализовать
2 Fram
 
05.02.14
17:29
(1) классическая задачка. я такой запрос при приеме на работу задаю. практически аналог среза последних
3 Csar
 
05.02.14
17:57
(2) Для срезаПоследних - легко/ Подскажите, пожалуйста, общий алгоритм хотя бы
4 salvator
 
05.02.14
18:02
(3)
1. Выбираешь максимальную дату
2. Среди этих документов ищешь максимульную ссылку.
3. Соединяешь с таблицей регистра по этой ссылке.
5 Csar
 
05.02.14
18:38
(4) Правильно ли я понимаю, что сначала выбираем дуплет типа "Номенклатура/Максимум(Дата)" из регистра с ограничениями на заданный период рассмотрения регистра. Затем делаем полноценную выборку с опять же наложением ограничения на рассматриваемый период и соединением с предыдущем выборкой по обоим полям?
6 Csar
 
05.02.14
18:40
+ (5). В конечном запросе видимо не нужно ставить ограничение на период, т.к. достаточно ограничения его в первом запросе?
7 fisher
 
05.02.14
18:41
Ограничений много не бывает.
Пропустил второй этап - он нужен, чтобы обработать ситуацию с несколькими доками в одной секунде.
А так - да. Правильно понял.
8 Csar
 
05.02.14
18:42
(7) я не понял второго пропущенного этапа
9 Csar
 
05.02.14
18:44
(7) я ведь рассматриваю выборку не просто по МаксДате, а по сочетанию Номенклатура/Дата.
10 fisher
 
05.02.14
18:45
А надо - Номенклатура/ПозицияДокумента
11 Csar
 
05.02.14
18:47
(10) а как это реализовать?
12 Fram
 
05.02.14
18:50
МоментВремени вроде есть в запросах
13 Fram
 
05.02.14
18:51
правда не знаю работает ли он в функции Максимум
14 fisher
 
05.02.14
18:53
Точно таким же приемом.
Как ты нашел максимальные даты - так же находишь максимальные ссылки в датах (соединение по номенклатуре и дате). После этого дата тебе уже не нужна. Соединяешь с исходным запросом по номенклатуре и ссылке.
(13) Вроде нельзя. Это кажись просто функция навроде представления. Вычисляется уже сервером приложений при обработке результата запроса.
15 fisher
 
05.02.14
18:54
Вру. Вычисляется в СУБД, но все равно ничего с ней не сделаешь.
16 Fram
 
05.02.14
18:55
+(13) похоже что нет
17 Csar
 
05.02.14
18:55
(14) Просто Номенклатура/МАКСИМУМ(Док.Ссылка) ?
18 Csar
 
05.02.14
18:57
(14) Тогда нужно больше этапов (4шт выходит)?
1) Выборка Номенклатура/МАКСИМУМ(Дата)
2) Выборка Номенклатура/Ссылка с соединением по Выборка из 1)
3) Выборка Номенклатура/МАКСИМУМ(Ссылка)с соединением по Выборка из 2)
4) Выборка итоговая с соединением по Выборка из 3)
19 Csar
 
05.02.14
19:28
Ответа скорее всего я не дождусь. Поэтому спасибо большое отвечающим! Очень помогли.
20 fisher
 
05.02.14
19:49
(17) Номенклатура/МаксимальнаяДата/МАКСИМУМ(Док.Ссылка)
(18)
1) Номенклатура/МАКСИМУМ(Дата)
2) Номенклатура/МаксимальнаяДата/МАКСИМУМ(Ссылка) - в соединении п.1 и исходной таблицы
3) Соединение исходной таблицы с п.2 по Номенклатура/МаксимальнаяСсылкаВМаксимальнойДате
21 Csar
 
05.02.14
20:12
(20) Спасибо!
AdBlock убивает бесплатный контент. 1Сергей