Имя: Пароль:
1C
1С v8
v8: Преобразование значения к типу Число не может быть выполнено
,
0 amadeus2010
 
05.07.14
14:46
добрый день при выполнении запроса по формированию отчета выходит эта ошибка преобразование значения к типу Число не может быть выполнено в
ОбластьСекция_7.Параметры.ИтогСтрахСумма = ИтогСтрахСумма+СтрахСумма;
хотя поле ИтогСтрахСумма имеет значение Число, как и остальные поля
Добавил в запрос ЕстьNULL, все равно выходит ошибка
1 Wobland
 
05.07.14
14:48
что планируешь делать?
2 amadeus2010
 
05.07.14
14:54
вот хочу спросить совет что можно сделать
3 ДенисЧ
 
05.07.14
14:55
не туда добавил. Ваш КЭП
4 Wobland
 
05.07.14
14:56
(2) нажать шифт+ф9 и удивлённо рассмотреть значения в переменных
5 amadeus2010
 
05.07.14
14:58
а куда надо было добавить? у меня так сейчас
////////////////////////////////////////////////////
"ВЫБРАТЬ
|    УчетПерестраховочныхСлиповОбороты.НомерПолиса,
|    УчетПерестраховочныхСлиповОбороты.ПолисНомер.ВидСтрахования,
|    УчетПерестраховочныхСлиповОбороты.Тип.НомерРезерва КАК НомерРезерва,
|    УчетПерестраховочныхСлиповОбороты.Тип.НомерРезерва1 КАК НомерРезерва1,
|    УчетПерестраховочныхСлиповОбороты.ДатаНачала,
|    УчетПерестраховочныхСлиповОбороты.ДатаОкончания,
|    УчетПерестраховочныхСлиповОбороты.Страхователь,
|    УчетПерестраховочныхСлиповОбороты.НомерСлипа,
|    УчетПерестраховочныхСлиповОбороты.Перестраховщик,
|    УчетПерестраховочныхСлиповОбороты.ДатаНачалаПС,
|    УчетПерестраховочныхСлиповОбороты.ДатаОкончанияПС,
|    ЕСТЬNULL(УчетПерестраховочныхСлиповОбороты.СтраховаяСуммаПрямОборот,0) КАК СтраховаяСуммаПрям,
|    ЕСТЬNULL(УчетПерестраховочныхСлиповОбороты.СтраховаяСуммаПринОборот,0) КАК СтраховаяСуммаПрин,
|    ЕСТЬNULL(УчетПерестраховочныхСлиповОбороты.СтраховаяПремияПрямОборот,0) КАК СтраховаяПремияПрям,
|    ЕСТЬNULL(УчетПерестраховочныхСлиповОбороты.СтраховаяПремияПринОборот,0) КАК СтраховаяПремияПрин,
|    ЕСТЬNULL(УчетПерестраховочныхСлиповОбороты.КомиссияПрямОборот,0) КАК КомиссияПрям,
|    ЕСТЬNULL(УчетПерестраховочныхСлиповОбороты.КомиссияПринОборот,0) КАК КомиссияПрин,
|    ЕСТЬNULL(УчетПерестраховочныхСлиповОбороты.ПерестрахСуммаОборот,0) КАК ПерестрахСумма,
|    ЕСТЬNULL(УчетПерестраховочныхСлиповОбороты.ПерестрахПремияОборот,0) КАК ПерестрахПремия,
|    ЕСТЬNULL(УчетПерестраховочныхСлиповОбороты.КомиссияПолученнаяОборот,0) КАК КомиссияПолученная,
|  УчетПерестраховочныхСлиповОбороты.КомиссияПрямОборот+УчетПерестраховочныхСлиповОбороты.КомиссияПринОборот+УчетПерестраховочныхСлиповОбороты.КомиссияПолученнаяОборот КАК Начислено,
|  УчетПерестраховочныхСлиповОбороты.СтраховаяСуммаПрямОборот-УчетПерестраховочныхСлиповОбороты.СтраховаяПремияПрямОборот КАК ОбязательныеВыплаты
|ИЗ
|    РегистрНакопления.УчетПерестраховочныхСлипов.Обороты КАК УчетПерестраховочныхСлиповОбороты";
////////////////////////////////////////////////////
ИтогСтрахСумма = 0;
ИтогНачисленоПолиса =0;
ИтогОплаченоПолиса = 0;
ИтогНачисленоКом= 0;
ИтогОбязательныеВыплаты =0;
ИтогВыплатаПриПрекращении =0;
ИтогПереданнаяСтрахСумма =0;
ИтогНачисленоСлип1 =0;
ИтогНачисленоСлип2 =0;
ИтогНачисленоСлип3 =0;
ИтогНачисленоСлип4 =0;
ИтогОплаченоСлип = 0;
ИтогНачисленоКом1=0;
ИтогНачисленоКом2 = 0;
ИтогНачисленоКом3 =0;
ИтогНачисленоКом4 =0;
ИтогВыплатаПриПрекращенииСлипа =0;

СтрахСумма = Шапка.СтраховаяСуммаПрям;
НачисленоПолиса =Шапка.СтраховаяПремияПрям;
НачисленоКом =Шапка.КомиссияПолученная;
ОбязательныеВыплаты =Шапка.ОбязательныеВыплаты;
ОплаченоПолиса = Шапка.ПерестрахПремия;
ВыплатаПриПрекращении =Шапка.КомиссияПолученная;
ПереданнаяСтрахСумма=Шапка.СтраховаяСуммаПрин;
НачисленоСлип1 = Шапка.СтраховаяСуммаПрям;
НачисленоСлип2 = Шапка.СтраховаяСуммаПрям;
НачисленоСлип3 =Шапка.СтраховаяСуммаПрин;
НачисленоСлип4 = Шапка.СтраховаяПремияПрин;
НачисленоКом1= Шапка.КомиссияПрям;
НачисленоКом2 = Шапка.КомиссияПрин;
НачисленоКом3=  Шапка.КомиссияПолученная;
НачисленоКом4 =Шапка.Начислено;
ОплаченоСлип = Выборка.СуммаОплаты;
ВыплатаПриПрекращенииСлипа= Шапка.КомиссияПолученная;

ОбластьСекция_7 = Макет.ПолучитьОбласть("Секция_7");
ОбластьСекция_7.Параметры.ИтогСтрахСумма = ИтогСтрахСумма+СтрахСумма;
/////////////////////////////////////////////////////////
6 amadeus2010
 
05.07.14
14:58
что я не так сделал?
7 Wobland
 
05.07.14
14:59
(6) применил естьнулл и не рассказал, что за шапка
8 GROOVY
 
05.07.14
15:00
Не инициализировал переменную ИтогСтрахСумма.
Излишне использовал функцию ISNULL.
Много времени провел на форуме.
9 Wobland
 
05.07.14
15:00
(8) первое присвоение ж
10 GROOVY
 
05.07.14
15:03
(9) А не факт что там все буквы русские.
11 amadeus2010
 
05.07.14
15:05
(8) ИтогСтрахСумма указана как переменная в отчете
вот шапка Шапка =Запрос.Выполнить().Выбрать();
12 Wobland
 
05.07.14
15:06
(11) назови антоним слова "предыдущий". 9 букв, первая С. время пошло
13 amadeus2010
 
05.07.14
15:07
(9)не совсем понял
14 amadeus2010
 
05.07.14
15:12
(12) следующий
15 amadeus2010
 
05.07.14
15:15
имеется ввиду Шапка=Запрос.Выполнить.Следующий
Пока Цикл
так пробежать по значениям?
16 hhhh
 
05.07.14
17:50
ИтогСтрахСумма присваиваешь ноль? Покажи где?
17 Wobland
 
05.07.14
17:52
(16) он по выборке не пошёл
18 GreatOne
 
05.07.14
17:58
СтрахСумма = Шапка.СтраховаяСуммаПрям; Что это? Это число разве?
19 amadeus2010
 
07.07.14
11:13
Шапка.СтраховаяСуммаПрям из запроса берется и содержит Число как значение
20 Wobland
 
07.07.14
11:14
(19) поздравлять?
21 amadeus2010
 
07.07.14
11:51
пока не с чем, как сделаю то обязательно доложу о результатах
22 amadeus2010
 
07.07.14
12:25
сделал так
/////////////////////////////////////////////////
Шапка =Запрос.Выполнить();
Пока Шапка.Выбрать().Следующий() Цикл
    
ОбластьСекция_4 = Макет.ПолучитьОбласть("Секция_4");
ОбластьСекция_4.Параметры.НомерПолиса = Шапка.НомерПолиса;
ОбластьСекция_4.Параметры.ДатаЗаявления = Шапка.ДатаНачала;
ОбластьСекция_4.Параметры.НачДата = Шапка.ДатаНачала;
ОбластьСекция_4.Параметры.КонДата = Шапка.ДатаОкончания;
ОбластьСекция_4.Параметры.Перестраховщик = Шапка.Перестраховщик;
ОбластьСекция_4.Параметры.ПереданнаяСтрахСумма = Шапка.СтраховаяСуммаПрин;
ОбластьСекция_4.Параметры.НачисленоСлип1 = Шапка.ПерестрахСумма;
ОбластьСекция_4.Параметры.НачисленоСлип2 = Шапка.СтраховаяСуммаПрям;
ОбластьСекция_4.Параметры.НачисленоСлип3 = Шапка.СтраховаяСуммаПрин;
ОбластьСекция_4.Параметры.НачисленоСлип4 = Шапка.СтраховаяПремияПрин;
ОбластьСекция_4.Параметры.ОплаченоСлип =  Выборка.СуммаОплаты;
ОбластьСекция_4.Параметры.НачисленоКом1 = Шапка.КомиссияПрям;
ОбластьСекция_4.Параметры.НачисленоКом2 = Шапка.КомиссияПрин;
ОбластьСекция_4.Параметры.НачисленоКом3 = Шапка.КомиссияПолученная;
ОбластьСекция_4.Параметры.НачисленоКом4 = Шапка.Начислено;
ОбластьСекция_4.Параметры.ДатаПрекращения = Шапка.ДатаОкончанияПС;
ОбластьСекция_4.Параметры.ВыплатаПриПрекращенииСлипа = Шапка.КомиссияПолученная;
ОбластьСекция_4.Параметры.НомерСлипа = Шапка.НомерСлипа;
ОбластьСекция_4.Параметры.НачДатаСлипа = Шапка.ДатаНачала;
ОбластьСекция_4.Параметры.КонДатаСлипа = Шапка.ДатаОкончания;
ТабДок.Вывести(ОбластьСекция_4);

ОбластьСекция_2 = Макет.ПолучитьОбласть("Секция_2");
ОбластьСекция_2 .Параметры.Номер = Шапка.НомерПолиса;
ОбластьСекция_2.Параметры.НомерПолиса = Шапка.НомерПолиса;
ОбластьСекция_2.Параметры.ДатаЗаявления = Шапка.ДатаНачала;
ОбластьСекция_2.Параметры.НачДата = Шапка.ДатаНачала;
ОбластьСекция_2.Параметры.КонДата = Шапка.ДатаОкончания;
ОбластьСекция_2.Параметры.СтрахСумма = Шапка.СтраховаяСуммаПрям;
ОбластьСекция_2.Параметры.НачисленоПолиса = Шапка.СтраховаяПремияПрям;
ОбластьСекция_2.Параметры.ОплаченоПолиса=  Шапка.ПерестрахПремия;
ОбластьСекция_2.Параметры.НачисленоКом = Шапка.КомиссияПолученная;
ОбластьСекция_2.Параметры.ОбязательныеВыплаты = Шапка.ОбязательныеВыплаты;
ОбластьСекция_2.Параметры.ДатаПрекращения = Шапка.ДатаОкончания;
ОбластьСекция_2.Параметры.ВыплатаПриПрекращении = Шапка.КомиссияПолученная;
ОбластьСекция_2.Параметры.Перестраховщик = Шапка.Перестраховщик;
ОбластьСекция_2.Параметры.ПереданнаяСтрахСумма = Шапка.СтраховаяСуммаПрин;
ОбластьСекция_2.Параметры.НачисленоСлип1 = Шапка.ПерестрахСумма;
ОбластьСекция_2.Параметры.НачисленоСлип2 = Шапка.СтраховаяСуммаПрям;
ОбластьСекция_2.Параметры.НачисленоСлип3 = Шапка.СтраховаяСуммаПрин;
ОбластьСекция_2.Параметры.НачисленоСлип4 = Шапка.СтраховаяПремияПрин;
ОбластьСекция_2.Параметры.ОплаченоСлип =  Выборка.СуммаОплаты;
ОбластьСекция_2.Параметры.НачисленоКом1 = Шапка.КомиссияПрям;
ОбластьСекция_2.Параметры.НачисленоКом2 = Шапка.КомиссияПрин;
ОбластьСекция_2.Параметры.НачисленоКом3 = Шапка.КомиссияПолученная;
ОбластьСекция_2.Параметры.НачисленоКом4 = Шапка.Начислено;
ОбластьСекция_2.Параметры.ДатаПрекращения = Шапка.ДатаОкончанияПС;
ОбластьСекция_2.Параметры.ВыплатаПриПрекращенииСлипа = Шапка.КомиссияПолученная;
ОбластьСекция_2.Параметры.НомерСлипа = Шапка.НомерСлипа;
ОбластьСекция_2.Параметры.НачДатаСлипа = Шапка.ДатаНачала;
ОбластьСекция_2.Параметры.КонДатаСлипа = Шапка.ДатаОкончания;
ТабДок.Вывести(ОбластьСекция_2);
КонецЦикла;
////////////////////////////////////////////////
выдает ошибку что ОбластьСекция_4.Параметры.НомерПолиса = Шапка.НомерПолиса; не обнаружено поле НомерПолиса хотя такое поле в макете отчета имеется
23 amadeus2010
 
