Имя: Пароль:
1C
1С v8
УТ 10.3 просчёт просроченной задолжности
, ,
0 dkonakov
 
05.11.15
10:31
Добрый день, коллеги.
Подскажите, не могу придумать алгоритм.
в договоре клиента стоит галочка Контролировать количество дней задолженности. РН Взаиморасчеты по документам расчета не используется в силу некоторых причин. Документы у клиентов с просроченной задолженностью проводятся руководителями.
Нужно подсчитать, сколько раз за период клиент нарушал условия договора.
Контроль задолженности 5 дней.
1.01.2015 Реализация1 5000.
2.01.2015 Реализация2 1000.
3.01.2015 Оплата1     1000.
Соответственно через 5 дней после 1 реализации просроченная задолжность составит 4000 р. Это считается нарушением.
Нужно посчитать нарушения, допустим за год. Подскажите, как можно?
1 Джинн
 
05.11.15
10:46
Накак. Документы уже закрыты, поезд ушел.
2 marty0701
 
05.11.15
10:47
(0)Если взаиморасчеты ведутся по договору и он договор тупо "основной", то думаю никак не сделать, тут вопросов больше, чем ответов. Если только клиент прямо всегда платит РОВНУЮ сумму по документу реализации, то можно как-то привязаться к суммам, иначе, ИМХО, хрен посчитаешь, предоплаты там всякие, суммы не ровные и тд и тп.
3 marty0701
 
05.11.15
10:49
(2)+ Клиент всегда платит после отгрузки. Более-менее вменяемо получиться, привязался к суммам, и смотри по документам отгрузки, когда такая сумма пришла, считай разницу дней и выдавай за просрочку, если итаковая имеется. Но это _очень_ частный случай.
4 Скай
 
05.11.15
10:51
Цикл, перебор документов, просчет, победа.
ps не хотите напрягаться (вести по документам расчетов) - страдайте
5 dkonakov
 
05.11.15
11:02
(2) клиент платит как приходится на самом деле. Часто не доплачивает 10, 20 рублей. Так что к суммам не привязаться. (4) вот как раз таки я и прошу подсказать цикл перебора документов.
6 Михаил Козлов
 
05.11.15
11:21
(5) "Промоделировать" по регистру взаиморасчетов отгрузки-оплаты (выстроить их в хронологическом порядке).
В качестве "подсказки" можно взять отчет по дебиторке по интервалам.
7 marty0701
 
05.11.15
16:35
(5)Тогда ответ очевиден, он в (1), цитирую "Никак"(ц)Джинн.
8 cw014
 
05.11.15
16:37
Если конфа для редактирования доступна - можешь парарлельный регистр ala по документам расчетов сделать и в нем ежемесячно транслировать записи взаиморасчетов с закрытием документов движения. Ну и отчеты писать для этого отдельно
9 cw014
 
05.11.15
16:37
Есть у меня такая разработка
10 marty0701
 
05.11.15
16:39
(8)Может ему просто вести учет по документам расчетов? Чем указанная разработка лучше/проще, чем типовой механизм? Куда уж проще, при оплате указывать документ...
11 Скай
 
05.11.15
16:56
(10) можно сделать, что документы автоматом по фифо будут закрываться в этом регистре. Проще потом отчеты строить. Ты сам лично пробовал разносить платежи "по документам расчетов" хотя бы пару дней? Особенно когда это какой-то оптовый покупатель с большим количеством счетов, и не факт, что он корректно указал, что оплачивает, и указал ли вообще. А потом указал один и тот же счет в двух платежках. А потом попытался по этому сделать возврат. С возвратам отдельная история.
Со стороны схема выглядит удобной, но когда начинаешь пытаться ее на практике эффективно использовать, выползают подводные камни. Ну очень аккуратно все указывать, иначе каждый день будешь объяснять "а чо это у нас тут отгрузка закрылась, нет же долга в целом!"
12 Ildarovich
 
