<?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) awk, не понял эту мысль.
Для клиент-серверной базы, нужно чтобы процедура в общем модуле выполнялась на стороне клиента или сервер был переведен в режим отладки, иначе на точке останова этого останова не произойдет.
(1) awk, А не надо вносить изменения. Явно только для отладки.
Конечно, если что-то долго писать и отлаживать, то не удобно. А если по-быстрому посмотреть «что делается», то пойдет.
Это не панацея на все случаи жизни, но как еще один вариант — очень даже подойдет.
Отличный вариант по-быстрому глянуть, что происходит внутри обработки.
Очень неудобное решение! во-первых необходимо снимать конфигурацию с поддержки, что не всегда допустимо
во-вторых — гораздо проще в самой обработке вначале процедуры запихнуть какую-то ошибку в попытке, а в конфигураторе поставить останавливать по ошибке, таким образом меняете только саму обработку и больше ничего 😉
(8) Gida, а зачем снимать с поддержки, вызывай любой существующий модуль и все. А по самой статье бред полный, что трудно выгрузить и посмотреть что делает обработка, еще и если дописывать придется то лишние телодвижеия получаются
(9) Сохранить изменения, обновить в справочнике внешних обработок — это как минимум 2 нажатия мышкой, не большая проблема, капля времени. Все же поможет проверить получение параметров, к примеру, что невозможно при методе рисования формы и выбора объекта в поле ввода.
(8) Внимательней читайте, ничего снимать с потдержки не надо =)
Почему-то 1Сники не используют всех возможностей конфигуратора… Я для отладки пользуюсь установкой параметров запуска, вызова исключения и остановки по ошибке.
В принципе проблемы отладки внешних обработок решаются через выгрузку в файл и запуск через «Файл-Открыть». Если обработка связана с каким-то документом или справочником, то достаточно ввести реквизит с нужным типом и вывести его на форму (для выбора), а в саму обработку встроить проверку получения параметра (для установки значения этого реквизита при вызове обработки из документа/справочника).
(12) rwn_driver,
(11) pumbaE, Попробовал использовать для отладки доп.параметр как показано у автора на рисунке.
Ну,во-первых, для 8.2, чтобы отловить данный параметр, надо указывать в строке доп.параметров «/C debug;». Во-вторых, подключенную внешнюю обработку открыть для отладки форму обработки в конфигураторе таким образом не получилось! Возможно таким образом можно отлаживать только подключенные внешние печатные формы. Не пробовал… Хотя для этого можно ипользовать и более изящный способ!
(14) fomix,
1. попробуйте вместо «ПараметрыСеанса» указать «ПараметрЗапуска» .
2. В параметры запуска передается в режиме запуска Отладки, т.е. запускаете по F5 . Этот метод не подходит если хотите к чужому сеансу подключиться.
(15) Интересный способ, посмотрю на досуге =) Спасибо за интересный вариант
Для обработок — нормально. Для печатных форм лучше взять себе за правило создавать форму со ссылкой на обрабатываемый объект на ней. Дело минуты. И не нужно будет плясок с бубнами.
Неправильное решение. Есть отладчики печатных форм
(17) peterxx, ссылочный объект составного типа — запаришься выбирать во время отладки.
(18) обязательно, только Отладчики печатных форм, отладчики заполнения ТЧ и т.д.
(18) Чего это неправильное? Вполне удобное. А про отладчики я ни чего не слышал. Статья ориентирована на «самых маленьких» чтобы упростить им их нелегкую долю. А мы с вами и без отладки напишем все что надо
(14) fomix,
Просто это фича. От одного релиза платформы к другому поведение платформы меняется. В каком то релизе этот трюк срабатывает, в каком-то — нет. В свое время, вдоволь помучавшись с отладкой (видимо как и автор), я юзал обработки отладки от Поручика. Потом, были какие-то и там сложности, но какие — не вспомню с лету. Сейчас совсем сурово отлаживаю — рисую форму и отткуда уже дергаю методы вызова из БСП. Так и отлаживаю в последнее время. Но Поручику за его помогалки все равно спасиба!
Поищи отладчики на этом форуме. Очень удобно
(12) rwn_driver,
А что нужно «рисовать»? Просто создать основную форму и вывести на неё единственный реквизит (с набором нужных типов) для выбора.
как правило, для отладки достаточно добавить код, вызывающий ошибку, например
Выполнить(«абра-кадабра») и включить в отладке остановку по ошибке.
1С сама откроет временный файл и отладка будет именно на этой строке. Которую, кстати, вы можете разместить непосредственно перед участком, который хотите отладить.
(24) тоже пользуюсь методом ошибки 🙂 но автор, всёравно, молодец 😉
(25) Спасибо =) Делюсь своим метобом просто =) Прост в исполнении и для понимания =)
Добавлю свои пять копеек …
При разработке внешних печатных форм сразу в конец добавляю две строчки типа:
//СсылкаНаОбъект = Документы.РеализацияТоваровУслуг.ПолучитьФормуВыбора().ОткрытьМодально();
//Печать().Показать();
Подчеркнутое — поменяйте на нужное.
Если нужно отладить — достаточно раскомментарить эти строки и запустить как обычную обработку.
А что за метод ошибки? Просвятите плиз. Не в курсе просто. Из сообщений не понял ни чего
(28) имеется в виду то, что описано в посте (24) — засунуть явно ошибочное выражение в попытку-исключение.
(29) Спасибо =)
Спасибо.
(11) pumbaE,
Это не «возможность», это — фича, особеность работы конфигуратора.
(12) rwn_driver,
Не всегда, и, тем более, не «в принципе». В УФ может отработать, а может — не отработать. Как недоплатформа 8.2-8.3 «захочет».
Пробую САБЖ на 8.3.6. че то не получается, ничего не изменилось с тех пор??
В справочнике снешние обработки теперь появилась к кнопка ОТЛАДКА. Как ей пользоваться?
Пожалуй вот самый оптимальный вариант, если САБЖ не подходит.
http://www.obrabotki.com/otladka-bsp-1s/
8.3.6 — проверил — работает. Соответственно нужна либо клиентская процедура в общем модуле, либо файловая база либо сервер 1с в режиме отладки (-debug)
(36) VovkaPutin, я о том же — только я не предлагаю искать функцию общего модуля — я предлагаю ее вызвать.
Ну и еще — если отладка на сервере не включена то все это только для клиентских функций обработки и в клиентской общем модуле 😉
не работает ни одно ни другое.Подскажите пожалуйста для чего нужен режим отладки во в дополнительной обработке
(38) serg1983, Работает) У вас сервер в редиме отладки?
Поп оводу БСПшного механизма отладки внешних обработок — не подскажу — пока не доводилось сталкиваться
Не совсем понимаю «сервер в режиме отладки». Ноутбук платформа 1с 8.3.5.1443 Конфигурация «Бухгалтерия предприятия 3.0» базовая. При остановке на ошибке останавливается на модуле конфигурации где открывает форму внешней обработке. В саму внешнюю обработку ни как не хочет вставать. Пробовал как в процедуре НаСервере так и НаКлиенте.
(40) serg1983, база файловая/серверная?
Ни когда неработал с базовой. Вы попадаете отладчиком в общий модуль? Шаг отладки делаемнажатием f11 (не f10). Сложно угадать почему у вас не получается — у меня все работает
у меня не работает. то есть не заходит в обработку. пичаль
(42) ERP2.0 на выходе из процедуры F11 не попадает в обработку.
(44) КРТЩ, Можно подробнее? Файловая/серверная, сервер в режиме отладки или нет?
Какую процедуру и в каком общем модуле используете? Завтра днем проверю — только у меня ERP 2.1
(45) подробнее файловая 1С:ERP Управление предприятием 2.0 (2.0.10.115)
1С:Предприятие 8.3 (8.3.6.2152)
клиент без разницы
процедура ОМ ОбщегоНазначения ЭтоСсылка()
1С:Предприятие 8.3 (8.3.6.2152)
тоже не работает метод
Останавливается в Функции общего назначения, нажимаю F11 ….. обработка проходит в обычном режиме
Не делает шага, не останавливается, а просто продолжает отработку.
Если я верно понимаю, то на платформе ниже 8.3.7 шагнуть из отладчика на клиенте внутрь внешнего файла на сервере невозможно (в виду того, что файл находится на другом компе).
Что то я не пойму как мне отдалить внешнюю печатную форму для управляемых форм.
Где мне вызвать общий модуль, если никакой формы нет. А какой либо ф-ии события в модуле объекта нет.
чот нифига не работает у меня
Ни один способ из перечисленных во всех комментариях не помог заставить конфигуратор открыть код внешней обработки в режиме отладки. Лучшее, что получается — это попасть на строчку кода, вызывающую экспортную функцию внешней обработки уже после отработки этой фнукции.
Топик видимо стал неактуален для современных платформ. Когда-то это, возможно, и работало, но теперь — нет.
Если автору не лень, пусть добавит эту информацию, чтобы народ не маялся пустыми надеждами, а сразу добавлял возможность запускать внешнюю обработку через «Файл-открыть» и там уже отлаживать.
(51), еще вариант есть:
Поставить отладку на паузу в конфигураторе, нажать кнопку печать в предприятии, в отладке, нажимать кнопку F11, так дойдешь до нужной строчки обработки
(52) А ты прям проверил, или так просто написал, «знаючи»? 🙂
(51)
Топик видимо стал неактуален для современных платформ. Когда-то это, возможно, и работало, но теперь — нет.
Если автору не лень, пусть добавит эту информацию, чтобы народ не маялся пустыми надеждами, а сразу добавлял возможность запускать внешнюю обработку через «Файл-открыть» и там уже отлаживать.
Да — да, даже с включеным режимом отладки на сервере этот способ теперь не работает. Напишу об этом в теме. Спасибо.
(53), постоянно пользуюсь
Так как отладить внешнюю обработку заполнения тч?
По комментам, как понял все описанные способы уже не работают??
Все нашел способ) Не знаю, можно ли здесь давать ссылки на другие ресурсы?
(57) Если это интересно и полезно — конечно)
Показать
Главное запустить конфигуратор от имени администратора и можно в процессе отладки сохранятся в обработках. Вообще удобная штука!!
Сделал как и советовал автор.
http://infostart.ru/public/558559/ , плюс саму форму обработки и все больше танцев с бубнами не нужно!
Вызываю процедуру в своем общем модуле куда передаю все параметры из статьи
(61) Не могу найти ни модуля ДополнительныеОтчетыИОбработки , ни справочника Дополнительные отчеты и обработки . Работаю в Бухгалтерии 2.0. Платформа 8.3.9.2033. Очень хочется научиться заходить в отладчике во внешнюю обработку. Подскажите поподробнее, пож-та.
(62) это объекты БСП, в 2.0 обычные формы и там их еще нет. Там другой механизм и толстом клиенте эти танцы с бубном не нужны!
(63)попробуй при открытие формы вставить код: ВызватьИсключение(«а»);
(64) я для УФ нашел еще проще решение, просто написать форму и вызывать обработку из файла, тогда проблем с отладкой не возникает! А ваш метод работает только для толстого клиента обычного приложения, для УФ на БСП это не работает, т.к. обработка не сохраняется на жесткий диск, а сидит в памяти!
(18) давно уже с 8.2.какой-то поздней версии для УФ все отладчики ВПФ и ТЧ можно выкинуть — 1С стала все писать в адресное хранилище и брать оттуда, т.е все в памяти хранится в виде BLOB.
Теперь — либо доп.формочку в обработку и выбирать обрабатываемый объект, либо — вводить обработку в конфигурацию — и отлаживать оттуда.
И то не факт, что все получится.
———-
Кстати, можно не попасть в некоторые процедуры между общими КЛИЕНТСКИМИ модулями (на Клиенте которые). Вызов есть, выполнение — есть, а попасть нельзя. Очередной прикол.
Платформа 8.3.11, следовательно, минимум до неё этот глюк с древних времен 1С, новее пока нет.
(59) пробовал все способы, только этот способ из всех описаных оказался рабочим для отладки доп.отчетов и обработок.
(8.3.10.2667) УФ
один недостаток , использовать нужно только на персональной копии базы , иначе у всех буду внешние отчеты открываться из одного файла.
варианты с остановкой по исключению срабатывают. но модуль вн.обработки не открывается для отладки.
Для УФ на БСП последних версий работает этоhttps://infostart.ru/public/916110/
(24)Спасибо реально работает везде без проблем! Лазил искал решение долго, а оказалось все просто!