<?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) Публикация предназначена для тех, кто создаёт или планирует создавать инструменты, позволяющие управлять исполняемым кодом 1С прямо из пользовательского режима. Если вам интересно, то пройдите по приведенным в начале публикации ссылкам. Консоль кода — простейший пример инструмента, где это может пригодиться.
А писалось всё это дело для «динамических подписок «, которые позволяют не лезть каждый раз в конфигуратор и выгонять пользователей из базы, чтобы добавить/изменить подписку на событие, а задать нужный код из режима 1С:Предприятия.
Это особенно полезно, когда нужно срочно добавить какой-нибудь контроль/запрет при создании/изменении объектов базы. Конструктор запросов позволяет быстрее вносить изменения в такой код.
(2) Учту.
Вот какое дело… Человеку не знающему, в контексте поставленной задачи, конструктор не поможет. А кто знает, тому конструктор как то уже и не очень нужен. Консоль запросов тому подтверждение.
Опять же, нужно ли подвергать себя риску обрушить базу ваяя на лету в пользовательском режиме нечто настолько сложное, что без конструктора не обойтись?
Однако автор старался, так что респект однозначно.
(4) Первую часть вопроса не очень понял. И консоль запросов и консоль кода все активно используют. Более того, есть разработки, где большая часть нового кода задается сначала в пользовательском режиме. НапримерМета-конфигуратор в «СКАТ-Профессионал».
В пользовательском режиме можно не «ваять на лету» новые запросы, а быстро изменять уже существующие.
Представьте, что Вам поставили задачу запретить изменение документов, удовлетворяющих сложному условию, которое оптимальнее проверять через запрос. Что вы сделаете? Добавите в конфигураторе подписку на событие «ПередЗаписью» и выгоните всех пользователей из базы? А если через некоторое время это условие поменяется, ведь бизнес у нас переменчив?
Вместо того, чтобы каждый раз менять конфигурацию или придумывать разные регистры правил, которые могут никогда больше не пригодиться, гораздо проще немного откорректировать запрос в пользовательском режиме. Большинству программистов это будет под силу без риска обрушить базу 🙂 Ну а если не хотите рисковать, то всегда есть тестовая база, где можно никому не мешая и в конфигураторе код написать и в пользовательском режиме его протестить.
Посмотрите вот этот скриншот:
http://infostart.ru/upload/iblock/b8e/Pic5.PNG
я так понял это аналог обработок «Выполнить» из ИР.
Баян, да ещё и некрасиво сделанный. Я решил такую задачу давным-давно и её решений видел несметно, ибо элементарщина. Воистину, скоро дождёмся мегапопулярных публикаций на тему «как выбрать элементы из справочника», но зато красивых, с гифками и попунктным разжёвыванием каждой строки.
(6) wowik,
Да, ориентировался на ИР и сначала хотел использовать именно функции ИР для вызова конструктора. Но оказалось, что они используют внешние библиотеки для разбора строк, чего хотелось бы избежать. Еще не получилось связать ИР-овский конструктор и управляемую форму. Может быть плохо старался и еще получится это сделать 🙂 Надеюсь что смогу использовать ИР для вызова контекстной подсказки, там тоже внешние библиотеки задействованы, но без этого уже не обойтись.
(7) Yashazz,
Вот это не в счет. Там просто строка вставляется, а открыть запрос в конструкторе нельзя.
Я рад, что где-то в недрах Ваших обработок существует подобный алгоритм. Осталось подождать пока Вселенский Коллективный Разум объединит мозги всех 1С-ников в единое целое. Тогда мы перестанем делиться алгоритмами и будем создавать идеальные разработки. Кстати не нашел подобного в Ваших публикациях.
(8) Не, там нету, я в первую очередь о ней вспомнил и проверил, нифига. В других каких-то было, сейчас не вспомню.
Дело в другом — это ведь фрагмент, кусок, не очень понимаю смысл так его разжёвывать. Впрочем, это лично моё недоумение.
А что до «некрасиво» — после того, как я видел подобные решения на регулярных выражениях, всё остальное меркнет…
(9) Yashazz,
Разжевывать нужно чтобы не только «суперпрофессионалы» всё поняли. Жаль, что многие программисты забывают, что они не всегда были гуру, а когда-то тоже учились.
К тому же политика Инфостарта такова, что для скачивания нужно потратить 1$m и насколько я понял для многих это проблема. Поэтому код по возможности вставляю в статью. Дополнительные комментарии по сравнению с этим — мелочь.
Что до RegExp, то это внешняя по отношению к 1С библиотека. Конечно это своего рода стандарт, но «стандарт» и 1С — вещи слабо совместимые. RegExp используется в 1С через COM-интерфейс, который например не поддерживается в Linux, для которого с недавнего времени тоже есть толстый клиент. Если писать простое универсальное решение для 1С, то лучше чтобы оно зависело только от 1С.
Гифики помедленей пожалуйста, ну непонятно что ж такое происходит.
Кроссплатформенную замену VBScript.RegExp обещал Орефков, но что то тишина у него уже пол года. Видимо крепко засел над снегопатом для 8.3. Кстати в ИР уже давно есть поддержка его компоненты, но отключено внутри, т.к. она пока в некоторых случаях аварийно завершает приложение. Качественный багрепорт ему я еще весной отправил.
(12) Интересно, иметь такой инструмент было бы хорошо. Будем ждать.
А реализация планировалась средствами 1С или через какую-то библиотеку?
(13)http://infostart.ru/public/183084/
(15) Субъективное суждение. Потому что одни из самых рейтинговых публикаций на ИС — это разного рода обучалки, переработанные пересказы документации и обработки, направленные на самую широкую аудиторию. Значит есть люди, для которых это полезно и нет ничего плохого в том, чтобы с ними этим делиться.
И мне тоже бывает интересно увидеть новую интерпретацию уже знакомой информации. Не думаю что имеет смысл это обсуждать ибо ведет к холивару.
(15)Это все таки ВК :
•rex32.dll — для работы в 32-битных клиентах и сервере
•rex64.dll — для работы в 64-битном сервере
Основные планы на ближайшее будещее — сделать linux-версию.
(17) Нет. Это «полуВК» и «полуРасширениеОбъектнойМодели». Когда попробуешь, поймешь.
(10) в целом неплохо. Особенно когда в рутине дел это может позабыться.
(15) Yashazz, По вашему суждению, можно при регистрации сделать на ИС сдачу теории…т.п. Чтобы лишних как статье так и комментариев не было.
(19) Это не моё суждение, это определение сайта как такового, посмотрите сами. Впрочем, увы, ИС действительно медленно, но верно превращается во второй DevTrain. 🙁
(20)
Ваши претензии безосновательны. Вы не привели ссылку на другую публикацию, где аналогичная работа с конструктором велась бы без подключения внешних dll-библиотек. То, что именно это является целью данной публикации указано в самом её начале. Подробность изложения материала также считаю плохой мишенью для критики.
Дальнейшее обсуждение «элементарщины», «баянов» и причитания о судьбе Инфостарта предлагаю перенести вЭТУ или ЭТУ публикации за Вашим авторством. Они подходят для этого гораздо больше. Признак непрофессионализма — это тратить время на поиск соринки в чужом глазу, вместо того, чтобы улучшать качество собственных работ.
Хорошая статья
Спасибо за статью, особенно за то что выложили здесь подробное описание алгоритма.
(21) Вы, вероятно, не видели вот этого:http://infostart.ru/about/ , где в первой же строке сказано «Профессиональное сообщество». Ознакомьтесь, потом будете спорить.Это и вообще всех касается, кто считает ИС «лягушатником для начинающих». И про специалистов, оказывающих профессиональные услуги, тоже, считаю, доступно написано.
Что до меня, я всегда честно оговариваю, что является баяном и что нет, поэтому вы можете переносить разговор куда угодно и о чём угодно, но реплика про соринку и качество работ в любом случае мимо, уважаемый. Признак непрофессионализма в данном случае — явный переход на личности, попытка флейма и переваливания с больной головы на здоровую (сиречь попытки переноса в темы, не имеющие отношения к). Советую быть вежливее и терпимее, и не путать критику публикации с критикой автора. Учитесь уважать окружающих.
Засим участие прекращаю, ибо бессмысленно тратить время не привык.
Да я и так старался избежать перехода на личности. Но сообщения (7), (15) и (20) написанные в резком обвинительном тоне не оставили выбора. Уж извините.
(25) Ладно, проехали. С праздниками всех, кстати. Просто у меня пунктик — очень не люблю баянить сам, иногда и других начинаю пинать, увлёкшись. Прошу пардону.
Обращаю внимание критиков: способность писать код на языке 1С, не прибегая при этом к dll — это критерий, по которому можно отличить новичков (или лентяев 🙂 ) от грамотных программистов 1С.
Не использование dll в конкретной задаче — это изюминка статьи,
+ алгоритм также полезен не менее.
Многим профессионалам есть чему поучиться, ящетаю)))
Спасибо за статью! Ставлю жирный плюс!
П.С.: Есть статьи на ИС, которые иногда вызывают у меня такую же реакцию как у критиков выше (например, обработка запуска амми из 1С). Эта статья заслуживает на похвалу. Нужно уметь понять ее ценность, что не каждому дано.
А что, интересная статья. Люблю, когда все по-полочкам разложено…
Вообще молодец. Плюсанул.
Спасибо, полезная штука, сам такой давно написал, но были огрехи и не хотелось вникать, а тут скопировал, вставил и все взлетело.
Ну вот, думал скачать и сразу использовать, но как всегда пришлось допилить)
Автор, открытие конструктора в тонком клиенте возможно, начиная с версии платформы 8.3.5! А здесь проверка на толстый клиент и привет!
Во-вторых, пришлось переделывать на открытие конструктора через Показать() и оповещение, модальный вызов в тонком клиенте не работает.