<?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) Как обновлять роли, критерии отбора?
— об этом есть в статье: У ролей и тех объектов, у которых изменен состав – устанавливаем «объединить с приоритетом новой конфигурации поставщика».
— Что делать, если при обновлении выскочит окно, что есть связанные объекты, но не помеченные?
— об этом тоже есть: …игнорируем страшные предупреждения программы если они появляются и не соглашаемся на предложения включить дополнительные объекты в объединение…
Писал статью, вспоминая как сам делал первые обновления — мне бы эта статья пригодилась.
(2) Статья годная.
(2)
Этот момент, когда читал в статье не понял.
http://infostart.ru/public/18562/ , хоть она и старая, но сохраняет актуальность и на текущий момент, надеялся, что в этой статье можно почерпнуть что-то новое.
По поводу ролей, в роли же могут не только установлено новые права, но и убраны уже существующие, поэтому с приоритетом конфигурации поставщика лучше не обновлять
А вообще я читал вот такую статью
(4) По поводу ролей:
Если из типовой роли убирались права — об этом нужно знать. Особенно это может касаться роли «Пользователь» — очень много прав в типовых у нее. Проверить это можно запустив отчет о сравнении старой конфигурации поставщика и основной конфигурации. Но и в этом случае я думаю нужно объединять с приоритетом новой конфигурации поставщика, а в получившейся конфигурации убрать не нужные права. Спасибо за замечания.
Почему-то ничего не сказано, например, про kdiff3. С ним модули обновлять одно удовольствие — вжух и готово.
Отстал от жизни, работаю в основном на 8.2, на 8.3 возможностей для объединения модулей больше:http://v8.1c.ru/o7/201404merge/index.htm
(8) Спасибо за внимание уделенное статье. По пунктам отвечать не буду. Инструкцию считаю полезной для новичков (сужу по себе).
(9) Вот именно, что это больше похоже не на статью, а на памятку самому себе. И как любая памятка — она не всегда понятна для постороннего, некоторые советы в других конфигурациях бесполезны и/или вредны.
И очень странная реакция на конкретную критику: «Спасибо, но учитывать не буду. Для меня и так сойдёт». Вы написали не в текстовый файл для себя, а на ИС для других. Тут правильно либо оппонировать, если считаете критику необоснованной, либо исправить статью в соответствии с критикой…
Для новичков всё-таки рекомендую читать статью:Технология обновления нетиповых конфигураций 1С:Предприятия 8 . Букв больше придётся прочитать, но знаний и правильных мыслей тоже больше.
(11)
4.
Специально проверил, хотя был уверен в результате — после предложенных вами манипуляций не горит кнопка сохранения настроек объединения в файл! Это значит, что настройки сохранённые ранее не были изменены и сохранять нечего. Так что перепроверьте, результат не отличается! Релиз платформы: 8.3.8.2054. Возможно в вашей версии платформы он по-умолчанию ставит галочки неправильно (косяк конкретно версии).
6.
В статье написано:
Что мы увидим благодаря этому: что форма поменялась (или не поменялась) относительно сравнения «Основная конфигурация» — «Новая конфигурация поставщика». А смысл смотреть, анализировать, если до этого не был произведён анализ, а меняли ли мы сами эту форму (ситуацию, когда мы наизусть помним что меняли не учитываем)? Т.е. не произведено сравнение «Основная конфигурация» — «Старая конфигурация поставщика». Вот об этом ни слова.
7.
Сегодня нет, завтра нет, а потом вдруг резко возникнут. Почитайте статью данную в сообщении выше, там написаны возможные проблемы. Если на примере:
Релиз 1. В конфигурации есть Реквизит1 в каком-нибудь справочнике.
Релиз 2. Реквизит1 переименовывают в УдалитьРеквизит1 и создают новый Реквизит2. В обработке обновления данные из УдалитьРеквизит1 переносятся в Реквизит2. 1С-ники так часто делают. Реквизит2 может иметь другой тип, или взамен одного реквизита создали два или наоборот.
Релиз 3. УдалитьРеквизит1 удаляют, т.к. он не нужен. Все данные перенесены в Реквизит2.
Вы рабочую обновляете с релиза1 сразу на релиз 3. Данные пропадут.
Стоит «удачно» прыгнуть и будет косяк. Не факт, что его сразу заметят. Рекомендовать прыгать через несколько релизов новичкам точно не стоит.
(12)
4. По умолчанию на моей версии платформы фильтр установлен «Показывать отличия основной и новой конфигурации поставщика от старой конфигурации поставщика». Раз значения по умолчанию на разных релизах платформы различаются — тем более нужно действовать как описано в статье, что-бы быть уверенным что выбраны те объекты которые необходимы.
6. Написано что нужно сравнить формы и сравнение может потребоваться и то какое указали вы, и различные другие в том числе на отличие старой конфигурации поставщика от новой конфигурации поставщика. Если мы на сравнении основной конфигурации от новой конфигурации поставщика не видим в отчете изменений то можно дальше не анализировать.
7. Это полезное замечание. Нужно читать описание каждого релиза — что конкретно менялось. что-бы не попасть в такую ситуацию. Я думаю что удаление реквизитов описанное вами происходит (если смотреть пример) не на 3 релизе, а значительно позже, а может и вообще не происходит так и остаются реквизиты «УдалитьРеквизитТакойТо» — поэтому и проблем нет. Но что бы перестраховаться — я согласен лучше делать последовательно.
(13)
Я на разных версиях пробовал — всегда результат предсказуем. Он аналогичен тому что у вас после ваших манипуляций. Я просто предположил, что возможно у вас косяк конкретной версии платформы. Можете скрин дать объекта (в окне сравнения конфигураций), у которого в настройках по-умолчанию стоит галочка, а после ваших действий не установлена. У меня на новой версии платформы загорается строка, если настройки по-умолчанию изменены. После предложенных вами манипуляций ничего не загорается, т.к. мы получаем те самые настройки по умолчанию.
Об этом я и пишу, что часть основных моментов не отражено. Вы написали про «Отчет о сравнении объектов», а начинать надо сравнение с «Отчет о сравнении объектов основной конфигурации со старой конфигурацией поставщика» или «Отчет о сравнении объектов новой конфигурации со старой конфигурацией поставщика» (в зависимости от выбранной тактики).
В приложенных файлах:
а1 — по умолчанию (фильтр — Показывать отличия основной и новой конфигурации поставщика от старой конфигурации поставщика)
а2 — с установленным фильтром — Показывать отличия новой конфигурации поставщика от старой конфигурации поставщика
Версия платформы 8.2.19.130
Надеюсь хоть в этом вам статья оказалась полезной.
(15) похоже у вас глючит платформа. Посмотрите сами: у вас есть 2 общие формы:
1. НастройкаПрограммы
2. ПодборРолейУправляемая
Обе формы изменены вами по сравнению со старой конфигурацией поставщика. Обе формы не изменены в новой конфигурации поставщика по сравнению со старой. Т.е. чисто по логике обе должны быть «без галочки». Так на моей памяти работает любая версия платформы. А у вас одна с галочкой, другая без.
Если хотите проверить: скачайте платформу посвежее — там обе формы будут без галочки! Или даже подревнее — там тоже должно быть всё ОК.
(16) Даже если это глюк платформы (платформы разных версий работают порой странно) — в чем я лично сомневаюсь — скорее именно в том, что и как менялось в объекте, то способ предложенный в статье позволяет избежать таких ошибок, к тому же понятно какие именно объекты и зачем выбираются.
За статью спасибо большое! Добавила бы, что, по опыту работы, удобнее добавлять новые объекты (те же роли, справочники или документы), а не изменять существующие. Не всегда это возможно, но желательно.
Здравствуйте, а можно поподробнее, зачем ставить галку «разрешить удаление объектов основной конфигурации»?
(17)
в этом нет смысла — в (16) написано верно. Галка «дважды измененные» работает нормально только если стоит фильтр «Показывать отличия основной и новой конфигурации поставщика от старой конфигурации поставщика» т.е. показывает то что изменили вы и 1с и типо «дважды». Кста. интересно что использование внешних ПО объединенияhttp://v8.1c.ru/o7/201404merge/index.htm при «тройственном» объединении (конф на поддержке) удобнее «штатной объединялки» 1с — визуально показывает например сразу три фрагмента кода…
+ (20) хотя туплю… это
вообще не имеет смысла ибо вы потом все равно ставите «дважды измененные» что означает всего лишь один из фильтров…. за
а я вот не понял зачем снимать с поддержки ? сколько уже обновлял и просто загружал cf и всё отлично — зачем эти лишние движения?