<?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='\
Уважаемый Автор! Раз уж тема Экселя настолько интригует… Почему не сделано последних полшага упрощения? Не надо добавлять командную панель, на которую еще нужно и «нажатие» вручную. Надо сделать — в 1С — собственную кнопку «Сохранить в Эксель», которая будет впихивать в соответствующий файл (только сохрненный из 1С) процедуру Auto_open, которая (процедура) будет делать всю черновую работу, которую ВЫ (или кто-то) ей поручите, и которая (кнопка) будет запускать Эксель с загрузкой сохраненного файла; в Конце Концов, обходить уровень безопасности МС Офиса Вы уже умеете; и вот — нажав на кнопку 1С, всего лишь после некоторого ожидания (и без новых нажатий) получите уже приведенный к нужному виду документ…
PS а ЧТО, 7.7 настолько много форматов забывает? Я никогда с ней не работал, всё 8.0-8.1-… Там вроде красиво сохраняется в формат Эксель…
(2)
не есть правильно, в каждой книге хранить макрос , а Auto_open вообще зло…
а если человеку нужно отправить по почте ?
я написал — это не есть ПРОГРАММА, это вариант — хороший вариант упрощения ручной работы.
😀 я давнно это умел, наверное с рождения )))
В данном случае представлен пример , который не снимает УРОВЕНЬ БЕЗОПАСНОСТИ МАКРОСОВ, а просто игнорирует штатными средствами офиса и если разобрать сам пример….кто знает тот поймет.
Каждый должен сам выбрать и сделать СВОЙ шаг…
так даже и не скачал файл, а судишь и судишь по шаблону — здесь немного другая ситуация….
в этой простой обработке показан пример , как во внешнем отчете
можно «скрытно» записать процедуры и функции на языке VBA и запускать на компьютере пользователя. Я видел много разработок в которых использует файл шаблона EXCEL c макросами.
— закрепление строк и столбцов (шапка документа при прокрутке остается на месте
— ориентация страницы
— повторяющиеся строки при печати
— отображение сетки и заголовков
— объединение (разъединение) объединенных ячеек
— меняет направление вертикального текста
— можно добавить колонтилы
— можно добавить нумерацию листов
— можно добавить фильтр с условиями
— можно сделать группировку строк
— можно добавить формулы
— сжать размер в РАЗЫ
— можно сделать практически все
в теме показан принцип решения рутинной задачи.
Неплохо 🙂
которая будет впихивать в соответствующий файл (только сохрненный из 1С) процедуру Auto_open
не есть правильно, в каждой книге хранить макрос , а Auto_open вообще зло…
а если человеку нужно отправить по почте ?
я написал — это не есть ПРОГРАММА, это вариант — хороший вариант упрощения ручной работы.
Вообще-то можно засунуть макрос в книгу, исполнить его и снести. я так делал!
4
Хорошая мысль
Очень правильное решение
(2)
и ещё раньше:
… а вот командную панель с кнопочками добавить и разумно, и правильно? Ну не понял, почему так проведена граница.
Auto_open — зло, согласен; но написал так, для примера; markers вот подытожил, как надо бы делать.
… а тут я чего-то не понял… не понял… Не скачал, ибо куда мне его девать? Ясно же написал я, что с семеркой не работаю. И что значит «судишь»? Я минус влепить не пытался. Не судил. А обсуждал. Моя мысль: описанный в статье метод требует двух нажатий на кнопки: раз в 1С и второй уже в Екселе. Его можно улучшить, убрав необходимость в Екселе что-то нажимать.
Или статью надо было назвать «Как из 1С правильно запихнуть новую командную панель в Ексель»? В этом отличие ситуации?
Ну ладно, нешаблонный ход делаю: ставлю плюс, пока могу, и файл скачаю; запустить не смогу, так хоть распотрошу и до текста модуля доберусь. С найлучшими пожеланиями.
(4)
можно , кто же спорит…но
— создавать в каждой книге макрос, а потом его удалять
(думаю в моем данном примере способ более элегантый)
— во вторых в твоем способе «На примере MS EXCEL если в файле есть макрос. То при открытии книги появится вопрос (открывать или не открывать) и предупреждение «типа макросы отключены». Все по честному…в настройках имеется 4 уровня безопасности (Очень высокая,Высокая,Средняя и Низкая)» — ты открываешь дыру в ОФИСЕ
так если уровень безопасности выше Низкой, то ТВОЙ макрос не запустится. Знаю обойти можно, но опять же для каждого документа….лишняя трата времени
— можешь выложить пример или это только слова ?
(7) Я тоже рад тебя снова слышать. Привет.
нет немного не так ты понял
— панель создается один раз (фишка как она создается — это намек)
— а потом ВСЕ печатные формы из 1С (имеющие параметр) — одним кликом форматируются, преобразовываются именно так , как нужно нам.
Вот сам проанализируй пример :
— пользователь сформировал отчет в 1С, сохранил его где то в EXCEl
открывает его (если таблица не стандартная) то
— для печати задает поля печати, область печати, какие строки нужно повторять на каждой странице, ориентация страницы, какой принтер, сколько копий, каких копий, колонтитулы — сколько времени у него зайдет (а если таких документов от 100 и больше)
И ты заходите Вы и нажимаете кнопочку (или настраиваете на автораспознование — да Вас на руках носить будут — правда не долго, быстро к хорошему привыкают.
Засиделся ты на 77. Не скучно ?
А если нет Exel не установили потому что дорогой, а шефу необходимо отправить именно в формате .xls, тогда как?
(10) да ладно…
Как то уже отвечал кому- то
8-ка — это работа, а 7 — это для души (хобби+EXCEL)
(11) Я же написал в шапке — что это пример разработки алгоритма.
Не нужно искать причины и отговорки, нужно думать.
Есть цель и задача должна быть выполнена.
и что он (ШЕФ) с этим файлом будет делать или у него дома пиратка ?
— а если нет 1С, как сформировать отчет для шефа
— а если нет компьютера
— а если нет шефа
— а….
искать и применять другие решения , автоматизировать процес
— Шеф, будет Еxcel — напишу программу которая из отчетов будет ляльку делать (не экономь)
(13) Я понимаю, что мы «любим» офис и стоим на том, что каждый должен его иметь в офисе и дома, чтобы этот пример алгоритма использовать, и желательно «1С версии 6.0 или счеты с костяшками» для души так сказать…
Если ты так разговариваешь со своим шефом, то я тебе не завидую…
Если что либо предлагать, хоть пример, связывая 1С со сторонним ПО нужно учитывать универсальность, кто-то ведь будет использовать данный пример.
Почему-бы не представить пример алгоритма, для того-же самого сохранения в xcel через ООо или другие бесплатные альтернативы офиса.
(14)
и не завидуй — зависть еще никого до добра не доводила
Я — ШЕФ
(и сам с собой только иногда разговариваю)
Смотри, что в шапке написано:
Сразу предупреждаю это не программа, а рассказ — как пошагово добиться нужного результата — одна из идей, а не панацея (с рабочим примером)
Илья — ты ТОЖЕ даже не скачал файл и выражаешь свое мнение субъективно, ты скачай и сам — найди и расскажи , каким образом — формируется КОМАНДАЯ ПАНЕЛЬ «ФОРМАТ_1С»
— только не говори , что с ключешками не работаешь , и EXCEL нет.
так представь — молодым у нас дорога и работы не початый край. Удачи.
(9) — ну смутил ты мой покой!
Докладываю, что домашнее задание выполнил, даже без семёрки.
Действительно, настройка безопасности Офиса лихо обойдена.
При старте обработки (ПриОткрытии, что ли — форму в целом я не вижу) просто записывается в одно нужное место файловой системы заранее заготовленный файл Екселя , да так, что Ексель при следующем своем запуске, без вопросов, открывает его вперед всех нужных и ненужных файлов; а в файле том есть как раз названная в статье Workbook_Open() функция, и она опять же без вопросов втыкает Екселю новую панель имени тебя; и в мой Ексель уже попала такая панель; только панель у меня не работает, ибо рабочий каталог Ексель не соответствует твоим предположениям, макросы не находятся.
Но! Уж извини, элегантного во всем твоем способе нашел только одно: как спрятан в обработке готовый файл Екселя; я б до такого не додумался. (Теперь запомню!). А рожать новую панель в бедном Екселе — ну, ИМХО, неэлегантно.
У моего «улучшения» же — есть один недостаток вельми большой: кнопку сохранения в Ексель надо делать нестандартную. И небось ко всем отчетам по отдельности привязывать. И на нем я ни капельки не настаиваю.
(16) Ну вот — совсем другое дело !!! Спасибо.
Но! Уж извини, элегантного во всем твоем способе нашел только одно
ты не поверишь, а это и есть сама суть этой обработки (мой маленький секретик)
а то что:
в этом нет никакого секрета, вопрос на запуск макроса задается офисом — если только он находится в локальной (открываемой) книге, если же он находится в личной книге МАКРОСОВ — да есть и такая) то все хорошо, но не из EXCEL ни из 1С — программно не запишешь макрос в личную книгу МАКРОСОВ — я в этом примере показал спобоб обхода.
там всего то делов поправить строчу , место сохранения и усе )))
Разберем ексель на элементарные частицы! 😀
Если директору надо… есть дополнительный стимул
ПЕРЕВОДИТЬ весь учет на 8-ку (с нового года особенно!)
хочет красоты — пусть раскошеливается
кстати до кучи и компы обновить надо… мол 8-ка на «г…» — не работает,
иииизззвииинитеееее……
а так конечно можно левой рукой правое ухо чесать
и изворачиваться кто как умеет,
но это проблемы с ТАКИМ боссом — не решает!
(есть такой личный опыт, к сожалению)
Дави на кошелек и точка!
или сработает или свои «хотения» требования к тебе лично поубавят…
очень удобно. Спасибо 🙂
Я посмотрел очень внимательно, давно уже не прикасался к 7.7 поэтому пришлось кое-что вспомнить. Молодец, ставлю +.
все это можно и нужно рассматривать как «финты» и обучаловку — что, несомненно, полезно. Больший вопрос вызывает необходимость перекидки чего-то в эксель… это востребовано в соновном там где «бизнес-процессы» не «устоялись» или пока что непонятно что и как — вот и крутят в экселе пытаясь вытащить «что и как».. как только становится ясно — нафиг эксель, все считаем/показываем в 1Ске… ПО ВОЗМОЖНОСТИ!
(22) в последнее время много «брожу» по стране… и могу точно сказать ответить тебе на фразу
да это так и правильлно, но
если сравнить по количеству использования EXCEL и 1С — у 1С шансов на успех намного меньше, во многих местах об 1С вообще не слышали и подозревают, что 1С есть и успешно существует, но за то EXCEL — это ЦАРЬ и БОГ — «основная офисная» программа.
(22) У меня есть клиенты, которые используют 1С 77 по минимуму. Все остальное ведется в excel, масса отчетов и расчетов для отчетности в другой стране. Периодически просят различные выгрузки-загрузки. Перетаскивать в 1С их учет нет надобности, просто не профинансируют. Выгружать я конечно умею, а вот сделать дальнейшие манипуляции с данными в екселе научится надо. Немало клиентов существуют на зарубежные гранты — у них тоже актуально. В банках, пенсионных фондах excel один из основных инструментов.
Хочу сказать, что эта тема вышла с ИТС диском за Декабрь 2009, и там есть все описание, то что здесь выложенно!!! 😮
(25) 😎 😮 ссылку(копипаст) скинь мне в личку если не трудно, ИТС давно уже не видел и не смотрел. Заинтриговал. Напиши в каком разделе
(только что выборочно посмотрел — нет там ничего похожего) Поправь меня если это не так.
А на 1С 8 как передать параметры форматирования при сохранении в .xlsx ? Как найти модуль отвечающий за сохранение ?
Файл PERSONAL.XLS в обработке не выводится. В отладчике видно, как процесс наступает на Объект.SaveAs(ИмяФайла):
Попытка
Объект.SaveAs(ИмяФайла);
Исключение
Сообщить(«Облом-с!»);
КонецПопытки;
и сообщает про облом.
Файла нет.
(28) aka AMIGO, спасибо
но это статье более 6 лет и MS EXCEL уже не тот ))) и права нужно другие для пользователя.
Все работает — тут показан принцип (так сказать идея)
Отправляйте начальникам в HTML — будет круто!