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

Значение не является значением объектного типа(Имя)

Автор vaslik, 22 мая 2015, 08:47

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

vaslik

"Управление торговлей для Казахстана", редакция 2.2...
На кпопке процедурка

Процедура ЗаполнениеЦенНажатие(Кнопка)
Перем НДСВСтроке, ДокументОбъект,МетаданныеДокумента, ИмяТабличнойЧасти, СтрокаТабличнойЧасти, СтруктураПоиска, ВыборкаИзРезультатаЗапроса, СтруктураЗначений, СпособЗаполненияЦен, ХарактеристикаНоменклатуры;

УправлениеЦенообразованием.ЗаполнитьЦенуВСтрокеТабличнойЧасти( ДокументОбъект, СтрокаТабличнойЧасти, СтруктураПоиска, ВыборкаИзРезультатаЗапроса,
СтруктураЗначений, СпособЗаполненияЦен, ХарактеристикаНоменклатуры = Неопределено) ;





// получим имя табличной части и имя документа
ИмяТабличнойЧасти   = ЭлементыФормы.Товары.ТекущиеДанные;                           
МетаданныеДокумента = Метаданные.НайтиПоТипу(ТипЗнч(СтрокаТабличнойЧасти)).Родитель();

Если Метаданные.НайтиПоТипу(ТипЗнч(СтрокаТабличнойЧасти)).Реквизиты.Найти("Цена") = Неопределено Тогда    //***********************
Возврат;
КонецЕсли;

//Найдем товар из текущей строки документа в выборке из результата запроса.
Если Не ЗначениеЗаполнено(СтруктураПоиска.Номенклатура) Тогда
Возврат; // Искать нечего.
КонецЕсли;

ВыборкаИзРезультатаЗапроса.Сбросить();
Если ХарактеристикаНоменклатуры = Неопределено
Или ХарактеристикаНоменклатуры = Справочники.ХарактеристикиНоменклатуры.ПустаяСсылка() Тогда
СтруктураПоиска.Вставить("ХарактеристикаНоменклатуры", Справочники.ХарактеристикиНоменклатуры.ПустаяСсылка());
НашлиВВыборке = ВыборкаИзРезультатаЗапроса.НайтиСледующий(СтруктураПоиска);
Иначе
СтруктураПоиска.Вставить("ХарактеристикаНоменклатуры", ХарактеристикаНоменклатуры);
НашлиВВыборке = ВыборкаИзРезультатаЗапроса.НайтиСледующий(СтруктураПоиска);
Если Не НашлиВВыборке Тогда
ВыборкаИзРезультатаЗапроса.Сбросить();
СтруктураПоиска.Вставить("ХарактеристикаНоменклатуры", Справочники.ХарактеристикиНоменклатуры.ПустаяСсылка());
НашлиВВыборке = ВыборкаИзРезультатаЗапроса.НайтиСледующий(СтруктураПоиска);
КонецЕсли;
КонецЕсли;

Если НашлиВВыборке Тогда // Нашли запись

// Если для данного товара есть цена данного типа
// Единицу устанавливаем в единицу цены, если она не задана, то в основную единицу товара
Если Не ЗначениеЗаполнено(ВыборкаИзРезультатаЗапроса.Цена) Тогда
СтрокаТабличнойЧасти.Цена = 0;
Иначе // присваиваем значение цены и единицы цены
СтруктураНовойВалюты = ОбщегоНазначения.ПолучитьКурсВалюты(СтруктураЗначений.НовыйТипЦен.ВалютаЦены, ДокументОбъект.Дата);
ТекущаяВалюта        = СтруктураЗначений.НовыйТипЦен.ВалютаЦены;
ТекущийКурс          = СтруктураНовойВалюты.Курс;
ТекущаяКратность     = СтруктураНовойВалюты.Кратность;

ЭтоЦеныНоменклатуры = (СпособЗаполненияЦен = Перечисления.СпособыЗаполненияЦен.ПоЦенамНоменклатуры);

// Переоределим тип цен, когда цены рассчитываются по типам цен номенклатуры
Если ЭтоЦеныНоменклатуры Тогда
СтруктураЗначений.НовыйТипЦен = ВыборкаИзРезультатаЗапроса.ТипЦен;
КонецЕсли;

Цена = ВыборкаИзРезультатаЗапроса.Цена;

