<?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='\
Обработка великолепно справляется со своими функциями.
Желательно к полю «XLS»добавить функцию выбор файла.
Молодца!
И все-таки есть подозрение, что можно быстрее 🙂
круто!!! теперь есть обработка перегона из екселя в mxl
+ есть перегон из mxl в HTML
.. мяка…. можно теперь средставами 1С через сервак перегонять ексель в красивые письма и не гемороится.. респект и уважуха!!!! 🙂
Спасибо за поддержку!
Ай, да молодец!!!
Из XLS в mxl перегоняется хорошо, полученный файл в 1С-Предприятии выглядит также, как и в Excel.
Но есть одно НО: если полученный файл попробовать вставить как макет табличного документа в Конфигураторе, форматирование останется, но все поля будут пустыми. Например, полученный файл открываем в Конфигураторе, выделяем все (нажимаю пустую ячейку на пересечении 1 строки и 1 столбца), копируем и вставляем в макет.
Конечно, решение есть: перед вставкой выделяем все ячейки (ВАЖНО: не строки/столбцы, не всю таблицу, а именно ячейки), и в свойствах убираем галочку «Содержит значение», после этого можно копировать, как написано выше, и все будет в порядке.
Можно ли что-то с этим сделать на этапе конвертации в данной обработке? или это все-таки особенность работы Конфигуратора?
ЗЫ есть ли еще аналогичные хорошие конверторы XLS->MXL для 8.1/8.2 ?
(7) как вариант, йокселем в mxl7.7, а потом уже 1С в mxl8. В этом плане йоксель,конечно, вне конкуренций — группировки он без труда делает и т.д.
PS ….но надо проверить, давно я ентого не делал…
Качну — надо испытать, а то всё руки не дойдут никак переделать обработку для 7.7 под 8.х 🙂
ЗЫ есть ли еще аналогичные хорошие конверторы XLS->MXL для 8.1/8.2 ?
Насколько я знаю, моя единственная. Потому и сделал.
хор
Отлично работает. Претензий нет.
спасибо за обработку))
ценная вещь=)
Отличная уникальная вещь! Спасибо автору! 🙂
огромное спасибо))
спасибо!
Очень нужная и полезная вещь!
С ней печатные формы создавать на раз-два получается!
Спасибо автору большое!
А установленный офис ей требуется?
Нескромный вопрос: а что-то подобное, для OpenOffice/LibreOffice не планируется?
(21) alexm73, я не планирую
(20) Ponommax, требуется
А я всегда лист копировал с Excel в Работа с Файлами и не изобретал велосипед
А нельзя было одним архивом, сначала скачалось под 8.1, пришлось зайти снова скачать под 8.2
(24) Veduin, в правилах публикации не рекомендуется обработки в архив сжимать
Тестирование немного затянулось… Сейчас много различных конверторов XLS->MXL здесь представлено.
В отношение данного образца, скажу что справилась с задачей неплохо, не получилось точной копии екселя, немного пришлось все таки дорисовывать, но все же хорошо!
(0) Взял файл EXCEL с группировками строк в 2 уровня.(кстати, сохраненный средствами 1С из табличного документа).
Вот что имеем в результате конвертирования:
1. Группировки не создаются — все идет плоским списком. Это для меня пока некритично.
2. Строки в последней группировке не создаются вообще, если группировка свернута до 1-го уровня. Создается только одна строка первого уровня. Развернул группировку в файле EXCEL, сохранил файл, запустил обработку — все ОК. Вот это уже потенциальная потеря данных :).
ЗЫ. Попробовал конвертировать бухгалтерский баланс — в целом неплохо. Но не всегда получается объединение ячеек.
Все равно ПЛЮС.
Респект, спасибо пригодилась, только один момент в случае если количество строк или колонок > 1000 появляется неразрывный пробел и выходит ошибка, нужно подправить строки 305 и 340 на
Выручала не раз !
Добрый день! Вопрос к автору за сколько продадите эту обработку очень надо!
вопрос снимаем. с другого источника скачал.
Что-нибудь полагается 100-тому проголосовавшему клиенту???
🙂
oleglega, обработка бесплатна! Эту обработку я изначально делал даром и для всех.
yuraos, полагается моя благодарность! Мне очень приятно видеть, что нечто, что я сделал своими руками, приносит реальную пользу. Спасибо всем за поддержку!
а инфостарт предлагает скачать за деньги. вот …
А теперь всё ещё просит денег?
а сейчас без проблем!) Спасибо большущее! )
Пожалуйста, надеюсь, пригодится!
Жаль, что инфостарт за скачивание требует денег за скачивание.. (
Пришлось качать с другого источника.
Автору респект за обработку!
комментарии респектуют, а у меня обработка файл XLS из одного несложного листа никак переварить не может. Бегунок ползет слева направо минут 20 и потом наглухо зависает. Было у кого-нибудь такое?
(40) Alex353, не пришлёте мне файл, который не переваривается?
(41) выслал. Все-таки файл за полчаса сделался в лучшем виде. Непонятно только что так долго, может процесс так тормозят объединения ячеек? По отладчику понять на чем виснет не удалось.
Добрый день! Обработка замечательная, а от себя могу поделиться маленьким полезным, на мой взгляд, дополнением. В процедуре КнопкаВыполнитьНажатие() модуля формы необходимо «обрамить» блок записи значения в ячейку оператором условия следующего вида:
Показать
Это приведет к тому, что в созданном табличном документе пустые ячейки не будут перекрывать текст из соседних ячеек, который «вылез» на эти пустые ячейки.
Спасибо!
(43) adc3, спасибо, применил Ваши оптимизации.
Спасибо за обработку, сэкономил время. До этого писали про долгое время выполнения, у меня тоже при конвертации зависла наглухо. Как оказалось на заднем плане открылось модальное окно экселя с вопросом сохранить изменения в файле или нет. Вот это окошко и держит процесс на финальной стадии. Чтобы его увидеть нужно свернуть текущее окно с 1С.
Спасибо! Пожалуй лучший вариант по качеству обработки из тех что я нашел на инфостарте.
Добрый день! В вашей обработке 8.2 исключите, пожалуйста, признак того, что ячейка содержит значение, а то я копирую макет после конвертации обработки 8.2, вставляю его в свою обработку и переоткрываю его, вижу что весь текст пропал, оказывается что это связано со свойством «Содержит значение».
(47) ZhokhovM, думаю это связано с нововведением 1С:Предприятие 8.3 (8.3.5.1068).
(48) ZhokhovM, сам спросил себе и ответил?
Спасибо за обработку.
Но обработка не переносит примечания к ячейкам.
Решил проблему добавлением следующего кода:
Решение не очень красивое, но работает.
(49) Xershi, решил проблему закомментированием следующего кода:
//ОбластьТаб.СодержитЗначение = Истина;
//ОбластьТаб.Значение = СокрЛП(Источник.Cells.Value);
ОбластьТаб.Текст = СокрЛП(Источник.Cells.Value);
и
//Ячейка.СодержитЗначение = Истина;
//Ячейка.Значение = СокрЛП(Источник.Value);
Ячейка.Текст = СокрЛП(Источник.Cells.Value);
Текст при копировании больше не пропадает. Кому надо, заменяйте!
Для 8.2 работает без проблем. Облегчила мне работу. Спасибо автору.
На счет готового решения, есть йоксель и решение на нем — отдельная утилита (exe-ник)
yoksel-stand-alone
ЗЫ: а так да, на снеговике других поделок не видел, на клюшках реализаций, как минимум 4 штуки есть.
Отличная штука. Спасибо!
выгрузил из бухгалтерии 3.0 справочник контрагентов в xml. пробую его прочитать данной обработкой в упп на платформе 8.2. выдаёт ошибку «не удалось создать Com объект». печалька.
Совершенно врет по цветам и ориентации текста. Подходит только для черно-белых документов с несложной структурой.
(13) с огромным запозданием, пожалуйста!
а
Респект Автору!