![]() |
![]() |
|
Помогите новичку с запросом | ☑ | ||
---|---|---|---|---|
0
1С_новый
21.06.11
✎
23:19
|
Есть запрос:
ТабличнаяЧасть.Очистить(); Запрос=Новый Запрос; Запрос.Текст= "ВЫБРАТЬ | ПлановыеНачисленияРаботниковСрезПоследних.ФизЛицо, | ПлановыеНачисленияРаботниковСрезПоследних.ВидРасчета, | ПлановыеНачисленияРаботниковСрезПоследних.Показатель1, | ПлановыеНачисленияРаботниковСрезПоследних.Ведомость КАК Ведомость, | ПлановыеНачисленияРаботниковСрезПоследних.Действие КАК Действие, | ПлановыеНачисленияРаботниковСрезПоследних.Период, | ПлановыеНачисленияРаботниковСрезПоследних.ЦФО |ИЗ | РегистрСведений.ПлановыеНачисленияРаботников.СрезПоследних КАК ПлановыеНачисленияРаботниковСрезПоследних | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОтработанноеВремяСводный КАК ОтработанноеВремяРабочее | ПО ПлановыеНачисленияРаботниковСрезПоследних.ФизЛицо = ОтработанноеВремяРабочее.ФИЗЛицо | И (ОтработанноеВремяРабочее.ВидУчетаРабВремени.РабочееВремя) | И (НАЧАЛОПЕРИОДА(ОтработанноеВремяРабочее.Период, МЕСЯЦ) = НАЧАЛОПЕРИОДА(&Период, МЕСЯЦ)) | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОтработанноеВремяСводный КАК ОтработанноеВремяОтпуск | ПО ПлановыеНачисленияРаботниковСрезПоследних.ФизЛицо = ОтработанноеВремяОтпуск.ФИЗЛицо | И (ОтработанноеВремяОтпуск.ВидУчетаРабВремени = ЗНАЧЕНИЕ(Справочник.КлассификаторИспользованияРабочегоВремени.ОсновнойОтпуск)) | И (НАЧАЛОПЕРИОДА(ОтработанноеВремяОтпуск.Период, МЕСЯЦ) = НАЧАЛОПЕРИОДА(&Период, МЕСЯЦ)) | |СГРУППИРОВАТЬ ПО | ПлановыеНачисленияРаботниковСрезПоследних.ФизЛицо, | ПлановыеНачисленияРаботниковСрезПоследних.ВидРасчета, | ПлановыеНачисленияРаботниковСрезПоследних.Показатель1, | ПлановыеНачисленияРаботниковСрезПоследних.Ведомость, | ПлановыеНачисленияРаботниковСрезПоследних.Действие, | ПлановыеНачисленияРаботниковСрезПоследних.Период; Запрос.УстановитьПараметр("Период", ПериодРегистрации); Выборка = Запрос.Выполнить().Выбрать(); Получаем дынне так: Пока Выборка.Следующий() Цикл Заполнение=ТабличнаяЧасть.Добавить(); Заполнение.Колонка1 = Выборка.Период; Заполнение.Колонка2 = Выборка.Период; // вот тут проблема КонецЦикла; По нему выводится таблица, заполняется так: ------------------------------- | Дата начала| Дата окончания | ------------------------------- | Дата1 | Дата2 | ------------------------------- | Дата2 | Дата3 | ------------------------------- | Дата3 | Дата3+1 | ------------------------------- надо в правую колонку вывести данные из левой колонки только сместить её, сделать так чтобы в правую колонку записалась дата из следующей строки левой колонке Должно в итоге выглядеть так: ------------------------------- | Дата начала| Дата окончания | ------------------------------- | 01.01.2011 | 18.01.2011 | ------------------------------- | 18.01.2011 | 21.01.2011 | ------------------------------- | 21.01.2011 | 22.01.2011 | ------------------------------- |
|||
1
luckyluke
21.06.11
✎
23:32
|
Делается это через левое соединение таблицы самой на себя с условием "По таблица1.Период < Таблица2.Период" и группировкой по минимуму периода второй таблицы, что-то вроде:
Выбрать Таблица1.Период КАК ДатаНачала, Минимум(Таблица2.Период) КАК ДатаОкончания Из Таблица КАК Таблица1 Левое Соединение Таблица КАК Таблица2 По таблица1.Период < Таблица2.Период Сгруппировать ПО Таблица1.Период |
|||
2
Лефмихалыч
21.06.11
✎
23:33
|
наиух столько соединений, если поля используются только из самой левой таблицы? Удали все соединения, результат не изменится. Зачем группировка, если выборка из виртуальной таблицы? Оно уже и так сгруппировано.
|
|||
3
Лефмихалыч
21.06.11
✎
23:34
|
Надо ПлановыеНачисленияРаботниковСрезПоследних
соединить с самой собой по условию Период < Период |
|||
4
1С_новый
21.06.11
✎
23:38
|
(1) что то не работает
|
|||
5
Лефмихалыч
21.06.11
✎
23:41
|
(4) значит ты что-то не так делаешь
|
|||
6
1С_новый
21.06.11
✎
23:43
|
Лефмихалыч, а какой антиспам ответ у тебя в аське? )))
|
|||
7
Лефмихалыч
21.06.11
✎
23:43
|
кстати да, работать и не должно. Вот от этого соединения надо взять МАКСИМУМ(Таблица2.Период) и уже это соединит опять с исходной таблицей на равенство периодв и максимум периода из соединения.
Ни уя не понятно сказал, но зато по смыслу правильно |
|||
8
Лефмихалыч
21.06.11
✎
23:44
|
(6) тхе, смотря чо спрашивает
|
|||
9
1С_новый
21.06.11
✎
23:44
|
Ну блин смешно, я и за ночь походу это не сделаю ))))
|
|||
10
Лефмихалыч
21.06.11
✎
23:44
|
Я эту ветку в аське обсуждат не буду, не трудись
|
|||
11
1С_новый
21.06.11
✎
23:45
|
(9)
StopSpam automatic message: Авотнифига! У меня тут антиспам, заряженный фа...м пополам с обедненным ураном. Из раковины чего смотрит устрицей женщина, на которой, по словам Маяковского, "белила густо". |
|||
12
Лефмихалыч
21.06.11
✎
23:46
|
(11) антиспам этот заточен в акурат, чтобы не допускать товарищей, которые в школе не учились и гуглить не умеют
|
|||
13
Sakura
21.06.11
✎
23:47
|
(12) зачетный антиспам, уважаю
|
|||
14
Лефмихалыч
21.06.11
✎
23:50
|
(13) спасибо, весьма польщен неожиданно для себя
|
|||
15
1С_новый
21.06.11
✎
23:50
|
народ реально помогите пожалйсто с этим
|
|||
16
Jackman
21.06.11
✎
23:50
|
(0) Не читал, но порицаю...
|
|||
17
Лефмихалыч
21.06.11
✎
23:56
|
Как-то так надо (не исключено, что где-то больше надо заменить на меньше или содениение в использовать правое вместо левого - не особо задумывался над этими тонкостями):
|
|||
18
1С_новый
22.06.11
✎
00:08
|
в принципе сделал но ругается почему то на
|ПО ПредыдущиеПериоды.Период=Исходник.Период"; вот текст запроса Запрос=Новый Запрос; Запрос.Текст= "ВЫБРАТЬ | ПлановыеНачисленияРаботниковСрезПоследних.ФизЛицо, | ПлановыеНачисленияРаботниковСрезПоследних.ВидРасчета, | ПлановыеНачисленияРаботниковСрезПоследних.Показатель1, | ПлановыеНачисленияРаботниковСрезПоследних.Ведомость КАК Ведомость, | ПлановыеНачисленияРаботниковСрезПоследних.Действие КАК Действие, | ПлановыеНачисленияРаботниковСрезПоследних.Период, | ПлановыеНачисленияРаботниковСрезПоследних.ЦФО | ПОМЕСТИТЬ Исходник |ИЗ | РегистрСведений.ПлановыеНачисленияРаботников.СрезПоследних КАК ПлановыеНачисленияРаботниковСрезПоследних | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОтработанноеВремяСводный КАК ОтработанноеВремяРабочее | ПО ПлановыеНачисленияРаботниковСрезПоследних.ФизЛицо = ОтработанноеВремяРабочее.ФИЗЛицо | И (ОтработанноеВремяРабочее.ВидУчетаРабВремени.РабочееВремя) | И (НАЧАЛОПЕРИОДА(ОтработанноеВремяРабочее.Период, МЕСЯЦ) = НАЧАЛОПЕРИОДА(&Период, МЕСЯЦ)) | ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ОтработанноеВремяСводный КАК ОтработанноеВремяОтпуск | ПО ПлановыеНачисленияРаботниковСрезПоследних.ФизЛицо = ОтработанноеВремяОтпуск.ФИЗЛицо | И (ОтработанноеВремяОтпуск.ВидУчетаРабВремени = ЗНАЧЕНИЕ(Справочник.КлассификаторИспользованияРабочегоВремени.ОсновнойОтпуск)) | И (НАЧАЛОПЕРИОДА(ОтработанноеВремяОтпуск.Период, МЕСЯЦ) = НАЧАЛОПЕРИОДА(&Период, МЕСЯЦ)); | |ВЫБРАТЬ |МАКСИМУМ(Исходник.Период) |ПОМЕСТИТЬ ПредыдущиеПериоды |ИЗ Исходник |ЛЕВОЕ СОЕДИНЕНИЕ Исходник КАК ИсходникЕще |ПО ИсходникЕще.Период>Исходник.Период |; |ВЫБРАТЬ |Исходник.Период, |ПредыдущиеПериоды.Период КАК СмещенныйПериод |ИЗ Исходник ЛЕВОЕ СОЕДИНЕНИЕ ПредыдущиеПериоды |ПО ПредыдущиеПериоды.Период=Исходник.Период"; Запрос.УстановитьПараметр("Период", ПериодРегистрации); Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл |
|||
19
Лефмихалыч
22.06.11
✎
00:11
|
ЫЫЫААРГГХХАААААА!!!
Вот эта мандятина зачечм?
? как именно ругается, ты предлагаешь угадать? |
|||
20
1С_новый
22.06.11
✎
00:15
|
Пишет
Поле не найдено "ПредыдущиеПериоды.Период" ПО ПредыдущиеПериоды.<<?>>Период=Исходник.Период Выборка = Запрос.Выполнить().Выбрать(); В принципе она так же ругается и без мандятены )))) ТабличнаяЧасть.Очистить(); Запрос=Новый Запрос; Запрос.Текст= "ВЫБРАТЬ | ПлановыеНачисленияРаботниковСрезПоследних.ФизЛицо, | ПлановыеНачисленияРаботниковСрезПоследних.ВидРасчета, | ПлановыеНачисленияРаботниковСрезПоследних.Показатель1, | ПлановыеНачисленияРаботниковСрезПоследних.Ведомость КАК Ведомость, | ПлановыеНачисленияРаботниковСрезПоследних.Действие КАК Действие, | ПлановыеНачисленияРаботниковСрезПоследних.Период, | ПлановыеНачисленияРаботниковСрезПоследних.ЦФО | ПОМЕСТИТЬ Исходник |ИЗ | РегистрСведений.ПлановыеНачисленияРаботников.СрезПоследних КАК ПлановыеНачисленияРаботниковСрезПоследних; | |ВЫБРАТЬ |МАКСИМУМ(Исходник.Период) |ПОМЕСТИТЬ ПредыдущиеПериоды |ИЗ Исходник |ЛЕВОЕ СОЕДИНЕНИЕ Исходник КАК ИсходникЕще |ПО ИсходникЕще.Период>Исходник.Период |; |ВЫБРАТЬ |Исходник.Период, |ПредыдущиеПериоды.Период КАК СмещенныйПериод |ИЗ Исходник ЛЕВОЕ СОЕДИНЕНИЕ ПредыдущиеПериоды |ПО ПредыдущиеПериоды.Период=Исходник.Период"; Запрос.УстановитьПараметр("Период", ПериодРегистрации); |
|||
21
Лефмихалыч
22.06.11
✎
00:18
|
Включи уже голову. Поле МАКСИМУМ(Исходник.Период) не названо ни как, то есть платформа дала ему имя поле1 вместо Период.
http://lurkmore.ru/Вон_из_профессии, халявщик. Мало того, что решение твоей задачи ты у посторонних дядей выклянчил, так еще и разжевать теперь просишь до молекул, чтобы ты просто скопиастил и всё само. |
|||
22
1С_новый
22.06.11
✎
00:20
|
Причем тут халявщик просто разобраться пытаюсь, тем более только учусь
|
|||
23
Лефмихалыч
22.06.11
✎
00:21
|
(22) не пытаешься ты разобраться, не свисти
|
|||
24
Лефмихалыч
22.06.11
✎
00:21
|
+(23) все, что ты пытаешься, - чтобы завтра все было. С похером на способ достижения
|
|||
25
1С_новый
22.06.11
✎
00:32
|
ПОМЕСТИТЬ Исходник - тут это виртуальная таблица так?
|ВЫБРАТЬ |Исходник.Период, |ПредыдущиеПериоды.Период КАК СмещенныйПериод |ИЗ Исходник ЛЕВОЕ СОЕДИНЕНИЕ ПредыдущиеПериоды |ПО ПредыдущиеПериоды.Период=Исходник.Период"; ПредыдущиеПериоды.Период - это вроде существует виртуальная запись, Исходник.Период - вроде тоже существует запись хорошо сделал так |ВЫБРАТЬ |Исходник.Период, |ПредыдущиеПериоды.Период КАК СмещенныйПериод |ИЗ Исходник ЛЕВОЕ СОЕДИНЕНИЕ ПредыдущиеПериоды |ПО ПредыдущиеПериоды.Поле1=Исходник.Поле1"; ругается вообще на последии данные Исходник.Поле1, хотя она вроде есть, потому сделал так |ПО ПредыдущиеПериоды.Поле1=Исходник.Период"; теперь ругается на |ПредыдущиеПериоды.Период это тоже несуществующая запись тогда как его платформа обозвала, |ПредыдущиеПериоды.Поле1 КАК СмещенныйПериод тоже не работает. Получается в итоге так: |ВЫБРАТЬ |МАКСИМУМ(Исходник.Период) |ПОМЕСТИТЬ ПредыдущиеПериоды |ИЗ Исходник |ЛЕВОЕ СОЕДИНЕНИЕ Исходник КАК ИсходникЕще |ПО ИсходникЕще.Период>Исходник.Период |; |ВЫБРАТЬ |Исходник.Период, |ПредыдущиеПериоды.Период КАК СмещенныйПериод |ИЗ Исходник ЛЕВОЕ СОЕДИНЕНИЕ ПредыдущиеПериоды |ПО ПредыдущиеПериоды.Поле1=Исходник.Период"; Но ругается на |ПредыдущиеПериоды.Период КАК СмещенныйПериод, а именно |ПредыдущиеПериоды.Период поле период не найдено |
|||
26
Лефмихалыч
22.06.11
✎
00:37
|
(25) все правильно платформа делает, я щас тоже ругаться начну.
Перечитывай (21) и много думай о том, почему в таблице ПредыдущиеПериоды нет поля Период и не по этому ли ругается платформа |
|||
27
Boudybuilder
22.06.11
✎
11:41
|
|УПОРЯДОЧИТЬ ПО ВыбранРегистрСрезПоследних.Период";
Что тут добавить , чтоб упорядочивало по возрастанию? На данный момент упорядочивает по убыванию. |
|||
28
Boudybuilder
22.06.11
✎
12:05
|
?
|
|||
29
Boudybuilder
22.06.11
✎
14:37
|
(27) ну помогите с этим...
|
|||
30
BuHu
22.06.11
✎
14:39
|
(27) Возр
|
|||
31
Boudybuilder
22.06.11
✎
14:48
|
(30)Возр и Убыв ... Я знаю , но куда дописать?
Перепиши мою строку , чтоб нагляднее было... |
|||
32
BuHu
22.06.11
✎
14:51
|
|УПОРЯДОЧИТЬ ПО ВыбранРегистрСрезПоследних.Период Возр
|
|||
33
Boudybuilder
22.06.11
✎
14:54
|
(32) Спасибо!
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |