Заполнение ТЧ Документа Посещения из Документа Штатное Расписание
Добрый день! Есть документ Посещения с реквизитами Штатное расписание и Часов и документ Штатное расписание где берется часы работника(сколько должен отработать) на основании этого заполняется графа-часов по каждому сотруднику. Выходит ошибка-РезультатЗапроса = Запрос.Выполнить().Выгрузить();
по причине:
{(8, 45)}: Неверные параметры в операции сравнения. Нельзя сравнивать поля
неограниченной длины и поля несовместимых типов.
И ШтатноеРасписаниеУпрСотрудники.Сотрудник <<?>>= &Сотрудник
по причине:
{(8, 45)}: Неверные параметры в операции сравнения. Нельзя сравнивать поля
неограниченной длины и поля несовместимых типов.
И ШтатноеРасписаниеУпрСотрудники.Сотрудник <<?>>= &Сотрудник
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("ПериодРегистрации",НачалоМесяца(Объект.Дата));
Запрос.УстановитьПараметр("Сотрудник",Объект.Сотрудники);
Запрос.Текст = "ВЫБРАТЬ
| ШтатноеРасписаниеУпрСотрудники.ВсегоЧасов,
| ШтатноеРасписаниеУпрСотрудники.НомерСтроки
|ИЗ
| Документ.ШтатноеРасписаниеУпр.Сотрудники КАК ШтатноеРасписаниеУпрСотрудники
|ГДЕ
| ШтатноеРасписаниеУпрСотрудники.Ссылка.ПериодРегистрации = &ПериодРегистрации
| И ШтатноеРасписаниеУпрСотрудники.Сотрудник = &Сотрудник";
РезультатЗапроса = Запрос.Выполнить().Выгрузить();
Для каждого стр Из РезультатЗапроса Цикл
// Вставить обработку выборки ВыборкаДетальныеЗаписи
Элементы.Сотрудники.ТекущиеДанные.Часов = стр.Часов;
Если Элементы.Сотрудники.ТекущиеДанные.Часов <> Элементы.Сотрудники.ТекущиеДанные.ОтработанноеВремя Тогда;
Сообщить("Не совпадает фактическое время и время по штатному расписанию по сотруднику " +СокрЛП(Элементы.Сотрудники.ТекущиеДанные.Сотрудник));
КонецЕсли
КонецЦикла;
ПоказатьНайденные решения
(14)
Для каждого стр Из Объект.Сотрудники Цикл
Запрос.УстановитьПараметр("Сотрудник",Стр.Сотрудник);
//чтобы тут что-то присвоить, нужно это что-то получить, так понимаю, выполнив запрос
ТЗЗапроса = Запрос.Выполнить().Выгрузить();
Если ЗначениеЗаполнено(ТЗЗапроса) Тогда
стр.Часов = ТЗЗапроса[0].Часов;
КонецЕсли;
КонецЦикла;
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1) Потому что:
ШтатноеРасписаниеУпрСотрудники.Сотрудник - это скорее всего СправочникСсылка.Сотрудники, а
Объект.Сотрудники - это ДокументТабличнаяЧасть.Посещения.Сотрудники
Предвосхищая ваш вопрос "что нужно сделать?":
использовать значение из колонки ТЧ документа:
ШтатноеРасписаниеУпрСотрудники.Сотрудник - это скорее всего СправочникСсылка.Сотрудники, а
Объект.Сотрудники - это ДокументТабличнаяЧасть.Посещения.Сотрудники
Предвосхищая ваш вопрос "что нужно сделать?":
использовать значение из колонки ТЧ документа:
ТекущиеДанные = Элементы.Сотрудники.ТекущиеДанные;
Запрос.УстановитьПараметр("Сотрудник",ТекущиеДанные.Сотрудник);
(2)уже пробовала получила такую ошибку-Значение не является значением объектного типа (Сотрудник)
Вот пример того, что было-
Вот пример того, что было-
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("ПериодРегистрации",НачалоМесяца(Объект.Дата));
Запрос.УстановитьПараметр("Сотрудник",Элементы.Сотрудники.ТекущиеДанные.Сотрудник);
Запрос.Текст = "ВЫБРАТЬ
| ШтатноеРасписаниеУпрСотрудники.НомерСтроки,
| ШтатноеРасписаниеУпрСотрудники.Часов"+СокрЛП(День(Объект.Дата))+" Как Часов
|ИЗ
| Документ.ШтатноеРасписаниеУпр.Сотрудники КАК ШтатноеРасписаниеУпрСотрудники
|ГДЕ
| ШтатноеРасписаниеУпрСотрудники.Сотрудник = &Сотрудник
| И ШтатноеРасписаниеУпрСотрудники.Ссылка.Проведен = &ИСТИНА
| И ШтатноеРасписаниеУпрСотрудники.Ссылка.ПериодРегистрации = &ПериодРегистрации";
РезультатЗапроса = Запрос.Выполнить();
Показать
(7)Это я тоже поняла) поэтому стала думать в сторону того, как обойти табличную часть(как в первом варианте), но сталкиваюсь с этой ошибкой-Неверные параметры в операции сравнения. Нельзя сравнивать поля
неограниченной длины и поля несовместимых типов.
И ШтатноеРасписаниеУпрСотрудники.Сотрудник <<?>>= &Сотрудник
неограниченной длины и поля несовместимых типов.
И ШтатноеРасписаниеУпрСотрудники.Сотрудник <<?>>= &Сотрудник
(8)Не нужно запихивать в параметр запроса саму ТЧ:
1. СУБД все равно не знает, что с ней делать
2. даже если бы СУБД знала, то не смогла бы сравнить значение ссылки с ней о чем, собссно, сказано в тексте ошибки
Обходите ТЧ правильно и будет вам Щастье © мультик
1. СУБД все равно не знает, что с ней делать
2. даже если бы СУБД знала, то не смогла бы сравнить значение ссылки с ней о чем, собссно, сказано в тексте ошибки
Обходите ТЧ правильно и будет вам Щастье © мультик
Для Каждого Стр Из Объект.Сотрудники Цикл
Запрос.УстановитьПараметр("Сотрудник",Стр.Сотрудник);
//и дальше, что вам там нужно сделать
КонецЦикла
(9)
Прошу меня простить за глупые ошибки. Опыта пару месяцев. Читаю документацию, но быстро не получается
Для каждого стр Из Объект.Сотрудники Цикл
Запрос.УстановитьПараметр("Сотрудник",Стр.Сотрудник);
стр.Часов = Объект.Сотрудники.Часов;
КонецЦикла;
все равно ругается. Поле объекта не обнаружено (Часов)
стр.Часов = Объект.Сотрудники.Часов;
Прошу меня простить за глупые ошибки. Опыта пару месяцев. Читаю документацию, но быстро не получается
(14)
Для каждого стр Из Объект.Сотрудники Цикл
Запрос.УстановитьПараметр("Сотрудник",Стр.Сотрудник);
//чтобы тут что-то присвоить, нужно это что-то получить, так понимаю, выполнив запрос
ТЗЗапроса = Запрос.Выполнить().Выгрузить();
Если ЗначениеЗаполнено(ТЗЗапроса) Тогда
стр.Часов = ТЗЗапроса[0].Часов;
КонецЕсли;
КонецЦикла;
Прилагаю рабочий код, мало ли кому-то пригодится.
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("ПериодРегистрации",НачалоМесяца(Объект.Дата));
Запрос.Текст =
"ВЫБРАТЬ
| ШтатноеРасписаниеУпрСотрудники.Часов"+СокрЛП(День(Объект.Дата))+" Как Часов,
| ШтатноеРасписаниеУпрСотрудники.НомерСтроки
|ИЗ
| Документ.ШтатноеРасписаниеУпр.Сотрудники КАК ШтатноеРасписаниеУпрСотрудники
|ГДЕ
| ШтатноеРасписаниеУпрСотрудники.Сотрудник = &Сотрудник
| И ШтатноеРасписаниеУпрСотрудники.Ссылка.Проведен = ИСТИНА
| И ШтатноеРасписаниеУпрСотрудники.Ссылка.ПериодРегистрации = &ПериодРегистрации";
Для каждого стр Из Объект.Сотрудники Цикл
Запрос.УстановитьПараметр("Сотрудник",Стр.Сотрудник);
ТЗЗапроса = Запрос.Выполнить().Выгрузить();
Если ЗначениеЗаполнено(ТЗЗапроса) Тогда
стр.Часов = ТЗЗапроса[0].Часов;
КонецЕсли;
КонецЦикла;
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот