<?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) за три строчки 🙂
Кстати, а почему Вы не спросили у andreyho за что он поставил плюс? 😉
(4) плюсики это пазитиф, зачем спрашивать про позитиф =) а вот минусики … насчет трех строчек, это была не похвальба, там действительно было мало кода, который я и выложил в первоначальной версии этого текста. А после уже написал комментарий про три строчки. Далее было решено выложить более полную версию обработки. поэтому и код из текста был перенес в обработку. Так что не вижу причины для минуса. Просьба (1) была выполнена. Ну хотя ладно, минус так минус. Тоже наука =)
(4) кстати логичнее было бы заминусовать комментарий, а не текст и обработку. Имхо канечно же.
(5) Вот-вот… Написали бы статью по работе с Excel’ем средствами 1С, я бы поставил бы БОЛЬШОЙ жирный плюс 😉
А так…. три строчки кода в описании разве тянут на плюс? Скажите честно, положа рука на сердце. Или, лучше, на желто-красную книжечку 😀
А вот на минус тянут. За захламление ресурса.
(6) Я минусовал не коммантерий, а именно обработку.
Даже не саму обработку, а ее отсутствие.
(7) Сначала это была статья. И в ней, после комментария, я выложил код обработки по выводу цвета. Чуть позже, когда я закончил писать обработку по выводу в Ексель, кроме цвета были использованы еще другие функции ОЛЕ екселя и появилось желание поделиться найденными приемами, но мне подумалось, что выкладывать весь код обработки слишком громоздко, посему статья превратилась в обработку. Которую я и выложил. Если бы я мог удалять комментарий, я бы свой удалил, чтобы не вводить людей в заблуждение.
Вообще первоначальный замысел был сохранить соответствие цветов и номеров. Для себя и других. Подобного ресурса на инфостаре я не нашел, поэтому прошу пояснить что именно Вы считаете «захламлением»?
(8) > Сначала это была статья
😀
Под статьей я понимал именно статью, а не 5-6 фраз
Эх.. жалко нельзя еще один минус поставить…. 😉
57
ЛистЭксель.Cells(Сч,1).Interior.ColorIndex=Сч;
{D:DOWNLOADS1СRABOTA_S_EXCEL.ERT(406)}: Microsoft Office Excel: Нельзя установить свойство ColorIndex класса Interior
(11) странно, если нельзя, то почему работает?
+(11)
(12) Не работает 🙂
(14) и не будет. в палитре Екселя всего 56 цветов. об этом четко написано в справке к Екселю, даже все цвета нарисованы (в Екселе открываем Визуал — там справка — поиск «ColorIndex Property»)
(15) наверно, автор об этом не знает.
В коде написано:
15+ причем у автора на скриншоте тоже всего 56 цветов, а в коде счетчик идет до 255…
(17) У меня уже была мысль, что автор — это совсем не автор 😉
(18) Ты слишком строг. Автор захотел поделиться «открытием», которое неважно оформил, за что получил от тебя минус. А ты начинаешь «наезжать»…
(19) Ладненько, больше не буду 🙂
Но минус я поставил заслуженно, хоть и заблаговременно.
Интуиция…
хех
Объем = глФРМ<<?>>(Товар.РеквОбъем);
{C:TEMPРАБОТА_С_EXCEL.ERT(336)}: Функция не обнаружена (глФРМ)
Продажи = глФРМ<<?>>(тзСводнаяТаблицаПоТовару.Продажи);
{C:TEMPРАБОТА_С_EXCEL.ERT(337)}: Функция не обнаружена (глФРМ)
Остаток = глФРМ<<?>>(тзСводнаяТаблицаПоТовару.Остаток);
{C:TEMPРАБОТА_С_EXCEL.ERT(338)}: Функция не обнаружена (глФРМ)
ОстатокВДнях = глФРМ<<?>>(тзСводнаяТаблицаПоТовару.ОстатокВДнях);
{C:TEMPРАБОТА_С_EXCEL.ERT(339)}: Функция не обнаружена (глФРМ)
(22) Автор, можно было бы часть функций из Глобальника в обработку добавить.
Там все равно говнокода много и так 🙂
Или хотя бы указывайте, что это работает в таких-то и таких-то конфигурациях.
Объем = глФРМ<<?>>(Товар.РеквОбъем);
{C:! NEW2009-10-14РАБОТА_С_EXCEL.ERT(336)}: Функция не обнаружена (глФРМ)
Зачем использовать глобальные функции в универсальной обработке?
Есть возможность переопределить любой индекс своим цветом, если интересно могу поделится
(25) да, интересно!
Это делаем в начале работы с экселем
Цвета = Excel.ActiveWorkbook.Colors.Выгрузить(); // Получим все индексы цвета экселя
Цвета[51] = «14725528»; // Переопределим 51-й индекс цвета своим
МассивДляExcel = Новый COMSafeArray(Цвета,»VT_I4″); // Конвертируем в массив используемый в COM, в ковычках указан тип значений
Excel.ActiveWorkbook.Colors = МассивДляExcel; // Скормим экселю его же масив с переопределёнными элементами
А когда нам надо использовать переопределённый нами выше индекс пишем:
АктивнаяКнига.Cells(10, 5).Interior.Color = Цвета[51]; // Красим
А терь ответ на возможный вопрос «А почему не переопределённый индекс присваиваешь, а цвет?» Отвечаю, опытным путём установлено что если ты переопределяешь индекс и с таким цветом другой индекс уже есть, он не переопределяется… а когда мы задаём ячейкам именно цвет а не индекс, он сам автоматически находит и подставляет нужный индекс.
http://infostart.ru/public/58687/
А теперь, как получить цифру цвета «14725528» ? Я не нашёл как сконвертировать из 1С в эксель цвет, поэтому пришлось написать прожку:
Так же могу выложить полностью обработку свою которая не привязана к базе (заполняет тестовыми данными) где применена и раскраска и закачка картинок и автоматическое сжатие картинок путём добавление макроса, выполнение и удаление макроса (чтоб у клиентов не вопило). Если есть интерес, то скажите, выложу.
Хех. А мне кажется, что проще в 1С-ке заполнить табличную часть отчета(документа), затем, воспользовавшись атрибутами и методами области таблицы, раскрасить ее, а потом уж через меню «файл-сохранить как» сохранить как файл в формате еxcel. И будет красочно и красиво. 😀
(29) Несогласен! Если не смотреть на производительность то да, но вот если смотреть на неё и ещё если тебе надо сделать некоторые операции что через стандартные средства 1С никак не сделать, то очень даже лучше сразу формировать в эксель. Например у нас прайс формируется немного нестандартный (переделан стандартный), Например в нём есть поле «Код» с ведущими нулями и есть ссылка, если просто прогнать через стандартную в 1С, то у кода не будет нулей, и не будет ссылки, наш гореписатель (работал год назад) сделал так: Формировался прайс, сохранялся, открывался через ком, доделывалось нужное (ссылки, тип поля код) что не супер в плане производительности да и вообще всё было сделано очень криво, потому было решено написать формирование прайс-листа с нуля и сразу выгрузку в Excel, добавив поддержку таких фишек как добавление картинок. Конечно мне пришлось попарится и перерыть весь инет через разные поисковики, чтобы подготовить рыбу прайса которую наш 1С прогер наполнит данными. Кстати эту рыбу могу дать! Там перенос данных осуществляется через массив (а не поячеечно).
См. Приложение! В той рыбе нет привязке к ИБ, только подправьте пути.
markers спасибо =)
Цвета, к слову сказать, не совпадают. Пришлось «методом тыка» подбирать, но это в принципе не страшно))