<?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='\
(0) Некоторые конечно «Перлы», но грешно смеятся над убогими.
Думаю вы просто не работали в условиях, в которых писался этот код.
Когда к вам прибегают и говорят, что надо через 5 минут, для одного клиента/товара/должности и реквизита никакого вы завести не можете, т.к. в базе работает 100 человек.
Да и религия не позволяет заводить для одного элемента реквизит.
Так и рождаются такие решения. Рождаются как временные, но нет ничего более постоянного как что-то временное.
Также часть «перлов» похожа на отладочный код, до которого не доросли руки переделать.
Так что это статья не про то «как не надо писать», а «как потешить свое самолюбие».
Попробуйте просто подумать «почему» писался этот код, а не «как» он писался.
Сорри за возможно резкую критику.
[:]///////////////[:]
В первом примере вообще все нормально. В списке сотрудников работник на должности любовницы директора (стандартный код 00055) и люди с персональными окладами апостолов-основателей подлежат обработке по специфическим правилам.
Если так писать, то никакой «обфускации» кода не потребуется 🙂
Пипец… Курящие зайцы 🙂
На самом деле, было бы смешно, если бы не приходилось с этим сталкиваться…
Вот вам, кстати, из типовой бухгалтерии (р. 1.6.12):
____________________________________________________
Если Лев(Выборка.СчетЗатрат.Код, «2») = «26» Тогда
Продолжить;
Если ТаблицаПроизводства.Количество() > 0 Тогда
Продолжить;
КонецЕсли;
КонецЕсли;
____________________________________________________
To Valet: уважаемый, причина, по которой пишут ТАКОЙ код — только одна: низкая производственная культура программистов, над чем, собственно, и стеб. По этой же причине жигули рассыпаются еще в автовозе, а интеллигенция мочится в подъездах :).
(6) О производственной культуре программистов можно говорить, только если есть отдел из нескольких программистов. А наши реалии таковы, что есть программист (думаю большинство писавших код выше — не высокооплачиваемые) и есть руководство, которому до культуры дела нет.
Попробуйте донести такому руководству, что нужно время на «рефакторинг».
И поймете что придется вам жить с таким кодом до перехода на новую «платформу».
А посмеяться можно и над инвалидами и над маленькими детьми — они тоже ходить не умеют. Может люди «второй день» конфигуратор открыли.
Я к тому что нужно уважать своих коллег — сами ведь также писали первый раз.
Ну вот например написанием типа
«Если ТЗСотр.Сотрудник.Должность.Получить(НаДату).Код<>»00055″ тогда»
сам бывает грешу, доводил недавно до ума налоговый учет на предприятии, а спец по налоговому учету, такая барышня… что легче дать, чем объяснять почему нет, построили вроде стройный налоговый регистр, все объекты учета красиво в него ложаться, а одно ОС попадает в регистр, а не должно, выяснил почему, вобщем чтобы всё красиво получилось надо ворошить всё с начала года, а ОС всё, выбыло, и движений по нему не будет, ну вобщем легче было подобное написать чем убеждать что надо всё сделать по уму.
Лишний раз убедился, что над другими надо смеяться реже. Из всего, что приведено, немного удивил пример с суммой точек, хотя такое иногда приемлемо.
Но особенно порадовал пример и комментарий «6. А что эта гениальная программа делает?» Так вот. Она делает как раз все правильно. И как раз так, чтобы такие как ты не поняли, что она делает 🙂
Автору — минус.
Никогда так не писал, даже когда только начинал работать, учился все-таки на программиста.
А случаи всякие бывали, и когда за 5 минут надо было сделать! Даже такие что за 30 минут до закрытия налоговой прибегал бухгалер (а до налоговой еще ехать надо) и начинал истерично орать ВОТ ЭТО НАДО СРОЧНО!!!! Успевал как то…
O-Planet
Не понял я…
О великий проясни !!!
(9,11) С таким подходом программирования «На скорую руку», в конечном итоге и получается не конфигурация, а собрание сочинений на скорую руку. А когда приходит другой программист, добрыми словами он ВАс уже не вспомнит. Когда прибегает кто-то со словами «надо срочно, через пять минут» надо посылать, ибо надо уважать себя, и свою профессию. Посылать всех подальше(начальство лучше культурно).т.к надо было раньше думать.
Не забываем что работа программиста начинается с подписанного технического задания, и ни как по другому, это надо взять за правило.
(10) а в пункте 6 уж ни как не выполняется:
1. Обработка поставщиков.
2. Читаемость кода.
3. Весь код можно было написать в пару строк.
4. если программист пытался запутать кого-то этим кодом, то у него ни чего не получилось. так как понадомится несколько минут, чтоб разобраться, что в ней происходит.
в итоге вся функция бред.
(12) А что не понятного-то? 🙂 Видно сразу, что ОбработкаПоставщиков() — не доделана. Первая ее часть — попытка написать что-то вроде «защиты», основанной на проверке даты. В цикле аффтор смотрел, как считается что-то, что он хотел посчитать. Закомментировал. Но цикл так и не заполнил. предполагаю, что эта процедура в модуле вообще ни где не вызывается. Автор ее просто не дописал.
(13) Нормальная работа программиста у клиента — это всегда работа «на скорую руку». Но это не должно влиять на качество кода, потому что, как правило, все задачи и приемы их реализации — типовые, и делаются сотню раз.
Моя плакал…
Если бы строители строили дома,как программисты пишут код, то любой
дятел разрушил бы цивилизацию.
Есть у хомо-сапиенс такое «отличительное свойство», когда он [конкретный человек] постигает высоты какого-либо мастерства, то тех, кто только учится и допускает грубые ошибки, готов «съесть целиком», несмотря на то, что в своих ошибках он [конкретный человек] никогда не признается.
Хочу заметить, что данное «свойство» (фишка, фича, баг — нужное подчеркнуть) чаще встречается именно у IT’шников.
Не судите и не судимы будете.
Почему бы просто не улыбнуться и исправить ошибку? довести код до совершенства?
Эгоизм и «звездная болезнь» не каждому позволяют это сделать видимо….
Не вижу ничего смешного.
Таких примеров написания кода- пруд пруди, хотя бы на данном сайте.
Впрочем, и сами типовые конфигурации от данных «образцов» недалеко ушли, к сожалению.
Блин, вам смешно, а у меня на работе директор департамента ИТ пишет такое:
Если Пользователь.Код = «ВасяПупкин» Тогда
фл = 1;
Иначе
фл = 0;
КонецеЕсли;
Это еще что, а это все в глобальном модуле. И зп у него бля от нють не маленька, везет же дятлам!!!
(20) Ну нормально, кто не умеет писать, тот руководит )))
Не давайте ему писать, пускай департаментом управляет
Пример реальной конфы. Я был просто в акуе. Вот прям так, всё сохранено, за исключением конкретных названий:
Показать полностью
Конфа написана в одном из наших подразделений, разраба никто не подгонял.
Вотhttp://infostart.ru/projects/3683/
Яркий образчик, как не надо писать :))
(23) Если «разраба» никто не подгонял и руки развязаны в плане дополнения структуры базы , то это не от большого ума.
Увидел ИмяПользователя() и вспомнил еще один момент который способствует такому программированию. В 77 юзеру можно добавить один набор прав.
И когда стоит вопрос «Всем манагерам можно, а одному нельзя», то начинается такая писанина. Как альтернатива «свой мех-м прав доступа» или в крайнем случае какой-нить справочник «Ролей» аля v8.
Хотя встречались и такие наборы прав: ПраваИванова,ПраваПетрова итд.
А вставки типа Если ИмяПользователя()=»Я» Тогда … я и сейчас использую для отладки «наживую».
>>> Хотя встречались и такие наборы прав: ПраваИванова,ПраваПетрова итд.
Мне тоже встречались. Стоило в прошлом году отлучиться из холдинга, как один деятель из местного франя в тот же день воткнул в мою (нашу) конфу (8.1 причём) роль с фамилией гендиректора. Хорошо хоть меня быстро восстановили, а то представляю, что бы эти франчи ещё наваяли.
Ммм, франчи это зло (С) миста.ру. Не люблю франей, хоть и сам не шик как блистаю.
№4 написан правильно с т.з. минимальной набивки:
СтрДлина(«do») < СтрДлина(«цикл»)
СтрДлина(«Пока») < СтрДлина(«While»)
и т.д.
Категорически не согласен с 27. , т.к.
СтрДлина(«ПолучитьСтроку») > СтрДлина(«GetLine»)
(27) Надо пользоваться Телепатом или на крайний случай шаблонами, тогда проблем с набивкой будет меньше. Да, и копирование еще никто не отменял…
>>> Это еще что, а это все в глобальном модуле. И зп у него бля от нють не маленька, везет же дятлам!!!
Да они как раз не дятлы ))) Это мы дятлы, пишем стройно, код оптимизируем, чтоб бегало все шустро и читаемо было… И за что???
А они перебирают бумажки с места на место, трещат с «бизнесом» и получают в 2-3 раза больше))) Ну нахрена им стройный код? Жизнь удалась!
>А они перебирают бумажки с места на место, трещат с «бизнесом» и получают в 2-3 раза больше)))
ну иди в менеджеры, кто тебя сдесь держит то ?
Мы не знаем почему писался такой код и в какой обстановке. Поэтому не судите, да не судимы будете.
быстрее написать что-то временное
В нашей конфе нашёл такое:
Число = Год(Дата)*10000+Месяц(Дата)*100+День(Дата)-(Год(Дата)*10000+Месяц(Дата)*100+20);// ДИМА — НАКУЯ ВСЁ ЭТО НУЖНО!!!
Если Число > 0 Тогда
Поправка = 0;
Иначе
Поправка = 1;
КонецЕсли;
//(20070821 Сделаем проверку проще
Если День(Дата) > 20 Тогда
Поправка = 0;
Иначе
Поправка = 1;
КонецЕсли;
//)20070821
(34) А почему бы сделать не так?
Поправка = ?(День(Дата) >20, 0, 1);
как вариант в обработке формирования прайса (ни на что более умное чем завернуть такое не хватило времени):
стр=Дерево.Строки[Дерево.Строки.Количество()-1].Строки[Дерево.Строки[Дерево.Строки.Количество()-1].Строки.Количество()-1].строки[Дерево.Строки[Дерево.Строки.Количество()-1].Строки[Дерево.Строки[Дерево.Строки.Количество()-1].строки.Количество()-1].Строки.Количество()-1].Строки.Добавить();
А что смешного в том что человек незнает как писать, а зарабатывать хочется. И потом это не проблема код пишущего, а проблема того кто пишущего на работу взял. Сколько платят столько и получают!
Я видел и таких кто прекрасно использует синтаксис и при всём при этом допускает критичные ошибки.
Незнаю насчет скорой руки. Но даже в начале своей программисткой деятельности, когда узнал о существовании цикла (а было это ну очень давно, тогда ибм 286 стоила как волга), мне лень было копировать строчку и чего то еще в ней править… Можно позавидовать упорству, скопировать 30 строк и еще отредактировать каждую!!! Хотя грешу переменными типа «аа» и «а1» ))).
Повеселился от души. Клевые перлы. Их нужно добавить в черную библию программирования )))).
(37) Нужно учиться — прежде чем начинать писать и тем более зарабатывать на этом деньги! А таких кто хочет писать и ничего не зочет изучать — вообще нечего делать в программировании. Вот так и создаются тупые алгоритмы, которые потом приходиться оптимизировать. А мало платят — иди работай на стройке. Там думать не нужно и денег заработаешь (если руки есть). Чтобы зарабатывать много, нужно для этого потрудиться много и на не всегда хорошей з/п, наработать опыт и знания.
Кто то учился и научился,
а кто то учился и думает что научился,
а кто то неучился и научился,
а кто то на стройке работает!
Нужно быть реалистом!
И как бы кто не возмущался подобный код был, есть и всегда будет и у нас и за границей!
alexmif ты же не поёдешь работать программером за 10 тыс. в мес. на большое предприятие? Думаю нет. А тот кто пойдет будет всегда рожать такие коды — в большинстве случаев в одном лице это временное явление!
И уж поверь, необязательно быть учёным программистом что бы зарабатывать деньги! Свяжись с большинством франчей, посмотри кто у них работает…… и зарабатывают ведь не плохо…
«»Чтобы зарабатывать много, нужно для этого потрудиться много и на не всегда хорошей з/п, наработать опыт и знания.»» — вот имено за маленькую зп НАРАБОТАТЬ ОПЫТ, т.е. ищем полигон для испытаний, а потом на этом полигоне будь что будет, вас то там уже не будет, а пока опыт не наработан пишем как можем!!!
(т.е. ищем полигон для испытаний, а потом на этом полигоне будь что будет, вас то там уже не будет, а пока опыт не наработан пишем как можем!!!)
Вы неправильно поняли. Я имел ввиду что нужно правильно писать код даже на низкой з/п. И набирать на этом опыт. Как правило при низких з/п времени больше, хотя не факт.
(alexmif ты же не поёдешь работать программером за 10 тыс. в мес. на большое предприятие? Думаю нет.)
Я начинал с трех!!! Это была низкая з/п. Если ты не уважаешь свой труд — иди за такую з/п и рви ж… за бесплатно. Большое предприятие может позволить платить достойно и обязано это делать. Если не хочеть — пусть работает без специалистов. Когда предприятия начинают терять прибыль у них очень меняется взгляд на оплату программера. Многие люди думают что мы сидим за компом и занимаемся чем-то непонятным для них, т.е ниче не делам. Вот это в них необходимо переубедить.
На самом деле наша профессия очень уникальна и спецефична. Нас очень мало, а если мы есче и будем так себя ценить и писать такой код, вообще вымрем ((.
(Свяжись с большинством франчей, посмотри кто у них работает…… и зарабатывают ведь не плохо…)
С ними тоже знаком. Только они долго там не работают, стараются найти постоянный заработок. Отсюда и их качество…
Проблема не конечном итоге не з/п. А в том что если тебе нравиться программировать — занимайся и стремись к лудшему. Если не могешь писать нефиг тебе тут делать, займись стройкой (хотя там руки тож нужны) и денег мона больше заработать.
У нас институт заканчивают по специальности «программист», а языки программирования даже не видели или уже сдали экзамен и забыли что это такое… Зачем туда тогда поступать? Чтобы писать «перлы» потом?
С пятницей вас народ!
По поводу кода типа :
Код=»7″ тогда
В 7.7 нет предопределенных элементов.
И что делать, когда нужен «жесткий» элемент, типа валюта Рубли,
или страна «Россия».
Можно конечно завести константу — Рубли и дергать базу постоянно.
(кстати не из самой маленькой таблицы)
Можно даже обозвать ВалютаБухУчета — чтоб враги не догадались,
ну и конечно надо позаботиться , чтобы никто не смог поменять.
Зато код красивый.
(44) Я в подобных случаях делал по разному:
0. обычные константы
1. завожу в глобальнике переменную заглавными буквами типа
Перем ОЧЕНЬ_НУЖНАЯ_КОНСТАНТА Экспорт;
в конце глобальника инициализирую
ОЧЕНЬ_НУЖНАЯ_КОНСТАНТА = «7»;
2. делал класс 1С++ Общие.Константы (аналог как-то выкладывали на форуме 1С++), в котором инкапсулировал работу с константными значениями.
(45) есть ли смысл держать в памяти переменную, если она нужна для разового использования?
У меня возникали случаи кода типа :
Код=»7″ тогда
В основном при обмене данными между различными базами с разными именами и кодами одних складов. Приходилось их решать подобным образом.
Можно конечно создать справочник соответствий, но стоит ли ради 3-4 наименований. Проще изменить или добавить при необходимости в обработке. Тем более они как правило внешние. И изменять саму базу не нужно.
(46) Главное в коде — это возможность нормально читать его для полного понимания.
Поэтому внятные имена различных констант, переменных, методов и т.д. имеют важнейшее значение.
(48) Полностью согласен. Очень удобно в этом плане использовать «телепата».
Мне рассказывали байку: В одном московском ИВЦ, не буду говорить в каком, еще в советские времена, решили оценивать труд программистов по количеству строк написанного кода. Очень быстро это привело к исчезновению циклов…
(49)Писал в середине 70-х для Госплана на Фортране. 50 коп./строчка. Были циклы, точно помню.
Вот, кстати, у себя нашел. Была объективная причина так поступить.
//учтем ***** таким диким способом. Завтра в отпуск …
Если (СокрЛП(полеКлиент.Наименование) = «************»)
и (НаДату>’01.01.2009′) Тогда
проценты = проценты — 14093.48;
КонецЕсли;
Сейчас вернулся к отчету и вспомнил об этой статье. Народ тут совершенно правильно писал, что под давлением обстоятельств и не такую ересь напишешь.
(50) Это было не в Госплане. 🙂 А смыл этой байки в том, что программисты преднамеренно писали не оптимальный код, раздувая его, так как были материально в этом заинтересованы… Циклов, конечно, полностью избежать нельзя, но простенький цикл с десятком итераций можно и линейным алгоритмом расписать 🙂
(51) Давно известно, что у программеров, как у менеджеров и т.д., нельзя/очень опасно вводить какие-либо количественные оценки их труда 🙂
Повеселило))) А ведь мне тоже рассказывали реальный пример… Что вдруг перестали остатки сходиться по одной организации… Долго разбирались из-за чего это… Оказалось, что программист в модуле учета партий написал, что-то вроде:
Если Организация.Наименование <> «НазваниеОрганизации» Тогда
Возврат;
КонецЕсли;
А пользователи изменили название организации… Но сколько времени ушло на поиск ошибки…
Хотя и сам грешен… Когда начинал, помню когда в коде прописывал настройку прав доступа, то в одном месте проверялось на имя пользователя «Острогоржск», а пользователя звали «Острогорск»… И долго я искал, почему у них права не работают))) Самому аж стыдно…
Ребят, сам вот только вчера писал отчет, где привязывался к конкретным наименованиям. Научил зам.гл.бух. одного из юр.лиц писать задания хоть в какой-то форме, а она уперто пишет последовательность действий так, что приходится вылавливать конкретные элементы по наименованию. Заводить реквизит с типом «перечисление» лениво, учитывая, что эта сумасшедшая логика у нее превращается в стройную картину раза с 5-го (после того, как посмотрит на конкретные цифры). Самому разбираться в логике, а не тупо действовать предложенному алгоритму, нету времени…
PS. А насчет кривости алгоритмов… Купите какую-нибудь базу у Белгородской конторы ЦПС и поймете, что перечисленное в теме — это только цветочки. Тексты абсолютно нечитаемы, а формочки являются чудовищным скопищем всего на свете. Документация под час крайне скудна и непонятна. Цены фантастические, нереальные.