<?php // Полная загрузка сервисных книжек, создан 2024-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='\
Бухгалтерский отчет о просроченной дебиторской задолженности для конфигураций 1С Предприятие 8.2 России, Украины и Беларуси. Глубина задолженности параметризирована. Выборка данных одним запросом.
Перейти к публикации
Спасибо за отчет, Очень помог мне и бухгалтер;)
Спасибо за отчет = )
отчет очень пригодился 🙂
Спасибо автору за отчет)))очень полезный))
(0) Возможно для увеличения быстродействия стоит максимально параметризировать вируальные таблицы в запросе.
Например:
ИЗ
РегистрБухгалтерии.Хозрасчетный.Остатки(НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(&РабочаяДата, ДЕНЬ, 1), ДЕНЬ), Счет В ИЕРАРХИИ (&СчетЗадолженности), &СписокСубконто, Организация = &Организация ИЛИ ЗНАЧЕНИЕ(Справочник.Организации.ПустаяСсылка) = &Организация) КАК ХозрасчетныйОстатки
Вместо:
ИЗ
РегистрБухгалтерии.Хозрасчетный.Остатки(НАЧАЛОПЕРИОДА(ДОБАВИТЬКДАТЕ(&РабочаяДата, ДЕНЬ, 1), ДЕНЬ), , , ) КАК ХозрасчетныйОстатки
ГДЕ
ХозрасчетныйОстатки.Счет В ИЕРАРХИИ(&СчетЗадолженности)
И (ХозрасчетныйОстатки.Организация = &Организация
ИЛИ ЗНАЧЕНИЕ(Справочник.Организации.ПустаяСсылка) = &Организация)
(0) В 4-м запросе условие объединения:
ДокументыОтгрузки.МоментВремениОтгрузки <= ХозрасчетныйДвиженияССубконто1.Регистратор.МоментВремени
Т.е. вы повторяете запрос к регистру бухгалтерии чтобы получить только СуммаНарастающим и снова упорядочить по времени, а всё остальное уже было получено во 2-м запросе???
Возможно стоит воспользоваться — на вкладке «ресурсы» настройкой «Рассчитать по…» (контрагент, договор)???
Спасибо автору! Отчет пригодится, только чуть придется под наши требования переделать.
отчет хороший
Вопрос: при включенном RLS будет работать?
Спасибо автору за отчет. Хотя и не использовал его напрямую (бухгалтерии хотелось больше информации и в другом виде), но он мне очень помог при создании своего!
Автор молодец. Буду пробовать использовать для реальных задач. И скорее всего будет использован как плацдарм для собственных разработок )
а на БП 2.0 будет работать?
а если у каждого клдиенте свой срок оплаты по отгрузке (Один в теч. 30 дней после отгрузки, кто то 20 дней, ) Как настроить отчет
Отчет очень подходит под ситуацию у клиентов. Как раз куча отгрузок и не понятно какую сводить с какой. периодически платят по остаткам. Спасибо большое. Буду опробовать 🙂
Почему-то не учитывает возвраты 🙁
Отличный отчёт. Нет ли такого-же, но только по кредиторской задолженности?
Наверное, если добавить в договора срок оплаты, получится очень приятная штука. Разумеется, использовать отчет в таком виде — не буду, но алгоритм — использую. Огромное спасибо
Вещь крутая. Алгоритм просто замечательный — сервак грузит почти как расчет себестоимости. Проверил на микроскопической базе. Все работает.
Единственное сожаление на реальной базе ЭТО не возможно использовать. Бухгалтерия не оценит.
Всё, что формируется дольше 20 минут повергает их в коматозное состояние.
Как учебное пособие просто не заменимо.
Автору — уважуха!
Товарищи одинЭснеги!
Кто работал с отчетом отпишитесь плиз на каких релизах он работает?
На последней БП 2.0.47.7 правильно формируется?
И, судя по дате отчета, на БП 3.0 он вообще работать не будет?
(21) MasterTonLab, для бухгалтерии 3 добавлен вариант отчета с возможностью выбора параметров.
Отчет не оптимизирован, так как он не считается оперативным. По всем доработкам обращайтесь к компаниям или программистам, у которых вы находитесь на обслуживании.
Спасибо за Отчет.
Пробую на УТП для Украины.
Особенно радует возможность не привязываться к договорам.
За использование СКД — Однозначно ПЛЮС.
ошибка в отчете:
там где левым соединением к «ДокументамОтгрузки» цепляется «РегистрБухгалтерии.Хозрасчетный» нет связи по договору, а только по контрагенту, в случае, если включен параметр «ОплатаТолькоПоДоговору», то отчет выводит некорректные данные(у меня не сошлась сумма в ОСВ по счету 361 с суммой в отчете, в колонке «Общая задолженность», в разрезе по договорам), я думаю вам нужно добавить через «ВЫБОР» эту связь, если у вас включен параметр «ОплатаТолькоПоДоговору», тогда связываем по договору, иначе только по контрагенту. в своей версии отчета, я вообще этот признак убрал, у меня всегда оплата по договору, и просто добавил связь по договору, теперь суммы сходятся.
ошибка в отчете:
там где левым соединением к «ДокументамОтгрузки» цепляется «РегистрБухгалтерии.Хозрасчетный» нет связи по договору, а только по контрагенту, в случае, если включен параметр «ОплатаТолькоПоДоговору», то отчет выводит некорректные данные(у меня не сошлась сумма в ОСВ по счету 361 с суммой в отчете, в колонке «Общая задолженность», в разрезе по договорам), я думаю вам нужно добавить через «ВЫБОР» эту связь, если у вас включен параметр «ОплатаТолькоПоДоговору», тогда связываем по договору, иначе только по контрагенту. в своей версии отчета, я вообще этот признак убрал, у меня всегда оплата по договору, и просто добавил связь по договору, теперь суммы сходятся.
ПС конфа УТП
А корректировку реализации он учитывает?
А корректировку долга?
(28) ivsi1, А где в описании сказано, что он открыт?
Будет работать для УТП для Казахстана?
(30) lifekz, должен работать, если план счетов выстроен аналогично указанным типовым решениям.
Полезный отчет,
но… если есть возможность — хотелось бы более оптимизированный…
— очень долго формирует отчет… (больше 2х минут!)
даже на SQL базе при «небольшом» количестве контрагентов (около 10) и документов (не более 100)
— на «живой» базе завис на неопределенное время…
сразу показывает: Вывод отчета: 0% но остановить ctrl+Breack нельзя
— еще… у нас просрочка по каждому контрагенту (договору) — может быть своя
(не 30 дней для всех, а 7, 14, 30, 45 или 60) это тоже никак не учтено
придется пока самому покопаться и пооптимизировать…
— сразу «видно» неоптимальное условие ГДЕ… все условия ГДЕ надо в параметрах виртуальных таблиц делать
— еще глюк… остатки по 62 счету больше чем «Сумма по документу» из-за связей только по просроченной задолженности
— не учитываются документы «Ввод начальных остатков» — если у клиента ввели на 62.01 задолженность то она НЕ показывается никак в этом отчете!
Ставлю «+» что хотя бы не с 0 начинать
Добрый день!
Не пошёл отчётик (( «Не может быть прочитан текущей версией программы»
У меня:
1С:Предприятие 8.2.17.157
Бухгалтерия для Украины 1.2.27.5
Конфигурация типовая, без изменений.
Для меня отчет действительно не подходит?
А почему модуль объекта запаролен? Не понятно, как именно идет отбор документов реализаций по которым сформировался долг т.к. запрос возвращает много документов, а в отчет попадают лишь несколько из них.?
(34) lomak, в модуле пароль установлен, но там пусто. Отчет предоставляется «как есть», дорабатывать следует самостоятельно или заказать у любого разработчика.
А почему скрина нет на отчет ?
здесь учитывается ввод начальных остатков: Расчеты с покупателями и заказчиками (счета 1210, 3510)?