<?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с их не встраивает.
все робит, супер, автор зачет
Спасибо автору — нужная форма.
Пара замечаний…
1) Не корректно считает остаточные суммы по 97-му счету если Регл.операция со временем 23:59:59, а отчет делается на эту же дату. Решает проблему передача в запрос не даты, а Границы с включением конца (для получения остатков по регистру бухгалтерии), только для этого нужен доп.параметр, т.к. в запросе есть расчет периодов от этой даты.
2) И еще если весь подвал выводится на отдельной странице, то на ней необходимо выводить итоговую строку (ну как-бы подписи должны именно под ней стоять)).
Могу скинуть подправленный вариант автору 🙂
(3) DeMorshe, Доработал с учетом ваших замечаний и обновил файл в публикации. Весьма благодарен, очень жаль, что сам не заметил.
Супер! Сразу заработало! Благодарность автору от меня и нашего Главбуха.
Границу вы, товарищи, не правильно указали. Зачем там в границе Прошлый месяц смотреть??
У вас так написано:
Правильно будет так:
За обработку спасибо, сэкономила моё время.
(6) andron58, все правильно заметили и товарищи быстро все исправили и даже уже опубликовали корректный отчет 🙂
Спасибо за отчет! Есть замечания: в макете указан ошибочный формат ячейки:
в колонке 9 (СуммаКСписаниию) в строках Строка, Итого: формат даты (ДФ=dd.MM.yyyy) вместо формата числа;
в колонке 11 (СписаноЗаМесяц) в строках Строка, Итого: формат года (ДФ=yyyy) вместо формата числа;
(8) rin0310, Файл обновил. Исправил формат и заодно выравнивание в числовых полях, теперь будет выравнивать по правому краю.
у меня пишет ошибка методанных, (у нас БП 3 )
(10) 010114, нужно больше информации, а именно:
Колонка 4 формируется и спр. «Раходы будущих периодов». Это не верно, т.к. сумма, указанная в этом справочнике является справочной. Необходимо весь расчет строить на основе первоначальной суммы из Операций.
Спасибо. Так как в настоящее время учет страховок должен учитываться не на счете 97, а на счете 76.01.9, то для этих целей на основании данной разработки получилось легко создать новый вариант акта инвентаризации для счета 76.01.9.
Спасибо большое за обработку, она мне так срочно нужна была, т.к. бухи в самый последний момент мне заявили о необходимости. Сидеть делать макет и выверять выборку не было времени.И на тебе! сходу нахожу вашу обработку, готовенькую! Никаких ошибок ни в форме, ни в выборке не нашла. Всё классно.
Здравствуйте.
Сергей, подскажите, пожалуйста, в текущей версии 3.0.47.33 обработка будет работать?
(15) Здравствуйте.
Да, должно работать. Если не будет работать, тогда доработаю и выложу исправленную версию.
Вам вышлю по почте новую версию, чтобы не скачивать два раза.
Круто было бы, если бы отчет разрезал на листы с выводом шапки и промежуточных итогов на каждом, как в стандартных формах инвентаризации (например, ИНВ-1).
А так получается, в силу того, что используется разный формат строк — в экселе очень трудоемко резать на листы и добавлять подвалы с промежуточными итогами в каждом.
Здравствуйте!
вчера купила Ваш отчет, но на почту ссылка не пришла. что делать в таком случае?
Если ссылка не приходит то этот вопрос лучше направить поддержку infostart.
(19) спасибо!
Добрый день! Для Бух КОРП 3.0.67.67 подойдет, подскажите, пожалуйста?
И по счету 76.01.9 формирует отчет или только по 97?
Добрый день. Не знаю, не тестировал на этой конфигурации. Отчет формируется только по счету 97.