8.х Получить цену на номенклатуру

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем Эмиль0690, 4 ноя 2015.

  1. TopicStarter Overlay
    Эмиль0690
    Offline

    Эмиль0690 Опытный в 1С

    Регистрация:
    3 фев 2014
    Сообщения:
    290
    Симпатии:
    2
    Баллы:
    29
    Добрый день!
    Хочу получить цены на номенклатуры но не получается, будьте добры подскажите пожалуйста как правильно нужно написать код.
    Спасибо!
    в Общие Модуле
    Код:
    Функция ПолучитьЦенуНаНоменклатуру(Номенклатура,Склад,Дата) Экспорт
        Запрос = Новый Запрос;
        Запрос.Текст =
            "ВЫБРАТЬ
            |    ЦеныНаНоменклатурыСрезПоследних.Номенклатура,
            |    ЦеныНаНоменклатурыСрезПоследних.Склад,
            |    ЦеныНаНоменклатурыСрезПоследних.ЦенаЗаЕдиницуNC
            |ИЗ
            |    РегистрСведений.ЦеныНаНоменклатуры.СрезПоследних КАК ЦеныНаНоменклатурыСрезПоследних";
    
        Запрос.УстановитьПараметр("Номенклатура", Номенклатура);
        Запрос.УстановитьПараметр("Дата", Дата);
        Запрос.УстановитьПараметр("Склад", Склад);
    
        Результат = Запрос.Выполнить();
    
        ВыборкаДетальныеЗаписи = Результат.Выбрать();
       // Результат=Новый Структура("ЦенаЗаЕдиницуNC", 0);
       
        Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
           
            //Результат.ЦенаЗаЕдиницуNC = ВыборкаДетальныеЗаписи.ЦенаЗаЕдиницуNC;
           
            Возврат(ВыборкаДетальныеЗаписи.ЦенаЗаЕдиницуNC);
           
            КонецЦикла;
    
    КонецФункции   
    
    в Модуле формы Документа
    Код:
    &НаКлиенте
    Процедура НоменклатураПриИзменении(Элемент)
        НоменклатураПриИзмененииСервер();
    КонецПроцедуры
    
    
    &НаСервере
    Процедура НоменклатураПриИзмененииСервер()
       
        Результат=Взаиморасчеты.ПолучитьЦенуНаНоменклатуру(Объект.Номенклатура,Объект.Дата);
        Объект.ЦенаПродажаNC=Результат.ЦенаПродажаNC;
        Объект.СуммаПродажаNC = Объект.Количетво*Объект.ЦенаПродажаNC;
       
    КонецПроцедуры
    
    --- Объединение сообщений, 4 ноя 2015 ---
    ошибка при выбора номенклатуры
    upload_2015-11-4_14-39-28.png
  2. Ktyf
    Offline

    Ktyf Опытный в 1С

    Регистрация:
    16 янв 2013
    Сообщения:
    457
    Симпатии:
    12
    Баллы:
    29
    Взаиморасчеты.ПолучитьЦенуНаНоменклатуру(Объект.Номенклатура,Объект.Дата); - сколько параметров передаете?
  3. TopicStarter Overlay
    Эмиль0690
    Offline

    Эмиль0690 Опытный в 1С

    Регистрация:
    3 фев 2014
    Сообщения:
    290
    Симпатии:
    2
    Баллы:
    29
    три
    Запрос.УстановитьПараметр("Номенклатура", Номенклатура);
    Запрос.УстановитьПараметр("Дата", Дата);
    Запрос.УстановитьПараметр("Склад", Склад);
  4. nbIpKuH_BaH9I
    Offline

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

    Регистрация:
    16 сен 2009
    Сообщения:
    6.991
    Симпатии:
    399
    Баллы:
    104
    Ну для начала нажмите на Подробно и перейдете на ту строчку кода, что вызвала ошибку. Дальше уже нужно смотреть Ваш код.
  5. pavl_vs
    Offline

    pavl_vs Профессионал в 1С

    Регистрация:
    18 июн 2011
    Сообщения:
    343
    Симпатии:
    27
    Баллы:
    54
    Запрос вообще неработоспособен.
    Первое - не видно, как в запросе учтены параметры, нет секции "ГДЕ".
    Второе - такой запрос на "срез последних " не будет работать; в секции "ИЗ" нужно разместить параметр "Дата".
  6. kisol
    Offline

    kisol Профессионал в 1С

    Регистрация:
    25 июл 2012
    Сообщения:
    395
    Симпатии:
    41
    Баллы:
    54
    Попробуй так:

    Код:
    &НаСервере
    Процедура НоменклатураПриИзмененииСервер()
    
    Результат=Взаиморасчеты.ПолучитьЦенуНаНоменклатуру(Объект.Номенклатура,Объект.Дата, Объект.Склад);
    Объект.ЦенаПродажаNC=Результат.ЦенаПродажаNC;
    Объект.СуммаПродажаNC = Объект.Количетво*Объект.ЦенаПродажаNC;
    
    КонецПроцедуры
    
  7. nbIpKuH_BaH9I
    Offline

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

    Регистрация:
    16 сен 2009
    Сообщения:
    6.991
    Симпатии:
    399
    Баллы:
    104
    Мать моя женщина, че то я пропустил код в первом сообщении. :D
    alexburn нравится это.
  8. TopicStarter Overlay
    Эмиль0690
    Offline

    Эмиль0690 Опытный в 1С

    Регистрация:
    3 фев 2014
    Сообщения:
    290
    Симпатии:
    2
    Баллы:
    29
    исправил
    Код:
    &НаСервере
    Процедура НоменклатураПриИзмененииСервер()
       
        Результат=Взаиморасчеты.ПолучитьЦенуНаНоменклатуру(Объект.Номенклатура,Объект.Дата,Объект.Склад);
        Объект.ЦенаПродажаNC=Результат.ЦенаПродажаNC;
        Объект.СуммаПродажаNC = Объект.Количетво*Объект.ЦенаПродажаNC;
       
    КонецПроцедуры
    
    ошибка

    {Документ.РозничнаяПродажа.Форма.ФормаДокумента.Форма(12)}: Значение не является значением объектного типа (ЦенаПродажаNC)
    Объект.ЦенаПродажаNC=Результат.ЦенаПродажаNC;
  9. Ktyf
    Offline

    Ktyf Опытный в 1С

    Регистрация:
    16 янв 2013
    Сообщения:
    457
    Симпатии:
    12
    Баллы:
    29
    Еще раз и медленно: когда вы описываете процедуру вы указываете три параметра ПолучитьЦенуНаНоменклатуру(Номенклатура,Склад,Дата), а когда вызываете ее то указываете или 2 параметра или в другом порядке Взаиморасчеты.ПолучитьЦенуНаНоменклатуру(Объект.Номенклатура,Объект.Дата,Объект.Склад); Вот он и ругается, что вместо склада вы дату подсовываете.
  10. TopicStarter Overlay
    Эмиль0690
    Offline

    Эмиль0690 Опытный в 1С

    Регистрация:
    3 фев 2014
    Сообщения:
    290
    Симпатии:
    2
    Баллы:
    29
    не сейчас он ругается на
    {Документ.РозничнаяПродажа.Форма.ФормаДокумента.Форма(16)}: Значение не является значением объектного типа (ЦенаПродажаNC)
    Объект.ЦенаПродажаNC=Результат.ЦенаПродажаNC;
    т.е если в общем модуле параметры например склад, номенклатура, дата то на модуле документа по той же порядки должен быть, на пример склад, номенклатура, дата а не дата, склад номен...
    --- Объединение сообщений, 4 ноя 2015 ---
    кто нить может мне объяснить где было моя ошибка
    Код:
    Объект.ЦенаПродажаNC=Взаиморасчеты.ПолучитьЦенуНаНоменклатуру(Объект.Номенклатура, Объект.Склад,Объект.Дата);
        Объект.СуммаПродажиNC = Объект.Количество*Объект.ЦенаПродажаNC;
    код работает но только при изменение номенклатуры а при изменение склада цена не изменяется и не смог понять где было ошибок
    --- Объединение сообщений, 4 ноя 2015 ---
    ужас у работает как то неправильно на все номенклатуры одна цена
    есть кто нибудь?
    Последнее редактирование: 4 ноя 2015
  11. Ktyf
    Offline

    Ktyf Опытный в 1С

    Регистрация:
    16 янв 2013
    Сообщения:
    457
    Симпатии:
    12
    Баллы:
    29
    где было ошибок ?:)
    Сейчас код работает?
    ну в общем-то цены от места хранения не зависят.
  12. TopicStarter Overlay
    Эмиль0690
    Offline

    Эмиль0690 Опытный в 1С

    Регистрация:
    3 фев 2014
    Сообщения:
    290
    Симпатии:
    2
    Баллы:
    29
    а почему на все номенклатуры одна цена?
  13. Ktyf
    Offline

    Ktyf Опытный в 1С

    Регистрация:
    16 янв 2013
    Сообщения:
    457
    Симпатии:
    12
    Баллы:
    29
    Понятия не имею, посмотрите вживую в РС.ЦеныНоменклатуры
  14. pavl_vs
    Offline

    pavl_vs Профессионал в 1С

    Регистрация:
    18 июн 2011
    Сообщения:
    343
    Симпатии:
    27
    Баллы:
    54
    Если Вы для получения цен используете запрос, показанный в первом топике, то и получите то, что получили.
  15. kisol
    Offline

    kisol Профессионал в 1С

    Регистрация:
    25 июл 2012
    Сообщения:
    395
    Симпатии:
    41
    Баллы:
    54
    Вот пример моего подобного гавнокода.

    Код:
    &НаКлиенте
    Процедура ТоварыНоменклатураПриИзменении(Элемент)
       //Передаю текущию строчку в ТЧ
       ТекущиеДанные = Элементы.Товары.ТекущиеДанные;
       СуммаИзРегистра = ТоварыНоменклатураПриИзмененииНаСервере(Объект.Дата,ТекущиеДанные.Номенклатура );
       //Подставляем полученную цену
    ТекущиеДанные.Цена = СуммаИзРегистра.Цена;
    КонецПроцедуры
    
    &НаСервереБезКонтекста
    Функция ТоварыНоменклатураПриИзмененииНаСервере(Дата, Номенклатура)
      //По тупому найдем закупочную и подставим, это не нужно тебе
        номен = Справочники.ТипыЦенНоменклатуры;
        элементСсылка = номен.НайтиПоНаименованию("Закупочная");
       
    //тут нужную структуру по твоему регистру сделай
       СтруктураОтбора = Новый Структура;
       СтруктураОтбора.Вставить("Номенклатура",Номенклатура);
       СтруктураОтбора.Вставить("ТипЦены",элементСсылка);
    
      //Получаем цену номенклатуры
       Результат = РегистрыСведений.ЦеныНоменклатуры.ПолучитьПоследнее(Дата,СтруктураОтбора);
    
       Возврат Результат;
    
    КонецФункции
    
  16. Ktyf
    Offline

    Ktyf Опытный в 1С

    Регистрация:
    16 янв 2013
    Сообщения:
    457
    Симпатии:
    12
    Баллы:
    29
    точно, запрос не внимательно прочитала.
  17. alexburn
    Offline

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

    Регистрация:
    5 янв 2009
    Сообщения:
    14.782
    Симпатии:
    509
    Баллы:
    204
    Смотрю знакомый ник ТСа, думаю дай заглянуть, настроение поднять :D
    Последнее редактирование: 5 ноя 2015
    nbIpKuH_BaH9I нравится это.
  18. Ktyf
    Offline

    Ktyf Опытный в 1С

    Регистрация:
    16 янв 2013
    Сообщения:
    457
    Симпатии:
    12
    Баллы:
    29
    потому что, вы в самом запросе не указываете параметры. Нет конструкции "ГДЕ"

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