<?php // Полная загрузка сервисных книжек, создан 2025-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» необходимо добавить некий реквизит «Х». C первого взгляда задача не очень сложна, но изменять каждый документ конфигурации как то не сильно хотелось по следующим причинам:
Перейти к публикации
Хм. Очень интересно. Вообще-то вышло уже 3 официальных сборки версии 8.2.14.х (519, 528, 533).
(1) Статья написана 17-06-2011 17:09, автор только сейчас решил сюда запостить. Видно захотелось что-то скачать, а писать тупые комменты нет желания.
Статья писалась в середине лета ), актуализировал, спасибо!
Скоро в восьмерке тоже будет все, как в семерке :))
очень удобно))
может надо подправить так:
http://v8.1c.ru/overview/release_8_2_14/ ?
(подробнее можно ознакомиться в документации, доступной на сайте
(0) 1 .Автору хорошо бы все-таки привести официальные комментарии Нуралиева по поводу использования общих реквизитов — типа не рекомендуется их юзать как раз для решения общей задачи.
2. Привел бы пример использования подобных общих реквизитов в запросах и/или объектной модели.
С общим реквизитом можно делать более интересные вещи -если использовать его для разделения данных,
например можно создавать два разных элемента справочника с разными общими реквизитами разделения, но одинаковыми UUID, ввобще можно работать будо в в одном 1CD две базы, с полностью совпадающими конфигурациями
Правда в ошибках последнего релиза сказанно:
Проблема:
При использовании в конфигурации разделителя ссылочного типа при обращении к таблице в базе данных, соответствующей объекту метаданных, разделенному этим разделителем, происходит ошибка
Из текущего сеанса недопустимо использовать указанные значения разделителей
если значение разделителя не задано (принимает значение по умолчанию).
Дата публикации: 2011-09-01
Лично мне идея с использованием «установка заголовка формы» понравилась. Большое спасибо за идею.
Поставил плюс за подсказку на счет использования функции «УстановитьЗаголовокФормыДокумента» общего модуля «РаботаСДиалогами». Хорошая идея. Пригодится…
(10) Во-во! Как раз думал как с наименьшими трудозатратами на форму впихнуть общий реквизит, а оно тут как тут 😉
Тоже плюс
Попытаюсь развить мысль (7): разработчики предполагали использование общего реквизита совсем для других целей и поэтому не рекомендовали его использовать так, как описано в статье. Для чего же тогда нужен общий реквизит? Вот для чего:
Если просмотреть содержимое баз у десятков тысяч разных пользователей, мы увидим колоссальное дублирование информации: дублируются метаданные, регламентированная отчетность, справочники и регистры сведений валют, адресные классификаторы, классификаторы единиц измерения, профессий, да и много еще чего, даже справочники номенклатуры и контрагентов при желании можно записать в этот ряд. Думаю, во многих случаях, собственные данные пользователя занимают небольшой процент от всего размера базы. На подходе «облака» и появляется возможность сэкономить, устранить дублирование, загрузив данные разных пользователей в одну базу и дав им возможность использовать общие таблицы и метаданные. Как же адресовать данные конкретного пользователя в этой базе? — Тут и будет использоваться общий реквизит.
То есть общие реквизиты дают платформе возможности «Multi-tenancy», которых ей не хватало для облаков. В БП3 это будет использоваться именно так!
Ну а забивать гвозди логарифмической линейкой? — На здоровье! — Но я бы использовал свойства.
Честно сказать пока не доверяю я еще 14ой платформе, хотя-бы потому, что сами 1сники не выпускают под нее конфиги.
Но и 13ая по стабильности уступает 8.1.15.
Согласна. Последняя бухия вышла «только по 13 релизом». Но новые возможности беру на заметку. Автору спасибо.
(12) Минус поставил, выступив в роли персонажа из «Джентльмены удачи»: — «Ты туда не ходи! — Сюда ходи! — А то снег башка попадет — совсем мертвый будешь!».
Однако последующие плюсы еще раз показывают, что у нас единственный запрещающий знак — это большой бетонный блок посреди дороги (.
(12)
А если так: надо поставить признак «не переносить» в любом доке для перегрузки в другую базу. Не нравится
бухам (хоть убейся!) работать с псевдожурналом, который потом прописывает свойство в соотв. регистр.
«ХАЧУ СРАЗУ крыжик ставить!!!!».
И как тут обойтись без общего реквизита, программно вставленного в форму документа?
Плюс за публикации идеи программного добавления реквизита. Я этим балуюсь уже давно. Очень упрощает обновление конфигураций. К сказанному выше хочу еще добавить вот что:
1. по максимуму все изменения добавляем при открытии формы
2. лучше использовать стандартную процедуру «ИзменитьПредставлениеКнопкиВыбораСвойств». Она вызывается почти из всех форм справочников и документов.
3. для стандартных отчетов (например в бухгалтерии) можно задействовать процедуру «ЗаполнитьТаблицуЭлементов». Вызывается при открытии стандартных отчетов.
4. В общих процедурах («ИзменитьПредставлениеКнопкиВыбораСвойств» и «ЗаполнитьТаблицуЭлементов») вставляем одну строку, ссылку на свою процедуру (МойОбщийМодуль.ДействияПриОткрытииОтчетов и МойОбщийМодуль.ДействияПриОткрытииОбъектов) в добавленном общем модуле.
Данная технология + подписки на события позволяют сильно упростить и ускорить обновление конфигурации. Можно добавлять не только реквизиты, но и закладки, табличные части и много еще чего, зависит от фантазии. Но нужно помнить и о быстродействии. Сильно загружать открытие объектов тоже не гут.
ЗЫ: возможно для кого-то будет удобнее использовать другие процедуры, например процедура вставки пункта меню в объекте по редактированию номера/кода
ЗЫЫ: идея использовать общие процедуры появилось у меня давно, когда появились подписки на события, но в них не оказалось подписки ПриОткрытииОбъекта
В бухгалтерии 2.0 есть у каждого документа Дополнительные реквизиты, которые хранятся в регистре сведений Значения дополнительных реквизитов. Часть задач можно решить вообще без конфигурирования.
(18) Не всегда удобно пользоваться дополнительными реквизитами. Зависит от конкретной задачи.
Очень удобно. Так же чудесные горизонты открываются при установлении в бухгалтерии(БАЗОВОЙ) дополнительного реквизита, потом делаешь внешнюю печатную форму, на неё из регистра выводишь нужные значения. Красота. И конфигурация не меняется, и править можно.
полезная статья — кратко и по делу. хотя, к сожалению, не возникало потребности применить механизм общих реквизитов в своей практике 🙁
Спасибо, очень полезная статья.
(18)
Ну и фигли? А в КА есть дополнительные свойства, а вот в Подрядчик строительства 1.6 — нет ни того, ни другого.
Еще отличе общих реквизитов от 7.7: У общих реквизитов есть большой недостаток -их нельзя указать в качестве графы журнала документа, нельзя использовать как критерий отбора.