Имя: Пароль:
1C
1С v8
Цена позиции номенклатуры
, ,
0 lakich
 
10.03.13
15:52
Насмешу вопросом,но тем  не менее -как получить по конкретной позиции
номенклатуры ее цену заданного вида?..приведите кусок кода
пожалуйста..
1 shuhard
 
10.03.13
15:59
(0) форуму приятно видеть очередной вопрос по конфигурацим Управление борделем 1.1
2 lakich
 
10.03.13
16:01
так дайте ссылку на архив или приведите кусок кода?
3 lakich
 
10.03.13
16:11
неужто никто не знает?)..ну серьезно?)
4 AmoreMe
 
10.03.13
16:14
Знают, просто жмутся... Самим надо :)
5 floody
 
10.03.13
16:17
(0) ну в общем случае что-то типа
глВернутьЦену(Номенклатура,Тип,Дата);

для остального недостаточно инфы в (0)
6 lakich
 
10.03.13
16:19
фокус - на позиции номенклатуры,хочу ,чтобы по нажатию кнопки появлялись цены в текстовом поле
7 lakich
 
10.03.13
16:43
глВерннутьЦену -нет такого,в 8.2 уп нет такой функции
8 hhhh
 
10.03.13
17:34
(7) так Верннуть с одной "н" пишется.
9 shuhard
 
10.03.13
18:05
(8) ввернуть пишется с двумя "в"
10 ILM
 
гуру
10.03.13
18:58
(9) Вставитвцену круче))
11 shuhard
 
10.03.13
19:19
(10) Ыыыыыыыыыыыыыыыыыыыыыыы
12 hohol
 
10.03.13
19:28
(0)  

Ценообразование.ПолучитьЦенуНоменклатуры(Номенклатура,Характеристика,ТипЦен,Дата);
13 hohol
 
10.03.13
19:29
для упп

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

   Если ЕдиницаИзмерения = Неопределено Тогда
       ЕдиницаИзмерения = Справочники.ЕдиницыИзмерения.ПустаяСсылка(); // для услуг
   КонецЕсли;

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

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

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

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

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

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

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

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

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

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

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

       Если ТипЦен.Рассчитывается Тогда // надо достать цену базового типа и рассчитать по наценке
           Запрос.УстановитьПараметр("ТипЦен", ТипЦен.БазовыйТипЦен);
           Запрос.УстановитьПараметр("ТипЦенРасчетный", ТипЦен);
           Запрос.УстановитьПараметр("СпособРасчета", ТипЦен.СпособРасчетаЦены);
           Запрос.УстановитьПараметр("ПроцентНаценки", ТипЦен.ПроцентСкидкиНаценки);
       Иначе
           Запрос.УстановитьПараметр("ТипЦен", ТипЦен);
       КонецЕсли;

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

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

               Если Выборка.СпособРасчетаЦены = Перечисления.СпособыРасчетаЦены.ПоВхождениюБазовойЦеныВДиапазон Тогда
                   ПолученнаяЦена = ПолучитьЦенуПоЦеновымДиапазонам(ТипЦен, Дата, ПолученнаяЦена, ВалютаТекущая, ВалютаТекущая);
               ИначеЕсли Выборка.СпособРасчетаЦены = Перечисления.СпособыРасчетаЦены.ПоПроцентнойНаценкеНаБазовыйТип Тогда
                   ПолученнаяЦена = ПолученнаяЦена * (1 + Выборка.ПроцентСкидкиНаценки / 100);
               КонецЕсли;
           Иначе
               ВалютаТекущая = Выборка.Валюта;
               
               ПолученнаяЦена = Выборка.Цена;
           КонецЕсли;

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

   ИзменитьЦенуПоУсловиюПродаж(Дата, Номенклатура, УсловиеПродаж, ПолученнаяЦена);
   
   Если ЗначениеЗаполнено(ТипЦен) Тогда
       ПолученнаяЦена = ОкруглитьЦену(ПолученнаяЦена, ТипЦен.ПорядокОкругления, ТипЦен.ОкруглятьВБольшуюСторону);
   КонецЕсли;
   
   Возврат ПолученнаяЦена;

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

в УТ и клонах тоже самое. В БП не смотрел. Ну наверное также.
14 lakich
 
12.03.13
22:21
вот спасибо то..человек,большое спасибо
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn