<?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='\
Спасибо, познавательно.
Всё, что можно запустить через Файл — Открыть отлаживается тупо и без выкрутасов…..
(2) (3)
Есть такая малость… Те параметры, которые передает этой самой обработке источник)) Через файлоткрыть вы их не получите, разве что сами где-нибудь забьете. Кроме этого сама отладка ведется именно по контексту — открыл объект которому назначена обработка и выполняю команду… И сразу торможусь в конфигураторе на точке останова.И вижу весь отладочный контекст. Захотел — для одного объекта команду выполнил, захотел — для другого. ничего не перевыбирая, ничего не переписывая, а сразу. Больше возможностей для проверки.
(2)
Обращу ваше внимание на тему статьи — «Отладка дополнительных обработок БСП», а не просто внешних обработок. О профите от помещения в внешние обработки речи не идет. Если изначально делаем назначаемуюглобальную обработку для БСП — так будет проще отлаживать, чем через файлоткрыть.
Метод хороший, для отладки внешних печатных форм — то, что нужно. Позволяет цеплять обработку к нужному объекту без всяких дополнительных ухищрений. Подходит и для серверного метода, и для клиентского.
Если в подключаемой обработке есть форма с командными кнопками, то отладчик не заходит в процедуры формы. Видимо, ваш код необходимо выполнять до захода в форму.
(7) надо понимать, откуда форма открывается. Тут ведь происходит точечная отладка — т.е. конкретный метод выполняем через внешнюю обработку. Ну переопределите открытие формы — в ПриОткрытии подключайте внешнюю обработку, открывайте ее форму, от исходной отказывайтесь. Все аналогично.
В инструментах разработчика в вариантах Расширение и Подсистема есть инструмент «Отладка внешних обработок БСП». Он позволяет отлаживать внешние отчеты и обработки из справочника БСП в натуральном виде в заданном каталоге с минимумом манимпуляций.
(9) Обнаружил, что в БСП 2.4 изменился внутренний механизм работы с внутренними событиями. На нем я не нашел как заставить работать инструмент «Отладка внешних обработок БСП» из ИР (перенаправлять создание внешних обработок в файлы).
я обычно создаю форму, создаю на ней реквизиты и поля для требуемых параметров. Отлаживаю потом переписываю на работу как доп. обработки.
немного это времени занимает.
(11)
— много. И оно не надо. При таком подходе вы лишены контекста разработки, отладка идет от эмуляции окружения.
контекста разработки я себя не лишаю, и время набить несколько параметров не проблема.
я не против вашего метода. Я делюсь своим.
(13) я понимаю) Но я против вашего, и делюсь этим) Поскольку сам проходил этот этап — и могу сказать, что это «идеальный газ». Отладка по контексту помогает выявить большое количество ошибок, о которых вы и не узнаете если будете все параметры эмулировать через отладочную форму. Конечно, все еще от конфы зависит, от ситуации. Но лично у меня скоростькачество разработки улучшились.
вопрос, ваш метод будет работать в клиент-серверном варианте?
И о каком контексте вы все время говорите кроме передаваемых в обработку параметров?
(15) Да, разумеется
(16) Я имею в виду что запуск обработки отчета происходит по пользовательскому событию. Вы будете открывать обработку в режиме предприятия, забивать параметры, нажимать на кнопку. Я буду открывать документ, вызывать команду из его формы — все также, как делает пользователь. При этом мне не понадобится перезапускать 1С, или переоткрывать инициализирующую форму — у меня есть одна команда, например для заполнения табличной части. Я вызываю ее, при этом всю разработку веду в внешней обработке.
в клиент серверном варианте кто должна лежать обработка?
В каталоге, доступном пользователю 1С. На локальной машине с этим проблем обычно не возникает, если разнесены — сделайте шару.
Спасибо, полезно!
Красиво, просто и понятно. спасибо. Будем использовать
(9)
это очень хороший инструмент, но отладка работает в том случае, если инструменты разработчика внедрены в конфигурацию (это ответ разработчика инструментов)
(23) Использовать эту возможность можно не только при внедрении в конфигурацию (вариант Подсистема), но и при подключении расширения конфигурации (вариант Расширение). А вот вариант Портативный действительно не позволяет использовать эту возможность. Я кстати есть разработчик подсистемы «Инструменты разработчика».
(24) Спасибо, про расширение не знал. Буду пользоваться. Инструмент то незаменимый!
Зачет +
Категорически одобряю
(5) Не проще. Создание обработки, это циклический процесс: Открыть, начать отладку, внести изменения, сохранить и переоткрыть заново.
Для быстрой и качественной отладки делается по одному шаблону для каждого вида (отчёт, заполнение ТЧ и т.д.) и всё. Можно вести разработку для обработок на БСП точно так же, как если бы разрабатывалась обычная обработка или обычный отчёт.
(28)
Мне надоело что-то кому-то доказывать)) Если смотрели видео пробовали сами этот подход — то профит должен быть очевиден. Если не делали этого — то попробуйте. Ну, или работайте как вам больше нравится) В конце концов, если кому-то кажется правильным работать эмулируя окружение — это его дело.
(29) Не надо доказывать. Терпите, ведь это по сути «барахолка». Видео, это для многих круто, но не для всех. Проще говоря в работе видео никогда вообще не смотрю. Поэтому приходится как-то по косвенным признакам пытаться догадываться.
По поводу окружения не понял. Ведь в шаблонах создаёшь это самое окружение в виде параметров.
(18) один раз выбираю во внешней обработке нужный документ, ввожу имя ТЧ и всё, хоть запереоткрывайся, ничего выбирать не надо.
Спасибо, не знал.
Спасибо в моей задаче этот метод помог. Но единственно что нужно сохранить обработку на общем ресурсе который одинаково доступен как серверу так и отладчику с клиентом. если они разнесены на разные машины то путь к обработке должен быть через \ , а если на одной то можно как в примере. Важно чтобы предприятие и конфигуратор открывали обработку с одним и тем-же путем.
(33) ну да, это мне кажется прозрачный момент
что то я не понял , как отладить не Печатную форму , а обработку заполнения ТЧ
и не понял зачем так тода извращаться если таким же способом можно Универсальную создать ? с выбором файла ?
(35)
Смотрите видео.. Все по аналогии. Профит:
— не надо делать лишних интерфейсов — работаем, повторяя пользовательский сценарий в 1С
— не надо эмулировать окружение (забивать параметры на форму)
— не надо использовать вспомогательные обработчики для отладки — я ими попользовался, и скорее бы такой подход назвал извращением, чем этот
(36)
в видео у вас Печатная форма , и процедура Печать в модуле обработки
у меня обработка ТЧ документа ,
в СведенияОВнешнейОбработке описана команда открытия допформы и все действия в модуле формы уже
не понятно куда в таком случае добавлять код который у вас в процедуре Печать добавляется ?
(37)
Дайте пример? Вообще, по-идее на форме должен быть только интерактив, а основные действия — в модуле объекта.
(38)вот к примеру эта обработка
https://infostart.ru/public/561065/
если надо могу её вам скинуть
вызывается форма , где указываются параметры , из формы они переносятся в документ
код в модуле обработки :
Показать
остальной код в уже в форме
(39)
Как я думал — обвал по архитектуре. Таблицу необходимо заполнять на сервере. Саму таблицу — в табличную часть, заполняем ее на сервере, на клиенте отражаем результат заполнения. Серверный метод можно отладить, используя данный подход. Предупреждая вопросы — переносить алгоритм заполнения на сервер надо не ради отладки, а ради соблюдения ИТС, см. напримерМинимизация кода, выполняемого на клиенте .
Саму форму теоретически отладить можно, для этого надо сделать метод экспортным и переопределить открытие формы, открыв форму внешней обработки — однако у меня ни разу такой потребности не возникало.
(40)
как таблицу на сервере ? форма документа открыта на клиенте , зачем её на сервере заполнять
или я не понимаю что то ?
почитал по ссылке , там про сложные алгоритмы и ресурсы компа , это не важно абсолютно в моём случае
(41)
— затем, что работа с таблицей формы в большинстве случаев может породить неявные вызовы сервера. Во-вторых — в принципе при разработке надо стремиться к тому чтобы на форме был только интерактив, весь служебный интерфейс необходимо разрабатывать на сервере -> в модуле объекта. Вы же совместили интерфейс с самим алгоритмом.
К сожалению, все обычно руководствуются правилом «что разрешено — то не запрещено». Почитайте статьи про рефакторинг, на ИС, возможно придете к этим-же выводам.
Не хочу здесь проводить код-ревью вашей обработки, много писать придется. Да вам оно, думаю и не надо)
(42)скорей всего и не надо , до управляемых форм все было отлично
как на эту ерунду (клиент/сервер) перешли так всё по другому стало … а многим оно и не нужно
а я прикладные задачи решаю а не глобальные …
и как вы заметили , кода прибавляется , зачем непонятно , когда тут простейшие алгоритмы
спасибо , может почитаю чего нибудь в этом направлении
а у вас есть пример любой обработки с этим кодом ? поделитесь пожалуйста .
(43) Посмотрите примеры в БСП, вот демка для заполнения контрагентов
Метод прикольный, спору нет. Но только не работает у меня:
База на сервере, все сделал как в примере — отладка фоновых заданий, параметр запуска. На точки останова не тормозиться и все тут. Сообщения если оставлять, все выводит в правильном порядке. подскажите что еще попробовать можно
(45)
Отладка Подключение Подключенные предметы отладки — должны при запуске базы автоматически светится две строки. Тонкий клиент Сервер. Это есть?
(46) Да, есть. Платформа 8.3.10.2580. Еще один факт: пробую печатать — отладка не запускается. Следом открываю обработку через файл — открыть, нажимаю кнопку и ТОЖЕ НЕ ПОПАДАЮ В ОТЛАДКУ. В конфигураторе ставлю пробел, сохраняю, открываю — появляется отладка.
то есть смысл в том, что если нажать кнопку печать, то отладка отваливается от этого файла…?
обработка лежит на сетевом диске, он доступен ото всюду. путь тоже правильно написан
(47) Поставил точку останова в общем модуле, в который обращается моя обработка, поскольку точки останова в самой обработине не работали. И воуаля, мы зашли туда, F11, и выходим снова в обработку. Но только открылось другое окно (которое слева на картинке)
Как я понял проблемы была в букве сетевого диска и пути к обработке. Я открыл вот такую обработку N:\*** а через общий модуль открылась обработка вот с таким путем \192.168****
(48)
А, да, есть такое. Пути должны быть одинаковые.
Отличное видео. Все сработало. Спасибо!
Я пользуюсьhttps://infostart.ru/public/73691/ . По-моему, это удобнее.
(2)
Вы просто не понимаете разницу между внешними обработками и дополнительными обработками. Каким образов вы думаете отлаживать сохраненные параметры у прикрепленной обработки запуская его как внешний, а?
(11) Чего?? Делать кучу телодвижений вместо пару строчек для вас не занимает много времени?))
(37) Отладить как клиентские так и серверные вызовы, достаточно перед самым запуском подключаемой команды открыть вашу обработку через «Файл->Открыть», потом закрыть и запустить команду. Всё выполнение будет передано этой обработке из файла (имя обработки, естественно, должно совпадать с именем объекта из справочника ДополнительныеОтчетыИОбработки). Версия БСП — 2.4.5.31
(54)
Что-то не выходит у меня..
(55) Двоичные данные внешней обработки из файла должны полностью совпадать с двоичными данными из справочника. Поэтому при каждом изменении в файле, нужно загружать его в справочник.
Когда вы открываете файл обработки через меню Файл-Открыть, вы регистрируете ее Имя и, видимо, хеш-сумму, причем её ИспользуемоеИмяФайла — это файловый путь. Кода запускается команда подключенной обработки с таким же именем, проверяется ее хеш-сумма, и если она не совпадает, то ИспользуемоеИмяФайла заменяется на путь во временном хранилище, но если совпадает, ИспользуемоеИмяФайла не меняется и команда может быть отлажена в файле.
Спасибо полезно!
(56) Я насколько понял — вы говорите о обработке, которая после первого запуска создает 1С в временном файле. Она — да, существует до закрытия программы. Только это не отладка будет, а боль сплошная.
ваше кино на ютубе не открывается. битая ссылка. хотя бы картинку добавили. ничего понять невозможно в такой статье.
(59)У меня открылосьhttps://www.youtube.com/watch?time_continue=21&v=5ffBzFNOSeM .
Проблемы с вашим интернетом.
сорри.
это на моей работе ограничивают досступ к ютуб
Уточните, пожалуйста, следующие моменты:
— вариант работает на клиент-серверном варианте?
— конфигуратор должен быть открыт на той же машине, где работает сервер предприятия 1С?
Я попробовал использовать сетевую папку которая доступна с сервера и клиента, путь одинаковый, но точка остановки не срабатывает.
Для варианта вызова ТипКомандыВызовКлиентскогоМетода() видимо отдельно придумывать нужно что-то, т.к. создать обработку на клиенте невозможно.
Опубликована новая версия универсального отладчика доп. обработокhttps://infostart.ru/public/916110 Это развитие метода, использованного в нашей более старой публикации, который позаимствовал (9 )
(62) Везде работает, все равно где открыт конфигуратор. Про вызов клиентского — видимо, да, не сталкивался до сих пор, соотв. не было нужды что-то изобретать. Но вообще — возможно, в режиме толстого клиента УФ. Да и на тонком возможно, только гемора чуть побольше.
На каком релизе платформы работает?
Пробую на 8.3.12.1469
Условие
Если Адрес <> ЭтотОбъект.ИспользуемоеИмяФайла
выполняется всегда, так как свойство ЭтотОбъект.ИспользуемоеИмяФайла содержит темпоральное имя в виде
«e1cib/tempstorage/186306aa-905d-4790-bf3d-de9944665b4c»
из за этого возникает бесконечный рекурсивный вызов процедуры
… заработало
Какие то глюки с кэшем
Спасибо за статью, очень помогла. Особенно с последними версиями БСП 2.4
Почему не получается?
{ВнешняяОбработка.СчетЗаказКлиентаВнешнийКирсановаТЕСТ.МодульОбъекта(49)}: Ошибка при вызове метода контекста (Создать)
обр = ВнешниеОбработки.Создать(Адрес, БезопасныйРежим());
по причине:
Ошибка подключения внешних метаданных
по причине:
Каталог не обнаружен ‘E:1Тест.epf’
все сделал по инструкции, пробовал несколько раз менять адрес каталога
(68)
Предполагаю что каталог на сервере не обнаружен
(69) да я не верно разместил каталог
(10) Теперь поддерживается и БСП 2.4+, но только в варианте Расширение.
(8) а как быть если внешняя обработка заполнения таб. части с вызовом клиентского метода с формы?
Получить форму для обращения к экспортной процедуре «ВыполнитьКоманду» внешней обработки можно только в толстом клиенте. И получается что в этом варианте исполнения ваш метод не исполнить никак правильно?
(72) Сам алгоритм должен находиться на сервере, в модуле обработки
(72) «Получить форму для обращения к экспортной процедуре «ВыполнитьКоманду» внешней обработки можно только в толстом клиенте. И получается что в этом варианте исполнения ваш метод не исполнить никак правильно?» — кстати, не уверен. Можно вроде и на тонком извратиться, только зачем? Соблюдайте негласные базовые правила — отделяйте основную логику от интерактива, и не будет возникать таких вопросов.
(74) «кстати, не уверен. Можно вроде и на тонком извратиться» — может и можно но в доступности ВнешниеОбработкиМенеджер
ПолучитьФорму только Толстый клиент, а по поводу соблюдать негласные правила… я же приводил пример общего модуля стандартных подсистем — т.е. так работают 99% всех типовых конфигураций и речь напомню об обработки заполнения таблицы формы — т.е. в конце концов мы работаем именно с интерфейсной частью. Так что тут все правила соблюдены.
Да и не об этом речь — смысл вопроса в том что перехватить исполнение кода по вашей методе мы можем только в модуле объекта и никак иначе — вот что я хотел уточнить, и как понял это именно так.
Плюс как минимум за это:
Правой кнопкой мыши по файлу с шифтом — «Копировать как путь»
Спасибо за идею.
Правда, у меня иногда крашился клиент. Пришлось добавить исключение по ЭтомуОбъекту в «ЗаполнитьЗначенияСвойств»: