<?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='\
Maniac — Жду с нетерпением!
(3) Ждем-с
(3) Слово не воробей…. Ждемс..
(2) Не понятно?! Попробую объяснить в чем экономия времени. Автор честно и доходчиво сказал, что его обработка — это «типовой» код помещенный во внешнюю обработку. Если у кого то возникает потребность в новой печатной форме на базе существующей типовой печатной формы, то эта обработка избавляет разработчика от первоначальной, подготовительной работы по выносу типового кода из конфигурации в epf-файл. Можно конечно сказать, что это всего час работы… А можно сказать что это целый час работы.. 🙂
Я плюсую за открытость и за то что автор не вступил в дискуссию (ведь очень неприятно когда хорошие изначально форумы , например, «кубань.ру», превращаются в хамско-стёбо-спор-дискуссионный балаган)
Вообщем 1С давно пора подумать о том что бы сделать подобное афтоматом 🙂
Спасибо Автору большущее!! Я не большой профессионал в 1С и самостоятельно переписать код в объекте модуля у меня никак не получилось, прочитала миллион рекомендации, а все-равно не разобралась. Уже договорилась с программистами 1С, что они мне подготовят внешнюю форму за 3 тысячи рублей!!! И тут наткнулась на эту форму — и всё теперь в шоколаде! 😎 ))Леплю макеты счетов и заказов какие мне удобно: с логотипом и без, с печатью и подписью и без них, ну и т.д.
Самому внешнюю форму написать не получилось. А тут нашел. Большое автору спасибо.
а ну-ка и я попробую =)
При обращении выдает ошибку:
Не удалось сформировать внешнюю печатную форму!
Ошибка при вызове метода контекста (Выполнить): {(9, 3)}: Поле не найдено «ЗаказПокупателя.Количество»
<<?>>ЗаказПокупателя.Количество КАК Количество,
УТ 10.3.8.9
Здравствуйте, подскажите а контактное лицо будет входить в печатную форму или нет и как возможно его туда добавить?
2) Не понятно?! Попробую объяснить в чем экономия времени. Автор честно и доходчиво сказал, что его обработка — это «типовой» код помещенный во внешнюю обработку. Если у кого то возникает потребность в новой печатной форме на базе существующей типовой печатной формы, то эта обработка избавляет разработчика от первоначальной, подготовительной работы по выносу типового кода из конфигурации в epf-файл. Можно конечно сказать, что это всего час работы… А можно сказать что это целый час работы..
Я плюсую за открытость и за то что автор не вступил в дискуссию (ведь очень неприятно когда хорошие изначально форумы , например, «кубань.ру», превращаются в хамско-стёбо-спор-дискуссионный балаган)
полностью согласен — тоже плюсую
спасибо автору — весь день бился над переносом кода во внешнюю обработку — но на заказ покупателя он какой-то не стандартный — подскажите еще будет ли работать обработка в Управлении производственным предприятием 1.3, или только в Управлении торговлей???
(17) evg300183, Полагаю без явных оснований, что работать в УПП она не сможет, но попробуйте. Я не пробовал.
Супер. Вау. Боже мой. Оно заработало на моей конфигурации: «Управление торговлей для Украины», редакция 2.3. Разработка конфигурации: «ABBYY Ukraine», 2003-2009 (2.3.12.1).
Вопрос:
Можно ли в ней сделать:
1. Чтобы табличка с заказом, выводилась дважды, (скажем чуть ниже) — как ее скопировать?
2. Чтобы в табличке добавился столбец: «Номенклатура» как в самой форме?
3. Чтобы выводились коментарии
Проискав эту весчь в течении трех дней, думал что уже не найду. И вот нашел. Спасибо огромное Автору. Тут на форуме нет похожей. А вытащитьиз стандарнтой нет возможности.
У меня просто нет слов, как я доволен что нашел такую форму. перелопатив ну просто весь интерне. Сорри что повторяюсь, НО, ОНО РАБОТАЕТ! и не ищет какуюто «КПП»… Супер.
Замечательно, я сделал на основе ее форму комплектации номенклатуры заказа, без цен.
Спасибо автору. не мог понять как написать запрос для получения Данных для печатной формы
(0) Я тоже ничего не понимаю — что тут нового или доработанного? Может теперь станем выкладывать на Инфостарт все имеющиеся в типовых конфигурациях печатные формы?
В интернете полно информации по созданию и подключению внешних печатных форм к типовым конфигурациям, какой смысл в этой публикации?
(11) ya-esm, жадные программисты Вам попались видать, раз запрашивали аж 3к руб. за простое копирование типовой печатной формы заказа…
(16) evg300183, перенос кода процедур и функций, связанных с печатью формы любого документа, во внешнюю обработку занимает минут 15 (30 — для навороченных форм), но никак не целый час кто имеет хоть небольшой опыт их доработки.
(20) wwizard, это уж Вам придется самим копаться в коде и дорабатывать ее =)
(23) 6630, интересно за что спасибо, если Вы ее не скачали? =)
(24) Zigfridish, 🙂 а чем я тогда пользуюсь?
Спасибо! Мне нужно было сделать ВПФ «Заказ покупателя» с изменением единиц измерения и в результате количеством и ценой для КА. Взял Вашу форму и засчитал поля как хотели менеджеры. Плюс!
Замечательно! Подошло к современной УПП! Спасибо!
Кстати, Maniac не рубит! Не всегда можно сделать внешнюю печатную форму путем копирования кода процедуры Печать(). Иногда это очень сложно. Может в конкретном случае и просто, а с некоторыми макетами — это очень трудно, т.к. код разбросан по всей УПП.
подошла к последней КА. Автору спасибо.