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

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем skatal, 20 май 2010.

  1. TopicStarter Overlay
    skatal
    Offline

    skatal

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

    Решаю так:

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

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

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

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

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

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

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.581
    Симпатии:
    717
    Баллы:
    204
    1. ПолучитьПоследнее ничего не возвращает, следовательно это "ничего" не может быть преобразовано в число.
    2. Если в ТЧ будет несколько одинаковых номенклатур?
  3. TopicStarter Overlay
    skatal
    Offline

    skatal

    Регистрация:
    27 апр 2010
    Сообщения:
    39
    Симпатии:
    0
    Баллы:
    1
    2. Что будет если будет несколько? О.о это как то в данной ситуации имеет значение?...
    1. хм.. а почему там ничего... реализовала нечто подобное, там работает, и вроде как аналогично сделано... Как это ничего превратить во что то?
  4. nomad_irk
    Offline

    nomad_irk Гуру в 1С

    Регистрация:
    20 окт 2008
    Сообщения:
    7.581
    Симпатии:
    717
    Баллы:
    204
    2. В данной ситуации - не имеет, но поиск только по номенклатуре в общем случае может привести к чудесам :)
    1. Сделать проверку на "ничего". Я так понимаю, возвращаемая структура содержит НЕОПРЕДЕЛЕНО.
  5. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.410
    Симпатии:
    316
    Баллы:
    104
    skatal такой вопрос: у вас конфигурация типовая?
    вот смотрите, у вас: СтрокаТабличнойЧасти.Цена = Д - (Д * К / 100);, а сумма? У вас сама что-ли пересчитывается?
  6. TopicStarter Overlay
    skatal
    Offline

    skatal

    Регистрация:
    27 апр 2010
    Сообщения:
    39
    Симпатии:
    0
    Баллы:
    1
    не типовая. До суммы пока не дошла. Хочу чтоб считала цену для начала без ошибок)
  7. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.410
    Симпатии:
    316
    Баллы:
    104
    Я бы вообще убрал все ваши глобальные переменные, "Процедура КонтрагентПриИзменении(Элемент)", "Функция С()", и делал бы все в "Процедура ТоварыНоменклатураПриИзменении(Элемент)" (запросом конечно).
  8. TopicStarter Overlay
    skatal
    Offline

    skatal

    Регистрация:
    27 апр 2010
    Сообщения:
    39
    Симпатии:
    0
    Баллы:
    1
    хм... можешь показательно объяснить как через запрос решить? пример какой нибудь...
  9. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.410
    Симпатии:
    316
    Баллы:
    104
    ЦенаПродажи - реквизит справочника номенклатура?
  10. TopicStarter Overlay
    skatal
    Offline

    skatal

    Регистрация:
    27 апр 2010
    Сообщения:
    39
    Симпатии:
    0
    Баллы:
    1
    Да
  11. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.410
    Симпатии:
    316
    Баллы:
    104
    Код:
    Процедура ТоварыНоменклатураПриИзменении(Элемент)
    СтрокаТабличнойЧасти = ЭлементыФормы.Товары.ТекущиеДанные;
    
    ТекстЗапроса = 
    "ВЫБРАТЬ
    |	СправочникиНоменклатура.ЦенаПродажи - (СправочникиНоменклатура.ЦенаПродажи * ЕстьNULL(СкидкиСрезПоследних.Процент, 0) / 100) КАК Цена
    |ИЗ
    |	РегистрыСведений.Скидки.СрезПоследних(&Дата, КатегорияПокупателей = &КатегорияПокупателей) КАК СкидкиСрезПоследних,
    |	Справочники.Номенклатура КАК СправочникиНоменклатура
    |ГДЕ
    |	СправочникиНоменклатура.Ссылка = &Номенклатура";
    
    Запрос = Новый Запрос(ТекстЗапроса);
    Запрос.УстановитьПараметр("Дата", Дата);
    Запрос.УстановитьПараметр("КатегорияПокупателей", КакУВасНазываетсяЭлементНаФормеСКонтрагентом);
    Запрос.УстановитьПараметр("Номенклатура", СтрокаТабличнойЧасти.Номенклатура);
    
    СтрокаТабличнойЧасти.Цена = Запрос.Выполнить().Выгрузить()[0].Цена;
    КонецПроцедуры;
    
    
    Ну вот как-то так наверно.. (хотя мне не нравится)
  12. shurikvz
    Offline

    shurikvz Модераторы Команда форума Модератор

    Регистрация:
    1 окт 2009
    Сообщения:
    8.410
    Симпатии:
    316
    Баллы:
    104
    Брр.. чет я бред какой-то написал. Ща..

    Код:
    Процедура ТоварыНоменклатураПриИзменении(Элемент)
    СтрокаТабличнойЧасти = ЭлементыФормы.Товары.ТекущиеДанные;
    
    ТекстЗапроса = 
    "ВЫБРАТЬ
    |	&ЦенаПродажи - (&ЦенаПродажи * ЕстьNULL(СкидкиСрезПоследних.Процент, 0) / 100) КАК Цена
    |ИЗ
    |	РегистрыСведений.Скидки.СрезПоследних(&Дата, КатегорияПокупателей = &КатегорияПокупателей) КАК СкидкиСрезПоследних";
    
    Запрос = Новый Запрос(ТекстЗапроса);
    Запрос.УстановитьПараметр("Дата", Дата);
    Запрос.УстановитьПараметр("КатегорияПокупателей", КакУВасНазываетсяЭлементНаФормеСКонтрагентом);
    Запрос.УстановитьПараметр("ЦенаПродажи", СтрокаТабличнойЧасти.Номенклатура.ЦенаПродажи);
    
    СтрокаТабличнойЧасти.Цена = Запрос.Выполнить().Выгрузить()[0].Цена;
    КонецПроцедуры;
    
    
    Так получше..
  13. TopicStarter Overlay
    skatal
    Offline

    skatal

    Регистрация:
    27 апр 2010
    Сообщения:
    39
    Симпатии:
    0
    Баллы:
    1
    Спасибо попробую.

Поделиться этой страницей