8.х Ошибка "Преобразование значения..."

Тема в разделе "Общие вопросы "1С:Предприятие 8"", создана пользователем Rusboom, 30 июн 2008.

  1. TopicStarter Overlay
    Rusboom
    Offline

    Rusboom

    Регистрация:
    30 июн 2008
    Сообщения:
    2
    Симпатии:
    0
    Баллы:
    1
    Здравствуйте.
    Возникает ошибка в документе "Формирование резерва по отпускам" при нажатии на кнопку "Заполнить - Рассчитать резерв".

    Вот выскакивает описание ошибки:

    Код:
    {Документ.ФормированиеРезерваПоОтпускам(1542)}: Преобразование значения к типу Число не может быть выполнено
    НоваяСтрока.СуммаСН = (НоваяСтрока.СуммаРезерва-НоваяСтрока.СуммаОПВ)*Выборка.СтавкаСН/100;
    
    
    Как ее можно исправить? Я исправил перед этим одну, вот выскочила другая.
  2. AlexFF
    Offline

    AlexFF Разбирающийся

    Регистрация:
    6 мар 2007
    Сообщения:
    565
    Симпатии:
    1
    Баллы:
    26
    Проверь все занчения из формулы на Неопределенно. Скорее всего в этом беда.
  3. TopicStarter Overlay
    Rusboom
    Offline

    Rusboom

    Регистрация:
    30 июн 2008
    Сообщения:
    2
    Симпатии:
    0
    Баллы:
    1
    Я просмотрел внимательно. Может быть проблема в Выборка.СтавкаСН?
    Просто я новичок в 1С, раньше не приходилось в ней работать, а вот теперь..

    Вот код данной процедуры.
    Код:
    Процедура РасчитатьРезерв() Экспорт
    //определим надо ли расчитыватьь СО
    РасчитыватьСО = Ложь;
    Если ВидРасчета.ОблагаетсяСО = Справочники.СпособыНалогообложенияДоходов.ОблагаетсяЦеликом Тогда
    РасчитыватьСО = Истина;
    КонецЕсли;
    
    //Получим период для значения ставок по СН для контрактного вида деятельности
    Запрос = Новый Запрос;
    Запрос.УстановитьПараметр("ДатаАктуальности", Дата);
    Запрос.УстановитьПараметр("ВидСтавокИПНиСН", Перечисления.ВидыСтавокИПНиСН.TS_ПоИсчислениюСНДляГражданРКДляКонтрактногоВидаДеятельности);
    
    Запрос.Текст = "
    |ВЫБРАТЬ 
    |	СведенияОСтавках.Период
    |ИЗ
    |	РегистрСведений.СведенияОСтавкахИПНиСН.СрезПоследних(&ДатаАктуальности, ВидСтавокИПНиСН = &ВидСтавокИПНиСН) КАК СведенияОСтавках
    |УПОРЯДОЧИТЬ ПО
    |	СведенияОСтавках.НомерСтрокиСтавок
    |";
    
    Выборка = Запрос.Выполнить().Выбрать();
    
    Если Выборка.Следующий() Тогда
    ПериодСНДляКонтрактногоВидаДеятельности = Выборка.Период;
    Иначе 
    Сообщить("Не удалось получить период последней записи ставки СН для контрактного вида деятельности.");
    Возврат;
    КонецЕсли;
    
    //Получим период для значения ставок по СН для не контрактного вида деятельности
    Запрос = Новый Запрос;
    Запрос.УстановитьПараметр("ДатаАктуальности", Дата);
    Запрос.УстановитьПараметр("ВидСтавокИПНиСН", Перечисления.ВидыСтавокИПНиСН.ПоИсчислениюСНДляГражданРК);
    
    Запрос.Текст = "
    |ВЫБРАТЬ РАЗРЕШЕННЫЕ
    |	СведенияОСтавках.Период
    |ИЗ
    |	РегистрСведений.СведенияОСтавкахИПНиСН.СрезПоследних(&ДатаАктуальности, ВидСтавокИПНиСН = &ВидСтавокИПНиСН) КАК СведенияОСтавках
    |УПОРЯДОЧИТЬ ПО
    |	СведенияОСтавках.НомерСтрокиСтавок
    |";
    
    Выборка = Запрос.Выполнить().Выбрать();
    
    Если Выборка.Следующий() Тогда
    ПериодСНДляНеКонтрактногоВидаДеятельности = Выборка.Период;
    Иначе 
    Сообщить("Не удалось получить период последней записи ставки СН.");
    Возврат;
    КонецЕсли;
    
    
    //Получим ставку ОПВ
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
    |	СведенияОСтавкахНалоговСборовОтчисленийСрезПоследних.ВидНалога,
    |	СведенияОСтавкахНалоговСборовОтчисленийСрезПоследних.Ставка
    |ИЗ
    |	РегистрСведений.СведенияОСтавкахНалоговСборовОтчислений.СрезПоследних(, ВидНалога = &Вид) КАК СведенияОСтавкахНалоговСборовОтчисленийСрезПоследних";
    
    Запрос.УстановитьПараметр("Вид", Справочники.НалогиСборыОтчисления.ОбязательныеПенсионныеВзносы);
    
    Результат = Запрос.Выполнить();
    Выборка = Результат.Выбрать();
    
    Если Выборка.Следующий() Тогда
    
    СтавкаОПВ = Выборка.Ставка;
    
    Иначе 
    Сообщить("Не удалось получить ставку ОПВ.");
    Возврат;
    КонецЕсли;
    
    //Получим ставку СО
    Если РасчитыватьСО Тогда
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
    |	СведенияОСтавкахНалоговСборовОтчисленийСрезПоследних.ВидНалога,
    |	СведенияОСтавкахНалоговСборовОтчисленийСрезПоследних.Ставка
    |ИЗ
    |	РегистрСведений.СведенияОСтавкахНалоговСборовОтчислений.СрезПоследних(, ВидНалога = &Вид) КАК СведенияОСтавкахНалоговСборовОтчисленийСрезПоследних";
    
    Запрос.УстановитьПараметр("Вид", Справочники.НалогиСборыОтчисления.ОбязательныеСоциальныеОтчисления);
    
    Результат = Запрос.Выполнить();
    Выборка = Результат.Выбрать();
    
    Если Выборка.Следующий() Тогда
    
    СтавкаСО = Выборка.Ставка;
    Иначе 
    Сообщить("Не удалось получить ставку СО.");
    Возврат;
    КонецЕсли;
    КонецЕсли;
    
    //Получим данные для расчета резева и расчитаем
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
    |	ВложенныйЗапрос.Применять,
    |	ВложенныйЗапрос.ВидСтавки,
    |	ВложенныйЗапрос.КоличествоНеиспользованныхДней,
    |	ВложенныйЗапрос.Резерв КАК СуммаРезерва,
    |	СтавкиСН.Ставка КАК СтавкаСН,
    |	ВложенныйЗапрос.ФизЛицо,
    |	ВложенныйЗапрос.Приказ,
    |	ВложенныйЗапрос.СредняяЗарплата,
    |	ВложенныйЗапрос.ГрафикРаботы
    |ИЗ
    |	(ВЫБРАТЬ
    |		ФормированиеРезерваПоОтпускамНеиспользованныеОтпускаРаботников.ФизЛицо КАК ФизЛицо,
    |		ФормированиеРезерваПоОтпускамНеиспользованныеОтпускаРаботников.Приказ КАК Приказ,
    |		ФормированиеРезерваПоОтпускамНеиспользованныеОтпускаРаботников.КоличествоНеиспользованныхДней КАК КоличествоНеиспользованныхДней,
    |		ФормированиеРезерваПоОтпускамНеиспользованныеОтпускаРаботников.СредняяЗарплата КАК СредняяЗарплата,
    |		СостояниеПризнакаРасчетаСНСрезПоследних.Применять КАК Применять,
    |		ВЫБОР
    |			КОГДА 
    СостояниеПризнакаРасчетаСНСрезПоследних.Применять
    |				ТОГДА &СНДляКонтрактногоВидаДеятельности
    |			ИНАЧЕ &СНДляНеКонтрактногоВидаДеятельности
    |		КОНЕЦ КАК ВидСтавки,
    |		ФормированиеРезерваПоОтпускамНеиспользованныеОтпускаРаботников.КоличествоНеиспользованныхДней * ФормированиеРезерваПоОтпускамНеиспользованныеОтпускаРаботников.СредняяЗарплата КАК Резерв,
    |		ВЫБОР
    |			КОГДА 
    СостояниеПризнакаРасчетаСНСрезПоследних.Применять
    |				ТОГДА &ПериодСНДляКонтрактногоВидаДеятельности
    |			ИНАЧЕ &ПериодСНДляНеКонтрактногоВидаДеятельности
    |		КОНЕЦ КАК ПериодСН,
    |		ФормированиеРезерваПоОтпускамНеиспользованныеОтпускаРаботников.ГрафикРаботы КАК ГрафикРаботы
    |	ИЗ
    |		Документ.ФормированиеРезерваПоОтпускам.НеиспользованныеОтпускаРаботников КАК ФормированиеРезерваПоОтпускамНеиспользованныеОтпускаРаботников
    |			ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.TS_СостояниеПризнакаРасчетаСН.СрезПоследних КАК СостояниеПризнакаРасчетаСНСрезПоследних
    |			ПО ФормированиеРезерваПоОтпускамНеиспользованныеОтпускаРаботников.ФизЛицо = СостояниеПризнакаРасчетаСНСрезПоследних.ФизическоеЛицо
    |				И ФормированиеРезерваПоОтпускамНеиспользованныеОтпускаРаботников.Ссылка.Организация = СостояниеПризнакаРасчетаСНСрезПоследних.Организация
    |	ГДЕ
    |		ФормированиеРезерваПоОтпускамНеиспользованныеОтпускаРаботников.Ссылка = &Ссылка) КАК ВложенныйЗапрос
    |		ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
    |			СведенияОСтавкахИПНиСНСрезПоследних.ВидСтавокИПНиСН КАК ВидСтавокИПНиСН,
    |			СведенияОСтавкахИПНиСНСрезПоследних.СуммаДоходаС КАК СуммаДоходаС,
    |			СведенияОСтавкахИПНиСНСрезПоследних.СуммаДоходаПо КАК СуммаДоходаПо,
    |			СведенияОСтавкахИПНиСНСрезПоследних.Ставка КАК Ставка,
    |			СведенияОСтавкахИПНиСНСрезПоследних.СуммаНалогаПредыдущегоПредела КАК СуммаНалогаПредыдущегоПредела,
    |			СведенияОСтавкахИПНиСНСрезПоследних.Период КАК Период
    |		ИЗ
    |			РегистрСведений.СведенияОСтавкахИПНиСН.СрезПоследних(&Период, ) КАК СведенияОСтавкахИПНиСНСрезПоследних) КАК СтавкиСН
    |		ПО ВложенныйЗапрос.ВидСтавки = СтавкиСН.ВидСтавокИПНиСН
    |			И ВложенныйЗапрос.Резерв > СтавкиСН.СуммаДоходаС
    |			И ВложенныйЗапрос.Резерв <= СтавкиСН.СуммаДоходаПо
    |			И ВложенныйЗапрос.ПериодСН = СтавкиСН.Период";
    
    Запрос.УстановитьПараметр("СНДляКонтрактногоВидаДеятельности", Перечисления.ВидыСтавокИПНиСН.TS_ПоИсчислениюСНДляГражданРКДляКонтрактногоВидаДеятельности);
    Запрос.УстановитьПараметр("СНДляНеКонтрактногоВидаДеятельности", Перечисления.ВидыСтавокИПНиСН.ПоИсчислениюСНДляГражданРК);
    Запрос.УстановитьПараметр("Ссылка", ЭтотОбъект.Ссылка);
    Запрос.УстановитьПараметр("Период", КонецДня(Дата));
    Запрос.УстановитьПараметр("ПериодСНДляКонтрактногоВидаДеятельности", ПериодСНДляКонтрактногоВидаДеятельности);
    Запрос.УстановитьПараметр("ПериодСНДляНеКонтрактногоВидаДеятельности", ПериодСНДляНеКонтрактногоВидаДеятельности);
    
    НеиспользованныеОтпускаРаботников.Очистить();
    Результат = Запрос.Выполнить();
    Выборка = Результат.Выбрать();
    
    Пока Выборка.Следующий() Цикл
    НоваяСтрока = НеиспользованныеОтпускаРаботников.Добавить();
    ЗаполнитьЗначенияСвойств(НоваяСтрока, Выборка);
    НоваяСтрока.СуммаОПВ = НоваяСтрока.СуммаРезерва*СтавкаОПВ/100;
    НоваяСтрока.СуммаСН = (НоваяСтрока.СуммаРезерва-НоваяСтрока.СуммаОПВ)*Выборка.СтавкаСН/100;
    НоваяСтрока.СуммаСО = ?(РасчитыватьСО,(НоваяСтрока.СуммаРезерва-НоваяСтрока.СуммаОПВ)*СтавкаСО/100,0);
    НоваяСтрока.СуммаРезерваИтого = НоваяСтрока.СуммаРезерва+НоваяСтрока.СуммаСН+НоваяСтрока.СуммаСО;
    КонецЦикла;
    КонецПроцедуры
    
    
  4. tugrik
    Offline

    tugrik Опытный в 1С

    Регистрация:
    18 июн 2008
    Сообщения:
    77
    Симпатии:
    0
    Баллы:
    26
    самое простое - посмотреть отладчиком на значения из этой строки. наверняка окажется, что одно из них не число...
  5. Эмин
    Offline

    Эмин Руководитель проектов

    Регистрация:
    25 май 2007
    Сообщения:
    1.178
    Симпатии:
    1
    Баллы:
    26
    Для начала, сообщите - измененная у вас конфигурация или типовая, может обновления вышли.

Поделиться этой страницей