Если ЭтоЦеныНоменклатуры И СтруктураЗначений.НовыйТипЦен.Рассчитывается Тогда
Если ВыборкаИзРезультатаЗапроса.СпособРасчетаЦены = Перечисления.СпособыРасчетаЦены.ПоПроцентнойНаценкеНаБазовыйТип Тогда
Цена = Цена * (1 + ВыборкаИзРезультатаЗапроса.ПроцентСкидкиНаценки / 100);
Цена = ОбщегоНазначения.ПересчитатьИзВалютыВВалюту(Цена, ВыборкаИзРезультатаЗапроса.ВалютаЦены,
   ТекущаяВалюта, ВыборкаИзРезультатаЗапроса.КурсВалютыЦены, ТекущийКурс,
   ВыборкаИзРезультатаЗапроса.КратностьВалютыЦены, ТекущаяКратность);
ИначеЕсли ВыборкаИзРезультатаЗапроса.СпособРасчетаЦены = Перечисления.СпособыРасчетаЦены.ПоВхождениюБазовойЦеныВДиапазон Тогда
Цена = УправлениеЦенообразованием.ПолучитьЦенуПоЦеновымДиапазонам(СтруктураЗначений.НовыйТипЦен, ДокументОбъект.Дата, Цена, ТекущаяВалюта, ВыборкаИзРезультатаЗапроса.ВалютаЦены);

СтруктураНовойВалюты = ОбщегоНазначения.ПолучитьКурсВалюты(ТекущаяВалюта, ДокументОбъект.Дата);
ТекущийКурс          = СтруктураНовойВалюты.Курс;
ТекущаяКратность     = СтруктураНовойВалюты.Кратность;
КонецЕсли;
Иначе
ТекущаяВалюта = ВыборкаИзРезультатаЗапроса.ВалютаЦены;
СтруктураТекущейВалюты = ОбщегоНазначения.ПолучитьКурсВалюты(ТекущаяВалюта, ДокументОбъект.Дата);
ТекущийКурс            = СтруктураТекущейВалюты.Курс;
ТекущаяКратность       = СтруктураТекущейВалюты.Кратность;
КонецЕсли;

Цена = Цена * (1 + ВыборкаИзРезультатаЗапроса.ПроцентНаценкиПоУсловиямПродаж / 100);

// Пересчитываем цену в единицу измерения количества
Если ОбщегоНазначения.ЕстьРеквизитТабЧастиДокумента("ЕдиницаИзмерения", МетаданныеДокумента, ИмяТабличнойЧасти) Тогда
Если СтрокаТабличнойЧасти.ЕдиницаИзмерения <> ВыборкаИзРезультатаЗапроса.ЕдиницаИзмеренияЦены Тогда
КоэффициентКоличества = СтрокаТабличнойЧасти.ЕдиницаИзмерения.Коэффициент;
КоэффициентЦены       = ВыборкаИзРезультатаЗапроса.ЕдиницаИзмеренияЦены.Коэффициент;

Если КоэффициентЦены <> 0 Тогда
Цена = Цена * КоэффициентКоличества / КоэффициентЦены;
КонецЕсли;
КонецЕсли;
КонецЕсли;

Если ЭтоЦеныНоменклатуры Тогда
Цена = УправлениеЦенообразованием.ОкруглитьЦену(Цена, СтруктураЗначений.НовыйТипЦен.ПорядокОкругления,
                     СтруктураЗначений.НовыйТипЦен.ОкруглятьВБольшуюСторону);
КонецЕсли;

// Пересчитываем цену в валюту документа
Если СтруктураЗначений.НовыйВалютаДокумента <> ТекущаяВалюта Тогда
Если Не ЗначениеЗаполнено(СтруктураЗначений.НовыйВалютаДокумента) Тогда

ВалютаДокумента = глЗначениеПеременной("ВалютаУправленческогоУчета");
СтруктураВалюты = ОбщегоНазначения.ПолучитьКурсВалюты(ВалютаДокумента, ДокументОбъект.Дата);
КурсДокумента      = СтруктураВалюты.Курс;
КратностьДокумента = СтруктураВалюты.Кратность;

// В документе нет валюты, возьмем валюту регламентированного учета
Цена = ОбщегоНазначения.ПересчитатьИзВалютыВВалюту(Цена,
ТекущаяВалюта,
ВалютаДокумента,
ТекущийКурс,
КурсДокумента,
ТекущаяКратность,
КратностьДокумента);

Иначе

Цена = ОбщегоНазначения.ПересчитатьИзВалютыВВалюту(Цена,
ТекущаяВалюта,
СтруктураЗначений.НовыйВалютаДокумента,
ТекущийКурс,
СтруктураЗначений.НовыйКурсДокумента,
ТекущаяКратность,
СтруктураЗначений.НовыйКратностьДокумента);

КонецЕсли;
КонецЕсли;

