<?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='\
Можно распределять приходы с разными ценами в разные дни? делает ли автоматом сборку «расходных» накладных за период и консолидирует по возможности под них закупки..?
задача вообщем-то не сильно сложная, гораздо интереснее было бы обеспечить получение «требуемой» науенки при условии невозможности изменения входных и выходных цен… ;-))
Понравилось…
Где ответ на мой вопрос? 😉
Да они как бы не в тему. Просто надо взять и посмотреть.
:-((( У меня не получается! Что я делаю не так?
Деление на 0
— Выполнено…
Не забудьте проверить и провести сформированные документы!
> Да они как бы не в тему. Просто надо взять и посмотреть.
вопросы в тему!
.. еслисначала юзать а потом читать — то сильно дорого получится…
Что за конфигурация? УСН, Типовая??? если УСН, то проверяется счет МХ.2, если типовая, то смотрится оборот 41-го. Правильно укажите склад, контрагента… А вообще, там описание имеется.
«Те товары, остатки по которым окажутся отрицательными, войдут в сформированные документы поступления».
А разве можно в типовой бухгалтерии отгрузить товар, которого нет на складе? У меня и накладная не проведется…
Это целая наука. Кто ее не разумеет, тому и ента обработка ни к чему
Клёва ещё бы по минусам считала ваще было бы супер
«Обработка распространяется бесплатно. Вы можете использовать ее в коммерческих целях..»
У меня нестандартаня конф ТиС, поэтому пишет ошибку-переменная не определна. Хотела открытьи исправить-просит пароль.
Где его взять?
Хотелось бы как-то все-таки посмортреть разработку.Такая обработка нужна.
Не могу посмотреть-покуа-«минус»
Вообще, оно для Бухгалтерии, а не для ТиС, поэтому, не подойдет даже с паролем.
вот нашелся бы добрый человек, который бы сделал нечто подобное для Бухии (Украина)….
если необходимо месяц делить на периоды и делать приходы то после первого сформированного прихода выдает ошибку, что номер не уникален, так же выводит позиции с нулевыми ценами
(14) Возможно, что-то не так с базой. Скорее всего, у Вас сбиты номера в документах по причине чьей-то любви нумеровать все вручную. Можно сделать перенумерацию, как вариант.
Деление на 0
Док.Записать();
{ФОРМИРОВАНИЕ ПРИХОДА ПО РЕАЛИЗАЦИИ.ERT(176)}: Номер не уникальный! Первый приход формируется нормально, но при втором формировании прихода за месяц выдает ошибку. Номера здесь ни при чем, делала перенумерацию, тогда пишет выполнено деление на 0 и все позиции с нулевыми ценами
«выполнено деление на 0» — на какой строке? Т.е., какой номер в скобках? Про номера — точно они. Много раз с таким сталкивался. Если бы посмотреть Вашу базу, то нашел бы. Впрочем, добавил в обработку проверку на уникальность номера. Качайте, проверяйте. Если все зарабортает, то значит, виноваты были номера документов, и у Вас они сбиты.
деление на ноль, типовые причины:
— пустая строка в тч дока;
— не задана единица измерения;
— в единице измерения Кф = 0;
для «облегчения» ситуевины в неуникальными номерами: создавай эти доки с префиксами, меньшими чем алфавитные буквы, типа «/», «!»,»+»… Заодно по этим номерам будет «видно» нужные доки
мне оч. понравилось. спасибо
мне тоже очень понравилось 😉
А для 8. … есть такая?
Есть, выкладывал кто-то подобное.
Ссылочкой не поделюсь.
Надо будет сделать. Уже неоднократно замечаю, как досужие товарисчи быстренько воплощают проверенные идеи.
Эх, Планет, мне бы твои проблемы 😉 Делаю именно приходы под реализацию, но т.к. фирм много (своих) еще надо и найти по КАКОЙ именно есть остаток со всеми вытекающими :))))
Очень полезная вещь, спасибо Вам огромное 🙂
Спасибо! Работает нормально 7.7 Бухгалтерия…На УСН не пробовал