<?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='\
Интересно, а приведенные примеры с 43 и 60 с 62 используются в реальной практике? Все механизмы конфигурации корректно отрабатывают?
(1) mszsuz,
да, это реальные примеры из практики. Для них и делалась обработка.
Еще некоторые ведут 42 счет не по складам (т.е. делаем субконто склады оборотным).
Однако закрывается он тогда вручную, но всего одной проводкой.
Конечно, для ОСНО и НДС вариант вести без выделенных счетов авансов работать не будет.
Тоже думал идти по Вашему пути, но красиво обработкой не получается — сделал расширением (http://infostart.ru/public/447602/ ).
Однако, разрешение изменения подчинённости счёта благоразумно закомментировал (оставил типовое) — желающие могут снять комментарий самостоятельно на свой страх и риск.
Ваша обработка, не считая моей, первая на эту тему, а некоторые задачи, действительно, проще решать изменением счетов. За это Вам плюс!
Интересно, а можно застрелить за подобные советы? План счетов конечно не священная корова, но ежели не ИП, то однако баланс, да и др. регламентированная отчётность, а тама сальдо, по всем субконто, которые ВДРУГ становятся оборотными, пустячёк, конечно, но поменяв План счетов ИСЧЁ (как правильно пишется знаю, но тут токо так!!!) и переписать всю отчётность — тады да, была бы публикация, а так — ИМХО профанация ))))
(4) Y_U_S, Спасибо! А изменение подчиненности нужно для восстановления правильного положения счета. Были ситуации когда кто-то переподчинил счета и нужно было их вернуть на место.
(5) Alex_E, ну я же не предлагаю ВСЕ субконто ВСЕХ счетов сделать оборотными.
Что касается тех счетов, о которых я писал: 42 и 43 попадают в баланс без учета субконто, 60.01,60.02,62.01,62.02 — берутся по субконто Контрагенты и Договоры (субконто Документы расчетов не участвует в расчете)
Вообще-то я может бы и не писал примеры использования, но мне без них публикацию не утверждали.
(7)
— кто Вам это сказал? В активы и пассивы попадет САЛЬДО по ВСЕМ субконто ВСЕХ счетов, где это сальдо есть, в принципе всегда было так, или субконто уже в типовой будет оборотное. Хотите доказать обратное, внимательно выслушаю)))
(8) Alex_E, Сформируйте баланс и нажмите кнопку расшифровка по строкам 1230,1210,1520
вы там увидите следующее
Строка 1520 «Кредиторская задолженность», графа «На 30 июня 2016 г.»
Положительное сальдо на конец периода по кредиту счета 60.01 по субконто «Контрагенты», «Договоры»
+ плюс
Положительное сальдо на конец периода по кредиту счета 60.21 по субконто «Контрагенты», «Договоры»
+ плюс
Положительное сальдо на конец периода по кредиту счета 60.31 по субконто «Контрагенты», «Договоры»
+ плюс
Сальдо на конец периода по кредиту счета 60.03
+ плюс
Сальдо на конец периода по кредиту счета 62.02
+ плюс
Отрицательное сальдо на конец периода по дебету счета 62.01 по субконто «Контрагенты», «Договоры»…
а по поводу
— коллега, ну зачем же так подставляться ). В баланс не попадает много БАЛАНСОВЫХ счетов даже если по ним есть остатки, например 000,25,26,44…
(9) 000 — счет с признаком балансовый, но таки служебный и в баланс не попадает по причине его отсутствия в Плане счетов бухгалтерского учета, а не присутствия в программе 1С — счет предназначен для ввода начальных остатков и не более того (иногда используется, когда нужно сделать проводки по НУ, ВР или ПР по балансовым счетам, но только для целей учёта налога на прибыль)
25, 26 — закрытые счета, остатков по которым на конец месяца БЫТЬ В ПРИНЦИПЕ НЕ МОЖЕТ, если они есть — значит нет учёту)))
про 44 — есть один момент — это транспортные расходы, по которым могут быть остатки, а так, счет так же закрывается в 0, но по транспортным вполне себе могут быть остатки, пропорциональные остаткам товара на 41.01, и в баланс они попадают…
по 60 и 62 сейчас попробую нарисовать пример в демке)))
Итак: вот сальдо по 60 и баланс, таки документы учитываются)))
(9)
— коллега, а вы про бух. учёт чё нить слыхали? Козьма Прутков как то сказал, что если ты видишь на клетке со слоном надпись Бегемоот — не верь глазам своим….(за точность цитаты не ручаюсь, но смысл тот))))
(11) Alex_E,
По поводу 44 счета я действительно ошибся.
А в остальном спешу сообщить, что не смог получить некорректный баланс при незакрытых документах расчетов по счетам 60.01 и 62.01 как у вас.
Так что есть вероятность, что кто-то из нас подрисовал баланс.
(13) Создал новую организацию в ДЕМКе, сделал поступлене и операцию вручную, заполниол баланс. Наверное кто-то чё-то ещё подрисовал, но картинки именно такие получились…
— тут я могу сказать что не только по поводу 44, но и по поводу 000, 25 и 26 то же)))), ладно, заблуждайтесь дальше, просто я уже спросил, по поводу бух.учёта у Вас как?
Баланс строится по остаткам, остатки программа видит по аналитике, если в аналитике не оборотное субконто, то по нему есть сальдо, которое попадает в баланс и прочие отчёты. Ломать План счетов в этом случае можно, но только с одновременным переписыванием регламента (так было во времена 7.7, БП 1.0 под 8.0 итд итп), на слово не верите, ну и ладно, но за такую публикацию нужно убивать из рогатки сразу, пока такая зараза не расползлась среди населения)))))))))
(14) Alex_E,
ну как не в совершенстве конечно
век живи — век учись
(15) Вот это правильно. Мой совет просто услышьте, если не понимаете, как работает программа, не стоит её модифицировать, потому как в одном месте всё будет красиво, а в другом …
Расскажу одну притчу, впрочем на реальных фактах основанную (рассказала коллега, по приходу к новому клиенту):
пришла, посмотрела, спрашивает, а чё так всё хреново, ответ был гениальным (ответила глав.бух):
— Да программист хреновый попался!
Искренне желаю Вам не попасть в такую ситуёвину))))