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

08.07.14

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

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

Файлы

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

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

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

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

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


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

ЧИСТВНДОХ

См. также

Загрузка и выгрузка в Excel Универсальные функции Программист 1С:Предприятие 8 Россия Бесплатно (free)

Описанный ниже подход позволяет в три шага заполнять формулы в Excel файлы, вне зависимости от ОС сервера (MS Windows Server или Linux). Подход подразумевает отказ от работы с COM-объектом в пользу работы через "объектную модель документа" (DOM).

30.10.2025    3511    Abysswalker    9    

45

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

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

14.05.2025    6490    DeerCven    15    

57

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

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

21.05.2024    49051    dimanich70    83    

170

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

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

1 стартмани

18.03.2024    7346    6    John_d    13    

59

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

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

12.02.2024    61399    atdonya    31    

69

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

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

30.11.2023    9147    ke.92@mail.ru    17    

68
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
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 1617 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 182 14.02.22 11:43 Сейчас в теме
Результат всегда = 12345678 если нет первого взноса с минусом или бесконечный цикл в итоге с делением на ноль
8. ser6702 182 14.02.22 12:44 Сейчас в теме
(7) о похоже это я ошибся. Должна работать.
Для отправки сообщения требуется регистрация/авторизация