Имя: Пароль:
1C
1С v8
Помогите с запросом 1с 8.2
0 IT_PROGRAMMIST
 
27.10.11
10:16
Доброе утро!)УПП 1.3.11.5,пл 8.2.13.219.
Подскажите в следующем. Есть следующий запрос:

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

СГРУППИРОВАТЬ ПО
   ЧасыПоГрафику.ФизЛицо,
   СостояниеРаботниковПредприятия.Состояние,
   ВЫБОР
       КОГДА СостояниеРаботниковПредприятия.Состояние = ЗНАЧЕНИЕ(Перечисление.СостоянияРаботника.Заболевание)
           ТОГДА 0
       КОГДА СостояниеРаботниковПредприятия.Состояние = ЗНАЧЕНИЕ(Перечисление.СостоянияРаботника.Командировка)
           ТОГДА ЧасыПоГрафику.Часы
       КОГДА СостояниеРаботниковПредприятия.Состояние = ЗНАЧЕНИЕ(Перечисление.СостоянияРаботника.ОтпускЕжегодный)
           ТОГДА 0
       КОГДА СостояниеРаботниковПредприятия.Состояние = ЗНАЧЕНИЕ(Перечисление.СостоянияРаботника.ОтсутствуетПоНевыясненнойПричине)
           ТОГДА 0
       КОГДА СостояниеРаботниковПредприятия.Состояние = ЗНАЧЕНИЕ(Перечисление.СостоянияРаботника.Работает)
           ТОГДА ЧасыПоГрафику.Часы
   КОНЕЦ


Вместо одной записи он мне возвращает 2,т.е

ФизЛицо  Состояние СостояниеБукв Отработано
Иванов
Иванов   Работает Р                 12

А должно быть :

ФизЛицо  Состояние СостояниеБукв Отработано
Иванов   Работает Р                 12

Не могу понять где я ошибся???
1 FIXXXL
 
27.10.11
10:17
по видимому, есть записи с пустыми состояниями
2 FIXXXL
 
27.10.11
10:18
вернее так: состояния, которые не обрабатываешь в ВЫБОР КОГДА
3 IT_PROGRAMMIST
 
27.10.11
10:21
пробовал в запросе проверять на пустое состояние.Все равно тянутся.
4 Ненавижу 1С
 
гуру
27.10.11
10:22
(3) а как проверял то, в курсе если не попадают ни в одну ВЫБОР КОГДА ветвь, то будет NULL? а как с NULL сравнивал?
5 IT_PROGRAMMIST
 
27.10.11
10:25
СостояниеРаботниковПредприятия.Состояние <> ЗНАЧЕНИЕ(Перечисление.СостоянияРаботника.ПустаяСсылка)
6 IT_PROGRAMMIST
 
27.10.11
10:26
а выбор когда не проверял на Null
7 IT_PROGRAMMIST
 
27.10.11
10:29
Просто,как состояние работника на одну дату может и работать и быть Null?
8 VitShvets
 
27.10.11
10:47
В У тебя в "ВЫБРАТЬ" 4 поля, а в "СГРУППИРОВАТЬ ПО" 3 поля. Нехватает "СостояниеБуквенныйКод" Мож поэтому?
9 НЕА123
 
27.10.11
10:52
(0)
без СГРУППИРОВАТЬ? ИТОГИ не?
10 IT_PROGRAMMIST
 
27.10.11
10:58
(8) там без разницы.
(9) не.
11 FIXXXL
 
27.10.11
12:18
(7) пропиши условие ГДЕ СостояниеРаботниковПредприятия.Состояние В &СписокСостояний
в &СписокСостояний суй те, которые анализируешь
12 IT_PROGRAMMIST
 
27.10.11
13:34
Спасибо    FIXXXL большое за помошь.Ответ в варианте (2)
Закон Брукера: Даже маленькая практика стоит большой теории.