<?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='\
А в результате перемешивания материалов что получается? Продукция 🙂
Там похоже аура такая:-)
Хотя бывало, что просьбы пользователей такие сумбурные, постоянно меняющиеся и исключающие друг друга, что результат работы потом оказывается соответствующим просьбам, хотя работу и выполнял вполне опытный специалист.
(3) К сожалению такие постановщики задач не редкость. Наверно начитались сказок про иди туда, незнаю куда и сделай то, не знаю что, но чтобы балланс сошелся.
Вполне нормальные названия переменных, функций и констант. А вот как пишется слово компЕляции стыдно не знать.
(5) Знание русского языка как владение каратэ — настоящие мастера не применяют его без необходимости.
(5) вот именно, понатыкали туда всяких букв в середени комп(И, Е)ляция, а оно то пишется без оных — компляция)))) — и звучит нормально, а то компИляция понимашь
Ну Спасибо. Я поржал от души !!!
СУПЕР!!!
Про 22-е апреля весело. Помню, делали когда-то авиаиндикатор, и решили приколоться: если кто-то ночью в 2 часа 31 минуту 14 секунд будет тестить индикатор на стенде, отключит основное ПЗУ, и замкнет в контроллере модуля формирования изображения триггер ТИ17 на входе и триггер ТО14 на выходе, подавая при этом на вход контроллера сигнал «пила», то на экране индикатора появлялся текст гимна СССР и список разрабов. Вобщем, дело подсудное в стратегическом КБ, но вероятность таких совпадений вообще должна быть равна нулю… Самое прикольное, что за два года звонили 4 раза из московского КБ, в ужасе сообщая, что на индикаторе почему-то вчера появился текст гимна… 😀
Кстати, 22-го апреля Ленин родился… Не он? 🙂
(11) 🙂 не он. Этого писателя звали Сергей. И судя по количеству куч в базе звали часто.
(12) Хм… Сергей говоришь? Уж не… стоп незя про него.. ))) Но скорее всего он.. ))))))))
(13) Эээ… А почему нельзя? В смысле о нём или хорошо или ничего?
(14) Забанют… )))))))))))
Мне тоже такие грабли подсунули:
Пока 1 = 1 Цикл…
(16) Нормальный приём, чё не нравицца? Сам часто использую — вход для всех, выход за деньги )))
(16) Ага, это обычный прием для цикла, условие о завершении которого принимается внутри кода цикла.
(17)(18) Ага Хоттабыч тоже думал что нормальный прием, и сколько он в кувшине просидел? Если условие никогда не наступит?
(19) значит, такова его судьба
все правильно, компьютеры должны работать, а люди должны отдыхать 🙂
(16) нормальный подход. Экономичный и быстрый. Придумай что нибудь сам, если нужно в любом случае зайти в цикл и по какому нибудь условию выйти. Либо будет медленнее, либо потребует дополнительных ресурсов, либо и то и другое.
Единственной известной мне альтернативой циклу 1=1 является безусловный переход. Можно конечно сделать через переменную (ну, типа флажок), но будет работать медленнее.
(16)(22) Для ортодоксальных структурных программистов:
ФлагПродолжения=1;
Пока ФлагПродолжения=1 Цикл
…
(23) Вот как раз и пример, как сделать тоже самое, но медленнее и увеличить количество используемых ресурсов.
(0) СуммаСовсемБезНДС — это изобретение 1С. Правда, не в ТЧ, а в шапке.
(16) А вот этого не надо. Это классический бесконечный цикл. Сишный вообще-то while(1) { … } Почему бы его не использовать?
(17), (18) Пока <условие> Цикл (While Do EndDo) некузяво? Или хуже?
У меня ДР = 16.04!
(28) Кгрхм…
http://infostart.ru/forum/messages/forum1/topic8012/message57267/#message57267 , например), у тебя реальность, похоже, еще суровее.
Вкупе с последними твоими высказываниями (
Ты с кем это сейчас разговариваешь?
Статья вообще не понравилось.
Имена переменных вполне нормальные. Главное — это понять смысл, заложенный в переменную. Я думаю, что все всё поняли. Есть случаи хуже твоих.
Вот например, ты ругаешь строку:
Показать полностью
А что в ней плохого? ИМХО, это намного лучше чем такое:
Показать полностью
Пока 1=1 — это вообще классика.
Если 2=1 Тогда — так люди делают комментарии большого блока кода. Соответственно, чтобы его "раскомментировать" надо поставить "Если 1=1 Тогда ". Также типичный приём.
В общем — "низачёт" (
(28) (29) Ага! Я тоже не понял 🙂
Думаешь, мы запомним и не забудем поздравить?
Сергей, как мне кажется, лучше за день-два напомнить.
(16) Да нет. так можно…
хотя яделаю:
Пока Истина Цикл
(32) А где «Истина» в 1С 7.7? 😉
(27) Отчего ж? Кузяво… но не всегда:
Процедура ВыбратьФайл()
ИмяФайла = ИмяФайлаПрописи;
Каталог = КаталогИБ();
Пока 1=1 Цикл
ФС.ВыбратьФайл(0, ИмяФайла, Каталог, «Выберите файл прописи для валюты «»» + Наименование + «»»», «Файлы прописи(*.spl)|*.spl»);
Если СокрП(Нрег(Каталог)) <> СокрП(Нрег(КаталогИБ())) Тогда
Предупреждение(«Выберите файл из каталога «»» + КаталогИБ() + «»» !», 60);
Каталог = КаталогИБ();
Иначе
ИмяФайлаПрописи = ИмяФайла;
Прервать;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
(33) Теперь я понимаю почему семерочники такие суровые.. Они ищут Истину…
(35) угу…
(30) В чем-то ты прав по поводу смысла переменных, но меня как-то коробит от странных и пространных наименований типа «ДаНадо», «Куда», «ОтветсвенноеЛицоКуда», а «ЧТО» и «ВОЧТО» это вообще ппц.
(35) Точно в цель!
(30) Видать сам так пишешь, раз считаешь что нормальные. Поковырялся бы ты в таком говнокоде….
Ржал как конь 🙂 Несомненно +1
(38) Видать читаешь хреново.
Какой из отрывков кода в твоем понимании лучше:
Показать полностью
или:
Показать полностью
? Причем во втором случае в модуле будет встречаться переменные с названиями: Прм1, Прм111, Пр11, к1, к2, п3 и так далее.
Так вот мне посчастливилось копаться в коде, похожем на второй. И я был бы очень рад, если бы мой предшественник писал бы так, как герой статьи автора!
Я так понимаю, что в эту статью можно включать примерно такие строки:
Показать полностью
Сам натыкался на свои старые комментарии:
Показать полностью
Ну и секции у печатной формы: шапка, УШИ, тело 🙂
(40) шедевр именования реквизитов, встретил в самописной конфе
Идентификатор Реквизита: ________________
Тип: Строка, Длинна 1
Как думаешь что это?
(41) Ну и зачем так утрировать? Хочешь доказать мне, что приведенный код прекрасен и мне страшно повезло? Знаю я прекрасно, что есть и более тяжелые случаи, но мне от этого нифига не легче.
(44) Класс! точно шедевр.
«Совершенный код» всем в помощь!
(45) Ну, в принципе да, я хотел сказать, что тебе ещё повезло.
Вот сейчас работаю с конфигурацией — похоже, ее лепили с нуля.
Ни одного комментария ни в одном реквизите. А деятельность специфическия.
Вот, например, реквизит табличной части — «ПростойЧелФ»
По ИД документа «УчетВремениРаботыМашин» я догадался, что «Простой» — это не в смысле противоположность «Сложный», а «Чел» — это аналог «Чувак».
А что же такое «Ф»?
Открыл форму документа. Описания к реквизиту нет, заголовок колонки «Прост.чел.ф.»
И этот реквизит в документе нигде никак не упоминается, т.е. по коду понять невозможно.
Сделал поиск по конфе — встречается в 2 отчетах. Вот кусок запроса
|ПростойЧелФ = Документ.УчетВремениРаботыМашин.ПростойЧелФ;
|Функция ВремяПростояЧ = Сумма(ПростойЧелФ) Когда (ПростойЧелФ<>0);
Очень информативно 🙂
То что «Ф» может означать «Фактический» я догадуюсь, но вдруг не так?
(48) А может это «простой человеческий фактор»? 🙂
(49) Точно!!! 🙂
Попытка
Если Источник.ОбменДанными.Загрузка Тогда
Возврат;
КонецЕсли;
Исключение
Сообщить(«Ой! Что-то случилось! Обратитесь к программистам! (12)», СтатусСообщения.ОченьВажное);
КонецПопытки;
эт перлы из нашей базы)
по теме, обожаю юмор программистов)
(10) вероятность данносго события 50%: либо наступит, либо нет.
На правах стеба
каюсь.. есть у меня такой грешок… поставят задачу сделать такой-то отчет, а у меня в это время присутсвие полного отсутствия желания работать.. но ведь надо! вот сидишь, работаешь и пишешь комменты с мыслью в голове, что будущие поколения, ковыряясь в том что я ваяю поржут.. и как-то легче работается 🙂
Классика стеба:
Если 65 = 0 Тогда
Сообщить(«Ребят, тут ваще нереальная фигня какая-то случилась»);
Возврат;
КонецЕсли;
(0)»Если 2=1 Тогда …» — очень удобный способ закомментировать блок кода, если так удобнее, чем выделять блок и жать на кнопочку [//]. Знавал я одного программиста на клиппере, в редакторе которого нет возможности поставить комментрий на выделенный блок, а он он был не уверен, что этот блок после очередной «хотелки» уже не понадобится (не удалял его), поэтому это супер-красивый способ комментирования.
«ДатаЗапретаРедактирования и ДатаПолногоЗапрета». Ну и что? Вполне возможно до даты ПолногоЗапрета нельзя редактаривать НИКОМУ, а до даты Запрета можно, например, главбуху.
Так что не судите и не судимы будете! 😉
(48)>УчетВремениРаботыМашин.ПростойЧелФ;
Лично я почти на 100% уверен, что это простой машины, связанный с ЧЕЛОВЕЧЕСКИМ ФАКТОРОМ
(53) Видела процедуру с названием НаХ(), удаляет строки справочника :-))).
По поводу «ДатаЗапретаРедактирования и ДатаПолногоЗапрета»
У меня тема было:
Ставиться задача сделать что-бы скидка на определенны товары давалась на другие нет. Сделал реквизит у Номенклатуры — перечисление СкидкуДавать, СкидкуНеДавать.
Потом директор говорит вот есть ХОРОШИЕ клиенты которым надо дать скидку даже на те товары на которые мы скидку не даем.
Не вопрос делаю реквизит у клиента его проставляем и усе гуд.
Потом директор говорит вот есть некоторые товары, на которые скидку нужно не давать, даже если у клиента есть вышесказанный признак.
И чё делать? В перечисление было добавлено значение СкидкуСовсемНеДавать.
за:
ИначеЕсли ТЗ.Количество() > 1 Тогда
//придумаю потом
КонецЕсли;
появлется желание убить.
Не знаешь — не пиши (НЕ гадь. 🙂
А вообще-то
гораздо хуже когда ТЕКСТ выглядит
чудесно, но сама конфигурация
а) мусорная куча идей, которые никак не связаны или плохо связаны друг с другом (ну нет единой конструкции)
б) или в основу конфигурации положен вековой давности подход к предметной области (например бух.учет к учету в самом производстве 🙂
Ой, я такая загадочная судя по всему… или тут просто до меня были такие все загадочные!!!
(10) это не прикол, планет, это качество вашего прикола
(58) Не гибкая реализация. Граблей нахватаешь до безумия. Сотвори реквизит шапки документа типа число и назови «ПроцентСкидки». Пусчай девочки по продаже решают давать или не давать… 😉
(62) Это было сделано лет 5 назад и никаких граблей, а по поводу шапки так в ней и есть и скидка и наценка и бонусы и все это может быть вместе, и еще доставка.
реквизит ни для этого.
А когда в доке 30 наименований и на 2 скидку давать не нужно потому что наценка на них очень махонька. А всего в справочнике 10 000 наименований и операторы не могут помнить на какой товар давать а на какой нет — это по поводу фразы «Пусчай девочки по продаже решают давать или не давать»
(63) Согласен. Не знаю ньюансов учета и похоже поторопился с выводами.
🙂
Сочувствую и поддерживаю!
А всем кто не знает как комментируются большие блоки кода в 1С необходимо выдать БСЛ.
(66) Спасибо за поддержку! Я что-то не могу придумать с какой целью надо комментарить и оставлять в живой базе СТОЛЬКО строк не рабочего кода. Если это для расширения возможностей объекта, то для срабатывания этого варианта надо, чтобы приехал прогр. и «включил». А когда не надо опять приехал и «выключил». Проще константу сделать — красивее будет и меньше беготни.
Столкнулся с таким кодом. текст функции строк на 300.
Оформления структуры кода почти никакого. Вижу такие строки
….
примерно на строке 250
Если УчитыватьСкидкуПоДисконту = Истина и СрокДействияДисконтнойКарты > ТекущаяДата() и ДисконтнаяКарта…(Тут текст уходит за границу экрана)
КонецПопытки;
КонецЕсли;
я бился в истерике…
Что касается закоментированных блоков кода.
Мое мнение таково, когда коментируешь блок — выставлять дату коментирования и по прошествии некоторого времени (месяц-два) удалять. потому как это уже действительно мусор.
(68) ну, попытаться-то надо было
про лопату и дерьмо, это прям в точку попали :)))))
еще одни «перлы».
я бы этому ДВ руки то поотбивал
// ДВ 2008.03.22, 2008.07.09
//ТекСтрока.Цена=обПересчет(ЦенаНормочаса,ТекСтрока.Нормочас.Валюта,Дата,ВалютаДокумента,КурсДокумента);
Если СокрЛП(ТекСтрока.Работа.Код)=»ЦБ0010532″ Тогда
ТекСтрока.Цена=0;
КонецЕсли;
Если Справочники.Организации.ОсновнаяОрганизация.Наименование=»Автоцентр «» Estocada express «»» Тогда
Если СокрЛП(ТекСтрока.Работа.Код)=»ЦБ0011277″ Тогда
ТекСтрока.Цена=0;
КонецЕсли;
Если СокрЛП(ТекСтрока.Работа.Код)=»ЦБ0011276″ Тогда
ТекСтрока.Цена=0;
КонецЕсли;
Иначе
//Если СокрЛП(ТекСтрока.Работа.Код)=»ЦБ0011294″ Тогда
// ТекСтрока.Цена=0;
//КонецЕсли;
Если СокрЛП(ТекСтрока.Работа.Код)=»ЦБ0011295″ Тогда
ТекСтрока.Цена=ТекСтрока.Нормочас.Цена/2;
КонецЕсли;
КонецЕсли;
// ДВ 2008.03.22, 2008.07.09
Плакаль….
Мож, не очень смешно, но и не слишком грамотно:
Конфигурация HRS BO ver. 1.1
Операция.НоваяПроводка();
Операция.Дебет.Счет = Счет_Кредит1
….
Операция.Кредит.Счет = Счет_Дебет1;
Конечно когда происходит «лоскутное» проектирование (недостаток финансирования, несколько внедренцев, меняющиеся условия задачи) то это нормально…
Но когда это 1С… (Конфигурации для Украины)
План видов расчета «Средний заработок», предопределенные элементы:
Имя — Наименование
ПоЗаработкуБЛПропорционально — (больничные пропорционально) По начислениям, которые учитываются пропорционально отработанному време
ПоЗаработкуБЛБерИРоды — (для больничного по беремености и родам) По заработку
ПоЗаработкуБЛ — (для больничного) По заработку
ПоЗаработкуДляОтпуска — (для отпуска) По основному заработку, для расчета отпуска
ПоПремиямОтпуска — (для отпуска) По премиям
ПоФиксПремиям — (для отпуска) По премиям пропорционально
ПоПремиям — (для средней) По премиям
ПоФиксПремиямОтпуска — (для средней) По премиям пропорционально
ПоЗаработку — (для средних) По основному заработку, для оплаты по среднему
ПоГодовойПремии — По годовой премии
ПоОкладу — По окладу
Показать
(10) O-Planet,
в СССР за такое бы посадили неглядя, тем более — нашли. Так что где-то допридумываете, Олег 🙂
(62)
великолепно. Т.е. табличка «кому давать, кому — не давать» будет висеть теперь у девочек на стенке, на всеобщем обозрении?
(66) buzzzard,
а ты, значит, знаешь? И видел, наверняка, во что превращается процедура, в частности, если её закомментировать полностью?
(74) AnryMc,
вполне типовые названия переменных в 1с.Как сумели изначально придумать (или недодумать), так и идет до сих пор.
(75) Не, не придумываю ) Просто у меня директор был тот еще кадр, отчаянный. Вот пример из жизни. В нашей бригаде 4 чела, мы готовимся к выставке в Германии. Первая выставка, на которую нас пригласили. Мы делаем макетный индикатор на ЖК панели. Купили ее за 3 тыс у.е., индикатор — огромная коробка, с маааненькой панелью. Потом мужики рассказывали, как глупо это смотрелось на фоне буржуйских действующих моделей… Так вот, до отправки в германию 3-4 дня, и у нашего конструктора, Жени Панфилова, Д/Р. Он, соотвественно, с водкой пытается пройти на территорию завода. Его ловят на проходной составляют акт, водку отнимают. ДР испорчено. Он с проходной звонит нашему Мандраку (мой директор бригады), рассказывает обиженно, что водку отняли. Мандрак командывает нам: Все — домой и пошла эта выставка на … Так вот, к нам вечером того же дня директор УКБП Абутидзе Зураб Северьянович посылал уазик с официальными извинениями и просьбой срочно выйти в неурочное время (да мы и так каждый день в неурочное работали). Вот так-то. Меня работа с этими товарищами научила только одному: специалист должен диктовать правила, а не система.
(79) O-Planet,
советские разработки выглядели все неказисто и громоздко, зато брали фнкционалом. Так что либо мужики первый раз на выставку съездилии еще не привыкли, либо — вас просто заочно обсмеяли 🙂
ну, в Средней Азии и тогда че только не творилось. Клановость во власти — самое наглядное, что выплывало.
Ни один специалист в СССР, кроме Королева, не мог всегда и везде диктовать свои условия.
(78) AlexO,
Я о том и говорю, что на уровне «идеологии» разработчик закладывает:
«это понять невозможно, это можно только запомнить…»
что уж говорить о приходящих ребятах, которые зачастую в условиях ограниченного финансирования (а значит и времени) решают локальную задачу (зачастую без четкого понимания заказчика, что он хочет) и так несколько раз…
Так таких «перлов» написать можно
Спасибо. Улыбнуло с утра.
Хотя выносить сор из избы конечно не гоже :-))