<?php // Полная загрузка сервисных книжек, создан 2026-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='\
Я в шоке…
83 просмотра и всего один плюс…
В чём дело, коллеги?
Если есть какие-то замечания/нарекания, прошу поделиться.
Добрый день! Если уж начал делать такую доработку, то логичнее дописать добавление записи в регистр сведений «История налоговых реквизитов организаций», а иначе как сам пишешь: «налоговые реквизиты меняются весьма нечасто (раз в несколько лет), поэтому автоматизировать этот процесс не вижу смысла»(С)Панталоцци. Так что или закончи доработку и получи «+» или «автоматизировать этот процесс не вижу смысла.»(С)Панталоцци
Если бы ты повнимательнее читал статью, то понял бы, что цель доработки — решить проблему распечатки старых документов (со старыми значениями реквизитов).
И доработка полностью выполняет свою цель.
Следить за актуальностью регистра — это второй вопрос. На мой взгляд, тут удобнее «ручное управление» содержимым регистра.
Как я уже сказал, налоговые реквизиты меняются очень редко. У меня база возрастом 9 лет, 11 организаций.
И за все 9 лет только две записи в этом регистре. За каким лядом автоматизировать это?
А в каких случаях меняется ИНН? Не нужно ли заводить нового контрагента?
ИНН юридического лица меняется при реорганизации (например, было ЗАО, стало ООО)
Юридический адрес и КПП могут меняться чаще — например, при переезде
Подощли к такой же проблеме. Плюсую за ее решение.
(1) делюсь.
Использовать периодический РС для хранения периодически изменяющихся данных это хорошо. Что нового в вашем решении? Ничего. Тогда за что много плюсов должно быть поставлено?
(7) anchovy,
Где я написал, что много плюсов ДОЛЖНО быть поставлено? Покажи мне, где у меня есть такие слова, будь добр.
Мне нафиг твой плюс не нужен, оставь его себе и береги как зеницу око!
Что касается предлагаемого мною решения, ты мог заметить, оно заключается не только в тупой и банальной идее, что «Использовать периодический РС для хранения периодически изменяющихся данных это хорошо».
В статье перечислены детально все правки, которые нужно внести в конфигурацию. Тот, кто столкнулся с похожей проблемой, может воспользоваться статьёй и решить проблему за 10 минут. Если я смог кому-то сэкономить время, думаю он плюсанёт. Ты не относишься к этой категории, поэтому всего хорошего, иди дальше со своим драгоценным плюсом.
Тренироваться.
Медитировать.
Учить Русский язык.
Удачи.
Я тебя тоже люблю.
Давай, покеда.
Спасибо за наводку, буду прикручивать к БП 3.
Спасибо, не успел , и уже такую нужную статью нашел
Спасибо.
Попробовал на одной базе реализовать этот подход.
Но с небольшими изменениями.
Мне показалось, что логичнее было бы запоминать только старые значения реквизитов.
Которые были «до» даты их изменения. Это значит, что нужно использовать не срез последних, который определяет действующие реквизиты, а срез первых. Иначе непонятно, с какого периода ставить действие старых реквизитов.
спасибо!
Премного благодарен.
Спасибо п.2, где указано конкретное место, куда вставить новые данные.
А периодический регистр универсальный у меня уже свой был ))
Сделал копию регистра сведений КонтактнаяИнформация — назвал ИстоиряКонтактнойИнформации.
Сделал подписку на события ПриЗаписи для РС.КонтактнаяИнформация
Общиймодуль.ИсторияКонтактнойИнформации, где храниться процедура из подписки на событие.
Там описал процедуру, которая при любых изменениях в контактной информации проверяет отличие от последней записи в истории (РС.ИстоиряКонтактнойИнформации). Если отличия есть в полях: «Представление» и «Комментарий», в РС.ИстоиряКонтактнойИнформации добавляется новая запись с актуальными данными. (Можно конечно проверить все поля)
Таким образом история собирается автоматически. А дальше — как у автора.
Спасибо За подсказку. Дописал себе еще и ФактическийАдрес. По аналогии с Юридическим.
Здравствуйте, для меня все это большая загадка, но может быть вы подскажите):
После импорта из 7.7 для всех старых контрагентов адрес печатается в документах, а для новых нет
Т.е. в карточке адрес есть, но его код не 00…01 или 00…02, а другой и в документах пусто, только инн и кпп
Смотрю в демо версию, там если добавить новую запись для юрадрес или фактичесий, появляется новое значение, с новым кодом и тогда тоже не печатает адрес в документах, а со значением 00…01 печатает
Я бы рад выбрать какое то другое значение для юр адреса, но могу только плодить новые)
подскажите пожалуйста, как это сделать?
Мне показалось, что в этой статье описана похожая задача, но не может же быть все так страшно в реализации!)