<?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) Честно говоря, не понял в чём были затруднения у автора. Вещь довольно простая, делается после небольшого изучения свойств и методов СКД.
(2) Если честно, то я просто отшутился) Вообще не понимаю, зачем из этого делать отдельную публикацию?
Присоединяюсь к высказываниям выше. Ну и если уж на то пошло: при изменении параметров через настройки, они должны заполняться и в основной форме, а в публикации описан только обратный процесс.
Если честно, то я просто отшутился) Вообще не понимаю, зачем из этого делать отдельную публикацию?
эта публикация как документация для начинающих программистов…
Автор молодец поддерживаю! плюсик заработал!
(6) Документация для начинающих программистов — это ЖКК или «Хрусталева Е.Ю. Разработка сложных отчетов в 1С Предприятии 8. Система компоновки данных», а не мелкие статейки в интернетах.
Да, я согласен, что это простое решение. Однако для начинающих программистов такая задачка может стать серьезным камнем преткновения при разработке отчета на СКД. Проверял лично со своими новичками)))
Документация для начинающих программистов — это ЖКК или «Хрусталева Е.Ю. Разработка сложных отчетов в 1С Предприятии 8. Система компоновки данных», а не мелкие статейки в интернетах.
хоть это и простенькая статейка, но в подобных статьях иногда найдешь то, что не пишут Хрусталевы и прочие авторы ИМХО…
(7) Поручик, Согласен, что у Хрусталевой описано все отлично, понятным языком и все такое. Но во-первых, под рукой у новичков ее учебник есть не всегда, а во-вторых про данную тему у нее написано довольно расплывчато. Надо дополнительно разбираться в особенностях синтаксиса компоновщика настроек как минимум.
Большое спасибо автору ! Действительно для начинающих программистов -очень нужная вещь.Несколько дней на это убила,а все оказывается очень даже просто.Еще раз спасибо veyron21.
Мне кажется, нужно в настройках темы ставить некий тэг — новенький. Они тоже люди, и мы ими все были — но многие, например, это не хотят читать. И это, кстати, тоже понятно.
В любом случае, автор — молодец.
Только сегодня такое делал — все просто — разыменовываем КомпоновщикНастроек, ну и отладчик наше все.
Автор, так же попробуйте на форме разместить табличное поле и в качестве источника данных указать КомпоновщикНастроек.Настройки.Отбор
Автор, так же попробуйте на форме разместить табличное поле и в качестве источника данных указать КомпоновщикНастроек.Настройки.Отбор
Ну зачем же так жестко-то?
откровение походу для тех, кто работает с СКД первый день)))
Автор, у Вас еще море открытий впереди!
Для новичков СКД отличный материал!
Отлично на основе данного отчета можно сделать что то свой, отличный шаблон который позволяет экономить время. Спасибо!Спасибо!Спасибо!Спасибо!Спасибо!Спасибо!Спасибо!Спасибо!Спасибо!Спасибо!Спасибо!Спасибо!
Для новичков как раз полезен данный материал!
Хотя, для полноты статьи не мешало бы её подредактировать. Добавить примеры размещения других типов данных параметров, мотивация по размещению и т.п. Тогда получился бы полноценный обзор для начинающих… Ведь многие новички сохраняют подобные странички, как «Полезные советы».
Плюсик — Авансом.
Хорошая информация.
26 плюсов! за что?
А просто вывести параметры СКД в форму разве не проще? И ни одной строчки кода не требуется. ИМХО начинающим программистам нужно давать оптимальное решение.
(9) у Хрусталевой как раз это подробно описано
Для тех, кто только разбирается с СКД — данная обработка будет очень-очень полезна)
У кого нет времени изучать Хрусталеву, то статья как раз для них.
(22) Если просто выводить параметры СКД на форму, ИМХО, как то это криво выглядит. Часто лучше вручную их вывести.
Как вариант можно использовать управляемые формы.
Управляемые формы не всегда можно использовать, но вот публикацию ради такого кода действительно не стал бы делать
(25) Времени читать Хрусталеву нет, а время заниматься псевдонаписательством получается есть? Когда можно за 10 сек вынести настройки на форму? 🙂 Нелогично. Ну как общая информация по работе с настройками — статья полезная конечно, как предложение к реализации выноски параметров на форму — только вред для начинающих. По себе знаю: начнут параметры вручную на форме размещать по одному, писать тонну кода для обработки событий. Можно конечно, но не оптимально. А насчет «криво выглядит»… дело привычки наверное. Насчет УП согласен. НО! Придется опять же книжки читать 😉
А просто вывести параметры СКД в форму разве не проще? И ни одной строчки кода не требуется. ИМХО начинающим программистам нужно давать оптимальное решение.
Оптимальное, но не всем пользователям это нравиться. Особенно тем кто перешел с 7.7, а этот вариант очень даже удобен. Автору+
Для начинающих иногда полезно, хотя можно и хрусталеву почитать, там все понятно расписано
Полностью согласен.
(25) А если все-таки почитать Хрусталеву… Таких «открытий» (да и заметок тоже) можно не один десяток сделать. Так что лучше таки найти время…
Думаю, все-таки полезнее книжку почитать…
Хочется скачать этот отчет! И побыстрее им воспользоваться. Автору по любому плюс. Новичкам любая информация полезна. Вот узнал что нужно почитать Хрусталеву!
Как добавить параметр для отчета на форму, созданного на СКД? Чтобы было, как например в оборотно-сальдовой ведомости, выбор начала и окончания периода и, например, организации. В свое время, долгое время поисков не увенчалось успехом. После небольшого перерыва в разработке на 1С, попытки найти что-либо подобное, опять же не увенчались успехом. На форумах находил только стандартный код построителя отчета. Конечно, можно изменить и его, но для несложного отчета, когда требуется для удобства пользователя просто вынести реквизиты на форму, чтобы не залезать каждый раз в настройки отчета, менять стандартный код не требуется. Нужно только внести небольшие коррективы.
ИМХО, отчет на СКД лучше создавать из шаблона типового отчета — что это такое можно почитать на ИТС в разделе Методическая поддержка8.1демонстрационные конфигурации…
не работает в бухгалтерии предприятия 2.0.36.4
А шаблон типового отчета на ИТС-е уже не подходит?
(25) Meson, Странно. В каком месте там криво выходит?
(36) kredko, в управляемых формах, проще, лучше, красивее )))
очень просто дорабатайте формирование отчета через скд программными средставами и там легко можете установить свои параметры
Автору спасибо то что искал. Ато все както не получалось и не получалось. Как почитал разобрался сразу все заработало. Так держать продолжайте в том же духе.
есть отчет в СКД.
требуется программно (из настроек или элементов формы (переключатель) менять один параметр в условии:
есть отчет в СКД.
требуется программно (из настроек или элементов формы (переключатель) менять один параметр в условии:
в оригинале
условие
нужно по-возможности менять программно на
в отчетах «не СКД» это делалось разрывом текста и проверкой условия:
Если ЭлементыФормы.ВидТехники=2 Тогда
Запрос.Текст=Запрос.Текст+»
| ОтчетоИспользованияСтороннегоАвтотраспортаМаршрут.Ссылка.Договор.Техника = 2″;
иначе
Запрос.Текст=Запрос.Текст+»
| ОтчетоИспользованияСтороннегоАвтотраспортаМаршрут.Ссылка.Договор.Техника <> 2″;
конецЕсли;
Как такое реализовать в запросе СКД?
(41) Serge_ASB, Я не видел целиком ваш запрос, но я бы сделал такое следующим образом. В текст условия внести параметр с типом Булево, который будет переключать условие в самом запросе на то, которое вам нужно.
Текст условия запросе изначально будет выглядеть так:
<текст запроса>,
Вы же меняете условие на такое:
этот код вставьте в конструктор в поле «Условие». Параметр «переключатель» вынесите в СКД на форму через «Включать в пользовательские поля» и тогда ваш пользователь будет сам выбирать, какое условие ему задать.
Если что-то непонятно — пишите. Буду рад помочь.
(42)
Включать в пользовательские поля — это где?
Сделал именно так (42)
http://forum.infostart.ru/forum14/topic53460/message589473/#message589473
Кроме этого, промучался с выносом параметра на форму.
Решил добавлением элемента управления «Флажок» и
указанием в процедуре обработки «ПриИзменении», как было описано здесь:
(43) Serge_ASB, Это для управляемых форм. В конструкторе СКД на вкладке «Настройки отчета» правой кнопки мыши по параметру или по элементу отбора (отборы на вкладке «отбор»). И выбрать -> Свойство элемента пользовательских настроек и поставить галку «Включать в пользовательские поля». Если галка стоит, поле появится на форме отчета в верхней части автоматически. Работает в 8.2 в управляемом и обычном приложении , но отчет тогда должен быть на управляемой форме.
Желающих отправить к Хрусталевой полно.
И ни одного желающего поделиться своим, более правильным примером решения.
Тоже давно не пользовался параметрами компоновки, пришлось заехать домой за книжкой.
Надо разбираться, у меня несколько вариантов отчета, и еще и реквизиты по правам разделены.
Нужно более гибкое решение.
Простите великодушно, и где же Ваш, КомпоновщикНастроек.Настройки.Отбор???
Пытаюсь сделать подобный отчет, но столкнулся с трудностями.
Ссори погорячился. Все получилось, только компановщик в свойствах появляется только после добавления на форму.
Все окей.
Спасибо за статью! Мне, как начинающему, очень даже помогла!
Спасибо очень пригодилось. Просто и доступно.
(45) спасибо за пример -но как сделать, чтобы можно было не обязательно заполнять параметр — не выбрали организацию- получили данные по всем организациям ?
(51) M.Nikitin, Это делать уже сложнее. В СКД на последней вкладке, где настраиваются группировки и выводимые поля в отчет, внизу есть раздел «Отборы». Там, собственно, можно выбрать поля, по которым будет устанавливаться отбор. Вот только как их вывести на обычную форму сейчас уже не подскажу((( Уже давно работаю с управляемыми, а там это все автоматически ставится.
Просто +
Спасибо автору. Для кого то просто, а кому то помогает)
(4)
(27)В целом лучше книжки читать перед тем как лезть и что — то делать))) а по сути ломать))