<?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='\
Перед получением отредактированного кода, не забывайте нажимать на иконку записи редактора.
Просто и со вкусом!
А чего не сделал, чтобы текст можно было скопировать? Из предупреждения плохо копировать. ))
Вообщем-то там и так в редакторе есть кнопка «HTML», так что не важно…
(2) Ну это всего лишь демонстрация редактора 😉 Далее уже можно использовать, как угодно.
Обновление редактора простое: скачивается (http://tinymce.moxiecode.com/download.php) новая версия и перепаковывается архив со скриптами.
+ русифицировал редактор и добавил в обработку кнопку принудительно инициализации (для обновления скриптов)
поставлю плюс, реально человек старался, а то у нас тут народ повадился ставить плюсы не за что!
а можно поставить еще пять плюсов?
Красота и NET не нужен 😉
как бы еще научиться красиво в ворд отправлять уже форматированные эти данные
(9) На сколько я знаю, ворд умеет открывать html странички.
(0) Молодец, смотрится.
(9) Кстати, через буфер все прекрасно вставляется 😉
Есть более простой пример HTML редактора, но с такими же возможностями:
http://1c-ovec.ru/files/view/3.html
И через буфер можно копировать, таблица Excel 15 на 1000 копируется свободно + поддержка шрифтов и цветов.
(13) Более простой? В моей обработке 50 строк кода 🙂
А зачем ссылки на сторонние ресурсы? Чего сюда не залить?
э-э-э… я не понял, Нэт Фреймворк совсем-совсем не нужен?… )
(14) 50 строчек кода и кучу скриптов 🙂
а ссылка на то где лежит, а сюда может загружу позже…
(14) Это-же его ресурс, типа раскрутка такая…
Прикольная обработка.
Предложения принимаются?
В процедуру «ЭксплорерДокументСформирован(Элемент)» впиши строчку
«ЭлементыФормы.Эксплорер.Документ.body.scroll = «no»;». Убрет не нужный скролинг у самого поля HTML =)
(18) спасибо за строчку: «.Документ.body.scroll = «no»»… давно искал, и надо же случайно наткнулся 🙂
Замечательная идея.
(1) Для того, что бы не жать на кнопочку «Сохранить» можно немного доработать обработку
В процедуре ПриОткрытии подключаем обработчик ожидания
Процедура ПриОткрытии()
ПодключитьОбработчикОжидания(«СохранитьИзменения»,1.5);
КонецПроцедуры
А в процедуре СохранитьИзменения программно «тыкаем» на кнопочку «Сохранить»
Процедура СохранитьИзменения()
Эксплорер.Документ.getElementById(«elm1_save»).Click();
КонецПроцедуры
(20) Спасибо, сделаем 😉
(21) Единственное, что может вызывать неудобства — это ошибки выполнения скриптов при вставке объектов, например с OpenOffice.org Calc, не всегда корректно работает и возникает когда есть объединенные ячейки (как мне показалось), тогда текст сохранить не возможно, а окошки с ошибкой с интервалом указанным в таймере просто не дают работать. Поэтому возможно нужен еще и флаг авто сохранения на форме обработки.
Спасибо за обработку!
Встроил HTML-редактор в управляемую форму на 8.2, чем решил проблему острой нехватки полноценного текстового редактора.
(23) Выложите в виде отдельной публикации для 8.2 — дружно скажем спасибо 🙂 У самого не хватает времени на нее 🙂
Хм… а как отловить событие, например «вставить рисунок»? Есть параметры у данной формы?
🙂
Хотелось бы организовать «вставить рисунок» из БД. Благо, 1С уже как 6-7 лет у меет в себе рисунки хранить.
Возможно это, как нибудь, с имитировать. например, закачать сначала необходимые рисунки на диск а там уже список рисунков для подбора готов, а?
Для отображения первичной инфо, аналогично, сначала качаем, потом заменяя ссылки отображаем. Что скажете ?
Если нужно сохранить в справочник, то какого типа должен быть реквизит? Куда сохраняются изображения, вставленные в редактор?
Если нажать редактирование html, то как потом обратно переключиться в редактор?
Сама идея использования такого редактора на скриптах интересна. Я бы не догадался.
Но для меня непонятны вопросы:
— как дать пользователю поменьше инструментов? Один-два рядочка. Остальной функционал в менюшки.
— С сохранением файла в базу как? Я на форме нарисую кнопку [Сохранить]. Тогда зачем кнопка в редакторе? Или как-то можно перехватить ее нажатие?
(28) Тут только править ява-скрипты.
Замечательная идея.
(1) Для того, что бы не жать на кнопочку «Сохранить» можно немного доработать обработку
В процедуре ПриОткрытии подключаем обработчик ожидания
Процедура ПриОткрытии()
ПодключитьОбработчикОжидания(«СохранитьИзменения»,1.5);
КонецПроцедуры
А в процедуре СохранитьИзменения программно «тыкаем» на кнопочку «Сохранить»
Процедура СохранитьИзменения()
Эксплорер.Документ.getElementById(«elm1_save»).Click();
КонецПроцедуры
Показать
Нет, так не работает. Зато работает вот так:
Эксплорер.Документ.parentWindow.ExecScript(«tinyMCE.execCommand(‘mceSave’)»,»JavaScript»);
супер нужная вещь, спасибо!!!
мда, действительно вещь стоящая.
Огромное спасибо автору !
Встроил в карточку товара в 1С. Прикрутил стиль CSS сайта.
Теперь HTML описания товаров прямо в 1С делают !
Вечная память автору. покойся с миром.
Даёшь репозиторий на GitHUB или Google Code!
Спасибо огромное. Реально очень полезная вещь!
Отлична штука, вот только непонятно со вставкой изображений. Через буфер обмена не вставляется, обзора тоже нет, только забивая в адресе прямой путь?
Что то я не понял,А как ее интегрировать то?
Почему после кода
ОбластьТекста = Эксплорер.Документ.getElementById(«elm1»);
ОбластьТекста.innerHTML = Текст1;
у меня содержимое окна не меняется на HTML-код, который находится в Текст1?
Визуально не происходит ровным счетом ничего, хотя переменной ОбластьТекста.innerHTML на самом деле присваивается строка HTML-кода из переменной Текст1.
Какой-то дополнительный метод нужно вызвать для инициализации этой формы ранее записанным HTML-кодом??
подскажите где уменьшить форму редактора
кода html по кнопке html не помещается кнопка «Обновить и так далее»
Ого какая интересная вещица, + однозначно!!!
зашибись, вот только куда её встроить теперь …
Огромное спасибо. Очень полезная наработка. Фактически теперь cmsный сайт у нас полностью управляется из 1с. Это был последний недостающий кирпич. Искренне желаю успехов автору.
Вдруг обнаружил, что забыл плюсануть. Ещё раз спасибо автору, мега-вещь! Отлично идёт в УФ, всё супер.
Обработка супер!
Как тут можно сразу получить текст из ДополнительногоОписания Номенклатуры и вставить в обработку для редактирования?
Очень интересная работа.
А возможно ли работа данного метода в управляемых формах???
Кому-нибудь удалось заставить эту обработку работать с TinyMCE 4+?
Не работает в УФ в тонком клиенте.
Хорошо бы доработать.
Всем доброго. Я при записи справочника номенклатура данные из ЭлементыФормы.Эксплорер.Документ.body.innerText записываю в реквизит. А как сделать обратное передать туда параметр при открытии справочника? У меня сваливается когда делаю ЭлементыФормы.Эксплорер.Документ.body.innerText = HTMLОписание;
Заранее спасибо
Отличная идея! Автору зачет.
(50) если хочешь плюс автору — поставь за него свечку в храме. Василий ушел.
большое спасибо за обработку
еще бы на УФ такую )