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

Формирование отчета (упорядочить по шаблону)

Автор vovka14141, 10 июл 2015, 11:24

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

vovka14141

Помогите пожалуйста разобраться с ошибкой
{Форма.ФормаОтчета.Форма(139)}: Преобразование значения к типу Число не может быть выполнено
Строка.Параметры.НетДоМинОст       = ?(Число(МинОст.Наименование)-Выборка.свободныйОстаток<0,0,Число(МинОст.Наименование)-Выборка.СвободныйОстаток);

mixqn

vovka14141, не может платформа преобразовать в число переданный параметр, в вашем случае - "МинОст.Наименование"

vovka14141

Цитата: mixqn от 10 июл 2015, 11:39
vovka14141, не может платформа преобразовать в число переданный параметр, в вашем случае - "МинОст.Наименование"
Я понимаю, только не знаю как исправить это... Эту обработку создавал не я и не могу найти исправление этой ошибки:(
Процедура КнопкаСформироватьНажатие(Кнопка)
Ликв    = ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоНаименованию("Ликвидность");
Мин     = ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоНаименованию("Минимальный остаток");
МинОст0 = Справочники.ЗначенияСвойствОбъектов.НайтиПоНаименованию("0");   
Пост    = ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоНаименованию("Поставщик");

   
ТабДок= новый ТабличныйДокумент;     
Макет=получитьмакет("Макет");         
Шапка=Макет.ПолучитьОбласть("Шапка");
Шапка.Параметры.ДатаНач = ДатаНач;
Шапка.Параметры.ДатаКон = ТекущаяДата();
Шапка.Параметры.ВыбЗнач = ВыбЗнач;
ТабДок.Вывести(Шапка);    

Запрос = Новый Запрос("   
|Выбрать
|Об.объект Как Номенклатура,
|Об.Объект.БазоваяЕдиницаИзмерения Как Единица,
|Об.Значение Как ЗначениеСвойства,
|Об.Объект.Артикул Как Артикул,
|Цены.Цена   Как ЗакупочнаяЦена,
|ЦеныПрод.ПроцентСкидкиНаценки КАК ПроцентНаценки,
|ТоварыНаСкладах.КоличествоНачальныйОстаток Как НачальныйОстаток,
|ТоварыНаСкладах.КоличествоПриход Как Приход,
|ТоварыНаСкладах.КоличествоРасход Как Расход,
|ТоварыНаСкладах.КоличествоКонечныйОстаток Как КонечныйОстаток,
|ЕСТЬNULL(РегЗаказы.КоличествоОстаток,0)              КАК КонечныйРезерв,
|ЕСТЬNULL(ТоварыНаСкладах.КоличествоКонечныйОстаток,0) - ЕСТЬNULL(РегЗаказы.КоличествоОстаток,0) КАК СвободныйОстаток,
|ЕСТЬNULL(ЗаказыПост.КоличествоОстаток,0) КАК ЗаказаноПоставщику
|Из РегистрСведений.ЗначенияСвойствОбъектов Как Об
|      ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&ТекДата, ТипЦен = &ТипЦены) КАК Цены
|      ПО Об.Объект = Цены.Номенклатура
|      Внутреннее СОЕДИНЕНИЕ РегистрСведений.ЦеныНоменклатуры.СрезПоследних(&ТекДата, ТипЦен = &ТипЦены1) КАК ЦеныПрод
|      ПО Об.Объект = ЦеныПрод.Номенклатура
|      ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(&ДатаНач,&ДатаКон , , ,Склад = &Склад) КАК ТоварыНаСкладах
|      ПО Об.Объект = ТоварыНаСкладах.Номенклатура
|      ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыВРезервеНаСкладах.Остатки(&ДатаКон, Склад = &Склад) КАК РегЗаказы
|       ПО Об.Объект = РегЗаказы.Номенклатура
  |      ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ЗаказыПокупателей.Остатки(&ДатаКон,) КАК ЗаказыПост
   |     ПО Об.Объект = ЗаказыПост.Номенклатура   
|ГДЕ Об.Значение   = &ВыбЗнач
|Упорядочить ПО Об.Объект.Наименование"); 
Запрос.УстановитьПараметр("ВыбЗнач",ВыбЗнач);
Запрос.УстановитьПараметр("ТипЦены",Справочники.ТипыЦенНоменклатуры.НайтиПоКоду("000000001"));
Запрос.УстановитьПараметр("ТипЦены1",Справочники.ТипыЦенНоменклатуры.НайтиПоКоду("000000009"));
Запрос.УстановитьПараметр("ТекДата",ТекущаяДата());
Запрос.УстановитьПараметр("ДатаНач",ДатаНач);
Запрос.УстановитьПараметр("ДатаКон",КонецДня(ТекущаяДата()));
Запрос.УстановитьПараметр("Склад", Справочники.Склады.НайтиПоКоду("000000001"));
Выгрузка  = Запрос.Выполнить().Выгрузить();   

Строка = Макет.ПолучитьОбласть("Строка");

Если ДляКириллова Тогда
   Список = ВариантДляКириллова();
   Для Каждого Элем ИЗ Список Цикл
      Артикул = Элем.Значение;
      Выборка = Выгрузка.Найти(Артикул);
      Если Выборка <> Неопределено Тогда
         Ном                                = Выборка.Номенклатура;
         МинОст                             = Свво(Ном,Мин);
         
         Попытка
            Если Миност = Неопределено ИЛИ Миност.Наименование = "" Тогда            
               МинОст = МинОст0;
            КонецЕсли;    
         Исключение
            МинОст = МинОст0;
         КонецПопытки;
         
         Ликвид                             = Свво(Ном,Ликв);
         Поставщик                          = Свво(Ном,Пост);
         
         Строка.Параметры.Ном               = Ном;
         Строка.Параметры.Код               = Ном.Код;
         Строка.Параметры.ПечЕд             = Выборка.Единица;
         Строка.Параметры.ПечАртикул        = Выборка.Артикул;
         Строка.Параметры.Пост              = Поставщик;
         Строка.Параметры.ПечЦена           = Выборка.ЗакупочнаяЦена;
         Строка.Параметры.ПечПроцент        = Выборка.ПроцентНаценки;
         Строка.Параметры.ПечМинОст         = МинОст;
         Строка.Параметры.Ликв              = Ликвид;   
         Строка.Параметры.ПечНачОст         = Выборка.НачальныйОстаток;
         Строка.Параметры.ПечПриход         = Выборка.Приход;
         Строка.Параметры.ПечРасход         = Выборка.Расход;
         Строка.Параметры.ПечКонОст         = Выборка.КонечныйОстаток;
         Строка.Параметры.ПечКонОстР        = Выборка.КонечныйРезерв;
         Строка.Параметры.ОстатокБезРезерва = Выборка.СвободныйОстаток;
         Строка.Параметры.НетДоМинОст       = ?(Число(МинОст.Наименование)-Выборка.свободныйОстаток<0,0,Число(МинОст.Наименование)-Выборка.СвободныйОстаток);
            Строка.Параметры.КолЗаказ          = Выборка.ЗаказаноПоставщику - Выборка.КонечныйРезерв;        
            ТабДок.Вывести(Строка);
            Выгрузка.Удалить(Выборка);
         КонецЕсли;
      КонецЦикла;
      
   КонецЕсли;   
         
   Для Каждого Выборка ИЗ Выгрузка Цикл
      
      Ном                                = Выборка.Номенклатура;
      МинОст                             = Свво(Ном,Мин);
      
      Если ТипЗнч(МинОст)<>Тип("Число") Тогда
         Попытка
            Если  Миност = Неопределено Тогда
               МинОст = 0;
            КонецЕсли;    
         Исключение
            МинОст = 0;
         КонецПопытки;   
      КонецЕсли;
      
      //Попытка
      //   Если Миност = Неопределено ИЛИ Миност.Наименование = "" Тогда            
      //      МинОст = МинОст0;
      //   КонецЕсли;    
      //Исключение
      //   МинОст = МинОст0;
      //КонецПопытки;
      
      Ликвид                             = Свво(Ном,Ликв);
      Поставщик                          = Свво(Ном,Пост);
      
      Строка.Параметры.Ном               = Ном;
      Строка.Параметры.Код               = Ном.Код;
      Строка.Параметры.ПечЕд             = Выборка.Единица;
      Строка.Параметры.ПечАртикул        = Выборка.Артикул;
      Строка.Параметры.Пост              = Поставщик;
      Строка.Параметры.ПечЦена           = Выборка.ЗакупочнаяЦена;
      Строка.Параметры.ПечПроцент        = Выборка.ПроцентНаценки;
      Строка.Параметры.ПечМинОст         = МинОст;
      Строка.Параметры.Ликв              = Ликвид;   
      Строка.Параметры.ПечНачОст         = Выборка.НачальныйОстаток;
      Строка.Параметры.ПечПриход         = Выборка.Приход;
      Строка.Параметры.ПечРасход         = Выборка.Расход;
      Строка.Параметры.ПечКонОст         = Выборка.КонечныйОстаток;
      Строка.Параметры.ПечКонОстР        = Выборка.КонечныйРезерв;
      Строка.Параметры.ОстатокБезРезерва = Выборка.СвободныйОстаток;
      Строка.Параметры.НетДоМинОст       = ?(МинОст-Выборка.свободныйОстаток<0,0,МинОст-Выборка.СвободныйОстаток);
      Строка.Параметры.КолЗаказ          = Выборка.ЗаказаноПоставщику - Выборка.КонечныйРезерв;        
      ТабДок.Вывести(Строка);
   КонецЦикла;
   ТабДок.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_РеализацияТоваровУслуг_ТОРГ12";
   ТабДок.Показать();
   
   СохранитьЗначение("Свойство", Свойство);
   СохранитьЗначение("ВыбЗнач",  ВыбЗнач); 
КонецПроцедуры

mixqn

Лучший вариант исправления - сделать все заново по-человечески. Не часто увидишь настолько кривой код. Вместо того, чтобы добавить реквизит или на худой конец свойство (если например конфигурация на поддержке и изменения запрещены) типа число тут делается предположение, что все наименования состоят из цифр и делается преобразование строки в число.

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

Теги:

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

Рейтинг@Mail.ru

Поиск