Доброго всем время дня! Уважаемые профессионалы, наворотил нижеприведенный пример решения задачи, посмотрите опытным взором, может есть иной способ ее решения, а то больно мудрено у меня получается! К тому же главный вопрос задачи (см. файл) осилить никак не могу! Все подробности в примере.
P.S. Я не спец в VBA, потому "Не стреляйте в пианиста........!"
sofi пишет: Может я, что-то неправильно сформулировал в задаче? А то просмотров много, а мнений никаких?!
про просмотры: т е "сначала поймите задачу, потом поймите как я её решил, потом поймите правильно ли, а потом поймите а как надо на самом деле"??... и никакой конкретики... вы напишите, что не получается или что другое хотите увидеть в реализации решения... может маленькими последовательными шагами быстрее приблизитесь к цели... ? лично меня смущает: 1) реальность практическая данной задачи - я в практике жизни с таким не сталкивалась в xl (в организациях и на производстве, и тем более в бух учёте реальном, таким не занимаются) 2)почему вы з/п делите на 30 дней, когда в месяце всего 20 рабочих - я тоже не понимаю 3)лист 2-й (по России) у вас уж больно статистикой отдаёт, а округления в листе 1-м - очень смущают, деньги не любят округлений, только дебет и кредит ( или приход и расход)... и вообще практической пользы от вашей постановки вопроса я для себя не вижу, поэтому и не ответила в вашей теме, хоть и смотрела её... и зачем вспоминать всю Россию для пользы дела?
p.s. а если это учебная задача - то лучше подойдите к учителю/преподавателю... имхо
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
Уважаемая JeyCi! Последовательно отвечаю: 1. Данный алгоритм предназначен для расчета задолженности по алиментам, а это задача реальней некуда (20 - 30% взрослого населения РФ алиментщики). 2. В соответствии с законом при расчете долга берется Номинальная Средняя Заработная (СЗП) плата в РФ (данные дает Росстат) 3. На этом же основании при расчете долга берется количество календарных дней в месяце. 4. В соответствии в судебной практикой допускается округление до целых рублей. 5. Помимо того, закон говорит, что уплата алиментов на будущее время (зачет) не допускается, посему, если должник заплатил сумму больше, чем долг, либо текущий, ежемесячный платеж, то переплата на будущие периоды времени (месяцы) не переносится. 6. Может я ошибаюсь, но в описании задачи (см. файл) все изложенное, на мой взгляд, расписано достаточно конкретно.
Теперь, в чем проблема: В примере реализован алгоритм, который выполняет условия изложенные в Описании к задаче, кроме одного: Когда в каком-либо месяце вводится сумма оплаты больше чем сумма долга за этот месяц, то ее, в случае ошибки, невозможно изменить! Требуется снова сформировать таблицу и "забить" все платежи, помесячно, заново, что крайне неудобно (представьте, что расчет делается за 10-15лет!!!) Соответственно это неудобство и хочется устранить, но как, придумать не могу! Вы, для наглядности, попробуйте поэкспериментировать с примером.
P.S. К преподавателю подойти не могу, поскольку сам это хозяйство преподаю приставам.
sofi пишет: для расчета задолженности по алиментам,... 6. Может я ошибаюсь, но в описании задачи (см. файл) все изложенное, на мой взгляд, расписано достаточно конкретно. Теперь, в чем проблема: В примере реализован алгоритм, который выполняет условия изложенные в Описании к задаче, кроме одного:
тогда тем более меня это не касается никогда (убеждать не надо- форум не для этого)... видимо, поэтому для меня не "конкретно"... откровенно, слишком много округлений и неудобное представление таблицы (даже остатка не видно - надо всматриваться) - а ещё экселю в свои ячейки всматриваться... вопрос не обдуман, видимо, изначально... а сделать всё за вас для оптимизации алгоритма (программного, а не судебного) - нет интереса... успехов вам
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
sofi, честно говоря, очень всего много и разбираться особо потому нет желания. Думаю, что можно было бы обойтись одними формулами. Зачем отслеживать изменения не понял. Насчёт переплаты, которая сгорает, так берите минимальное между суммой оплаты реальной и расчётной.
Формула массива (ФМ) вводится Ctrl+Shift+Enter Memento mori
Предлагаю изменить подход. Внести только данные в желтые ячейки и нажать кнопку. Если что-то нужно изменить, то вносим изменения во все те же желтые ячейки и еще раз нажимаем кнопку.
Ваш подход, очень интересен, спасибо! Вот, что значит свежий взгляд! Правда, придется добавить кнопку "Хрясь!" (в действительности, пусть будет "Провести платежи" Проверил Ваш вариант, есть один нюанс. При вводе суммы оплаты, большей долга, вылазит отрицательный остаток (см. файл), а этого быть не должно!
Привязал к Worksheet_Change, пока, все хорошо! Большое спасибо за помощь! Надо попробовать интегрировать в реальную программу, а потом еще перевести в OpenOffice (не к ночи помянутый!)
При вводе суммы оплаты, большей долга, вылазит отрицательный остаток, а этого быть не должно!
Выяснилась еще одна "беда". При вводе суммы оплаты, большей долга, причем, исключительно в первую строку таблицы, попрежнему вылазит отрицательный долг! В остальных строках все хорошо.
на Вашем месте, я бы: 1. убрал выделение после нажатия кнопки "Запуск расчета" - не красиво 2. расчет неустойки делать в самом коде, а не вставляя формулу
Дык, это же модель! В реальной жизни все это "чудо" выглядит совершенно иначе! И интерфейс другой, и сама таблица, только часть большой серьезной бумаги под названием "Постановление", идущей в разные суды, прокуратуры. Я имел ввиду, подправить в части кода. А вот с неустойкой, это беда! Черт знает, как ее оптимально написать! Алгоритм больно мудреный, давно уже голову ломаю.
много кода, если все правильно отрабатывает - то и править нечего, да и не эксперт я в VBA. А по поводу неустойки, если опишите словами, что и как считать, то завтра могу подумать
С виду все просто: По закону неустойка начисляется на остаток долга, начиная с 1 числа месяца, следующего за расчетным, по текущую дату. Из расчета 0,1% в день по долгам до 1.7.2008г. или 0,5% после этой даты. Алгоритм изменения 0,1% / 0,5% от даты и подсчета количества дней начисления реализован в UDF "CountNeustoka". В 100% правильности не уверен, все в стадии отладки.
Основная проблема в том, что должник в течении одного месяца может иметь разный доход за разные промежутки времени и это должно быть отражено в расчете. Для добавления дополнительных периодов расчета служат кнопки "Дублировать/Удалить период". Оплатить долг можно в любой день расчетного месяца, в т.ч. частями (можно отразить одной суммой, но нежелательно). Если должник не работал весь месяц или какое-то кол-во дней, то долг за это время считается исходя из размера СЗП (таблица Росстата) на этот месяц. В файле, как пример, выделена цветом разбивка месяца на 3 периода. Тезисами, вроде, все, приветствуются любые предложения!
P.S. Добавил технологическую таблицу для отладки формул из которых состоит результирующая формула неустойки.