<?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='\
(0) а можно алгоритм? ну совсем кратко
Не понял вопроса, алгоритм чего? Обработки или порядок действий?
можно и не перекидывать обработкой, а копирнуть все dbf-ки, которые начинаются на sc
Можно и так способ гораздо быстрее, только удалить все ненужные справочники.
(2) обработки 🙂
Спасибо! Работает отлично. 🙂
народ! когда орфографию будем исправлять? коробит, неприятно
Отличная обработка быстро формирует данные
С переносом справочников через DBF-ки я бы относился с осторожностью, из практики по свёртке базы в этом году столкнулся с не переносом некоторой информации:
1. в справочнике «Собственные юридические лица» не переносятся адреса, полное наименование;
2. в справочнике «Сторонние юридические лица» не переносятся адреса, полное наименование;
3. в справочнике «Физические лица» не переносятся адреса, полное наименование;
4. в справочнике «Номенклатура» не переносятся полное наименование;
5. в справочнике «Фирмы» не переносятся комментарий.
Пришлось переносить эти справочники частями.
Хотя это на порядок быстрее.
Спасибо! Очень помогло сделать свертку в нашей не типовой конфе!!!
Заинтерисовали коменты, скачал протестирую 🙂
а есть такая же обработка для 8.2?
(13) zacyx, Пока нет, мы еще не перевели нашу торговлю на 8.2, 8.2 пока сырая, там много чего для нас нет.
zacyx, Пока нет, мы еще не перевели нашу торговлю на 8.2, 8.2 пока сырая, там много чего для нас нет.
и чего же нет 8.2 того, что есть в 7ке? Очень заинтерисовали…
(15) HameleonA, В 7ке много чего не было, но наша конфа очень сильно переработана, внедрили очень много чего, теперь ждем, когда в 8ке появятся хотя-бы дисконт карты, у нас >20000 клиентов как-то не хочется им заново заводит дисконт.
Спасибо.Помогло.
Спасибо! очень помогло!
Какими документами формируются остатки? У меня старая ТиС (переписанная значительно), боюсь если вводом остатков, то не попрет у меня…
(19) asg1975, Остатки из старой базы берутся с регистров: ОстаткиТМЦ, Банк, Касса, ПодотчетныеЛица, Покупатели, Поставщики и в новой базе формируются стандартными документами Ввод остатков.
Если регистры не переписывали то выгружает нормально, пользуемся уже 5 лет.
Спасибо, пробуем
Скачала обработку. Тестирую. Ввод остатков сформировался быстро.
Теперь проверяю.
До этого пыталась сделать свертку БД
Но для моей БД та обработка не подошла. (осталось много док-в), из нее взяла ввод периодических реквизитов.
Доки Ввод остатков создались, но не совпала себестоимость по ТМЦ. С чем это может быть связано?
Конфигурация ТиС 7.7.9.2.934.
В Бухгалтерии есть обязательно «Закрытие месяца», а в ТиС?
(23) soroka, к сожалению я уже не помню, у мена было такое разница в копейках, занимался этим вопросом, но нашим бухам это было не принципиально. Так и оставил.
Судя по коду скорее всего ошибка происходит при пересчете цены.
У меня в формуле такой алгоритм (
).
Возможно, где-то в номенклатуре коэффициент не равен 1 + округление.
Посмотрела вводостатков ТМЦ — там есть отрицательные суммы. База не всегда ведется правильно. Менеджеры сверяют и исправляют.
(25) soroka, Обработка очень простая, она берет со старой базы остатки на конец сворачиваемого дня.
Если Ваша база ведется не правильно и не стоить контроль отрицательных остатков, то товар или суммы могут уйди в минус, так и перенесется.
Мы это уже проходили, у нас сейчас жесткий контроль над партиями + всегда пере проводятся документы (восстанавливаю границу последовательности документов) для актуальности итогов.
Перед сворачиванием я всегда пере провожу все документы и правим минусовые партии, тогда все становиться правильно.
Полезная штука, особенно для измененной конфигурации.