• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

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

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

Guest

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

Решаю так:

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

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

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

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

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

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

Darlock

1) Ничего странного, вы получаете формулу:

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

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

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

unknown181538

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

Darlock опередил))
 
G

Guest

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

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

unknown181538

Какое число "Д" вы хотите получить из утюга?
На имена не ругайтесь... я их обязательно переименую более понятно...это временные, чтоб проверить работает или нет...
Зачем вы пишите непонятно, если хотите, чтобы вам ответили?
 
G

Guest

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

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

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

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

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

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


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

unknown181538

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

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

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

Обучение наступательной кибербезопасности в игровой форме. Начать игру!