Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

УПП. Скидки и сумма на основании заказа

УПП. Скидки и сумма на основании заказа
Я
   MAPATNK2
 
11.11.20 - 16:00
Всем доброго дня. Есть заказ в котором нельзя редактировать цены. Корректирую сумму, получаю ручную скидку, далее Делаю Реализацию на основании заказа покупателя. И вот счастье, совсем другая сумма. Я понимаю, это все из за округлений, но это ж бред. Все менеджеры теперь должны постоянно перепроверять совпадают ли суммы реализации с заказом.
Есть ли какой метод решения.

Хотел залезть, убрать пересчет сумм, вместо него вставить сумму из заказа, но запутался, так наворочено все. ППц просто.
   MAPATNK2
 
1 - 12.11.20 - 10:31
UP
   MAPATNK2
 
2 - 12.11.20 - 10:33
Убрал пересчет сумм, поставил заполнение на основании заказа. Вот только проблема появилась. Если делать заказ с 2 одинаковыми позициями и, например, разными ценами или размещением, то в сумму реализации попадет сумма не 1 позиции, а двух. Видимо идет свертка тупо по номенклатур с суммой цен. ППц.
   MAPATNK2
 
3 - 12.11.20 - 10:35
Как я понял, если хочешь, чтобы все было красиво, нужно стандартный запрос переделывать. Не силен я в запросах конечно, беда.
Может какие то стандартные решения есть, методы? Механизм типовой, значит проблема с ручными скидками и пересчетом сумм есть у всех. Кто как решал?
   Черников
 
4 - 12.11.20 - 14:29
Лучше не трогай!   Кто только не пытался это переделать, но сделать лучше не удалось! По мне так, проблема с округлениями не разрешима.
   MAPATNK2
 
5 - 12.11.20 - 14:39
(4) XD. Да, вот сижу и думаю о том же.
   Михаил Козлов
 
6 - 13.11.20 - 10:10
В КА 2.4 коллега пилил.
   MAPATNK2
 
7 - 14.11.20 - 22:31
(6) и как?
   Михаил Козлов
 
8 - 14.11.20 - 22:42
Завтра спрошу.
   MAPATNK2
 
9 - 14.11.20 - 22:48
(8) спасибо
   Михаил Козлов
 
10 - 15.11.20 - 12:30
Вот нашел в расширении, вызывается в событии формы ПередЗаписьюПосле.
Процедура НайтиИИсправитьРасхожденияСумм()
    КэшированныеЗначения =неопределено;
    Запрос =Новый Запрос;
    Запрос.Текст ="ВЫБРАТЬ
            |    ЗаказКлиентаТовары.Номенклатура КАК Номенклатура,
            |    ЗаказКлиентаТовары.СуммаСНДС КАК СуммаСНДС,
            |    ЗаказКлиентаТовары.Количество КАК Количество
            |ПОМЕСТИТЬ ЗК
            |ИЗ
            |    Документ.ЗаказКлиента.Товары КАК ЗаказКлиентаТовары
            |ГДЕ
            |    ЗаказКлиентаТовары.Ссылка = &Заказ
            |    И ЗаказКлиентаТовары.Отменено = ЛОЖЬ
            |    И ЗаказКлиентаТовары.ВариантОбеспечения = ЗНАЧЕНИЕ(Перечисление.ВариантыОбеспечения.Отгрузить)
            |;
            |
            ////////////////////////////////////////////////////////////////////////////////

            |ВЫБРАТЬ
            |    РН.Номенклатура КАК Номенклатура,
            |    РН.СуммаСНДС КАК СуммаСНДС,
            |    РН.Количество КАК Количество
            |ПОМЕСТИТЬ РН
            |ИЗ
            |    &РН КАК РН
            |;
            |
            ////////////////////////////////////////////////////////////////////////////////

            |ВЫБРАТЬ
            |    ЗК.Номенклатура КАК Номенклатура,
            |    ЗК.Количество КАК КоличествоЗаказа,
            |    ЗК.СуммаСНДС КАК СуммаЗаказа,
            |    ЕСТЬNULL(РН.Количество, 0) КАК КоличествоРеализации,
            |    ЕСТЬNULL(РН.СуммаСНДС, 0) КАК СуммаРеализации,
            |    ЕСТЬNULL(РН.СуммаСНДС, 0) -ЗК.СуммаСНДС КАК Разница
            |ИЗ
            |    ЗК КАК ЗК
            |        ЛЕВОЕ СОЕДИНЕНИЕ РН КАК РН
            |        ПО ЗК.Номенклатура = РН.Номенклатура И ЗК.Количество = РН.Количество";
    Запрос.УстановитьПараметр("Заказ", Объект.ЗаказКлиента);
    Запрос.УстановитьПараметр("РН", Объект.Товары.Выгрузить());
    ТЗ =Запрос.Выполнить().Выгрузить();
    Для каждого стр из ТЗ Цикл
        Если стр.Разница<>0 Тогда
             СП =Новый Структура;
             СП.Вставить("Номенклатура", стр.Номенклатура);
             СП.Вставить("Количество", стр.КоличествоЗаказа);
             мс =Объект.Товары.НайтиСтроки(СП);
             Для каждого эл из мс Цикл
                 эл.СуммаРучнойСкидки = эл.СуммаРучнойСкидки+стр.Разница;
                 
                СтруктураПересчетаСуммы = ОбработкаТабличнойЧастиКлиентСервер.ПараметрыПересчетаСуммыНДСВСтрокеТЧ(Объект);
                
                СтруктураДействий = Новый Структура;
                СтруктураДействий.Вставить("ПересчитатьПроцентРучнойСкидки");
                СтруктураДействий.Вставить("ПересчитатьСумму");
                СтруктураДействий.Вставить("ПересчитатьСуммуСУчетомРучнойСкидки", Новый Структура("Очищать, ПересчитыватьСуммуРучнойСкидки", Ложь, Ложь));
                СтруктураДействий.Вставить("ПересчитатьСуммуСУчетомАвтоматическойСкидки", Новый Структура("Очищать", Ложь));
                СтруктураДействий.Вставить("ПересчитатьСуммуНДС", СтруктураПересчетаСуммы);
                СтруктураДействий.Вставить("ПересчитатьСуммуСНДС", СтруктураПересчетаСуммы);
                СтруктураДействий.Вставить("ОчиститьСуммуВзаиморасчетов");
                СтруктураДействий.Вставить("ЗаполнитьДубликатыЗависимыхРеквизитов", ЗависимыеРеквизиты());
                СтруктураДействий.Вставить("ПересчитатьСуммуСверхЗаказа", Новый Структура("РеализацияПоступлениеПоЗаказу, ТребуетсяЗалогЗаТару",
                    Объект.РеализацияПоЗаказам, Объект.ТребуетсяЗалогЗаТару));
                
                ОбработкаТабличнойЧастиСервер.ОбработатьСтрокуТЧ(эл, СтруктураДействий, КэшированныеЗначения);
                ПродажиКлиентСервер.РассчитатьИтоговыеПоказателиРеализации(ЭтаФорма);
                 
             КонецЦикла;
             
        КонецЕсли;
    КонецЦикла;
КонецПроцедуры

Не знаю, подойдет ли.

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