<?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='\
Э-Э-Э , процедуру проверки на уже созданные фактуры, проверяем для себя, мне не надо но вклинил, есть дикое подозрение, что она не работает, т.е. при повторном запуске создаст дубль, и отписываемся, не стесняемся, если что надо кому, подправлю
очень надо,
впринципе просто проверять подчиненность выписаных сф, но доделай сам =)
Да в том то и дело, что мне не надо:), народ предупреждаю, чтобы дров не наломали. Ну хоть кто то что нибудь напишите, положительное или отрицательное ;), помогло если кому то, порадуйте автора, спасибом
ну а зачем тогда писать что подправишь если тебе нах это не надо?
Каюсь, не так тебя понял, поправил, на проверку по вложенности и суммы, если фактура есть, и она отличается по сумме, то ставится сумма по счету.
Просьба по точней сообщать, что хотелось бы поправить, дабы не было недоразумений.
Добавлена функция переделки выписок(если в выписке фигурирует счет 62.1 то переделывается на 62.2, корректировка в обратную сторону проводится проведением последующей реализации или обработкой для формирования СчФ, если отгрузка была раньше выписки)
У тя явно в моделу что то присутствует, чего нету в типовых: ошибка
Если Константа.МетодопределенияВыручки.Получить(СчетФактура.ДатаДок) = глПоОтгрузке <<?>>Тогда
{\192.168.0.45ERT ФАЙЛЫAVANSY5DN.ERT(87)}: Переменная не определена (глПоОтгрузке)
СчетФактура.СтавкаНДС = глЗначениеПоУмолчанию<<?>>(«ОсновнаяСтавкаНДС»);
{\192.168.0.45ERT ФАЙЛЫAVANSY5DN.ERT(123)}: Функция не обнаружена (глЗначениеПоУмолчанию)
СчетФактура.НДС = Окр(ОплатаАванс*глЗначениеПоУмолчанию<<?>>(«ОсновнаяСтавкаНДС»).Ставка/(100+глЗначениеПоУмолчанию(«ОсновнаяСтавкаНДС»).Ставка) ,2,1);
{\192.168.0.45ERT ФАЙЛЫAVANSY5DN.ERT(124)}: Функция не обнаружена (глЗначениеПоУмолчанию)
обнови релиз бухии и будет тебе счастье:)
44 скачивания и почти никто ни чего не пишет, народ не поленитесь отпишитесь. у вех ли работает, что не устраивает, детище все таки, интересно.
Вполне возмжно, база полгода не обновлялась)
А для БП 8.1 че-нить подобное есть? Очень нужно…
если не ошибаюсь, то после 12 релиза бухии, все уже работает
Исправлены ошибки и недочеты, оптимизирована скорость, проверена работа на базовой конфигурации, пользуйтесь.
Спасибо
Работает
Мдя, узнал на грустном опыте затем рейтинг нужен, не смог скачать нужную для анализа обработку, пришлось писать самому, так что если есть довольные обработкой плюсуйте не жалейте.
Кстати если кому нужно 60 счет приписать, могу дописать, пишите в личку или сюда
Поставила вашу програмулину, но такая вещ правильно выставилось только по одному контрагенту. Во всех остальных случаях либо не считает оплату авансом, и сама ставит счет 62.1 а потом как бухнет через 2 квартала. В общем путается при определении аванс или нет. Все у себя проверила. не проще ли было выставлять на аванс когда весь 62 счет без учета субсчетов возникает выставлять на эту сумму счет фактуру на аванс. Мы бухи в большинстве своем стараемся все на одном договоре проводить, чтоб не париться, а у кого учет еще и по договорам у того свой прог что нибудь сочиняет и правит. Я все проверяю ни одна обработка правильно не выставляет ни у меня ни у знакомых.
У тя явно в моделу что то присутствует, чего нету в типовых: ошибка
Если Константа.МетодопределенияВыручки.Получить(СчетФактура.ДатаДок) = глПоОтгрузке <<?>>Тогда
{\192.168.0.45ERT ФАЙЛЫAVANSY5DN.ERT(87)}: Переменная не определена (глПоОтгрузке)
СчетФактура.СтавкаНДС = глЗначениеПоУмолчанию<<?>>(«ОсновнаяСтавкаНДС»);
{\192.168.0.45ERT ФАЙЛЫAVANSY5DN.ERT(123)}: Функция не обнаружена (глЗначениеПоУмолчанию)
СчетФактура.НДС = Окр(ОплатаАванс*глЗначениеПоУмолчанию<<?>>(«ОсновнаяСтавкаНДС»).Ставка/(100+глЗначениеПоУмолчанию(«ОсновнаяСтавкаНДС»).Ставка) ,2,1);
{\192.168.0.45ERT ФАЙЛЫAVANSY5DN.ERT(124)}: Функция не обнаружена (глЗначениеПоУмолчанию)
Да тоже повторилась такая ошибка. Даже не знаю правильно ли формируеются счета фактуры