<?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='\
А ещё, если, например, нужно с помощью расширения всего лишь добавить кнопку на форму документа, то придётся тянуть в расширение всю форму. И при последующем обновлении конфигурации расширение может перестать работать.
Почему нет режима объединения элементов расширения с основной конфигурацией? Добавил бы несколько элементов на форму и они бы объединились по именам.
Пока в некоторых ситуациях удобнее программно добавлять элементы на форму. Расширение и здесь плохо помогает, т.к. в общий модуль нельзя внедриться.
Внес свои 5 копеек ))) точнее 4.98, все что было. Спасибо за труд.
Не знал про отладку, раньше писал все в внеш обработках, потом переносил в расширение.
(1) ya.Avoronov,
Спасибо! Я старался.
(2) MaxS,
Кажется, это не так. Еще не проверял, но разработчики платформы заявляли, что расширение должно подхватить изменения основной конфигурации и расширение должно продолжить работать. После того как проверю, еще раз напишу.
Безусловно Вы правы!
(3) white_sochi,
Огромное спасибо! Перевод получил и очень Вам признателен.
Кстати, там можно делать переводы и с телефона…
Вот проблемы сейчас писать расширения нет, уже много инфы. А вот четкой уверенности, что после обновления измененной типовой формы не приедятся также перерабатывать эту форму в расширении у меня нет. Вот это тормозит применение расширений при доработках конфигурации.
Скажите, я правильно понимаю, что теперь благодаря расширениям — можно по сути подписываться на события форм?
«а) Выполнить сначала типовой код, затем код из расширения:»
То есть, например, я хочу знать, что пользователь на форме документа нажал некую очень важную кнопку. Создав расширение и обработчик — могу отслеживать без изменения конфигурации, так?
(6) Dach,
Да, именно так. В этом одна из прелестей этого механизма.
(5) вот и я немного прилип после обновления типовой бухгалтерии 3.0. В справочнике «Контрагенты» был переименован реквизит «ОсновнойДоговорКонтрагента» (теперь он «УдалитьОсновнойДоговорКонтрагента») и всё, теперь расширение нерабочее. А допиливал я по мелочи: формы ПКО, РКО, договоры контрагентов
(8) JohnyDeath,
Кажется, что в этом случае правильно, что отвалилось расширение.
Потому что если стал реквизит Удалить_, то скорее всего его использовать больше не надо. Было бы гораздо больше проблем, если расширение осталось рабочим, но делало что-то совсем другое.
Титанический труд! +100500
(4)
Проверял таким образом: в БП 3.0.42 в форму документа АктОбОказанииПроизводственныхУслуг добавил элемент, например декорацию. Сохранил это расширение и загрузил в БП 3.0.41. Появилась ошибка, ругается на отсутствующий справочник.
Попробовал в расширении удалить все штатные элементы формы и добавить свой элемент. В предприятии при открытии этого документа пропали все элементы и форма не открылась.
До появления расширений несколько лет эта конфигурация обновлялась с дополнительным общим модулем, где изменения в формы документов вносились программно. Конфликтов небыло ни разу. Расширение пока не решило этот вопрос.
(9) конкретно в этом случае я просто немного правил под себя типовую форму. А когда первый раз добавлял ее в расширение, то все реквизиты объекта автоматом перешли в расширение. Переименованные реквизиты в расширении вообще не используются, но вот работать перестало все расширение.
(11) MaxS, (12) JohnyDeath,
Да, тут вы правы. Расширение еще не умеет всего делать.
Лично меня в расширениях очень радует, что для изменений не нужно снимать с поддержки.
А поправить расширение после обновления, для меня лично, проще, чем обновлять измененную конфу.
Я к нему отношусь как к еще одному инструменту, который может подходить для каких-то задач. А для каких-то быть совсем не пригодным. И это нормально, ведь только из-за того, что оно что-то не умеет не нужно ставить на нем крест.
Гифки хороши только для поверхностного просмотра. На них очень мелко и деталей не видно и нельзя на паузу нажать. Поэтому лучше видеоролики, которые например бы открывались по клику на гифке.
(14) tormozit,
Согласен. Попробую в следующий раз. А есть где-нибудь примеры?
Спасибо за статью!
Очень аккуратно и качественно сделано.
Приятно читать.
Искренне благодарю всех, кто перечислил денежку!
Это очень мотивирует.
И дает понимание, что такие публикации кому-то нужны и полезны!
Благодарю!
А свои реквизиты в расширении создавать можно ?
Хорошая статья, спасибо.
Спасибо за статью!
Приятно читать.
Да, с отладкой расширения другое дело, Большое спасибо за науку.
(19) Blind_Guardian, (21) vlastapov, (20) sudmorsh,
Пожалуйста!
Очень удобная статья! Коротко и по делу! Спасибо автору!
Очень удобный механизм расширений, когда нужно доработать управляемые формы… Иногда правда, когда разработчики меняют названия реквизитов, приходится допиливать расширения заново… Но это не так часто происходит, поэтому можно и пережить этот момент.
Сейчас столкнулась с такой проблемкой, может кто поможет разобраться:
Добавляю в расширение форму, которая вызывается из основной формы объекта, по гиперссылке (например: Конфигурация БП 3.0, документ «Реализация», форма «ФормаДоставка»).
Хочу заполнить часть реквизитов на основании данных из основной формы документа. Как это можно сделать?
Как в расширении обратиться к самому объекту?
Отличная статья! Также спасибо за дополнительные ссылки.
Отличная статья! А анимированные изображения облегчают понимание. Спасибо!
И очень вежливый автор.)
Коллеги! Всех поздравляю.
зазеркалье .
В 8.3.9 будет существенное развитие механизма Расширения конфигурации.
Почитать можно в
Если кратко, то суть изменений:
Перехват
Вы можете перехватывать любые методы типовой конфигурации, обрамляя их собственными, или даже заменяя целиком.
Собственные обработчики
Вы можете добавлять собственные обработчики событий типовой конфигурации. Если, например, в типовой конфигурации они не назначены.
Собственные модули
Вы можете создавать в расширении собственные общие модули.
Вызов
И, наконец, вы можете вызывать в своём расширении любые методы типовой конфигурации.
Когда вы заимствуете и расширяете какой-нибудь модуль типовой конфигурации, то ваш расширяющий модуль будет находиться в одном пространстве имён с типовым модулем. Поэтому, находясь в расширяющем модуле, вы можете обращаться к любым переменным и методам типового модуля напрямую.
Если же вы находитесь в другом модуле, существующем в расширении, то вам будут доступны ваши же экспортируемые переменные и методы расширяющего модуля. Потому что они добавляются в результирующий публичный контекст типового модуля.
Очень интересные возможности открываются.
(11) MaxS, Добрый день!
Насколько я знаю, форму в расширении можно обновить из основной конфы, кнопка в конструкторе форм «Обновить расширение формы», при обновлении все изменения остаются, применяются только изменения из основной конфы.
Добрый день.
Подскажите пожалуйста куда рыть дальше.
Проблема с ошибкой блокировки расширения конфигуратором. Всё сделал как описано в п.4. Ошибка блокировки не ушла.
На вкладке Дополнительно поставил флажок «Устанавливать режим разрешения отладки». Ошибка блокировки не ушла.
И в запуске предприятия поставил режим отладки.
Снимки экранов приложил в файле. Подскажите пожалуйста что забыл сделать.
(31) bondar_vy@mail.ru,
Такое может быть при первом подключении расширения или если изменился Поставщик расширения или номер версии.
Для исправления попробуйте следующие действия:
1. В конфигураторе закрыть это расширение
2. В режиме предприятия открыть форму связанную с расширением
3. Открыть расширение в конфигураторе
4. Перезапустить отладку.
Спасибо огромное. Помогло. Этот танец с бубнами было бы здорово добавить к п.4.
Ещё раз огромное спасибо.
(33) bondar_vy@mail.ru,
Добавил в 4 пункт это уточнение. Спасибо за отзыв!
День добрый.
Есть ещё один теоретический вопрос. При обновлении основной конфигурации каким образом в расширение подтянуть все изменения. Я такого механизма не нашёл. Нашёл что можно сделать обновление расширенной формы. А всё остальное, то что присутствует в расширении и попало туда с формой как? Или оно обновится автоматически или в расширении только ссылки?
И можно ли обновить скажем все изменённые в расширении формы оптом или надо по одной?
Обновлял зуп. с расширением от внедренца- гемор полный
Инструмент очень далек от реалли и пользоваться им нормально не получится. Это глубокая альфа заявленная в 2014г и до сих пор ею остается.
Если кто соскучился по танцам, то флаг вам в руки.
(36) leonvlas, а подробности?
(36)leonvlas, Да иногда приходиться переписывать расширение, но так проще найти что нужно переписать! 🙂
(36) leonvlas, воистину.
Вообще странно, что я прохлопал эту публикацию и не отметился в комментах. Так вот, отмечаюсь. Всё, изложенное в статье, конечно, очень демонстративно, круто и замечательно, только вот нихрена вам не поможет. Количество глюков и косяков в этом сыром убожестве от 1С таково, что мануалами тут делу не поможешь, только личный опыт. Что делать можно, что нельзя, где её заклинит, и где платформа тихо рухнет. Мне ещё в прошлом году по самое не балуйся хватило.
Добрый совет: если можете — пилите конфу и не связывайтесь с расширениями. Это полное и безысходное г****.
И ещё — ребятушки, а что, пересказ материалов с ИТС без указания копирайта так высоко котируется?
(39) Yashazz,
Спасибо за оценку!
Странно, я думал ссылка на вашу публикацию и на материалы ИТС в самом начале помогут ознакомиться детальнее с расширениями.
В своей публикации я постарался свести все к маленьким практическим кейсам.
Если, считаете, что это плохо — то можете поставить публикации минус. И тогда, возможно, таких публикаций будет меньше.
Очень ценная статья — СПАСИБО
Попробовал. Использовать не советую. Много глюков. Неудобно отлаживать.
(42) DrSender,
это .
А в чем сложность отладки? Пробовали
(39) Yashazz, Уважаемый, но разве у всех есть под рукой ИТС? Да и остальные не всегда читают весь ИТС, а ведут рубрикатор опубликованного и того меньше.
Статья полезна системным подходом, благодарность автору.
На мой взгляд не хватает предостережений, в этой части с Вами полностью согласен, правильно заточенный инструмент, конфа, надёжней в эксплуатации.
Кто знает, добавляются ли в расширение глобальные параметризуемые команды формы? А то добавил форму, а этих команд нет, без низ мне смысл использовать расширение 0 ((
(45) smaximaa,
а программно создавать при открытии формы не получается?
Хотя есть задача в которой это и мне может потребоваться, нужно будет попробовать.
(44) white-mount, вы знаете, что такое нарушение копирайта? Это, на минуточку, нарушение законодательства. А на ИС прям-таки стандартная реакция типа «нуачо» или «а у меня нет ИТС». Вы вообще понимаете, что это статья УК? А не повод вешать плюсики за плагиат?
(47) Yashazz, уважаемый,
Ответ: Да
Ответ: Нет
Подайте на меня в суд за то, что я на форуме направил Вам message:
Статья полезна системным подходом, благодарность автору.
На мой взгляд не хватает предостережений, в этой части с Вами полностью согласен, правильно заточенный инструмент, конфа, надёжней в эксплуатации.
в чем GIFки делали?
(46) white-mount, программно не пробовал, но сработала другая вещь, надо было добавить зависимые объекты команды и она появилась в параметризируемых
есть проблема, в определяемых типах нельзя менять тип, выходит ошибка и расширение не запускается, как можно это обойти?
ps. смысл тогда добавлять их в расширение если редактировать нельзя…
есть вопрос, как добавить форму без реквизитов в расширение?
(52) reznic,
А зачем?
Можно добавить форму к обработке и добавлять любые реквизиты.
(53) вопрос поставил немного не правильно, если быть точнее то как добавлять объект чтобы он не тянул за собой по ссылкам другие объекты
(54) reznic,
Никак.
Разработчики писали, что думают как сократить количество ссылок, но совсем от них отказаться не получиться.
(55) смотри, просто мне попалось расширение и в нем добавлена только одна форма для документа, и та без реквизитов, я такого смог добиться только удалив все ненужное потом , как то это странно, неужели все так делают
(56) reznic,
например так
К сожалению, мне другой способ не известен.
А чем мешают реквизиты? Ведь можно скрыть неиспользуемые объекты,
особо ничем, только весом расширения и лишними ненужными элементами
Извиняюсь за вопрос не по теме: С помощью какого софта вы делали GIF-анимацию?
(49) Milanick, (59) TreeDogNight,
http://makeagif.com/ переделывал из видео в gif
Гифки я делал так:
1. Снимал видео через Snagit
2. Потом через сервис
Добавил справочник номенклатура в расширение, конструктор запроса не видит стандартный реквизит ЭтоГруппа. Как быть?
(61) oslokot,
Нужно в расширении установить проверку свойство «Иерархический».
Либо сделать запрос в другом месте. При выполнении ошибки быть не должно.
Не появилась возможность править общие модули еще?
(63) Wefast,
Такая возможность появилась в платформе 8.3.9.
Но чтобы она работала в конфигурации должен быть снят режим совместимости с 8.3.8.
На сколько мне известно, таких типовых еще нет.
Читать приятно. За это 99 рублей не жалко )
Подробно и понятно.
EDT уже поддерживает редактирование расширений? Вроде не встречал инфы про их поддержку в описании.
(67) tormozit,
Тоже не встречал такой информации.
Сейчас поискал самостоятельно в EDT — не смог найти как создать или открыть расширение.
(68) По сообщениям с партнерского форума сделал вывод, что поддержки расширений как и внешних обработок в текущей версии нет. Думаю она появится в самом конце.
Как массово добавить объекты из конфигурации (CF) в расширение (CFE)?
(70) tormozit,
К сожалению, никак.
По крайней мере на текущий момент.
Сам мучаюсь.
Сегодня была задача по изменению общего модуля. Расширение помогло. Добавил общий модуль и скопировал в общий модуль процедуру. К этим процедурам надо добавлять дерективы &Перед(«НашаПроцедура»), &После(«НашаПроцедура») и &Вместо(«НашаПроцедура»). Если использовать &Вместо к ней можно еще в конце процедуры или функции добавить метод ПродолжитьВызов(), как я понял этот метод выполняет сначала процедуру из расширения потом эту же процедуру там от куда мы ее взяли. Не знаю за чем это. Вот источникhttp://v8.1c.ru/o7/201603module/index.htm
а есть какое нибудь руководство по расширениям?
(73)
во введении этой публикации .
Есть документация на ИТС. Есть курсы Гилева и Насипова.
Ссылки можно посмотреть
Макет же можно добавлять в заимствованных объектах, а вот типовой менять нельзя
(75) Насколько мне известно (но возможно ошибаюсь) эту возможность добавили в 8.3.9
(76) проверил, не фига(
Шикарный материал, изменяющий принципы конфигурирования. Будем использовать!
Подскажите кто нибудь. Встретился с проблемой, модуль менеджера документа с директивой &Вместо не перехватывается в фоновом задании, в частности при групповом перепроведении документов. Как решить?
Вообще впервые узнаю о таких возможностях. Поразительно.Плюс
(72) Цитата: «Добавил общий модуль и скопировал в общий модуль процедуру.».
1. Что здесь означает слово «Добавил» — скопировал в расширение или реально добавил?!
2. Аналогично слово «Скопировал»?!
Например, я добавил в свое расширение ОбщийМодуль из основной конфы и пытаюсь переопределить там функцию аннотацией &Вместо(«ИмяФункции») — при компиляции в ответ получаю
{Расширение1 ОбщийМодуль.Расш1_ОбщийМодуль_ИмяМодуля.Модуль(2,8)}: Ожидается определение процедуры/функции &Вместо<<?>>(«ПолучитьФорматЗаписиИзДереваФормата») (Проверка: Сервер).
Что не так?! В тырнете ответа НЕ НАШЕЛ!
В обычном приложении и внешнем соединении расширения не работают. Вроде там какую то ошибку 1С собирается исправить, но все равно гарантировать полностью корректную работу не будет. Открыть обычную форму в управляемом режиме из расширения мне тоже не удалось — ошибка «Неизвестное имя формы». У кого нибудь получилось?
(82)
Вот пример открытия обычной формы элемента справочника из управляемой формы списка в расширении по отдельной команде:
Показать
(83) Я имел ввиду, что обычная форма находится в расширении, но получить ее по полному имени не удается.
(82) Удивительно, но удалось убедить 1C признать это ошибкой. Вероятно в 8.3.11 это исправят и такая возможность появится.
(2) Думаю, что эта проблема не проблема. Просто в расширении описываешь код кнопки и программно создаешь кнопку при создании на сервере формы. Таким образом, при обновлении формы из основной конфигурации работа сводится не к приведению общего вида формы в порядок (кнопочки пропали/появились) а к приведению в порядок только написанного кода на форме (точнее проверки того, что код расширения не изменился).
Тем более добро пожаловать в 8.3.9 и т.д. где теперь можно почти со всеми модулями проводить махинации.
(18) Пока что (проверено на 8.3.10) нет такой возможности. Планируется ли? — неизвестно.
(97) Код в общем модуле доработанной конфигурации содержит несколько строк и не зависит от метаданных. А при попытке перетянуть форму в расширение переносится ещё и куча ссылок на документы и справочники.
Типовых конфигураций на 8.3.9, в которых ведётся учет я пока не встречал.
По этой-же ссылке написано, что метод ПродолжитьВызов() нужен для обрамления функций.
Никита, хорошая статья.
Сделали расширение с командой «открыть» «свою» добавленную форму.
На платформе 8.3.8 работало. ничего не меняли .на платформе 8.3,9 и на 8.3.10 Выдает ошибку «Неизвестное имя формы».
Что надо поменять для 8.3.9(10)?
вот модуль
Показать
—————
текст Ошибки
{ТХТ_ГТД Документ.РеализацияТоваровУслуг.Форма.ФормаДокументаТовары.Форма(166)}: Ошибка при вызове метода контекста (ОткрытьФорму)
ОткрытьФорму(«Документ.РеализацияТоваровУслуг.Форма.Расш_TXT_Форма», ПараметрыФормы, ЭтаФорма);
по причине:
Неизвестное имя формы. Имя: «Документ.РеализацияТоваровУслуг.Форма.Расш_TXT_Форма»
(133)
Если ничего не меняли, то скорее всего это ошибка платформы и можете написать им.
Я бы попробовал перенести форму в другое место или скопировать ее и обратиться заново.
(134)
Большое спасибо!
(70) (71)
Наше решение должно помочьhttps://infostart.ru/public/689299/
Добавляются, естественно, измененные объекты типовых конфигураций, а не все подряд.
Делали для упрощения обновления измененных типовых конфигураций
(70) В подсистеме «Инструменты разработчика» теперь есть общая форма «ирВыпускРасширения». Она преобразует конфигурацию в расширение (конечно же с ограничениями).
(133) Светлана, смогли решить проблему?
(7) Никита подскажит поподробнее. создал в расширении подсистему, создал роль и обработку. в итоге подсистема не видна. не подскажите какие подводные камни имеются?
(14) Если интересно, есть хитрый удобный способ сделать паузу гифки. Для этого надо нажать в нужный тебе момент на кнопку закрытия браузера, но не отпускать кнопку мыши (чтоб не закрыть браузер 🙂 ) потом просто отвести указать в сторону и отпустить.
(165)
Рисковать закрытием приложения браузера не хочу. Уж лучше программой захвата экрана пользоваться для редких стопкадров.
(134)Ваша щедрость не знает границ