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

Тема в разделе "Общие вопросы "1С:Предприятие 8"", создана пользователем Sunbear, 12 фев 2010.

  1. TopicStarter Overlay
    Sunbear
    Offline

    Sunbear Опытный в 1С

    Регистрация:
    11 фев 2010
    Сообщения:
    112
    Симпатии:
    0
    Баллы:
    26
    Процедура СписокПриСменеТекущегоРодителя(Элемент)
    Если ЭлементыФормы.Список.Текущаястрока <> Неопределено
    И ЭлементыФормы.Список.Текущаястрока.ЭтоГруппа Тогда

    спр= справочники.Номенклатура;
    зн=спр.НайтиПоКоду(ЭлементыФормы.Список.Текущаястрока.Код);
    выборка = спр.Выбрать(зн);
    Пока выборка.Следующий() = 1 Цикл
    объект = выборка.получитьобъект();
    объект.ценарозн = ГСЧ.СлучайноеЧисло(0, 10000);
    объект.записать();
    КонецЦикла;
    endif; // вася
    КонецПроцедуры

    в 1с7 можно было так получить
    // СпрЦены = СоздатьОбъект("Справочник.Цены");
    // СпрЦены.ИспользоватьВладельца(Ном.ТекущийЭлемент);
    // СпрЦены.НайтиПоРеквизиту("ТипцЦен",ОптовыйТипЦен,0);
    // Цена = СпрЦены.Цена.Получить(ТекущаяДата());
    как это сделать в 1с 8.1 "Управление торговлей", редакция 10.3
    мне вместо СлучайноеЧисло нужно вставить цену элемента номенклатуры.
  2. mialord
    Offline

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

    Регистрация:
    31 июл 2009
    Сообщения:
    5.398
    Симпатии:
    40
    Баллы:
    54
    Здраствуйте!
    Код:
    Функция ПолучитьРезультатЗапроса_Sunbear()
    
    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
    |    Номенклатура.Ссылка КАК Номенклатура,
    |    ЦеныСрезПоследних.ХарактеристикаНоменклатуры,
    |    ЦеныСрезПоследних.Цена,
    |    ЦеныСрезПоследних.Валюта,
    |    ЦеныСрезПоследних.ЕдиницаИзмерения
    |ИЗ
    |    Справочник.Номенклатура КАК Номенклатура
    |        ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
    |            ЦеныНоменклатурыСрезПоследних.Номенклатура КАК НоменклатураСсылка,
    |            ЦеныНоменклатурыСрезПоследних.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры,
    |            ЦеныНоменклатурыСрезПоследних.Валюта КАК Валюта,
    |            ЦеныНоменклатурыСрезПоследних.Цена КАК Цена,
    |            ЦеныНоменклатурыСрезПоследних.ЕдиницаИзмерения КАК ЕдиницаИзмерения
    |        ИЗ
    |            РегистрСведений.ЦеныНоменклатуры.СрезПоследних КАК ЦеныНоменклатурыСрезПоследних
    |        ГДЕ
    |            ЦеныНоменклатурыСрезПоследних.ТипЦен В(&ТипЦен)) КАК ЦеныСрезПоследних
    |        ПО Номенклатура.Ссылка = ЦеныСрезПоследних.НоменклатураСсылка
    |ГДЕ
    |    Номенклатура.ЭтоГруппа = ЛОЖЬ
    |    И Номенклатура.Родитель В ИЕРАРХИИ(&Родитель)";
    //Параметры запроса
    Запрос.УстановитьПараметр("Родитель",);// Справочник ссылка: Номенклатура
    Запрос.УстановитьПараметр("ТипЦен",);// Справочник ссылка: Типы цен номенклатуры
    Результат = Запрос.Выполнить();
    
    Возврат Результат;
    
    КонецФункции //ПолучитьРезультатЗапроса_Sunbear
    
    
    
    
    Запрос вернёт всю номенклатуру в указанной иерархии родителя и последнюю установленную цену по указанному типу.
    Обращаю внимание на то, что параметр "ТипЦен" может быть как ссылкой на один тип цены, так и списком ссылок на несколько типов цен.
    ЗЫ: Если нужно не в иерархии родителя тогда замените строку
    Код:
        |    И Номенклатура.Родитель В ИЕРАРХИИ(&Родитель)";
    </span>
    
    </FONT></FONT></pre>
    на
    Код:
        |    И Номенклатура.Родитель В (&Родитель)";
    </span>
    
    </FONT></FONT></pre>
    И в строке
    Код:
    &Родитель
    
    
    нет знака ";" этор ошибка на форуме.
    Удачи!
  3. TopicStarter Overlay
    Sunbear
    Offline

    Sunbear Опытный в 1С

    Регистрация:
    11 фев 2010
    Сообщения:
    112
    Симпатии:
    0
    Баллы:
    26
    Спасибо, я попробую :) Но вот все-таки нет ли способа попроще - без запроса и покороче?
  4. Stack_G
    Offline

    Stack_G Опытный в 1С

    Регистрация:
    10 дек 2007
    Сообщения:
    786
    Симпатии:
    2
    Баллы:
    26
    Sunbear слушай, расскажи ка ты задачу, как-то некрасиво это все получается. Зачем двоить значение и в регистре и в карточке товара?
  5. TopicStarter Overlay
    Sunbear
    Offline

    Sunbear Опытный в 1С

    Регистрация:
    11 фев 2010
    Сообщения:
    112
    Симпатии:
    0
    Баллы:
    26
    Хочу чтобы в номенклатуре выводились цены и остатки, просто так удобнее чем в отчеты лазить :)
  6. mialord
    Offline

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

    Регистрация:
    31 июл 2009
    Сообщения:
    5.398
    Симпатии:
    40
    Баллы:
    54
    Откройте справочник номенклатура, нажмите "Действие\Показывать остатки"
  7. TopicStarter Overlay
    Sunbear
    Offline

    Sunbear Опытный в 1С

    Регистрация:
    11 фев 2010
    Сообщения:
    112
    Симпатии:
    0
    Баллы:
    26
    Там показывается только для одного выбранного товара, а мне надо чтобы сразу для всех показывалось.
  8. mialord
    Offline

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

    Регистрация:
    31 июл 2009
    Сообщения:
    5.398
    Симпатии:
    40
    Баллы:
    54
    Возьмите запрос и оптимизируйте его под себя, запрос работает достаточно быстро.
  9. Stack_G
    Offline

    Stack_G Опытный в 1С

    Регистрация:
    10 дек 2007
    Сообщения:
    786
    Симпатии:
    2
    Баллы:
    26
    Ну раз ты хочешь в карточку товара - записывай туда значение в момент установки новой цены (т.е. при проведении д-та "Установка цен номенклатуры").
    А так у тебя получается, что каждый раз при открытии группы товаров будет вся группа перезаписываться.
  10. TopicStarter Overlay
    Sunbear
    Offline

    Sunbear Опытный в 1С

    Регистрация:
    11 фев 2010
    Сообщения:
    112
    Симпатии:
    0
    Баллы:
    26
    Вот что в итоге получилось. Работает :)

    Процедура СписокПриСменеТекущегоРодителя(Элемент)
    Если ЭлементыФормы.Список.Текущаястрока <> Неопределено
    И ЭлементыФормы.Список.Текущаястрока.ЭтоГруппа Тогда

    спр= справочники.Номенклатура;
    зн=спр.НайтиПоКоду(ЭлементыФормы.Список.Текущаястрока.Код);
    выборка = спр.Выбрать(зн);
    тцр= справочники.ТипыЦенНоменклатуры.НайтиПоНаименованию("Розничные");
    запр1 = Новый Запрос;
    Пока выборка.Следующий() = 1 Цикл
    объект = выборка.получитьобъект();
    Если Не объект.ЭтоГруппа Тогда
    запр1.Текст="ВЫБРАТЬ
    | ЦеныНоменклатурыСрезПоследних.Цена
    |ИЗ
    | РегистрСведений.ЦеныНоменклатуры.СрезПоследних(
    | ,
    | Номенклатура.Код = &НомКод
    | И ТипЦен = &ТипЦены) КАК ЦеныНоменклатурыСрезПоследних";
    запр1.УстановитьПараметр("НомКод",объект.Ссылка.Код);
    запр1.УстановитьПараметр("ТипЦены", тцр.Ссылка);
    Результат = запр1.Выполнить().Выбрать();
    Пока Результат.Следующий() = 1 Цикл
    объект.ценарозн=Результат.Цена;
    КонецЦикла;
    объект.записать();
    конецесли;
    КонецЦикла;
    endif; // вася
    КонецПроцедуры
  11. mialord
    Offline

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

    Регистрация:
    31 июл 2009
    Сообщения:
    5.398
    Симпатии:
    40
    Баллы:
    54
    мда, чтот мне всё это не нравится, работает это не значит что правильно работает. Описывайте полностью задачу, выкладывайте скрин формы, надо смотреть на вс это. Такое ощущение что код написан на гибриде 7.Х/8.Х

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