<?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) Написали А, напишите и Б.
Нет движений по регистру Выпуск продукций.
Для подобных проводок 23-23 надо использовать ОПЗС.
Заполнение статьи затрат по Кт счета не предусмотрено и будет потом с точки зрения пользователя «странно» закрыто.
А если нет никакого выпуска продукции? Если там затраты другого рода. Видимо я не удачно назвал номенклатурные группы. А про выпуск продукцию согласен, поправил статью.
Если есть Кт 20,23,29 счетов — это выпуск (продукцииуслуг).
Затраты иного рода — это что «перекидка» затрат? Так тогда это тоже выпуск: НГ 1 оказала услуги НГ 2, все укладывается в логику ОПЗС.
(5) Есть к примеру объекты производственные разные, на которых происходят работы, когда известно, к какому объекту отнесены расходы, то тут понятно как оформлять документы, а когда не известно, то данные аккумулируют на каком-нибудь субконто, например, есть 5 произ. объектов, каждый это ном. группа, произвели платный мед. осмотр сотрудников, которые на нескольких объекта задействованы, затраты упали на 23, но как их распределить по объектам? Поэтому их собирают на какой-нибудь ном. группе, а потом долями перераспределяют. ОПЗС нет.
Все верно. Это делается через ОПЗС
(6)
Платный медосмотр сотрудников имеет отношение к вспомогательному производству?
(7) Перепроверил, действительно получается по сути тоже самое, кроме того, что движения по КТ по 2,3 Субконто пусто, но это не критично для закрытия месяца, ресурсы оборотные, только если бухгалтера не перфекционисты. Так же появляются движения по рег. накоплению Выпуск продукции, но для этой задачи его можно и не заполнять. Склоняюсь к тому, что все-таки правильней было бы делать в документе ОПЗС. Однако задачу решил как ее поставили.
(8) Это условный пример, в данном случае суть не в этом.
(10)Так привели бы реальный пример…..
(11) Возьмите, например, транспортные расходы. Суть-то не поменяется.
(12)У вас есть свой парк например. И вы не отражает выпуск услуг/работ по вспомогательному производству?
(13) Сторонние контрагенты оказывают определенные транспортные услуги. И я не говорил, что не оформляют выпуск продукции. Здесь речь об особенностях учета, на сколько они корректны об этом речь не идет. Идет речь о ситуации и о том как ее решают, методология не моя, только обработка.
(14)Это же не ваше собственное вспомогательное производство.