Проблема с результатом запроса

1. О.Ж 06.07.17 17:24 Сейчас в теме
Добрый вечер!
Текст запроса:
ВЫБРАТЬ РАЗРЕШЕННЫЕ
		ПриемНаРаботу.Ссылка КАК Ссылка,
		ПриемНаРаботу.Организация.НаименованиеПолное КАК НазваниеОрганизации,
		ПриемНаРаботу.Организация.КодПоОКПО КАК КодПоОКПО,
		ПриемНаРаботу.Номер КАК НомерДок,
		ПриемНаРаботу.Дата КАК ДатаДок,
		ПриемНаРаботу.ДатаПриема,
		ПриемНаРаботу.ДатаЗавершенияТрудовогоДоговора,
		ПриемНаРаботу.Сотрудник КАК Работник,
		ПриемНаРаботу.ФизическоеЛицо.Пол КАК Пол,
		ПриемНаРаботу.Сотрудник.Код КАК ТабельныйНомер,
		ПриемНаРаботу.Подразделение,
		ПриемНаРаботу.Должность,
		ПриемНаРаботу.РазрядКатегория,
		ПриемНаРаботу.УсловияПриема,
		ПриемНаРаботу.ВидЗанятости,
		ПриемНаРаботу.ИныеУсловияДоговора,
		ПриемНаРаботу.КоличествоСтавок,
		ПриемНаРаботу.ДатаПриема КАК Период,
		ПриемНаРаботу.ДлительностьИспытательногоСрока,
		ПриемНаРаботу.ТрудовойДоговорДата,
		ПриемНаРаботу.ТрудовойДоговорНомер,
		ПриемНаРаботу.Руководитель,
		ПриемНаРаботу.ДолжностьРуководителя,
		ПриемНаРаботу.Ответственный,
		ПриемНаРаботу.Показатели.(
			МАКСИМУМ(ВЫБОР
					КОГДА ПриемНаРаботу.Показатели.Показатель.ВидТарифнойСтавки В (ЗНАЧЕНИЕ(Перечисление.ВидыТарифныхСтавок.МесячнаяТарифнаяСтавка), ЗНАЧЕНИЕ(Перечисление.ВидыТарифныхСтавок.ЧасоваяТарифнаяСтавка), ЗНАЧЕНИЕ(Перечисление.ВидыТарифныхСтавок.ДневнаяТарифнаяСтавка))
						ТОГДА ПриемНаРаботу.Показатели.Значение
					ИНАЧЕ 0
				КОНЕЦ) КАК Значение
		) КАК Оклад
	ИЗ
		Документ.ПриемНаРаботу КАК ПриемНаРаботу
	ГДЕ
		ПриемНаРаботу.Проведен
		И ПриемНаРаботу.Ссылка В (&МассивОбъектов)
	
	УПОРЯДОЧИТЬ ПО
		Ссылка
Показать

Вывожу результат в печатную форму. Всё кроме Оклада выводится нормально. Оклад имеет значение "ТаблицаЗначений".
Если выполнять запрос с помощью консоли запросов, то там всё прекрасно, оклад имеет значение.
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. alex-l19041 8 06.07.17 17:38 Сейчас в теме
(1) надо переделать запрос, чтобы не было "ТаблицаЗначений"...

Во временную таблицу выберите из ПриемНаРаботу.Показатели, потом Соединение...
sergpogo; +1 Ответить
3. О.Ж 06.07.17 17:43 Сейчас в теме
(2) Спасибо, попробую. Отпишусь по результату чуть позже.
4. starik-2005 3037 06.07.17 18:00 Сейчас в теме
ВЫБРАТЬ
  ПриемНаРаботу.ххх,
  ЕСТЬNULL(Подзапрос.Оклад, 0) КАК Оклад
 ИЗ
        Документ.ПриемНаРаботу КАК ПриемНаРаботу
ЛЕВОЕ СОЕДИНЕНИЕ 
  (ВЫБРАТЬ 
     Ссылка,
     МАКСИМУМ(ВЫБОР
                    КОГДА ПриемНаРаботу.Показатели.Показатель.ВидТарифнойСтавки В (ЗНАЧЕНИЕ(Перечисление.ВидыТарифныхСтавок.МесячнаяТарифнаяСтавка), ЗНАЧЕНИЕ(Перечисление.ВидыТарифныхСтавок.ЧасоваяТарифнаяСтавка), ЗНАЧЕНИЕ(Перечисление.ВидыТарифныхСтавок.ДневнаяТарифнаяСтавка))
                        ТОГДА ПриемНаРаботу.Показатели.Значение
                    ИНАЧЕ 0
                КОНЕЦ) КАК Оклад 
  ИЗ Документ.ПриемНаРаботу.Показатели 
  СГРУППИРОВАТЬ ПО Ссылка) КАК Подзапрос
ПО ПриемНаРаботу.Ссылка = Подзапрос.Ссылка
ГДЕ ...
Показать
5. О.Ж 07.07.17 13:04 Сейчас в теме
Добрый день!
Всем спасибо! Получилось! Текст запроса:
ВЫБРАТЬ РАЗРЕШЕННЫЕ
	МАКСИМУМ(ВЫБОР
			КОГДА ПриемНаРаботуПоказатели.Показатель.ВидТарифнойСтавки В (ЗНАЧЕНИЕ(Перечисление.ВидыТарифныхСтавок.МесячнаяТарифнаяСтавка), ЗНАЧЕНИЕ(Перечисление.ВидыТарифныхСтавок.ЧасоваяТарифнаяСтавка), ЗНАЧЕНИЕ(Перечисление.ВидыТарифныхСтавок.ДневнаяТарифнаяСтавка))
				ТОГДА ПриемНаРаботуПоказатели.Значение
			ИНАЧЕ 0
		КОНЕЦ) КАК Оклад
ПОМЕСТИТЬ ТарифнаяСтавка
ИЗ
	Документ.ПриемНаРаботу.Показатели КАК ПриемНаРаботуПоказатели
ГДЕ
	ПриемНаРаботуПоказатели.Ссылка.Проведен
	И ПриемНаРаботуПоказатели.Ссылка В(&МассивОбъектов)
;

////////////////////////////////////////////////////////////­////////////////////
ВЫБРАТЬ РАЗРЕШЕННЫЕ
	ПриемНаРаботу.Ссылка КАК Ссылка,
	ПриемНаРаботу.Организация.НаименованиеПолное КАК НазваниеОрганизации,
	ПриемНаРаботу.Организация.КодПоОКПО КАК КодПоОКПО,
	ПриемНаРаботу.Номер КАК НомерДок,
	ПриемНаРаботу.Дата КАК ДатаДок,
	ПриемНаРаботу.ДатаПриема КАК ДатаПриема,
	ПриемНаРаботу.ДатаЗавершенияТрудовогоДоговора КАК ДатаЗавершенияТрудовогоДоговора,
	ПриемНаРаботу.Сотрудник КАК Работник,
	ПриемНаРаботу.ФизическоеЛицо.Пол КАК Пол,
	ПриемНаРаботу.Сотрудник.Код КАК ТабельныйНомер,
	ПриемНаРаботу.Подразделение КАК Подразделение,
	ПриемНаРаботу.Должность КАК Должность,
	ПриемНаРаботу.РазрядКатегория КАК РазрядКатегория,
	ПриемНаРаботу.УсловияПриема КАК УсловияПриема,
	ПриемНаРаботу.ВидЗанятости КАК ВидЗанятости,
	ПриемНаРаботу.ИныеУсловияДоговора КАК ИныеУсловияДоговора,
	ПриемНаРаботу.КоличествоСтавок КАК КоличествоСтавок,
	ЕСТЬNULL(ТарифнаяСтавка.Оклад, 0) КАК Оклад,
	ПриемНаРаботу.ДатаПриема КАК Период,
	ПриемНаРаботу.ДлительностьИспытательногоСрока КАК ДлительностьИспытательногоСрока,
	ПриемНаРаботу.ТрудовойДоговорДата КАК ТрудовойДоговорДата,
	ПриемНаРаботу.ТрудовойДоговорНомер КАК ТрудовойДоговорНомер,
	ПриемНаРаботу.Руководитель КАК Руководитель,
	ПриемНаРаботу.ДолжностьРуководителя КАК ДолжностьРуководителя,
	ПриемНаРаботу.Ответственный КАК Ответственный
ИЗ
	Документ.ПриемНаРаботу КАК ПриемНаРаботу,
	ТарифнаяСтавка КАК ТарифнаяСтавка
ГДЕ
	ПриемНаРаботу.Ссылка.Проведен
	И ПриемНаРаботу.Ссылка В(&МассивОбъектов)

УПОРЯДОЧИТЬ ПО
	Ссылка
Показать
6. О.Ж 07.07.17 13:12 Сейчас в теме
Теперь у меня другая проблема. Когда я запросом выбираю Надбавки (не тарифные ставки) и пытаюсь складывать/умножать их, выдается ошибка: "Преобразование к типу Число не может быть выполнено".
Текст запроса:
	ЗапросНадбавки = Новый Запрос;
	ЗапросНадбавки.УстановитьПараметр("МассивОбъектов", МассивОбъектов);
	
	ЗапросНадбавки.Текст =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ
	|	ВЫБОР
	|		КОГДА ПриемНаРаботуПоказатели.Показатель.ВидТарифнойСтавки В (ЗНАЧЕНИЕ(Перечисление.ВидыТарифныхСтавок.МесячнаяТарифнаяСтавка), ЗНАЧЕНИЕ(Перечисление.ВидыТарифныхСтавок.ЧасоваяТарифнаяСтавка), ЗНАЧЕНИЕ(Перечисление.ВидыТарифныхСтавок.ДневнаяТарифнаяСтавка))
	|			ТОГДА 0
	|		ИНАЧЕ ПриемНаРаботуПоказатели.Показатель.Наименование
	|	КОНЕЦ КАК Показатель,
	|	ВЫБОР
	|		КОГДА ПриемНаРаботуПоказатели.Показатель.ВидТарифнойСтавки В (ЗНАЧЕНИЕ(Перечисление.ВидыТарифныхСтавок.МесячнаяТарифнаяСтавка), ЗНАЧЕНИЕ(Перечисление.ВидыТарифныхСтавок.ЧасоваяТарифнаяСтавка), ЗНАЧЕНИЕ(Перечисление.ВидыТарифныхСтавок.ДневнаяТарифнаяСтавка))
	|			ТОГДА 0
	|		ИНАЧЕ ПриемНаРаботуПоказатели.Значение
	|	КОНЕЦ КАК Значение,
	|	ПриемНаРаботуПоказатели.Ссылка КАК Ссылка
	|ПОМЕСТИТЬ Надбавки
	|ИЗ
	|	Документ.ПриемНаРаботу.Показатели КАК ПриемНаРаботуПоказатели
	|ГДЕ
	|	ПриемНаРаботуПоказатели.Ссылка.Проведен
	|	И ПриемНаРаботуПоказатели.Ссылка В(&МассивОбъектов)
	|;
	|
	|////////////////////////////////////////////////////////////­////////////////////
	|ВЫБРАТЬ РАЗРЕШЕННЫЕ
	|	Надбавки.Показатель КАК Показатель,
	|	Надбавки.Значение КАК Значение,
	|	Надбавки.Ссылка КАК Ссылка
	|ИЗ
	|	Надбавки КАК Надбавки
	|ГДЕ
	|	Надбавки.Значение > 0
	|
	|СГРУППИРОВАТЬ ПО
	|	Надбавки.Ссылка,
	|	Надбавки.Показатель,
	|	Надбавки.Значение";

	ТаблицаНадбавки = ЗапросНадбавки.Выполнить().Выгрузить();
	...
	Для Каждого СсылкаНаОбъект из МассивОбъектов Цикл
		
		Отбор = Новый Структура;
		Отбор.Вставить("Ссылка", СсылкаНаОбъект);

			//Надбавки
			НадбавкиСотрудника = ТаблицаНадбавки.НайтиСтроки(Отбор);
			СуммаИтого = 0;
			Для Каждого ВыборкаНадбавки из НадбавкиСотрудника Цикл
				ВидНадбавки = ВыборкаНадбавки.Показатель;
				ЗначениеНадбавки = ВыборкаНадбавки.Значение;
				Если ЗначениеНадбавки < 101 Тогда
					ПроцентНадбавки = ЗначениеНадбавки;
					ЕдиницаНадбавки = "%";
					ВеличинаНадбавки = Окр(Оклад * ЗначениеНадбавки * Ставка / 100, 2);
				Иначе
					ПроцентНадбавки = "";
					ЕдиницаНадбавки = "";
					ВеличинаНадбавки = Окр(ЗначениеНадбавки * Ставка, 2);
				КонецЕсли;
				СуммаИтого = СуммаИтого + Окр(ВеличинаНадбавки, 2);
				
				ОбластьНадбавка.Параметры.НадбавкиСотр = ВидНадбавки;
				ОбластьНадбавка.Параметры.ПроцентНадбавки = ПроцентНадбавки + " " + ЕдиницаНадбавки;
				ОбластьНадбавка.Параметры.ВеличинаНадбавки = ВеличинаНадбавки;
				ОбластьНадбавка.Параметры.ВалютаТарифнойСтавки = "руб.";
				
				ТабДок.Вывести(ОбластьНадбавка);
			КонецЦикла;
Показать


Оговорюсь: приведен не весь текст кода, Оклад и Ставка имеют значение и при умножении у них нет такой ошибки.
7. Шапокляк 07.07.17 14:12 Сейчас в теме
ВеличинаНадбавки = Окр(ЗначениеНадбавки * Ставка, 2);
Ставка у вас какого типа? Она вообще определена?
8. О.Ж 07.07.17 14:23 Сейчас в теме
(7) Да, ставка определена (из запроса выше):
			Ставка = Число(Выборка.КоличествоСтавок);
			Оклад = Число(Выборка.Оклад);
			ОбластьРаботник.Параметры.ОкладСотр = Оклад * Ставка;

9. О.Ж 07.07.17 14:57 Сейчас в теме
(7) Спасибо! Ошибка не в запросе. Нашла ошибку:
ОбластьНадбавка.Параметры.ПроцентНадбавки = ПроцентНадбавки + " " + ЕдиницаНадбавки;

Я пыталась сложить число и строку. Правильно так:
ОбластьНадбавка.Параметры.ПроцентНадбавки = "" + ПроцентНадбавки + " " + ЕдиницаНадбавки;
Оставьте свое сообщение

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