"Перлы" (Жемчужины) или как не надо писать на 1С




Принцип обмена данными из 1С с сайтом (на MySQL) и выдачи (публикации) этих данных по запросу.
PHP-Скрипт автоматической загрузки данных из файла данных в формате CSV в базу данных сайта работающего на WordPress.

В продолжение моей темы: 1С:Альфа-Авто Автосалон Автосервис: обмен с сайтом.
С помощью данного скрипта можно загружать в автоматическом режиме, по расписанию, данные сервисных книжек (ремонтов авто) из 1С:Альфа-Авто Автосалон Автосервис.
Также можно загружать данные в ручном режиме: для этого делается скрытая страница, где размещается специальная кнопка.
Комментарии размещенные внутри скрипта разъяснят логику и порядок действия.
Комментарии с "/////    echo" использовались для отладки.
Дополнительно создана таблица для журналирования результатов загрузки данных.
Скрипт включает в себя защиту от SQL инъекций (думаю безопасность соблюдена в полной мере).
В кратце:
1. Пишется скрипт, который запускает этот.
2. Создается регламентное задание в WordPress, по которому запускается скрипт из п.1. 
3. Этот скрипт осуществляет проверку на существование файла обмена в папке.
4. Если данные не новые, загрузка не производится.
5. Если данные новые, очищается таблица сервисных книжек.
6. Загружаются новые данные.

Собственно сам скрипт:

<?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='\

53 Comments

  1. Valet

    (0) Некоторые конечно «Перлы», но грешно смеятся над убогими.

    Думаю вы просто не работали в условиях, в которых писался этот код.

    Когда к вам прибегают и говорят, что надо через 5 минут, для одного клиента/товара/должности и реквизита никакого вы завести не можете, т.к. в базе работает 100 человек.

    Да и религия не позволяет заводить для одного элемента реквизит.

    Так и рождаются такие решения. Рождаются как временные, но нет ничего более постоянного как что-то временное.

    Также часть «перлов» похожа на отладочный код, до которого не доросли руки переделать.

    Так что это статья не про то «как не надо писать», а «как потешить свое самолюбие».

    Попробуйте просто подумать «почему» писался этот код, а не «как» он писался.

    Сорри за возможно резкую критику.

    Reply
  2. adakabo

    [:]///////////////[:]

    Reply
  3. Арчибальд

    В первом примере вообще все нормально. В списке сотрудников работник на должности любовницы директора (стандартный код 00055) и люди с персональными окладами апостолов-основателей подлежат обработке по специфическим правилам.

    Reply
  4. СергейКа

    Если так писать, то никакой «обфускации» кода не потребуется 🙂

    Reply
  5. molot

    Пипец… Курящие зайцы 🙂

    На самом деле, было бы смешно, если бы не приходилось с этим сталкиваться…

    Вот вам, кстати, из типовой бухгалтерии (р. 1.6.12):

    ____________________________________________________

    Если Лев(Выборка.СчетЗатрат.Код, «2») = «26» Тогда

    Продолжить;

    Если ТаблицаПроизводства.Количество() > 0 Тогда

    Продолжить;

    КонецЕсли;

    КонецЕсли;

    ____________________________________________________

    Reply
  6. molot

    To Valet: уважаемый, причина, по которой пишут ТАКОЙ код — только одна: низкая производственная культура программистов, над чем, собственно, и стеб. По этой же причине жигули рассыпаются еще в автовозе, а интеллигенция мочится в подъездах :).

    Reply
  7. Valet

    (6) О производственной культуре программистов можно говорить, только если есть отдел из нескольких программистов. А наши реалии таковы, что есть программист (думаю большинство писавших код выше — не высокооплачиваемые) и есть руководство, которому до культуры дела нет.

    Попробуйте донести такому руководству, что нужно время на «рефакторинг».

    И поймете что придется вам жить с таким кодом до перехода на новую «платформу».

    А посмеяться можно и над инвалидами и над маленькими детьми — они тоже ходить не умеют. Может люди «второй день» конфигуратор открыли.

    Я к тому что нужно уважать своих коллег — сами ведь также писали первый раз.

    Reply
  8. biv75

    Ну вот например написанием типа

    «Если ТЗСотр.Сотрудник.Должность.Получить(НаДату).Код<>»00055″ тогда»

    сам бывает грешу, доводил недавно до ума налоговый учет на предприятии, а спец по налоговому учету, такая барышня… что легче дать, чем объяснять почему нет, построили вроде стройный налоговый регистр, все объекты учета красиво в него ложаться, а одно ОС попадает в регистр, а не должно, выяснил почему, вобщем чтобы всё красиво получилось надо ворошить всё с начала года, а ОС всё, выбыло, и движений по нему не будет, ну вобщем легче было подобное написать чем убеждать что надо всё сделать по уму.

    Reply
  9. O-Planet

    Лишний раз убедился, что над другими надо смеяться реже. Из всего, что приведено, немного удивил пример с суммой точек, хотя такое иногда приемлемо.

    Но особенно порадовал пример и комментарий «6. А что эта гениальная программа делает?» Так вот. Она делает как раз все правильно. И как раз так, чтобы такие как ты не поняли, что она делает 🙂

    Автору — минус.

    Reply
  10. Емельянов Алексей

    Никогда так не писал, даже когда только начинал работать, учился все-таки на программиста.

    А случаи всякие бывали, и когда за 5 минут надо было сделать! Даже такие что за 30 минут до закрытия налоговой прибегал бухгалер (а до налоговой еще ехать надо) и начинал истерично орать ВОТ ЭТО НАДО СРОЧНО!!!! Успевал как то…

    Reply
  11. Paranoid_Android

    O-Planet

    Не понял я…

    О великий проясни !!!

    Reply
  12. vasiliy_b

    (9,11) С таким подходом программирования «На скорую руку», в конечном итоге и получается не конфигурация, а собрание сочинений на скорую руку. А когда приходит другой программист, добрыми словами он ВАс уже не вспомнит. Когда прибегает кто-то со словами «надо срочно, через пять минут» надо посылать, ибо надо уважать себя, и свою профессию. Посылать всех подальше(начальство лучше культурно).т.к надо было раньше думать.

    Не забываем что работа программиста начинается с подписанного технического задания, и ни как по другому, это надо взять за правило.

    (10) а в пункте 6 уж ни как не выполняется:

    1. Обработка поставщиков.

    2. Читаемость кода.

    3. Весь код можно было написать в пару строк.

    4. если программист пытался запутать кого-то этим кодом, то у него ни чего не получилось. так как понадомится несколько минут, чтоб разобраться, что в ней происходит.

    в итоге вся функция бред.

    Reply
  13. O-Planet

    (12) А что не понятного-то? 🙂 Видно сразу, что ОбработкаПоставщиков() — не доделана. Первая ее часть — попытка написать что-то вроде «защиты», основанной на проверке даты. В цикле аффтор смотрел, как считается что-то, что он хотел посчитать. Закомментировал. Но цикл так и не заполнил. предполагаю, что эта процедура в модуле вообще ни где не вызывается. Автор ее просто не дописал.

    (13) Нормальная работа программиста у клиента — это всегда работа «на скорую руку». Но это не должно влиять на качество кода, потому что, как правило, все задачи и приемы их реализации — типовые, и делаются сотню раз.

    Reply
  14. smirnov.a

    Моя плакал…

    Reply
  15. Rusk51

    Если бы строители строили дома,как программисты пишут код, то любой

    дятел разрушил бы цивилизацию.

    Reply
  16. 0pex

    Есть у хомо-сапиенс такое «отличительное свойство», когда он [конкретный человек] постигает высоты какого-либо мастерства, то тех, кто только учится и допускает грубые ошибки, готов «съесть целиком», несмотря на то, что в своих ошибках он [конкретный человек] никогда не признается.

    Хочу заметить, что данное «свойство» (фишка, фича, баг — нужное подчеркнуть) чаще встречается именно у IT’шников.

    Не судите и не судимы будете.

    Reply
  17. 0pex

    Почему бы просто не улыбнуться и исправить ошибку? довести код до совершенства?

    Эгоизм и «звездная болезнь» не каждому позволяют это сделать видимо….

    Reply
  18. togomsk

    Не вижу ничего смешного.

    Таких примеров написания кода- пруд пруди, хотя бы на данном сайте.

    Впрочем, и сами типовые конфигурации от данных «образцов» недалеко ушли, к сожалению.

    Reply
  19. logarifm

    Блин, вам смешно, а у меня на работе директор департамента ИТ пишет такое:

    Если Пользователь.Код = «ВасяПупкин» Тогда

    фл = 1;

    Иначе

    фл = 0;

    КонецеЕсли;

    Это еще что, а это все в глобальном модуле. И зп у него бля от нють не маленька, везет же дятлам!!!

    Reply
  20. biv75

    (20) Ну нормально, кто не умеет писать, тот руководит )))

    Не давайте ему писать, пускай департаментом управляет

    Reply
  21. Поручик

    Пример реальной конфы. Я был просто в акуе. Вот прям так, всё сохранено, за исключением конкретных названий:

    Код
    Процедура ВводНового()
    Автор = "Создатель документа: " + Строка(ИмяПользователя());
    Подр = СоздатьОбъект("Справочник.Подразделения");
    Если ИмяПользователя() = "МенеджерХХХХХХХХХХХ" Тогда
    Подр.НайтиПоКоду("0002",0);
    ИмяРегПроекта = Подр.ТекущийЭлемент();
    ИначеЕсли ИмяПользователя() = "МенеджерХХХХХХХХХХХ" Тогда
    Если Вопрос("Имя проекта: YYYYYYY ?",1) = 1 Тогда
    Подр.НайтиПоКоду("0003",0);
    ИмяРегПроекта = Подр.ТекущийЭлемент();    
    Иначе
    Подр.НайтиПоКоду("0004",0);
    ИмяРегПроекта = Подр.ТекущийЭлемент();   
    КонецЕсли;
    ИначеЕсли ИмяПользователя() = "МенеджерTTTTTTTT" Тогда
    Подр.НайтиПоКоду("0001",0);
    ИмяРегПроекта = Подр.ТекущийЭлемент();
    ИначеЕсли ИмяПользователя() = "МенеджерNNNNNNNN" Тогда
    Подр.НайтиПоКоду("0004",0);
    ИмяРегПроекта = Подр.ТекущийЭлемент();
    ИначеЕсли ИмяПользователя() = "МенеджерCCCCCCCCCC" Тогда
    Подр.НайтиПоКоду("0005",0);
    ИмяРегПроекта = Подр.ТекущийЭлемент();
    ИначеЕсли (ИмяПользователя() = "Программист") или (ИмяПользователя() = "РуководительПроекта") Тогда  
    ВвестиЗначение(ИмяРегПроекта,"Введите имя регионального проекта","Справочник.Подразделения",,);
    КонецЕсли;
    КонецПроцедуры
    

    Показать полностью

    Reply
  22. Поручик

    Конфа написана в одном из наших подразделений, разраба никто не подгонял.

    Reply
  23. Душелов

    Вот http://infostart.ru/projects/3683/

    Яркий образчик, как не надо писать :))

    Reply
  24. Valet

    (23) Если «разраба» никто не подгонял и руки развязаны в плане дополнения структуры базы , то это не от большого ума.

    Увидел ИмяПользователя() и вспомнил еще один момент который способствует такому программированию. В 77 юзеру можно добавить один набор прав.

    И когда стоит вопрос «Всем манагерам можно, а одному нельзя», то начинается такая писанина. Как альтернатива «свой мех-м прав доступа» или в крайнем случае какой-нить справочник «Ролей» аля v8.

    Хотя встречались и такие наборы прав: ПраваИванова,ПраваПетрова итд.

    А вставки типа Если ИмяПользователя()=»Я» Тогда … я и сейчас использую для отладки «наживую».

    Reply
  25. Поручик

    >>> Хотя встречались и такие наборы прав: ПраваИванова,ПраваПетрова итд.

    Мне тоже встречались. Стоило в прошлом году отлучиться из холдинга, как один деятель из местного франя в тот же день воткнул в мою (нашу) конфу (8.1 причём) роль с фамилией гендиректора. Хорошо хоть меня быстро восстановили, а то представляю, что бы эти франчи ещё наваяли.

    Ммм, франчи это зло (С) миста.ру. Не люблю франей, хоть и сам не шик как блистаю.

    Reply
  26. vova56

    №4 написан правильно с т.з. минимальной набивки:

    СтрДлина(«do») < СтрДлина(«цикл»)

    СтрДлина(«Пока») < СтрДлина(«While»)

    и т.д.

    Reply
  27. vova56

    Категорически не согласен с 27. , т.к.

    СтрДлина(«ПолучитьСтроку») > СтрДлина(«GetLine»)

    Reply
  28. alexk-is

    (27) Надо пользоваться Телепатом или на крайний случай шаблонами, тогда проблем с набивкой будет меньше. Да, и копирование еще никто не отменял…

    Reply
  29. iohboet

    >>> Это еще что, а это все в глобальном модуле. И зп у него бля от нють не маленька, везет же дятлам!!!

    Да они как раз не дятлы ))) Это мы дятлы, пишем стройно, код оптимизируем, чтоб бегало все шустро и читаемо было… И за что???

    А они перебирают бумажки с места на место, трещат с «бизнесом» и получают в 2-3 раза больше))) Ну нахрена им стройный код? Жизнь удалась!

    Reply
  30. Paranoid_Android

    >А они перебирают бумажки с места на место, трещат с «бизнесом» и получают в 2-3 раза больше)))

    ну иди в менеджеры, кто тебя сдесь держит то ?

    Reply
  31. orbis

    Мы не знаем почему писался такой код и в какой обстановке. Поэтому не судите, да не судимы будете.

    Reply
  32. jsofthome1

    быстрее написать что-то временное

    Reply
  33. dima_fil77

    В нашей конфе нашёл такое:

    Число = Год(Дата)*10000+Месяц(Дата)*100+День(Дата)-(Год(Дата)*10000+Месяц(Дата)*100+20);// ДИМА — НАКУЯ ВСЁ ЭТО НУЖНО!!!

    Если Число > 0 Тогда

    Поправка = 0;

    Иначе

    Поправка = 1;

    КонецЕсли;

    //(20070821 Сделаем проверку проще

    Если День(Дата) > 20 Тогда

    Поправка = 0;

    Иначе

    Поправка = 1;

    КонецЕсли;

    //)20070821

    Reply
  34. ILM

    (34) А почему бы сделать не так?

    Поправка = ?(День(Дата) >20, 0, 1);

    Reply
  35. shard

    как вариант в обработке формирования прайса (ни на что более умное чем завернуть такое не хватило времени):

    стр=Дерево.Строки[Дерево.Строки.Количество()-1].Строки[Дерево.Строки[Дерево.Строки.Количество()-1].Строки.Количество()-1].строки[Дерево.Строки[Дерево.Строки.Количество()-1].Строки[Дерево.Строки[Дерево.Строки.Количество()-1].строки.Количество()-1].Строки.Количество()-1].Строки.Добавить();

    Reply
  36. rebuzx

    А что смешного в том что человек незнает как писать, а зарабатывать хочется. И потом это не проблема код пишущего, а проблема того кто пишущего на работу взял. Сколько платят столько и получают!

    Я видел и таких кто прекрасно использует синтаксис и при всём при этом допускает критичные ошибки.

    Reply
  37. alexmif

    Незнаю насчет скорой руки. Но даже в начале своей программисткой деятельности, когда узнал о существовании цикла (а было это ну очень давно, тогда ибм 286 стоила как волга), мне лень было копировать строчку и чего то еще в ней править… Можно позавидовать упорству, скопировать 30 строк и еще отредактировать каждую!!! Хотя грешу переменными типа «аа» и «а1» ))).

    Повеселился от души. Клевые перлы. Их нужно добавить в черную библию программирования )))).

    Reply
  38. alexmif

    (37) Нужно учиться — прежде чем начинать писать и тем более зарабатывать на этом деньги! А таких кто хочет писать и ничего не зочет изучать — вообще нечего делать в программировании. Вот так и создаются тупые алгоритмы, которые потом приходиться оптимизировать. А мало платят — иди работай на стройке. Там думать не нужно и денег заработаешь (если руки есть). Чтобы зарабатывать много, нужно для этого потрудиться много и на не всегда хорошей з/п, наработать опыт и знания.

    Reply
  39. rebuzx

    Кто то учился и научился,

    а кто то учился и думает что научился,

    а кто то неучился и научился,

    а кто то на стройке работает!

    Нужно быть реалистом!

    И как бы кто не возмущался подобный код был, есть и всегда будет и у нас и за границей!

    alexmif ты же не поёдешь работать программером за 10 тыс. в мес. на большое предприятие? Думаю нет. А тот кто пойдет будет всегда рожать такие коды — в большинстве случаев в одном лице это временное явление!

    И уж поверь, необязательно быть учёным программистом что бы зарабатывать деньги! Свяжись с большинством франчей, посмотри кто у них работает…… и зарабатывают ведь не плохо…

    Reply
  40. rebuzx

    «»Чтобы зарабатывать много, нужно для этого потрудиться много и на не всегда хорошей з/п, наработать опыт и знания.»» — вот имено за маленькую зп НАРАБОТАТЬ ОПЫТ, т.е. ищем полигон для испытаний, а потом на этом полигоне будь что будет, вас то там уже не будет, а пока опыт не наработан пишем как можем!!!

    Reply
  41. alexmif

    (т.е. ищем полигон для испытаний, а потом на этом полигоне будь что будет, вас то там уже не будет, а пока опыт не наработан пишем как можем!!!)

    Вы неправильно поняли. Я имел ввиду что нужно правильно писать код даже на низкой з/п. И набирать на этом опыт. Как правило при низких з/п времени больше, хотя не факт.

    Reply
  42. alexmif

    (alexmif ты же не поёдешь работать программером за 10 тыс. в мес. на большое предприятие? Думаю нет.)

    Я начинал с трех!!! Это была низкая з/п. Если ты не уважаешь свой труд — иди за такую з/п и рви ж… за бесплатно. Большое предприятие может позволить платить достойно и обязано это делать. Если не хочеть — пусть работает без специалистов. Когда предприятия начинают терять прибыль у них очень меняется взгляд на оплату программера. Многие люди думают что мы сидим за компом и занимаемся чем-то непонятным для них, т.е ниче не делам. Вот это в них необходимо переубедить.

    На самом деле наша профессия очень уникальна и спецефична. Нас очень мало, а если мы есче и будем так себя ценить и писать такой код, вообще вымрем ((.

    (Свяжись с большинством франчей, посмотри кто у них работает…… и зарабатывают ведь не плохо…)

    С ними тоже знаком. Только они долго там не работают, стараются найти постоянный заработок. Отсюда и их качество…

    Проблема не конечном итоге не з/п. А в том что если тебе нравиться программировать — занимайся и стремись к лудшему. Если не могешь писать нефиг тебе тут делать, займись стройкой (хотя там руки тож нужны) и денег мона больше заработать.

    У нас институт заканчивают по специальности «программист», а языки программирования даже не видели или уже сдали экзамен и забыли что это такое… Зачем туда тогда поступать? Чтобы писать «перлы» потом?

    С пятницей вас народ!

    Reply
  43. kiruha

    По поводу кода типа :

    Код=»7″ тогда

    В 7.7 нет предопределенных элементов.

    И что делать, когда нужен «жесткий» элемент, типа валюта Рубли,

    или страна «Россия».

    Можно конечно завести константу — Рубли и дергать базу постоянно.

    (кстати не из самой маленькой таблицы)

    Можно даже обозвать ВалютаБухУчета — чтоб враги не догадались,

    ну и конечно надо позаботиться , чтобы никто не смог поменять.

    Зато код красивый.

    Reply
  44. artbear

    (44) Я в подобных случаях делал по разному:

    0. обычные константы

    1. завожу в глобальнике переменную заглавными буквами типа

    Перем ОЧЕНЬ_НУЖНАЯ_КОНСТАНТА Экспорт;

    в конце глобальника инициализирую

    ОЧЕНЬ_НУЖНАЯ_КОНСТАНТА = «7»;

    2. делал класс 1С++ Общие.Константы (аналог как-то выкладывали на форуме 1С++), в котором инкапсулировал работу с константными значениями.

    Reply
  45. alexmif

    (45) есть ли смысл держать в памяти переменную, если она нужна для разового использования?

    У меня возникали случаи кода типа :

    Код=»7″ тогда

    В основном при обмене данными между различными базами с разными именами и кодами одних складов. Приходилось их решать подобным образом.

    Можно конечно создать справочник соответствий, но стоит ли ради 3-4 наименований. Проще изменить или добавить при необходимости в обработке. Тем более они как правило внешние. И изменять саму базу не нужно.

    Reply
  46. artbear

    (46) Главное в коде — это возможность нормально читать его для полного понимания.

    Поэтому внятные имена различных констант, переменных, методов и т.д. имеют важнейшее значение.

    Reply
  47. alexmif

    (48) Полностью согласен. Очень удобно в этом плане использовать «телепата».

    Reply
  48. Майкопчанин

    Мне рассказывали байку: В одном московском ИВЦ, не буду говорить в каком, еще в советские времена, решили оценивать труд программистов по количеству строк написанного кода. Очень быстро это привело к исчезновению циклов…

    Reply
  49. Арчибальд

    (49)Писал в середине 70-х для Госплана на Фортране. 50 коп./строчка. Были циклы, точно помню.

    Reply
  50. Майкопчанин

    Вот, кстати, у себя нашел. Была объективная причина так поступить.

    //учтем ***** таким диким способом. Завтра в отпуск …

    Если (СокрЛП(полеКлиент.Наименование) = «************»)

    и (НаДату>’01.01.2009′) Тогда

    проценты = проценты — 14093.48;

    КонецЕсли;

    Сейчас вернулся к отчету и вспомнил об этой статье. Народ тут совершенно правильно писал, что под давлением обстоятельств и не такую ересь напишешь.

    (50) Это было не в Госплане. 🙂 А смыл этой байки в том, что программисты преднамеренно писали не оптимальный код, раздувая его, так как были материально в этом заинтересованы… Циклов, конечно, полностью избежать нельзя, но простенький цикл с десятком итераций можно и линейным алгоритмом расписать 🙂

    Reply
  51. artbear

    (51) Давно известно, что у программеров, как у менеджеров и т.д., нельзя/очень опасно вводить какие-либо количественные оценки их труда 🙂

    Reply
  52. LavS

    Повеселило))) А ведь мне тоже рассказывали реальный пример… Что вдруг перестали остатки сходиться по одной организации… Долго разбирались из-за чего это… Оказалось, что программист в модуле учета партий написал, что-то вроде:

    Если Организация.Наименование <> «НазваниеОрганизации» Тогда

    Возврат;

    КонецЕсли;

    А пользователи изменили название организации… Но сколько времени ушло на поиск ошибки…

    Хотя и сам грешен… Когда начинал, помню когда в коде прописывал настройку прав доступа, то в одном месте проверялось на имя пользователя «Острогоржск», а пользователя звали «Острогорск»… И долго я искал, почему у них права не работают))) Самому аж стыдно…

    Reply
  53. odekolon

    Ребят, сам вот только вчера писал отчет, где привязывался к конкретным наименованиям. Научил зам.гл.бух. одного из юр.лиц писать задания хоть в какой-то форме, а она уперто пишет последовательность действий так, что приходится вылавливать конкретные элементы по наименованию. Заводить реквизит с типом «перечисление» лениво, учитывая, что эта сумасшедшая логика у нее превращается в стройную картину раза с 5-го (после того, как посмотрит на конкретные цифры). Самому разбираться в логике, а не тупо действовать предложенному алгоритму, нету времени…

    PS. А насчет кривости алгоритмов… Купите какую-нибудь базу у Белгородской конторы ЦПС и поймете, что перечисленное в теме — это только цветочки. Тексты абсолютно нечитаемы, а формочки являются чудовищным скопищем всего на свете. Документация под час крайне скудна и непонятна. Цены фантастические, нереальные.

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *