<?php // Полная загрузка сервисных книжек, создан 2025-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 🙂
А в чем, все-таки, суть полученного ускорения? Какая версия SQL Server’а?
Нечто подобное было и у меня, но решил с помощью 1С++. Методом ReconnectNative().
Честно говоря, кроме рекламы фирмы 1С и самовосхваления в этой статье я ничего полезного не заметил.
А эта фраза меня убила просто 🙂
«Прикинув по своему опыту, предупредил клиента, что в режиме проведения на точку актуальности коим является восстановление последовательности или прочие аналогичные проведения с восстановлением последовательности ускорения большого не бывает — обычно в 1.5 раза».
На русский ее можно перевести? А то смысл как-то ускользает.
P.S. Кстати, я в десятки раз ускорил. Все зависит от документов, у меня были по несколько тысяч строк.
— СКЛ 2005
— рыконнектнативе здесь нафик не нужен ибо 2005. да и средства оптимизации, которые я применяю решают ее и без этого на 2000 сервере.
— не заметил полезного? читать надо не по диагонали и включать серое вещество.
— ре
(7)
—————————————————————
Это что угодно, но не «Записки автоматизатора». 🙂
Ты не указал никаких данных. Ни об версию SQL, ни о размере документов, ни о методе решения
—————————————————————
> по-моему богатому опыту, который заключается в переделки нескольких десятков конфигураций ТиС на платформе SQL при среднем размере документа в 10 строк
При чем тут ТИС это или не ТИС? Все зависит от профиля организации.
Продавцы мебели до десятка строк в накладую забивают, аптечные фирмы тысячи… или больше 🙂
—————————————————————
> — не заметил полезного? читать надо не по диагонали и включать серое вещество.
Не хами.
—————————————————————
> — рекламы фирмы 1С здесь нет
А ссылочки на сайт 1С, где предлагается КУПИТЬ?
—————————————————————
> — самовосхваления тоже нет. если кажется — крестится надо
А как же про твой «богатый» опыт? 🙂
—————————————————————
> — не я начал мерятся членами, но продолжу
Да нет, парниша, ты и начал 🙂
—————————————————————
Ты в 1С когда последний работал? Посмотрел твой профиль на http://www.free-lance.ru. Мда… Какое отношение твоя бурная деятельность имеет к 1С? 🙂
А мне понравилось, пиши еще, Паша.
(11) > я 1С занимался когда ты еще под стол пешком ходил, и до сих пор занимаюсь.
Посмотрел, я тоже с 7.5 начал заниматься, а многие тут присутствующие еще с 6-ки и раньше… Эт не повод так волноваться…
Ребята, извините, но что-то конец года на вас раздражающе действует — все чаще переходите на личности: Не нравится минусуйте, игнорируйте. Скоро стрелку забивать будете и по мордасам 🙂
Чего уж так накинулись?
Например, «Каково же было мое удивление, когда выяснилось, что примерно 60% времени выполнения кода уходило на получение данных констант и периодических реквизитов.» — совсем не безполезная информация
Паша, здесь так не принято общаться.
(33) Доржи, учту. Но я вроде вполне корректно отвечал на оскорбления. Да и на вопросы по существу ответил. Кто не понял — сам виноват :). Если подчищать будешь, подчищай все до конца.
Самое интересное, что и в 8 тоже они этим грешат (константы в цикле читать).. сам правил некоторые документы.
Доржи, верни, пожалуйста, мой коммент, где я извинился за то, что сказал, что это реклама фирмы 1С. И уточнил, что это реклама ToySQL.
Что в этом такого крамольного было? 🙂
(37) Я конечно понимаю, что ты уже устал объяснять про эффективность ToySQL, но разве это не повод сделать развернутый ответ, думаю никто не сомневается, что это было одним из мотивов написания этой статьи.
off-top. Глючок, однако. Захожу глянуть в комменты, вижу ТОЛЬКО окно для ввода коммента №17 и больше ничего. Ни «назад», ни «вперед», ни других комментариев.
(40) Под горячую руку попалась. Да, реклама ToySQL и что? Еще раз говорю, миссия у нас такая.
+(42) Во, ввел 17, ктр. на самом деле оказался 42 — и все появилось
Да где же в моих постах оскорбления-то?
(41) мотив-то как раз другой был 🙂 и речь совсем не про эффективность ToySQL, а про то, что можно и нужно оптимизировать и типовыми методами. после оптимизации прямыми запросами это более очевидно, так как до оптимизации этого не было видно. а ссылки просто пришлись к месту. у кого-то это вызвало странную реакцию.
(43) Да ничего такого. Просто я удивился, что коммент зарезали 🙂
(46) О методах оптимизации здесь только одно — «заменили обращение к константами и периодическим реквизитам на обращение к переменным в глобальном модуле».
> речь совсем не про эффективность ToySQL
Как Катон Старший все время про Карфаген, так и автор все время про ToySQL?
🙂
(46) верим, отчего же не поверить :). В моей практике был случай, когда надо было ускорить проведение, я даже примерял к этому делу ToySQL, но все разрешилось типовым способом. Запрет работы задним числом, и получение итогов в момент проведения на Точку Актуальности. Глобальное перепроведение тоже со сдвигом ТА.
Задним числом работали пару человек, хорошо проинструктированные к чему это может привести.
Необъяснимо, но факт, в базе не было отрицательных остатков. 🙂
(49) Отрицательные остатки — это не самое страшное.
Партионный учет — вот зло 🙂
Когда нужно перепроводить для восстановления последовательности списания партий.
(50) Ну, соответственно с партиями тоже было все в порядке, работали почти в реальном времени.
кста, на головной странице на этот топик вот такая инфа:
Комментарии (4294967295)
..
+ еще: использование при частых обращениях для периодических реквизитов объекта «Периодический» позволяет получить выигрыш до 25%
(52) И страницы сбились тоже. Когда кликаешь вhttp://infostart.ru/comments/ попадаешь на 3-ью которой больше нет. Или пока нет 🙂
Комментарии (29)
Страницы: ← Назад 1 3
(15), (20), (54)
(0) > Сказал, чтобы клиент сделал замер производительности в отладчике (до этого также делали замер, который показал что 80% времени уходит на расчет итогов). Сделали замер. Каково же было мое удивление, когда выяснилось, что примерно 60% времени выполнения кода уходило на получение данных констант и периодических реквизитов.
Вчитайтесь и не тормозите! Исковеркали базу, в которую насовали кучу периодических реквизитов? И мало того, еще и в ОбработкаПроведения() их всунули?
> 15. Abadonna 16.12.2008 16:12:55
> Чего уж так накинулись?
> Например, «Каково же было мое удивление, когда выяснилось, что примерно 60% времени выполнения кода уходило на получение данных констант и периодических реквизитов.» — совсем не безполезная информация
И чем же это полезно? Для тебя лично и для всех?
Частный случай в единичной базе.
Сейчас провел замер в Комплексной для Украины (7.70.023). Типовой ТиС нет по рукой.
Документ РасходнаяНакладная
Модуль Строка Кол Время %(Время)
——————————————————————-
Глобальный модуль 8732 ВремРегистры.РассчитатьРегистрыНа(Конт.ТекущийДокумент()); 1 0.32026 84.92
——————————————————————-
Глобальный модуль 4433 Ит.ВыполнитьЗапрос(Конт.ТекущийДокумент(),,спСчета); 1 0.00717 1.90
——————————————————————-
Документ.РасходнаяНакладная.Модуль Документа 510 ДвиженияРегистров(); 1 0.00403 1.07
——————————————————————-
Глобальный модуль 816 Реквизит=Метаданные.Документ(ВидДокумента).РеквизитТабличнойЧасти(ИмяРеквизита); 18 0.00283 0.75
——————————————————————-
Документ.РасходнаяНакладная.Модуль Документа 536 Операция.Записать(); 1 0.00229 0.61
——————————————————————-
Глобальный модуль 805 Реквизит=Метаданные.Документ(ВидДокумента).РеквизитШапки(ИмяРеквизита); 14 0.00213 0.57
причем так будет для любой типовой ТиС! коих гораздо больше 50% используется. в каком месте это единичный случай. тоже не ясно.
Предлагаю автору не отвечать на грубость, а Altair777 покинуть эту тему, если она его так раздражает.
(63) Я ее покинул, но тут защитничек пришел, мой коммент минусанул.
Я считаю, что необоснованно.
2(65) Разбирайся в личке с такими вопросами.
(63) предложение принимается 🙂
«прилюдность» инет-оскорблений весьма условна.
т.е. никого на самом деле не трогает чужая ругань в чужой адрес.
а если трогает, то это уже проблема 🙂
А теперь элементарная математика
(0)
> до этого также делали замер, который показал что 80% времени уходит на расчет итогов
> Ускорение примерно составило 1.5 раза
> примерно 60% времени выполнения кода уходило на получение данных констант и периодических реквизитов
Допустим, раньше проведение выполнялояь за 100 секунд.
Из них 80 уходило на расчет итогов. Пусть даже на расчет периодики уходило остальные 20.
После «ускорения», проведение выполняется 100/1,5=67 секунд.
Допустим, что уменьшение пошло только за счет расчета итогов.
И на него теперь тратится 80-33=47 сек.
На периодику — остальные 20.
И сколько это получается? 30%, а не «примерно 60%», как заявил автор.
«Поздравляю вас, гражданин, соврамши» 🙂
2(72) Слушай, ты начинаешь реально раздражать. Подумать и вникнуть не пробовал? Математика-то на уровне второго класса:
Пусть раньше проводилось за 100 секунд. Ускорили в 1,5 раза, получили время выполнения 67 секунд. Из них (оставшихся!) 60% уходило на чтение констант и периодики. Ускорили этот процесс, получили прирост в 30% и итоговое время выполнения примерно 23 секунды.
+(74) поправка: «итоговое время выполнения примерно 44 секунды.»
Блин, ну вполне же безобидный топик был… Парад планет, однако (Планет, не про тебя ;))
(74) > з них (оставшихся!) 60% уходило на чтение констант и периодики
Как на них могло уходить 60%, т.е. 40 секунд, если ДО оптимизации на них уходило не более 20 секунд?
И при чем тут твое раздражение? Я конкретно доказал, что автор подтасовал факты, что бы показать свои выдающиеся успехи в «оптимизации».
> Ускорили этот процесс, получили прирост в 30% и итоговое время выполнения примерно 23 секунды.
А это тут причем? Я про дальнейшую оптимизацию не упоминал.
Ржал. Прикольно читать комментарии с вырезкой в 10 шт. Очень напоминает на анекдот, что остались только «в» и «на». Похоже, топик был зачетный. Посмотрел, кто автор… Нет, не ОН… 0_о
(78) > Посмотрел, кто автор… Нет, не ОН… 0_о
А очень похоже 🙂
в (72) вроде верно посчитано. почему так вышло мне уже лень объяснять и разбираться. вполне возможно что до оптимизации замер делался только на накладных, а после оптимизации на всех документах. и ускорение в 1.5 раза я со слов клиента сказал.
написал то, что сам лично в замерах считал. до оптимизации — 80% (примерно) на расчет итогов. после оптимизации в сумме 60% на константы и периодику
посмотрел хистори в аське. на константы уходило 50% 🙂
(74) АЛьФ > 2(72) Слушай, ты начинаешь реально раздражать.
(80) toypaul > в (72) вроде верно посчитано.
АЛьФ, ты ничего не хочешь по этому поводу сказать? Извиниться хотя бы 🙂
(81) toypaul > посмотрел хистори в аське. на константы уходило 50% 🙂
ржунимагу 😀
Автор, в шапке не забудь поменять.
2(82) Ты полностью прочитал (80)? Сам извиниться не хочешь?
(84) > 2(82) Ты полностью прочитал (80)?
А ты еще (81) прочитай
2(85) И что? Это оправдывает твое хамство?
И, вообще…
«мне уже лень объяснять», «вполне возможно», «со слов клиента», «на константы уходило 50%»
После этих слов как-то не верится во все остальное
(86) > 2(85) И что? Это оправдывает твое хамство?
Мое хамство?
(7) toypaul > — не заметил полезного? читать надо не по диагонали и включать серое вещество.
Вот это хамство.
И я, в отличии от некоторых, включил серое вещество и посчитал. И доказал.
А если оставить тему хамства — я был прав?
И при чем тут мое оправдание? АЛьФ по непонятной причине в (74) оторвался на меня, а теперь я же и должен оправдываться? 🙂
(89) Я ни на что не напрашиваюсь.
> кроме рекламы фирмы 1С
за это я извинился в убитом без причины комменте
> и самовосхваления
Я написал конкретные вещи, почему я считаю, что автор исказил информацию, что бы показать себя в лучшем виде. Так оно и оказалось.
> ничего полезного не заметил
Тут я был не прав. Я заметил.
Что былые заслуги информатора часто не дают людям собственными мозгами оценить достоверность той или иной информации, подаваемую им в лучших традициях Канадской Оптовой Кампании
А ну брысь в разные углы! Нашли, елы-палы из-за чего копья ломать…
1-й факт: чтение констант и периодики всегда более затратно, чем прописанные в глобанике псевдоконстанты — так это ежу понятно. Тут автору плюс. НО!!! Зачем глобальник? Вот Альф защищает автора, а по скромности не предложил очевидное решение: дополнительный глобальный модуль с помощью Формекса. В Дгм все переменные переназначаются динамически (юзеру только выйти и снова зайти в 1С или перезагрузить ДГМ).
2-й факт: Альтаир доказал, да и сам автор признал, что некоторые цифры мягко говоря среднепотолочные. А это уже минус — не трэба дадьку нас дурить.:-))
Вывод: да нифига страшного! Плюс на минус, как известно дает ноль, но аж никак не прикупом в морду (в смысле оскорблений) — полковник был такая сука, что пасовал на семи тузах… Так что пожали друг другу руки, мысленно хряпнули по рюмочке и перешли к конструктивному диалогу. А то ей-богу, попрошу у Альфа или у Суппорта права и буду сносить все комметы от первого до последнего, если среди них заваляется хоть один матюгальный (шутка, конечно, но в каждой сказке есть доля сказки…).
(91) > Альтаир доказал, да и сам автор признал, что некоторые цифры мягко говоря среднепотолочные. А это уже минус
Я, собственно говоря, поэтому и поставил минус.
> АЛьФ : …Предложено тебе уже было уйти из ветки, раз уж тебя так тема раздражает. Или ты на бан напрашиваешься?
А вот здесь я че-то не допонял — налей еще (:-)) ). На ИС уже цензура? Уже надо спрашивать, в какую ветку заходить, а в какую низзя?
Я могу, конечно, создать свой сайт якобы об 1С и если кому-то не понравится история моего друга о любовных похождениях, или рассказ моей любовницы о новой моде на бикини, то и забанить его могу!
Но кому такой сайт будет интересен? И куда мы катимся?
(91) полковник был совершенно прав, кто-то ведь спер у него восьмого туза?!
короче, «Неожиданный опыт оптимизации» 🙂
(93) > Но кому такой сайт будет интересен? И куда мы катимся?
Не знаю… Я, пожалуй, на мисту.
Там попроще общаться будет. И с Альфом, и с Тем-О-Ком-Нельзя.
А то угрожают за правду забанить. Или за несоблюдение субординации?
Мы не в армии 🙂
2(93) На ИС с самого нача было принято вести конструктивный диалог без перехода на «сам дурак». Нам бы хотелось, чтобы здесь было общество профессионалов, а не склока базарных баб. К сожалению, последнее время (с увеличением числа посетителей портала) наметилась тенденция к переносу на портал привычного им формата общения. Один привычно хамнул, второй привычно ответил и понеслась.
Так вот иногда приходится напоминать, что не в каждом споре рождается истина и если тебя что-то сильно не устраивает, то лучше отказаться от продолжение разговора. Причем отказаться должен тот, кто комментирует чужой блог, а не автор блога. У комментарора всегда есть возможность создать свою запись в блоге или статью с полным разбором аналогичной ситуации в качестве полноценного ответа и запостить ссылку в комментарии к изначальной статье. Такие «ответы» (а то и целые цепочки взаимых ответов) на портале сплошь и рядом находятся. И именно такой подход будет корректным, профессиональным и правильным в рамках портала.
Если же есть желание просто посклочничать, то для этого есть куча мест в интернете. В крайнем случае можно использовать личку, т.к. чужие склоки очень мало кому интересно читать.
2(96) Для Мисты твой стиль общения как раз очень подходящий. Здесь мы стараемся все же такого не допускать.
(98) Леш, а дурной пример заразителен 🙂 Вспомни, когда и откуда началась базарная склока. Вообще на инфостарте…
2(99)
Автору — однозначно минус, за статью со «среднепотолочными» цифрами «из асек, со слов …» и т.д.
Altair777`у — жирный плюс за бдительность, и потраченное время на критику никчемной статейки.
(101) спасибо 🙂
(101) Абсолютно согласен. Но на категоричный минус статья все-таки не «тянет» — есть в ней зерно истины. Да и считаю, что с минусами надо бы поосторожней, пощетельней как-то… А то на десятелетней давности юморную статью плюса не жалеем, а за не очень красиво поданную статьюю или программу минус влепить — всегда пожалуйста. Тем более считаю — минуса на комметы признаком моветона. Ну высказался человек — это его мнение, а за что минус? Или минусующий свое мнение считает выше рангом?… Странно все в датском королевстве…
Забавно, на мисте афтар никак не отреагировал на то, что его статейка — отстой 🙂
+ (104)http://www.forum.mista.ru/topic.php?id=379348