<?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='\
Релиз 2.0.41.5 разработчиками признан ошибочным (в части нового регистра).
Потому данный способ вполне можно использовать.
Мне повезло — я ещё не обновился до 42.6
Текущая моя конфа 41.3
Спасибо за статью — воспользуюсь советом обязательно…
У меня в компании типовая 1С БП КОРП.
22.11.2012 вышел релиз 2.0.42.6. Т.к. в выходные обновиться не удалось, то 26.11.2012 я уже через франчайзи написал письмо в 1С с описанием ситуации. 29.11.2012 получил следующий ответ (привожу немного сократив):
«После обновления на 2.0.42.5 необходимо запуститься в режиме Предприятия для запуска пакета обработок и только потом обновиться на 2.0.42.6. Регистр «Данные первичных документов» у вас в ИБ пустой, т.к. до релиза 2.0.42 он использовался исключительно для учета ИП. Регистр обязательно должен заполниться при обновлении на 2.0.42, т.к. начиная с этого релиза он является хранилищем основных реквизитов для всех документов.
Какой объем ИБ у Вас, сколько примерно документов?»
Последний вопрос навел меня на мысль, что «товарищи из 1С» оказались недальновидными. Процесс обновления может занимать очень много времени. На порядок больше, чем обычно. «Могли бы предупредить!» — возмущался я, но сотрудник франчайзи ответил, что «они никогда этого не делают, потому что им…».
В итоге обновление на 2.0.42.6 с 2.0.41 у меня заняло 18 (!) часов, вместо обычных 30 минут. За это время регистр сведений наполнился около 1,5 миллиона (!) записями, что сопоставимо с количеством документов базе.
Короче, нет слов. Браво сотрудники «1С»!
Проверю переход на 2.0.43…
Возьму на вооружение, может пригодится!
(3) kuzev,
т.е. они «эмулировали» семорошный журнал документов?
ну, что ты скажешь, браво!
верните АлексаО — только он сможет точно сформулировать
Автор, исправьте «…до предпоследнего на сей день релиза 2.0.42.6…» на «…2.0.43.6…».(5) tango,
я вообще не понял, зачем ТАКОЕ делать.
Комментариев от 1С можно не ждать, я так понимаю.
(6) kuzev, последний релиз на текущее время 2.0.43.6. ПРЕДпоследний релиз (на сей день) 2.0.42.6.
Зачем что-то исправлять?
(7) kuzev, каменты от 1с так же предсказуемы, как от АлексаО
а вот хотелось бы послушать звуков от позитивных наших
А на это я вообще наплевал, т.к. времени на обновления потребуется в 2 раза больше. Сначала ждать, когда обновится база с 2.0.42.5, затем, обновив конфигурацию на 2.0.42.6, опять ждать обновления базы. И в том, и в другом случае регистр сведений заполняется/перезаполняется.
Коллеги, данная короткая публикация направлена НЕ на разжигание религиозной/классовой/подставить_нужное ненависти к ребятам с Селезневки.
Это просто мое альтруистическое желание сэкономить Вам всем нервы/время. И не более того.
Поэтому не ищите здесь тайных смыслов.
Кому актуально — просто сделайте как написано.
(11) да ладно, чё тут разжигать-то 🙂
плеснул керосинчика в эпицентр хиросимы 🙂
Божественно, как раз поленился на 42й релиз обновляться.
Как и обещал, запустил обновление базы на 2.0.43.6. Скорость заполнения регистра сведений увеличилась, но не в разы. Имхо, где-то раза в полтора. Ничего божественного =((( О результатах сообщу…
Нужно заполнение регистра реквизитов документов закомментировать в конфигурации (в обработке обновления).
А регистр заполнить после обновления, сделав внешнюю обработку.
Пользователям базовых и неизменных могу только посочувствовать.
а он вообще зачем — этот регистр?
подозрение имею, что только ради электронного оборота
ну так и пусть заполняют, кто к электронной россии учаснег
Я не понимаю, чего народ так плюсует топикстартера. У кого документов в базе мало, тем все равно, т.к. и не заметят обновления. Остальные же будут иметь головную боль и выкраивать время для апдейта. Жаль, что нет кнопки минус «разработчикам» 1С.
(17) kuzev, если основная работа — поддержка, причем именно бухии, то самое ценное из всего, что есть на ИС — это именно сабж и всё такое
так что ТС — два плюса 🙂
Мальчики, вместо того, чтобы руки в стороны раздвигать, доказывая, что щука была ничуть не меньше во-о-о-т такого размера, скажите лучше: безболезненно ли прыгать через несколько релизов на последний с полной цф’ки? Не будет какого-нить «копенгагена» при обновлении, как в своё время с Комплексной/УПП? Спасибо.
(18) tango,
дождемся моих замеров, а то их что-то нет у ТС 🙂
(19) zzz_natali,
мне давали полную cf-ку с 2.0.42.6. Результат аналогичен. Так что прыгайте.
(19) zzz_natali, ап 🙂
Спасибо за статью. Пригодится. Вообще, все обновления 1С – это хождение по минному полю, приходилось не раз сталкиваться с различными проблемами. Разработчики с Селезневки не очень-то заботятся тестированием своих «творений». А вывод – тривиальный – обязательно делать резервные копии баз перед обновлением. И если «подорвались» (что-то пошло не так), забейте на всё, верните в работу копию базы и ждите следующего обновления (то бишь исправления их ошибок).
Плюс за лаконичность…. 🙂
Краткость сестра таланта.:)))
Спасибо.
очень вовремя заметил статью, спасибо
Я еще не раз замечал, что файл БД (при файловом конечно же режиме) может быть сильно фрагментирован (актуально для старых и забитых дисков в WinXP) и если его до обновления, или еще каких работ, дефрагментировать (может помочь например WinContig), то скорость обработки может увеличиться не то что в разы — а на порядки! 🙂
недавно обновлял бухгалтерию, база небольшая — не заметил. Действительно в режим 1с предприятия можно не заходить, тогда при первом запуске происходит последовательное обновление с релиза на релиз. Если не прав то поправьте, так как давно не занимаюсь обновлениями типовыми.
ага у меня почасовка вообще шикарно подсобила фирма 1С. клиент выбрал обновление по часам а не по каждому обновлению оплатить. И тут такая засада +4 часа.
Докладываю. Обновление заняло 10 часов 20 минут, вместо 18 часов. Итого затрачено времени примерно на 40% меньше. Ну, хоть что-то «товарищам» удалось исправить. В таком случае, обновление можно на ночь запустить на буднях.
А обновить с помощью .cf сразу до 2.0.43.6 с любого релиза вам что мешает? о_О
(31) так не делают
(31) Lyns_owner,
Мешают знания.
(33) Конкретнее? Через релиз перешагнуть вполне можно.
(34) Lyns_owner, достаточно одного раза, чтобы априори придерживаться рекомендованной последовательности
(33) (35) tango, Обновление на один релиз и последующее обновление на другой релиз, БЕЗ открытия предприятия — равнозначно обновлению с помощью .cf на эти 2 релиза.
(33) вам мешают «Знания»? Так почему, в таком случае, они вам не мешают обновлять 2 релиза подряд без открытия предприятия?
(36) Lyns_owner, ты сам писал же С ЛЮБОГО релиза, может ты через 6 релизов предлагаешь вообще, я вот не читаю мысли
На площадке шум и звон,
Не работает «Аргон»,
Ни разведки, ни захвата,
Про@@ались до заката!
Последний опыт: около пяти баз обновилось нормально, одна — фиг вам.
На 42.6 встала нормально, при обновлении на 43.6 в процессе «Сравнение объектов» «Инструкция обратилась по адресу… бла-бла», т.е. вышибает движок. Чего только не пробовал: на разных движках, на разных машинах, на разных ОС — именно так и вылетает. Базу, разумеется, протестил и конфигуратором, и chdbfl.exe, кажет — ОК.
Обновление через cf, а также «Сравнить, объединить» через cf — точно так же вылетает, и именно в процессе сравнения объектов.
Плюнул на всё, снял с поддержки, сделал «Загрузить конфигурацию из файла» — прошло. Практически день на эксперименты ушел 🙁
(36) Lyns_owner, Так какие проблемы есть с умеренным (2-3 релиза ) перепрыгиванием через релизы?
(38) Abadonna,
Для статистики.
У меня вот тоже вылетела платформа с ошибкой при обновлении с 2.0.40.8 на 2.0.42.5.
Не стал экспериментировать и обновил сначала на 2.0.41.3, как делал и раньше, а затем на 2.0.42.6. После чего на 2.0.43.6.
сейчас бухия не захотела принять выгрузку из ЗУПа: 43 ей подавай!
сделал 40.8 -> 42.5 -> 43.6 штатно
полет нормальный
Спасибо, грамотно, толково и экономит практически час времени!
А если в 2.0.42.5 я уже запустил в режиме предприятия? Если теперь закрою его, обновлюсь дальше, до 43.6, поможет ли это?
вопрос снят, нормуль, на 43.13 минут за 10 обновилась
внесу свои пять копеек… со временем обновления особо проблем не было, заметил что подольше, но незначительно, а сейчас узнал откуда ноги растут, респект автору!
НО! посмотрел ссылки в на регистр в конфигураторе, спросил ИТС поиском, и-нет бегло посмотрел, но так и не понял оно (регистро) зачем собственно?
али услышал звон, да не понял где он? я про ДанныеПервичныхДокументов, а автор упоминает РеквизитыПервичныхДокументов…
(46) beard1,
Маленькое историческое пояснение для потомков: регистр сведений РеквизитыПервичныхДокументов использовался в документе акт сверки. Если бы этот регистр не заполнялся, то правильная работа конфигурации не гарантировалась.
в точку франч ответил 😉
Спасибо
Помогло, спасибо! )