<?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) Можно. Нужно выбрать существующую конфигурацию. Если установить флаг «добавлять только новые», то будут добавлены только новые объекты, старые изменены не будут. Иначе будут добавлены только отмеченные в метаданных объекты, остальные будут помечены на удаление. Потом доделаю обновления отмеченных в метаданных объектов, без изменения не отмеченных (например, обновить только справочники).
(3) А можно ли обновлять существующие? как пример изменились реквизиты один удалили — другой добавили или поменяли длину или тип реквизита?
А из 77 тоже момжно загружать ?
1.02
— Добавлен режим частичного обновления метаданных. Для этого нужно установить флажок «Изменять только выбранные объекты метаданных». Тогда, если свойства имеют тип, не выбранный для загрузки, то будет производиться попытка поиска этого типа в базе (в случае неудачи тип свойства не будет назначен). Удаление не найденных объектов в этом случае тоже будет производиться только для выбранных метаданных.
(4) Теперь можно.
(5) Нет, там другая логика и типизация. Вообще, я 7.7 уже редко пользуюсь. В принципе, если будет достаточно желающих протестировать такую загрузку, то можно попробовать сделать и загрузку из 7.7.
1.03
— При модификации конфигурации сохраняется последняя настройка метаданных для выбранной конфигурации
1.04 (пока только для 8.2)
— оптимизирован алгоритм загрузки
— возможен выбор загружаемых метаданных вплоть до объекта
— в режиме обновления тоже возможен выбор метаданных вплоть до объекта
1.04
— добавлена версия для 8.1
1.05 (для 8.2)
— исправлена ошибка чтения лишних данных типов в режиме обновления
— добавлена поддержка новой КД 2.1.4 (новый тип УникальныйИдентификатор, загрузка состава планов обмена)
1.04 (для 8.1)
— исправлена ошибка чтения лишних данных типов в режиме обновления
1.06 (для 8.2)
— исправлена ошибка не обновления представления описания типа свойства, если при обновлении типа свойства изменился только квалификатор типа
— исправлена ошибка загрузки квалификаторов типа Субконто у регистра бухгалтерии
— добавлена поддержка загрузки метаданных из конфигураций с установленным вариантом встроенного языка «английский» (стандартная обработка КД этого не делает)
— на закладке «COM-соединение» добавлена кнопка перерегистрации comctrl.dll (при возникновении ошибки о невозможности создания COMConnector)
1.04 (для 8.1)
— исправлена ошибка не обновления представления описания типа свойства, если при обновлении типа свойства изменился только квалификатор типа
— исправлена ошибка загрузки квалификаторов типа Субконто у регистра бухгалтерии
— на закладке «COM-соединение» добавлена кнопка перерегистрации comctrl.dll (при возникновении ошибки о невозможности создания COMConnector)
(7)
(5) Нет, там другая логика и типизация.
95% случаев, когда я использую КД — это как раз перенос из (непечатные слова) 7.7 в 8.2
В противном случае мне и перенос через то же OLE сделать проще.
(13) Если готов помочь в тестировании такой загрузки, то можно попробовать её сделать. Я сейчас уже и не помню всех тонкостей метаданных в 7.7, только если на типовых тестировать и сравнивать с типовой загрузкой.
(14) Я точно не готов тестировать, аж по двум причинам 😉 :
1. Мне самому проще написать, чем тестировать
2. Смысла получения через COM не вижу, если честно
P.S. А вот свой дремучий (года аж 2001-го) описатель метаданных к 7.7 (ert) могу выслать, там пример работы со всеми объектами метаданных 7.7.
(15) Для 7.7. я тоже особого смысла не вижу через COM загружать метаданные, во всяком случае мне это не нужно, а вот для 8 пользуюсь постоянно (мне так удобнее, да и обновить нужно иногда только один реквизит или движения у одного документа).
ЗЫ Знания лишними не будут, спасибо 😀 Мыло в профиле.
(12)
Пытаюсь выполнить обновление метаданных для УТ 11.0.6.3 на УТ 11.0.6.4.
1С:Предприятие 8.2 (8.2.13.205)
Конвертация данных, редакция 2.1 (2.1.4.1)
1.07 (для 8.2)
— исправлена ошибка (17) возникающая при загрузке состава плана обмена, если он содержит последовательность.
ЗЫ Стандартная обработка КД 2.1.4 при загрузке состава плана обмена, если он содержит перерасчет или последовательность загружается битые ссылки.
Спасибо, теперь нормально. Если кто-то сомневается, зачем нужна эта работа, да хотя бы для удобства. Плюс у меня были случаи, когда типовой обработкой не удавалось извлечь метаданные, эта справлялась.
(19) Да, просто и удобно.
За обработку однозначно плюс, только вот попытался догрузить в конфигурацию справочник и получилось следующее:
В справочники объект добавился
В объекте не указаны значения: «Объект», «Синоним»
В свойствах объекта не указан «Тип»
Может я что сделал не так?
Да, видимо действительно что то сделал не так, повторно все удалось, спасибо, очень пригодилась обработка!!!
Попробовала выполнить загрузку данных — это то, что нужно! Очень удобно!
Просто спасение, когда используются конфигурации для управляемого приложения. Стандарными пользоваться крайне неудобно.
А время загрузки (меньше минуты) радует дополнительно.
(0) Привет.
Для использования с платформой 8.3 нет желания пофиксить?
В список выбора версии платформы добавить соответствующие строки. Далее в модуле формы изменить блок условий.
Показать полностью
Показать полностью
(25) Да, спасибо. За выходные сделаю. Заодно и для последней КД обновлю, давно хотел.
(26) Она в последней КД2 прекрасно работает без каких-либо доработок. Если бы не работало, я бы давно сообщил, так у меня она один из часто используемых инструментов с первой версии.
Версия 1.08:
— добавлена загрузка общих реквизитов (появилось в КД начиная с версии 2.1.6). Как и в типовой загружаются только не участвующие в разделении данных реквизиты.
— добавлен простой диалог выбора строки подключения базы из списка локальных баз. Анализируется файл «%AppData%1C1CEStartibases.v8i»
— добавлена возможность выбора версии платформы 8.3. Т.к. на форме элемента справочника «Конфигурации» нельзя выбрать версию платформы 8.3, то после загрузки базы (и сохранения настроек) версия платформы там будет не выбрана, но в настройках она будет правильной.
Тестировалось на 2.1.8.1.
Теперь удобно, особенно список баз.