<?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='\
Краткость — сестра таланта!
Ссылку бы приложили на документацию.
Если конечно она существует.
1С уже привыкла что, документацию за нее пользователи пишут.
Решение реальной прикладной задачи с помощью механизма, а не абстрактный пример —http://infostart.ru/public/359597/
Нормик. Взял на заметку.
(0) По моему публикация получилась скудная, в (3) намного полнее освящена эта тема (на сколько помню, была еще одна статья на эту тему с применением этой возможности для проверки ИНН контрагентов)
Ребята, подскажите пожалуйста.
Допустим я добавил новый реквизит на форму, могу ли я его записывать в регистры сведений?
Чтоб в дальнейшем по нему отчеты строить?
Полгода как уже на сайте 1Сhttp://v8.1c.ru/o7/201410ext/index.htm
Взял на заметку
Интересный механизм. Возникает вопрос: если форма основной конфигурации изменяется, то позаимствованная форма в расширении изменится? Если нет, то механизм не очень полезен, т.к. придётся заново переписывать расширение для того чтобы получить новые возможности типового функционала и это в таком случае ничем не отличается от исправления модуля формы. Если же форма наследуется, то тогда действительно ценный механизм.
Вы этот момент проверяли?
(9) bondar_vy@mail.ru, формы наследуются. Завязка идёт на имена реквизитов. Более того, в случае если подключено несколько расширений, то каждое последующее расширение использует в качестве позаимствованной формы результат предыдущего расширения.
Насколько я понимаю: для возможности создания расширений необходимо для конфигурации отключить режим совместимости (Свойства —> Совместимость —> Режим совместимости = «Не использовать»). А для этого надо отключить поддержку. В противном случае эта опция недоступна. И вся прелесть автоматической поддержки теряется. Или я не там рою?
(11) Так точно. Нюанс упомянут в статье. Механизм на будущие конфигурации. Хотя в БП 3.0 его уже можно употреблять.
(2) baracuda, вся документация по расширениям есть на ИТС. Причем с примерами более подробными, чем в этой «статье».
(11) lvictor58, БП 3.0.41 уже без совместимости с 8.3.6. Скоро поднятутся остальные типовые
Спасибо, познавательно. Но стиль языка довольно низкий, пунктуация местами неверная, плюс опечатка в сообщении в последнем примере (обАРботчика) — как в исходном тексте, так и на скриншоте.
Спасибо за пример. Помогло в одной задачке.
После обновления конфигурации все расширения оказались пустыми… Кто-нибудь сталкивался? Причем я сохранял их в файлы, при сравнении с файлами ничего не происходит интересного, как-будто в файлах тоже никакой информации нет.
(15) тоже про оБАРботчик заметил )))
(0) Как я понимаю для конфигураций, у которых режим запуска обычное приложение этот механизм работать не будет?
Вот меня давно мучает вопрос, как правильней :
1. Делать много расширений на каждый измененный объект. (Вижу плюсы, в случае кардинальных изменений от поставщика отвалится только одно это расширение, остальные продолжат работать. Но список используемых расширений может оказаться довольно большим)
2. Все изменения максимально вносить в одно расширение (может на скорость работы как-либо влияет)
Фигня, а не публикация, прости хосспади. Передран кусок данных с ИТС и всего делов — 66 плюсов в копилку. Копипаст рулит, дааа…
Где б тут минус поставить, а?
(21) Yashazz, плюсы в копилке погоды не делают. )) Статья, как следствие финального задания известных курсов. )
(22) во-первых, делают. По крайней мере, ещё как делали раньше. Во-вторых, это ведь действительно отрывок из общеизвестной публикации сhttp://its.1c.ru/db/v837doc#bookmark:dev:TI000001528 , причём совершенно непоследовательно вырезанный и без полномасштабного примера, каковой там приведён. В третьих, не понимаю, как публикация на ИС может быть следствием задания с каких-либо курсов, тем более такая куцая и дублирующая общедоступное. Вот если б вы изложили нечто, чего в документации нет — тогда понятно, а это, пардон, зачем?..
А мне статья понравилась. Классный тизер по технологии, стимулирующий дальнейшее знакомство с темой. Много букв честно вогнали бы меня в уныние и я бы не осилил.
Отдельное спасибо за наглядность. Однозначный +.
Автор, не обращай внимания на хейтеров.
(0) А Вы пробовали выгрузить конфигурацию?
Хо, все таки расширения еще не доделаны. Обработчик событий формы — это хорошо. Но если нужно вмешиваться на уровне модуля? Вообще, хорошо что 1с движется в сторону Аспектно-Ориентированного Программирования, но что то как-то неуверенно.
Если я правильно понял сейчас мы можем подключиться только к обработчику события, а заменить вызов процедуры и функции пока нельзя.
Для того чтобы подправить проверку в 5 по стеку функции приходится копировать все 4 функции до, и править пятую.
Ну и общие модули по всей видимости по той же причине не возможно редактировать.
Ждем8.3.9
Господа, не подскажите куда покопать?
Создал расширение в тестовой базе, протестировал, все работает.
Переношу в рабочую, не работает. Как будто нет вообще никакого расширения.
Есть довольно тонкий нюанс при добавлении в расширения справочника (документа), который используется в обработках расширения! Если вместе со справочником не добавлять его формы, то в результате платформа сгенерирует форму автоматически и в основную форму объекта из конфигурации (а не из расширения) Вы не увидите на экране никогда. Столкнулся с такой ситуацией в Бухгалтерия предприятия КОРП, редакция 3.0 (3.0.51.16) + Расширение конфигурации на платформе 1С:Предприятие 8.3 (8.3.9.2170).
После простого добавления основной формы объекта в расширение, не меняя обработчиков событий формы, а токмо назначив соответственно эту форму в расширении тоже основной, решил эту ситуацию.
(28) Проверить возможность расширения конфигурации через «Все функции»- Стандартные — Управление расширениями конфигурации.
Возможно кто то сталкивался с такой проблемой и знает как ее решить:
Обновился до 8.3.11, добавил расширение и начал переносить в него все возможные реквизиты, модули, макеты и формы.
Есть модуль объекта, в нем обработка команды «печать». Процедура в расширении обращается к модулю менеджера, модуль менеджера должен перехватываться инструкцией «&Вместо(«»)», в расширении в модуле менеджера дубль этой процедуры с одним исключением — она экспортная, но при отработке кода программа не находит эту процедуру. Когда явно указываешь заменяемую процедуру — все нормально, а вот при обращении из расширения не отрабатывает инструкция «&Вместо(«»)». Кто знает — как быть? не очень хочется все обращения к типовому механизму заменять на прямое обращение к расширению(((
Главный минус расширений в не возможности оценить всю картину, в отличии от копии, например, формы.