<?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) Ага 🙂
Процедура Приоткрытии()
ЦветТекущий=»(BRUSH[«+глПолучитьЦвет(255,255,153)+»])»;
Подходящие значения можно найти, например, здесьhttp://www.artlebedev.ru/tools/colors/
Перезалил.
Вставил в обработку функцию из Глобального модуля глПолучитьЦвет.
Сервис<<?>>.ВключитьРаскраскуТаблиц(1);
{KRESTTZ.ERT(94)}: Переменная не определена (Сервис)
(4) Сенкс за замечание. Она в Глобальнике прописана.
Ладно. Пропишу все 🙂
Нажимаем стрелочки.. наблюдаем:
http://s39.radikal.ru/i083/0908/57/eb60e614d6c0.jpg
Не комильфо.
… рАзумному — разУмное — сила …
… НЕразумному — разУмное — глупОсть …
… рАзумному — НЕразумное — игрА …
… Неразумному — НЕразумное — безСмысленно …
… однАко СИЛА …
… вОт …
И лучше красить в ПриНажатииЛевойКнопки, чем в ПриОтжатииЛевойКнопки
(6),(8) Не комильфо как раз ПриНажатииЛевойКнопки()
+(5) Обновил 🙂
+(9)
С запаздыванием на 1 клик я боролся. И спрашивал советов. Но… не получил.
Поэтому пришлось делать именно ПриОтжатииЛевойКнопки()
(9) Это еще почему ?
Приятнее сразу видеть результат, а не потом…
(11) А ты сам попробуй 🙂
Запаздывание на один клик.
И дай совет как побороть 😉
P.S. Это моя первая более-менее серьезная разработка с применением FormEx’а.
До этого я только строки подсвечивал в журналах и списках справочников.
P.P.S. С радостью научусь чему-то новому. 🙂
(12) В лёгкую:
Перем РасшФ;
Процедура ПослеОткрытия()
………
РасшФ=СоздатьОбъект(«РасширениеФормы»);
РасшФ.УстановитьФорму(Форма);
……
КонецПроцедуры
Процедура ПриНажатииЛевойКнопки(Сост,Х,У,ФСО)
РасшФ.УстановитьТекущуюЯчейку(«ТЗ», Х, У);
Отрисовка();
КонецПроцедуры
Процедура ПриДвиженииМыши(Сост,Х,У,ФСО)
Если Сост=1 Тогда
РасшФ.УстановитьТекущуюЯчейку(«ТЗ», Х, У);
Отрисовка();
КонецЕсли;
КонецПроцедуры
+ //Форма.Обновить() в Функция Отрисовка()
+ Нужно добавить аналогично в ПриНажатииПраавойКнопки +
в ПриДвиженииМыши добавить условие на Сост +
ПриНажатииКнопкиКлавиатуры «пасти» стрелочки..
(13),(14) Спасибо!
Перезалил. Но при ПриНажатииКнопкиКлавиатуры опаздывает.
А как там УстановитьТекущуюЯчейку?
Процедура ПриНажатииКнопкиКлавиатуры(КодКлавиши,Alt,Shift,Ctrl,Символ,ФСО)
Если (КодКлавиши>32) и (КодКлавиши<41) Тогда
Отрисовка();
КонецЕсли;
КонецПроцедуры
Ребята, вы что — тормоза? 😉
ЦветТекущий=»(BRUSH[«+глПолучитьЦвет(255,255,153)+»])»;
— пишите проще: ЦветТекущий=»(BRUSH[«0xFFFFCC»])»;
бяка.. тупое решение в лоб. Зачем перерисовывать крест для строк-колонок не отображаемых в данный момент на экране…?
(16) проще для кого? 🙂
(17) между прочим, некоторые удтверждали, что это вообще почти невозможно 🙂 Или будет связано с большими затратами.
И не крест перерисовывается, а перезаполняется значение колонки в ТЗ.
А что будет при свертке и максимазации окна?
И как отследить видимые строки/колонки?
(17) Это вам не табличное поле..
При скролинге/разворачивании, как ловить предлагаешь видимые строки/столбцы ?…
Вот в форме списка справочника,например, можно запросто отследить только видимые на экране элементы…
+(15) Можно попытаться вычислить реальную активную ячейку.
Но… для PageUp и PageDown это затруднительно(?).
(19) хорошо… нафига мне перезаполнять всю таблицу по координатам креста, если в данный момент я вижу около 0.1% этой таблицы?
(18) ТП или не ТП — это мну не волнует.. 😉 я показал автору на явную несуразность.. как он ее устранит и устранит ли вообще — меня вообщем-то не волнует… но на всякий случай я запомню.. 😉
автору — двойка! при листании курсором — подкраска запаздывает на 1 позицию!
а это что за бред? 😉
ТЗ.Фиксировать(0,1);…????
автор не знает про ТЗ.ВидимостьКолонки(«НомерСтроки»,1);…?????
(21) Еще не знаю как получить видимые строки.
А смысл? Сколько строк должно быть В ТЗ, что бы стало заметно торможение?
На 1’000’000 не тормозит.
(22) это описано в (15). Жду советов 😉
(23) Почему это бред?
При чем тут фиксация и видимость? Найди отличие 😉
ТЗ.ВидимостьКолонки(«1»,0);
ТЗ.Фиксировать(0,1);
P.S. Я и не утверждаю, что все знаю 🙂
(24) то что это описано в 15 — мну это не волнует.. крест должен выделять активную ячейку. по факту: крест не выделяет активную ячейку — итого: обработка неработоспособна. Что у нас полагается за выкладывание неработоспособных обработок…? 😉
.
ТЗ.ВидимостьКолонки(«1»,0); — прячешь колонку подкраски
ТЗ.Фиксировать(0,1); — фиксируешь колонку с номерами строк, а выше — ее определяешь и заполняешь… — нафига?
.
> P.S. Я и не утверждаю, что все знаю 🙂
— а я это констатирую! 😉
(24) > Сколько строк должно быть В ТЗ, что бы стал…
— вот такие и пишут уппырища всякие… 😉 обрисуйте тогда строго область применимости 😉
ПриНажатииКнопкиКлавиатуры() у тебя обеспечивает отрисовку. Отрисовка у тебя осуществляется ПО СТАРЫМ КООРДИНАТАМ!! всего-то надо учесть клавиша какого движения нажата — к началу или концу ТЗ.
..
попутный вопрос: почему бы отрисовку не бросить на форму как функцию? тогда отрисовка будет выполняться по новым координатам…
(24) «(21) Еще не знаю как получить видимые строки.»
старым дедовским способом.
Посмотри сколько отображается на самом большом разрешение экрана
в ширину видно 86 по горизонтали 122 (просто к примеру)
и не нужно все 10000 прорисовывать
(тупо рисуй 150 на 150 и то быстрее будет)
Формекс позволяет определять разрешение экрана (хотя здесь оно не к чему)
(29) +1!
(28) проблема только в одном — в отлове изменения текущей ячйки — но это задача известная и решаемая…
(26) > фиксируешь колонку с номерами строк, а выше — ее определяешь и заполняешь… — нафига?
Для красоты 🙂 И не только. Нафик нужен крест, если непонятно к какому значению строки он относится?
(27) >обрисуйте тогда строго область применимости 😉
Да где угодно 🙂 см (0)
«в больших таблицах с большим количеством строк и мелких колонок»
(28) > почему бы отрисовку не бросить на форму как функцию?
Смешно… Если строка не поменялась, то функция не срабатывает. 🙂
Это даже я знаю!
(29) А вот за это спасибо!
«Я не волшебник. Я только учусь»
кстати, куда высылать исправленный рабочий вариант обработки?
http://slil.ru/27899500
забрать его можно отсюда:
. и на 20 тыс строк — притормаживание является уже существенным
> Нафик нужен крест,
// блин, чтобы отобразить номера строк достаточно
ТЗ.ВидимостьКолонки(«НомерСтроки»,1) — и все!
а то отсортируют твою ТЗ — я посмотрю на красивые номера строк
> Смешно… Если строка не поменялась, то функция не срабатывает. 🙂
Это даже я знаю!
— ну не знаю… у меня вроде все отрабатывает… смотри выложенную обработку…
про 1кк строк я поторопился….
спакуха.. ща работаю над мгновенным заполнением 1кк строк…
(33) А если там не номер? А реальные значения? Это только пример….
ТЗ.НоваяСтрока();
ТЗ.Строка=»Строка «+ИндСтрок;
(32) сенкс!!! Уже проверил, кажется работает.
Но сейчас нет времени разбираться. Код посмотрю позже.
Научусь чему-то новому 🙂
(32) ЧЕловек спасибо что выложил це штуку.
А надо только Отрисовку() отключать при формирование НОВОЙ ТЗ
а то такая шняга получается- тормоза и визуально не очень красиво.
Лучше наверное будет создать ТЗВр — виртуальную а потом махом выгрузить в ТЗ а не заполнять ее сразу на форме с отрисовкой
При формировании новойТЗ — это частность… для ускорения — на время формирования ТЗ — ее видимость д.б.=0 — ускоряет заполнение ТЗ на форме на порядки…
про всякие неряшливости программирования (что настояшему мастеру дзен недопустимо) — как-то срабатывание позиционирование креста при тыкании мышкой в области/атрибты за пределами ТЗ — я молчу…
.
в итоге, конечно, ндо бы минус влепить…
а если автору провести опыт по использованию вместо цикла ТЗ.УстановитьЗначение быстрый метод ТЗ.Заполнить…
последний подправленный вариант:http://slil.ru/27899647
уфф… замаялся…
Отвечаю автору-семерочнику из темы «Активный крест в табличном документе».
Сравнение выделения «крестом» в 8-ке и в 7-ке было бы корректно , если бы в текущей теме использовался объект «Таблица» , аналог табличного документа в 8-ке.
По утверждению vip’a :
Компонента «TableDoc расширяет возможности таблицы в 7.7 (в 8.х аналог видимо табличный документ?) до немысленных высот.»
Вот и хотелось посмотреть.. Не удалось.
Формексом никогда не пользовался.
С приветом, 8-ник.
Тем более там речь шла о форме выделенной фигуры как функции от координат активной ячейки.
(44) Опередил немного. Я тоже не понял автора, почему он выбрал для «креста» ТЗ на форме.
Как правтльно говоришь, есть TableDoc и есть Yoksel. Первый проект — как бы надстройка над мокселем 1С, второй — новый табличный документ. В обоих есть событие «ПриАктивизацииЯчейки/АктивизацияЯчейки». Имея эти события, нарисовать что-либо в соседних (и не только) ячейках, думаю, не составит труда.
(46)
«Имея эти события, нарисовать что-либо в соседних (и не только) ячейках, думаю, не составит труда.»
Казалось бы, бесспорно.
Но в 8-ке это не так и реализация выделения произвольной области больше походит на некий программный «выверт»(ухищрение) , чем на обычный приём. Поэтому нигде , насколько мне известно, такое выделение ранее не применялось.
to CheBurator
Большое спасибо!
Надо понимать, что это не готовая программа, а алгоритм, пример программирования. С большими недостатками, это я понимаю.
Но… я пытаюсь. Что-то делаю. А сколько асов даже не пробовали сделать нечто подобное. Эх.. ваши бы умения для этого, а не мои скромные познания.
И я выложил эту разработку не для того что бы себя показать, а что бы на других посмотреть. Научиться чему-то новому, полезному.
Не только для себя, но и для других.
(48) то есть, так сказать, на живца… я с тобой — в Африку не поеду! 😉
(49) Ну что ты? 🙂 Я тебе очень благодарен!
Вот скажи по совести… Интересная вещь получилась? Пригодится в хозяйстве?
И, кстати, я обновил версию…
(49) не пригодится… потому что огромные ТЗ для визуального наблюдения нужны ОЧЕНЬ редко.
.
при обновлении — описание сохранил? 😉
Не добавлено условие везде, что активный элемент — ТЗ и именно нужная..
Не добавлено условие в ПриДвиженииМыши, что зажата правая клавиша..
Ну и не работают стрелочки как надо..
Дорабатывай..
🙂
(51) А почему огромные? А 300 на 50 это как… маленькая? 🙂
(52) Вот теперь я смогу и сам 🙂 Опыта прибавилось.
(54) упс… хотел скриншот обновить, а что-то глючит.
Нашел новый глюк 🙂
После нажатия Tab прорисовка вообще ни разу больше не срабатывает.
Обновил
(52) Про несколько ТЗ на форме я уже думал…
Но на практике. Если их несколько, значит они небольшие. И им «крест» особо не нужен. Но все равно сделаю. Чуть позже.
(55) опять решить за вас эту задачу?
(57)Взялся за гуж — полезай в кузов.
(57) Я сам 🙂
Обработка уже сильно обновилась, но пока не выкладывал.
Есть интересный вариант поиграться со шрифтами. Для определенных целей 😉
Всё пучком. Плюс обоим. А я на море 🙂
(60) Спасибо!
«Ты где? А я на море» 🙂 (с) реклама МТС-Украина
(59) мдя.. дорвался человек до Формекса… — ты в нем лучше на другие возможности посмотри — свежий взгляд он всегода неожиданные идеи выдает…
а меня и не вспомнил (((
Вопрос : правильно ли я понял , что в текущей обработке «крест» просто закрашивается другим цветом ?
И тогда , если две ячейки имеют до выделения разный цвет , то после выделения будут иметь одинаковый (желтый).
Если это так , то
осмелюсь заметить , что выделение ячеек — это не закрашивание другим цветом. Это именно — выделение.
Т.е. если до выделения две ячейки имели разный цвет , то после выделения
они различаются по интенсивности выделения (яркости).
(64) Он же написал — что УЧИТСЯ ! Эта обработка НЕ ИМЕЕТ ПРАКТИЧЕСКОГО применения.
(64) > Т.е. если до выделения две ячейки имели разный цвет , то после выделения они различаются по интенсивности выделения (яркости).
— это не столь существенно, гораздо важнее чтобы при уходе креста с ячеек — они были зарисованы так, как до попадания креста на эти ячейки…
(66)
1.Существенно или нет .. Так всё-таки выделяется или закрашивается ?
2. «важнее чтобы при уходе креста с ячеек — они были зарисованы так, как до попадания креста на эти ячейки…»
Если это условие не выполняется , тогда о чем разговор .. ?
(62) Я еще не дорвался… я только начинаю 😉
(63) Спасибо! 🙂
(64) Меняется фон ячейки таблицы. Т.е. это выделение чисто визуальное.
автор, а в (66) — — это не столь существенно, гораздо важнее чтобы при уходе креста с ячеек — они были зарисованы так, как до попадания креста на эти ячейки…
— ????
(69) Да. Цвет фона у них такой же.
Это и по коду понятно.
ЦветНеТекущий=»BRUSH[«+глПолучитьЦвет(255,255,255)+»]»;
(65) А какое практическое применение может быть у АЛГОРИТМА? 🙂
Вот когда это кто-то вставит в свою обработку, тогда и появится применение.
(70) неееет! в раскраске таблицы ты не анализируешь какими цветами были нарисованы ячейки на том месте где прошелся крест и после ухода креста — восстанавливаются общие значенияЮ а не те которые были до этого…
или я не прав…
(72) после первого прохода все закрашены этим цветом.
По крайней мере, первые Мин(ТЗ.КоличествоСтрок(),301) 🙂
(72) Или есть предложение сделать ТЗ многоцветной? 🙂
Но у ячейки не может быть более одного цвета фона? Или я не прав… 😉
И если по какому-то условию у этой ячейки должен быть определенный цвет, то какая разница, какой он был до этого?
вот смотри, допустим есть большая ТЗ на форме, основной фон как обычно — белый. И есть допустим область ячеек, которая закрашена в зеленый цвет — ну типа какая-то зона. по ТЗ бегает желтый крест, после того как он пробежится и уйдет из зеленой зоны — какой фон будет у ячеек «зеленой зоны»…?
(75) Если эта зона была закрашена в зеленый цвет, то, наверно, по какому-то условию…. по результатам выполнения некой функции.
И тогда при отрисовке «креста», результат этой функции должен повлиять и на их раскраску. Но… это выходит за рамки данной обработки.
Хотя, все возможно. 🙂
Версия номер 3 выложена! ОГРОМНОЕ спасибо АЛьФу!
(76) произвольная закраска могла быть сделана в момент формирования таблицы, так что конечно желательно запоминать и восстанавливать — это было бы ваще… 😉
.
а что нового в 3 версии?
Лучше бы такой крест в мокселе отрисовывался… 😉
(76) в ПриНажатииЛевойКнопки явный вызов Отрисовка() — лишнее…
(77) сделаю в 4-ой версии 🙂
Уже придумал как.
Нового? Пиктограммки (работа со шрифтом, как я и намекал в (59) 🙂
(79) в исправленой РАБОЧЕЙ версии, которую я ему отослал — там это я заремил…
(78) Че… ты хочешь что б я и туда дорвался? (см 62) 🙂
Но мысль такая была….
(79) Возможно, и так. Код менялся настолько быстро, что пока не отпимизирован. Спасибо.
(80) по (77) — ну если сможешь — то ок.. потому как вообщем-то надо 1. определить закрашенную область и восстановить — а вот куда при восстановлении писать нужную раскраску…. 😉
.
кстати, раз уж формекс — а вы тестировали обработку на ТЗ, с расположением строки в несколько «строк»…? а, батенька?
(81) Там не отрабатывался Tab, F3 и Enter(?). Поэтому.. не совсем она была и рабочая… 🙂
Но! Сильно продвинула меня в дальнейшем.
(83) а зачем ее писать куда-то? Ее можно перевычислить по функции, по кторой она изначально была закрашена.
Неа, не тестировал…. Да я и с такими-то строками не работал 🙁
(84) ну, товагищи! жевать уж сами как нибудь… тем более, что она хотя бы заявленную функцию выполняла — крест двигала… и крест по таблице не елозила когда мышью за пределами ТЗ тыкаешь.. так что работайте!
http://www.cm.ex.by/uploads/posts/1176195919_work_niggers.jpg
.
(86) Спасибо за пожелание! 🙂
Я и работаю… дорабатываю…
> Ее можно перевычислить по функции
— угумс.. как же… придется тянуть пару тысяч строк допустим для обеспечения такого функционала — негламурно!!! ты вот «вычисли» ближайший браш по вертикали/горизонтали и считай оттуда отрисовку…
Вообще, решение с постоянным обновлением формы не совсем удачное- грузит проц не по-детски..
(88) А если условия сложные? Область не одна?
Типа, закрасить ячейки, у которых сумма строки и столбца делится ммм…… на 7 🙂
(89) в самой первой версии функция Отрисовка срабатывала меньше, чем за 0,004 сек. Где-то в хистори аьки есть замер производительности.
(90) открой диспетчер задач и поводи мышой туда сюда… удивись.
(90) да пофиг какой сложности условие!! я имею разукрашенную ТЗ — и не знаю по каким условиям. зато знаю координаты строки-столбца (набора) где будет крест — вот и считаю оттуда раскраску…
(91) Да, удивился…
(81) После нажатия не клавиш перемещений курсора, отрисовка блокируется… совсем…
(93) по (81) Все, снайпер прицелился! Пригибайся!
(94) Этоя уже исправил 🙂
И обновил ert
Новая версия!
Кажется, мне удалось побороть несколько старых глюков и существенно ускорить быстродействие.
Еще одна новая версия — 3B 🙂
Обновлено описание программы, добавлена историй версий.
А нафик там цвет выделения ?
И еще левая кнопка.. ?
(98) > А нафик там цвет выделения ?
Это подготовка к 4 версии 🙂
Ой, кнопка и правда «левая». Это я проверял разные варианты генерации случайных чисел.
перезалил….