Расчет ЧИСТВНДОХ в 1С 8

08.07.14

Разработка - Универсальные функции

Обработка расчета, аналогичная ЧИСТВНДОХ в excel
Очень поможет всем МФО (микрофинансовым организациям)
ЧИСТВНДОХ  - функция excel, которая возвращает внутреннюю ставку доходности для графика денежных потоков, которые не обязательно носят периодический характер.

Файлы

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование Скачано Купить файл
ver10
.epf 8,27Kb ver:1.0
70 1 850 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой
Этот алгоритм - результат переработки алгоритма на VBA.
Этот сайт мне показала справка моего excel.
http://www.programmersforum.ru/showthread.php?t=97344
Подобные расчеты пригодятся всем, чья деятельность связана с МФО, т.к. с 01.07.14 вступает в полную силу закон о потребительских кредитах, предоставляемых физическим лицам (Федеральный закон от 21.12.2013 N 353-ФЗ «О потребительском кредите (займе)»)


Вступайте в нашу телеграмм-группу Инфостарт

ЧИСТВНДОХ

См. также

Универсальные функции Работа с интерфейсом Программист 1С v8.3 Бесплатно (free)

Порой необходимо временно отключить расширение 1С, не удаляя его, чтобы не потерять данные. Но в этом случае при каждом запуске всем будет лезть уведомление о неактивном расширении, хотя очевидно, это техническая информация, которой не стоит лишний раз пугать пользователей.

14.05.2025    3883    DeerCven    9    

48

Универсальные функции Программист 1С v8.3 1C:Бухгалтерия Бесплатно (free)

Благодаря этим пяти строчкам можно больше не заморачиваться с загрузкой из внешних файлов. Пользуюсь везде, всегда и постоянно.

21.05.2024    42449    dimanich70    83    

158

Универсальные функции Программист 1С v8.3 1C:Бухгалтерия Абонемент ($m)

Задача: вставить картинку из буфера обмена на форму средствами платформы 1С.

1 стартмани

18.03.2024    6274    6    John_d    11    

58

Универсальные функции Программист Стажер 1С v8.3 1C:Бухгалтерия Бесплатно (free)

Пришлось помучиться с GUID-ами немного, решил поделиться опытом, мало ли кому пригодится.

12.02.2024    51687    atdonya    31    

66

Универсальные функции Программист 1С v8.3 Бесплатно (free)

На заключительных этапах, когда идет отладка или доработка интерфейса, необходимо много раз переоткрыть внешний объект. Вот один из способов автоматизации этого.

30.11.2023    8025    ke.92@mail.ru    17    

66

WEB-интеграция Универсальные функции Механизмы платформы 1С Программист 1С v8.3 1C:Бухгалтерия Бесплатно (free)

При работе с интеграциями рано или поздно придется столкнуться с получением JSON файлов. И, конечно же, жизнь заставит проверять файлы перед тем, как записывать данные в БД.

28.08.2023    21478    YA_418728146    8    

174
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. gull22 105 09.07.14 10:22 Сейчас в теме
2. Enya_06 07.08.14 19:04 Сейчас в теме
Отлично! Полезный и важный труд!
3. ag.baranov 21.08.14 15:51 Сейчас в теме
Оптимизированный код для 7.7

Функция Экспонента(Х)
    Р=1;
    Дельта=1;      
    К=1;
    Пока ?(Дельта>0,Дельта,-Дельта)>0.000001 Цикл
        Дельта=Дельта*Х/К;
        К=К+1;
        Р=Р+Дельта;
    КонецЦикла;
    Возврат окр(Р,5);    
КонецФункции   

Функция степень(а,в) 
    возврат Экспонента(Лог(а)*в);
КонецФункции   

Функция Отклонение(Предп)
	Р = -СуммаЗайма;
	ВыбратьСтроки();
	Пока ПолучитьСтроку() = 1 Цикл		
	    Р = Р + Всего / Степень(1 + Предп,(ДатаПлатежа - ДатаДок)/365);
	КонецЦикла;
	Возврат Р
КонецФункции

Функция ЧИСТВНДОХ()
	Если СуммаЗайма = 0  Тогда
	    Возврат 0;
	КонецЕсли;
	Если КоличествоСтрок() = 0 Тогда
	    Возврат 0
	КонецЕсли;
	Переплата = (Итог("Всего") / СуммаЗайма); 
	ПолучитьСтрокуПоНомеру(КоличествоСтрок());
	Лет = (ДатаОкончания - ДатаДок) / 365;
	Предп = Степень(Переплата,2/Лет) - 1;	//начальная оценка ставки
	
	Р = Отклонение(Предп);
	Если Р > 0 Тогда
		Шаг = 0.382 * Предп;
	Иначе
		Шаг = -0.382 * Предп;
	КонецЕсли;
	Точность = 0.00001;
	Пока (Шаг < -Точность) ИЛИ (Шаг > Точность) Цикл
		Предп = Предп + Шаг;
		Р = Отклонение(Предп);
		Если Р * Шаг < 0 Тогда
			Шаг = -Шаг * 0.382;//из метода золотого сечения
		КонецЕсли;
	КонецЦикла;
	Возврат Предп;
КонецФункции	
Показать
newtraveller; ak_nikolay; unichkin; +3 Ответить
4. unichkin 1611 10.11.17 18:18 Сейчас в теме
(3) Спасибо! Перегнал ваш код в v8, работает быстрее чем алгоритм публикации

// Реализация функции Excell "ЧИСТВНДОХ"
//
//Параметры:
// ТаблицаИсточник - ТаблицаЗначений
// ИмяКолонкиПериод - Число
// ИмяКолонкиСумма - Строка
// Точность - Число
//
//Возвращаемое значение: 
//	Число
//
Функция ЧИСТВНДОХ(ТаблицаИсточник, ИмяКолонкиПериод = "Период", ИмяКолонкиСумма = "Сумма", Точность = 0.0001)

	Если ТаблицаИсточник.Итог(ИмяКолонкиСумма) = 0 Тогда
		Возврат 0;		
	КонецЕсли; 
	
	ТаблицаРасчета = Новый ТаблицаЗначений;
	ТаблицаРасчета.Колонки.Добавить("Дата");
	ТаблицаРасчета.Колонки.Добавить("РазностьДат");
	ТаблицаРасчета.Колонки.Добавить("Сумма");
	
	ПерваяДата = НачалоДня(ТаблицаИсточник[0][ИмяКолонкиПериод]);
	
	Для каждого СтрокаИсточник Из ТаблицаИсточник Цикл		
		ТекДата = СтрокаИсточник[ИмяКолонкиПериод];
		
		СтрокаРасчета = ТаблицаРасчета.Добавить();
		СтрокаРасчета.Дата = ТекДата;
		СтрокаРасчета.РазностьДат = (НачалоДня(ТекДата) - ПерваяДата) / (24 * 60 * 60) / 365;
		СтрокаРасчета.Сумма = СтрокаИсточник[ИмяКолонкиСумма];		
	КонецЦикла; 
	
    ПСК = 0.1;
	Сумма = 0;
	Для каждого СтрокаРасчета Из ТаблицаРасчета Цикл
		Сумма = Сумма + СтрокаРасчета.Сумма / Pow(1 + ПСК, СтрокаРасчета.РазностьДат)
		
	КонецЦикла; 
	 
	Если Сумма > 0 Тогда
	    Шаг = 0.382 * ПСК;
	Иначе
	    Шаг = -0.382 * ПСК;
	КонецЕсли;

    Пока (Шаг < -Точность) ИЛИ (Шаг > Точность) Цикл
        ПСК = ПСК + Шаг;
		Сумма = 0;
		Для каждого СтрокаРасчета Из ТаблицаРасчета Цикл
			Сумма = Сумма + СтрокаРасчета.Сумма / Pow(1 + ПСК, СтрокаРасчета.РазностьДат)
			
		КонецЦикла;
		Если Сумма * Шаг < 0 Тогда
            Шаг = -Шаг * 0.382;//из метода золотого сечения
        КонецЕсли;
    КонецЦикла;
    Возврат ПСК;
КонецФункции
Показать
Evilleo; newtraveller; user651504_anah0ret; vetaldober; antistress; ak_nikolay; KenigDW; FilatovRA; +8 Ответить
6. user832283 06.12.21 08:51 Сейчас в теме
(4)
В начале тела последнего цикла нужно добавить, чтобы контролировать ошибку возведения отрицательного числа в дробную степень:

Если ПСК + Шаг <= -1 Тогда
	Шаг = Шаг * 0.382;
	Продолжить;
КонецЕсли;
5. anatol.goncearenco 12.05.21 11:25 Сейчас в теме
(4) По-моему, что-то не так.
Если проанализировать последний цикл, то видно, что цикл "вечный", т.к. Сумма * Шаг >0 всегда.
А значит, шаг не меняется и будем крутиться в цикле до "посинения".
Поэтому нужно подкорректировать проверку Если:
Если Сумма * Шаг < 0 Тогда
Шаг = -Шаг * 0.382;
Иначе
Шаг = Шаг * 0.382;
КонецЕсли;

Результат получается, но он всегда один и тот же.
ser6702; newtraveller; +2 Ответить
7. ser6702 179 14.02.22 11:43 Сейчас в теме
Результат всегда = 12345678 если нет первого взноса с минусом или бесконечный цикл в итоге с делением на ноль
8. ser6702 179 14.02.22 12:44 Сейчас в теме
(7) о похоже это я ошибся. Должна работать.
Для отправки сообщения требуется регистрация/авторизация