<?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с с праметром /с ЗапуститьОбновлениеИнформационнойБазы
(тут надо обратить внимание, что в «/c» с- это английская буква, т.к. если скопировать из описания 1с — она почему-то оказывается русской и не очень очевидно в чем проблема при запуске)
Способы не новые и все их можно найти в интернете,
т.к. проблема частая и проявляется в том числе при добавлении многих объектов метаданных — например нового документа…
С начала этого года пытались с клиентом перейти на 3.0, обновив 2.0. Исходная конфигурация содержит много доработок. При помощи бубна удалось обновить конфигурацию. Но, что характерно, 1с обошла несовместимость алгоритмов проведения, просто установив флажок ручной корректировки проводок в некоторых документах. Эксперимент показал, что если снять флажок и перепровести документ, получим не тот результат который был до проведения. Клиента такой вариант не устроил, со следующего года переходит на 3.0 через остатки. Другие клиенты высказали такое же мнение.
В начале года пытались также перейти С БП 2.0 на БП 3.0. через обновление конфигурации.Столкнулись с низкой производительностью конфигурации+несовместимость некоторых алгоритмов по ЗП.Решено с 2015 переходить с перенесением остатков в чистую конфигурацию.
Обновили 3 базы, одна из них была с «криводоработками», к которым бухи привыкли. Обновились с 2.0 до 3.0 среди года. 2 конфы почти типовые, их бухгалтеры вроде как вообще довольны. Встречаются документы с ручной корректировкой, но проанализировав не увидел ничего страшного, перепроведение, как правило, даёт тот же результат после переноса кода из старой версии. Да и так бухгалтерскую операцию и корректировку проводок часто используют,
за что руки готов побить тому, кто их к этому приучил,поэтому сравнил ОСВ в двух базах и вперёд, т.к. расхождений не было.кстати, теперь финансисты подключаются к базам филиалам напрямую, без всяких РИБов, которые меня
задолбалисовсем не радовали. Скорость отличная через тонкого клиента!Не знаю как раньше, но выпуски этого года хранят внешние обработки в папках шаблонов конфигураций по адресу%AppData%1C1cv8 mplts1cSSL2_2_3_41ExtFilesИнструмент ы разработчика
тоже предстоит перевод с БП 2.0 на БП 3.0((, возьму на заметку
мда.. описание в целом полезное, но часть информации из серии «не знаю зачем, но нажимайте эту желтую кнопку»
«Оказывается, в БП 3.0.24.9 есть справочник «Идентификатор объектов метаданных», в котором присутствует описание метаданных конфигрурации. В ряде ситуаций конфигурация требует, чтобы новые объекты присутствовали в этом справочнике. Зачем? Вопрос опять же риторический. А потому что!»
Справочник нужен для того, чтобы его можно было использоваться в профилях групп пользователей.
В профиле должны указываться роли(в табличной части элемента). Но так как сами роли как метаданные не представлены в пользовательском режиме и вообще недоступны как ссылки на объекты — сделали такой справочник, в котором хранят идентификаторы объектов МД. Справочник чисто служебный, недоступный для ручного изменения.
Обновление или спец обработку запускать не обязательно, достаточно выполнить экспортную функцию:
Справочники.ИдентификаторыОбъектовМетаданных.ОбновитьДанныеСправочника(ИСТИНА,ЛОЖЬ,ЛОЖЬ);//ЕстьИзменения, ЕстьУдаленные, ТолькоПроверка
Если вы добавили новую роль, то помимо обновления вышеуказанного справочника необходимо еще и обновить значение константы ПараметрыРаботыПользователей. Константа содержит в себе структуру связей ролей и профилей. Через неё работает обратная связь, когда вы в реж Предприятия назначаете пользователю профиль групп пользователя, а пользователю ИБ назначаются роли этого профиля.
Обновить значения константы можно так:
Константы.ПараметрыРаботыПользователей.СоздатьМенеджерЗначения().ОбновитьОбщиеПараметры();
И когда назначаете профили пользователям — создаются элементы спр ГруппыДоступа, в которых и хранятся связки пользователь-профиль
про программную работу с доступом и правами можно почитать вhttp://infostart.ru/public/300363/
Оформление потом допилю)
Огромное спасибо за статью. Очень приятно, когда люди делятся своим опытом. Я не программист, поэтому рада любой помощи, любому совету. Моя розовая мечта, создать с нуля внешнюю печатную форму, а не качать с инфостарта. Буду пытаться с Вашей помощью осуществить свою мечту.
Огромное спасибо за статью! Очень актуально сейчас.
Спасибо