Вход | Регистрация

1С:Предприятие :: 1С:Предприятие 8 общая

Получение скидки в УТ 11.2

Получение скидки  в УТ 11.2
Я
   Sam1C
 
13.06.18 - 13:05
Чтобы не изобретать велосипед в УТ 11.2 есть какая типовая функция получения Скидки имея параметры Номенклатура и Соглашение ?

Есть Соглашение по нему два вида скидки:
1) 3% - Номенклатура по отбору1 
2) 5%  -Номенклатура по отбору2

Нужно узнать "Товар А" в какой из этих 2-х отборов попадает и определить скидку (3,5 или нет вообще)

Может есть какая функция в общем модуле (желательно с флагом Внешнее соединение) ?
 
 
   Cyberhawk
 
1 - 13.06.18 - 13:06
Вестимо
   Sam1C
 
2 - 13.06.18 - 13:11
(1) А имя функции?
   Cyberhawk
 
3 - 13.06.18 - 13:23
Так ты когда подбор в таблицу формы документа делаешь, у тебя оно как себя ведет?
   Sam1C
 
4 - 13.06.18 - 14:46
(3) я не делаю (слабоват в УТ 11), я с внешней базы к УТ подключаюсь, чтобы не анализировать тонны кода спрашиваю у спецов тут, но походу придется анализировать...
   Cyberhawk
 
5 - 13.06.18 - 14:49
Если цель - получить такое же значение скидки, которое подставляется при интерактивном создании документа, то без анализа никак нельзя
   ildary
 
6 - 13.06.18 - 14:52
(4) вы хотите, чтобы мы проанализировали тонны кода за вас?
   Sam1C
 
7 - 13.06.18 - 14:56
(6) Нет, может кто-то уже знает
   novichok79
 
8 - 13.06.18 - 15:16
СтруктураПараметры = Новый Структура;
СтруктураПараметры.Вставить("ПрименятьКОбъекту",                Истина);
СтруктураПараметры.Вставить("ТолькоПредварительныйРасчет",      Ложь);
СтруктураПараметры.Вставить("ВосстанавливатьУправляемыеСкидки", Истина);
СтруктураПараметры.Вставить("УправляемыеСкидки", УправляемыеСкидки);

ПримененныеСкидки = СкидкиНаценкиСервер.Рассчитать(Объект, СтруктураПараметры);


типа так?
   Sam1C
 
9 - 13.06.18 - 15:26
(8) да, но тут нету параметра соглашение, сам смотрю эту функцию сейчас, пока еще не разобрался подходит она мне или нет
   novichok79
 
10 - 13.06.18 - 15:29
(9) см при изменении соглашения() тогда
 
 Рекламное место пустует
   Sam1C
 
11 - 13.06.18 - 16:45
Ничего подходящего не нашел, в примере (8) расчет идет по видам документов т.е. в Объект нужно передавать документ, а от его вида вызываются различные расчеты по виду.
Мне из внешней базы придется либо делать свой запрос, либо попробовать подставить в параметр Объект не ссылка на документ, свою структуру с полями которые используется в типовых алгоритмах(в функцию РассчитатьПоЗаказуКлиента).
   Sam1C
 
12 - 13.06.18 - 16:45
(1) так что "Не Вестимо"
   Cyberhawk
 
13 - 13.06.18 - 16:51
(12) Как же по-твоему происходит (3)? Отбрасыватель из тебя не вышел
   novichok79
 
14 - 13.06.18 - 16:52
(11) а если структуру передать в качестве объекта с необходимыми полями?
   novichok79
 
15 - 13.06.18 - 16:53
(11) свои запросы писать чревато в новых типовых, структура метаданных частенько меняется.
   Sam1C
 
16 - 13.06.18 - 18:25
(14) ну я в (11) и писал как 2-ой способ
...либо попробовать подставить в параметр Объект не ссылка на документ, свою структуру с полями которые используется в типовых..
буду пробовать через структуру
   Sam1C
 
17 - 13.06.18 - 18:51
(13) Для решения (0) типового функционала не обнаружено, поэтому (12).
Происходит расчет по всему документу РассчитатьПоЗаказуКлиента(Объект,...) и так далее функции по другим видам документа, где Объект – ссылка на документ. Мне надо отдельно по конкретной Номенклатуре получить из другой базы. По типовому вариант только в параметр Объект подставить Структуру с полями которые использует функция. Но опять-таки надо штудировать код и смотреть какие поля используются создавать в полях имитации ТЧ документа и т. п. В эту функцию пихать много не нужного, что скажется и на производительности
   Cyberhawk
 
18 - 13.06.18 - 19:19
(17) "Происходит расчет по всему документу РассчитатьПоЗаказуКлиента" // Ну, молодец, Я в (3) об этом как бы и намекал. Догадываешься, что твоя задача в текущей постановке не имеет однозначного решения?
   Sam1C
 
19 - 14.06.18 - 16:05
Решение сделал следующие по пути наименьшего сопротивление, может кому пригодится. Так как в функцию РассчитатьПоЗаказуКлиента(Объект,...) в параметр Объект нужно передавать не Ссылку, а объект документа, передаю новый временный документ:
Процедура РассчитатьСУчетомСкидок(пПериод,пДоговор,птзТовары)
    Если мСоответствиеСоглашений[пДоговор] = Неопределено Тогда
           Возврат;
    КонецЕсли;
    ВременныйДокумент = мВнешниеСоеденение.Документы.ЗаказКлиента.СоздатьДокумент();
    ВременныйДокумент.Дата = пПериод;
    ВременныйДокумент.Соглашение = мСоответствиеСоглашений[пДоговор];
    ВременныйДокумент.Валюта = мВнешниеСоеденение.Константы.ВалютаРегламентированногоУчета.Получить();
    ВременныйДокумент.Товары.Загрузить(птзТовары);
    ПримененныеСкидки = мВнешниеСоеденение.СкидкиНаценкиСервер.Рассчитать(ВременныйДокумент, мСтруктураПараметры);
    ТаблицаСкидок = ПримененныеСкидки.ТаблицаСкидкиНаценки;
    Для Каждого СтрокаСкидок ИЗ ТаблицаСкидок Цикл
        КлючСвязи = СтрокаСкидок.КлючСвязи;
        Если СтрокаСкидок.Сумма = 0 Тогда
            Продолжить;    
        КонецЕсли;
        СтрокаВТоварах = птзТовары.Get(КлючСвязи - 1);
        Если СтрокаВТоварах.Цена = NULL Тогда 
            СтрокаВТоварах.Цена = 0; 
        Иначе
            СтрокаВТоварах.Цена = СтрокаВТоварах.Цена - СтрокаСкидок.Сумма;
        КонецЕсли;        
    КонецЦикла;
КонецПроцедуры

В параметр "птзТовары" передаю COM ТаблицуЗначений с  нужной мне Номенклатурой, Видом цен и ценой без скидки
   Sam1C
 
20 - 14.06.18 - 16:10
(19) Еще есть вариант более сложный, но наверно производительней, получить текст запроса с параметры отбора по номенклатуре по соответствующему элементу  справочника СкидкиНаценки. И динамически создать свой запрос:

СтруктураЗапроса = мВнешниеСоеденение.СкидкиНаценкиСервер.ДанныеФильтраПоНоменклатуре(СкидкаСсылка,"ВременТаблицаТоваров");

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Рекламное место пустует