05.11.15
19:25
Это стандартная задача на нарастающий итог. На Инфостарте можно поискать "нарастающий итог" или ФИФО. Если запросом. Если все равно как, то в статье "Минимализмы" http://catalog.mista.ru/public/306536/ в задаче 7 "Связывание таблиц значений по ФИФО" приведена функция из 12-ти строчек, решающая эту задачу. В комментариях есть одно уточнение.
13 Джинн
 
05.11.15
19:41
(12) Расскажите нам тут как этой "стандартной задачей" ответить на вопрос автора "Нужно подсчитать, сколько раз за период клиент нарушал условия договора".

Присутствующие хоть читают сабж перед тем, как всякую херню писать?
14 torgm
 
05.11.15
20:59
(0)  сделай параллельный регистр по взаиморасчетам с закрытием по фифо. Там Делов то максимум на день.
15 Ildarovich
 
06.11.15
22:28
(12) Рассказываю. Вот код, решающий данную задачу:

Функция СвязываниеПоФИФО(А, Б, ё = 0, ж = 0)
    Результат = НоваяТаблицаЗначений("Период1, Документ1, Период2, Документ2, Сумма");
    Пока ё < А.Количество() И ж < Б.Количество() Цикл
        Сумма = Мин(А[ё].Сумма, Б[ж].Сумма);
        ЗаполнитьЗначенияСвойств(Результат.Добавить()
        , Новый Структура("Период1, Документ1, Период2, Документ2, Сумма"
        , А[ё].Период, А[ё].Документ, Б[ж].Период, Б[ж].Документ, Сумма));
        А[ё].Сумма = А[ё].Сумма - Сумма;
        Б[ж].Сумма = Б[ж].Сумма - Сумма;
        ё = ё + (А[ё].Сумма = 0);
        ж = ж + (Б[ж].Сумма = 0)
    КонецЦикла;
    Возврат Результат
КонецФункции

//таблица Дано содержит колонки: Период, Операция, Документ, Сумма
Процедура КнопкаСформироватьНажатие(Кнопка)
    //отбираем реализации в отдельную таблицу
    Реализации = Дано.Выгрузить(Новый Структура("Операция", "Реализация"));
    //отбираем оплаты в отдельную таблицу
    Оплаты = Дано.Выгрузить(Новый Структура("Операция", "Оплата"));
    //балансируем таблицы, добавляя туда куда нужно строку с недостающей суммой
    Невязка = Оплаты.Итог("Сумма") - Реализации.Итог("Сумма");
    Если Невязка > 0 Тогда //оплат было больше
        ЗаполнитьЗначенияСвойств(Реализации.Добавить()
        , Новый Структура("Период, Сумма", НачалоДня(ТекущаяДата()), Невязка))
    ИначеЕсли Невязка < 0 Тогда
        ЗаполнитьЗначенияСвойств(Оплаты.Добавить()
        , Новый Структура("Период, Сумма", НачалоДня(ТекущаяДата()), -Невязка))
    КонецЕсли;
    //связываем реализации с оплатами по ФИФО
    Реализации.Сортировать("Период");
    Оплаты.Сортировать("Период");
    Связи = СвязываниеПоФИФО(Реализации, Оплаты);
    //подсчитываем просрочки
    ЧислоПросрочек = 0;
    Для Каждого Связь Из Связи Цикл
        ЧислоПросрочек = ЧислоПросрочек + (Связь.Период1 + 24 * 60 * 60 * ДнейОтсрочки < Связь.Период2)
    КонецЦикла
КонецПроцедуры

//общие процедуры и функции
Функция НоваяТаблицаЗначений(ИменаКолонокЧерезЗапятую)
    Результат = Новый ТаблицаЗначений;
    Для Каждого Элемент Из Новый Структура(ИменаКолонокЧерезЗапятую) Цикл Результат.Колонки.Добавить(Элемент.Ключ)
    КонецЦикла;
    Возврат Результат
КонецФункции
16 User_Agronom
 
07.11.15
11:35
(1) Чушь. Если есть документы реализации с датой и документы оплаты с датой, то подсчитать можно.
Штатными методами, конечно, нельзя. Но написать алгоритм можно.
(8) ...Если конфа для редактирования доступна...
Вам во франч - будете ценным работником. Там все спецы на каждый чих конфу вскрывают. Причём полностью!
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой