Версия для печати темы (https://pro1c.org.ua/index.php?s=7d5d31e868ca9e6cc67b8638fe0563c1&showtopic=67128)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование в 1С Предприятие 8.3 _ як користуватися функцією Ценообразование.ПолучитьЦенуКонтрагента() ?

Автор: berest.andriy@gmail.com 21.11.22, 10:23

привіт. підкажіть б-ласка як користуватися функцією ценообразование.ПолучитьЦенуКонтрагента?
перепробував все що можна а мені видає 0.
може у когось є приклад використання даної функції та опис як вона працює. мені потрібно отримати ціну контрагента з врахуванням знижок встановлених в документа "Установка скидок номенклатури"
дякую

Код

qqq=ценообразование.ПолучитьЦенуКонтрагента(полеввода1,,справочники.Контрагенты.НайтиПоКоду("УТП000438"),Справочники.ТипыЦенНоменклатуры.НайтиПоКоду("утп000004"),,,справочники.Валюты.НайтиПоКоду("980"),,,,);


вже пробував вказувати договір, але все одно на виході 0


1С:Підприємство 8.3 (8.3.15.1869)
"Управление торговым предприятием для Украины", редакция 1.2. (1.2.58.1) (http://1c.ua/v8/RegionalSolutions_UA_UTP.php)
Copyright © Molenari OU, 2017-2020. All rights reserved

Автор: mvo2008 21.11.22, 10:57

berest.andriy@gmail.com @ Сегодня, 10:23 * ,

F12 і читаєте опис функції......

Автор: denis84 21.11.22, 11:17

berest.andriy@gmail.com @ Сегодня, 10:23 * ,

// Функция возвращает цену контрагента для требуемой номенклатуры в указанном типе цен , 
// на заданную дату, за заданную единицу измерения, пересчитанную в требуемую валюту по заданному курсу.
//
// Параметры:
//  Номенклатура               - ссылка на элемент справочника "Номенклатура", для которого надо получить цену,
//  ХарактеристикаНоменклатуры - ссылка на элемент справочника "Характеристики номенклатуры",
//  Контрагент                 - ссылка на элемент справочника "Контрагенты", для которого надо получить цену,
//  ТипЦен                     - ссылка на элемент справочника "Типы цен", опредедяет цену какого типа надо получить,
//  Дата                       - дата, на которую надо получить цену, если не заполнено, то берется рабочая дата
//  ЕдиницаИзмерения           - ссылка на элемент справочника "Единицы измерения", определяет для какой единицы надо получить
//                               цену, если не заполнен, то заполняется единицей цены
//  Валюта                     - ссылка на элемент справочника "Валюты", определяет валюту. в которой надо вернуть цену,
//                               если не заполнен, то заполняется валютой цены
//  Курс                       - число, курс требуемой валюты, если не заполнен, берется курс из регистра
//                               сведений "Курсы валют".
//  Кратность                  - число, кратность требуемой валюты, если не заполнена, берется курс из регистра
//                               сведений "Курсы валют".
//
// Возвращаемое значение:
//  Число, рассчитанное значение цены.
//
Функция ПолучитьЦенуКонтрагента(Номенклатура, ХарактеристикаНоменклатуры = Неопределено, Контрагент,
                                ТипЦен, Дата = Неопределено, ЕдиницаИзмерения = Неопределено,
                                Валюта = Неопределено, Курс = 0, Кратность = 1,
                                ДоговорКонтрагента = Неопределено, УсловиеПродаж = Неопределено) Экспорт

    ХарактеристикиНоменклатуры = ПолучитьМассивХарактеристик(ХарактеристикаНоменклатуры);

    Дата = ПолучитьАктуальнуюДатуРасчетаЦен(Дата);

    ПолученнаяЦена = 0;

    Если ДоговорКонтрагента <> Неопределено Тогда
        Запрос = Новый Запрос;
        Запрос.УстановитьПараметр("Дата", Дата);
        Запрос.УстановитьПараметр("Договор", ДоговорКонтрагента);
        Запрос.УстановитьПараметр("Номенклатура", Номенклатура);
        Запрос.УстановитьПараметр("ХарактеристикиНоменклатуры", ХарактеристикиНоменклатуры);

        ТекстЗапроса = "
        |ВЫБРАТЬ ПЕРВЫЕ 1
        |    УсловияПоставок.Цена                  КАК Цена,
        |    ВЫБОР    КОГДА сНоменклатура.Услуга И УсловияПоставок.ЕдиницаИзмерения = ЗНАЧЕНИЕ(Справочник.ЕдиницыИзмерения.ПустаяСсылка)
        |            ТОГДА сНоменклатура.ЕдиницаХраненияОстатков
        |            ИНАЧЕ УсловияПоставок.ЕдиницаИзмерения
        |    КОНЕЦ                                 КАК ЕдиницаИзмерения,
        |    УсловияПоставок.ВалютаЦены            КАК ВалютаЦены
        |ИЗ
        |    РегистрСведений.УсловияПоставокПоДоговорамКонтрагентовПоНоменклатуре.СрезПоследних(&Дата,
        |       ДоговорКонтрагента = &Договор И Номенклатура = &Номенклатура
        |       И ХарактеристикаНоменклатуры В (&ХарактеристикиНоменклатуры)) КАК УсловияПоставок
        |ВНУТРЕННЕЕ СОЕДИНЕНИЕ
        |    Справочник.Номенклатура КАК сНоменклатура
        |ПО
        |    сНоменклатура.Ссылка = УсловияПоставок.Номенклатура
        |ГДЕ
        |    УсловияПоставок.Цена <> 0 И сНоменклатура.Ссылка = &Номенклатура
        |УПОРЯДОЧИТЬ ПО
        |    УсловияПоставок.ХарактеристикаНоменклатуры УБЫВ
        |";

        Запрос.Текст = ТекстЗапроса;

        Выборка = Запрос.Выполнить().Выбрать();
        Если Выборка.Следующий() Тогда
            ПолученнаяЦена = ПересчитатьЦенуПриИзмененииЕдиницы(Выборка.Цена, Выборка.ЕдиницаИзмерения, ЕдиницаИзмерения);
            ПолученнаяЦена = ПересчитатьЦенуПриИзмененииВалюты(ПолученнаяЦена, Выборка.ВалютаЦены, Валюта, Курс, Кратность, Дата);
        КонецЕсли;
    КонецЕсли;

    Если ПолученнаяЦена = 0 Тогда // особых условий нет
        Запрос = Новый Запрос;
        Запрос.УстановитьПараметр("Дата", Дата);
        Запрос.УстановитьПараметр("Номенклатура", Номенклатура);
        Запрос.УстановитьПараметр("ХарактеристикиНоменклатуры", ХарактеристикиНоменклатуры);
        Запрос.УстановитьПараметр("ТипЦен", ТипЦен);

        Запрос.Текст = "
        |ВЫБРАТЬ ПЕРВЫЕ 1
        |    ЦеныНоменклатурыКонтрагентов.Цена           КАК Цена,
        |    ВЫБОР    КОГДА сНоменклатура.Услуга И ЦеныНоменклатурыКонтрагентов.ЕдиницаИзмерения = ЗНАЧЕНИЕ(Справочник.ЕдиницыИзмерения.ПустаяСсылка)
        |            ТОГДА сНоменклатура.ЕдиницаХраненияОстатков
        |            ИНАЧЕ ЦеныНоменклатурыКонтрагентов.ЕдиницаИзмерения
        |    КОНЕЦ                                       КАК ЕдиницаИзмерения,
        |    ЦеныНоменклатурыКонтрагентов.Валюта         КАК Валюта
        |ИЗ
        |    РегистрСведений.ЦеныНоменклатурыКонтрагентов.СрезПоследних(&Дата, Номенклатура = &Номенклатура И ТипЦен = &ТипЦен
        |       И ХарактеристикаНоменклатуры В(&ХарактеристикиНоменклатуры)) КАК ЦеныНоменклатурыКонтрагентов
        |ВНУТРЕННЕЕ СОЕДИНЕНИЕ
        |    Справочник.Номенклатура КАК сНоменклатура
        |ПО
        |    сНоменклатура.Ссылка = ЦеныНоменклатурыКонтрагентов.Номенклатура
        |ГДЕ
        |    сНоменклатура.Ссылка = &Номенклатура
        |УПОРЯДОЧИТЬ ПО
        |    ХарактеристикаНоменклатуры УБЫВ
        |";

        Выборка = Запрос.Выполнить().Выбрать();
        Если Выборка.Следующий() Тогда
            ПолученнаяЦена = ПересчитатьЦенуПриИзмененииЕдиницы(Выборка.Цена, Выборка.ЕдиницаИзмерения, ЕдиницаИзмерения);
            ПолученнаяЦена = ПересчитатьЦенуПриИзмененииВалюты(ПолученнаяЦена, Выборка.Валюта, Валюта, Курс, Кратность, КонецДня(Дата));
        КонецЕсли;
    КонецЕсли;

    ИзменитьЦенуПоУсловиюПродаж(Дата, Номенклатура, УсловиеПродаж, ПолученнаяЦена);

    Возврат ПолученнаяЦена;

КонецФункции // ПолучитьЦенуКонтрагента()


Цена = Ценообразование.ПолучитьЦенуКонтрагента(Номенклатура, Характеристика, Контрагент, ТипЦен, Дата, ЕдиницаХранения, Валюта);

Автор: Moloko 21.11.22, 11:59

berest.andriy@gmail.com @ Сегодня, 10:23 * ,
Дуже цікаве запитання. Скільки років вже працюю з УТП, але ніколи не бачив, щоби хтось використовував регістр відомостей
"Умови поставок за договорами контрагентів по номенклатурі", та документ "Умови поставок за договорами контрагентів",
який є реєстратором для нього. Саме завдяки ним буде працювати/не працювати ваша функція

Автор: Gazulo 21.11.22, 12:34

berest.andriy@gmail.com @ Сегодня, 11:23 * ,
Добрий день, яке значення в "полеввода1"?

Автор: Vofka 21.11.22, 14:01

berest.andriy@gmail.com, 99%, что полеввода1 это не то, что туда надо передавать. Скорее всего надо передавать реквизит, к которому привязано это ваше поле ввода.

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua