|
Как поставить условия | ☑ | ||
---|---|---|---|---|
0
Vyacheslav_UZ
16.06.16
✎
16:38
|
Добрый вечер. Бухгалтерия 8.2 Подскажите кому не сложно. Сделал внешнюю обработку таб частей в документе "Платежная ведомость". В кратце нужно чтобы суммы к распределению делилась на кол во строк в таб части и распределялась по всем сотрудника.Но если сумма сотрудника может гасится суммой средней, тогда гасим ее, а потом остаток остальной суммой. Вот теперь не могу сделать так чтобы сумма не минусовалась постоянно, а вычиталась с учетом оставшихся кол во строк. вот код:
ТекущаяСуммаКВыплатеБуфер = ТекущаяСуммаКВыплате; КоличествоСтрок = ТабличнаяЧасть.Количество(); ТабличнаяЧасть.Сортировать("Сумма"); Счетчик = 0; СуммаТекущая = 0; Для каждого Стр Из ТабличнаяЧасть Цикл КоличествоСтрок = КоличествоСтрок - Счетчик; Счетчик = Счетчик + 1; ТекущаяСуммаКВыплатеБуфер = ТекущаяСуммаКВыплатеБуфер - СуммаТекущая; Если КоличествоСтрок = 0 Тогда СредняяСумма = ТекущаяСуммаКВыплатеБуфер; Иначе СредняяСумма = ТекущаяСуммаКВыплатеБуфер / КоличествоСтрок; КонецЕсли; СуммаТекущая = Мин(Стр.Сумма, СредняяСумма); Стр.Сумма = СуммаТекущая; КонецЦикла; |
|||
1
Vyacheslav_UZ
16.06.16
✎
16:45
|
Нет не кто? Гении где вы?
|
|||
2
Beretta
16.06.16
✎
16:56
|
В кратце
|
|||
3
Beretta
16.06.16
✎
16:58
|
Какой сакральный смысл в проверке внутри цикла по строкам на КоличествоСтрок = 0 ?
|
|||
4
Ёпрст
16.06.16
✎
16:59
|
(0) выгрузи тч в тз, сделай че надо, загрузи обратно
|
|||
5
hhhh
16.06.16
✎
17:21
|
(1)
Процедура РаспределитьСуммуПоКолонкеТаблицы(РаспределяемаяСумма, Таблица, ИмяКолонки, ИмяКолонкиБазы = "") Экспорт Если РаспределяемаяСумма <> 0 Тогда Если ПустаяСтрока(ИмяКолонкиБазы) Тогда МассивСтарыхСумм = Таблица.ВыгрузитьКолонку(ИмяКолонки); Иначе МассивСтарыхСумм = Таблица.ВыгрузитьКолонку(ИмяКолонкиБазы); КонецЕсли; МассивНовыхСумм = ОбщегоНазначенияБПКлиентСервер.РаспределитьПропорционально(РаспределяемаяСумма, МассивСтарыхСумм); Если МассивНовыхСумм <> Неопределено Тогда Таблица.ЗагрузитьКолонку(МассивНовыхСумм, ИмяКолонки); КонецЕсли; Иначе Таблица.ЗаполнитьЗначения(0, ИмяКолонки); КонецЕсли; КонецПроцедуры |
|||
6
Vyacheslav_UZ
16.06.16
✎
17:22
|
ТекущаяСуммаКВыплатеБуфер = ТекущаяСуммаКВыплате;
КоличествоСтрок = ТабличнаяЧасть.Количество(); ТабличнаяЧасть.Сортировать("Сумма"); Счетчик = 0; СуммаТекущая = 0; Для каждого Стр Из ТабличнаяЧасть Цикл СуммаКЗачету = 0; //Счетчик = Счетчик + 1; //ТекущаяСуммаКВыплатеБуфер = ТекущаяСуммаКВыплатеБуфер - СуммаТекущая; Если КоличествоСтрок = 0 Тогда СредняяСумма = ТекущаяСуммаКВыплатеБуфер; Иначе СредняяСумма = ТекущаяСуммаКВыплатеБуфер / КоличествоСтрок; КонецЕсли; Если Стр.Сумма > СредняяСумма Тогда СуммаКЗачету = ТекущаяСуммаКВыплатеБуфер / КоличествоСтрок; ТекущаяСуммаКВыплатеБуфер = ТекущаяСуммаКВыплатеБуфер - СуммаКЗачету; Стр.Сумма = СуммаКЗачету; Иначе ТекущаяСуммаКВыплатеБуфер = ТекущаяСуммаКВыплатеБуфер - Стр.Сумма; КонецЕсли; //СуммаТекущая = Мин(Стр.Сумма, СредняяСумма); //Стр.Сумма = СуммаТекущая; КоличествоСтрок = КоличествоСтрок - 1; КонецЦикла; |
|||
7
Vyacheslav_UZ
16.06.16
✎
17:22
|
вот так нужно!
|
|||
8
ovrfox
16.06.16
✎
17:40
|
Вообще то так:
КоличествоСтрок = ТабличнаяЧасть.Количество(); ТабличнаяЧасть.Сортировать("Сумма"); Счетчик = 0; СуммаТекущая = 0; Для каждого Стр Из ТабличнаяЧасть Цикл Если КоличествоСтрок = 0 Тогда СредняяСумма = ТекущаяСуммаКВыплатеБуфер; Иначе СредняяСумма = ТекущаяСуммаКВыплатеБуфер / КоличествоСтрок; КонецЕсли; СуммаТекущая = Мин(Стр.Сумма, СредняяСумма); Стр.Сумма = СуммаТекущая; ТекущаяСуммаКВыплатеБуфер = ТекущаяСуммаКВыплатеБуфер - СуммаТекущая; КоличествоСтрок = КоличествоСтрок - 1; КонецЦикла; |
|||
9
ovrfox
16.06.16
✎
17:44
|
Просто отнимать от суммы распределения нужно было не среднюю сумму, а ту, которую назначили к выплате по текущей строке
|
|||
10
ovrfox
16.06.16
✎
17:46
|
Но остается шанс, что при выходе из цикла часть суммы будет не распределена. Поэтому перед распределением лучше упорядочить табличную часть по колонке "сумма".
Но даже это не панацея. Например сумма всех строк меньше сумма распределения. Тогда как быть? |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |