|
v8: Запрос. Последние документы | ☑ | ||
---|---|---|---|---|
0
tempaccount
20.09.13
✎
16:20
|
Есть документ А, у него есть реквизит Б, как вывести все последние документы на каждый Б. Т.е. выводить Максимальную ССЫЛКУ А, для каждого возможного Б.
Т.е. Для Б создано 3 А, а для другого Б создано 2 А, хочу вывести 2 последних А, для первого и 2ого Б соответственно П.с. надеюсь понятно объяснил. Заранее спасибо. |
|||
1
Ненавижу 1С
гуру
20.09.13
✎
16:22
|
максимальную ссылку или ссылки с максимальной датой?
|
|||
2
tempaccount
20.09.13
✎
16:26
|
(1) Ссылку. Ник хорош!
|
|||
3
Лефмихалыч
20.09.13
✎
16:37
|
Б! на ко Х это надо?
|
|||
4
Лефмихалыч
20.09.13
✎
16:37
|
(2) а ты уверен, что понимаешь разницу?
|
|||
5
tempaccount
20.09.13
✎
16:39
|
(4) О какой разнице идет речь?
Для дома есть несколько проведенных документов, как в ЗАПРОСЕ посмотреть для всех домов последние по ссылке документы? Это что невозможно? |
|||
6
ale-sarin
20.09.13
✎
16:42
|
(5) А что есть для Вас "последние по ссылке документы"? Может последние по времени?
|
|||
7
Maxus43
20.09.13
✎
16:42
|
Группирой по Дому и МАКСИМУМ(документ.Ссылка)
или чего? |
|||
8
Лефмихалыч
20.09.13
✎
16:42
|
(5) о разнице между максимальной ссылкой и ссылкой на документ с максимальной датой. Она есть и огромная
|
|||
9
tempaccount
20.09.13
✎
16:43
|
(6) Нет, по ссылке, Документы могут заносить задним числом.
Я может некорректно выразил свою мысль? Не совсем понимаю в чем проблема? Или придется получать все, и циклом обходить в поисках последних ссылок |
|||
10
Сторно абсурда
20.09.13
✎
16:44
|
(5) таrая формулировка подходит?
посмотреть для всех домов последние по моменту времени документы? |
|||
11
Поросенок Петр
20.09.13
✎
16:44
|
Телепатирую: то что хочет автор, не взлетит.
|
|||
12
ale-sarin
20.09.13
✎
16:46
|
(9) Нет, проблем нет. Это возможно. Просто в (0) Вы пишете про последние документы. Вот мы и спрашиваем, что есть "последние"?
Может те, которые введены в программу позже? |
|||
13
tempaccount
20.09.13
✎
16:46
|
(7) Группировка по дому, тогда как мне поймать ТАБЛИЧНУЮ часть этого документа? Актуальна именно она, и лишь та, что последней внесена :)
|
|||
14
Лефмихалыч
20.09.13
✎
16:48
|
ммм, интрига разворачивается!
постойте - я за попкорном сгоняю |
|||
15
ale-sarin
20.09.13
✎
16:49
|
(13) А кто Вам сказал, что последний внесенный документ - это последняя ссылка?
|
|||
16
Maxus43
20.09.13
✎
16:49
|
(13) документ сначала достань, запули это в ВТ, потом соеденишь ТЧ последнего дока, ранее найденного со ссылкой на док
|
|||
17
tempaccount
20.09.13
✎
16:50
|
(15) Ошибся, скажите как вывести просто последнии, пускай по дате
|
|||
18
ale-sarin
20.09.13
✎
16:51
|
(17) Группировка по Максимум(Док.Дата)
|
|||
19
ale-sarin
20.09.13
✎
16:52
|
+18 Не дословно...
|
|||
20
Анцеранана
20.09.13
✎
16:53
|
я конечно дико извиняюсь если не так понял
Автор.. может поможет тебе вот такая статья или типа нее: http://akim-off.blogspot.ru/2013/02/1c8.html Имхо тут нужен коррелированный запрос,хотя могу ошибаться |
|||
21
tempaccount
20.09.13
✎
16:53
|
(18) Группировка выдаст последний? И как Вы прописываете функцию? У меня пишет ошибка "Операция запрещена в сгруппировать..."
|
|||
22
ale-sarin
20.09.13
✎
16:59
|
(21)
ВЫБРАТЬ ФормированиеЗаписейКнигиПродажРеализация.Ссылка, МАКСИМУМ(РеализацияТоваровУслуг.Дата) КАК Дата ПОМЕСТИТЬ ВТ_МаксДата ИЗ Документ.ФормированиеЗаписейКнигиПродаж.Реализация КАК ФормированиеЗаписейКнигиПродажРеализация ЛЕВОЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг ПО ФормированиеЗаписейКнигиПродажРеализация.СчетФактура = РеализацияТоваровУслуг.Ссылка СГРУППИРОВАТЬ ПО ФормированиеЗаписейКнигиПродажРеализация.Ссылка ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ МАКСИМУМ(РеализацияТоваровУслуг.Ссылка) КАК Ссылка, ВТ_МаксДата.Ссылка КАК Ссылка1 ИЗ ВТ_МаксДата КАК ВТ_МаксДата ЛЕВОЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг ПО ВТ_МаксДата.Дата = РеализацияТоваровУслуг.Дата СГРУППИРОВАТЬ ПО ВТ_МаксДата.Ссылка |
|||
23
Лефмихалыч
20.09.13
✎
17:05
|
(22) ты вот зря так на неокрепший ум. Он же не сможет понять, где ошибка
|
|||
24
tempaccount
20.09.13
✎
17:06
|
(22) А без временных таблиц можно?
|
|||
25
tempaccount
20.09.13
✎
17:06
|
(24) Т.е. вообще возможно?
|
|||
26
ale-sarin
20.09.13
✎
17:07
|
(23) Есть, конечно, косячок. Но задачу решает.
|
|||
27
ale-sarin
20.09.13
✎
17:07
|
(24) Можно. Вложенной.
|
|||
28
Ненавижу 1С
гуру
20.09.13
✎
17:10
|
не взлетит, нигде в базе не хранится какой документ был внесен последним, если этого не сделали специально
более того, последний это который INSERT последний или который UPDATE OR INSERT? |
|||
29
Лефмихалыч
20.09.13
✎
17:14
|
(28) в журнале регистрации хранится, если он включен и настроен. Но с ним сношаться - ну его нафиг, если предварительно не придуман специальный велосипед, облегчающий это дело
|
|||
30
ale-sarin
20.09.13
✎
17:17
|
(28) (29) Автор уже согласился с последним по времени доком.
|
|||
31
Ненавижу 1С
гуру
20.09.13
✎
17:21
|
(29) я говорю в базе, а не в журнале, там искать - себе дороже, согласен
|
|||
32
tempaccount
20.09.13
✎
17:24
|
Попробую коррелир написать.
|
|||
33
tempaccount
20.09.13
✎
19:57
|
Реализую запросом и на основе его в цикле буду запросы фигачить, но это очень плохая идея, мб кто-нибудь поможет превратит его в ВТ, близким к (22)
&НаСервере Процедура АктуальныеДанные() ДокументыЗапрос = Новый Запрос("ВЫБРАТЬ | Документ.Дом, | Документ.Номер |ИЗ | Документ.Документ КАК Документ |ГДЕ | Документ.Год МЕЖДУ &НачалоГода И &КонецГода | И Документ.Проведен = ИСТИНА"); ДокументыЗапрос.УстановитьПараметр("НачалоГода",НачалоГода(Объект.Период)); ДокументыЗапрос.УстановитьПараметр("КонецГода",КонецГода(Объект.Период)); Результат = ДокументыЗапрос.Выполнить().Выбрать(); АктуальныеДокументы = Новый Соответствие; Пока Результат.Следующий()Цикл Содержит(АктуальныеДокументы, Результат.Дом, Результат.Номер); КонецЦикла; ГотовыеДанные = Новый Структура("Месяц_1, Месяц_2, Месяц_3, Месяц_4, Месяц_5, Месяц_6, Месяц_7, Месяц_8, Месяц_9, Месяц_10, Месяц_11, Месяц_12"); ЗапросТЧ = Новый Запрос("ВЫБРАТЬ | Документ.Дом, | ДокументПлан.ЯнвНат КАК Месяц_1, | ДокументПлан.ФевНат КАК Месяц_2, | ДокументПлан.МартНат КАК Месяц_3, | ДокументПлан.АпрНат КАК Месяц_4, | ДокументПлан.МайНат КАК Месяц_5, | ДокументПлан.ИюньНат КАК Месяц_6, | ДокументПлан.ИюльНат КАК Месяц_7, | ДокументПлан.АвгНат КАК Месяц_8, | ДокументПлан.СентНат КАК Месяц_9, | ДокументПлан.ОктНат КАК Месяц_10, | ДокументПлан.НояНат КАК Месяц_11, | ДокументПлан.ДекНат КАК Месяц_12 |ИЗ | Документ.Документ.План КАК ДокументПлан | ЛЕВОЕ СОЕДИНЕНИЕ Документ.Документ КАК Документ | ПО ДокументПлан.Ссылка = Документ.Ссылка |ГДЕ | Документ.Номер = &Номер"); Для Каждого Документик Из АктуальныеДокументы Цикл ЗапросТЧ.УстановитьПараметр("Номер", Документик.Значение); ВременныйРезультат = ЗапросТЧ.Выполнить().Выбрать(); Пока ВременныйРезультат.Следующий() Цикл Для к = 1 по 12 Цикл ГотовыеДанные["Месяц_" + к] = ВременныйРезультат["Месяц_" + к]; КонецЦикла; КонецЦикла; КонецЦикла; КонецПроцедуры &НаСервере Процедура Содержит(Соответсвие, Ключ, Значение) Для Каждого Документ из Соответсвие Цикл Если (Документ.Ключ = Ключ) Тогда Соответсвие.Вставить(Ключ, ?(Документ.Значение > Значение, Документ.Значение, Значение)); Возврат; КонецЕсли; КонецЦикла; Соответсвие.Вставить(Ключ, Значение); КонецПроцедуры |
|||
34
tempaccount
20.09.13
✎
19:58
|
Я не дописал, но Вы поняли что щит выходит, хотя на сервере при правильном запросе все равное не густо, но запрос всяко оптимизированей делается чем вручную запросы и циклы. Я не хочу такое! А ВТ писать не понимат как
|
|||
35
tempaccount
20.09.13
✎
20:40
|
Этот щит работает!
&НаСервере Функция АктуальныеДанные() ДокТЧументыЗапрос = Новый Запрос("ВЫБРАТЬ | Док.Дом, | Док.Номер |ИЗ | ДокТЧумент.Док КАК Док |ГДЕ | Док.Год МЕЖДУ &НачалоГода И &КонецГода | И Док.Проведен = ИСТИНА"); ДокТЧументыЗапрос.УстановитьПараметр("НачалоГода",НачалоГода(Объект.Период)); ДокТЧументыЗапрос.УстановитьПараметр("КонецГода",КонецГода(Объект.Период)); Результат = ДокТЧументыЗапрос.Выполнить().Выбрать(); АктуальныеДокТЧументы = Новый Соответствие; Пока Результат.Следующий()Цикл Содержит(АктуальныеДокТЧументы, Результат.Дом, Результат.Номер); КонецЦикла; Готово = Новый Массив; ЗапросТЧ = Новый Запрос("ВЫБРАТЬ | Док.Дом, | ДокТЧ.ЯнвНат КАК Месяц_1, | ДокТЧ.ФевНат КАК Месяц_2, | ДокТЧ.МартНат КАК Месяц_3, | ДокТЧ.АпрНат КАК Месяц_4, | ДокТЧ.МайНат КАК Месяц_5, | ДокТЧ.ИюньНат КАК Месяц_6, | ДокТЧ.ИюльНат КАК Месяц_7, | ДокТЧ.АвгНат КАК Месяц_8, | ДокТЧ.СентНат КАК Месяц_9, | ДокТЧ.ОктНат КАК Месяц_10, | ДокТЧ.НояНат КАК Месяц_11, | ДокТЧ.ДекНат КАК Месяц_12 |ИЗ | ДокТЧумент.Док.План КАК ДокТЧ | ЛЕВОЕ СОЕДИНЕНИЕ ДокТЧумент.Док КАК Док | ПО ДокТЧ.Ссылка = Док.Ссылка |ГДЕ | Док.Номер = &Номер | И ДокТЧ.ВидРабот = &ВидРабот"); ЗапросТЧ.УстановитьПараметр("ВидРабот", Объект.Работа); Для Каждого ДокТЧументик Из АктуальныеДокТЧументы Цикл ЗапросТЧ.УстановитьПараметр("Номер", ДокТЧументик.Значение); ВременныйРезультат = ЗапросТЧ.Выполнить().Выбрать(); Пока ВременныйРезультат.Следующий() Цикл ГотовыеДанные = Новый Структура("Дом ,Месяц_1, Месяц_2, Месяц_3, Месяц_4, Месяц_5, Месяц_6, Месяц_7, Месяц_8, Месяц_9, Месяц_10, Месяц_11, Месяц_12"); ГотовыеДанные.Дом = ВременныйРезультат.Дом; Для к = 1 по 12 Цикл ГотовыеДанные["Месяц_" + к] = ВременныйРезультат["Месяц_" + к]; КонецЦикла; Готово.Добавить(ГотовыеДанные); КонецЦикла; КонецЦикла; Возврат Готово; КонецФункции &НаСервере Процедура Содержит(Соответсвие, Ключ, Значение) Для Каждого ДокТЧумент из Соответсвие Цикл Если (ДокТЧумент.Ключ = Ключ) Тогда Соответсвие.Вставить(Ключ, ?(ДокТЧумент.Значение > Значение, ДокТЧумент.Значение, Значение)); Возврат; КонецЕсли; КонецЦикла; Соответсвие.Вставить(Ключ, Значение); КонецПроцедуры |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |