Имя: Пароль:
1C
1С v8
Ошибка "несовместимые типы ССЫЛКА в запросе"
0 valent-jedi
 
13.02.14
15:12
Конфигурация Зарплата и кадры бюджетного учреждения. Цель в том, чтобы при расчете НДФЛ в Регистрации разовых начислений не учитывались вычеты на детей. Сказано - сделано. В модуле документа в процедуре РассчитатьНДФЛ вызывается функция РассчитатьНДФЛ общего модуля ПроведениеРасчетов. Переходим на строчку №4568, там как раз кусочек запроса, который выбирает количество детей у сотрудника. Я туда добавляю следующие строчки:

|КОГДА &Регистратор ССЫЛКА Документ.РегистрацияРазовыхНачисленийРаботниковОрганизаций
|                ТОГДА NULL

Вроде в регистрации разовых все стало как надо: вычеты на детей не ставятся, даже если они и должны. Но вот если рассчитываем ЗП, например, документом Начисление Зарплаты то получаем ошибку:
Несовместимые типы "ССЫЛКА"
КОГДА &Регистратор <<?>> ССЫЛКА Документ.РегистрацияРазовыхНачисленийРаботниковОрганизаций

Гугл пока не помог, сам что-то тоже не разберусь. Регистратор принимает значение Начисление Зарплаты Сотрудникам Организации. Помогите, пожалуйста :)
1 Ненавижу 1С
 
гуру
13.02.14
15:13
"Регистратор принимает значение Начисление Зарплаты Сотрудникам Организации"

это мы узнаем, когда ты покажешь код заполнения параметра
2 valent-jedi
 
13.02.14
15:17
Параметр заполняется типовым кодом, там строка:
Запрос.УстановитьПараметр("Регистратор", Регистратор);

есть еще один параметр, парамРегистратор:
Запрос.УстановитьПараметр("парамРегистратор", Регистратор);

Собственно, одно и то же. Ставлю брейкпоинт и вижу, что значение регистратора - Начисление зарплаты бла-бла-бла, а тип Регистратора - ДокументСсылка.НачислениеЗарплатыРаботникамОрганизаций
3 Maxus43
 
13.02.14
15:26
Попробуй использовать вместо Ссылка Документ.....
ТИПЗНАЧЕНИЯ(&Регистратор) = ТИП(...
4 Defender aka LINN
 
13.02.14
15:29
(2) Тип ДокументСсылка.НачислениеЗарплатыРаботникамОрганизаций никогда и ни при каких условиях не может содержать тип ДокументСсылка.РегистрацияРазовыхНачисленийРаботниковОрганизаций.
Всегда ваш, К.О.
5 valent-jedi
 
13.02.14
15:33
(4) то есть такой трюк не работает, если у операнда составной тип?
6 valent-jedi
 
13.02.14
15:36
(3) Спасибо! Вроде помогло, ошибок не выскакивает :) Так насчет ССЫЛКИ - никак, если имеем составной, в данном случае, параметр регистратор?
7 Defender aka LINN
 
13.02.14
15:37
(5) Это как из моих слов можно такой вывод сделать, интересно?
Ну и составным типом у тебя и не пахнет, если что.
8 valent-jedi
 
13.02.14
15:44
(7) ну, в моем случае Регистратор может принимать тип как ДокументСсылка.НачислениеЗарплатыРаботникамОрганизаций, так и ДокументСсылка.РегистрацияРазовыхНачисленийРаботниковОрганизаций, в зависимости от того, из какого документа вызывается функция. В принципе, ошибку свою я понял. Это, наверное, как а = "а", где а может быть как "а", так и 2 :)
9 Defender aka LINN
 
13.02.14
15:46
(8) Не может. Регистратор - это ПАРАМЕТР запроса. В момент выполнения запроса он имеет конкретное значение конкретного типа.
10 Maxus43
 
13.02.14
15:46
(8) не, ошибка очень странная, должно работать бы
11 Maxus43
 
13.02.14
15:49
не, понял, всё правильно
12 valent-jedi
 
13.02.14
15:53
(9) не, я понимаю, что в момент выполнения запроса Регистратор принимает конкретно определенный тип. Регистра тор в момент установки параметра может иметь различные типы, так как функция вызывается из разных мест, и, соответственно, переменная Регистратор, которая устанавливается в параметр запроса, может иметь разные типы =)
Собственно, Maxus43 спасибо за выход из ситуации, Defender aka LINN спасибо за настройку мозга на нужную волну =)
13 Maxus43
 
13.02.14
15:59
(12) Используй ССЫЛКА когда изначально поле составного типа, и проверяемый тип входит в него.
типа
ГДЕ
РегистрНакопленияДенежныеСредсва.Регистратор ССЫЛКА Документ.ПриходныйКассовыйОрдер
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.