Имя: Пароль:
1C
1С v8
Поясните по запросам, пожалуйста...
, ,
0 new1snik
 
02.07.13
10:42
Добрый день. Есть два запроса:
Первый:

ВЫБРАТЬ
   "1" КАК Номер,
   ЕСТЬNULL(ОсновныеНачисленияРаботниковОрганизаций.Результат, 0) КАК Сумма,
   РаботникиОрганизацийСрезПоследних.Сотрудник.Физлицо,
   РаботникиОрганизацийСрезПоследних.ЗанимаемыхСтавок,
   ОсновныеНачисленияРаботниковОрганизаций.НормаДней,
   NULL КАК Результат
ИЗ
   РегистрСведений.РаботникиОрганизаций.СрезПоследних(&ДатаНач, ) КАК РаботникиОрганизацийСрезПоследних
       ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрРасчета.ОсновныеНачисленияРаботниковОрганизаций КАК ОсновныеНачисленияРаботниковОрганизаций
       ПО РаботникиОрганизацийСрезПоследних.Сотрудник.Физлицо = ОсновныеНачисленияРаботниковОрганизаций.ФизЛицо
ГДЕ
   ОсновныеНачисленияРаботниковОрганизаций.ВидРасчета <> &Ребенок15
   И ОсновныеНачисленияРаботниковОрганизаций.ВидРасчета <> &Ребенок30
   И ОсновныеНачисленияРаботниковОрганизаций.ПериодДействияНачало >= &ДатаНач
   И ОсновныеНачисленияРаботниковОрганизаций.ПериодДействияКонец <= &ДатаКон

ОБЪЕДИНИТЬ

ВЫБРАТЬ
   "2",
   ЕСТЬNULL(ДополнительныеНачисленияРаботниковОрганизаций.Результат, 0),
   РаботникиОрганизацийСрезПоследних.Сотрудник.Физлицо,
   РаботникиОрганизацийСрезПоследних.ЗанимаемыхСтавок,
   NULL,
   ДополнительныеНачисленияРаботниковОрганизаций.Результат
ИЗ
   РегистрСведений.РаботникиОрганизаций.СрезПоследних(&ДатаНач, ) КАК РаботникиОрганизацийСрезПоследних
       ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрРасчета.ДополнительныеНачисленияРаботниковОрганизаций КАК ДополнительныеНачисленияРаботниковОрганизаций
       ПО РаботникиОрганизацийСрезПоследних.Сотрудник.Физлицо = ДополнительныеНачисленияРаботниковОрганизаций.ФизЛицо
ГДЕ
   ДополнительныеНачисленияРаботниковОрганизаций.БазовыйПериодКонец <= &ДатаКон
   И ДополнительныеНачисленияРаботниковОрганизаций.ВидРасчета <> &ФСССмерть
   И ДополнительныеНачисленияРаботниковОрганизаций.ВидРасчета <> &ФССУчет
   И ДополнительныеНачисленияРаботниковОрганизаций.ВидРасчета <> &ФССРождение
   И ДополнительныеНачисленияРаботниковОрганизаций.ВидРасчета <> &ФССУсыновление
   И ДополнительныеНачисленияРаботниковОрганизаций.ВидРасчета <> &Молоко
   И ДополнительныеНачисленияРаботниковОрганизаций.ВидРасчета <> &Матпомощь
   И ДополнительныеНачисленияРаботниковОрганизаций.БазовыйПериодНачало >= &ДатаНач

Второй:

ВЫБРАТЬ
   "1" КАК Номер,
   ЕСТЬNULL(ОсновныеНачисленияРаботниковОрганизаций.Результат, 0) КАК Сумма
ИЗ
   РегистрРасчета.ОсновныеНачисленияРаботниковОрганизаций КАК ОсновныеНачисленияРаботниковОрганизаций
ГДЕ
   ОсновныеНачисленияРаботниковОрганизаций.ВидРасчета <> &Ребенок15
   И ОсновныеНачисленияРаботниковОрганизаций.ВидРасчета <> &Ребенок30
   И ОсновныеНачисленияРаботниковОрганизаций.ПериодДействияНачало >= &ДатаНач
   И ОсновныеНачисленияРаботниковОрганизаций.ПериодДействияКонец <= &ДатаКон

ОБЪЕДИНИТЬ

ВЫБРАТЬ
   "2",
   ЕСТЬNULL(ДополнительныеНачисленияРаботниковОрганизаций.Результат, 0)
ИЗ
   РегистрРасчета.ДополнительныеНачисленияРаботниковОрганизаций КАК ДополнительныеНачисленияРаботниковОрганизаций
ГДЕ
   ДополнительныеНачисленияРаботниковОрганизаций.БазовыйПериодКонец <= &ДатаКон
   И ДополнительныеНачисленияРаботниковОрганизаций.ВидРасчета <> &ФСССмерть
   И ДополнительныеНачисленияРаботниковОрганизаций.ВидРасчета <> &ФССУчет
   И ДополнительныеНачисленияРаботниковОрганизаций.ВидРасчета <> &ФССРождение
   И ДополнительныеНачисленияРаботниковОрганизаций.ВидРасчета <> &ФССУсыновление
   И ДополнительныеНачисленияРаботниковОрганизаций.ВидРасчета <> &Молоко
   И ДополнительныеНачисленияРаботниковОрганизаций.ВидРасчета <> &Матпомощь
   И ДополнительныеНачисленияРаботниковОрганизаций.БазовыйПериодНачало >= &ДатаНач

