Имя: Пароль:
1C
1С v8
выбор когда тогда
0 August
 
16.06.16
15:43
Есть кусок в запросе (немного упростил для восприятия, но суть не меняется):
ВЫБОР
    КОГДА НЕ ВременнаяТаблица.ТерриторияВыполненияРаботВОрганизации ЕСТЬ NULL
        ТОГДА ВременнаяТаблица.ТерриторияВыполненияРаботВОрганизации.СоответствуетСудамЗарегистрированнымВРоссийскомМеждународномРеестреСудов
    ИНАЧЕ "НУЛЛ"
КОНЕЦ

когда во временной таблице территория - все норм, но есть случаи когда может придти "неопределено" в таком случае запрос отваливается с ошибкой

ВременнаяТаблица.ТерриторияВыполненияРаботВОрганизации.СоответствуетСудамЗарегистрированнымВРоссийскомМеждународномРеестреСудов поле не найдено.
вопрос: какого художника он лезет по "тогда" и sblbn что реквизита то действительно нет, хотя должен уйти на "иначе"?
1 Sonny
 
16.06.16
15:49
Может вместо ковыряния в особенностях работы платформы с пустыми значениями просто научиться нормально писать запросы? При грамотном подходе такой кусок вообще не должен был появиться.
2 Nuobu
 
16.06.16
15:50
ВЫБОР
    КОГДА ЕстьNull(ВременнаяТаблица.ТерриторияВыполненияРаботВОрганизации, "Нулл) <> "Нулл" Тогда
" не нулл"
Иначе
"Нулл"
Конец
3 Nuobu
 
16.06.16
15:51
(2) Ну или вот так:

ЕстьNull(ВременнаяТаблица.ТерриторияВыполненияРаботВОрганизации.СоответствуетСудамЗарегистрированнымВРоссийскомМеждународномРеестреСудов, "Нулл")


Вместо тысяци "Выбор когда тогда конец"))
4 Зая Бусечка
 
16.06.16
15:51
А откель в запросе может появиться неопределено?
5 Fedor-1971
 
16.06.16
15:56
(4) например, из соединения
6 August
 
16.06.16
15:56
(3)спасибо, сейчас попробую, но что-то мне подсказывает что пошлет опять
(1) ну если бы типовые механизмы учета страховых работали правильно, возможно и не пришлось бы городить костыль, но сейчас нужно с минимальным куроченьем типового допилить условие
(4) при единовременном пособии получатель может быть сотрудник так и физик, соответственно если сотр - территория есть, а если физик - территории нет
7 Ёпрст
 
16.06.16
15:59
(6) >>>  при единовременном пособии получатель может быть сотрудник так и физик

если так, то все ранее предложенные варианты не рабочие.
Ставь проверку на тип реквизита
8 Nuobu
 
16.06.16
16:00
(6) Это называется Нулл. Не путай с "Неопределено". Полоска под именем всё таки обязывает знать такие вещи.
9 August
 
16.06.16
16:02
(3) не канает, как я и думал то же самое
(8) ну я ж грю упростил, суть не меняет
(7) пробовал, все равно ругается ну внутреннее "тогда", хотя лезть туда по идее и не должен.
10 August
 
16.06.16
16:02
(7) стоп, в смысле на проверку реквизита?
11 Ёпрст
 
16.06.16
16:05
(10) ТерриторияВыполненияРаботВОрганизации - у тебя же "составного" типа,так ?
Вот вся твоя ошибка, что ты пытаешься посмотреть реквизит СоответствуетСудамЗарегистрированнымВРоссийскомМеждународномРеестреСудов у объекта, в котором такого реквизита нема.

Вот и проверяй,
выбор Когда ТерриторияВыполненияРаботВОрганизации ссылка Справочник.Вася тогда
ТерриторияВыполненияРаботВОрганизации.СоответствуетСудамЗарегистрированнымВРоссийскомМеждународномРеестреСудов иначе "зхрен вам" конец

а нула, там скорее всего вообще нет, от слова совсем :)
12 August
 
16.06.16
16:05
пробовал так:
ВЫБОР
    КОГДА ТИПЗНАЧЕНИЯ(ВременнаяТаблица.ТерриторияВыполненияРаботВОрганизации) = ТИП(Справочник.ТерриторииВыполненияРабот)
        ТОГДА ВЫБОР
                КОГДА ВременнаяТаблица.ТерриторияВыполненияРаботВОрганизации <> ЗНАЧЕНИЕ(Справочник.ТерриторииВыполненияРабот.ПустаяСсылка)
                    ТОГДА 3
                ИНАЧЕ 2
            КОНЕЦ
    ИНАЧЕ 1
КОНЕЦ


работает, возвращает 1


как только вместо "3" написать ВременнаяТаблица.ТерриторияВыполненияРаботВОрганизации.СоответствуетСудамЗарегистрированнымВРоссийскомМеждународномРеестреСудов - валится нахер
13 Ёпрст
 
16.06.16
16:08
СоответствуетСудамЗарегистрированнымВРоссийскомМеждународномРеестреСудов  - поди булево, так ?

вот и в кейс кидай тот же тип везде
14 August
 
16.06.16
16:08
(11) пробовал через "ссылка" - не работает, валится со словами:

несовместимые типы "ССЫЛКА" когда ВременнаяТаблица.ТерриторияВыполненияРаботВОрганизации <<?>> Ссылка
15 Ёпрст
 
16.06.16
16:09
Покажи весь код
16 Sonny
 
16.06.16
16:10
Сделай уже левое соединение со Справочник.ТерриторииВыполненияРабот и тогда ECТЬNULL(СправочникТерриторииВыполненияРабот.СоответствуетСудамЗарегистрированнымВРоссийскомМеждународномРеестреСудов, "НУЛЛ") точно будет работать как надо.
Вообще нафига там текстом нулл писать? Видимо костыль на костыле.
17 August
 
16.06.16
16:10
ВЫБРАТЬ
    &ДатаПолученияДохода КАК ДатаПолученияДохода,
    ВременнаяТаблица.Сотрудник,
    ВременнаяТаблица.Начисление,
    ВременнаяТаблица.ПодразделениеОрганизации КАК Подразделение,
    ВременнаяТаблица.ДатаНачала,
    ДанныеУчета.ВидДохода,
    ДанныеУчета.ОблагаетсяВзносамиНаДоплатуЛетчикам,
    ДанныеУчета.ОблагаетсяВзносамиНаДоплатуШахтерам,
    ДанныеУчета.ЯвляетсяДоходомФармацевта,
    ВЫБОР
        КОГДА ВременнаяТаблица.ТерриторияВыполненияРаботВОрганизации ССЫЛКА Справочник.ТерриторииВыполненияРабот
            ТОГДА ВЫБОР
                    КОГДА ВременнаяТаблица.ТерриторияВыполненияРаботВОрганизации <> ЗНАЧЕНИЕ(Справочник.ТерриторииВыполненияРабот.ПустаяСсылка)
                        ТОГДА ВременнаяТаблица.ТерриторияВыполненияРаботВОрганизации.СоответствуетСудамЗарегистрированнымВРоссийскомМеждународномРеестреСудов
                    ИНАЧЕ ДанныеУчета.ЯвляетсяДоходомЧленаЭкипажаСуднаПодФлагомРФ
                КОНЕЦ
        ИНАЧЕ ДанныеУчета.ЯвляетсяДоходомЧленаЭкипажаСуднаПодФлагомРФ
    КОНЕЦ КАК ЯвляетсяДоходомЧленаЭкипажаСуднаПодФлагомРФ,
    ДанныеУчета.ОблагаетсяВзносамиЗаЗанятыхНаРаботахСДосрочнойПенсией,
    ДанныеУчета.КлассУсловийТруда,
    ВЫРАЗИТЬ(СУММА(ВременнаяТаблица.СуммаДохода * ЕСТЬNULL(ДанныеУчета.КоэффициентУчетаСтроки, 1)) КАК ЧИСЛО(15, 2)) КАК Сумма,
    ВЫБОР
        КОГДА ДанныеУчета.ВидДохода.ОблагаетсяВзносамиЧастично
            ТОГДА ВЫРАЗИТЬ(СУММА(ВременнаяТаблица.СуммаВычетаВзносы * ЕСТЬNULL(ДанныеУчета.КоэффициентУчетаСтроки, 1)) КАК ЧИСЛО(15, 2))
        ИНАЧЕ 0
    КОНЕЦ КАК Скидка,
    ДанныеУчета.ФизическоеЛицо,
    ИСТИНА КАК РаспределятьЕНВД,
    НЕОПРЕДЕЛЕНО КАК ОблагаетсяЕНВД
ПОМЕСТИТЬ ВТНачисленияСДаннымиУчета
ИЗ
    ВТНачисления КАК ВременнаяТаблица
        ЛЕВОЕ СОЕДИНЕНИЕ ВТСДаннымиУчета КАК ДанныеУчета
        ПО ВременнаяТаблица.Сотрудник = ДанныеУчета.Сотрудник
            И ВременнаяТаблица.Начисление = ДанныеУчета.Начисление
            И ВременнаяТаблица.ПодразделениеОрганизации = ДанныеУчета.Подразделение
            И ВременнаяТаблица.ДатаНачала = ДанныеУчета.ДатаНачала
            И (&ИспользоватьОсобыеУсловияТруда)

СГРУППИРОВАТЬ ПО
    ВременнаяТаблица.Сотрудник,
    ВременнаяТаблица.Начисление,
    ВременнаяТаблица.ПодразделениеОрганизации,
    ВременнаяТаблица.ДатаНачала,
    ДанныеУчета.ВидДохода,
    ДанныеУчета.ВидДохода.ОблагаетсяВзносамиЧастично,
    ДанныеУчета.ОблагаетсяВзносамиНаДоплатуЛетчикам,
    ДанныеУчета.ОблагаетсяВзносамиНаДоплатуШахтерам,
    ДанныеУчета.ЯвляетсяДоходомФармацевта,
    ВЫБОР
        КОГДА ВременнаяТаблица.ТерриторияВыполненияРаботВОрганизации ССЫЛКА Справочник.ТерриторииВыполненияРабот
            ТОГДА ВЫБОР
                    КОГДА ВременнаяТаблица.ТерриторияВыполненияРаботВОрганизации <> ЗНАЧЕНИЕ(Справочник.ТерриторииВыполненияРабот.ПустаяСсылка)
                        ТОГДА ВременнаяТаблица.ТерриторияВыполненияРаботВОрганизации.СоответствуетСудамЗарегистрированнымВРоссийскомМеждународномРеестреСудов
                    ИНАЧЕ ДанныеУчета.ЯвляетсяДоходомЧленаЭкипажаСуднаПодФлагомРФ
                КОНЕЦ
        ИНАЧЕ ДанныеУчета.ЯвляетсяДоходомЧленаЭкипажаСуднаПодФлагомРФ
    КОНЕЦ,
    ДанныеУчета.ОблагаетсяВзносамиЗаЗанятыхНаРаботахСДосрочнойПенсией,
    ДанныеУчета.КлассУсловийТруда,
    ДанныеУчета.ФизическоеЛицо
18 Ёпрст
 
16.06.16
16:13
(17) ВТНачисления как делалась ?
Как у тебя не будет работать, поле всегда приводится к одному типу
19 August
 
16.06.16
16:13
(16) спасибо за идею, возможно действительно имеет смысл третим пакетом соединиться со справочником
20 Ёпрст
 
16.06.16
16:13
во временной табличке.
21 Sonny
 
16.06.16
16:14
(19) Не надо отдельным пакетом. Когда пишешь через точку - у тебя неявно делает джойн, сделай его просто явным в том же запросе и Вася-кот.
22 August
 
16.06.16
16:15
(18) ВТНачисления делаются типовыми запросами как обычно в ЗУПе на 100500 строк и кучей модулей. в этой таблице есть территория, которая либо заполнена составным типом (территория, подразделение) либо вообще не заполнено, как в моем случае
23 Ёпрст
 
16.06.16
16:18
(22) не может там быть составной тип в поле..Только значения одного типа.
24 Ёпрст
 
16.06.16
16:18
в этой временной.
25 August
 
16.06.16
16:19
(24) в этой временной то понятно не может. в данном случае тип - неопределено. когда провожу "нормальный" документ там территория
26 Ёпрст
 
16.06.16
16:21
ладно, занимайся :)
27 August
 
16.06.16
16:21
(26) ну спасибо за напутствие )) пробую (21) присоседить, надеюсь так получится
28 August
 
16.06.16
16:39
(21) действительно Вася теперь кот. спасибо ;)
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.