Назначение скидок на документ
Читают тему
Вход в личный кабинет
Для получения доступа к форуму необходимо
авторизоваться
или
зарегистрироваться
на сайте.
{{ formTitle ? formTitle : 'Заказ обратного звонка' }}
{{ formDescription }}
Сообщить об ошибке
Есть некоторые работы на которые установленны автоматические вытесняющие скидки 100%.
Заполняем Заказ-наряд, 5 работ, одна из них со 100% скидкой. Делаем скидку на документ на работы 15%. В результате, на одну из работ устанавливается скидка не 15%, а 15,36% или 16,10%.
Просмотрев код выяснилось, что программа сначала высчитывает общую сумму скидку по полю Сумма, потом по каждой строке пеерсчитывает сумму скидки, и сравнивает общую сумму скидки и сумму скидок по работам. А так как по одной работе стоим 100% вытесняющая скидка, то по данной строке сумма скидки = 0, соответствено общая сумма скидки сумма скидок по работам не равны. Программа выбирает строку с самой большой суммой скидки и добавляет в нее разницу скидок. В результате получаются не правильные данные.
Что в этой ситуации делать?
Спасибо за помощь.
что сейчас мне можно сделать? удалить пересчет на надестоющую сумму?
Это не поможет, так как не правильно получена расчетная база для распределения общей абсолютной скидки по строкам.
Сейчас исправляем эту ошибку. Обработку выложим в этой ветке.
Помимо замены обработки нужно внести изменения в общий модуль орОтраслевыеРешения в процедуру орПолучитьСуммуДокументаБезСкидки()
для Сервиса:
Функция орПолучитьСуммуДокументаБезСкидки(ЭтотОбъект,Товары=Неопределено, МассивСтрокСВытеснением=Неопределено) Экспорт
Если ТипЗнч(ЭтотОбъект)=Тип("ДокументОбъект.ЗаказНаряд") Тогда
Если Товары="Работы" Тогда
ЕстьВытеснение = Ложь;
Если ТипЗнч(МассивСтрокСВытеснением) = Тип("Массив") Тогда
ЕстьВытеснение = Истина;
КонецЕсли;
ЦенаВключаетНДС = (обЗначениеНеЗаполнено(ЭтотОбъект.ТипЦен) ИЛИ ЭтотОбъект.ТипЦен.ЦенаВключаетНДС);
СуммаДокументаБезСкидки = 0;
Если ЕстьВытеснение Тогда
КоличествоСтрок = ЭтотОбъект.Работы.Количество()-1;
Для Инд = 0 По КоличествоСтрок Цикл
Если НЕ МассивСтрокСВытеснением.Найти(Инд) = Неопределено Тогда
Продолжить;
КонецЕсли;
ТекСтрока = ЭтотОбъект.Работы[Инд];
Если ЦенаВключаетНДС Тогда
// Получим сумму документу без учета НДС и скидки
СуммаДокументаБезСкидки = СуммаДокументаБезСкидки + ТекСтрока.Сумма;
Иначе
//Если цена не включает НДС, то получим суммарную НДС по всем строкам
СуммаДокументаБезСкидки = СуммаДокументаБезСкидки + ТекСтрока.Сумма + (ТекСтрока.Сумма * ТекСтрока.СтавкаНДС.Ставка)/100;
КонецЕсли;
КонецЦикла;
Иначе
СуммаДокументаБезСкидки = ЭтотОбъект.Работы.Итог("Сумма");
Если НЕ ЦенаВключаетНДС Тогда
Для каждого ТекСтрока Из ЭтотОбъект.Работы Цикл
СуммаДокументаБезСкидки = СуммаДокументаБезСкидки + (ТекСтрока.Сумма * ТекСтрока.СтавкаНДС.Ставка)/100;
КонецЦикла;
КонецЕсли;
КонецЕсли;
Возврат СуммаДокументаБезСкидки;
КонецЕсли;
КонецЕсли;
Возврат Неопределено;
КонецФункции // орПолучитьСуммуДокументаБезСкидки()
для Салона:
Функция орПолучитьСуммуДокументаБезСкидки(ЭтотОбъект,Товары=Неопределено, МассивСтрокСВытеснением=Неопределено) Экспорт
Если ТипЗнч(ЭтотОбъект)=Тип("ДокументОбъект.ЗаказНаряд") Тогда
Если Товары="Работы" Тогда
ЕстьВытеснение = Ложь;
Если ТипЗнч(МассивСтрокСВытеснением) = Тип("Массив") Тогда
ЕстьВытеснение = Истина;
КонецЕсли;
ЦенаВключаетНДС = (обЗначениеНеЗаполнено(ЭтотОбъект.ТипЦен) ИЛИ ЭтотОбъект.ТипЦен.ЦенаВключаетНДС);
СуммаДокументаБезСкидки = 0;
Если ЕстьВытеснение Тогда
КоличествоСтрок = ЭтотОбъект.Работы.Количество()-1;
Для Инд = 0 По КоличествоСтрок Цикл
Если НЕ МассивСтрокСВытеснением.Найти(Инд) = Неопределено Тогда
Продолжить;
КонецЕсли;
ТекСтрока = ЭтотОбъект.Работы[Инд];
Если ЦенаВключаетНДС Тогда
// Получим сумму документу без учета НДС и скидки
СуммаДокументаБезСкидки = СуммаДокументаБезСкидки + ТекСтрока.Сумма;
Иначе
//Если цена не включает НДС, то получим суммарную НДС по всем строкам
СуммаДокументаБезСкидки = СуммаДокументаБезСкидки + ТекСтрока.Сумма + (ТекСтрока.Сумма * ТекСтрока.СтавкаНДС.Ставка)/100;
КонецЕсли;
КонецЦикла;
Иначе
СуммаДокументаБезСкидки = ЭтотОбъект.Работы.Итог("Сумма");
Если НЕ ЦенаВключаетНДС Тогда
Для каждого ТекСтрока Из ЭтотОбъект.Работы Цикл
СуммаДокументаБезСкидки = СуммаДокументаБезСкидки + (ТекСтрока.Сумма * ТекСтрока.СтавкаНДС.Ставка)/100;
КонецЦикла;
КонецЕсли;
КонецЕсли;
Возврат СуммаДокументаБезСкидки;
КонецЕсли;
ИначеЕсли Товары="Автомобиль" Тогда
СуммаДокументаБезСкидки = ЭтотОбъект.ЦенаАвтомобиля;
ЦенаВключаетНДС = (обЗначениеНеЗаполнено(ЭтотОбъект.ТипЦен) ИЛИ ЭтотОбъект.ТипЦен.ЦенаВключаетНДС);
Если НЕ ЦенаВключаетНДС Тогда
СуммаДокументаБезСкидки = СуммаДокументаБезСкидки + ЭтотОбъект.СуммаНДСНаАвтомобиль;
КонецЕсли;
Если ЭтотОбъект.Метаданные().ТабличныеЧасти.Найти("Опции")<>Неопределено Тогда
СуммаДокументаБезСкидки = СуммаДокументаБезСкидки + ЭтотОбъект.Опции.Итог("Сумма");
Если НЕ ЦенаВключаетНДС Тогда
Для каждого ТекСтрока Из ЭтотОбъект.Опции Цикл
СуммаДокументаБезСкидки = СуммаДокументаБезСкидки + (ТекСтрока.Сумма * ТекСтрока.СтавкаНДС.Ставка)/100;
КонецЦикла;
КонецЕсли;
КонецЕсли;
Возврат СуммаДокументаБезСкидки;
ИначеЕсли Товары="Автомобили" Тогда
СуммаДокументаБезСкидки = ЭтотОбъект.Автомобили.Итог("Сумма");
ЦенаВключаетНДС = (обЗначениеНеЗаполнено(ЭтотОбъект.ТипЦен) ИЛИ ЭтотОбъект.ТипЦен.ЦенаВключаетНДС);
Если НЕ ЦенаВключаетНДС Тогда
Для каждого ТекСтрока Из ЭтотОбъект.Автомобили Цикл
СуммаДокументаБезСкидки = СуммаДокументаБезСкидки + (ТекСтрока.Сумма * ТекСтрока.СтавкаНДС.Ставка)/100;
КонецЦикла;
КонецЕсли;
Возврат СуммаДокументаБезСкидки;
КонецЕсли;
Возврат Неопределено;
КонецФункции // орПолучитьСуммуДокументаБезСкидки()
Прикрепленные файлы
Исправления появятся в релизе 4.1.01.18