helpf.pro
Регистрация
 +1 
Распечатать

1С 8.x : Функция выполняет пропорциональное распределение суммы в соответствии с заданными коэффициентами

Код 1C v 8.х
 
// Функция выполняет пропорциональное распределение суммы в соответствии с заданными коэффициентами распределения
//
// Параметры:
// ИсхСумма - распределяемая сумма
// МассивКоэф - массив коэффициентов распределения
// Точность - точность округления при распределении. Необязателен.
//
// Возврат:
// МассивСумм - массив размерностью равный массиву коэффициентов, содержит
// суммы в соответствии с весом коэффициента (из массива коэффициентов)
// В случае если распределить не удалось (сумма = 0, кол-во коэф. = 0,
// или суммарный вес коэф. = 0), тогда возвращается значение Неопределено
//
Функция РаспределитьПропорционально(Знач ИсхСумма, МассивКоэф, Знач Точность = 2) Экспорт

Если МассивКоэф.Количество() = 0 Или ИсхСумма = 0 Или ИсхСумма = Null Тогда
Возврат Неопределено;
КонецЕсли;

ИндексМакс = 0;
МаксЗнач = 0;
РаспрСумма = 0;
СуммаКоэф = 0;

Для К = 0 По МассивКоэф.Количество() - 1 Цикл

МодульЧисла = ?(МассивКоэф[К] > 0, МассивКоэф[К], - МассивКоэф[К]);

Если МаксЗнач < МодульЧисла Тогда
МаксЗнач = МодульЧисла;
ИндексМакс = К;
КонецЕсли;

СуммаКоэф = СуммаКоэф + МассивКоэф[К];

КонецЦикла;

Если СуммаКоэф = 0 Тогда
Возврат Неопределено;
КонецЕсли;

МассивСумм = Новый Массив(МассивКоэф.Количество());

Для К = 0 По МассивКоэф.Количество() - 1 Цикл
МассивСумм[К] = Окр(ИсхСумма * МассивКоэф[К] / СуммаКоэф, Точность, 1);
РаспрСумма = РаспрСумма + МассивСумм[К];
КонецЦикла;

// Погрешности округления отнесем на коэффиецент с максимальным весом
Если Не РаспрСумма = ИсхСумма Тогда
МассивСумм[ИндексМакс] = МассивСумм[ИндексМакс] + ИсхСумма - РаспрСумма;
КонецЕсли;

Возврат МассивСумм;

КонецФункции
Разместил:   Версии: | 8.x |  Дата:   Прочитано: 8752
 +1 
Распечатать
Возможно, вас также заинтересует
Задать вопрос пользователю, ответ на вопрос 2
Режим = РежимДиалогаВопрос.ДаНетОтмена; Ответ = Вопрос(" Выполнить?" , Режим, 0); Если Ответ =КодВозвратаДиалога.Да Тогда Сообщить(" Выполнено" ); ИначеЕсли Ответ = КодВозвратаДиалога.Нет Тогда Сообщить(" Не выполнено" ); ...
Как вывести иерархический справочник 5
Для вывода иерархического справочника в отчет с сохранением иерархии необходимо пользоваться запросом аналогичным следующему: ВЫБРАТЬ Номенклатура.Код, Номенклатура.Наименование КАК Наименование, ...
Как сбросить счётчик нумерации документов или справочников 0
Используйте: Глобальный контекст: ОбновитьНумерациюОбъектов (RefreshObjectsNumbering) Синтаксис: ОбновитьНумерациюОбъектов( Метаданные ) Параметры: Метаданные (необязательный, НО Если значение параметра не указано, то...
Как сформировать новый документ на основании файла, шаблона Microsoft Office Word и OpenOffice? 1
Перем СсылкаНаДокумент; Процедура СформироватбФайл_MS_Word_И_OpenOffice(Кнопка) ДокументСсылка = СсылкаНаДокумент; ИмяФайла = ПолучитьИмяВременногоФайла(); // Теперь формируем файл из MS Wordа Попытка MSWord = новый COMОбъект("...
Как установить фильтр в Excel 0
при открытии файла в таблице должен стоять фильтр с заданными параметрами: получить все товары у которых количество равно 11 Ехсел.Range(" C5:D5" ).AutoFilter (); //создаем автофильт Ехсел.Range(" C5:D5" ).AutoFilter (2," 11" ); //указаваем столбе
Посмотреть все результаты поиска похожих
Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.