Заполнение ТЧ Документа Посещения из Документа Штатное Расписание

1. shemyl696 12.05.23 10:15 Сейчас в теме
Добрый день! Есть документ Посещения с реквизитами Штатное расписание и Часов и документ Штатное расписание где берется часы работника(сколько должен отработать) на основании этого заполняется графа-часов по каждому сотруднику. Выходит ошибка-РезультатЗапроса = Запрос.Выполнить().Выгрузить();
по причине:
{(8, 45)}: Неверные параметры в операции сравнения. Нельзя сравнивать поля
неограниченной длины и поля несовместимых типов.
И ШтатноеРасписаниеУпрСотрудники.Сотрудник <<?>>= &Сотрудник
Запрос = Новый Запрос;
	Запрос.УстановитьПараметр("ПериодРегистрации",НачалоМесяца(Объект.Дата));
	Запрос.УстановитьПараметр("Сотрудник",Объект.Сотрудники);
	Запрос.Текст =   "ВЫБРАТЬ
	               |	ШтатноеРасписаниеУпрСотрудники.ВсегоЧасов,
	               |	ШтатноеРасписаниеУпрСотрудники.НомерСтроки
	               |ИЗ
	               |	Документ.ШтатноеРасписаниеУпр.Сотрудники КАК ШтатноеРасписаниеУпрСотрудники
	               |ГДЕ
	               |	ШтатноеРасписаниеУпрСотрудники.Ссылка.ПериодРегистрации = &ПериодРегистрации
	               |	И ШтатноеРасписаниеУпрСотрудники.Сотрудник = &Сотрудник";

	
	РезультатЗапроса = Запрос.Выполнить().Выгрузить();
	
	
	
	Для каждого стр Из РезультатЗапроса Цикл 
		// Вставить обработку выборки ВыборкаДетальныеЗаписи
		Элементы.Сотрудники.ТекущиеДанные.Часов = стр.Часов;
		Если  Элементы.Сотрудники.ТекущиеДанные.Часов <> Элементы.Сотрудники.ТекущиеДанные.ОтработанноеВремя Тогда;
			Сообщить("Не совпадает фактическое время и время по штатному расписанию по сотруднику " +СокрЛП(Элементы.Сотрудники.ТекущиеДанные.Сотрудник));
		КонецЕсли
		
	КонецЦикла;
Показать
Найденные решения
15. nomad_irk 72 12.05.23 11:30 Сейчас в теме
(14)

Для каждого стр Из Объект.Сотрудники Цикл
      Запрос.УстановитьПараметр("Сотрудник",Стр.Сотрудник);
      //чтобы тут что-то присвоить, нужно это что-то получить, так понимаю, выполнив запрос
      ТЗЗапроса = Запрос.Выполнить().Выгрузить();
      Если ЗначениеЗаполнено(ТЗЗапроса) Тогда
          стр.Часов = ТЗЗапроса[0].Часов;
      КонецЕсли;
КонецЦикла;
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. nomad_irk 72 12.05.23 10:30 Сейчас в теме
(1) Потому что:
ШтатноеРасписаниеУпрСотрудники.Сотрудник - это скорее всего СправочникСсылка.Сотрудники, а
Объект.Сотрудники - это ДокументТабличнаяЧасть.Посещения.Сотрудники

Предвосхищая ваш вопрос "что нужно сделать?":

использовать значение из колонки ТЧ документа:

ТекущиеДанные = Элементы.Сотрудники.ТекущиеДанные;
Запрос.УстановитьПараметр("Сотрудник",ТекущиеДанные.Сотрудник);
3. shemyl696 12.05.23 10:33 Сейчас в теме
(2)уже пробовала получила такую ошибку-Значение не является значением объектного типа (Сотрудник)
Вот пример того, что было-
 Запрос = Новый Запрос;
    Запрос.УстановитьПараметр("ПериодРегистрации",НачалоМесяца(Объект.Дата));
    Запрос.УстановитьПараметр("Сотрудник",Элементы.Сотрудники.ТекущиеДанные.Сотрудник);
    Запрос.Текст =  "ВЫБРАТЬ
                    |    ШтатноеРасписаниеУпрСотрудники.НомерСтроки,
                    |    ШтатноеРасписаниеУпрСотрудники.Часов"+СокрЛП(День(Объект.Дата))+" Как Часов
                    |ИЗ
                    |    Документ.ШтатноеРасписаниеУпр.Сотрудники КАК ШтатноеРасписаниеУпрСотрудники
                    |ГДЕ
                    |    ШтатноеРасписаниеУпрСотрудники.Сотрудник = &Сотрудник
                    |    И ШтатноеРасписаниеУпрСотрудники.Ссылка.Проведен = &ИСТИНА
                    |    И ШтатноеРасписаниеУпрСотрудники.Ссылка.ПериодРегистрации = &ПериодРегистрации";
    
    РезультатЗапроса = Запрос.Выполнить();
Показать
4. nomad_irk 72 12.05.23 10:37 Сейчас в теме
(3)Вы же никаких больше подробностей не предоставили, сейчас происходит сплошное гадание.
Название колонки может быть другим, например ФизическоеЛицо/ФизЛицо
5. shemyl696 12.05.23 10:40 Сейчас в теме
(4)Понимаете, этот же код(последний) спокойно отрабатывает при активизации строки, но при открытии не работает от слова совсем. Думаю дело не в колонке
7. nomad_irk 72 12.05.23 10:41 Сейчас в теме
(5)Понимаете, в момент открытия нет позиционирования курсора на какую-либо строку ТЧ.
Что вы хотите от бедной 1С?
8. shemyl696 12.05.23 10:45 Сейчас в теме
(7)Это я тоже поняла) поэтому стала думать в сторону того, как обойти табличную часть(как в первом варианте), но сталкиваюсь с этой ошибкой-Неверные параметры в операции сравнения. Нельзя сравнивать поля
неограниченной длины и поля несовместимых типов.
И ШтатноеРасписаниеУпрСотрудники.Сотрудник <<?>>= &Сотрудник
9. nomad_irk 72 12.05.23 10:47 Сейчас в теме
(8)Не нужно запихивать в параметр запроса саму ТЧ:
1. СУБД все равно не знает, что с ней делать
2. даже если бы СУБД знала, то не смогла бы сравнить значение ссылки с ней о чем, собссно, сказано в тексте ошибки

Обходите ТЧ правильно и будет вам Щастье © мультик
Для Каждого Стр Из Объект.Сотрудники Цикл
        Запрос.УстановитьПараметр("Сотрудник",Стр.Сотрудник);
        //и дальше, что вам там нужно сделать
КонецЦикла
12. shemyl696 12.05.23 11:11 Сейчас в теме
(9)
Для каждого стр Из Объект.Сотрудники Цикл 
			Запрос.УстановитьПараметр("Сотрудник",Стр.Сотрудник);
			стр.Часов = Объект.Сотрудники.Часов;
		КонецЦикла;
все равно ругается. Поле объекта не обнаружено (Часов)
			стр.Часов = Объект.Сотрудники.Часов;

Прошу меня простить за глупые ошибки. Опыта пару месяцев. Читаю документацию, но быстро не получается
13. nomad_irk 72 12.05.23 11:22 Сейчас в теме
(12) Проблема в Объект.Сотрудники.Часов - вы пытаетесь в колонку "Часов" строки ТЧ присвоить не понятно что у ТЧ Сотрудники нет поля Часов, о чем вам сообщается напрямую
14. shemyl696 12.05.23 11:26 Сейчас в теме
(13) да, я понимаю что это за ошибка, я не понимаю как правильно присвоить, вот в чем дело. Наверное вопрос не корректно формулирую
15. nomad_irk 72 12.05.23 11:30 Сейчас в теме
(14)

Для каждого стр Из Объект.Сотрудники Цикл
      Запрос.УстановитьПараметр("Сотрудник",Стр.Сотрудник);
      //чтобы тут что-то присвоить, нужно это что-то получить, так понимаю, выполнив запрос
      ТЗЗапроса = Запрос.Выполнить().Выгрузить();
      Если ЗначениеЗаполнено(ТЗЗапроса) Тогда
          стр.Часов = ТЗЗапроса[0].Часов;
      КонецЕсли;
КонецЦикла;
16. shemyl696 12.05.23 11:38 Сейчас в теме
Боже мой Эта кракозябра заработала! Спасибо громадное nomad_irk за прекрасные подсказки! Сама я бы не справилась)
6. shemyl696 12.05.23 10:41 Сейчас в теме
Обе процедуры выполняются на клиенте
10. lefthander 12.05.23 10:51 Сейчас в теме
(6)Запрос на клиенте? ;) Ну-ну...
11. nomad_irk 72 12.05.23 10:52 Сейчас в теме
(10)опофеоз идиотии пока вижу......
17. shemyl696 12.05.23 11:40 Сейчас в теме
Прилагаю рабочий код, мало ли кому-то пригодится.

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

	
	
	
		Для каждого стр Из Объект.Сотрудники Цикл 
			Запрос.УстановитьПараметр("Сотрудник",Стр.Сотрудник);
			ТЗЗапроса = Запрос.Выполнить().Выгрузить();
      		Если ЗначениеЗаполнено(ТЗЗапроса) Тогда
          		стр.Часов = ТЗЗапроса[0].Часов;
			КонецЕсли;
			
		КонецЦикла;
Показать
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот