<?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='\
Описания явно не хватает! Рассчитано на подготовленного пользователя, уже умеющего работать с управляемыми формами.
Только сегодня на сайте » » вышли видеоуроки по применению СКД для реализация универсальных отборов . Привожу ссылку на страницу http:// /news/2016-04-28-skd-free-video/. Привожу здесь не в качестве рекламы, а для изучения…
(1) ну батенька это мастер-класс, для тех, кто уже знает СКД и хочет на ее основе крутить фортеля. Не для новисов, да.
Выстрадано на своей шкуре. В свое время делал на обычных формах, на СКД пришлось повозиться.
(2) Аналогично, дружище!
Ничего исправлять ненадо. Кратко, только суть. Видео, которое тут рекламируют занимает гораздо больше времени на просмотр, чем чтение этой статьи и обрывается на самом интересном месте.
fixin, если придут тебя бить — зови, помогу 🙂 Тебе помогу, не им.
Взял на вооружение. Есть и другие способы, как использовать 1совские классы не очевидными и малоизвестными способами. Вот, например, иногда, использую построитель запросов:
Показать
Источник — не помню.
Да, вот то-же самое с построителем отчета.
1. Добавляем на форму реквизит с типом «ПостроительОтчета» и назовем его так-же «ПостроительОтчета».
2. На форму кладем ЭУ типа «Табличное поле», звать — как хотите. Источником данных у элемента управления назначаем наш реквизит формы «ПостроительОтчета».
В модуль формы:
Показать
Такое кунг-фу в групповой обработке на обычных формах юзалось эффективно достаточно.
Понятно, что работать будет только на обычном приложении.
p.s. Процедурку УстановитьСтруктуруНастроекДляВыводаВТаблицуСКолонкойСсылка(Настройки) можно не вызывать, а структуру вывода в ТЗ запаять прямо в схему макета СКД (это я про вариант автора).
(2) небольшое замечание:
Судя по описанию «ОтборКонтрагентов» это «реквизит формы»
В форму добавляем реквизит «ОтборКонтрагентов» типа «КомпоновщикНастроекКомпоновкиДанных».
А не объекта. И тогда так не сработает …
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
….
ОО.ОтборКонтрагентов.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(URLСКД));
НастройкиПоУмолчанию = СКД.НастройкиПоУмолчанию;
ОО.ОтборКонтрагентов.ЗагрузитьНастройки(НастройкиПоУмолчанию);
…
КонецПроцедуры
Но так будет работать…
Показать
Проделывал такое не раз, но вот заняться и построить универсальные процедуры «на каждый день» для всяких типов форм не сподобился. Спасибо автору! +
(9) я недавно делал клиенту задачку с отбором по сотрудникам, сам нашел в интернете эту свою статью и заюзал. крутой отбор получился, а то бы пришлось делать убожество со списком сотрудников, например.
Подскажите, а если в отборе должно быть два справочника по контрагентам и статьям затрат. Есть ли пример, когда в запросе не один справочник, а несколько?
(11) два отбора на форму можно. Или один отбор с несколькими полями. Тоже вариант.
Показать
не работает
{ВнешняяОбработка.РаботаСДеревом82_1.Форма.Форма.Форма(87,5)}: Переменная не определена (ЭтотОбъект)
<<?>>ЭтотОбъект.ОтбиратьПроекту.Инициализировать(Новый ИсточникДоступныхНастроекКомпоновкиДанных(URLСКД)); (Проверка: Толстый клиент (обычное приложение))
разобрался
(10)подскажи как выгрузить теперь значения из отбора на форму (УП)?
подскажите как выгрузить теперь значения из отбора на форму (УП)?
В своей статье Вы пишите: «Размещаем созданный реквизит на форме перетаскиванием поля «КомпоновщикНастроекКомпоновкиДанных.Отбор» на форму». Объясните, пожалуйста, какое именно поле на скрине нужно перенести на форму?
(17)
Отбор из ветки «Настройки»
(18) При добавлении данного поля на форму в виде таблицы и проведения корректировок, как указано в статье (заголовок и т.п.) получается форма следующего вида (в конфигураторе и пользовательском режиме, как показано на скринах). После добавления кода получения настроек из макета СКД ничего не меняется. В чем может быть проблема?
А получается по нажатиб insert добавить новый отбор в режиме 1с:предприятия?
Надеюсь, вы для добавленного отбора прописали скд, как в примере?
(20) Макет добавлен, код есть до того момента, чтоб вывести список настроек, как у Вас, но сам список не выводит. По кнопке Insert строку отбора добавляет и значение дает выбирать из справочника «Контрагенты».
(21) оформите в виде внешней обработки и прикрепите здесь, я посмотрю.
(22) Высылаю обработку
(23) Вот, поправил.
В СКД_Контрагенты зайдите на закладку Настройки, затем Отбор и добавьте те условия, которые хотите видеть.
(24) Да, так получилось. Просто в статье не сказано, что предварительно нужно в макете отборы настроить. Спасибо!
(25) да, этот момент упущен в статье.
Спасибо большое. А в тонком или веб клиенте работает?
(27) разумеется работает, механизмы то штатные.