<?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) …
Сказал бы я тебе… да тут Женщины есть.
файл выложил запореленный не для скачки -( это статья, а не программа )
для того чтобы потом доказать, что мой ответ уже лежал на сайте ,
а не потом я его придумал.
И увидеть интерес к данному вопросу (для статистики)
А так , сейчас такИе типа тебя будут писать — да это баян,яйца выеденного не стоит… (посмотрел твои статьи — без комментариев)
а я могу поспорить что многим этот совет пригодится и не все про этот способ знают.
….
Вот так — хотел новую струю внести — типа конкурса — НЕНУЖНО
пользователь ленивый , он не будет, он не … а что мы их судим
тут ненужно быть программистом , нужно только знать как пользоваться инструментом.
А главное научить, показать и рассказать — а чтобы лучше запомнилось — заставить подумать.
Гы.. ну вот тебе еще баян:
Всем известно, что word-документ есть компаунд достаточно посмотреть его любым компаунд-эксплорером..
Для 2007 офиса, еще проще — *.docx на *.zip (или просто открыть файло в архиваторе)
и распаковать — всё видно, при желании, изменить и запаковать обратно.
ЗЫ: таким способом, например, можно тупо снять любой пароль/защиту к книге..
(5) )))) УважаемыйЁпрст , то что Вы это знаете я нисколько не сомневался (и статейка эта не для Вашего уровня)
Это как ложка с дыркой — проверка на вшивость.
Вчера задал такой вопрос на собеседовании — у паренька судя по резюме три года опыта программирования на всем — вот он с задачей не справился.
«А вопрос стоял так вот тебе файл в нем 6 картинок — мне нужно их увидеть в 1С на форме»….Финиш, он мне через 2 часа начал доказывать, что в 1С такой функции нет и значит это НЕДОКУМЕНТИРОВАННАЯ возможность.
«На баяне сможет клавиши нажать каждый , а вот сыграть не нем — дано не каждому»
(4) Сколько пафоса…
Убрал свой минус в связи со сделанными исправлениями в статье.
Плюсану за отстаивание своих интересов! 😉 Подчерпнул для себя новую информацию! Благодарю! 🙂
(6) Это задание скорее на смекалку, а не на знание возможностей системы и встроенного языка. 😉 Поэтому над претендентом ты явно прикололся… 😀
Файл, сохранить, веб-страница, пути какие-то… Это же сколько кнопок нажимать надо 🙁 . Не мудрено перепутать.
Я лично в таких случаях делаю чисто по деревенски: в ворде — копировать, там, где картинка нужна — вставить.
А если монитор достатчно большой, чтобы можно было разместить рядом ворд и 1С то просто перетаскиваем мышкой из ворда на 1Совскую табаличку…. 😉
(10)
Я уважаю твой выбор, если тебя так устраивает — то почему бы и нет.
можно и так, но долгоооооо очень , если в прайсе больше 100 картинок
будешь каждую копировать ?
А вставлять куда будешь ?
(ну нет там у рисунка в свойствах сохранить как…)
скопировать можно, а как в файл превратить 🙂
(0)
не через html, макросом можно сохранить картинку ~5 строк кода, это много?
(11) А мы что обсуждаем то? Как из экселя выдернуть картинку выдернуть
или как в 1С вставить?
е вроде даже в 8.2 нет.
Чтобы из экселя выдернуть, метод годится. Вставить можно в любую программу, поддерживающую вставку из клипбоарда, в т.ч. на табличный документ в 1С в 7.7. В 8ку надо подумать.
А если речь идет о вставке картинок с программной привязкой к номенклатуре, то — принципиальной разницы с макросом, читающим картинки прямо со страники нет — все равно программу писать надо по выборке файлов и записи их (или хотя бы их путей) в БД. Встроенной функции ПрочитатьМногоКартинокИСамостоятельноПривязатьИхКНоменклатур
А вообще универсальный способ выдергивания рисунков — кнопочка PrtScr. Есть также специальные программы которые сами копируют определенную область экрана, выполняют прокрутку и так далее (полезно при работе со всякими замороченными форматами типа PDF)
А мне понравилось! Поставлю +
Хотя думаю если бы задача такая возникла то я до этого допер бы.
(12) Мне про макросы не нужно рассказывать 😀
Сможете за свои слова ответить
макрос в 5 строк — листинг выложить здесь ?
(не все знаю что такое макрос и как его написать)
(14) нет слов…в шапке написано
«на мой взляд самый ПРОСТОЙ и самый БЫСТРЫЙ способ … (не требующих особых навыков)» я показал вариант ! а не доказал что это Единственный и неповторимый способ.
Чем больше способов мы знаем, тем мы универсальнее )))
(16)
пример можно найти в интернете.
я могу и здесь написать, но так не интересно будет. тем более что вам про макросы не нужно рассказывать 😀 можно на что нибудь поспорить, если не верите. 😉
(16) Так все-таки «загрузить» или «сохранить»? Сие разные вещи. Сохранить таким способом действительно быстро и удобно. А вот если надо «загрузить» (я так понимаю, что в какое-то еще приложение, например в 1С), то уже надо смотреть, в какое приложение, все/выборочно и т.п. Причем если речь идет об автоматической привязке к номенклатуре, то пока картинки лежат на листе (т.е. считываются макросом), их положение относительно ячейки с названием товара опеределяется на мой взгляд попроще, чем положение картинки относительно текста в создаваемом ХТМЛ файле.
а я, почему-то, считал это само собой разумеющимся…
то же самое касается всего офисного пакета от МС
(18)
— порадовало.
Проще не куда, если учесть то что картинка непривязывается к ячейке и хорошо если у нее есть правильное имя.
(17) найдите если не трудно, я готов поспорить с Вами
за каждый лишний символ проигравший платит — с Вас размер суммы и вперед
(20)
В ХТМЛе может и не привязывается, а вот на листе очень даже привязывается. Свойства TopLeftCell — ячейка, в которой нходится верхний левый угол, BottomRightCell — правый нижний.
А вообще наверное кто к чему привык. Кто с VBA дружит — тому макросами удобнее, кто с ХТМЛ — соответственно из файла читать. Всяк кулик свое болото хвалит.
(0) таким же образом автоматом генерятся письма в аутлуке и складываются в исходящие )) идея хороша
И этим все сказано 😎
Да, еще, когда длину необходимого кода обсуждаем, то надо тоже поаккуратнее с терминами. 5 операторов (команд?), т.е. того, что отделяется друг от друга символом «;», может и не хватит, а вот 5 строк (т.е. того, что отделяется друг от друга нажатием клавиши»Ентер») с учетом того, что в каждую строку можно помещать несколько операторов 🙂 хватит вполне.
(24) Заблудились ? Ветку попутали 🙂
(20)
не понял, что считать лишним символом?
(24) речь идет о 5 операторах, этого достаточно чтобы сохранить картинку. 7 — сохранит более красиво.
(26) Условие задачи:
написать макрос — который «ведернет» ВСЕ доступные картинки из книги EXCEL и сохранит их на диске.
можно оценить по скорости, оригинальности, по правильности кода, универсальности…и.т.д.
я предложил — главное условие чтобы работало согласно условия. И у кого будет меньше
символов кода
Sub ВыдергиваемКартинки()
с…
по.
End Sub
тот и победил !
(24) Нет, не перепутал
(26) (27) Просто сохранить, как правильно и написано в статье — это 1 оператор Save c указанием формата «HTML с картинками».
А сравнивать надо не сохранить, а полную обработку загрузки из Экселя в 1С — т.е. найти первый товар в прайсе, найти его в номенклатуре в 1С, если нет — создать, эту номенклатуру, найти соответствующую ей картинку и привязать к номенклатуре, перейти к следующему товару.
(27) если не через сохранение в html то ок, иначе это одна строка:
ActiveWorkbook.ActiveSheet.SaveAs «C:Test.htm», xlHtml
и сохранить нужно например в jpeg
А вообще метод классный. Очень удобен когда файлы, из которых надо импортировать данные, несистематизированы. Только не надо ничего никуда не сохранять. Делаем в 1С на форме поле ХТМЛ документа, включаем режим редактирования. В экселе — выделить все, копировать, в 1С — вставить. Все. Текст — доступен, все картиночки аккуратно сложены в LocalSettingsTemp, пути к картинкам в файле есть, левый верхний угол картинок к ячейкам подвязан.
Копировать, разумеется, можно не только из офиса, но и вообще из любого источника, поддерживающего ХТМЛ в буфере обмена (из почты, с веб-страницы и т.п.)
Идея заключается в том, что картинку из книги можно ее родными методами скопировать в буфер и вставить в диаграмму Excel. А уже диаграмма имеет метод для сохранения ее в виде графического файла на диске.
Приведенная функция получает в качестве аргумента полный путь к книге Excel со встроенной картинкой (имя листа с картинкой должно быть «Лист1») и возвращает объект 1С — Картинка.
Показать
(27)
Интересно, как макросом можно сохранить картинку на диске? 😮
У объекта Картинка Excel нет метода, позволяющего сохранить картинку на диск, только скопировать в буфер обмена…
(30) 😀 nafa выиграл. Самый универсальный способ — простой КопиПаст, 0 строчек кода.
(0) Юра,http://infostart.ru/public/59436/#postform 😉
пост 153
(32)
Вот так, например:
Показать
P.S. Не мой пример, нагуглил
P.S.S Каталог C:TestPictures сначала создайте на диске
Согласен, что если картинка одна в документе, то проще всего Копи -> MS Paint (или) любой др. графический редактор, а оттуда сохраняй в любой желаемый формат, попутно отредактировав изображение при необходимости.
Tatitutu, спасибо, мне пригодилось 🙂
Добрый день! Спасибо за статью, отличный способ. Только вот.. Можно как-то сделать, чтобы изображениям присваивалось скажем имя из той же ячейки, где они стоят?
думаю пдф также
Показать