Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
18 апр 2024, 07:07

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

Автор Smolik, 13 мар 2019, 16:09

0 Пользователей и 1 гость просматривают эту тему.

Smolik

Добрый день! Я новичок в 1с, глубоко не вникал еще в конфигуратор, но появилась необходимость срочно решить данную ошибку.

При заполнении определенной формы появляется ошибка

{Документ.ОПС_НачислениеАрендыУслуг.МодульОбъекта(660)}: Преобразование значения к типу Число не может быть выполнено

НайденныеСтроки[0].Результат = Окр(НайденныеСтроки[0].Площадь*НайденныеСтроки[0].Ставка*ВсегоДней/НормаДней,2);


Подскажите, пожалуйста, простым языком, в чем суть решения.

LexaK

ну самое простое, вот это вот в результате 
( НайденныеСтроки[0].Площадь*НайденныеСтроки[0].Ставка*ВсегоДней/НормаДней ) -  НЕ ЧИСЛО!!!
если помогло нажмите: Спасибо!

Smolik

Вот здесь код всей операции. Подскажите, пожалуйста, как его отредактировать правильно?
ЦитироватьФункция РассчитатьНачисленияПоАренде(Контрагенты = Неопределено, КомментироватьРасчет = Ложь) Экспорт
   
   //массивы для хранения индексов строк табличных частей,
   //используются для расчета по одному сотруднику
   МассивИндексыСтрокНачисления = Новый Массив();
   
   Отказ = Ложь;
   // Перечитаем объект и соберем данные для заполнения наборов записей регистров
   НачатьТранзакцию();
   Прочитать();
   ВыборкаПоШапкеДокумента = СформироватьЗапросПоШапке().Выбрать();
   
   // позиционируем выборку
   ВыборкаПоШапкеДокумента.Следующий();
   ВыборкаПоАренде = СформироватьЗапросПоАренде(Контрагенты).Выбрать();
   ЗафиксироватьТранзакцию();
   
   НормаДней = ОПС_ПроведениеРасчетовПоАренде.ПолучитьДанныеКалендаря(ПериодРегистрации);
   
   Пока ВыборкаПоАренде.Следующий() Цикл
      
      ПроверитьЗаполнениеСтрокиАренда(ВыборкаПоАренде, Отказ);
      Отказ = Ложь;
      
      Если НЕ Отказ Тогда
         ПараметрыОтбора = Новый Структура;
         ПараметрыОтбора.Вставить("ПодразделениеОрганизации",    ВыборкаПоАренде.ПодразделениеОрганизации);         
         ПараметрыОтбора.Вставить("Контрагент",                ВыборкаПоАренде.Контрагент);
         ПараметрыОтбора.Вставить("ДоговорКонтрагента",          ВыборкаПоАренде.ДоговорКонтрагента);
         ПараметрыОтбора.Вставить("Объект",                   ВыборкаПоАренде.ОбъектАренды);
         ПараметрыОтбора.Вставить("Авторасчет",                Истина);
         
         НайденныеСтроки = НачисленияПоАренде.НайтиСтроки(ПараметрыОтбора);
         
         Если НайденныеСтроки.Количество() > 0 Тогда
            ВсегоДней = ((НайденныеСтроки[0].ДатаОкончания - НайденныеСтроки[0].ДатаНачала)/(60*60*24)) + 1;
            ПредКоэфИндексации       = 1;
            ТекКоэфИндексации    = 1;
            НайденныеСтроки[0].СуммаИндексации = 1;
            
            Если ВыборкаПоАренде.Индексация тогда
               ПредКоэфИндексации       = ОПС_ПроведениеРасчетовПоАренде.РассчитатьКоэффициентИндексации(ДобавитьМесяц(ПериодРегистрации, -2), ДобавитьМесяц(ПериодРегистрации,-2), ВыборкаПоАренде.ДоговорКонтрагента);
               ТекКоэфИндексации       = ОПС_ПроведениеРасчетовПоАренде.РассчитатьКоэффициентИндексации(ДобавитьМесяц(ПериодРегистрации, -1), ПериодРегистрации, ВыборкаПоАренде.ДоговорКонтрагента);
               СуммаНачисленийПредПериода = РегистрыСведений.ОПС_НачисленияПоАренде.ПолучитьСуммуНачислений(ДобавитьМесяц(ПериодРегистрации, -1), Организация, ВыборкаПоАренде.Контрагент, ВыборкаПоАренде.ДоговорКонтрагента, ВыборкаПоАренде.ОбъектАренды);
               НайденныеСтроки[0].Результат = Окр(НайденныеСтроки[0].Площадь*НайденныеСтроки[0].Ставка*ВсегоДней/НормаДней,2);
               Если (НайденныеСтроки[0].Индексация И СуммаНачисленийПредПериода > 0)Тогда
                  НайденныеСтроки[0].СуммаИндексации = МАКС(0, НайденныеСтроки[0].Результат - Окр(СуммаНачисленийПредПериода*ВсегоДней/НормаДней, 2));
               КонецЕсли;
            Иначе
               НайденныеСтроки[0].Результат = Окр(НайденныеСтроки[0].Площадь*НайденныеСтроки[0].Ставка*ВсегоДней/НормаДней,2);            
            КонецЕсли;
         КонецЕсли;
         
      КонецЕсли;
      
   КонецЦикла;

   Если Отказ Тогда
                  
      Возврат Не Отказ;
      
   КонецЕсли;
      
   Записать();
   
   Возврат Не Отказ;
   
КонецФункции // РассчитатьНачисления()

LexaK

вот такое самое простое (костыльное) решение (под отладчиком, все по другому сделал бы)

вот эту строчку
НайденныеСтроки[0].Результат = Окр(НайденныеСтроки[0].Площадь*НайденныеСтроки[0].Ставка*ВсегоДней/НормаДней,2);

замените на такую конструкцию

   Попытка
      НайденныеСтроки[0].Результат = Окр(НайденныеСтроки[0].Площадь*НайденныеСтроки[0].Ставка*ВсегоДней/НормаДней,2);
   Исключение
      //лкОшибка = ОписаниеОшибки();
      лкОшибка = "Не удалось расчитать Аренду по Площадь: " + НайденныеСтроки[0].Площадь
         + ", Ставка: " + НайденныеСтроки[0].Ставка
         + ", ВсегоДней: " + ВсегоДней + ", НормаДней: " + НормаДней;
      Сообщить(лкОшибка);
      НайденныеСтроки[0].Результат = 0;
   КонецПопытки;

если помогло нажмите: Спасибо!

Smolik

Теперь просто выдает вот такую ошибку, не заполняя ничего по-прежнему.

ЦитироватьНе удалось расчитать Аренду по Площадь: 521, Ставка: 200, ВсегоДней: 21, НормаДней:

Скриншот:


Прошу прощения, если сильно туплю :(

LexaK

Вот!!!
ЦитироватьНе удалось расчитать Аренду по Площадь: 521, Ставка: 200, ВсегоДней: 21, НормаДней:
у вас НормаДней - НЕТ



если помогло нажмите: Спасибо!

Smolik

Спасибо Вам большое!
Нужно было всего навсего зайти в календарь и записать его.

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск