Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Составить запрос выборки ВидаРасчет
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 8.2 > Программирование обычных форм 1С 8.2 и не интерфейсной логики
vadim007
Всем привет.
Конфигурация ЗУП, последняя.
Регистр сведений ПлановыеНачисленияРаботниковОрганизаций.
В него информация поступает из документа ВводСведенийОПлановыхНачисленияхРаботниковОрганизаций.
Например,
01.04.15 - один вид начисления.
01.06.15 - другой вид начисления.
01.08.15 - еще один вид начисления.
и т.д.
Чем-то это похоже на периодические реквизиты в 7-ке.
Нужно на заданную дату выбрать только ОДИН, действующий, вид начисления.
Простое условие
ГДЕ (ПлановыеНачисленияРаботниковОрганизаций.Период <= &ДатаДокумента)

не подходит - выбираются виды начислений за предыдущие периоды.
А нужен за ближаюшую дату.
Vofka
Надо использовать виртуальную таблицу СрезПоследних:

Выбрать
   *
ИЗ
   РегистрСведений.ПлановыеНачисленияРаботниковОрганизаций.СрезПоследних(&ДатаДокумента)
vadim007
Vofka, не работает.
В консоли запросов составил запрос
ВЫБРАТЬ
    ПлановыеНачисленияРаботниковОрганизаций.Период,
    ПлановыеНачисленияРаботниковОрганизаций.Регистратор,
    ПРЕДСТАВЛЕНИЕ(ПлановыеНачисленияРаботниковОрганизаций.Регистратор),
    ПлановыеНачисленияРаботниковОрганизаций.Сотрудник,
    ПРЕДСТАВЛЕНИЕ(ПлановыеНачисленияРаботниковОрганизаций.Сотрудник),
    ПлановыеНачисленияРаботниковОрганизаций.ВидРасчета,
    ПРЕДСТАВЛЕНИЕ(ПлановыеНачисленияРаботниковОрганизаций.ВидРасчета)
ИЗ
    РегистрСведений.ПлановыеНачисленияРаботниковОрганизаций.СрезПоследних(ДатаВремя(2015,08,01)) КАК ПлановыеНачисленияРаботниковОрганизаций

Выводятся все начисления. А нужно только одно.
Vofka
vadim007, надо же условие на вид начисления поставить.
vadim007
Нашел вот подобное на необходимо зарегистрироваться для просмотра ссылки
9. Вопрос Как прочитать данные, актуальные на определенную дату, из регистра сведений «Курсы валют» с отбором по нескольким валютам (отбор по измерениям)
Ответ

Запрос = Новый Запрос;
МассивВалют = Новый Массив;
МассивВалют.Добавить(Валюта1);
МассивВалют.Добавить(Валюта2);

Запрос.УстановитьПараметр("МассивВалют", МассивВалют);
Запрос.УстановитьПараметр("ДатаПолучения", ДатаПолучения);

Запрос.Текст = "
|ВЫБРАТЬ
|                  ВалютыСрезПоследних.Валюта,
|                  ВалютыСрезПоследних.Курс
|ИЗ
|                  РегистрСведений.КурсыВалют.СрезПоследних(&ДатаПолучения, Валюта В

(&МассивВалют)) КАК ВалютыСрезПоследних";

ТаблицаКурсов = Запрос.Выполнить().Выгрузить();

Не могу понять его. Для чего устанавливаются параметры?

Цитата(Vofka @ 15.07.15, 13:12) необходимо зарегистрироваться для просмотра ссылки
vadim007, надо же условие на вид начисления поставить.

Vofka, в том-то и дело, что мне нужно ОДНО начисление, действующее на заданную дату. Какое оно будет - не знаю.
Vofka
vadim007, ну тогда отсортируйте по дате по убыванию и возьмите 1 запись.
vadim007
Вот так получилось то, что хотел.
PS: ощущение, будто шаманил с бубном 47046430.gif
alexandr_f
Цитата(vadim007 @ 15.07.15, 13:45) необходимо зарегистрироваться для просмотра ссылки
Вот так получилось то, что хотел.
PS: ощущение, будто шаманил с бубном 47046430.gif

А как получилось?
Плюс непонятно - если начисление не прекращено - то но действует.
если у Вас всего 1 начисление - то надо взять максимальную дату
vadim007
alexandr_f, начислений несколько. Нужно выбрать одно действующее, последнее. Проверка на прекращение начисления еще больше усложнит запрос.
На демо-базе правильно заработал такой запрос:
|        (ВЫБРАТЬ ПЕРВЫЕ 1
|            ПлановыеНачисленияРаботниковОрганизаций.Сотрудник,
|            ПлановыеНачисленияРаботниковОрганизаций.ВидРасчета
|        ИЗ
|            РегистрСведений.ПлановыеНачисленияРаботниковОрганизаций.СрезПоследних(&ДатаДокумента) КАК ПлановыеНачисленияРаботниковОрганизаций
|        ГДЕ
|            (ПлановыеНачисленияРаботниковОрганизаций.ВидРасчета.КатегорияРасчета В
|             (ВЫБРАТЬ КатегорииРасчетов1.Ссылка
|              ИЗ Справочник.КатегорииРасчетов КАК КатегорииРасчетов1
|              ГДЕ (КатегорииРасчетов1.Код = ""00000"")
|             )) И
|             (ПлановыеНачисленияРаботниковОрганизаций.ВидРасчета.СпособРасчета = ЗНАЧЕНИЕ(Перечисление.СпособыРасчетаОплатыТруда.ПроизвольнаяФормула))
|             И
|             (ПлановыеНачисленияРаботниковОрганизаций.Действие = ЗНАЧЕНИЕ(Перечисление.ВидыДействияСНачислением.Начать))
|             И
|             (ПлановыеНачисленияРаботниковОрганизаций.Период <= &ДатаДокумента)
|            УПОРЯДОЧИТЬ ПО
|             ПлановыеНачисленияРаботниковОрганизаций.Период УБЫВ
|        )КАК НачисленияРаботниковОрганизаций

Обратите внимание, здесь присутствует и СрезПоследних(..), и Упорядочивание по убыванию. Смешно, не правда-ли.
Упорядочивание добавил после того, как добавление СрезПоследних(..) не дало нужного эффекта - все равно выбирались все начисления.
Но когда перенес все это на реальную базу, где около 1000 физ.лиц, примерно 300 сотрудников, этот запрос (как вложенный фрагмент более сложного запроса) не выдал то, что он выдавал на демо-базе. Сейчас разбираюсь, почему.
alexandr_f
Может я слабо разбираюсь в 1С.
Но с точки зрения T-SQL это запрос по максимальной дате
Коррелированный запрос
(Max(Date),Сотрудник,Кодначисления)
- это внутреннее соединение (Inner Join)
Смущает
ПлановыеНачисленияРаботниковОрганизаций.ВидРасчета.СпособРасчета = ЗНАЧЕНИЕ(Перечисление.СпособыРасчетаОплатыТруда.ПроизвольнаяФормула

= это что доп. условие
и
(ПлановыеНачисленияРаботниковОрганизаций.Действие = ЗНАЧЕНИЕ(Перечисление.ВидыДействияСНачислением.Начать))

ведь может быть - прекратить и изменить
sava1
[
Цитата(alexandr_f @ 16.07.15, 10:59) необходимо зарегистрироваться для просмотра ссылки
Коррелированный запрос

И откуда-же получилось "корреляция"? Или типо "задавлю умными фразами" ?
vadim007
Цитата(sava1 @ 16.07.15, 11:08) необходимо зарегистрироваться для просмотра ссылки
И откуда-же получилось "корреляция"? Или типо "задавлю умными фразами" ?

необходимо зарегистрироваться для просмотра ссылки
sava1
Так покажите мне корреляцию, а не ссылку.
vadim007
Написал-же alexandr_f, что запрос вида
SELECT Max(Date),Сотрудник,Кодначисления

- коррелированный запрос.
Мой запрос (схематично)
ВЫБРАТЬ ПЕРВЫЕ 1
|            ПлановыеНачисленияРаботниковОрганизаций.Сотрудник,
|            ПлановыеНачисленияРаботниковОрганизаций.ВидРасчета
|        ИЗ
|            РегистрСведений.ПлановыеНачисленияРаботниковОрганизаций.СрезПоследних(&ДатаДокумента) КАК ПлановыеНачисленияРаботниковОрганизаций
......................
|            УПОРЯДОЧИТЬ ПО
|             ПлановыеНачисленияРаботниковОрганизаций.Период УБЫВ

можно привести к такому-же виду.
sava1
Упрощенно: кореллированный запрос - подзапрос выполняется для каждой строки основного запроса, т.к. его параметром служат данные основного запроса.
Покажите мне корреляцию в Вашем запросе типа
Цитата(vadim007 @ 16.07.15, 12:59) необходимо зарегистрироваться для просмотра ссылки
SELECT Max(Date),Сотрудник,Кодначисления

vadim007
Фуф, заставили покопаться в документации. Здесь нет коррелированного запроса.
Спасибо что напрягли.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.