#0
by first_may
Добрый день. В базе есть периодический регистр сведений с измерением «Контрагент» и ресурсом «Менеджер». Подскажите пож, как с помощью запроса собрать данные по периодам, в течение которых у контрагента был тот или иной менеджер?
#1
by Лефмихалыч
Выбрать Период ИЗ регистрСведений.ПериодическийРегистрСведений ГДЕ Контрагент = &Контрагент и Менеджер = &ОпределенныйМенеджер
#2
by first_may
так получается только дата.. а как получить таблицу из колонок С По Контрагент Менеджер
#8
by Лефмихалыч
Тогда во временную, потом ещё одну временную с менеджер<>, потом ту с этой соединить по условию период<период и выбрать максимум периодов, и результат ещё раз соединить с самой первой временной. Поищи 'срез последних на каждую дату' - это один и самых распространенных шаблонов проектирования у 1сников
#9
by SleepyHead
Если запросы не знаешь, выгружай в таблицу значений результат простого запроса, в виде сортируй по дате начала, добавляй колонку "дата окончания", пробегайся по строкам таблицы и проставляй дату окончания. Не буду писать, как это сделать, догадайся.
#10
by KishMish
я так понял, есть данные на каждую дату Дата Контрагент Менеджер Надо сделать эту таблицу периодами? ДатаНач ДатаКон КОнтрагент Менеджер Если да то вот этот кусок кода это делает //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ в_Графики.Сотрудник, ГДЕ НЕ вт_Данные.Сотрудник ЕСТЬ NULL И (вт_ДанныеП.ДатаВыхода ЕСТЬ NULL ИЛИ вт_ДанныеС.ДатаВыхода ЕСТЬ NULL) ; вт_ГотовыеПериоды.ДатаНачала, И (вт_Данные.ДатаВыхода МЕЖДУ вт_ГотовыеПериоды.ДатаНачала И вт_ГотовыеПериоды.ДатаОкончания) СГРУППИРОВАТЬ ПО
#11
by KishMish
+ если есть вопросы тексту запроса задавай Основная тема такая Ищем Границы периодов - вт_ПоискГраниц Потом получаем периоды - вт_ГотовыеПериоды А потом соединяем вт_ГотовыеПериоды с данными
#13
by first_may
а вот тут ВЫБРАТЬ вт_Данные.ДатаВыхода КАК ДатаВыхода, вт_Данные.Сотрудник, ГДЕ НЕ вт_Данные.Сотрудник ЕСТЬ NULL И (вт_ДанныеП.ДатаВыхода ЕСТЬ NULL ИЛИ вт_ДанныеС.ДатаВыхода ЕСТЬ NULL) ; (ДОБАВИТЬКДАТЕ(вт_Данные.ДатаВыхода, ДЕНЬ, 1) = вт_ДанныеС.ДатаВыхода) ??
#14
by KishMish
таблица вт_Данные должна содержать данные на каждый день интерисуемого периода без пропусков. То есть в твоем случае тебе в таблице Данные нужно сделать так чтобы было Период Контрагент Менеджер 01.01.2017 Контрагент1 Менеджер1 02.01.2017 Контрагент1 Менеджер1 03.01.2017 Контрагент1 Менеджер1 03.01.2017 Контрагент1 Менеджер2 04.01.2017 Контрагент1 Менеджер2 05.01.2017 Контрагент1 Менеджер2 ... 01.01.2017 Контрагент2 Менеджер3 02.01.2017 Контрагент2 Менеджер3 03.01.2017 Контрагент2 Менеджер3 03.01.2017 Контрагент2 Менеджер3 04.01.2017 Контрагент2 Менеджер2 05.01.2017 Контрагент2 Менеджер2 ... и так далее. то есть то есть состояние на каждый день, для каждой совокупности Контрагент Менеджер. Ты сможешь ее получить? и далее при получении вт_ПоискГраниц код твой будет такой И вт_Данные.Контрагент = вт_ДанныеП.Контрагент И вт_Данные.Менеджер = вт_ДанныеП.Менеджер
#15
by KishMish
+ ГДЕ НЕ вт_Данные.Контрагент ЕСТЬ NULL И (вт_ДанныеП.ДатаВыхода ЕСТЬ NULL ИЛИ вт_ДанныеС.ДатаВыхода ЕСТЬ NULL)
#16
by KishMish
и ответ на почему именно (ДОБАВИТЬКДАТЕ(вт_Данные.ДатаВыхода, ДЕНЬ, 1) = вт_ДанныеС.ДатаВыхода) я соеденяю таблицу со следующим днем (ДОБАВИТЬКДАТЕ(вт_Данные.ДатаВыхода, ДЕНЬ, 1) = вт_ДанныеС.ДатаВыхода) и с предыдущим ПО (ДОБАВИТЬКДАТЕ(вт_Данные.Период, ДЕНЬ, -1) = вт_ДанныеП.Период)
#17
by first_may
а у меня нет следующего дня, так как есть например запись 01.05.2011 .. 03.08.2011 ..
#18
by first_may
"то есть состояние на каждый день" - такого нет, есть большой промежуток между датами..
#19
by KishMish
сделай из нее таблицу на все даты. как делать? найти в инете как запросом получить курсы валют на каждый день. и сделай по тому типу свою например там используется ПроизводсвенныйКалендарь. Если у тебя нет календаря, то тогда тебе нужно сформировать таблицу дат. это запрос тоже можно в инете найти.
#20
by Diman000
В детали сабжа я не вникал, но навскидку в не самый плохой вариант предложен. Сервер SQL мощная штука, смекалистая и многое умеет оптимизировать. Я про MS, с остальными в промышленном масштабе не работал. Но задачи сложные для запросов частенько лучше решать кодом на сервере приложений, чем придумывать или искать хитрые решения, которые могут прилично нагрузить сервер СУБД.
#25
by Diman000
Присоединяюсь к вопросу Кому надо? Есть процедура или функция которая обрабатывает именно результат запроса? Тогда ее надо немного подправить, это недолго. Есть динамический список в который хочется зафигачить этот запрос? Тогда этого делать нельзя, это прилично затормозит форму. Лучше переписать на статическую таблицу. Но это долго. Но надо. Ну и третий вариант, тебе поставили задачу выдать именно РезультатЗапроса? В таком случае надо включить свою голову и обосновать постановщику почему это плохо. Могут быть и еще варианты, мне было бы интересно их услышать.
#26
by KishMish
метод решения зависит от предполагаемого количества строк в результате. При большом количество строк в выходной таблице обработка строк в цикле будет намного дольше чем запросом.
#29
by Diman000
Если все так серьезно, то загляните сразу в профайлер SQL. Для саморазвития очень полезно)
#30
by first_may
добрый день.. тут ВЫБРАТЬ в_Графики.Сотрудник, я понимаю, что в_Графики - это календарь дней, то есть 01.01.., 02.01.. и тд.. а вт_УказанныеРанее - ?
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям
Похожие вопросы 1С
- 7.7: Запрос к периодическому реквизиту справочника: на какую дату он получается?
- Запрос по периодическому регистру сведений
- Один запрос - все ок , два запрос - не получается :(
- Запрос по периодическому регистру сведений, срез последних
- Формирование запроса по периодическому регистру сведений
- СКД Запрос к периодическому регистру передать список периодов
- Запрос в обработке и запрос в консоли отчетов выдают разные результаты
В этой группе 1С
- Не загружаются банковские выписки в УНФ 1.6
- атол 90 ф инкассация-закрытие смены
- 1С КА 1.1 Чек ККМ на возврат
- v7: ЗиК 7.7 - выплата по документу с предварительным удержанием, рассчитывает с копейками
- Отображение суммы по карте лояльности в УТ 11.1
- v7: Выгрузка УПД в xml-формат для передачи в ЭДО
- БП 3.0, ЗуП 2.5, пособия по больничным листам, КУДиР
- СКД неправильно считаются остатки
- Ошибка установки соединения в 8.3.9 и переход на 8.3.10
- ЗУП 3.1 Доплата отпуска до оклада
- УТ 11 - продажа с двух ККМ
- ЗУП расчет общего стажа
- Где 1С хранит настройки регламентных заданий?
- 1с Розница как лучше сделать 2 кассы
- Как добавить справочник для выбора в тип значения доп. реквизита.
- сом объект на клиенте
- УПП,РАУЗ,списание затрат на выпуск
- Запретить видимость проведенного документа УТ11.4
- Вывод табличной части формы в макет
- Табличная часть не отображается в другой форме