Имя: Пароль:
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) как то криво описал. Вообщем, мы ведь сначала выбираем все начисления ограничивая их только по видам расчета, мы не обращаем внимания на сотрудников, которые эти начисления получают. А когда используем регистрсведений, то вводим доп условие в виде физ.лиц получающих начисления. То есть сумма начислений должна быть <=