Изменение долга контрагента

Тема в разделе "1C и всё что с ней связано", создана пользователем KateBakly, 9 апр 2010.

  1. KateBakly

    KateBakly Active Member

    Регистрация:
    2 апр 2010
    Сообщения:
    28
    Симпатии:
    0
    Здравствуйте! Это снова я. У меня мало опыта (извините), но большое желание познать 1с.
    Подскажите, пожалуйста, хоть направьте, в каком направлении думать.
    1с 7.7 ТиС (9.2), можно ли сделать так, чтобы долг контрагента изменялся автоматически по прошествии заданного времени (день, неделя,...) на заданную величину (процент)? Подскажите, хоть где искать эти или подобные данные в типовой конфигурации?
     
  2. vbs

    vbs Well-Known Member

    Регистрация:
    18 фев 2007
    Сообщения:
    1.708
    Симпатии:
    3
    Долг покупателя меняется автоматически при создании документов "Реализация", а долг поставщику - при создании документов "ПоступлениеТМЦ" и пр.
    В чем проблема ?

    Добавлено: Если есть желание, скажем, навешивать на покупателя штрафные санкции, тогда другое дело
     
  3. KateBakly

    KateBakly Active Member

    Регистрация:
    2 апр 2010
    Сообщения:
    28
    Симпатии:
    0
    Есть у нас, скажем, покупатель, у которого долг. Ждем 7 дней, пока он не оплатит. Если не оплатил, то накручиваем процент, например, за каждый просроченный день.
    Это делать изменения в глобальном модуле в процедуре глТекующийДолг?
     
  4. evgenyatam

    evgenyatam Well-Known Member

    Регистрация:
    7 сен 2007
    Сообщения:
    175
    Симпатии:
    0
    Долги хранятся в регистрах. Регистры изменяются ТОЛЬКО ДОКУМЕНТАМИ. Дальше делаем выводы.
     
  5. KateBakly

    KateBakly Active Member

    Регистрация:
    2 апр 2010
    Сообщения:
    28
    Симпатии:
    0
    Я так поняла, что надо делать изменения в документе Реализация (в моем случае). Я в Процедуру РасчетТекущегоДолга добавляю цикл вроде такого:
    Если дата оплаты < ТекущаяДата() Тогда
    КолДней = ТекущаяДата() - дата оплаты;
    ТекущийДолг = ТекущийДолг + Окр(ТекущийДолг * КолДней * 0.01,2); // 1% накручивать за 1 день (это я пока для примера такое значение взяла)
    КонецЕсли;

    Только как обратиться именно к нужной дате оплаты? Датой оплаты должна быть дата, когда покупатель получил долг, да плюс еще семь дней.
    Когда вместо даты оплаты попробовала ввести конкретное значение (для теста), процент накрутился.
     
  6. vbs

    vbs Well-Known Member

    Регистрация:
    18 фев 2007
    Сообщения:
    1.708
    Симпатии:
    3
    Можно пропробовать использовать для расчета реквизиты справочника "Договоры" (СуммаКредита и ГлубинаКредита)
    ДатаОплаты = ДатаОтгрузки + ГлубинаКредита //(ДатаОтгрузки = ДатаДок)
    Если задается СуммаКредита, можно анализировать Сумму отгрузки (СуммаВзаиморасчетов) на превышение Суммы кредита.
    При этом ТекущийДолг - вещь в себе, эта переменная живет только при открытой форме документа,
    так что, похоже, придется написать обработку, которая и будет учитывать штрафные санкции.
    Как вариант, завести в справочнике "Контрагенты" периодический реквизит ТекущийДолг и/или скорректировать отчет ВедомостьПоКонтрагентам
     
  7. Pro

    Pro Гость

    стоит сделать отдельный документ со злобным названием "Проценты Просрочки", выполнять его раз в день утром и он будет на всех покупашек подвешивать что нужно... для простото ты поиска, что откуда брать посмотр.... в Корректиовкадолга
     
  8. KateBakly

    KateBakly Active Member

    Регистрация:
    2 апр 2010
    Сообщения:
    28
    Симпатии:
    0
    Сделала документ ПроцентыПросрочки. Хочу, чтобы по нажатии на кнопку он искал всех покупателей с долгом, затем находил документ, когда они этот долг получили, проверяли давность времени и при необходимости (прошло больше 7 дней) прибавляли определенный процент.
    Я сделала так, что должники находятся. Теперь, как я понимаю, надо составить запрос, чтобы найти документ, когда был получен долг. То есть это должен быть документ, после которого долг с меньшего или равного нулю сменился на положительный.
    Не поможете с запросом, хоть как приблизительно его здесь надо задавать?

    Вот как я нахожу должников:
    СпрКонтрА = СоздатьОбъект("Справочник.Контрагенты");
    СпрКонтрА.НайтиПоНаименованию("Покупатели");
    Покупатели = СпрКонтрА.ТекущийЭлемент();
    СпрКонтрА.ИспользоватьРодителя(Покупатели);
    СпрКонтрА.ВыбратьЭлементы();
    Пока СпрКонтрА.ПолучитьЭлемент() = 1 Цикл
    СпрДоговоры = СоздатьОбъект("Справочник.Договоры");
    СпрДоговоры.ИспользоватьВладельца(СпрКонтрА.ТекущийЭлемент());
    Если СпрДоговоры.НайтиПоНаименованию("Основной договор") = 1 Тогда
    Договор = СпрДоговоры.ТекущийЭлемент();
    КонецЕсли;
    ТекущийДолг = глТекущийДолг(Фирма, Договор, "покупатель");
    Если ТекущийДолг > 0 Тогда
    // здесь надо запрос делать
    КонецЕсли;
    КонецЦикла;
     
  9. vbs

    vbs Well-Known Member

    Регистрация:
    18 фев 2007
    Сообщения:
    1.708
    Симпатии:
    3
    Рекомендую искать расходные документу по Договору.
    Док = СоздатьОбъект("Реализация"); // или какой нужно
    Док.ВыбратьПоЗначению()
     
  10. vitfil

    vitfil IT-интегратор

    Регистрация:
    2 апр 2004
    Сообщения:
    2.070
    Симпатии:
    0
    Ой, не в ту сторону вы копаете, не в ту...
    Долг не может автоматически увеличиваться. Проценты начисляются либо по предъявлению претензии и подписанию оной д*цензура*ором, либо по удовлетворенному судом исковому заявлению кредитора.
     
  11. KateBakly

    KateBakly Active Member

    Регистрация:
    2 апр 2010
    Сообщения:
    28
    Симпатии:
    0
    Извините, я видно не совсем понимаю...
    Можно ли так написать, в чем ошибка? Пишу:
    Док = СоздатьОбъект("Документ.Реализация");
    Пока Док.ВыбратьПоЗначению(Договор, "Основной договор")=1 Цикл //я так понимаю, это искать по Основному договору
    ....
    КонецЦикла;
    Пишет: Недостаточное число параметров передано при вызове функции/процедуры объекта
    Вроде же в ВыбратьПоЗначению начальную и конечную даты можно не передавать

    Может искать надо по контрагенту? Например, Док.ВыбратьПоЗначению(Контрагент, СпрКонтрА.ТекущийЭлемент())
    Ошибку, понятно, это не уберет...
     
  12. vitfil

    vitfil IT-интегратор

    Регистрация:
    2 апр 2004
    Сообщения:
    2.070
    Симпатии:
    0
    Можно_не_передавать = передача пустого параметра, т.е. необходимо запятые ставить.
    Док.ВыбратьПоЗначениею(,,Договор,"ОсновнойДоговор");
    Причем, насколько я помню, нельзя выбирать по значению в документах определенного вида.
    Лучше воспользуйтесь запросом.
    Текст запроса будет что-то типа такого:
    Код ( (Unknown Language)):
    Период С НачДата По КонДата
    ОбрабатыватьДокументы Проведенные;
    Док = Документ.Реализация.ТекущийДокумент;
    Дог = Документ.Реализация.ТекущийДокумент.Договор;
    Условие (Дог = Договор);
    Что-то типа такого.
    НачДата - Дата, с которой действует договор.
    КонДата - Точка актуальности.
    И еще совет на будущее... Даты можно не передавать не означает, что это хорошо делать. Поверьте, это моветон. Кроме этого, если случаи, когда это будет вызывать значительное торможение системы. Например, в случае с методом ВыбратьПодчиненныеДокументы
     
  13. KateBakly

    KateBakly Active Member

    Регистрация:
    2 апр 2010
    Сообщения:
    28
    Симпатии:
    0
    Спасибо, действительно, здесь нельзя было выбирать по значению.
    Составила запрос, вроде того, что вы написали, только добавила еще группировку по дате.
    Теперь надо получить последнюю в каждой группировке...

    Получила номер и дату последнего документа реализации.
    Но как теперь получить долг покупателя на эту этот последний документ?
     
  14. vbs

    vbs Well-Known Member

    Регистрация:
    18 фев 2007
    Сообщения:
    1.708
    Симпатии:
    3
    Возможны варианты.
    1. Если оплата привязана к расходному документу или договору - это просто (известны даты документа отгрузки и документа оплаты, а в договоре
    может быть глубина кредита, либо она общая для всех - зависит от политики Вашей организации).
    2. Если нет, можно раскручивать общий долг в обратном порядке документов и анализировать состояние взаиморасчетов на позицию каждого расходного документа.
    Я это делаю так (не претендую на абсолютную истину, но заказали мне в одной из фирм именно это) :
    Простой пример :
    Скажем, общий долг контрагента 100 руб. Анализируем последнюю накладную (на 10 руб.), выясняем, что оплата по ней не просрочена, остается для анализа 90 руб.
    Предпоследняя накладная (20 руб.) не оплачена в срок (просрочка 2 дня), начисляем штраф 40коп. и т.д.

    Это позволит СОСЧИТАТЬ штрафные санкции, но никак не ПРЕДЪЯВИТЬ. Vitfil совершенно прав - это прерогатива как минимум арбитражных органов, а то и суда.
     
  15. KateBakly

    KateBakly Active Member

    Регистрация:
    2 апр 2010
    Сообщения:
    28
    Симпатии:
    0
    Спасибо, все получилось, долги рассчитала, процент нашла.
    Теперь не пойму, как документ провести, чтобы он отражался в ведомости по контрагентам...
    Я написала так:
    ДокПроцентыПросрочки = СоздатьОбъект("Документ.ПроцентыПросрочки");
    ПрефДок = "ПП";
    ДокПроцентыПросрочки.Новый();
    ДокПроцентыПросрочки.УстановитьНовыйНомер(ПрефДок + "-");
    ДокПроцентыПросрочки.ДатаДок = ДатаДок;
    ДокПроцентыПросрочки.Контрагент = СпрКонтрА.Наименование;
    ДокПроцентыПросрочки.Договор = ТекДоговор;
    ДокПроцентыПросрочки.Фирма = Фирма;
    ДокПроцентыПросрочки.Курс = Курс;
    ДокПроцентыПросрочки.Валюта = Валюта;
    ДокПроцентыПросрочки.Кратность = Кратность;
    ДокПроцентыПросрочки.Сумма = Сумма;
    ДокПроцентыПросрочки.Записать();
    ДокПроцентыПросрочки.Провести();

    Это надо процедуру ОбработкаПроведения делать?
     
  16. vitfil

    vitfil IT-интегратор

    Регистрация:
    2 апр 2004
    Сообщения:
    2.070
    Симпатии:
    0
    KateBakly
    Попробую повторить свою мысль... Ваши расчеты - это НЕ долг контрагента, а потенциальная задолженность, которая признается за контрагентом либо добровольно, либо принудительно. И только после факта признания она может принимать участие во взаиморасчетах. Если хотите показывать "реальный долг", реализуйте это в виде отчета. Ну, или в форме списка контрагента динамическую колонку добавьте.
     
Загрузка...

Поделиться этой страницей