07.07.14
12:28
теперь он дает ошибку и на Шапка.ДатаНачала, получается что так он будет по каждому полю макета давать ошибку? Как правильно применить конструкцию использования Пока Шапка.Выбрать().Следующий()?
24 Timon1405
 
07.07.14
12:38
Воспользоваться КонструкторомЗапросаСОбработкойРезультатаИВыводомВТабличныйДокумент уже было?
25 floody
 
07.07.14
12:41
(23) выбрать - 1 раз, следующий - много раз
26 amadeus2010
 
07.07.14
12:42
(22) касательно конструкции-не правильно сформировал конструкцию запроса надо Результат =Запрос.Выполнить();
Шапка =Результат.Выбрать();
Пока Шапка.Следующий() Цикл
27 Крошка Ру
 
07.07.14
13:31
(22) (23) а НомерПолиса и ДатаНачала - это точно параметры? Может текст?
28 GreatOne
 
07.07.14
14:10
29 amadeus2010
 
07.07.14
14:24
(28) в целом так и есть, но иногда ошибаются все так как люди.
30 amadeus2010
 
07.07.14
14:26
(27) это параметры, запрос и выборка по нему уже работает, остались мелкие детали
31 hhhh
 
07.07.14
14:38
(30) но что действительно реально не можешь поставить точку останова на этой строчке и посмотреть какая из переменных не число?
32 vmv
 
07.07.14
14:39
уже 5 лет амадеус радует вопросами, главное - растет

*доволен*
33 amadeus2010
 
07.07.14
14:40
(30)так и делаю сейчас проверяю где есть ошибка
34 amadeus2010
 
07.07.14
14:41
(32)спасибо за сочувствие и надежду на рост, так и живем где спросим где прочитаем, работу в итоге сделаем:)
35 amadeus2010
 
07.07.14
16:02
еще дополнительно вопрос. У меня отчет состоит из 10 макетов, как можно вывести эти макеты с данными. Я создал для формирования макетов свою процедуру и потом в процедуре Сформировать вызываю их например так
Процедура Сформировать(Кнопка)
Проц1(); Проц2() и т.д.
Только при этом данные формируются по 1-му макету, а остальные макеты выходят как чистые листы
36 IVT_2009
 
07.07.14
16:14
почему то больше нравится использовать

ВЫБОР
  КОГДА значение IS NULL ТОГДА 0
  ИНАЧЕ значение
КОНЕЦ
37 IVT_2009
 
07.07.14
16:19
(35) наверное для каждого макета надо рассчитать данные и вывести их методом .показать().
Вероятно у вас замыкание на табДок идет , точней его повторное использование.
38 IVT_2009
 
07.07.14
16:29
скорей всего табДок у вас присваивается разным таблицам. Проверяйте где это происходит. А для начала для каждого отчета сделайте табДок1,табДок2 ....
39 amadeus2010
 
07.07.14
16:37
(38) я так и сделал для каждого нового макета свой Табдок1, Табдок2 и т.д скорее всего у меня в каждом макете используется  структура
Пока Шапка.Следующий() Цикл, начиная с шапки отчета где указаны имена табличных полей, вот они у меня для макета1 повторяются по циклу
40 Wobland
 
07.07.14
16:48
> скорее всего у меня...
нене, гадать - это наше дело, а не твоё
41 NeAdmin
 
07.07.14
18:26
(35) Тут код надо смотреть
42 NeAdmin
 
07.07.14
18:31
(23) Какую? Такую же как и с номером полиса? Если да, то что было не так, как исправил...?
43 amadeus2010
 
08.07.14
08:46
(42) проблему исправил, теперь вопрос остался как вывести по одной кнопке сформировать несколько макетов отчета
44 Wobland
 
08.07.14
08:46
(43) это программировать надо
45 amadeus2010
 
08.07.14
09:06
у меня сейчас так идет ТабДок =Новый ТабДокумент; тело процедуры, ТабДок.Показать();
ТабДок2 =Новый ТабДокумент; тело процедуры, ТабДок2.Показать(); и все это находиться в одной процедуре, которая потом вызывается при нажатии Сформировать
46 Wobland
 
08.07.14
09:07
гляжу, несколько макетов уже формируется. поздравляю!
47 amadeus2010
 
08.07.14
09:09
пока что убрал цикличность вывода данных в макете
48 NeAdmin
 
08.07.14
10:43
(47) И все равно не заполняется? Скорей всего теле процедуры, где табдок2 не верно обращаешься к переменным каким то... гадание тут не поможет)) надо видеть
49 amadeus2010
 
08.07.14
14:36
я не гадаю я проверяю код где ошибка есть исправляю
50 NeAdmin
 
08.07.14
15:39
Гадать, в частности, мне приходится. Кода то не вижу, а аналогичную задачу решать приходилось
2 + 2 = 3.9999999999999999999999999999999...