Антидот




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

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

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

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

89 Comments

  1. strrike

    первонакх ))

    Интересно, в эту статью понабегут?)

    Reply
  2. genayo

    Про имена переменных — вы приводите слишком примитивный пример, и на нём основываете дальнейшее рассуждения. В чём разница, по вашему, между X = НайтиОбъектПоКоду(«12345») И ЭлементСправочникаНоменклатура = НайтиОбъектПоКоду(«12345»)?

    Про копипаст — я даже не знаю, вы это серьёзно?

    Reply
  3. Vladimir Litvinenko
    Делайте со мной что хотите, но будь я руководителем разработки такой ответственной конфигурации, я бы просто заставил… СКОПИРОВАТЬ КОД.

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

    Если это троллинг, то не хватает предложения вообще отказаться от общих модулей. И ссылки на партнёрский форум, где Вы предлагаете это сделать разработчикам типовых конфигураций, а они записывают Ваше пожелание ))

    Reply
  4. itriot11
    надо внести какое-нибудь плевое изменение в модуль проведения одного из документов. Реквизит регистра заполнить по-своему или контроль подправить

    На мой взгляд, пример не самый подходящий, не говорит о сложности доработки. Поправьте меня, если я ошибаюсь, но задачу в приведенную Вами можно решить подписками на события буквально за минуты.

    Про обновление — тут все таки стоит указывать контекст…Например, раз разобравшись в параметрах формирования движений Учета затрат(УПП), потом совершенно не составит труда поддерживать этот функционал. Зато можем надеется, что после изучения механизма, наш специалист поддержки узнает, что есть что-то большее, чем примеры из методички, а далее сможет выработать навык работы со сложным кодом.

    В целом, Ваш пример о частной, мелкой задаче. Давайте попробуем рассмотреть что-то покрупнее, что будет касаться не только одного реквизита одного из документов? Боюсь, вывод может оказаться не таким однозначным как сейчас Вы привели))

    Reply
  5. dachnik

    (2)копипаст — очень неудачный пример.

    действительно, использование одного и того же обработчика из общего модуля для проведения разных документов существенно усложняет изменение без нарушения работы всех механизмов проведения, ссылающихся на общую процедуру. Поэтому разработчик должен хорошо подумать над тем, как должна выглядеть эта глобальная процедура, какой массив параметров передается на входе и выходе. В большинстве случаев проблема не в общей процедуре как таковой, а в логике ее работы. очень часто вижу говнокод от самой 1С, где в общих процедурах массив переменных обрабатывается в контексте данных документа или еще хуже, формы.

    Reply
  6. Evg-Lylyk

    Не понял что хотел донести автор. Я художник я так вижу )

    Reply
  7. genayo

    (8) А, понял, вы считаете, что начинающему полезно держать весь контекст в своей голове. Так он разовьёт свою память, и станет очень умным программистом.

    Reply
  8. nyam-nyam

    (3)Да троллинг и есть. Решил поддеть всех кто с его «СуммаПервогоИВторого=Первое*Второе;» не согласился в предыдущей статье. 🙂

    Типа:

    Все говорят, что «копипастить» нельзя,

    Все говорят, что «копипастить» нельзя,

    Все говорят, что «копипастить» нельзя,

    А я говорю, что буду.

    Reply
  9. genayo

    (11) Всё-же, у вас очень неортодоксальные подходы к программированию. Код, написанный таким начинающим программистом, будет легко читаем только программисту, обученному по такой-же системе.

    Reply
  10. acanta

    Это скорее квантование — определение минимального объема кода, допустимого для копипаста.

    Reply
  11. ADirks

    (11) Так он учится раздувать контекст до размеров, которые не помещаются ни в чьей голове, кроме его собственной.

    Да он же реально крут!

    P.S. оч. понравилась зелёненькая надпись внизу

    Reply
  12. Vladimir Litvinenko

    (7) Причём здесь пользователи? Мы говорим об информационной системе и ориентироваться нужно на количество объектов в информационной системе. Для пользователя мы создаём UI.

    И откуда взялась цифра 99%? Почему не 91%?

    Возьмём ваш же пример. В типовых конфигурациях, по крайней мере семейства ERP, контроль остатков построен очень хорошо. Метод ПроведениеСервер.ВыполнитьКонтрольРезультатовПроведения — это ядро. Модификация, как правило, делается в одном месте конфигурации. По каким регистрам выполнять контроль при проведении конкретного документа определяется в методе СформироватьСписокРегистровДляКонтроля() модуля документа.

    По поводу наименования переменных есть соглашение https://its.1c.ru/db/v8std#content:2149184103:hdoc и если не включать дурачка, приводя в качестве примера тавтологию, то его следует придерживаться. Тавтология также не рекомендуется в соседнем разделе. Поэтому приводить тавтологию в качестве примера того, к чему может привести разработка по стандартам, также некорректно.

    Немного жаль, что это не троллинг. Было бы забавно )) Но своего читателя Вы найдёте конечно )

    Reply
  13. burmsergey
    Потому что человека с опытом вряд ли может удивить и, тем более, возмутить что-либо в чужом коде.

    Насчёт удивить — согласен. А вот по поводу возмутить — скорее, наоборот.

    Reply
  14. burmsergey

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

    // то он нисколько не потеряет в читабельности.

    В читабельности — может быть.

    А вот в понимаемости — не думаю (мягко говоря)!

    P.S.

    Это откуда такая мысль ?

    Reply
  15. profiprog1c

    Иногда человек пытается сказать что-то умное, чтобы казаться умным, но всем тут же становится понятно, что он глуп. Тут все также — очередной сферический конь в вакууме.

    Reply
  16. acanta

    В конфигурации 1с все совпадения с реальностью случайны и непредумышлены.

    Reply
  17. genayo

    (18) Может ли хороший программист быть дураком?

    Reply
  18. genayo

    (17) Источник — голова автора. Больше источников не обнаружено.

    Reply
  19. Vovan1975

    (20) Специалист подобен флюсу — он односторонен. (с)К.Прутков

    Reply
  20. Vovan1975

    (17) меня больше интересует вопрос что автор слышал про обфускаторы

    Reply
  21. brr

    А потом во всех местах копипасты нужно будет поменять одну строчку. Автор убейся об стену.

    Reply
  22. sergathome

    (15) и это ещё, скажИте, не троллинг:

    //Получение данных из документа

    //Формирование движений по регистру

    //Блокировка

    //Запись движений по регистру

    //Контроль отрицательных остатков

    Ну не может эта кость просто так выпасть.

    Reply
  23. Vovan1975

    (24) в тему призываются страдальцы по ндс 20%

    Reply
  24. dachnik

    (8) Буквенные переменные использую только очень локально, в основном как счетчики в циклах, либо вспомогательные переменные при расчетах, о которых можно забыть сразу же при переходе к следующему логическому куску процедуры/функции.

    Reply
  25. Jkero

    А теперь представим, приходит новый прогер с задачей разобраться, что с этим регистром не так. И ему надо, вместо одного общего модуля просмотреть все модули документов, которые являются регистратором. А они одинаковые, отличаются только на 5-10 строк, которые ему нужно найти. Думаю, он не будет рад такой схеме.

    Reply
  26. Petr54-ru

    Я стараюсь пользоваться стандартами кодирования, описанные на ИТС (тут уже в каментах была туда ссылка) и внимать методическим рекомендациям с ИТС.

    Еще я в комментариях в коду описываю бизнес-логику (что конкретно эта фигня должна делать и зачем это нужно). И не вычищаю рабочие комментарии описывающие поведение этого куска кода. Заглушки и служебные комментарии вычищаю.

    И еще я стараюсь делать свой код дружественным к читателю, а не к платформе или железу. Будут проблемы с быстродействием, буду их решать — не вылезут такие проблемы — не буду решать. Хаз, хаз и в продакшен. Ну вы поняли.

    Все из-за того, что мне скорее всего и придется свой код модифицировать. Не всегда получается у живого человека с первого раза получить исчерпывающее описание нужного ему рожна.

    Меня чужой говнокод не напрягает, и я своего тоже не стесняюсь. Работает — не трогай! Вот и все что могу сказать про эти «coding standards».

    Reply
  27. herfis

    Что из этого следует.

    Если вы разработчик-одиночка и не работаете дольше года на одном проекте, то вам сюда.

    Reply
  28. starik-2005

    Предположу, что народ, который не совсем согласен со статьей, просто не смог преобразовать логическое выражение в «(ПН И ПНП) ИЛИ (РН И РНП)». Но религия — такая штука. Предположу, что автор, упомянув Дейкстру, сам является адептом религии «ГОТО — это плохо». Но, конечно, не факт.

    Reply
  29. starik-2005

    (29)

    Меня чужой говнокод не напрягает, и я своего тоже не стесняюсь. Работает — не трогай! Вот и все что могу сказать про эти «coding standards».

    Хорошее solution, как сказал бы какой-нибудь любитель best practice.

    Вообще, стандарты, которых стоило бы придерживаться при программировании, достаточно просты и сформулированы уже не менее тысячи лет логиками древности:

    1. Оккам — не стоит плодить сущности без необходимости. Если они есть — код, каким бы красивым ни был, — не так хорош, как без них. И чем больше бессмысленных сущностей — тем хуже код.

    2. Вместе с тем лучшее — враг хорошего. Да, Шекспиры и Вольтеры жили чуть позднее, но первоисточник подобного подхода сокрыт временем куда более древним. Данный момент может вступать в противоречие с первым пунктом, но золотая середина всегда разумнее бесконечной замороченности на тему поисков лишнего. Сделай хорошо с может быть небольшим количеством лишнего — и это будет куда лучше бесконечного выкидывания лишнего из кода до передачи его в «продакшн».

    3. Все гениальное — просто. Этак Геббельс перефразировал (упростил) фразу да Винчи, который тоже, предположу, не сам оное придумал. Отсюда как бы мораль: не усложняй простое, старайся упростить сложное.

    4. Глаза боятся — руки делают. Главное — начать. Ну и сотня похожих фраз. Тут мораль проста — лучше начать делать что-то, чем год думать о том, как «упростить». Часто за год все сильно усложняется, т.е. если не делать — не перейдешь к отладке, которая и занимает основное время разработки. Все эти TDD и прочие тесты — это попытка вкорячить отладку в код, автоматизировать ее каким-то образом и потом передть обратно в виде многостраничных инцидентов. Тоже, конечно, вариант.

    5… Могу много написать, но может быть потом статью накатаю.

    Reply
  30. mkalimulin

    (31) Нет, конечно. Я адепт религии использовать текст для программирования — это плохо )))

    Reply
  31. TODD22
    Этот типичный пример копирования кода я взял из одной своей работы.

    Клавишу «шифт» так и не завезли?

    «Сон разума рождает чудовищ»

    но будь я руководителем разработки такой ответственной конфигурации, я бы просто заставил… СКОПИРОВАТЬ КОД.

    По этому видимо и не светит…. стать руководителем такой ответственной конфигурации… тут бы шифт на клавиатуре освоить и имена переменных.

    Reply
  32. mkalimulin

    (35) Да не люблю я «КонецЕсли», вы же знаете. Выглядит уродливо )))

    Reply
  33. genayo

    (36) Э… Да вы эстет, однако.

    Reply
  34. bulpi

    1)Минусы принципиально не ставлю, а то бы поставил.

    2)Автор поставляет материал для очередного продолжения «Ректального программирования». Спасибо ему!

    3)

    но будь я руководителем разработки такой ответственной конфигурации, я бы просто заставил… СКОПИРОВАТЬ КОД.

    А я бы на йух послал немедленно и свалил.

    Reply
  35. mkalimulin

    (38) Это хорошо, что вы такой принципиальный.

    А что по-вашему важнее? Сделать продукт, который будет удобен узкой группе разработчиков продукта или тем, кто его поддерживает?

    Reply
  36. itriot11

    (39) судя по обратной связи к публикации, похоже, что в узкой группе разработчиков находитесь Вы)

    Reply
  37. mkalimulin

    (40) На вопрос есть что ответить?

    Reply
  38. itriot11

    (41) Я Ваш вопрос воспринимаю как — «что по-вашему важнее? Сделать продукт, который будет удобен разработчикам придерживающихся общих стандартов или тем, кто солидарен с подходом приведенным в публикации?» Иначе, увы, не выходит. Так вот при такой трактовке, вынужден выбрать первый вариант. Я б не прочь изменить мнение, и даже отчасти понимаю ход мысли, да только аргументы, на мой взгляд, у Вас слабоваты.

    Reply
  39. itriot11

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

    Reply
  40. pm74

    (31)

    преобразовать логическое выражение в «(ПН И ПНП) ИЛИ (РН И РНП)

    не равносильно исходному при

    ПН = Истина; ПНП = Истина; РН = Истина; РНП = Ложь;
    Шаблон = ((ПН И ПНП) И (РН И РНП)) ИЛИ (( ПН = Ложь ) И (РН И РНП)) ИЛИ ((ПН И ПНП) И (РН = Ложь));
    Сообщить(«Шаблон =  » + Шаблон);  // Ложь
    Выражение1 = (ПН И ПНП) ИЛИ (РН И РНП);
    Сообщить(«Выражение1 =  » + Выражение1); // Истина
    
    //  как и  при  ПН = Истина; ПНП = Ложь;  РН = Истина; РНП = Истина;
    

    Показать

    з.ы. не особо силен в БА поэтому лучше чем (aa1bb1)+(!abb1)+(!baa1) => bb1(!a+a1) + !baa1 ничего в голову не пришло

    или так (НЕ РН ИЛИ РНП) И (НЕ ПН ИЛИ ПНП) И (РН И РНП ИЛИ ПН И ПНП)

    Reply
  41. Dem1urg

    (32) А накатайте!

    Reply
  42. for_sale

    (23)

    ему не нужно, он код пишет сразу обфусцированным)

    Reply
  43. user623969_dusa

    (8) никогда Х не используется. полностью обезличенные переменные только для итераторов циклов. в остальных переменная должна содержать свой тип.. изучите программирование на java или c очень полезно для разнообразия

    Reply
  44. starik-2005

    (52) накатал. Думаю, сегодня ее отмодерируют )))

    Reply
  45. starik-2005

    (69) https://infostart.ru/public/987376/ — вот оно! )))

    Reply
  46. bulpi

    (39)

    ТОЛКОВО написанная конфигурация удобна для всех :

    1)разработчиков

    2)поддержки

    3)главное — пользователей.

    Ни одной типовой конфигурации, толково написанной, я не видел. Думаю, там задачи другие — не сделать толковое ПО, а срубить бабла.

    Reply
  47. for_sale

    (30)

    Эту статью автор видел. Это от неё у него подгорело так, что уже третью пишет)

    Reply
  48. herfis

    (78) Неправда. Он давно уже «топит» в этом направлении. Что мол у правильного программиста должен быть особый мозг и правильный код должен быть заточен под этот особый мозг. Даже циркули какие-то выкладывал для отсеивания неправильных программистов. Шутка 🙂

    Но пикантность в том, что частично постулаты с этой статьей пересекаются, поэтому я про нее и вспомнил 🙂

    Reply
  49. for_sale

    (81)

    Вот циркуль мне понравился, там хотя бы смешно было 🙂 А тут прям как фильм ужасов!

    Reply
  50. MCV

    (15)

    По поводу наименования переменных есть соглашение https://its.1c.ru/db/v8std#content:2149184103:hdoc и если не включать дурачка, приводя в качестве примера тавтологию, то его следует придерживаться.

    +1, Именно так.

    Reply
  51. starik-2005

    (124)

    …приводя в качестве примера тавтологию, то его следует придерживаться.

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

    Это, однозначно, не плохо. Но если предметной области нет? Вот у меня есть запрос, который возвращает кучу интересного. И нет там предметной области — там совокупность предметов, явлений и прочего. Почему бы мне не назвать выборку «Выборка», а выборку второго уровня — «Выборка2»?

    Или, например, у меня есть универсальная процедура для работы с деревом. Она рекурсивна, в нее передается произвольное дерево. Почему я не могу итератор назвать «ст»? Для меня это очень хорошо и предметно говорит о строке дерева, но при этом мне не нужно писать длинные слова «СтрокаДерева», т.к. внутри у меня есть много всего интересного с этой строкой.

    Притягивать имя переменной за уши к предметной области иногда разумно, особенно начинающим программистам. Но далеко не всегда это оправдано, т.к. в большом и сложном коде мне куда проще разобраться при наличии в итераторах вложенных циклов индекса вложенности (например «ст3»), чем в случае, если итератор будет называться по предметной области (СтрокаДерева -> ПодстрокаСтрокиДереваПервогоУровня -> ПодстрокаПодстрокиДереваВторойУровень — разработчик пока читать эту муть будет — помрет сто раз).

    НО! Всегда плохой код можно прикрыть высокими стандартами разработки. К сожалению не нашел примера кода, чтобы посмотреть, на сколько он хорош по существу, а не по стандарту )))

    Reply
  52. Светлый ум

    (69) а неплохо накатал!)

    Reply
  53. ADirks

    (126) Когда пишешь универсальный алгоритм для работы с деревом, то термины Дерево и СтрокаДерева (ст — вполне понятно, и даже предпочтительно) являются терминами предметной области. Так что, всё по стандарту.

    Reply
  54. MCV

    (126)

    Ключевое слово там было «придерживаться» 😉

    Если нет предметной области , то и флаг Вам в творческие руки для образования этих имен.

    Reply
  55. herfis

    Лично я не люблю использовать сокращения в именах переменных и методов. Да и в коде типовых конфигураций «резкие» сокращения обычно не используются — в итоге код органичнее выглядит.

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

    Я вообще считаю, что выбор имен — это своего рода искусство 🙂 Потому что в идеале имя переменной должно быть без сокращений, но при этом не слишком длинное. А для этого нужно изящно учитывать контекст и постоянно контролировать читабельность. С именами методов легче — им можно и подлиннее/пополнее имена давать. Ессно, общепринятые сокращения или принятые в контексте кодируемой бизнес-логики использовать можно. Читабельность — главный критерий. Что такое читабельность? Читабельность — это насколько мало придется морщить мозг вашему коллеге (не вам!), разбирая ваш код.

    Да, важное дополнение — все вышесказанное касается кодирования бизнес-логики. На математические и системные алгоритмы это ессно нет смысла натягивать. Но мы же про 1С говорим. А 99,99% кода 1с-программиста — это чистая бизнес-логика.

    Reply
  56. starik-2005

    (130)

    Лично я не люблю использовать сокращения в именах переменных и методов.

    Лично я «люблю» использовать сокращения в итераторах и временных переменных. Какие-то относительно стабильные переменные внутри кода «люблю» называть «лапидарно«.

    ЗЫ: да, а еще я не люблю называть результат результатом, а люблю называть рез’ом, то же самое с «ДополнительныеПараметры» — слишком длинно. Достаточно «доп». Если кому-то такие сокращения непонятны, то я просто снимаю шляпу перед интеллектуальной нищетой этих товарищей.

    Reply
  57. herfis

    (131)

    Лично я «люблю» использовать сокращения в итераторах и временных переменных.

    Избегаю и там тоже. Если это временная переменная в текущем скоупе, добавляю впереди слово «Текущий»/»Текущая».

    Если это итератор — стараюсь именовать так, чтобы можно было понять, что он итерирует.

    ЗЫ. Всегда пишу полностью «Результат» и «ДополнительныеПараметры» 🙂 Я снисходителен к чужим слабостям 🙂

    Reply
  58. starik-2005

    (132) есть такой диагноз — маниакальный педантизм. Да и вообще фанатизм в любом деле несет больше вреда, чем пользы)))

    Reply
  59. herfis

    (133) У программистов часто подобные профдеформации 🙂 Но я тихий пациент, и снисходителен к не познавшим дзен. Какой от меня вред? Сплошная польза 🙂

    Reply
  60. genayo

    (126) А если переменные выборки назвать X и Y, то как, нормально?

    Reply
  61. mkalimulin

    (134) Ээээ… программирование эта такая штука…

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

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

    У каждого программиста свое сальдо. Оно может быть как дебетовым, так и кредитовым. Подумайте об этом.

    Reply
  62. herfis

    (136) Уже думал. Видимо слишком много и слишком долго. Ибо в итоге получилось то, что получилось 🙂

    Reply
  63. mkalimulin

    (137) Программист сел, посидел, вынес в общий модуль алгоритмы проведения документов. И создал для десятков тысяч других пограммистов необходимость выполнять тупую работу.

    Согласны?

    Reply
  64. herfis

    (138) Нет. И даже обсуждать эту тему с вами не хочу 🙂 Я достаточно уже наблюдал подобных дискуссий с вашим участием.

    Вы любитель натягивать сову на глобус (сводить все трейдоффы к крайним случаям). Только время потратим и все равно при своем останемся.

    Reply
  65. genayo

    (138) И дал возможность миллионам пользователей оперативно получать обновления конфигураций в соответствии с изменяющимся законодательством не прибегая к услугам программиста. Ну, это в теории. Реальность типовых от 1С не такова, к сожалению 🙂

    Reply
  66. starik-2005

    (135)

    А если переменные выборки назвать X и Y, то как, нормально?

    Если выбирать декартовы координаты, то даже очень нормально, но, боюсь, некоторые любители стандартов такое не смогут оценить )))

    Reply
  67. starik-2005

    (139)

    сводить все трейдоффы к крайним случаям

    А вот это, кстати, очень верное замечание.

    Reply
  68. genayo

    (141) Ну не надо уподобляться автору, рассматривая только крайние случаи 🙂

    Reply
  69. genayo

    (144) С алгоритмами в общих модулях разработчики решения быстрее внесут изменения и выпустят работающий продукт. И вот такое дело — если кастомизировать документы нужно 1-2% пользователей, стоит ли с коммерческой точки зрения думать о них?

    Reply
  70. mkalimulin

    (145) На очередном цикле обновления они съэкономят 10 человеко-часов, но их партнёры за этот же период потратят лишних 10 000 человеко-часов. Где здесь профит?

    Reply
  71. genayo

    (146) Какой профит, вы о чём? Партнёров никто не заставлял кастомизировать так, чтобы при обновлении были проблемы.

    Reply
  72. mkalimulin

    (147) Вы теряете нить разговора. Затраты времени будут при кастомизации, а не при обновлении.

    Reply
  73. genayo

    (148) Значит, в (146) я вас не так понял. Хорошо, тогда другой вопрос — 10 000 часов вы откуда взяли? И сколько часов будет потрачено, если бы процедуры были в модулях проведения? Почему думаете, что при общих модулях в разы больше, собственный опыт или есть какая-то статистика?

    Reply
  74. mkalimulin

    (149) Если процедуры продублированы, то времени будет потрачено МЕНЬШЕ. Тут даже не сильно важно насколько меньше. Разработчиков типовых, условно говоря, 10 человек. А внедренцев 10 000. Вот это соотношение важно. Если найдется какой-то способ съэкономить хотя бы две минуты рабочего времени внедренца, то уже имеет смысл потратить МЕСЯЦ работы одного разработчика 1С на реализацию этого способа. Экосистема 1С в целом от этого выиграет. Как вы думаете — дополнительного месяца работы разработчику 1С хватит на то чтобы внести изменения не в один модуль, а в пять-шесть?

    Reply
  75. itriot11

    (149) Да оставьте автора в покое) Образ о себе он уже сформировал — специалист тех поддержки, который меняет пару символов в течении 10 000 человеко-часов, в чем виноваты разработчики преувеличивающие значение своего продукта. Предлагаю просто набраться терпения и подождать выхода следующей статьи от Максима.

    P.S. 10 000 и 10 — почему именно так и очень часто? Это какие-то сакральное числа?)

    Reply
  76. genayo

    (150) Если разработчик партнёра не знаком с устройством проведения документов в типовой конфигурации — да, в первый раз им будет потрачено больше времени. Но во все последующие — столько-же. Развивают типовые решения на 1С не партнёры, а разработчики. 10 часов разработчика должны давать больше развитию решения, чем 10 000 часов партнёра. Еще раз оговорюсь, в типовых от 1С пока не так.

    Reply
  77. mkalimulin

    (154) Этот спор можно продолжать бесконечно. Тут только надо понимать, что если доводить вашу позицию до логического конца, то мы получим закрытый код и бинарные файлы от разработчиков. Если цель — прийти сюда, тогда да, дублирование кода бессмысленно.

    Reply
  78. mkalimulin

    (153) Они делятся на 10 без остатка )))

    А кто такой Максим?

    Reply
  79. itriot11

    (156) Извините, Михаил. Меня проглючело к концу недели. Конечно Вас имел ввиду.

    Reply
  80. mkalimulin

    (157) Следующая статья будет немного о другом. И не такая спорная. Но тему, конечно буду развивать в дальнейшем.

    Reply
  81. genayo

    (155) Как вам удаётся из таких посылок делать столь глобальные выводы — загадка…

    Reply
  82. mkalimulin

    (165) А что тут сложного? Если вы говорите, что внедренцы не должны лезть в код, то логично же этот код закрыть.

    Reply
  83. genayo

    (166) Это где я такое говорил? Между строк читаете что-ли? «Лезть в код» можно по-разному, благо платформа теперь много вариантов позволяет…

    Reply
  84. mkalimulin

    (167) Как только вы полезете в код. Неважно зачем. Вы начнете тратить рабочее время. Это неочевидно?

    Reply
  85. genayo

    (168) Я ННП о чём вы 🙁 Но очень интересно.

    Reply
  86. TODD22

    (165)

    Как вам удаётся из таких посылок делать столь глобальные выводы — загадка…

    Он вроде обещал «поделится» в прошлой теме, так и не отсыпал?

    Reply
  87. mkalimulin

    (170) Вас это убьет )))

    Reply
  88. mkalimulin

    (169) Ничего сложного. Код открыт. Широкие народные массы лезут в код. Они при этом тратят свое время?

    Reply
  89. genayo

    (172) Я потерял нить разговора. Поэтому просто предлагаю вам переписать типовую УТ 11 без использования общих модулей. Когда закончите — продолжим.

    Reply

Leave a Comment

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