// Пересчитываем цену по параметрам налогообложения.
// Ставку определяем исходя из переданных параметров
СтруктураЗначений.Свойство("ЕстьСтавкаНДСВТабличнойЧасти", НДСВСтроке);

СтрокаТабличнойЧасти.Цена = ОбработкаТабличныхЧастей.ПересчитатьЦенуПриИзмененииФлаговНалогов(Цена,
СпособЗаполненияЦен,
СтруктураЗначений.НовыйТипЦен.ЦенаВключаетНДС,
СтруктураЗначений.НовыйУчитыватьНДС, СтруктураЗначений.НовыйСуммаВключаетНДС,
?(СтруктураЗначений.НовыйУчитыватьНДС, ?(НДСВСтроке = Истина, УчетНДСИАкциза.ПолучитьСтавкуНДС(СтрокаТабличнойЧасти.СтавкаНДС), УчетНДСИАкциза.ПолучитьСтавкуНДС(СтрокаТабличнойЧасти.Номенклатура.СтавкаНДС)),0));

КонецЕсли;

Иначе // информации по цене этого товара нет в запросе

// Установим цену в ноль.
СтрокаТабличнойЧасти.Цена = 0;

КонецЕсли;

КонецПроцедуры


При выполнении дает ошибку

{ОбщийМодуль.ОбщегоНазначения.Модуль(3891)}: Значение не является значением объектного типа (Имя)
   Возврат Метаданные.НайтиПоТипу(ТипЗнч(СтрокаТабличнойЧасти)).Имя;



Помогите, пожалуйста, советом

Дмитрий@

Функция НайтиПоТипу может возвращать разные значения, нужно поставить точку останова и посмотреть что она возвращает.

vaslik

Цитата: Дмитрий@ от 22 мая 2015, 09:14
Функция НайтиПоТипу может возвращать разные значения, нужно поставить точку останова и посмотреть что она возвращает.

У меня закавыка вот в этом месте
//получим имя табличной части и имя документа
ИмяТабличнойЧасти   = ЭлементыФормы.Товары.ТекущиеДанные;                           
МетаданныеДокумента = Метаданные.НайтиПоТипу(ТипЗнч(СтрокаТабличнойЧасти)).Родитель();

Если Метаданные.НайтиПоТипу(ТипЗнч(СтрокаТабличнойЧасти)).Реквизиты.Найти("Цена") = Неопределено Тогда   
Возврат;
КонецЕсли;





и на нее ругается
{ОбщийМодуль.ОбщегоНазначения.Модуль(3891)}: Значение не является значением объектного типа (Имя)
   Возврат Метаданные.НайтиПоТипу(ТипЗнч(СтрокаТабличнойЧасти)).Имя;



Вот кусок который ругается:
Функция ПолучитьИмяТабличнойЧастиПоСсылкеНаСтроку(СтрокаТабличнойЧасти) Экспорт

Возврат Метаданные.НайтиПоТипу(ТипЗнч(СтрокаТабличнойЧасти)).Имя;

КонецФункции


I NEED HELP!!!

Дмитрий@

Функция НайтиПоТипу может возвращать разные значения, нужно поставить точку останова и посмотреть что она возвращает.

cska-fanat-kz

CAUSE СтрокаТабличнойЧасти ISN'T FUCKING СТРОКА FUCKING ТАБЛИЧНОЙ FUCKING ЧАСТИ!!!!!
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

vaslik

Цитата: cska-fanat-kz от 22 мая 2015, 14:48
CAUSE СтрокаТабличнойЧасти ISN'T FUCKING СТРОКА FUCKING ТАБЛИЧНОЙ FUCKING ЧАСТИ!!!!!


а что тогда?

Rasty

вы определяете Тип значения строки табличной части, целой строки, не отдельной колонки, а целой строки, тип значений строки табличной части это СтрокаТабличнойЧасти
Помогли - Скажи спасибо! Решил сам - поделись решением!
:)

vaslik

Да объясните же толком что надо делать...

Дмитрий@

Править код.
Вы ищете в метаданных тип, которого там не может быть, поэтому вам возвращается значение "Неопределено", а у "неопределено" реквизитов быть не может. Поэтому вам пишет ошибку.

vaslik

Цитата: Дмитрий@ от 24 мая 2015, 13:01
Править код.
Вы ищете в метаданных тип, которого там не может быть, поэтому вам возвращается значение "Неопределено", а у "неопределено" реквизитов быть не может. Поэтому вам пишет ошибку.
и что мне следует сделать, чтобы при при выполнени все сработало? объясните пожалуйста

Теги:

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

Рейтинг@Mail.ru

Поиск