![]() |
![]() |
![]() |
|
v8: Преобразование значения к типу Число не может быть выполнено | ☑ | ||
---|---|---|---|---|
0
david91
10.04.13
✎
00:54
|
Добрый всем день.
занимаюсь самообучением 1С предприятие 8.2 по книге М.Г.Радченко. столкнулся с такой проблемой: при расчете з/п выдает слидующую ошибку: Преобразование значения к типу Число не может быть выполнено ЗаписьРегистра.Результат=(ЗаписьРегистра.ИсходныеДанные/ВыборкаРезультата.Норма)*ВыборкаРезультата.Факт; Текст программы: Процедура РассчитатьНачисления(НаборЗаписейРегистра,ТребуемыйВидРасчета,СписокСотрудников)Экспорт Регистратор=НаборЗаписейРегистра.Отбор.Регистратор.Значение; //Рассчитать первичные записи. Если ТребуемыйВидРасчета=ПланыВидовРасчета.ОсновныеНачисления.Оклад Тогда Запрос=Новый Запрос; Запрос.Текст= "Выбрать |НачисленияДанныеГрафика.ЗначениеПериодДействия КАК Норма, |НачисленияДанныеГрафика.ЗначениеФактическийПериодДействия КАК Факт, |НачисленияДанныеГрафика.НомерСтроки КАК НомерСтроки |ИЗ |РегистрРасчета.Начисления.ДанныеГрафика(Регистратор=&Регистратор И |ВидРасчета=&ВидРасчета И Сотрудник В(&СписокСотрудников)) |КАК НачисленияДанныеГрафика"; Запрос.УстановитьПараметр("Регистратор",Регистратор); Запрос.УстановитьПараметр("ВидРасчета",ТребуемыйВидРасчета); Запрос.УстановитьПараметр("СписокСотрудников",СписокСотрудников); ВыборкаРезультата=Запрос.Выполнить().Выбрать(); Для Каждого ЗаписьРегистра Из НаборЗаписейРегистра Цикл СтруктураНомер=Новый Структура("НомерСтроки"); СтруктураНомер.НомерСтроки=ЗаписьРегистра.НомерСтроки; ВыборкаРезультата.Сбросить(); Если ВыборкаРезультата.НайтиСледующий(СтруктураНомер) Тогда Если ВыборкаРезультата.Норма=0 Тогда Сообщение=Новый СообщениеПользователю; Сообщение.Текст="Вид рассчета:Оклад-Нет рабочих дней в заданном периоде"; Сообщение.Сообщить(); ЗаписьРегистра.Результат=0; Иначе //Рассчитать оклад по фактическому периоду и исходным данным ЗаписьРегистра.Результат=(ЗаписьРегистра.ИсходныеДанные/ВыборкаРезультата.Норма)*ВыборкаРезультата.Факт; Сообщение=Новый СообщениеПользователю; Сообщение.Текст="Выполнен расчет"+ЗаписьРегистра.Регистратор+"-"+ЗаписьРегистра.ВидРасчета+"-"+ЗаписьРегистра.Сотрудник; Сообщение.Сообщить(); КонецЕсли; КонецЕсли; КонецЦикла; //Рассчитать вторичные записи ИначеЕсли ТребуемыйВидРасчета=ПланыВидовРасчета.ОсновныеНачисления.Премия Тогда Запрос=Новый Запрос; Запрос.Текст= "ВЫБРАТЬ | НачисленияБазаНачисления.НомерСтроки КАК НомерСтроки, | НачисленияБазаНачисления.РезультатБаза КАК База |ИЗ | РегистрРасчета.Начисления.БазаНачисления(&ИзмеренияОсновного,&ИзмеренияБазового,,Регистратор=&Регистратор И ВидРасчета=&ВидРасчета И Сотрудник В(&СписокСотрудников)) |КАК НачисленияБазаНачисления"; Измер=Новый Массив(1); Измер[0]="Сотрудник"; Запрос.УстановитьПараметр("ИзмеренияОсновного",Измер); Запрос.УстановитьПараметр("ИзмеренияБазового",Измер); Запрос.УстановитьПараметр("Регистратор",Регистратор); Запрос.УстановитьПараметр("ВидРасчета",ТребуемыйВидРасчета); Запрос.УстановитьПараметр("СписокСотрудников",СписокСотрудников); ВыборкаРезультата=Запрос.Выполнить().Выбрать(); Для Каждого ЗаписьРегистра ИЗ НаборЗаписейРегистра Цикл СтруктураНомер=Новый Структура("НомерСтроки"); СтруктураНомер.НомерСтроки=ЗаписьРегистра.НомерСтроки; Выборкарезультата.Сбросить(); Если ВыборкаРезультата.НайтиСледующий(СтруктураНомер)Тогда ЗаписьРегистра.Результат=ВыборкаРезультата.База*(10/100); Сообщение=Новый СообщениеПользователю; Сообщение.Текст="Выполнен расчет"+ЗаписьРегистра.Регистратор+"-"+ЗаписьРегистра.ВидРасчета+"-"+ЗаписьРегистра.Сотрудник; Сообщение.Сообщить(); КонецЕсли; КонецЦикла; КонецЕсли; КонецПроцедуры Искал такую же ошибку в интернете, предлагали Использовать естьNull в запросе.., а как именно это сделать, подскажите, кто может! |
|||
1
Irbis
10.04.13
✎
00:55
|
ЕстьNULL(ВыражениеИзЗапроса, ЗаменаДляNULL)
|
|||
2
david91
10.04.13
✎
01:26
|
а какое значение из полей надо приравнять к null?
в этом же фрагменте? Запрос=Новый Запрос; Запрос.Текст= "Выбрать |НачисленияДанныеГрафика.ЗначениеПериодДействия КАК Норма, |НачисленияДанныеГрафика.ЗначениеФактическийПериодДействия КАК Факт, |НачисленияДанныеГрафика.НомерСтроки КАК НомерСтроки |ИЗ |РегистрРасчета.Начисления.ДанныеГрафика(Регистратор=&Регистратор И |ВидРасчета=&ВидРасчета И Сотрудник В(&СписокСотрудников)) |КАК НачисленияДанныеГрафика"; |
|||
3
zladenuw
10.04.13
✎
01:38
|
ЗаписьРегистра.Результат=(ЗаписьРегистра.ИсходныеДанные/ВыборкаРезультата.Норма)*ВыборкаРезультата.Факт;
тут |
|||
4
unkairosed
10.04.13
✎
01:42
|
Запрос=Новый Запрос;
Запрос.Текст= "Выбрать |isnull(НачисленияДанныеГрафика.ЗначениеПериодДействия,0) КАК Норма, |isnull(НачисленияДанныеГрафика.ЗначениеФактическийПериодДействия,0) КАК Факт, |НачисленияДанныеГрафика.НомерСтроки КАК НомерСтроки |ИЗ |РегистрРасчета.Начисления.ДанныеГрафика(Регистратор=&Регистратор И |ВидРасчета=&ВидРасчета И Сотрудник В(&СписокСотрудников)) |КАК НачисленияДанныеГрафика"; На случай, если не заполнен график. |
|||
5
unkairosed
10.04.13
✎
01:43
|
ЗаписьРегистра.Результат=(ЗаписьРегистра.ИсходныеДанные/ВыборкаРезультата.Норма)*ВыборкаРезультата.Факт;
Тут дополнительно предусмотреть вариант деления на 0. |
|||
6
david91
10.04.13
✎
02:01
|
Запрос=Новый Запрос;
Запрос.Текст= "Выбрать |isnull(НачисленияДанныеГрафика.ЗначениеПериодДействия,0) КАК Норма, |isnull(НачисленияДанныеГрафика.ЗначениеФактическийПериодДействия,0) КАК Факт, |НачисленияДанныеГрафика.НомерСтроки КАК НомерСтроки |ИЗ |РегистрРасчета.Начисления.ДанныеГрафика(Регистратор=&Регистратор И |ВидРасчета=&ВидРасчета И Сотрудник В(&СписокСотрудников)) |КАК НачисленияДанныеГрафика"; На случай, если не заполнен график. Добавил isnull, ошибка пропала, но при проведении результат не считает |
|||
7
unkairosed
10.04.13
✎
02:29
|
Убедиться, что заполнены графики (в данном случае за период действия).
|
|||
8
david91
10.04.13
✎
03:02
|
К сожалению не в этом проблема, они заполнены.
|
|||
9
unkairosed
10.04.13
✎
03:16
|
Результат=0, если:
1) ЗаписьРегистра.ИсходныеДанные = 0 (проверить алгоритм формирования рабочего набора записей) 2) ВыборкаРезультата.Норма = 0 (не заполнен график за период действия) 3) ВыборкаРезультата.Факт = 0 (не заполнен график за период действия или вид расчета вытеснен) Чтобы проверить, что именно равно 0, в отладчике заняться интимом вот с этим: ЗаписьРегистра.Результат=(ЗаписьРегистра.ИсходныеДанные/ВыборкаРезультата.Норма)*ВыборкаРезультата.Факт; |
|||
10
david91
10.04.13
✎
17:06
|
Все получилось! Спасибо большое!
Дело в графиках было, поставил в регистре расчета периодичность год, вместо месяца. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |