<?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='\
(1) Неужели все так плохо ? Собираюсь переходить на расширения .
Полезные советы для разработки расширения можно посмотреть тут:
http://infostart.ru/public/442003/
Да все нормально с расширениями, единственное придется переделывать обработчики УстановитьВыполнениеПослеОбработчиковСобытия у старых расширений, которые под 8.3.7 писались. Иначе система вылетает.
А так расширение пережило три платформы и обновление УТ с 11.1 по ERP 2.2.
(4)
да, но не всегда — на когда запустил ДО 2.1 на 8.3.9 после 8.3.8 переделывал только в формах записей регистров сведений ибо ,да,вылетало… в формах же доков и в справочниках — все ок
(2) Ну как сказать… Если у вас парочка безобидных изменений в дизайне формы или перегрузка скромного события элемента формы, то ещё прокатит. А вот замахнётесь на большее — ждёт вас дорога, вымощенная жёлтыми граблями.
После того, как несколько релизов 8.3.9 кряду вообще падали при попытке сохранить изменения в расширении, мне всё стало окончательно ясно.
(3) Ну хватит уже пиариться на ровном месте, а?
(6) Лично я и вижу расширения, как возможность делать мелкие допилы клиентам, которые не хотят снимать конфигурацию с поддержки…которые касаются больше удобства работы…
Спасибо, хорошая статья!
Кто-нибудь пробовал убирать у ERP 2.2 режим совместимости? Как себя ведет база, есть ли глюки?
Получается, что в типовых все равно надо включать изменения в конфу, и некоторые изменения можно сделать без расширений, а через переопределяемые модули модификации конфигураций.
Главная проблема работы с расширениями — необъективная оценка количества предстоящих доработок разработчиками/внедренцами. Исходя из посыла «да нам же всего несколько кнопочек изменить на форме» начинается работа с расширениями. Количество доработок растет, расширения продолжают использоваться исходя из посыла «мы же уже используем расширения, давайте уже через них продолжать».
Потом появляется необходимость добавить новые сущности в базу данных, расширить структуру существующих. Или изменить принцип работы какой-либо типовой подсистемы. Работать с расширениями становится все сложнее или вообще невозможно. В конфигурации включается возможность изменения и начинается «мягкая» или «жесткая» доработка типовой конфигурации, в зависимости от квалификации разработчиков.
Этот тот момент, в который в зоопарке технологий прибывает. Гетерогенность, уже живущая в корпоративной системе, радостно потирает руки, понимая, что отвоевала у понятности и простоты хороший такой плацдарм.
Конечно в этот момент можно избавиться от одного из животных в зоопарке технологий и грамотно перенести все изменения в конфигурацию. Ведь дальше придется «ухаживать» за двумя зверями — и расширениями и доработками в самой типовой конфигурации. Убирать за ними, кормить, как-то мирить друг с другом, чтобы они ничего не сломали в процессе совместной работы, добавлять в вакансии на Хэдхантере еще одну строчку в список требований к разработчикам.
По хорошему так и нужно сделать. Но Гетерогенность знает, что люди ленивые, боятся трогать то, что хоть как-то работает, у них всегда «нет времени», а начальство не способно оценить необходимость рефакторинга в этот критичный для отказа от лишней технологии момент времени. Доработки изменений, произведенных через расширения, продолжают делаться через расширения. Доработки выполненные в конфигурации — продолжают делаться в конфигурации. Главный враг архитектуры корпоративного ПО прочно закрепляется на захваченном плацдарме.
В общем лучше хорошо подумать, прежде чем начинать использовать узкоспециализированную технологию. Если есть риск того, что структуру объектов придется менять или добавлять новые объекты БД, есть необходимость часто и без проблем запускать отладку, есть люди, понимающие как изначально менять конфигурацию без проблем для последующего обновления, то лучше сразу принять решение не плодить зоопарк. Переопределяемые модули, программную модификацию форм и подписки на события никто у нас не забирал. Если компания небольшая и сотрудникам важно чтобы конфигурация обновлялась одной кнопкой и сейчас и всегда в будущем, серьезных изменений точно не будет (действительно уверены?), то зоопарка не будет и с расширениями.
И конечно для небольших плагинов расширения хороши. Есть на ИС примеры хорошего применения, когда вместо cf-файла с инструкцией по сравнению-объединению публикуются расширения. Но это опять же специфичная область и для удобного постоянного использования лучше функционал в конфигурацию переносить, чтобы запуск в режиме предприятия не замедляли.
С расширениями конечно зоопарк получается, но у них большой плюс это легкая отделимость от конфигурации.
И также независимость, к примеру фрач месяцами пилит документ, а собственный спец по итогам тестдрайва пилит расширение. К завершению проекта получается полностью обкатанный документ со всеми пожеланиями пользователей.
(12) У меня есть сценарии к этим видео, если кому интересно, могу выложить в виде отдельного поста…
Платформа 8.3.10.2580. Почему-то не работает подобный функционал.
В модуле формы при создании на сервере есть процедура ОбновитьИтоги()
В расширении формы в модуле формы пытаюсь «врезаться» в нее и пишу
Но не заходит. Аналогичное происходит при попытке врезаться в типовые методы объекта. Я что-то делаю не так?
(1)
Перенес на расширение изменения типовых ролей, которые раньше были изменены в основной конфигурации. Теперь, при следующем обновлении, мне не нужно будет корячиться с ролями, чтобы перенести все изменения.
(15) Дело было в галочке «Безопасный режим» в настройках расширения.
Хорошая статья!
Только, по моему, перехват методов работает при совместимости 8.3.9 и выше
Можно как-то быстро проверить последствия отключения режима совместимости?
Пользуюсь расширением уже 2 года. Отлично подходит для мелких доработок, а также при обновлении экономит кучу времени, но не хватает возможности перехватывать все события формы.
УТ11.3
Добрый день. А кто-нибудь перехватывал методы когда нужно параметр добавить? Сейчас в режиме совметимости 8.3.10 получил следующее сообщение от предприятия:
в ERP 2.4.
Кто знает как правильно расширять методы, если нужно добавить параметров?
Поделитесь, пожалуйста, опытом.
(20) ИМХО что-то не то с постановкой задачи — зачем Вам добавлять параметры?
Механизм, прописанный в модуле/форме, о Ваших дополнительный параметрах ничего не знает, значит — использовать их не будет, т.е. всегда должно использоваться значение параметра по умолчанию.
Таким образом пишите себе свою процедуру с дополнительным параметром:
и вызываете его из перехваченного метода — без параметра или с каким-то предопределенным значением:
А в своем коде — обращайтесь к своей процедуре, где этот параметр присутсвует:
(21) Вчера ответил — сегодня столкнулся.
https://xn—-1-bedvffifm4g.xn--p1ai/news/2017-03-21-how2-correctly-close-forms-and-applications/
При переходе в режим совместимости 8.3.7 или выше (если конфигурация была ниже) — сталкиваемся с изменением реквизитов у методов ПередЗакрытием (формы) и ПередЗавершениемРаботыСистемы (модуль упр. приложения) в связи вот с этим:
Таки действительно вопрос остается открытым…
Внесу свои пять копеек по поводу использования расширений. Расширения отлично подходят, если нужно добавить новые объекты, либо добавить свои куски кода перед или после выполнения основного кода в процедурах и функциях, однако, если требуется вносить изменения в форму или менять код модулей, используя аннотацию &Вместо, возникают проблемы.
Во-первых, при каждом обновлении приходится проверять, не изменился ли код или форма в основной конфигурации (была такая интересная ситуация, после обновления ошибка в формировании отчета появилась только спустя месяц).
Во-вторых, это проблематичность нахождения изменений в основной конфигурации по отношению к расширению, так как сравнитьобъединить cf файл с файлом cfe нельзя (по крайней мере, я не нашла адекватного способа это сделать).
По поводу статьи, все хорошо и доступно изложено, отлично подойдет для ознакомления с расширениями.
Из последних новостей: решил я после энного перерыва посмотреть — может, случилось чудо и 1С хоть что-то сделало нормально ранее чем через 5 лет после анонса.
И что? И получаю такие чудеса с разделением областей, что словами не описать. Режим разделения по расширению изменить не даёт, обновить не даёт, на реальное наполнение базы (используется ли разделение или нет) плюёт. Глючит всеми мыслимыми способами.
https://www.forum.mista.ru/topic.php?id=817891
Решил, у меня руки кривые — но нет, в сети звучат вопросы на эту и сходные темы. И все без ответов, что характерно. Один из попавших под руку пруфлинков:
Релиз был 8.3.12 из последних
Так что несогласных с моим первым утверждением милости просим набивать шишки)))
(24) с их помощью можно очень «здорово» нарываться на проблемы в неожиданных местах и заваливать проекты
(25) Главное задекларировать возможность, чтобы привлечь внимание. А работает это или нет, вопрос уже третий
При работе с расширениями использую принцип «не использовать в них самые новые возможности минимум полгода».
Например, «сегодня» добавили возможность добавлять регистры оборотов в расширения — великолепно.
Я буду следить за этим ноу-хау, но не использовать его минимум полгода, пока это новшество не «вылижут»
А более «старые» возможности расширения использую без проблем — нытикам привет, вы, по-моему, слишком категоричны.
что касается описанной в этой статье технологии расширения печати, то я считаю, что для таких ситуаций проще и понятнее
использовать механизмы БСП (дополнительные печатные формы) — они дадут тот же результат с меньшими затратами.
(26) Конечно многое зависти от версии платформы и бсп, но курс 1С явно прослеживается в разработке возможностей расширения как независимого изменения типовой конфигурации
(28) В 2007 году появилось динамическое обновление. Прошло 11 лет. недавно обновил динамически думал достаточно ждать. В итоге вылез косяк с формой списка справочника номенклатура)
(30) в чем он выражался?
если в том, что пользователи не умеют установить стандартные настройки списка после обновления сами и необходимо бежать к ним и вытирать сопли, то это не косят, а недоработки в управлении компании
динамическое обновление использую часто и густо лет 5 — риски, конечно, есть всегда. Но ведь их можно минимизировать, если включать мозг. тьху тьху тьху
(31) Выражался в том, что дерево папок номенклатуры выглядело некорректно, двоилось, троилось, размножалось. Из всего помогало, только удаление папки из профиля пользователя. Через время появлялось снова
(31) В составе обновления был только один общий модуль. Как еще тут включить мозг?
Фиг знает что делать с переходом на 8.3.13. В расширении были справочники и регистры. Получился заколдованный круг.
Область действия расширения встала в Разделение данных. Конфигурация пишет, что использовать Разделение данных нельзя. Изменить область действия в режиме совместимости с 8.3.11 нельзя. Снимаю совместимость — «нельзя установить область действия расширения конфигурации в значение РазделениеДанных в иинформационной базе, не используещей разделение данных».
Удалось как-то запустить включив режим совместимости 8.3.11 в расширении и в конфигурации. Получаю потерю таблиц.
Накуролесили с расширениями, короче! Придется писать выгрузку накопленных данных и загрузку.
(34) Я вышел так из положения. Создал новое расширение с Областью действия Информационная база, и объединил со старой, за исключением свойств.
(35) Объединял, но не посмотрел на свойства… Спасибо за подсказку. Буду смотреть.
(35)А можно подробнее про объединение? Тоже столкнулся с такой проблемой — в расширении есть данные и надо как-то изменить область действия без их потери.
(37) все просто, также как и с конфигурацией, нужное расширение сохраняешь на диск, добавляешь новое и объединяешь как и конфигурацию из внешнего файла, сняв галку только со свойств.
(38)Я так и делал. При удалении старого расширения, данные пропадают.
(39) мои расширения не имеют регистров, реквизитов и т.д., поэтому мне проще. Как вариант можно попробовать исправить расширение через редактор XML, «но это не точно».
(39) Посмотри здесь может поможет
https://github.com/oscript-library/cfe2cf
(29) Возможно ли добавить в расширение подписку на событие, если этой подписки нет в основной конфигурации?
(30) Я в своё время зарёкся использовать динамическое обновление, т.к. пару раз база рушилась так, что приходилось лезть на SQL, и править таблицы вручную. Но последние полтора года динамическое обновление использую каждый день по нескольку раз. И пока что всё ровно.
Правда, база самописная, сущностей немного и пользователей — 40-50 максимум. Платформа 8.3.10 и 8.3.13
(42) Конечно нет, расширение только позволяет расширить имеющуюся ну никак не заменить основную конфигурацию
(44) «…с помощью расширений можно не теряя полный типовой функционал основного поставщика производить изменения или расширения имеющийся конфигурации…»
Стало быть, далеко не всегда это утверждение верно
(44) Документ новый добавить можно, справочник можно, план обмена можно.
А Подписку на событие — нельзя!
Логика 1С.
Платформа 8.3.12
Вылетает ошибка
Ошибка при вызове метода контекста (ПродолжитьВызов)
Перем1 = ПродолжитьВызов(Форма);
по причине:
Вызов метода разрешен только в методах с аннотацией «Вместо»
Вот вам и расширения… А самый прикол в том, что один раз отработало нормально