Преобразование к типу число...

  • Автор темы -
  • Дата начала

Гость
#1
Задание: В документе «Расходная» при заполнении табличной части «Товары» номенклатурными позициями не просто заполнять цену из справочника «Номенклатура», а снижать ее в соответствии со скидками, актуальными на дату документа для данного Контрагента.

Решаю так:

Перем К;
Перем Д;
.....
Процедура КонтрагентПриИзменении(Элемент)
//Установить скидку
К = РаботаСоСправочниками.С(Дата,Элемент.Значение);
КонецПроцедуры

Процедура ТоварыНоменклатураПриИзменении(Элемент)
СтрокаТабличнойЧасти = ЭлементыФормы.Товары.ТекущиеДанные;
Д = Справочники.Номенклатура.НайтиПоНаименованию(СтрокаТабличнойЧасти.Номенклатура).
ЦенаПродажи;
СтрокаТабличнойЧасти.Цена = Д - (Д * К / 100);
КонецПроцедуры

И в общем модуле:
Функция С (АктуальнаяДата, ЭлементКонтрагента) Экспорт
//Создать вспомогательный объект Отбор
Отбор = Новый Структура ("КатегорияПокупателей" , ЭлементКонтрагента);
//Получить актульные значения ресурсов регистра
ЗначенияРесурсов = РегистрыСведений.Скидки.ПолучитьПоследнее(АктуальнаяДата,Отбор);
Возврат ЗначенияРесурсов.Процент;
КонецФункции

Пишется ошибка:
{Документ.Расходная.Форма.ФормаДокумента(27)}: Преобразование значения к типу Число не может быть выполнено
СтрокаТабличнойЧасти.Цена = Д - (Д * К / 100);

Причем если создаю новый документ то он не ругается но и считает... а если в существующем меняю, то ругается...

подскажите как решить проблему...что я не замечаю...
 

Darlock

Well-Known Member
04.01.2008
560
1
Москва
#2
1) Ничего странного, вы получаете формулу:

СтрокаТабличнойЧасти.Цена = "Ссылка" - ("Ссылка" * К / 100);

Поэтому и получаете ошибку. "Д" - Тип ссылка, сделайте из него число (видимо в ссылке реквизит есть) и все будет хорошо.

И во-вторых, у вас в табличной части "Номенклатура" - строка? Если нет, то нет необходимости искать по наименованию, обращайтесь напрямую через ".".
 

unknown181538

НеГуру
28.12.2008
1 417
0
30
Москва
#3
Каким образом вы элемент справочника "Д" хотите умножить на число?
("Утюг Philips") - ("Утюг Philips")*30/100 = Осколки утюга?
И не называйте так переменные.

Darlock опередил))
 

Гость
#4
На имена не ругайтесь... я их обязательно переименую более понятно...это временные, чтоб проверить работает или нет...

как сделать из Д Число... ?
 

unknown181538

НеГуру
28.12.2008
1 417
0
30
Москва
#5
Какое число "Д" вы хотите получить из утюга?
На имена не ругайтесь... я их обязательно переименую более понятно...это временные, чтоб проверить работает или нет...
Зачем вы пишите непонятно, если хотите, чтобы вам ответили?
 

Гость
#6
Процедура КонтрагентПриИзменении(Элемент)
//Установить скидку
Скидка = РаботаСоСправочниками.РасчетСкидки(Дата,Элемент.Значение);

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

Процедура ТоварыНоменклатураПриИзменении(Элемент)
СтрокаТабличнойЧасти = ЭлементыФормы.Товары.ТекущиеДанные;
ЦенаПродажи = Справочники.Номенклатура.НайтиПоНаименованию(СтрокаТабличнойЧасти.Номенклатура).
ЦенаПродажи;
СтрокаТабличнойЧасти.Цена = ЦенаПродажи - (ЦенаПродажи * Скидка / 100);

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

Функция РасчетСкидки (АктуальнаяДата, ЭлементКонтрагента) Экспорт
//Создать вспомогательный объект Отбор
Отбор = Новый Структура ("КатегорияПокупателей" , ЭлементКонтрагента);
//Получить актульные значения ресурсов регистра
ЗначенияРесурсов = РегистрыСведений.Скидки.ПолучитьПоследнее(АктуальнаяДата,Отбор);

Возврат ЗначенияРесурсов.Процент;
КонецФункции


так понятнее становится?
 

unknown181538

НеГуру
28.12.2008
1 417
0
30
Москва
#7
Для получения цены продажи, скорее всего, можно использовать функцию общего модуля. Не знаю, какая у вас конфигурация. Цена, скорее всего, хранится в регистре сведений.
Ой... виноват. Точку не заметил.
Так понятней)

Добавлено:
Справочники.Номенклатура.НайтиПоНаименованию(СтрокаТабличнойЧасти.Номенклатура)
Бред. СторкаТабличнойЧасти.Номенклатура - это не наименование.

ЦенаПродажи = СтрокаТабличнойЧасти.Номенклатура.Цена продажи.
Попробуйте так.
И пользуйтесь уже отладчиком.