В первом запросе есть внутреннее соединение, во втором этого соединения нет, в остальном запросы одинаковы. Если я правильно понимаю, то Сумма первого должна быть либо равна сумме первого, либо быть меньше, т.к мы ограничили подходящие нам записи. Но она больше. Почему?
1 Jonny_Khomich
 
02.07.13
10:44
букв то много как
2 Beduin
 
02.07.13
10:45
(0) Регистр Работники расширяетя записи.
3 new1snik
 
02.07.13
10:47
(2) Хм, поменять местами Работников и начисления значит?
4 Beduin
 
02.07.13
10:48
(3) У тебя в таблице работников больше записей чем в таблице начислений. Как ты хочешь их менять?
5 new1snik
 
02.07.13
10:51
(4) Я тогда не понимаю, от куда берутся лишние результаты в сумме. Если записей в работниках больше, чем в начислениях, то запрос должен просто вернуть нам начисления по всем физлицам из РегистраРасчета. То есть в первом запросе результат должен быть равен результату второго запроса.
6 exwill
 
02.07.13
11:00
(5) В регистре работники организаций есть по несколько записей для одного физ. лица.
7 new1snik
 
02.07.13
11:11
(6) Интересно.. а как мне тогда получить начисления только тех сотрудников, которые на начало расчетного периода были работниками организации?
8 zak555
 
02.07.13
11:12
(7) ты не забывай, что работник мог прийти и в середине периода
9 new1snik
 
02.07.13
11:18
(8) Тогда делаем срез работников организации на конец расчетного периода.
10 zak555
 
02.07.13
11:19
(9) тогда ты пропустишь тех, кто уволился в течение месяца =)
11 new1snik
 
02.07.13
11:22
(10) И как тогда поступить? Нужны срезы на каждый день расчетного периода...
12 cw014
 
02.07.13
11:24
"Если я правильно понимаю, то Сумма первого должна быть либо равна сумме первого, либо быть меньше, т.к мы ограничили подходящие нам записи."

При внутреннем соединении то? Не факт, однозначно
13 zak555
 
02.07.13
11:24
(11) нет
14 new1snik
 
02.07.13
11:27
(13) А как, если вас не затруднит?
15 zak555
 
02.07.13
11:33
(14)

срезпоследних на конец даты
где состояние = работает

объеденить

РаботникиОрганизаций между датаНач по датаКон
где состояние <> работает
16 new1snik
 
02.07.13
11:40
(15) И как я определю состояние? Все что я нашел подходящее, это дата увольнения.
17 zak555
 
02.07.13
11:41
(16) смотри структуру РаботникиОрганизаций
18 new1snik
 
02.07.13
11:46
(17) Извини, но я там не вижу ни одного реквизита с названием "состояние".
19 zak555
 
02.07.13
11:52
а у меня зупа нет под рукой
20 new1snik
 
02.07.13
11:56
(19) Это УПП 1.3
21 Beduin
 
02.07.13
11:58
(0) Слушай парень, тебе не стыдно. Все уже разжевали, что еще надо?
За тебя все решить вообще?!
22 new1snik
 
02.07.13
12:01
(21) Не ругайся, дядя. Я просто не все понял, поэтому и спрашиваю.
23 zak555
 
02.07.13
12:02
(20) какая разница ?
24 new1snik
 
02.07.13
12:03
(23)Я не знаю. Просто ты упомянул зуп, я и подумал, что это имеет какое-то значение.
25 new1snik
 
03.07.13
10:01
(15) Аааа, то есть сначала СрезомПоследних получаем тех сотрудников, которые все еще работают на конец расчетного месяца, а потом к ним плюсуем тех сотрудников, которых уволили в течении расчетного месяца и уже по этим сотрудникам получаем начисления. Спасибо!
26 КУНГ ФУ 1С
 
03.07.13
10:16
И ДополнительныеНачисленияРаботниковОрганизаций.ВидРасчета <> &ФСССмерть
   И ДополнительныеНачисленияРаботниковОрганизаций.ВидРасчета <> &ФССУчет
   И ДополнительныеНачисленияРаботниковОрганизаций.ВидРасчета <> &ФССРождение
   И ДополнительныеНачисленияРаботниковОрганизаций.ВидРасчета <> &ФССУсыновление
   И ДополнительныеНачисленияРаботниковОрганизаций.ВидРасчета <> &Молоко
   И ДополнительныеНачисленияРаботниковОрганизаций.ВидРасчета <> &Матпомощь

Неужели нельзя сделать ТАК

ДополнительныеНачисленияРаботниковОрганизаций.ВидРасчета НЕ В (&ЗапрещенныеВидыРасчетов)
27 new1snik
 
03.07.13
10:27
(26) Передать массив запрещенных? Можно, но я об это не подумал. Да и есть ли принципиальная разница? Отчет будет быстрей работать?
28 zak555
 
03.07.13
12:07
(25) да

(27) проще будет добавлять/исключать
29 new1snik
 
03.07.13
12:18
Я все не могу понять, почему при добавлении РегистрСведений.РаботникиОрганизаций в запрос увеличивается сумма начислений. Ведь вторым запросом мы выбираем все начисления, которые подходят нам по Видам расчета. От куда берутся лишние данные при использовании РегистраСведений?
30 new1snik
 
03.07.13
12:20
+(29) как то криво описал. Вообщем, мы ведь сначала выбираем все начисления ограничивая их только по видам расчета, мы не обращаем внимания на сотрудников, которые эти начисления получают. А когда используем регистрсведений, то вводим доп условие в виде физ.лиц получающих начисления. То есть сумма начислений должна быть <=
Ошибка? Это не ошибка, это системная функция.