<?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='\
А книга не поплывет-то по месяцам…?
Сложный вопрос. Эта обработка применяется обычно тогда, когда книга УЖЕ поплыла, потому что что-то в нее не входит, а понять почему — геморойно очень.
Ну тады — ок…
Но свести книги при работе по основному договору ничуть не проще, а наверное и сложнее, чем по раздельным договорам. В раздельном случае сразу видно неоплаченные договора, а по одному договору ?:)
В общем, рассматривается случай грубого непонимания. Бухша, вводя накладные, вбивала договора, исходя из каких-то внутренних влечений, типа «Поставка от 20.02.06». Оплата же когда приходила, то договор ставился основной. А потом она ВДРУГ поняла, что договор, это, собственно говоря, не еще одно поле комментария, а нечто большее! Вот тогда и начинаютсявопросы типа того: «А почему ваша программа не разбивает оплату сама по договорам?», «А кто это сможет отследить и будет помнить, по каким договорам кто платит, у меня тысячи поставщиков?». Вы с такими бухшами не работали? Я — ТОЛЬКО С ТАКИМИ!!!
да, у каждого — свои тараканы…
Этот отчет писался специально для нашей фирмы. Рекомендуем!
Для востановления бухгалтерского отчета dom просто незаменимая.
Давно хотелось такое сделать, но руки не доходили. Так что БОЛЬШОЕ БУХГАЛТЕРСКОЕ СПАСИБО!!!
Большое пожалуйста. Только dom это что?
Здравствуйте. Не могу запустить программу. При попытке появляется эта надпись:
Дог.Новый();
{D:1СПРЕДПРИНИМАТЕЛЬ.BLREXTFORMSPRNFORMSПРИВЯЗАТЬ ОСНОВНОЙ ДОГОВОР.ERT(53)}: Неверный владелец.
🙂 Надо мануал читать. там сказано, что исправляет в программе 1С:Бухгалтерия 7.7, а не 1С:Предприниматель. Потом, зачем это в PrnForms было помещать?
Пожалйста, вот сообщение из 1С:Бухгалтерия 7.7:
Дог.Новый();
{D:TEST_BASES_BUCHСАЛЛИХАНСЕН_05022007EXTFORMSПРИВЯЗАТЬ ОСНОВНОЙ ДОГОВОР.ERT(53)}: Неверный владелец.
Исправлено, проверяйте.
Бухгалтерия, 484
Конфигурация не измененная
Права администратора
Что еще может влиять?
Дог.Новый();
{D:……….EXTFORMSПРИВЯЗАТЬ ОСНОВНОЙ ДОГОВОР.ERT(54)}: Неверный владелец
Мой опыт показывает, что бухам ваще глубоко фиолетова аналитика по договорам. Для порядку они что-то требуют с программиста, а на самом деле им наплевать, им главное дебет-кредит по Контрагенту.
Так что можно смело просто убивать это справочник, будет только лучше всем 😉
Забыл сказать, что опыт по производящим предприятиям, а не купи-продай…
Добавлю еще: аналитика по единственному договору «Основной договор» (у меня он назывался «Без договора») равносильна отсутствию всякой аналитики! Так что, уважаемые бухгалтеры, плюньте вы на эту аналитику, вам она ни к чему, а программистам лишняя головная боль.
Эти задачи и пытается решить моя обработка. Если бухша по непонятным причинам ввела массу договоров, а потом поздно раскаялась, то ей просто необходимо исправить все договора на «Основной договор» в автоматическом режиме.
Кстати, оно работает теперь на 100%!
Кстати, предлагаю решение, с минимальными изменения в конфе (на будущее)
1. Справочник договоры закрывается для редактирования вообще, только выбор
2. При вводе нового Контрагента автоматически добавляется договор с кодом 1 и названием «Основной» (или как кому нравится)
Тогда никто никогда другой договор выбрать не сможет (аналитика, естественно, будет весьма условная, но зато все остальное стандартное будет работать без вопросов)
Вопросы:
1. Некорректно обрабатываются операции, сформированные документами «Начисление налогов», «Регламентные операции по налоговому учету».
2. Обработка не затрагивает документы «Бухгалтерская справка».
Кто может помочь?
А где же автор???
Тут…
(1) <А потом она ВДРУГ поняла, что договор, это, собственно говоря, не еще одно поле комментария, а нечто большее! <
И вот когда она это поняла, предлагается фактически удалить аналитику по договорам. Сомнительный вариант решения проблемы.
<Вот тогда и начинаются вопросы типа того: «А почему ваша программа не разбивает оплату сама по договорам?»<
Использую следующий вариант. Регламентная обработка, к-ая в конце месяца перераспределяет произведенные оплаты (/авансы) по договорам, по которым имеется долг перед поставщиком. Можно дать возможность буху выбирать, какую оплату на какой договор перебросить (само собой с контролем, чтобы сумма распределяемой оплаты не превышала долга). Обработка создает документ-операцию, которую можно дополнять проводками («сворачивается» одна или несколько сумм, формируются соответствующие проводки, обновляется таблица с долгами и оплатами на форме обработки, «сворачиваются» следующие суммы и новые проводки добавляются в ту же операцию).
Обработка может быть полезна при переходе с 7.7 на 8.х.
А в остальном читайте внимательнее ИНСТРУКЦИЮ ПО ПРИМЕНЕНИЮ ПЛАНА СЧЕТОВ БУХГАЛТЕРСКОГО УЧЕТА ФИНАНСОВО-ХОЗЯЙСТВЕННОЙ ДЕЯТЕЛЬНОСТИ ОРГАНИЗАЦИЙ. Утверждена Приказом МФ РФ от 31 октября 2000 г. N 94н.
—-к счету 60 (и к счету 62 аналогично)———
Аналитический учет по счету 60 «Расчеты с поставщиками и подрядчиками» ведется по каждому предъявленному счету, а расчетов в порядке плановых платежей — по каждому поставщику и подрядчику. При этом построение аналитического учета должно обеспечить возможность получения необходимых данных по: поставщикам по акцептованным и другим расчетным документам, срок оплаты которых не наступил; поставщикам по не оплаченным в срок расчетным документам; поставщикам по неотфактурованным поставкам; авансам выданным; поставщикам по выданным векселям, срок оплаты которых не наступил; поставщикам по просроченным оплатой векселям; поставщикам по полученному коммерческому кредиту и др.
А можно сделать такую же только под ПУБ для Украины 7.7?
Пожалуйста, очень надо.
Мне обработка пригодилась, спасибо! И согласна с (24) gutentag
Спасибо.
Очень пригодилось, когда переносила остатки из грязной базы