Преобразование значения к типу Число не может быть выполнено

1. MORSON 05.01.24 04:11 Сейчас в теме
Думал сначало возможно нужно установить значение переменных в 0, но всеравно не помогает, не пойму почему так. Ругается на строчку в разделе // Расчет СальдоКонецН. Может сможет кто-нибудь подсказать

&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
	
	ТабДок = Новый ТабличныйДокумент;
	Печать(ТабДок, ПараметрКоманды);
	ТабДок.Показать("Печать");
	
КонецПроцедуры

&НаСервере
Процедура Печать(ТабДок, СсылкаНаДокумент)
	
	//Получить макет
	Макет = Документы.НачислениеЗПСотрудника.ПолучитьМакет("Макет");
	
	//Получение областей из макета
	ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
	ОбластьШапкаТаблицыНач = Макет.ПолучитьОбласть("ШапкаТаблицыНач");
	ОбластьСтрокаТаблицыНач = Макет.ПолучитьОбласть("СтрокаТаблицыНач");
	ОбластьПодвалНач = Макет.ПолучитьОбласть("ПодвалНач");
	ОбластьШапкаТаблицыУд = Макет.ПолучитьОбласть("ШапкаТаблицыУд");
	ОбластьСтрокаТаблицыУд = Макет.ПолучитьОбласть("СтрокаТаблицыУд");
	ОбластьПодвалУд = Макет.ПолучитьОбласть("ПодвалУд");
	
	//Заполнение параметров и вывод областей в табличный документ
	
	//шапка
	
	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	НачислениеЗПСотрудника.Организация.Наименование КАК Организация,
		|	НачислениеЗПСотрудника.Поликлиника.Наименование КАК Поликлиника,
		|	НачислениеЗПСотрудника.Сотрудник.Наименование КАК Сотрудник,
		|	НачислениеЗПСотрудника.ПериодДок.Наименование КАК ПериодДок,
		|	НачислениеЗПСотрудника.ПериодДатаНачала КАК ПериодДатаНачала,
		|	НачислениеЗПСотрудника.ПериодДатаКонца КАК ПериодДатаКонца
		|ИЗ
		|	Документ.НачислениеЗПСотрудника КАК НачислениеЗПСотрудника
		|ГДЕ
		|	НачислениеЗПСотрудника.Ссылка = &СсылкаНаДокумент";
	
	Запрос.УстановитьПараметр("СсылкаНаДокумент", СсылкаНаДокумент);
	
	РезультатЗапроса = Запрос.Выполнить();
	
	ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
	
	Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
		
		ОбластьШапка.Параметры.Организация = ВыборкаДетальныеЗаписи.Организация;
		ОбластьШапка.Параметры.Поликлиника = ВыборкаДетальныеЗаписи.Поликлиника;
		ОбластьШапка.Параметры.Сотрудник = ВыборкаДетальныеЗаписи.Сотрудник;
		ОбластьШапка.Параметры.ПериодДок = Формат(ВыборкаДетальныеЗаписи.ПериодДок,"ДФ=MMMM.yyyy");
		ОбластьШапка.Параметры.ПериодДатаНачала = Формат(ВыборкаДетальныеЗаписи.ПериодДатаНачала,"ДФ=dd.MM.yyyy");
		ОбластьШапка.Параметры.ПериодДатаКонца = Формат(ВыборкаДетальныеЗаписи.ПериодДатаКонца, "ДФ=dd.MM.yyyy");

		
		ТабДок.Вывести(ОбластьШапка);	
	КонецЦикла;
	
	
	//шапка таблицы Нач
	
	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	НачисленнаяЗПОстатки.СуммаЗПОстаток КАК СуммаЗПОстаток
		|ИЗ
		|	РегистрНакопления.НачисленнаяЗП.Остатки(
		|			&Дата,
		|			Организация = &Организация
		|				И Поликлиника = &Поликлиника
		|				И Сотрудник = &Сотрудник) КАК НачисленнаяЗПОстатки";
	
	Запрос.УстановитьПараметр("Дата",СсылкаНаДокумент.Дата );
	Запрос.УстановитьПараметр("Организация", СсылкаНаДокумент.Организация);
	Запрос.УстановитьПараметр("Поликлиника", СсылкаНаДокумент.Поликлиника);
	Запрос.УстановитьПараметр("Сотрудник", СсылкаНаДокумент.Сотрудник);
	
	РезультатЗапроса = Запрос.Выполнить();
	
	ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
	
	Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
			
		ОбластьШапкаТаблицыНач.Параметры.СальдоНачало = ВыборкаДетальныеЗаписи.СуммаЗПОстаток;
		СальдоНачало = ВыборкаДетальныеЗаписи.СуммаЗПОстаток;
		
		ТабДок.Вывести(ОбластьШапкаТаблицыНач);	
	КонецЦикла;
	
		
	
	
	//Строка таблицы Начисления  
	
	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	НачислениеЗПСотрудникаНачисленияЗП.Отделение.Наименование КАК Отделение,
		|	НачислениеЗПСотрудникаНачисленияЗП.Должность.Наименование КАК Должность,
		|	НачислениеЗПСотрудникаНачисленияЗП.СуммаН КАК Сумма
		|ИЗ
		|	Документ.НачислениеЗПСотрудника.НачисленияЗП КАК НачислениеЗПСотрудникаНачисленияЗП
		|ГДЕ
		|	НачислениеЗПСотрудникаНачисленияЗП.Ссылка.Ссылка = &СсылкаНаДокумент
		|
		|ОБЪЕДИНИТЬ ВСЕ
		|
		|ВЫБРАТЬ
		|	НачислениеЗПСотрудникаНачисленияДополнительные.Отделение.Наименование,
		|	НачислениеЗПСотрудникаНачисленияДополнительные.Должность.Наименование,
		|	НачислениеЗПСотрудникаНачисленияДополнительные.СуммаН
		|ИЗ
		|	Документ.НачислениеЗПСотрудника.НачисленияДополнительные КАК НачислениеЗПСотрудникаНачисленияДополнительные
		|ГДЕ
		|	НачислениеЗПСотрудникаНачисленияДополнительные.Ссылка.Ссылка = &СсылкаНаДокумент";
	
	Запрос.УстановитьПараметр("СсылкаНаДокумент", СсылкаНаДокумент);
	
	РезультатЗапроса = Запрос.Выполнить();
	
	ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
	
	Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
		
		ОбластьСтрокаТаблицыНач.Параметры.Отделение = ВыборкаДетальныеЗаписи.Отделение;
		ОбластьСтрокаТаблицыНач.Параметры.Должность = ВыборкаДетальныеЗаписи.Должность;
		ОбластьСтрокаТаблицыНач.Параметры.СуммаНачисления = ВыборкаДетальныеЗаписи.Сумма;
		//
				
		
		ТабДок.Вывести(ОбластьСтрокаТаблицыНач);

	КонецЦикла; 
	

	
	//подвал нач
	
	// Запрос для суммы НачисленияЗП.СуммаН
	СуммаНачисленияЗП = 0;
	
	ЗапросНачисленияЗП = Новый Запрос;
	ЗапросНачисленияЗП.Текст = 
	    "ВЫБРАТЬ
	    |    СУММА(НачислениеЗПСотрудникаНачисленияЗП.СуммаН) КАК СуммаНачисленияЗП
	    |ИЗ
	    |    Документ.НачислениеЗПСотрудника.НачисленияЗП КАК НачислениеЗПСотрудникаНачисленияЗП
	    |ГДЕ
	    |    НачислениеЗПСотрудникаНачисленияЗП.Ссылка = &СсылкаНаДокумент";

	ЗапросНачисленияЗП.УстановитьПараметр("СсылкаНаДокумент", СсылкаНаДокумент);

	РезультатЗапросаНачисленияЗП = ЗапросНачисленияЗП.Выполнить();

	ВыборкаНачисленияЗП = РезультатЗапросаНачисленияЗП.Выбрать();

	Если ВыборкаНачисленияЗП.Следующий() Тогда
	    СуммаНачисленияЗП = ВыборкаНачисленияЗП.СуммаНачисленияЗП;
	КонецЕсли;

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

	ЗапросНачисленияДополнительные.УстановитьПараметр("СсылкаНаДокумент", СсылкаНаДокумент);

	РезультатЗапросаНачисленияДополнительные = ЗапросНачисленияДополнительные.Выполнить();

	ВыборкаНачисленияДополнительные = РезультатЗапросаНачисленияДополнительные.Выбрать();

	Если ВыборкаНачисленияДополнительные.Следующий() Тогда
	    СуммаНачисленияДополнительные = ВыборкаНачисленияДополнительные.СуммаНачисленияДополнительные;
	КонецЕсли;

	// Расчет СальдоКонецН
	СальдоКонецН = СуммаНачисленияЗП + СуммаНачисленияДополнительные; //Ругается на данную строчку

	// Вывод результата
	ОбластьПодвалНач.Параметры.СальдоКонецН = СальдоКонецН;
	ТабДок.Вывести(ОбластьПодвалНач);

	 
	
	
	//шапка таблицы Уд
	
	ТабДок.Вывести(ОбластьШапкаТаблицыУд);
	
	//Строка таблицы Уд
	
	  Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	НачислениеЗПСотрудникаУдержания.Удержание.Наименование КАК ВидОперации,
		|	НачислениеЗПСотрудникаУдержания.СуммаУ КАК СуммаУ,
		|	НачислениеЗПСотрудникаУдержания.Отделение.Наименование КАК ОтделениеУ,
		|	НачислениеЗПСотрудникаУдержания.Должность.Наименование КАК ДолжностьУ
		|ИЗ
		|	Документ.НачислениеЗПСотрудника.Удержания КАК НачислениеЗПСотрудникаУдержания
		|ГДЕ
		|	НачислениеЗПСотрудникаУдержания.Ссылка.Ссылка = &СсылкаНаДокумент
		|
		|ОБЪЕДИНИТЬ ВСЕ
		|
		|ВЫБРАТЬ
		|	НачислениеЗПСотрудникаВыплатыУдержанияБелые.ВыпУд,
		|	НачислениеЗПСотрудникаВыплатыУдержанияБелые.СуммаВып,
		|	NULL,
		|	NULL
		|ИЗ
		|	Документ.НачислениеЗПСотрудника.ВыплатыУдержанияБелые КАК НачислениеЗПСотрудникаВыплатыУдержанияБелые";
	
	Запрос.УстановитьПараметр("СсылкаНаДокумент", СсылкаНаДокумент);
	
	РезультатЗапроса = Запрос.Выполнить();
	
	ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
	
	Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
		
		ОбластьСтрокаТаблицыУд.Параметры.ОтделениеУ = ВыборкаДетальныеЗаписи.ОтделениеУ;
		ОбластьСтрокаТаблицыУд.Параметры.ДолжностьУ = ВыборкаДетальныеЗаписи.ДолжностьУ;
		ОбластьСтрокаТаблицыУд.Параметры.ВидОперации = ВыборкаДетальныеЗаписи.ВидОперации;
		ОбластьСтрокаТаблицыУд.Параметры.СуммаУдержания = ВыборкаДетальныеЗаписи.СуммаУ;
		//
				
		
		ТабДок.Вывести(ОбластьСтрокаТаблицыУд);

	КонецЦикла;
	
	
	//подвал уд

// Запрос для суммы выплат
	ЗапросСуммаВыплат = Новый Запрос;
	ЗапросСуммаВыплат.Текст = 
		"ВЫБРАТЬ
		|	СУММА(НачислениеЗПСотрудникаВыплатыУдержанияБелые.СуммаВып) КАК СуммаВып
		|ИЗ
		|	Документ.НачислениеЗПСотрудника.ВыплатыУдержанияБелые КАК НачислениеЗПСотрудникаВыплатыУдержанияБелые
		|ГДЕ
		|	НачислениеЗПСотрудникаВыплатыУдержанияБелые.Ссылка.Ссылка = &СсылкаНаДокумент";

	ЗапросСуммаВыплат.УстановитьПараметр("СсылкаНаДокумент", СсылкаНаДокумент);

	РезультатЗапросаСуммаВыплат = ЗапросСуммаВыплат.Выполнить();

	ВыборкаСуммаВыплат = РезультатЗапросаСуммаВыплат.Выбрать();

	Если ВыборкаСуммаВыплат.Следующий() Тогда
		СуммаВыплат = ВыборкаСуммаВыплат.СуммаВып;
	КонецЕсли;

	// Запрос для суммы удержаний
	ЗапросСуммаУдержаний = Новый Запрос;
	ЗапросСуммаУдержаний.Текст = 
		"ВЫБРАТЬ
		|	СУММА(НачислениеЗПСотрудникаУдержания.СуммаУ) КАК СуммаУ
		|ИЗ
		|	Документ.НачислениеЗПСотрудника.Удержания КАК НачислениеЗПСотрудникаУдержания
		|ГДЕ
		|	НачислениеЗПСотрудникаУдержания.Ссылка.Ссылка = &СсылкаНаДокумент";

	ЗапросСуммаУдержаний.УстановитьПараметр("СсылкаНаДокумент", СсылкаНаДокумент);

	РезультатЗапросаСуммаУдержаний = ЗапросСуммаУдержаний.Выполнить();

	ВыборкаСуммаУдержаний = РезультатЗапросаСуммаУдержаний.Выбрать();

	Если ВыборкаСуммаУдержаний.Следующий() Тогда
		СуммаУдержаний = ВыборкаСуммаУдержаний.СуммаУ;
	КонецЕсли;
	
	
	
	

	// Подвал уд
	СальдоКонецУ = СуммаВыплат + СуммаУдержаний;
    СальдоКонец = СальдоНачало + СальдоКонецН - СальдоКонецУ;
	
	ОбластьПодвалУд.Параметры.СальдоКонец = СальдоКонец;
	ОбластьПодвалУд.Параметры.СальдоКонецУ = СальдоКонецУ;
	ТабДок.Вывести(ОбластьПодвалУд);


КонецПроцедуры
Показать
По теме из базы знаний
Найденные решения
10. Vovan1975 13 05.01.24 11:54 Сейчас в теме
(9)фигасе забавно

тогда перед строкой
СальдоКонецН = СуммаНачисленияЗП + СуммаНачисленияДополнительные; //Ругается на данную строчку

добавляете такое
Если СуммаНачисленияЗП = NULL тогда
СуммаНачисленияЗП = 0
КонецЕсли

Если СуммаНачисленияДополнительные = NULL тогда
СуммаНачисленияДополнительные = 0
КонецЕсли
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. user1880116 05.01.24 07:09 Сейчас в теме
(1)
Думал
Поставь точку останова. Посмотри на тип и значение переменной перед выполнением этой операции. Пойми, как пременная приняла такое значение.
3. muskul 05.01.24 08:31 Сейчас в теме
Такое нужно самому понять.
в качестве подсказки, используй в запросах ЕстьNULL
4. Vovan1975 13 05.01.24 11:23 Сейчас в теме
поставте вместо
СальдоКонецН = NULL;

вот это
СальдоКонецН = 0;

и больше не балуйтесь NULL
5. MORSON 05.01.24 11:26 Сейчас в теме
(4)Пробовал, ничего не меняет
6. Vovan1975 13 05.01.24 11:28 Сейчас в теме
(5) соответственно и в
СуммаНачисленияДополнительные = NULL;

тоже нужно 0 ставить а не нулл
7. MORSON 05.01.24 11:30 Сейчас в теме
(6) Да, я так и сделал. Ничего не поменяло
8. Vovan1975 13 05.01.24 11:32 Сейчас в теме
(7) тогда следующую строчку запроса
| СУММА(НачислениеЗПСотрудникаНачисленияДополнительные.СуммаН) КАК СуммаНачисленияДополнительные

изменить на
| СУММА(isnull(НачислениеЗПСотрудникаНачисленияДополнительные.СуммаН,0)) КАК СуммаНачисленияДополнительные
9. MORSON 05.01.24 11:44 Сейчас в теме
(8)Аналогично, туже самую ошибку поменял. Хотя так же дописал ЕстьNull ко всем запросом с суммой
10. Vovan1975 13 05.01.24 11:54 Сейчас в теме
(9)фигасе забавно

тогда перед строкой
СальдоКонецН = СуммаНачисленияЗП + СуммаНачисленияДополнительные; //Ругается на данную строчку

добавляете такое
Если СуммаНачисленияЗП = NULL тогда
СуммаНачисленияЗП = 0
КонецЕсли

Если СуммаНачисленияДополнительные = NULL тогда
СуммаНачисленияДополнительные = 0
КонецЕсли
11. MORSON 05.01.24 14:11 Сейчас в теме
(10)
Если СуммаНачисленияЗП = NULL тогда
СуммаНачисленияЗП = 0
КонецЕсли

Если СуммаНачисленияДополнительные = NULL тогда
СуммаНачисленияДополнительные = 0
КонецЕсли


Появился прогресс теперь ругается на строчку
// Подвал уд
	СальдоКонецУ = СуммаВыплат + СуммаУдержаний;


Добавил следующую строчку кода и всё заработало, спасибо большое:
Если СуммаВыплат = NULL тогда
		СуммаВыплат = 0
	КонецЕсли;

	Если СуммаУдержаний = NULL тогда
		СуммаУдержаний = 0
	КонецЕсли;
12. Vovan1975 13 05.01.24 14:20 Сейчас в теме
(11) ну тут аналогично.
Проверить что переменная СальдоКонецУ первоначально не инициализировано NULL (1с не умеет преобразовывать NULL к числу)
и перед этой строкой

// Подвал уд
СальдоКонецУ = СуммаВыплат + СуммаУдержаний;

поставить блоки
Если СуммаВыплат = NULL тогда
СуммаВыплат =0
конецесли

Если СуммаУдержаний = NULL тогда
СуммаУдержаний = 0
конецесли

Вместо стравнения типа "СуммаВыплат = NULL" можно использовать "ЗначениеЗаполнено(СуммаВыплат)=ложь", оно универсальнее
Оставьте свое сообщение

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