Имя: Пароль:
1C
1С v8
Запрос: условие по начислениям
,
0 dft2014
 
14.05.18
11:48
Ставлю условие в запросе, чтобы не попадали определенные премии, но выдает ошибку, что:
“Неверные параметры в операции сравнения. Нельзя сравнивать поля неограниченной длины и поля несовместимых типов. И СведенияОДоходахНДФЛ.Начисление.Наименование <<?>> <> &Начисление ”

Вот запрос:


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

Запрос.УстановитьПараметр("ДатаКон", ДатаКон);
Запрос.УстановитьПараметр("ДатаНач", ДатаНач);
Запрос.УстановитьПараметр("ФизическоеЛицо", Сотрудник.ФизическоеЛицо);

Начисление = Новый Массив;
Начисление.Добавить(ПланыВидовРасчета.Начисления.НайтиПоНаименованию("Премия разовая"));
Начисление.Добавить(ПланыВидовРасчета.Начисления.НайтиПоНаименованию("Премия разовая ""За особые заслуги"""));
Запрос.УстановитьПараметр("Начисление", Начисление);
1 piter3
 
14.05.18
11:49
не СведенияОДоходахНДФЛ.Начисление в ( &Начисление).
2 xXeNoNx
 
14.05.18
11:59
Что тут "&Начисление"?
3 xXeNoNx
 
14.05.18
12:00
(0) Этот запрос - мина замедленного действия
4 dft2014
 
14.05.18
12:04
(1) Спасибо!

Но теперь не видит начисление, если наименование в кавычках:
Начисление.Добавить(ПланыВидовРасчета.Начисления.НайтиПоНаименованию("Премия разовая ""За особые заслуги"""));

Как правильно кавычки в наименовании поставить?
5 catena
 
14.05.18
12:15
(4)Правильно не сравнивать строки и ссылки. Если ты уверен в уникальности своих наименований, делай массив из наименований.
6 dft2014
 
14.05.18
12:18
(5) Я собственно массив и делаю, разве нет?

Но в отладчике, видит:
Премия разовая "За особые заслуги""

Вместо:
Премия разовая "За особые заслуги"
7 фросия
 
14.05.18
12:19
засуньте все исключаемые(или включаемые) премии в регистр или в справочник и оттуда получайте, что ж вы при добавлении новой премии код заново переписывать будете каждый раз?
8 dft2014
 
14.05.18
12:21
(7) У нас разовые премии всего две, на протяжении уже 15-ти лет. Поэтому проще их тянуть в запросе. Но вот как кавычки побороть?
9 catena
 
14.05.18
12:21
СведенияОДоходахНДФЛ.Начисление.__Наименование__ <> &Начисление

Начисление = Новый Массив;
Начисление.Добавить(ПланыВидовРасчета.Начисления.НайтиПоНаименованию("Премия разовая"));

(6)Не смущает, что это будут разные типы? Или ладно, ищи по наименованию. Дождемся следующего вопроса "почему запрос не возвращает, хотя ано там есть"
10 dft2014
 
14.05.18
12:23
(9) Почему разные типы? В запросе я сравниваю Наименования начислений и в параметрах ищу начисления по Наименованию, разве не так?
11 фросия
 
14.05.18
12:25
(10) поиск по наименованию возвращает ссылку на объект.
если не получается искать по наименованию- ищите по коду
12 catena
 
14.05.18
12:25
(10)Забей. Потом дойдет.
13 dft2014
 
14.05.18
12:28
(11) Поиск по коду - не устраивает. Как тогда искать правильно в запросе по наименованию, если в наименовании есть кавычки (Премия разовая "За особые заслуги") без создания вспомогательных регистров/справочников?
14 фросия
 
14.05.18
12:31
зачем в запросе искать по наименованию?
15 dft2014
 
14.05.18
12:33
Исправила запрос, вроде теперь показывает верно (не включает мои премии-исключения):

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

Запрос.УстановитьПараметр("ДатаКон", ДатаКон);
Запрос.УстановитьПараметр("ДатаНач", ДатаНач);
Запрос.УстановитьПараметр("ФизическоеЛицо", Сотрудник.ФизическоеЛицо);

Начисление = Новый Массив;
Начисление.Добавить(ПланыВидовРасчета.Начисления.НайтиПоНаименованию("Премия разовая"));
Начисление.Добавить(ПланыВидовРасчета.Начисления.НайтиПоНаименованию("Премия разовая ""За особые заслуги"""));
Запрос.УстановитьПараметр("Начисление", Начисление);
16 dft2014
 
14.05.18
12:35
(14) А как еще дать понять запросу, что определенные премии не надо включать? Без создания вспомогательных регистров/справочников?
17 фросия
 
14.05.18
12:39
(16) доп регистр- справочник- оптимален т.к. можно изменять список не переписывая код;
можно в самом виде расчета добавить признак Не включения данного начисления в какой-то отчет;
можно в форме отчета добавить табличку, в которую воткнуть список исключаемых видов расчета и заполнять её вручную или при открытии.

а ситуация, когда пользователю, для того что бы добавить начисление в список или исключить его из списка, необходимо обращаться к программисту- не самое красивое решение, в народе именуется "говнокодом"
18 xXeNoNx
 
14.05.18
12:40
(15) "СведенияОДоходахНДФЛ.Начисление.Ссылка" - левое соединение зачем?
Убирайте ".Ссылка"
19 dft2014
 
14.05.18
12:47
(18) Если речь идет об этой строчке:
|    И НЕ СведенияОДоходахНДФЛ.Начисление.Ссылка В (&Начисление)

то если убрать Ссылка, опять будет не находить премии-исключения. Как мне подсказала Фросия в (11): поиск по наименованию возвращает ссылку на объект. Поэтому я добавила Ссылку.
20 фросия
 
14.05.18
12:49
СведенияОДоходахНДФЛ.Начисление.Ссылка и СведенияОДоходахНДФЛ.Начисление
и там и там ссылка.
одно и то же в этих полях.
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший