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




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

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

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

<?php // Полная загрузка сервисных книжек, создан 2025-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='\

99 Comments

  1. anig99

    (1,2) угу… манагерам — да. А где написано, что это только манагерам. Фишка отчета, что настроить его можно для разных пользователей. Топ-менеджерам именно такой анализ и нужен. Да и эффективность работы менеджеров оценивать тоже не по 3 этим показателям можно. Если бы я его от балды рисовал, тогда бы платно не делал, а этими показателями реально пользуются. Сложно как-то оценивать работу предприятия каждую неделю, если контрагентов за 100, а то и за 500. Манагеры-то разберут этих 500 на приемлимое кол-во и будут их контролировать по штучно. А вот всех сразу смотреть — это тот ещё гимор. Вообще см. статью мою по показателям. Всё действительно лежит на поверхности. Я, конечно, был немного разочарован, что эту тему подняли до меня, но подняли только в форуме и нашел я это после окончательного формирования методики. Но был рад что думал в правильном направлении. Так что читай статью и ссылки на форус cfin — не самый последний сайт по финансовому анализу.

    Оплата за период и продажи за период позволяют быстро оценивать размеры долга. может должен он 1 000 000, а за месяц оплатил 10 000 000 — так не такой он и страшный этот кредитор, как который 100 000 должен , а оплатил 100 рублей.

    Опять-таки сравнения за периоды… Можно и вручную делать. Получил 2 отчета кинул в ексель и… пишешь формулы, чтобы сравнить эти две таблицы…муторно. А уж динамику смотреть — так вообще… 30 раз тыкнуть.

    Опять-таки для фин службы и бухгалтерии — по контрагентам долг 50000 тыс.р, а по договорам 1 000 000… чего-то тут не так…Ага. здесь посадили оплату не тот договор, здесь можно взаимозачет предложить — глядишь и НДС с авансов много меньше.

    Вывод расшифроки в отдельной вкладке — не плодит окон в 1с.

    Настройки можно сохранять ВНЕ 1с. Я теперь не заморачиваюсь — в какой базе сижу, за каким компом, под чьим пользователем — файл настроек у меня расшарен или на флешке. Загрузил его и получай отчет.

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

    Ну кредиторская задолженность — тут всё ясно.

    Дальше — отчет сам по себе быстрый.

    З.Ы. Да… и на будущее… У меня высшее экономическое.

    Reply
  2. anig99

    Да… чуть не забыл.

    Долг по таре — регистр Товары переданные (ну назвал я его так, т.к. где стояла задача, шло 99% тары по этому регистру) — очень полезная штука и для манагеров тоже.

    Reply
  3. wirg

    Вещь конечно хорошая, только скд для пользователя не очень понятная. поэтому лучше бы на построителе в конструкторе смастерил, там отборы и группировки лучше видно. Данный отчет нужен многим, только не все готовы платить, поэтому пользуются стандартным отчетом по кредитной линии. Цена в 2500рублей может быть и оправдана, если у тебя форма настроек отчета удобная, хотя на скд группировки самому ставить струдно, а пользователь плюнет и покупать не будет. так что работаем дальше

    Reply
  4. anig99

    (5) это всё условно. не стали бы 1с мастерить СКД. И с 7.7 народ переходил жаловался «как всё сложно!».

    1.На самом деле научиться работать в СКД несложно. Но если человек не понимает в универсальном отчете, но есно не поймет и в СКД.

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

    3.В планах написание упрощенной инструкции по СКД (если не найду такую раньше

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

    5. У меня люди работают и нормуль все. Недавно отосылал вариант вообще без инструкций (только с 3 настройками). Прекрасно разобрались и сделали свою простую настройку.

    Reply
  5. anig99

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

    Reply
  6. Поручик

    (6)

    >>> а уж галочки где нужно ставить и какие поля, чем заполнять — нужно быть полным дебилом, чтобы не понять

    Или бухгалтером или менеджером в нашем ОП. Вот уже где дятлиный рай, в котором я уже третий год парюсь.

    Reply
  7. anig99

    у нас тоже хватает таких… они даже не записывают.

    Reply
  8. ZLENKO

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

    Поставил «+» за качественный подход к вопросу. А то много тут понавыкладывали — за 5 минут наваяли что то непонятное — только замусоривают.

    Reply
  9. ZLENKO

    Добавьте еще вариант «Платежный календарь» — посмотрите как у меня сделано. Если у вас есть дата возникновения задолженности и сумма возникшей задолжнности — это просто группировка по дате возникновения задолженности.

    Reply
  10. ZLENKO

    «Есть несколько фишек (банковские и календарные дни… .), которые пока невыгодно реализовывать, но реализовать можно.»

    У меня это реализовано, но пользуется только (насколько я знаю) один заказчик.

    В список возможных «фишек» можно добавить учет % предоплаты по документу отгрузки (т.е. когда, например, 30% суммы реализации клиент должен оплатить сразу). У меня тоже это реализовано, но тоже редко спрашивают.

    Reply
  11. anig99

    (13) вот про банковские дни и говорю, что невыгодно — пока не попросят делать не буду (:

    Про процент предоплаты — это скорее нужно дорабатывать проверку перед реализацией…Хотя менеджерам видеть таблицу, кто сколько заплатил по заказу — тоже гуд. подумаю.

    (12) зыркнем

    Reply
  12. ZLENKO

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

    Reply
  13. Поручик

    Блин, код модуля закрыт, а автор мне этим отчётом башню морозил в личке. Не буду плюсовать.

    Reply
  14. anig99

    (16) гы… я не специально… я забыл снять (:

    Reply
  15. anig99

    (16) уже снял

    Reply
  16. ZLENKO

    Жадный народ — качает — плюсов не ставит…

    Вот и делай бесплатные отчеты 🙁

    Reply
  17. Igor123456

    Отличный отчет, помог, наконецто верные цифры!!!+

    Reply
  18. pp77

    не учитывает допустимое число дней задолженности из договора

    договор: допустимое число дней задолженности = 5, без документов расчета.

    реализация: 23.05.09.

    параметры отчета: дата долга = 31.05.09, начальная дата = 01.04.09.

    Выводит: просрочено дней = 8, хотя должно быть 3 (31-23-5).

    из свойств контрагента если брать, то считает нормально

    Reply
  19. anig99

    (21) Какой уровень группировки у отчета? Контрагент, договор, сделка? Сколько договоров у контрагента? Какая конфигурация? Насколько изменена конфигурация в части справочники Договора?

    Попробуйте в консоли посмотреть результат запроса

    ВЫБРАТЬ

    МИНИМУМ(ДоговорыКонтрагентов.ДопустимоеЧислоДнейЗадолженности) КАК ДопустимоеЧислоДнейЗадолженности,

    ДоговорыКонтрагентов.Владелец

    ИЗ

    Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов

    ГДЕ

    ДоговорыКонтрагентов.ДопустимоеЧислоДнейЗадолженности <> 0

    И ДоговорыКонтрагентов.Владелец.Ссылка В ИЕРАРХИИ(&Контрагент)

    И (НЕ ДоговорыКонтрагентов.ДопустимоеЧислоДнейЗадолженности ЕСТЬ NULL )

    И (ДоговорыКонтрагентов.ВидДоговора.Порядок = 1

    ИЛИ ДоговорыКонтрагентов.ВидДоговора.Порядок = 3)

    СГРУППИРОВАТЬ ПО

    ДоговорыКонтрагентов.Владелец

    Reply
  20. AdvP

    у меня тоже не получилось добится чтоб кол-во просроченых дней правильно бралось из договора КА… вся дебеторка в просрок уходит… а еще у некоторых КА не выводит документы движения, вернее выводит но сумма по реализации не та что в документе а та которую КА должен тоесть за минусом оплат хотя эти оплаты в отчете не фигурируют

    «Управление торговлей», редакция 10.3 (10.3.8.9)

    Reply
  21. anig99

    (23) Сумма долга напротив документа увеличения долга — это не сумма документа, а именно сумма долга по документу по FIFO.

    Чтобы увидеть все документы за период долга нужно отключить условие на СуммаДолга>0 и вывести показатель Регистратор.СуммаДокумента.

    Про число дней в договоре сегодня дома посмотрю.

    Reply
  22. AdvP

    с суммами тогда все понятно

    чтобы с просроком было более понятно попытаюсь обрисовать ситуацию:

    взаиморосчеты ведутся по договору вцелом у каждого КА в договоре стоит отсрочка в днях…

    мне нужно посмотреть:

    1. сколько мы продали за перод

    2. сколько нам заплатили и сколько вернули

    3. сколько нам должны на конец периода

    4. какими документами это все образовалось

    можно это посмотреть Вашим отчетом?

    я пытаюсь это сделать вот так:

    собираю отчет со след параметрами:

    вид отчета — просроченная задолжность; период — с нужного мне числа до сегоднешнего дня; детализация — по документам взаиморасчетов; вид долга — дебеторская и кредиторская; отборов никаких нет тоесть в отчет должны попасть все КА;

    у меня все отгрузки уходят в просрок кромя сегодняшних 🙁

    Reply
  23. anig99

    (25) Кстати… я уже не помню к какой фигне может привести, но с датами разобрались? Там сначала нужно поставить дату, на которую смотреть долги, а потом начальную дату периода для доп данных.

    1. Есть такой показатель. Продажи за период называется.

    2. Оплата за период тоже есть. Возвратов вроде нет, но за небольшую плату могу добавить.

    3. Сумма долга

    4. Да. можно. Сами регулярно пользуемся этим показателем.

    Вот я смотрю Ваши настройки… Детализацию нужно ставить «По договору» или «По контрагенту». Настройка детализация определяет не детализацию конечной таблицы, а уровень взаиморасчетов при зачете долгов по FIFO.

    Не вдаваясь в специфику реализации это работает следующим образом. Сначала отчет создает таблицу документов возникновения и уменьшения долгов. При этом записи в таблице группируются по выбранному уровню детализации. Если выбрано «По контрагенту», то в одну группу попадут все документы контрагенты вне зависимости от договора. Если «по договору», то в группу попадут документы одного договора. Если «по документам взаиморасчетов» то группируются документу по полю «сделка» или «заказ» + появляется возможность получить отчет по другому регистру — данная настройка актуальна только для тех, кто ведет учет по документам расчетов. При всём этом для любой настройки всегда можно посмотреть документы все показатели, о которых Вы говорили. Настроить вид отчета (выводимые поля, группировки и т.д.) можно через кнопку «Настройка».

    Можно также обратиться через аську 74471111

    Reply
  24. archonmaster

    Для (21): вроде бы отчет запрограммирован таким образом, что не учитывается реквизит ДопустимоеЧислоДнейЗадолженности при уровне детализации отчета «по документам взаиморазсчетов/сделкам» в случае вычисления количества дней просрочки.

    Вроде ошибка в кралась в запросе к БД вот в этом месте (их два аналогичных): в модуле отчета в процедуре «ПолучитьЗапросДебилки»


    | ЛЕВОЕ СОЕДИНЕНИЕ ЧислоДнейЗадолженности КАК ЧислоДнейЗадолженности

    | ПО РасшифровкаДолга_БезПодбора.ТочноКонтрагент = ЧислоДнейЗадолженности.Владелец»;


    | ЛЕВОЕ СОЕДИНЕНИЕ ЧислоДнейЗадолженности КАК ЧислоДнейЗадолженности

    | ПО РасшифровкаДолга.ТочноКонтрагент = ЧислоДнейЗадолженности.Владелец»;

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

    При уровне группировки 4 и 1 (только контрагенты) в результате запроса возвращается (по мимо числа дней) владелец договора:


    ДоговорыКонтрагентов.Владелец

    При уровне группировки 3 или 0 (по документам взаиморазсчетов/сделкам) возвращается несколько строк,в которых указывается в качестве Владельца ссылка уже на сам договор


    ДоговорыКонтрагентов.Ссылка КАК Владелец

    По этому при 4 и 1 все стыкуется (см. первую и вторую цитатЫ), а при группировки 3 или 0 левое соединение не срабатывает, так как а) Владелец не контрагент, б) строк несколько (при количестве договоров больше 1).

    Для исправления такого недочета предлагаю модифицировать код следующим образом.

    Во-первых:


    | ЛЕВОЕ СОЕДИНЕНИЕ ЧислоДнейЗадолженности КАК ЧислоДнейЗадолженности

    | ПО РасшифровкаДолга_БезПодбора.»+УсловиеВладелецДоговора+» = ЧислоДнейЗадолженности.Владелец»;

    Во вторых, в этой же процедуре («ПолучитьЗапросДебилки») при анализе уровня группировке в соответсвующие условные операторы внести определение «УсловиеВладелецДоговора»:




    УсловиеВладелецДоговора = «ТочноКонтрагент»;



    УсловиеВладелецДоговора = «Контрагент.ДоговорКонтрагента.Ссылка»;


    Модифицированный текст функции ПолучитьЗапросДебилки приложен к сообщению

    Reply
  25. archonmaster

    Предлагаю еще одну доработку отчета.

    В договоре есть два реквизита: КонтролироватьЧислоДнейЗадолженности и ДопустимоеЧислоДнейЗадолженности.

    В последней версии отчета учитывается ДопустимоеЧислоДнейЗадолженности в не зависимости от состояния КонтролироватьЧислоДнейЗадолженности, что на мой взгляд является не совсем правильным (приведите аргументы, если я не прав). На мой взгляд, нужно анализировать состояние флажка КонтролироватьЧислоДнейЗадолженности и, если он сброшен, подставлять параметр числа дней задолженности из значений по умолчанию (из закладки параметров отчета), чего на настоящий момент не происходит.

    Для этого нужно немного переписать запрос получения ДопустимоеЧислоДнейЗадолженности из договора в процедуре ПолучитьЗапросДней.

    Старый вариант:


    МИНИМУМ(ДоговорыКонтрагентов.ДопустимоеЧислоДнейЗадолженности) КАК ДопустимоеЧислоДнейЗадолженности,

    Новый вариант:


    | ВЫБОР

    | КОГДА ДоговорыКонтрагентов.КонтролироватьЧислоДнейЗадолженности

    | ТОГДА ДоговорыКонтрагентов.ДопустимоеЧислоДнейЗадолженности

    | ИНАЧЕ NULL

    | КОНЕЦ КАК ДопустимоеЧислоДнейЗадолженности

    При этом в случае сброшенного флажка КонтролироватьЧислоДнейЗадолженности вместо ДоговорыКонтрагентов.ДопустимоеЧислоДнейЗадолженности во временную таблицу ЧислоДнейЗадолженности в ДопустимоеЧислоДнейЗадолженности будет возвращаться значение NULL. Дальше по коду в процедуре ПолучитьЗапросДебилки этот NULL подменится на реквизит ДнейОтсрочки из окна формы отчета.

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

    Код обновленной функции ПолучитьЗапросДней приложен в файле.

    Reply
  26. archonmaster

    Еще заметил (и не только я, в комментах уже высказывались), что при непросроченной задолженности выводится отрицательное кол-во дней просрочки.

    Предлагаю внести изменение в макет «Просроченная» в закладках Вычисляемые поля и Ресурсы.

    Старые варианты «ПросроченоДней»:


    ВЫБОР КОГДА НЕ(СуммаУпрОстаток_ ЕСТЬ NULL) Тогда (ЕСТЬNULL(ДнейСЗадолженности_,0)-ЕстьNULL(ЧислоДнейЗадолженности,0)) ИНАЧЕ 0 КОНЕЦ


    Максимум(ДнейСЗадолженности_)-Максимум(ЧислоДнейЗадолженности)

    Новыей вариант:


    ВЫБОР

    КОГДА

    (Максимум(ДнейСЗадолженности_)>Максимум(ЧислоДнейЗадолженности))

    Тогда

    Максимум(ДнейСЗадолженности_)-Максимум(ЧислоДнейЗадолженности)

    Иначе

    0

    КОНЕЦ
    Reply
  27. archonmaster

    И в заключение, было бы удобно вызывать отчет из различных документов с влюченным отбором по текущему контрагенту. Для этого предлагаю внести специальную процедуру в модуль отчета, задающую отбор:


    Процедура ЗадатьНачальныйОтбор(Контрагент) Экспорт

    НовыйЭлементОтбора = КомпоновщикНастроек.Настройки.Отбор.Элементы.Добавить((Тип(«ЭлементОтбораКомпоновкиДанных»)));

    НовыйЭлементОтбора.ЛевоеЗначение = КомпоновщикНастроек.Настройки.ДоступныеПоляОтбора.НайтиПоле(Новый ПолеКомпоновкиДанных(«Контрагенты.Наименование»)).Поле;

    НовыйЭлементОтбора.ПравоеЗначение = Контрагент;

    НовыйЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;

    НовыйЭлементОтбора.Использование = Истина;

    КонецПроцедуры

    Также добавить в заголовок процедуры ДействияФормыДействие директиву Экспорт.

    Теперь можно добавлять в диалоге различных форм, содержащих реквизит Контрагент, кнопку со следующим обработчиком:


    Процедура КнопкаОтчетПоЗадолженностямНажатие(Элемент)

    Отчет = Отчеты.ОтчетПоПросроченнойЗадолженности.Создать();

    ФормаОтчета = Отчет.ПолучитьФорму();

    ФормаОтчета.ВладелецФормы = ЭтаФорма;

    ФормаОтчета.Открыть();

    ФормаОтчета.ЗадатьНачальныйОтбор(Контрагент.Наименование);

    ФормаОтчета.ОбновлениеОтображения();

    ФормаОтчета.ДействияФормыДействие(NULL);

    КонецПроцедуры

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

    К сообщению прикладываю мою версию отчета и инструкцию по ее встраиванию в информационную систему.

    Reply
  28. archonmaster

    У меня не получается прикрепить файл с моей версией отчета (почему-то…). Так что если кому-нибудь он понадобится, могу отправить по электронной почте.

    Reply
  29. anig99

    (29) отрицательное число оставлено намеряно. Позволяет отбирать контрагентов на грани просрочки.

    (28) Включение галочки КонтролироватьЧислоДней запускает штатный механизм плюс требует соблюдения нескольких условий…Что существенно сужает применимость отчета, цель которого получить информацию при любых вариантах ведения учета. В своей конфигурации я включил видимость числа дней при любых услових. Для других, кто не хочет изменять конфигурации, есть возможность использовать произвольное свойство контрагентов. В штатной интерактивное конфигурации отключение галочки

    КонтролироватьЧислоДнейЗадолженности обнуляет параметр ЧислоДнейЗадолженности.

    В результате имеем 3 варианта:

    1. Действуем только в рамках логики конфигурации, при это отсутствие галочки автоматически обнуляет ЧислоДнейЗадолженности и дополнительной проверки не требуется

    2. Расширяем варианты применения использования поля ЧислоДнейЗадолженнсти (можно даже не меня конфигурации с помощью внешних обработок. В этом случае нам всё равно как стоит галочка. Проверка не требуется

    3. Используем свойство… Проверка не требуется.

    (30) я просто добавил цельный запрос в модуль конфигурации в процедуру, которая рассчитывает долг и показывает его в документе. Но идея интересная. Может и реализую как-нибудь.

    (27) Логика была такая. При уровне отчета По контрагенту (т.е. все документы объединяется только по этому признаку) Число дней рассчитывается как минимальное(но не равное 0) из всех договоров с покупателем. По договору понятно что… На уровне сделок число дней берется из документа-сделки. Там обычно указывается предполагаемый день оплаты… А вот поле РасшифровкаДолга.ТочноКонтрагент хранит именно контрагента при любых уровнях детализации. Про уровни детализация я где-то писал уже… Или в хелпе к отчету, или в этой публикации, или в предыдущей версии этой публикации.

    З.Ы. Спасибо за внимание к отчету и разбор оного.

    Reply
  30. archonmaster
    Reply
  31. archonmaster

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

    Reply
  32. mss09

    Добрый день!

    Интересует возможность установки данной обработки!

    У нас 1С 8 — отпишитесь, пожалуйста, о возможности установки на mss09@live.ru !

    Также понадобиться поддержка и доработка! Символическую оплату гарантируем!))) 😎

    Reply
  33. KRIHA

    еще не до конца разобрался, но ставлю плюс.

    чувствуется человек с любовью писал 🙂

    Reply
  34. KRIHA

    Что за деление на ноль странное — откуда пустые строки вылезают?

    Reply
  35. anig99

    (37) оставлены специально, т.к. 0 — это тоже результат и кроме долга ещё несколько показателей есть… Строки с нулевым долгом можно убрать через отбор. Кроме того, отчет всё-таки достаточно специфичен и с паре мест может потребовать дополнительной адаптации под конкретную базу. Но не в главном запросе…

    Reply
  36. anig99

    (37) до выкладыванию сюда более аккуратной и более специализированной версии пока не созрел… (:

    Reply
  37. SeregaIvanov

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

    Reply
  38. macrogroup

    Вопросик возник. А почему при виде отчета «задолженность по интервалам» и виде долга «дебиторская и кредиторская» в отчет попадает вся сумма? Т.е. Кредиторка не вычитается, а суммируется с дебиторкой. Так быть не должно))))

    Reply
  39. anig99

    (41)Посмотрим конечно, если не забуду, в свободное время… но данный отчет немного устарел… есть несколько более новых в плане деталей и оформления отчетов, заточенных под конктретных клиентов… Если горит, то исправлю за $$$ Р.

    Reply
  40. sakustov

    Готовы ли вы доработать отчет, чтобы он был способен считать задолженность по первичке, а не по регистру взаиморасчетов. Дело в том, что часть договоров имеют признак взаиморасчетов «по договору в целом» поэтому поле «сделка» в регистре не заполняется. в итоге в отчете некорректные данные.

    Reply
  41. anig99

    (43) вообще-то отчет изначально и создавался для получения долга при ведения по договору в целом. Т.е. отчет позволяет рассчитывать дебиторку на различных уровнях детализации: сделка, договор, контрагент. Это означает, что если рассчитывать с детализацией по сделкам, то будет обращать внимание на поле сделка. Если рассчитывать с детализацией по договорам, то на поле сделка отбрасывается и все расчеты идут с учетом договора. Соответственно и с детализацей по контрагенту.

    Предполжим у нас есть след. таблица

    Петров Договор1 Сделка1

    Реализация 10.10.10 — 100р

    Оплата 11.10.10 — 50р

    Петров Договор1 Сделка2

    Оплата 12.10.10 — 500р

    Петров Договор2 Нет Сделки

    Реализация 13.10.10 — 400р

    Петров Договор3 Нет Сделки

    Поступление 13.10.10 — 50р

    Если рассчитывать с детализацией сделок, то получим:

    Долг Петров Договор1 Сделка1 — 50р

    Наш Долг Петров Договор1 Сделка2 — 500р

    Долг Петров Договор2 — 400р

    Наш Долг Петров Договор3 — 50р

    Если получать с детализацией по договорам:

    Наш Долг Петров Договор1 — 450р

    Долг Петров Договор 2 — 400р

    Наш Долг Петров Договор 3 — 50р

    Если с детализацией по контрагентам

    Наш Долг Петров — 100р

    Reply
  42. sakustov

    А если долг по договору в целом, но в отчете хотим развернуть по документам? Во всех документах товарной цепочки (накладная — ПП) есть ссылка на заказ, поэтому по первичке можем установить связь.

    Reply
  43. anig99

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

    Reply
  44. sakustov

    Да, именно так.

    Доживем этот год с кривым регистром. с нового начнем с новыми договорами как положено 🙂

    Reply
  45. anig99

    (47) это разумный выход.

    Reply
  46. sakustov

    Ну так что, возметесь? 😉

    Reply
  47. марина_18

    (0) А учитывает ли ваш отчет ордерную схему?

    Например, если документ «Реалиация товаров и услуг» выписан 01.05.2010, а ордер 01.07.2010. Платежка поступила 08.07.2010, число дней задолженности=10.

    Как в таком случае поведет себя ваш отчет?

    У нас Комплексная автоматизация 1.0.

    Reply
  48. anig99

    (50) Момент возникновения задолженности и момент отгрузки товара — разные понятия. Совпадают они если ордерная схема НЕ используется.

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

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

    Расходный ордер на товары не затрагивает финансы и не может делать движения по долгам

    Reply
  49. DarkSign

    Спасибо, отличный отчет! А можно на СКД реализовать следующее:

      Подразделение = УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(глЗначениеПеременной(«глТекущийПользователь»), «ОсновноеПодразделение»);
    Если РольДоступна(«АМК_Менеджер»)
    Тогда ОсновнойМенеджер=ПараметрыСеанса.ТекущийПользователь;
    Иначе ОсновнойМенеджер=NULL;
    КонецЕсли;
    
    УниверсальныйОтчет.ПостроительОтчета.Параметры.Вставить(«ОсновнойМенеджер»,ОсновнойМенеджер);

    Чтобы каждый манагер видел только своих контрагентов. Просто не силен я в СКД… Спасибо!

    Reply
  50. anig99

    (52)Да. Возможно. В СКД тоже можно работать с отбором. Если посмотрите в код, то там есть процедура по переносу отборов с контрагентами из одной схемы в другую.

    Reply
  51. dii

    Для начального понимания очень полезная штуковина

    Reply
  52. pulaverde

    сейчас глянем что тут у Вас

    Reply
  53. vdimitriy

    Фигня полная

    Reply
  54. anig99

    (56) а можно аргументировано? Даже не качали ведь.

    Reply
  55. Поручик

    (57) Он просто не умеет его готовить. Я с ним тоже долго с ним разбирался, вертел по всякому.

    И советую залить вариант для 8.2., не все могут открыть конфигуратор и сконвертировать.

    Reply
  56. anig99

    (58) у меня тут в планах обновить 2 публикации и доделать ещё одну. Следующим будет полное переписывание этого отчета с учетом всех свистелок. Будет и на 8.1, 8.2 и для тонкого клиента.

    Reply
  57. evgeniy.bilyk

    Отчет, конечно, хороший. Автору спасибо

    Но есть один непонятный момент.

    Тестировал отчет на «Управление торговлей для Украины»

    В отчет почему-то попадали документы «Реализация товаров и услуг», по которым уже были ПКО, т.е. долга по ним небыло. При тестировании заметил, что в отчет такие документы попадают если в ПКО в поле «Док.расчетов» нет привязки к документу «реализация товаров и услуг»

    Прошу прощения, если этот момент уже обсуждали.

    Reply
  58. anig99

    (60) в договорах стоит галочка «вести по документам расчетов»? Просто основная работа происходит по регистру Взаиморасчеты, а не Взаиморасчеты по документам

    Reply
  59. evgeniy.bilyk

    В договоре контрагента в закладке Общие стоят настройки:

    1.Взаиморасчеты ведутся «По заказам»

    2.Стоит галочка напротив «Вести по документам расчетов с контрагентами»

    Reply
  60. anig99

    (62) собственно по этой причине эти реализации и выходят, т.к. скорее всего Вы поставили в отчете галочку «Использовать документы расчетов». По задумке при включении этой галочки отчет формируется для таких договоров по регистру Взаиморасчеты по документам расчетов. А если в ПКО не указать документов расчетов, то ПКО повиснет как аванс и реализация не будет оплачена. Попробуйте убрать в настройках отчета эту галочку, тогда отчет сформируется ТОЛЬКО на основании регистра взаиморасчетов, без учета расчетных документов.

    Reply
  61. evgeniy.bilyk

    Вообще странно, где саму галочку в отчете выключать нашел, а вот выключить-то ее почему-то не получается. Нажимаю по ней, а она все равно остается активной

    Это во вкладке «Параметры», я правильно Вас понял?

    Reply
  62. evgeniy.bilyk

    Возможно еще что-то нужно изменить в настройках отчета, подскажите, плз, отчет очень нужен, не хочется в коде ковыряться)

    Reply
  63. evgeniy.bilyk

    вобщем разобрался как галочку убирать. Во вкладке «Параметры», в пункте «детализация» по умолчанию стоит «по документам взаиморасчетов/сделкам», в таком случае обязательно нужно использовать документы расчета. Если использовать другую детализацию, то можно выключать использование документов расчетов.

    Автору еще раз спасибо за отчет, будем разбираться дальше …

    Reply
  64. anig99

    (66) в следующей версии отчета такие неочевидности будут устранены. Кстати, там вроде справка к отчету ещё есть

    Reply
  65. evgeniy.bilyk

    да-да, со справкой уже познакомился, с нее и надо было начинать)

    Reply
  66. NosovK

    «Управление производственным предприятием для Украины», редакция 1.3.11.5

    При параметре «Источник Дней Отсрочки» установленном в «Число дней отсрочки в договоре» данные из договора не подтягиваются.

    Reply
  67. anig99

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

    Reply
  68. Foxux

    Автору спасибо за отчет, будем разбираться … Пока хватает недоделок, половину исправил, на половину забил, так как не мешают…Но в качестве основы пригодилась хорошо. Спасибо.

    Reply
  69. anig99

    (71) до нового года очень сильно надеюсь выпустить новую версию.

    Reply
  70. vovche

    пользуясь случаем и немножно для рейтинга выражаю благодарность за труды 🙂

    Reply
  71. NosovK

    (72)

    На самом деле меня к примеру отчет и в таком варианте целиком устраивает, не считая разве что глюка с подтягиванием числа дней отсрочки в договоре.

    Reply
  72. hanio

    А что за деление на 0 файл прикреплен посмотрите пож-та

    Reply
  73. hanio

    А вот колонка Cумма погашения задолженности за период просрочки всегда пустая хотя были оплаты за период просрочки. В целом отчет нравится чрезвычайно, СКД самое то для него. И еще — нужна колонка куда выводить сумму по платежному ордеру на поступление, у нас идет разноска списком и в отчет напротив документа ничего не попадает а попадает снизу что не есть хорошо…

    Reply
  74. anig99

    (75) там формула без проверки деления на 0. А СКД именно так реагирует на деление на 0

    (76) этот отчет бесплатно дописываться не будет. Слишком много ответвлений написано под заказ. Сейчас планирую переписать отчет заново с учетом всех доработок и исправление ошибок. Если настроение будет, начну дописывать уже на этих выходных.

    Reply
  75. RakovskiyK

    как раз то что нужно! Спасибо большое!

    Reply
  76. Il

    Очень кстати! полезный отчетик!

    Reply
  77. NosovK

    (77) (72) (70) отчет очень помогает в повседневном контроле событий уже сейчас, если не очень сложно — могли бы вы исправить ошибку в запросе количества дней. Я не уверен что стоит делать новую версию отчета, потому что он сейчас достаточно понятен и интуитивно понятен, если же навешать в него еще дополнительных плюшек — удобнее он может и не стать 😉

    Reply
  78. anig99

    (82) интерфейс усложнять не буду

    Reply
  79. DarkSign

    Добрый день! А подскажите, пожалуйста, какие права необходимо добавить, чтобы исправить вот это (используется RLS, без него все работает):

    {Отчет.ОтчетПоПросроченнойЗадолженности.МодульОбъекта(152)}: Ошибка при вызове метода контекста (Выполнить)
    Таблица=Запрос.Выполнить().Выгрузить();
    по причине:
    
    по причине:
    Ошибка выполнения запроса
    по причине:
    У пользователя недостаточно прав на исполнение операции над базой данных.

    В отчете:

    Вид отчета — Задолженность по интервалам

    Детализация — По контрагентам

    Вид долга — Дебиторская

    Документы расчетов не используются

    В RLS ограничения по подразделениям, складам, контрагентам.

    Просто RLS необходим, но и отчет очень нравится. В конфигураторе какие только права не выставлял, но поправить не смог…

    Спасибо!

    Reply
  80. NosovK

    Добрый вечер. Извините если излишне навязчив, но все же как успехи с выпуском новой версии?

    Reply
  81. abzae

    Отличная вещь, в свое время очень пригодилась

    Reply
  82. Gensec

    Интересует доработка отчета, как моно с Вами связаться ?

    Reply
  83. ASoft

    Отчет интересный так что законный +

    Reply
  84. angler225

    Отчет полезный. Дорабатывать конечно есть что, делался уже давно. Посмотрел внутрь, да автор с чуством юмора, соответственно появились вопросы. Почему функция в модуле называется Дебилка, и что это за организация «Луффи» подставляется в запрос.

    Reply
  85. anig99

    (89) Дебилка — это дебиторка. Луффи — нужно было любое слово, чтобы сгруппировать строки без учета организаций. Луффи — персонаж одного мультфильма

    Reply
  86. angler225

    Понятно, довольно остроумно 🙂

    Reply
  87. Epishko

    Добрый день, а есть версия для

    1С:Предприятие 8.2 (8.2.14.533)Управление торговлей», редакция 10.3 (10.3.13.2)?

    Интересует показатель средневзвешенной просроченной задолженности за период (месяц, квартал, год).

    Именно просроченной, поскольку за просроченную задолженность начисляются %.

    Если нет, то сообщите — готовы ли взяться за разработку подобного отчета на заказ.

    Естественно небесплатно.

    Спасибо.

    Reply
  88. simba08

    Хороший отчет. Единственное, чего не хватило нашей коммерческой службе — это расшифровки (какими документами была закрыта задолженность, т.е. например было за период 3 накладных (на сей момент первая закрыта двумя платежами, вторая — частично закрыта одним платежом, третья — не закрыта совсем). Это — некая динамика, помогающая в работе (клиент и менеджер четко знают за что приходила деньга). Сейчас в данном отчете видно неоплаченную часть второй накладной и третью накладную полностью (если взять по аналогии описанный выше пример).

    Reply
  89. Гость

    Опять-таки для фин службы и бухгалтерии — по контрагентам долг 50000 тыс.р, а по договорам 1 000 000… чего-то тут не так…Ага. здесь посадили оплату не тот договор, здесь можно взаимозачет предложить — глядишь и НДС с авансов много меньше.

    Вывод расшифроки в отдельной вкладке — не плодит окон в 1с.

    Reply
  90. Epishko

    Ага, вот если еще добавить столбец «средняя просроченная задолженность за период» — для расчета штрафа с менеджера при расчете зарплаты и тогда отчет будет совсем идеальным

    Reply
  91. egoiste__

    Анализируется задолженность по всем договорам или по тем у которых стоит признак: «вести по документам». Поскольку это принципиально.

    Reply
  92. kubfest

    За проделанную работу +. Но есть небольшой вопрос, пока не тестировал на большом количестве контрагентов, но как себя ведет отчет при > 5000 контрагентах и в каждом контрагенте по 5-6 документов расчета?

    Reply
  93. anig99

    (97) скорость по контрагентам линейна. Проблемы со скоростью зависят от числа документов для контрагента. Чем больше ему нужно подбирать, тем больше падает скорость. Оптимизация конечно сокращает этот эффект, но полностью убрать его не позволяет сам принцип расчета нарастающих итогов в запросе. Если для контрагентов 5-6 документов ВСЕГО, то существенной деградации быстродействия относительно штатного отчета по задолженности не будет.

    Reply
  94. idw

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

    Reply
  95. idw

    А что за документы с пустыми суммами попадают в отчет по кредиторской задолженности, такие как Платежное поручение исходящее или авансовый отчет?

    Reply
  96. anig99

    (100) при желании можно вывести не только данные о долге, но и данные о взаиморасчетах за период долга (для этого использовать поле Регистратор.СуммаДокумента). Если эти документы мешают, то надо сделать отбор Сумма долга > 0

    Reply
  97. Alies_Ka

    Скачала бесплатный отчет, но не как не могу запустить, пишет:

    {Форма.ФормаОтчета.Форма(51)}: Значение не является значением объектного типа (Колонки)
    колвокол=ЗадолженностьТаблицаДобавочная.Колонки.Количество()-1;
    

    Что я не так сделала?

    Reply
  98. anig99

    (129) а какой скачали?

    Reply
  99. 028

    вот такая ошибка выходит

    {ВнешнийОтчет.ОтчетПоПросроченнойЗадолженности.Форма.ФормаОтчета.Форма(51)}: Значение не является значением объектного типа (Колонки)

    колвокол=ЗадолженностьТаблицаДобавочная.Колонки.Количество()-1;

    Reply

Leave a Comment

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