<?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)Ну да, если внимательно почитать описание публикации, там в п. 2 об этом явно написано.
Код обработки открытый?
(3)конечно открытый
с 10сч . будет работать?
(5) Будет, но выбор счета сделан в тексте запроса — нужно изменить в некоторых местах название счета «ТоварыНаСкладах» на название 10 счета.
Или переделать обработку под возможность выбора счета.
Почему обработка не заполняет Склад?
Здравствуйте! Мне срочно нужно ввести раздельный учет по НДС,. Учет ведется по разным складам. В Вашей обработке есть поле склад в таблице. но это поле не заполняется. Как быть?
(8)Здравствуйте. Да, по складам здесь не разбивает.
Могу переделать с отбором по складам, тогда для каждого склада отдельный документ ввода остатков сделаете. Если делать чтобы в 1 документе сразу по всем складам остатки вносились, то пока некогда. Только за доплату какую нибудь.
(9)Спасибо за ответ. Меня устроит и разными документами. Складов не много. Заранее спасибо.
(10)Сделал новую версию — можно вносить остатки по складам. Если на складах ведется суммовой и количественный учет.
(11) Спасибо. А как скачать новую версию. Снова за плату на той же странице?
Здравствуйте, обработка работает при включенном партионном учете?
(13)День добрый.
Наверное сработает, но партии подбираются не из субконто Партии а из регистратора прихода на 41 Сч.
Добрый день!
Скачал. Заменил наименование счета на Материалы.
Все равно ничего не выбирает для заполнения.
Может еще чего нужно подкрутить?
Проблема именно со списанием материалов (продукты питания в детский сад, запчасти на автомобили…)
Грехи прошлых лет по регистру НДС по приобретенным ценностям
Учет по среднему, но виды деятельности с учетом НДС и без учета НДС. Поэтому требуется поддерживать этот регистр, а в нем партии
Может подскажите, что еще подправить?
Кстати, склад один, поэтому разбивка по складам не принципиальна
(15) 1. Материалы — это группа счетов, обработка смотрит остатки по конкретному счету.
2. В обработке 2 запроса -может не везде счет заменили?
В новой версии выбор счета сделан в самой обработке.
Огромное спасибо!
Скачал последнюю версию. Чуть-чуть придется конечно подкрутить — В операцию несмотря на выбранный счет пишется 41.01 и ВидЦенности Товары (хотя на 10-х это материалы), но это легко поправляется.
СПАСИБО!!!
(17)Спасибо и Вам.
Исправил счет и вид ценностей.
🙂