Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Неназначенных незавершенных заказов: 2
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Составить запрос выборки ВидаРасчет , из регистра сведений          
vadim007 Подменю пользователя
сообщение 15.07.15, 11:02
Сообщение #1

Почти крутой
Иконка группы
Группа: Местный
Сообщений: 1298
Из: Донецк
Спасибо сказали: 208 раз
Рейтинг: 0

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

не подходит - выбираются виды начислений за предыдущие периоды.
А нужен за ближаюшую дату.

Vofka Подменю пользователя
сообщение 15.07.15, 11:06
Сообщение #2

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13955
Из: Киев
Спасибо сказали: 4520 раз
Рейтинг: 3642.8

Надо использовать виртуальную таблицу СрезПоследних:

Выбрать
   *
ИЗ
   РегистрСведений.ПлановыеНачисленияРаботниковОрганизаций.СрезПоследних(&ДатаДокумента)

vadim007 Подменю пользователя
сообщение 15.07.15, 12:05
Сообщение #3

Почти крутой
Иконка группы
Группа: Местный
Сообщений: 1298
Из: Донецк
Спасибо сказали: 208 раз
Рейтинг: 0

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

Выводятся все начисления. А нужно только одно.

Vofka Подменю пользователя
сообщение 15.07.15, 12:12
Сообщение #4

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13955
Из: Киев
Спасибо сказали: 4520 раз
Рейтинг: 3642.8

vadim007, надо же условие на вид начисления поставить.

vadim007 Подменю пользователя
сообщение 15.07.15, 12:15
Сообщение #5

Почти крутой
Иконка группы
Группа: Местный
Сообщений: 1298
Из: Донецк
Спасибо сказали: 208 раз
Рейтинг: 0

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

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

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

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

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

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

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

Цитата(Vofka @ 15.07.15, 13:12) *
vadim007, надо же условие на вид начисления поставить.

Vofka, в том-то и дело, что мне нужно ОДНО начисление, действующее на заданную дату. Какое оно будет - не знаю.

Vofka Подменю пользователя
сообщение 15.07.15, 12:17
Сообщение #6

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13955
Из: Киев
Спасибо сказали: 4520 раз
Рейтинг: 3642.8

vadim007, ну тогда отсортируйте по дате по убыванию и возьмите 1 запись.

Спасибо сказали: vadim007,

vadim007 Подменю пользователя
сообщение 15.07.15, 12:45
Сообщение #7

Почти крутой
Иконка группы
Группа: Местный
Сообщений: 1298
Из: Донецк
Спасибо сказали: 208 раз
Рейтинг: 0

Вот так получилось то, что хотел.
PS: ощущение, будто шаманил с бубном 47046430.gif

alexandr_f Подменю пользователя
сообщение 16.07.15, 7:21
Сообщение #8

Завсегдатай
****
Группа: Пользователи
Сообщений: 192
Из: Украина
Спасибо сказали: 3 раз
Рейтинг: 3

Цитата(vadim007 @ 15.07.15, 13:45) *
Вот так получилось то, что хотел.
PS: ощущение, будто шаманил с бубном 47046430.gif

А как получилось?
Плюс непонятно - если начисление не прекращено - то но действует.
если у Вас всего 1 начисление - то надо взять максимальную дату

vadim007 Подменю пользователя
сообщение 16.07.15, 8:02
Сообщение #9

Почти крутой
Иконка группы
Группа: Местный
Сообщений: 1298
Из: Донецк
Спасибо сказали: 208 раз
Рейтинг: 0

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

Обратите внимание, здесь присутствует и СрезПоследних(..), и Упорядочивание по убыванию. Смешно, не правда-ли.
Упорядочивание добавил после того, как добавление СрезПоследних(..) не дало нужного эффекта - все равно выбирались все начисления.
Но когда перенес все это на реальную базу, где около 1000 физ.лиц, примерно 300 сотрудников, этот запрос (как вложенный фрагмент более сложного запроса) не выдал то, что он выдавал на демо-базе. Сейчас разбираюсь, почему.

alexandr_f Подменю пользователя
сообщение 16.07.15, 9:59
Сообщение #10

Завсегдатай
****
Группа: Пользователи
Сообщений: 192
Из: Украина
Спасибо сказали: 3 раз
Рейтинг: 3

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

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

ведь может быть - прекратить и изменить

sava1 Подменю пользователя
сообщение 16.07.15, 10:08
Сообщение #11

Живет на форуме
Иконка группы
Группа: Местный
Сообщений: 2688
Из: Проскуров
Спасибо сказали: 681 раз
Рейтинг: 659.7

[
Цитата(alexandr_f @ 16.07.15, 10:59) *
Коррелированный запрос

И откуда-же получилось "корреляция"? Или типо "задавлю умными фразами" ?

vadim007 Подменю пользователя
сообщение 16.07.15, 10:26
Сообщение #12

Почти крутой
Иконка группы
Группа: Местный
Сообщений: 1298
Из: Донецк
Спасибо сказали: 208 раз
Рейтинг: 0

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

[необходимо зарегистрироваться для просмотра ссылки]

sava1 Подменю пользователя
сообщение 16.07.15, 10:46
Сообщение #13

Живет на форуме
Иконка группы
Группа: Местный
Сообщений: 2688
Из: Проскуров
Спасибо сказали: 681 раз
Рейтинг: 659.7

Так покажите мне корреляцию, а не ссылку.

vadim007 Подменю пользователя
сообщение 16.07.15, 11:59
Сообщение #14

Почти крутой
Иконка группы
Группа: Местный
Сообщений: 1298
Из: Донецк
Спасибо сказали: 208 раз
Рейтинг: 0

Написал-же alexandr_f, что запрос вида
SELECT Max(Date),Сотрудник,Кодначисления

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

можно привести к такому-же виду.

sava1 Подменю пользователя
сообщение 16.07.15, 12:46
Сообщение #15

Живет на форуме
Иконка группы
Группа: Местный
Сообщений: 2688
Из: Проскуров
Спасибо сказали: 681 раз
Рейтинг: 659.7

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


vadim007 Подменю пользователя
сообщение 16.07.15, 13:08
Сообщение #16

Почти крутой
Иконка группы
Группа: Местный
Сообщений: 1298
Из: Донецк
Спасибо сказали: 208 раз
Рейтинг: 0

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

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 26.04.24, 4:21
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!