<?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 Тогда
ЗаписьВЛог(Строка(Док.ТекущийДокумент())+» есть остатки по подчиненным документам, не удален»);
Удалять = 0;
Прервать;
КонецЕсли;
КонецЦикла;
В общем надеюсь понятно
Отработала обработка в этот раз за час (можно еще ускорить), в прошлом году на базе тех же клиентов — примерно 2.5 на DBF (старая обработка)
> (не забываем про картинки)
Как это сделать попроще?
Сохранить картинки в файл из моей конфиги и потом добавить в свою библиотеку
Кое какие мелочи делались на ходу без проверки
Основные моменты прошли боевое крещение
Так что пишите письма ежели что
Перед запуском Свертки видимо нужно запустить Wrap например на 31.12.06.
Создадутся остатки на эту дату.
Что проще сделать чтобы не удалить их Сверткой.
Ничего запускать не надо
Свертка сворачивает регистры
Проводки в базе заказчика я делал по-тупому (все обнулял и заливал остатки)
Важнее было понять что можно удалять а что нет (инфа есть в регистрах и т.п.)
>Проводки в базе заказчика я делал по-тупому (все обнулял и заливал остатки)
Например я провел Свертку на 31.12.06.
Половина документов (проводки остались) не удалена из за наличия ссылок.
И как мне залить бухгалтерские остатки?
Я думал сделать wrap (удалить проводки) свертку бухгалтерии на 31.12.06.
Затем свертку Регистров на 30.11.06.
Разницы нет, но логичнее делать манипуляции с проводками после свертки, не правда ли (в том случае если документы имеют и проводки и движения)?
Как залить?
Списать остатки в ноль
А потом выгрузить из эталонной базы
Пробовали в деле?
Я пока на 1 стадии
Стандартная Wrap очень долго (10-15 часов 2 года убирает), база 15 гб — комплексная. Log файл разрастается до 13 гб.
Занимался wrap_sql_dbf — Быстрая свертка Бухгалтерских баз (1c.proclub.ru).
Но там обязателен пересчет итогов, а главное не корректно удаляет проводки (пока не понял из за чего).
Черновые проходы свертки Регистров делал, достаточно неплохо.
Но мы оставляем 2 года и возрат ТА в текущее состояние занимает время 2-3 часа.
Для сверки баз купил ж. диск 500 гб — завтра поставлю.
Первые впечатления достаточно хорошие, будем дожимать.
В общем-то более быстрым может быть только удаление объектов напрямую (весьма быстро)
Но это потребует последующего ТиИ, на базе 10 гиг у моего компа ушло 8 часов
Такой долгий перенос ТА :0
Возможно из-за идиотского регистра в котором ведется УСН…
Если не сдвигать ТА — замедлится удаление
ЗЫ. Ну это я преувеличил слегка, есть поле для оптимизации 🙂
Вадимко, а что — тока для СКУЛя работает?
Да, для DBF не буду делать
По сути мало будет отличаться
Кстати у нас при свертке(частично использовали твою обработку) возникла проблема — существует документы сторнирующие свои документы основания — соответственно они минусуют полностью движения основания и делают свои движения. При этом если основание до даты свертки, а сторнирующий документ после и основаниене висит в остатках, то лезут косяки — сторнировать то нечего. Как сам бы решал такую проблему?
к 14, имелось в виду основание не висит в остатках
к примеру до свертки
остаток на дату свертки 0
докоснование движение: остатки ТМЦ товар расход 10 (датаДок до свертки)
корректировка: остаки ТМЦ товар расход -10(датаДок после свертки)
: остаки ТМЦ товар расход 5
остаток после корректировки 5
после свертки:
основания нет, корректировка делает движения: остаки ТМЦ товар расход 5
остаток после корректировки -5
после свертки* основания нет
(14) Не очень понятно из-за чего такое может случиться
Конечно я сталкивался с похожим (допустим частичная оплата документа в обрезаемом периоде) — все было корректно
Документ «Двигатель регистров» должен был зафиксировать остаток +5 по-любому
Может базу обрезали не на ту дату что надо либо меняли даты документов ДвижениеРегистра
Ну или кривое что-то в сторнировке 🙂
Если все же действительно что-то не так — можно проверять такие ситуации см. пост № 1 и не удалять некоторые документы
❓ Проверил работает.
Режим стандартной обработки ( неиспользую внешнюю компоненту ).
Добавил простую процедуру удаления документов
(удаляем все доки на дату свертки) с контролем % выполнения удаления
интересно до 80% удаление происходит быстро после резкое торможение.
❓ ? кто знает почему.
Как ее установить? Я объединила конфигурации, но теперь называется мой предприниматель сверткой 1.0 СКЛ, журналы открываются с ошибкой, документы видимо пустые, т.к. не вижу ни контрагента, ни суммы. А дальше то что?
Столкнулся с проблемой на SQL 2005, Сам я прямые запросы не знаю поэтому прошу помочь исправить данную обработку под SQL 2005. Ошибка:
«ТЗ = ЗапросСКЛ.ВыполнитьИнструкцию(ТекстЗапроса);
{Обработка.СверткаSQL.Форма.Модуль(527)}: State 42000, native 102, message [Microsoft][ODBC SQL Server Driver][SQL Server]Incorrect syntax near ’77’.»
Комментарии настораживают… но, думаю, рискнуть стоит, а вдруг получится… Другими свертками не удалось свернуть базу sql в 12 гигов. А вдруг получится)))