Имя: Пароль:
1C
 
Результат запроса возращает неопределенно
↓ (Волшебник 02.12.2024 11:10)
0 Sanchez2114
 
02.12.24
11:10
Добрый день! Имеется функция для получния СтавкаЧас из регистра сведений ОкладыСотрудников

Функция ПолучитьОклад(СотрудникОтбора, ПериодОтбора)Экспорт
	
		//{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
	// Данный фрагмент построен конструктором.
	// При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
	
	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	ОкладыСотрудниковСрезПоследних.СтавкаЧас КАК СтавкаЧас
		|ИЗ
		|	РегистрСведений.ОкладыСотрудников.СрезПоследних(&ПериодСреза, Сотрудник = &СотрудникОтбора) КАК ОкладыСотрудниковСрезПоследних";
	
	Запрос.УстановитьПараметр("ПериодСреза", ПериодОтбора);
	Запрос.УстановитьПараметр("СотрудникОтбора", СотрудникОтбора);
	
	РезультатЗапроса = Запрос.Выполнить(); 
	
	Если РезультатЗапроса.Пустой() Тогда
	
		  СтавкаЧасСотрудника = 0;
		  
	  Иначе 
		  
		  ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
		  
		  ВыборкаДетальныеЗаписи.Следующий();
		  
		  СтавкаЧасСотрудника = ВыборкаДетальныеЗаписи.СтавкаЧас;
	
	  КонецЕсли;
	  
	  Возврат СтавкаЧасСотрудника;
	
		
	//}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
	

КонецФункции // ПолучитьОклад()

Так же, процедура, которая подставляет СтавкуЧас сотрудника в таблиную часть Документа Начисление зарплаты, СтавкаЧас

Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения)
	
	Для каждого СтрокаСотрудника Из ЭтотОбъект.СписокСотрудников Цикл
	
		СтрокаСотрудника.СтавкаЧас = РегистрыСведений.ОкладыСотрудников.ПолучитьОклад(СтрокаСотрудника, ЭтотОбъект.Дата);
		
	КонецЦикла;
	
КонецПроцедуры


Ошибка следущая
Ошибка при выполнении обработчика - 'ПередЗаписью'
по причине:
Ошибка при вызове метода контекста (Выполнить)
{РегистрСведений.ОкладыСотрудников.МодульМенеджера(17)}:РезультатЗапроса = Запрос.Выполнить();
{Документ.НачислениеЗарплаты.МодульОбъекта(6)}:СтрокаСотрудника.СтавкаЧас = РегистрыСведений.ОкладыСотрудников.ПолучитьОклад(СтрокаСотрудника, ЭтотОбъект.Дата);

[ОшибкаВоВремяВыполненияВстроенногоЯзыка]
по причине:
{(4, 74)}: Неверные параметры в операции сравнения. Нельзя сравнивать поля
неограниченной длины и поля несовместимых типов.
РегистрСведений.ОкладыСотрудников.СрезПоследних(&ПериодСреза, Сотрудник <<?>>= &СотрудникОтбора) КАК ОкладыСотрудниковСрезПоследних


Куда мне смотреть и что не так?
1 Гипервизор
 
02.12.24
11:09
А сообщение об ошибке вообще не наводит на мысли?
2 Волшебник
 
02.12.24
11:10
проверьте тип СписокСотрудников и убедитесь, что СтрокаСотрудника не является ссылкой на справочник Сотрудники
3 СвинТуз
 
02.12.24
11:11
Нефиг строку в параметр запроса загонять
4 Волшебник
 
02.12.24
11:13
Можно ещё вызвать: РегистрыСведений.ОкладыСотрудников.ПолучитьПоследнее(<КонецПериода>, <Отбор>)

А уж если используете запрос, так сделайте один запрос на всю табличную часть
5 Sanchez2114
 
02.12.24
11:14
(3) не понял, объясните
6 СвинТуз
 
02.12.24
11:14
МаркетингЦен = РегистрыСведений.МаркетингЦен;
Отбор = Новый Структура;
Отбор.Вставить("Контрагент", Строка.Контрагент);
ТекущиеЦеныКонкурентов = МаркетингЦен.СрезПоследних(ТекущаяДата(), Отбор);


Все равно г...но
Запрос в цикле замаскированный.
7 Волшебник
 
02.12.24
11:16
(6) У профессионалов запросы в цикле не тормозят. У автора наверняка единственное ведущее измерение с индексом. Всё будет работать быстро.
8 СвинТуз
 
02.12.24
11:16
ЭтотОбъект.СписокСотрудников - это табличная часть
СтрокаСотрудника  - это строка табличной части

==> СотрудникОтбора это СтрокаСотрудника
9 СвинТуз
 
02.12.24
11:17
(7)
Это привычка )))
10 Волшебник
 
02.12.24
11:17
(9) вредная
11 СвинТуз
 
02.12.24
11:19
(10)
Видел лекцию. Уважаемый человек ставил опыты.
Сделал вывод. Сказки все про оптимизацию.
За исключением случаев составного типа в набитом регистре накопления.
12 СвинТуз
 
02.12.24
11:20
Но это же любовь к искусству
13 СвинТуз
 
02.12.24
11:22
(0)
В целом.
Не нужная функция.
Запрос в цикле.
С ошибкой.

Для начала норм.
14 Sanchez2114
 
02.12.24
11:22
ничего не понятно но очень интересено)
15 СвинТуз
 
02.12.24
11:24
Ясно.
Вскрытие не помогло. Больной был еще жив.
Дальше сам.
Зашивать не будем.
16 Sanchez2114
 
02.12.24
11:24
(2) ДокументТабличнаяЧастьСтрока.НачислениеЗарплаты.СписокСотрудников
17 Sanchez2114
 
02.12.24
11:26
СписокСотрудников =

ДокументТабличнаяЧастьСтрока.НачислениеЗарплаты.СписокСотрудников
18 Волшебник
 
02.12.24
11:26
(16) да-да, продолжайте
19 Волшебник
 
02.12.24
11:27
(17) ну и? мыслишка-то появилась?
20 Sanchez2114
 
02.12.24
11:30
(19) т.е я правильно понимаю, что я передаю строку табличной части, а надо передать именно самого Сотрудника? или нет?
21 Волшебник
 
02.12.24
11:31
(20) Нет. Надо передать список всех сотрудников в один запрос.
22 Sanchez2114
 
02.12.24
11:31
все
23 Волшебник
 
02.12.24
11:33


24 Sanchez2114
 
02.12.24
11:33
СтрокаСотрудника.Сотрудник надо передать было, спасибо
25 Волшебник
 
02.12.24
11:35
(24)

26 Sanchez2114
 
02.12.24
11:44
все заработало
Чтобы обнаруживать ошибки, программист должен иметь ум, которому доставляет удовольствие находить изъяны там, где, казалось, царят красота и совершенство. Фредерик Брукс-младший