Отчет по просроченной задолженности/задолженность по интервалам (УПП УТ 8.1, СКД)




Принцип обмена данными из 1С с сайтом (на MySQL) и выдачи (публикации) этих данных по запросу.
PHP-Скрипт автоматической загрузки данных из файла данных в формате CSV в базу данных сайта работающего на WordPress.

В продолжение моей темы: 1С:Альфа-Авто Автосалон Автосервис: обмен с сайтом.
С помощью данного скрипта можно загружать в автоматическом режиме, по расписанию, данные сервисных книжек (ремонтов авто) из 1С:Альфа-Авто Автосалон Автосервис.
Также можно загружать данные в ручном режиме: для этого делается скрытая страница, где размещается специальная кнопка.
Комментарии размещенные внутри скрипта разъяснят логику и порядок действия.
Комментарии с "/////    echo" использовались для отладки.
Дополнительно создана таблица для журналирования результатов загрузки данных.
Скрипт включает в себя защиту от SQL инъекций (думаю безопасность соблюдена в полной мере).
В кратце:
1. Пишется скрипт, который запускает этот.
2. Создается регламентное задание в WordPress, по которому запускается скрипт из п.1. 
3. Этот скрипт осуществляет проверку на существование файла обмена в папке.
4. Если данные не новые, загрузка не производится.
5. Если данные новые, очищается таблица сервисных книжек.
6. Загружаются новые данные.

Собственно сам скрипт:

<?php // Полная загрузка сервисных книжек, создан 2026-01-05 12:44:55

global $wpdb2;
global $failure;
global $file_hist;

/////  echo '<H2><b>Старт загрузки</b></H2><br>';

$failure=FALSE;
//подключаемся к базе
$wpdb2 = include_once 'connection.php'; ; // подключаемся к MySQL
// если не удалось подключиться, и нужно оборвать PHP с сообщением об этой ошибке
if (!empty($wpdb2->error))
{
/////   echo '<H2><b>Ошибка подключения к БД, завершение.</b></H2><br>';
$failure=TRUE;
wp_die( $wpdb2->error );
}

$m_size_file=0;
$m_mtime_file=0;
$m_comment='';
/////проверка существования файлов выгрузки из 1С
////файл выгрузки сервисных книжек
$file_hist = ABSPATH.'/_1c_alfa_exchange/AA_hist.csv';
if (!file_exists($file_hist))
{
/////   echo '<H2><b>Файл обмена с сервисными книжками не существует.</b></H2><br>';
$m_comment='Файл обмена с сервисными книжками не существует';
$failure=TRUE;
}

/////инициируем таблицу лога
/////если не существует файла то возврат и ничего не делаем
if ($failure){
///включает защиту от SQL инъекций и данные можно передавать как есть, например: $_GET['foo']
/////   echo '<H2><b>Попытка вставить запись в лог таблицу</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>$m_mtime_file,'last_size_upload'=>$m_size_file,'comment'=>$m_comment));
wp_die();
/////    echo '<H2><b>Возврат в начало.</b></H2><br>';
return $failure;
}
/////проверка лога загрузки, что бы не загружать тоже самое
$masiv_data_file=stat($file_hist);   ////передаем в массив свойство файла
$m_size_file=$masiv_data_file[7];    ////получаем размер файла
$m_mtime_file=$masiv_data_file[9];   ////получаем дату модификации файла
////создаем запрос на получение последней удачной загрузки
////выбираем по штампу времени создания (редактирования) файла загрузки AA_hist.csv, $m_mtime_file

/////   echo '<H2><b>Размер файла: '.$m_size_file.'</b></H2><br>';
/////   echo '<H2><b>Штамп времени файла: '.$m_mtime_file.'</b></H2><br>';
/////   echo '<H2><b>Формирование запроса на выборку из лога</b></H2><br>';
////препарируем запрос
$text_zaprosa=$wpdb2->prepare("SELECT * FROM `vin_logs` WHERE `last_mtime_upload` = %s", $m_mtime_file);
$results=$wpdb2->get_results($text_zaprosa);

if ($results)
{   foreach ( $results as $r)
{
////если штамп времени и размер файла совпадают, возврат
if (($r->last_mtime_upload==$m_mtime_file) && ($r->last_size_upload==$m_size_file))
{////echo '<H2><b>Возврат в начало, т.к. найдена запись в логе.</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>$m_mtime_file,'last_size_upload'=>$m_size_file,'comment'=>'Загрузка отменена, новых данных нет, т.к. найдена запись в логе.'));
wp_die();
return $failure;
}
}
}
////если данные новые, пишем в лог запись о начале загрузки
/////echo '<H2><b>Попытка вставить запись о начале загрузки в лог таблицу</b></H2><br>';
$insert_fail_zapros=$wpdb2->insert('vin_logs', array('time_stamp'=>time(),'last_mtime_upload'=>0, 'last_size_upload'=>$m_size_file, 'comment'=>'Начало загрузки'));

////очищаем таблицу
$clear_tbl_zap=$wpdb2->prepare("TRUNCATE TABLE %s", 'vin_history');
$clear_tbl_zap_repl=str_replace("'","`",$clear_tbl_zap);
$results=$wpdb2->query($clear_tbl_zap_repl);
/////   echo '<H2><b>Очистка таблицы сервисных книжек</b></H2><br>';
if (empty($results))
{
/////   echo '<H2><b>Ошибка очистки таблицы книжек, завершение.</b></H2><br>';
//// если очистка не удалась, возврат
$failure=TRUE;
wp_die();
return $failure;
}

////загружаем данные
$table='vin_history';         // Имя таблицы для импорта
//$file_hist Имя CSV файла, откуда берется информация     // (путь от корня web-сервера)
$delim=';';          // Разделитель полей в CSV файле
$enclosed='"';      // Кавычки для содержимого полей
$escaped='\

88 Comments

  1. anig99

    Мда… Логика…»Я не знаю, но на всякая случай минус поставлю…». В 8ке в договоре есть галочка «Контролировать число дней задолженности. Рядом с ним есть поле — число дней задолженности.

    Reply ↓
  2. Поручик

    Да, логика. Не читал, но осуждаю.

    (1) Если не знаешь, так действительно, чего лезть. Данный параметр договора используется и в документах, при проведении, если чо.

    Reply ↓
  3. anig99

    Единственное, что может быть — Че неправильно понял фразу «если указан 0, то из параметра «Дней отсрочки по умолчанию».». В данном случае «Дней отсрочки по умолчанию» — это параметр самого отчета, а не справочника Договоры… Просто описалово выдрал из хэлпа. В контексте самого отчета понятнее.

    Reply ↓
  4. CheBurator

    (2) А скажите мне всезнающие люди. При изменении параметра «задолженности/отсрочки» В ДОГОВОРЕ — все данные отчета поплывут или нет?

    Reply ↓
  5. CheBurator

    Непонятливым объясняю.

    Минус влеплен за неподобающее оформление разработки на данной странице. Отсутствие скриншотов существенно затроудняет анализ и выбор требуемой разработки пользователями. Думайте не только о себе, плиз…

    .

    вдогонку (2) > Данный параметр договора используется и в документах, при проведении, если чо.

    — очень сомневаюсь. Использование ПРИ ПРОВЕДЕНИИ документа данных, не сохраняемых в реквизитах документа — признак дурного тона программирования 1С… так что убедительная просьба знающему УТ человеку разъяснить. каким образом этот параметр договора влияет на проведение документа.. плиз..

    Reply ↓
  6. braynt

    КонтролироватьЧислоДнейЗадолженности реквизит объекта. При оперативном проведении документа «Реализация товаров и услуг», при установленном флаге Контролировать число дней задолженности происходит контроль числа дней задолжности.

    Reply ↓
  7. luns

    Сhe Burashka ты не прав… поставлю плюс для равновесия…

    Reply ↓
  8. anig99

    (6) тогда нужно ваять бота, который будет на 80% опубликованых обработок «-» вешать…нетути там скриншотов. А выбор обработки осложняет не отсутсвие скриншотов, а кривые/нестандартизированые интерфейсы. У СКД интерфейс кривой, зато стандартный.

    (6) (вторая половина) вообще не в ту степь. Как указано в (7) реквизит создан 1С (вот такой у них дурной тон (: ). Создан для остановки отгрузки при превышении числа дней задолженности. На содержательную часть проведения документа не влияет — просто не дает проводить оперативно. Вся доработка конфы заключалась только в том, что это реквизит в договоре сделать не только запретительным, но и справочным (не отменяя запретительную функцию). Просто была отменены условия видимости/невидимости этого поля и его обнуления.

    (5) поплывут, но отчет по просроченной задолженности требуется для оперативного анализа. И если даже в фирме заведено так, что изменяются условия УЖЕ заключенного договора (тут, кстати, вообще куча всякой гадости вылезает), а не правильным заключением дополнительных соглашений, то оперативная составляющая отчета тут не повредиться, а продолжит выполнять свою функцию. А если уж так хочется стабильности и независимости, то есть отчет по интервалам, но там уж «одна норма» на всех.

    Reply ↓
  9. anig99

    Поплывут — изменится распределение просроченная/непросроченная задолженность.

    Reply ↓
  10. anig99

    И ещё раз касательно (7). Число дней задолженности именно тот показатель, который требуется для данного отчета. Если в организации используется 2 даты — «дата предупреждения» и «дата запрета», то дата предупреждения или хранится в дополнительном реквизите, или держится в голове. В первом случае я не телепат и пусть кто там дополнительные поля ваял, то отчет и подправит (все открыто и понятно). А во втором — или отчет по интервалам, или добавка 1 строчки с обнулением в код отчета.

    Reply ↓
  11. CheBurator

    Господа, скажите, плиз, есть в документе заявка/отгрузка реквизит типа «дата оплаты»…???

    Reply ↓
  12. anig99

    В заявке есть 2 реквизита Отгрузка и Оплата…а в отгрузке…точнее реализации товаров и услуг и реализации отгруженных товаров таких параметров и не было (токо что ещё раз проверил… не… точно нет (% ). Весь смысл этого отчета получить задолженность вне зависимости от ведения расчетов по заказам/сделкам и ошибок закрытия заказов/сделок… Если в организации правильно ведется учет по сделкам, то этот отчет не нужен, достаточно стандартных средств 1с. Должен напомнить, что много уже говорилось о «идеальном» предприятии 1с и реальности. Актуальный и достоверный отчет по логике 1с требует ежечасного контроля над взаиморасчетами.

    Reply ↓
  13. Поручик

    >>>> Актуальный и достоверный отчет по логике 1с требует ежечасного контроля над взаиморасчетами.

    И здесь подписываюсь. Особенно если несколько элементов договоров, и необходимо

    следить за правильной расстановкой в платёжных, отгрузочных доках.

    Reply ↓
  14. Поручик

    Сам отчёт пока не юзал, сейчас нет возможности, типа не читал, но одобряю. Но за идею плюс. По возможности посмотрю работу.

    Reply ↓
  15. anig99

    (16) Календарные дни. Традиционно используем только календарные, поэтому писать алгоритм расчета банковских дней только как «плюшки», не хотелось. Если очень нужно, подскажи алгоритм, добавлю.

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

    (17) Долг расчитывается по алгоритму схожему с FIFO. Подробнее. Находится общая сумма долга (по контрагенту, договору, сделке). С конечной даты в обратном порядке перебираются все документы взаиморасчетов. Документы увеличивающие задолженность уменьшают сумма нераспределенной задолженности и так до нуля. Попутно заполняются данные сумма долга, сумма просроченного долга, оплата (оплата не привязана к документу реализации, нужна справочно, чтобы видеть что по клиенту есть движения) и т.д. В результате имее таблицу с документами, которую передаем в СКД. Таким образом, мы не зависим от распределений сумм средствами 1с.

    Reply ↓
  16. anig99

    возвраты в этом случае — уменьшают задолженность.

    Reply ↓
  17. ZLENKO

    (20) Я в своем отчете по просроченной задолженности недавно реализовал расчет отсрочки по календарным либо рабочим дням и разбиение суммы документа на предоплату и отсрочку по % предоплаты в договоре — кому надо — обращайтесь.

    Reply ↓
  18. ZLENKO

    (22) да — про него

    Reply ↓
  19. ZLENKO

    (24) 🙂 Вообще то у меня ник «Z», но тут на инфостарте надо было минимум 3 символа — пришлось дополнить. Позднее придумал такой вариант «Z-z-z» — мне он показался более прикольным.

    Reply ↓
  20. looxxx

    как настроить отчет чтобы показывал группировку по дням, неделям или месяцам?

    Reply ↓
  21. anig99

    А что именно? Просроченный долг или интервалы?

    Reply ↓
  22. MariP

    ПЛЮС!!!

    Есть клиенты с разными отсрочками, поэтому очень пригодится отчет.

    СПАСИБО

    Reply ↓
  23. macsol

    Протестировал твою обработку. делал так: создал переменную счетчик, и при каждой команде Запрос.Выполнить(), увеличивал её на 1.

    Результат 2 248 ( и возможно я еще не все запросы обложил счетчиком).

    Это не иначе как изнасилованием сервера не назовешь. Впечатление жуткое. Все эти данные можно получить с помощью одного запроса и нескольких строчек кода.

    Я изменил свою обработку, посмотри.

    Reply ↓
  24. anig99

    Количество запросов равно количеству контрагентов(договоров). Можно заменить и на 1 запрос, но тогда придется хранить ВСЮ таблицу взаиморасчетов для этих контрагентов в виде таблицы значений и оттуда уже выбирать нужное. Вопрос только что же всё-таки лучше: 1 большой запрос или много маленьких. Между прочим, мой код открыт — можно модифицировать в сторону уменьшения кол-ва запросов.

    Кроме того, показателей всё-таки у меня поболе, чем в твоей. Но это не минус тебе.

    Reply ↓
  25. macsol

    (30) По запросам. Один большой — выполняется 1.5 секунды. Если сунуть туда отборы меньше.Напомню что база данных предназначается не для разработчика а для бухгалтеров, по этому при программировании необходимо понимать что ты не один. Если все начнут писать запросы в циклах, мы за день всем заводом будем проводить один документ.

    ВСЯ таблица взаиморасчетов — хранится в оперативке, у меня окромная база, а результат запроса всего 9000 строк(если без отборов). Для клиентской машины средней производительности — как два пальца … (Опять же стоит подумать о других пользователях и не перегружать их машины)

    На мой взгляд, в реализации этой задачи, ты изначально пошел не тем путем, поэтому (это только мое мнение) проще заново сделать чем модифицировать.

    А код я закрыл, потому что в предыдущем случае ты не нашел в нем ничего нового и интересного..

    Reply ↓
  26. anig99

    (: Посмотрим (: Весь код писался именно под легкость модификации.

    Reply ↓
  27. macsol

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

    Reply ↓
  28. anig99

    Я пошел в другом направлении. Всё в одном запросе. Через пакетные запросы. В чистом виде пока быстрее, чем у тебя.

    Reply ↓
  29. macsol

    (34) Ты пошел в моем направлении 🙂

    Reply ↓
  30. looxxx

    (27) просроченный

    Reply ↓
  31. anig99

    (36) Там участвуют два основных параметра связанных с датой — число дней просроченной задолженности (и его производные) и дата регистратора. Какой именно параметр группировать в периоды? Или чтобы было — вот этот долг возник в таком-то месяце, это в таком-то и т.д.? Можно добавить поле, которое вычисляет дату возникновения долга и группировать по нему с периодом в месяц, день и т.д. Просто не возникало задач по группировке просроченной задолженности по периодам вообще, поэтому точное описание требуется.

    Reply ↓
  32. macsol

    Как ты считаешь нарастающий итог, если несколько документов по одному договору проведены в одной секунде? Я на этом голову сломал.

    Reply ↓
  33. macsol

    Плюс я поставил за смену подхода.

    Есть недоработки

    1 Проверяй запрос ( остаток на дату отчета у некоторых контрагентов не сходится с ведомостью по взаиморасчетам и с остатком по регистру «В-ты с к-ми» на дату.

    2 Желательно получать данные в разрезе организаций, потому как часто в одной базе несколько организаций.

    Reply ↓
  34. anig99

    (38) Дополнительной проверкой по ссылке.

    ВЫБОР

    КОГДА ПериодыРегистратор.Период < УвеличениеРегистратор.Период

    ТОГДА ИСТИНА

    ИНАЧЕ ВЫБОР

    КОГДА ПериодыРегистратор.Период = УвеличениеРегистратор.Период

    ТОГДА ПериодыРегистратор.Регистратор <= УвеличениеРегистратор.Регистратор

    ИНАЧЕ ЛОЖЬ

    КОНЕЦ

    КОНЕЦ

    Reply ↓
  35. anig99

    (39) 1. Это особенности реализации подхода. Сегодня-завтра выведу закономерности и на примерах покажу.

    2. учту. Я этот запрос мучаю для второй версии отчета.

    Reply ↓
  36. anig99

    ВАЖНОЕ ЗАМЕЧАНИЕ! Если у Вы думаете, что общая задолженность по моему запросу не совпадает с ведомостью по взаиморасчетам и отчетом по задолженности, то вы скорее всего ошибаетесь. Объясню почему. Дело в том, что типовые отчеты построены так, что вне зависимости какую группировку Вы выбираете (контрагент, договор и т.д.), те отборы, которые включены (например Сумма>0) действуют на нижнем уровне самого отчета, а не на выбранной группировке.

    Ситуация. У контрагента есть два договора А и Б, взаиморасчеты по которым ведутся вцелом по договору(можно и по-другому, просто пример легче). По первому договору у клиента долг 100 000, по второму переплата 50 000. Теперь пробуем получить ведомость по взаиморасчетам. Выберем группировку по договорам — выйдет всё красиво и верно. Теперь выберем группировку только по контрагентам — в результате получим цифру 50 000 долга — опять верно. А теперь добавим условие сумма остатка >0 и бац!!!! Остаток — 100 000! Как! Почему! А потому, что сначала фильтруются записи, а потом строится группировка. Такая же фигня для отчета по задолженностям… Видимо, чтобы такая фигня не бросалась в глаза из отчета по взаиморасчетов убрали возможность получать отчет в разрезе документов-регистраторов.

    Как же проверить данные? Нужно не задавать отборов на сумму, а получить отчет сгруппированый как нужно и кинуть его в ексель или calc чтобы убрать суммы меньше 0. Ну или написать свой отчет с нужными группировками (:

    Reply ↓
  37. Valerich

    плюсанул.

    Маленький совет

    вместо

    стр1.ВидСравнения=стр.ВидСравнения;

    стр1.Использование=стр.Использование;

    стр1.ЛевоеЗначение=стр.ЛевоеЗначение;

    стр1.ПравоеЗначение=стр.ПравоеЗначение;

    стр1.Представление=стр.Представление;

    стр1.Применение=стр.Применение;

    стр1.РежимОтображения=стр.РежимОтображения;

    и т.д. проще использовать ЗаполнитьЗначенияСвойств( Стр1, Стр ) — больше шансов, что ничего не пропустишь 🙂

    Reply ↓
  38. anig99

    спасибо. это мой первый опыт работы с скд, поэтому отлавливать баги так было легче, но исправлю

    Reply ↓
  39. anig99

    (46) Конечная дата нужна для получения дополнительных данных (оплата за период и продажи за период) — с получением долгов никак не связано.

    Во втором отчете — демонстрация запроса. Никакой гибкости не предусмотрено. Просто я пересмотрел алгоритм и переделываю основной отчет. Причем не только алгоритм, но и юзабилити, и функционал, поэтому его ещё здесь нет.

    Да, там выводы в виртуальные таблицы. Но отчет структурирован, если хочешь скину в личку описание алгоритма, если ж не смог разобраться.

    (45) Настройки очень просты. Если ты хоть немного разбираешься в СКД. Галочки у параметров не меняем, сами параметры менять можно. Чтобы отобрать контрагентов — задаем отбор по контрагентам (любой отбор без групповых условий). Задаем нужные группировки и вперед. Если хочешь, чтобы менеджеры не мучались, то создаешь все настройки — сохранеяшь их в xml (чтобы не потерялись) и вперед. У меня менеджеры просто нажимают кнопку.

    (45) описал мой первый алгоритм. Второй быстрее.

    Reply ↓
  40. ZLENKO

    (46) (47) Вот поэтому я и пользуюсь для написания отчетов платформой универсального отчета, а не СКД — настройки универсального отчета понятные, привычные пользователям и очень «гибкие».

    Reply ↓
  41. anig99

    (48) На самом деле почти одинаковые что универсальный, что СКД. Только расположение элементов разное (можно поправить). Те кто РАЗБИРАЕТСЯ в универсальном, разберется и в СКД. А кто запоминает — будет дальше тренировать память. С другой стороны, я сейчас в СКД вынес основные настройки на закладку формы. А остальное… тут сидят такие, что и в универсальном не разберуться. Поэтому готовлю инструкцию по использованию СКД.

    Reply ↓
  42. ZLENKO

    (34) А по сравнению с моим отчетом у Вас быстрее ?

    Reply ↓
  43. anig99

    (50) на моей базе УПП — мой отчет намного быстрее… даже по 1 клиенту. Брал демо отчет

    Reply ↓
  44. ZLENKO

    (51) Хм.. а в цифрах «намного» как выражается ?

    Reply ↓
  45. ZLENKO

    Посмотрел новый запрос — суть не «вкурил», но количество создаваемых временных таблиц впечатлило.

    Reply ↓
  46. anig99

    (52) минут 10 твой отчет точно получается.

    (53) как раз эти временные таблицы и оптимизируют расчеты.

    Reply ↓
  47. ZLENKO

    (54) что то тут не то… по всем контрагентам (на реальных базах за 2 года работы компаний) я не видел чтобы больше 30 секунд строился. Сколько документов по контрагенту ?

    Reply ↓
  48. anig99

    (55) база больше 3 лет. сколько документов не знаю. позже погоняю ещё отчет — ща сервера заняты

    Reply ↓
  49. Alex_will

    доработаю под БП….такое же надо…но толкового на сайте не нашел

    Reply ↓
  50. ZLENKO

    (57) Чем мой отчет не устраивает ? При желании его можно переделать под БП.

    Reply ↓
  51. Alex_will

    (58) я ж написал что «доработаю под БП». не нашел готовый под БП

    Reply ↓
  52. Yul_kat

    А как сделать отбот по организации?

    Reply ↓
  53. Yul_kat

    отбор

    Reply ↓
  54. anig99

    (60). В какой именно обработке? В принципе, ни в одной из этих не предусморен учет нескольких организаций, но доработать их можно. Но реализованы они по разному, поэтому и нужно знать версию.

    Кроме того, есть платная версия, где организации учтены и есть много чего ещё.

    Можно в личку.

    Reply ↓
  55. murin

    Пользуюсь этим отчетом, неплохой отчет. Плюс поставил. Добавлял группировку по договорам (после контрагентов) и делал отбор по «виду договора» — выходит ошибка :(, а если добавляю группировку «виду договора» в верхний уровень, то отбор работает.

    Reply ↓
  56. anig99

    (63)Отчет бесплатный и узкоспециализированый. Проблема скорее всего в неправильной отработке предварительного отбора.

    Reply ↓
  57. anig99

    (63) попробуйте «Новый запрос».

    Reply ↓
  58. WKBAPKA

    а как насчет «развернуть по иерархии»… задача простая, нужно вывести контрагентов, договора контрагентов, сделки и документы расчета + регистраторы по которым есть долг и разбросать этот долг между текущей просроченной и лояльной с учетом итогов по иерархии… что то в ваших реализациях я этого не увидел…

    Reply ↓
  59. anig99

    (66) в полной версии это возможно. http://infostart.ru/public/21672/

    Reply ↓
  60. Ant-1905

    спасибо, понравился отчетик! 😉

    Reply ↓
  61. WKBAPKA

    а если использовать простой алгоритм… делаем запрос по долгам и группируем по дням. опосля чего используем следующую формулу, отсчитываем количество дней отсрочки и смотрим, если остаток на конец больше чем остаток на начало + кво дней отсрочки за который могла быть отгрузка, значит просроченная дебеторская задолженность все же есть… т.е. идея такая, что остаток на конец всегда должен стремиться к нулю! немного сумбурно, но приблизительно идея понятна?

    Reply ↓
  62. anig99

    (69) идею пока не вкурил. можно поподробнее формулу на языке математики или алгоритм.

    Reply ↓
  63. WKBAPKA

    2(70): допустим есть договор с отсрочкой платежа в 7 дней. отгрузили товар. через 7 дней товар должен быть оплачен. соответственно через 7 дней долг должен равняться нулю. Но так как в этот период могут быть еще отгрузки, а также оплаты, то сумма долга на конец должна быть меньше суммы долга на начало (т.е. конец период — 7 дней) + отгруженный товар за этот период, что означает, что в этот период было уменьшение долга, т.е. он не вырос. Если сумма долга больше — это и есть просроченный долг. Правда тут не подсчитать количество дней просрочки, вернее можно, но нужно ли !

    Reply ↓
  64. WKBAPKA

    соответственно если на конец есть остаток, а за период не было отгрузок и остаток на конец = остатку на начало, то тоже считается просроченным долгом, т.к. за этот период отсрочки долг не уменьшился

    Reply ↓
  65. anig99

    (72) Ага. Тогда 4 замечания:

    1. Таким способом можно получить только сумму просроченного долга, но никак не его структуру и свойства.

    2. Алгоритм проверки можно сократить. В Вашем случае получаем Сумма долга на дату -7дней, сумма отгрузки и сумма долга на текущую дату. Можно обойтись суммой долга на дату -7дней и суммой оплаты за этот период. Т.е. Просроченный долг = СуммаДолга[-7д] — СуммаОплатыЗаПериод[7д]

    3. Без кодинга такой подход можно реализовать только в рамках СКД — параметрическая связь НаборовДанных (как в отчете по продажам в определенных ценах)

    4. Алгоритм невозможно модернизировать для случаев, когда количество дней просрочки устанавливается для каждого документа разные

    Reply ↓
  66. WKBAPKA

    2(3): без кодинга действительно нельзя. Зато одним запросом.

    по поводу п.4 как раз этот алгоритм и применяется когда количество дней просрочки либо в договоре либо в документе могут быть разные.

    по понкту 2, не можем. Особенно, если отсрочка устанавливается для каждого документа,а платежи не разносятся по документам!

    можно также высчитать и глубину долга…

    Reply ↓
  67. WKBAPKA

    т.е. я хотел сказать, что разница между началом и концом показывает нам увеличение/уменьшение долга… а это могут быть как проплаты, так и возвраты и т.п. без кодирования не обойтись как раз потому, что для каждого договора могут быть разные условия отсрочки, и делать на каждого клиента запрос можно было бы, помещая во временную таблицу, только вот как быстро это будет работать?

    Reply ↓
  68. ivan07

    Отчет пригодился нашим бухам, Спасибо большое

    Reply ↓
  69. evgeniy.bilyk

    Спасибо, полезный отчет, пригодился

    Reply ↓
  70. francisco

    Попробуем, должно быть не плохо.

    Reply ↓
  71. volga1

    Возможно посчитать просрочку по такой схеме с помощью запроса?

    Пример:

    период 01.04.2012 по 20.05.2012

    Контрагент (Число дней допустимое 14)

    Сумма долга начало -100р

    Реализация №1 от (01.04.2012) 200р просрочено 21день

    Реализация №2 от (05.05.2012) 150р не просрочено

    Приходник №1 от (05.05.2012) -150р

    ВозвратТовара №1 от (06.05.2012) -100р

    получается только к концу периода просроченные реализации видно а как в течении периода просроченные реализации видеть как здесь

    этот пример за период не показывает просрочку по фифо, нужно чтобы Реализация №1 показывалась как просроченная(хотя и оплачена но с опозданием на 21день).

    Какой должен быть алгоритм запроса?

    Reply ↓
  72. anig99

    (80) я это сделал объединяя отчеты за каждый день периода (программно) в одну таблицу.

    Reply ↓
  73. volga1

    (81)

    Вы предлагаете не запросом это реализовать, то есть запросом не реально?

    Reply ↓
  74. anig99

    (82) мой запрос основывается на регистре взаиморасчеты с контрагентами, который не подразумевает закрытие по документам расчета. По нему можно узнать остатки и движения, но не какой документ и когда был оплачен. Запрос действует из предположения, что документы закрываются по фифо, но сам расчет фифо не производит, а только получает однозначно ещё не закрытые по оплате документы. Получать данные о долгах в разрезе периода можно только имея информацию о том, когда реализация была оплачена. Это возможно 2 способами:

    1. написать простой отчет по регистру взаиморасчеты по документам расчетов, но для этого регистр нужно всегда держать в порядке

    2. получить неоплаченные долги за каждый день периода и уже эти данные объединить в 1 таблицу, которую можно проанализировать дальше.

    Reply ↓
  75. volga1

    (83)

    1.(взаиморасчеты по документам расчетов) — не приемлемо т.к. договоры не учитываются, контрагент может покупатель и поставщик одновременно быть, даже число дней на контрагента прописал.

    2 вариант попробую.

    Ваше мнение — если в регистр (взаиморасчеты с контрагентами) добавить ресурс или вообще новый регистр создать и документами в него расчет делать а после для отчета данные брать из него?

    Reply ↓
  76. anig99

    (84) зачем что-то дописывать в конфе? Напишите обработку, которая будет рассчитывать взаиморасчеты по fifo и писать их в регистр взаиморасчеты по документам расчетов. Т.е. у Вас будет отключен основной механизм движения по этому регистру, но Ваша обработка будет писать туда данные как нам нужно по fifo с привязкой по документам. При ручном перепроведении этого документа движения пропадут и таким образом можно будет вычислять период, с которого нужно делать перерасчет (граница последовательности). Если же менять конфу, то можно точно также обойтись этим же регистром и подпиской на событие запись документа. Тогда движения не будут пропадать при ручном перепроведении, но надо будет где-нибудь хранить границу последовательности.

    Reply ↓
  77. volga1

    (85)

    Сделал (просрочка в течении периода просроченные не оплаченные и просроченные оплаченные реализации видно)

    Reply ↓
  78. mari0210

    надо для бюджета((((((кредиторскую и дебиторскую просроченную задолженность в разрезе договоров….очень надо….не могу найти…

    Reply ↓
  79. Ламия

    Большое спасибо автору

    Reply ↓
  80. zforall

    Отличный отчет. Только я не могу почему-то настроить вывод по договорам контрагента. Подскажите, пожалуйста как расположить группировки чтобы увидеть данные по договорам.

    Reply ↓
  81. anig99

    (90) чтобы заработало по договорам нужно указать в настройках, которые на закладке отдельное, группировка: по договорам (выпадающий список). Это сформирует исходные данные для отчета в разрезе договоров, а не контрагента. После этого нужно в настройках, которая по кнопке сверху (открывается отдельное окно) добавить в группировку внешнего вида отчета Договор контрагента.

    Reply ↓
  82. zforall

    Подскажите в каком направление надо рыть чтобы отчет считал не по календарным а по банковским дням. Заранее спасибо.

    Reply ↓
  83. anig99

    (92) в этом отчете нет такой настройки. В более поздних вариантах, которые я не публиковал, есть привязка к производственному календарю, что и дает банковские дни.

    Reply ↓
  84. zforall

    И как же можно получить для тестирования неопубликованный вариант? 🙂

    Reply ↓
  85. anig99

    (94) попробую на выходных выслать. Скиньте почту в личку.

    Reply ↓
  86. mr_AntA

    Можно ли переделать так, чтобы показывал не только долги, но и переплаты?

    Reply ↓
  87. anig99

    (96) Вообще — можно. Через какое-то время буду писать такой отчет. Когда точно — не скажу, но до нового года, скорее всего

    Reply ↓
  88. 028

    Как сделать чтобы отчет учитывал остатки перенесенные с прошлого года

    в базе они отражаются через документ ввод начальных остатков? Раздел учета: Расчеты с покупателями и заказчиками (счета 1210, 3510)

    Reply ↓

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *