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

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

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

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

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


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

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

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