<?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='\
первонакх))Интересно, в эту статью понабегут?)
Про имена переменных — вы приводите слишком примитивный пример, и на нём основываете дальнейшее рассуждения. В чём разница, по вашему, между X = НайтиОбъектПоКоду(«12345») И ЭлементСправочникаНоменклатура = НайтиОбъектПоКоду(«12345»)?
Про копипаст — я даже не знаю, вы это серьёзно?
Не покидает ощущение, что это троллинг, а не всерьёз, так как примеры из разряда крайностей.
Если это троллинг, то не хватает предложения вообще отказаться от общих модулей. И ссылки на партнёрский форум, где Вы предлагаете это сделать разработчикам типовых конфигураций, а они записывают Ваше пожелание ))
На мой взгляд, пример не самый подходящий, не говорит о сложности доработки. Поправьте меня, если я ошибаюсь, но задачу в приведенную Вами можно решить подписками на события буквально за минуты.
Про обновление — тут все таки стоит указывать контекст…Например, раз разобравшись в параметрах формирования движений Учета затрат(УПП), потом совершенно не составит труда поддерживать этот функционал. Зато можем надеется, что после изучения механизма, наш специалист поддержки узнает, что есть что-то большее, чем примеры из методички, а далее сможет выработать навык работы со сложным кодом.
В целом, Ваш пример о частной, мелкой задаче. Давайте попробуем рассмотреть что-то покрупнее, что будет касаться не только одного реквизита одного из документов? Боюсь, вывод может оказаться не таким однозначным как сейчас Вы привели))
(2)копипаст — очень неудачный пример.
действительно, использование одного и того же обработчика из общего модуля для проведения разных документов существенно усложняет изменение без нарушения работы всех механизмов проведения, ссылающихся на общую процедуру. Поэтому разработчик должен хорошо подумать над тем, как должна выглядеть эта глобальная процедура, какой массив параметров передается на входе и выходе. В большинстве случаев проблема не в общей процедуре как таковой, а в логике ее работы. очень часто вижу говнокод от самой 1С, где в общих процедурах массив переменных обрабатывается в контексте данных документа или еще хуже, формы.
Не понял что хотел донести автор. Я художник я так вижу )
(8) А, понял, вы считаете, что начинающему полезно держать весь контекст в своей голове. Так он разовьёт свою память, и станет очень умным программистом.
(3)Да троллинг и есть. Решил поддеть всех кто с его «СуммаПервогоИВторого=Первое*Второе;» не согласился в предыдущей статье. 🙂
Типа:
Все говорят, что «копипастить» нельзя,
Все говорят, что «копипастить» нельзя,
Все говорят, что «копипастить» нельзя,
А я говорю, что буду.
(11) Всё-же, у вас очень неортодоксальные подходы к программированию. Код, написанный таким начинающим программистом, будет легко читаем только программисту, обученному по такой-же системе.
Это скорее квантование — определение минимального объема кода, допустимого для копипаста.
(11) Так он учится раздувать контекст до размеров, которые не помещаются ни в чьей голове, кроме его собственной.
Да он же реально крут!
P.S. оч. понравилась зелёненькая надпись внизу
(7) Причём здесь пользователи? Мы говорим об информационной системе и ориентироваться нужно на количество объектов в информационной системе. Для пользователя мы создаём UI.
И откуда взялась цифра 99%? Почему не 91%?
Возьмём ваш же пример. В типовых конфигурациях, по крайней мере семейства ERP, контроль остатков построен очень хорошо. Метод ПроведениеСервер.ВыполнитьКонтрольРезультатовПроведения — это ядро. Модификация, как правило, делается в одном месте конфигурации. По каким регистрам выполнять контроль при проведении конкретного документа определяется в методе СформироватьСписокРегистровДляКонтроля() модуля документа.
По поводу наименования переменных есть соглашениеhttps://its.1c.ru/db/v8std#content:2149184103:hdoc и если не включать дурачка, приводя в качестве примера тавтологию, то его следует придерживаться. Тавтология также не рекомендуется в соседнем разделе. Поэтому приводить тавтологию в качестве примера того, к чему может привести разработка по стандартам, также некорректно.
Немного жаль, что это не троллинг. Было бы забавно )) Но своего читателя Вы найдёте конечно )
Насчёт удивить — согласен. А вот по поводу возмутить — скорее, наоборот.
// Идеальный код должен обладать таким свойством, что если взять и заменить в нем все имена переменных на случайно подобранные,
// то он нисколько не потеряет в читабельности.
В читабельности — может быть.
А вот в понимаемости — не думаю (мягко говоря)!
P.S.
Это откуда такая мысль ?
Иногда человек пытается сказать что-то умное, чтобы казаться умным, но всем тут же становится понятно, что он глуп. Тут все также — очередной сферический конь в вакууме.
В конфигурации 1с все совпадения с реальностью случайны и непредумышлены.
(18) Может ли хороший программист быть дураком?
(17) Источник — голова автора. Больше источников не обнаружено.
(20) Специалист подобен флюсу — он односторонен. (с)К.Прутков
(17) меня больше интересует вопрос что автор слышал про обфускаторы
А потом во всех местах копипасты нужно будет поменять одну строчку. Автор убейся об стену.
(15) и это ещё, скажИте, не троллинг:
//Формирование движений по регистру
//Блокировка
//Запись движений по регистру
//Контроль отрицательных остатков
Ну не может эта кость просто так выпасть.
(24) в тему призываются страдальцы по ндс 20%
(8) Буквенные переменные использую только очень локально, в основном как счетчики в циклах, либо вспомогательные переменные при расчетах, о которых можно забыть сразу же при переходе к следующему логическому куску процедуры/функции.
А теперь представим, приходит новый прогер с задачей разобраться, что с этим регистром не так. И ему надо, вместо одного общего модуля просмотреть все модули документов, которые являются регистратором. А они одинаковые, отличаются только на 5-10 строк, которые ему нужно найти. Думаю, он не будет рад такой схеме.
Я стараюсь пользоваться стандартами кодирования, описанные на ИТС (тут уже в каментах была туда ссылка) и внимать методическим рекомендациям с ИТС.
Еще я в комментариях в коду описываю бизнес-логику (что конкретно эта фигня должна делать и зачем это нужно). И не вычищаю рабочие комментарии описывающие поведение этого куска кода. Заглушки и служебные комментарии вычищаю.
И еще я стараюсь делать свой код дружественным к читателю, а не к платформе или железу. Будут проблемы с быстродействием, буду их решать — не вылезут такие проблемы — не буду решать. Хаз, хаз и в продакшен. Ну вы поняли.
Все из-за того, что мне скорее всего и придется свой код модифицировать. Не всегда получается у живого человека с первого раза получить исчерпывающее описание нужного ему рожна.
Меня чужой говнокод не напрягает, и я своего тоже не стесняюсь. Работает — не трогай! Вот и все что могу сказать про эти «coding standards».
Что из этого следует.
сюда .
Если вы разработчик-одиночка и не работаете дольше года на одном проекте, то вам
Предположу, что народ, который не совсем согласен со статьей, просто не смог преобразовать логическое выражение в «(ПН И ПНП) ИЛИ (РН И РНП)». Но религия — такая штука. Предположу, что автор, упомянув Дейкстру, сам является адептом религии «ГОТО — это плохо». Но, конечно, не факт.
(29)
Хорошее solution, как сказал бы какой-нибудь любительbest practice .
Вообще, стандарты, которых стоило бы придерживаться при программировании, достаточно просты и сформулированы уже не менее тысячи лет логиками древности:
1. Оккам — не стоит плодить сущности без необходимости. Если они есть — код, каким бы красивым ни был, — не так хорош, как без них. И чем больше бессмысленных сущностей — тем хуже код.
2. Вместе с тем лучшее — враг хорошего. Да, Шекспиры и Вольтеры жили чуть позднее, но первоисточник подобного подхода сокрыт временем куда более древним. Данный момент может вступать в противоречие с первым пунктом, но золотая середина всегда разумнее бесконечной замороченности на тему поисков лишнего. Сделай хорошо с может быть небольшим количеством лишнего — и это будет куда лучше бесконечного выкидывания лишнего из кода до передачи его в «продакшн».
3. Все гениальное — просто. Этак Геббельс перефразировал (упростил) фразу да Винчи, который тоже, предположу, не сам оное придумал. Отсюда как бы мораль: не усложняй простое, старайся упростить сложное.
4. Глаза боятся — руки делают. Главное — начать. Ну и сотня похожих фраз. Тут мораль проста — лучше начать делать что-то, чем год думать о том, как «упростить». Часто за год все сильно усложняется, т.е. если не делать — не перейдешь к отладке, которая и занимает основное время разработки. Все эти TDD и прочие тесты — это попытка вкорячить отладку в код, автоматизировать ее каким-то образом и потом передть обратно в виде многостраничных инцидентов. Тоже, конечно, вариант.
5… Могу много написать, но может быть потом статью накатаю.
(31) Нет, конечно. Я адепт религии использовать текст для программирования — это плохо )))
Клавишу «шифт» так и не завезли?
По этому видимо и не светит…. стать руководителем такой ответственной конфигурации… тут бы шифт на клавиатуре освоить и имена переменных.
(35) Да не люблю я «КонецЕсли», вы же знаете. Выглядит уродливо )))
(36) Э… Да вы эстет, однако.
1)Минусы принципиально не ставлю, а то бы поставил.
2)Автор поставляет материал для очередного продолжения «Ректального программирования». Спасибо ему!
3)
А я бы на йух послал немедленно и свалил.
(38) Это хорошо, что вы такой принципиальный.
А что по-вашему важнее? Сделать продукт, который будет удобен узкой группе разработчиков продукта или тем, кто его поддерживает?
(39) судя по обратной связи к публикации, похоже, что в узкой группе разработчиков находитесь Вы)
(40) На вопрос есть что ответить?
(41) Я Ваш вопрос воспринимаю как — «что по-вашему важнее? Сделать продукт, который будет удобен разработчикам придерживающихся общих стандартов или тем, кто солидарен с подходом приведенным в публикации?» Иначе, увы, не выходит. Так вот при такой трактовке, вынужден выбрать первый вариант. Я б не прочь изменить мнение, и даже отчасти понимаю ход мысли, да только аргументы, на мой взгляд, у Вас слабоваты.
(43) Сперва, я Вас попрошу развернуть понятие «вероятность кастомизации» и каким образом ее можно вычислить. Желательно на конкретных примерах типовых конфигуаций, поскольку признаюсь, у меня плохо с абстракцией(ну да, имею грешок именовать переменные характерно принимаемым ими значениям).
(31)
не равносильно исходному при
Показать
з.ы. не особо силен в БА поэтому лучше чем (aa1bb1)+(!abb1)+(!baa1) => bb1(!a+a1) + !baa1 ничего в голову не пришло
или так (НЕ РН ИЛИ РНП) И (НЕ ПН ИЛИ ПНП) И (РН И РНП ИЛИ ПН И ПНП)
(32) А накатайте!
(23)
ему не нужно, он код пишет сразу обфусцированным)
(8) никогда Х не используется. полностью обезличенные переменные только для итераторов циклов. в остальных переменная должна содержать свой тип.. изучите программирование на java или c очень полезно для разнообразия
(52) накатал. Думаю, сегодня ее отмодерируют )))
(69)https://infostart.ru/public/987376/ — вот оно! )))
(39)
ТОЛКОВО написанная конфигурация удобна для всех :
1)разработчиков
2)поддержки
3)главное — пользователей.
Ни одной типовой конфигурации, толково написанной, я не видел. Думаю, там задачи другие — не сделать толковое ПО, а срубить бабла.
(30)
Эту статью автор видел. Это от неё у него подгорело так, что уже третью пишет)
(78) Неправда. Он давно уже «топит» в этом направлении. Что мол у правильного программиста должен быть особый мозг и правильный код должен быть заточен под этот особый мозг. Даже циркули какие-то выкладывал для отсеивания неправильных программистов. Шутка 🙂
Но пикантность в том, что частично постулаты с этой статьей пересекаются, поэтому я про нее и вспомнил 🙂
(81)
Вот циркуль мне понравился, там хотя бы смешно было 🙂 А тут прям как фильм ужасов!
(15)
+1, Именно так.
(124)
Вот по приведенной ссылке сказано, что имена переменных нужно образовывать от предметной области, чтобы было понятно, на кой черт она нужна.
Это, однозначно, не плохо. Но если предметной области нет? Вот у меня есть запрос, который возвращает кучу интересного. И нет там предметной области — там совокупность предметов, явлений и прочего. Почему бы мне не назвать выборку «Выборка», а выборку второго уровня — «Выборка2»?
Или, например, у меня есть универсальная процедура для работы с деревом. Она рекурсивна, в нее передается произвольное дерево. Почему я не могу итератор назвать «ст»? Для меня это очень хорошо и предметно говорит о строке дерева, но при этом мне не нужно писать длинные слова «СтрокаДерева», т.к. внутри у меня есть много всего интересного с этой строкой.
Притягивать имя переменной за уши к предметной области иногда разумно, особенно начинающим программистам. Но далеко не всегда это оправдано, т.к. в большом и сложном коде мне куда проще разобраться при наличии в итераторах вложенных циклов индекса вложенности (например «ст3»), чем в случае, если итератор будет называться по предметной области (СтрокаДерева -> ПодстрокаСтрокиДереваПервогоУровня -> ПодстрокаПодстрокиДереваВторойУровень — разработчик пока читать эту муть будет — помрет сто раз).
НО! Всегда плохой код можно прикрыть высокими стандартами разработки. К сожалению не нашел примера кода, чтобы посмотреть, на сколько он хорош по существу, а не по стандарту )))
(69) а неплохо накатал!)
(126) Когда пишешь универсальный алгоритм для работы с деревом, то термины Дерево и СтрокаДерева (ст — вполне понятно, и даже предпочтительно) являются терминами предметной области. Так что, всё по стандарту.
(126)
Ключевое слово там было «придерживаться» 😉
Если нет предметной области , то и флаг Вам в творческие руки для образования этих имен.
Лично я не люблю использовать сокращения в именах переменных и методов. Да и в коде типовых конфигураций «резкие» сокращения обычно не используются — в итоге код органичнее выглядит.
Мне не лень писать слова полностью — слепой десятипальцевый и автодополнения рулят. Мое мнение — что переменные и методы с полными именами (но максимально короткими, исходя из контекста) читаются как раз легче и быстрее, чем с сокращениями. При «тяжелом» контексте «вживаться» в кучу сокращений сложно. Особенно если эти сокращения придумывал не ты 🙂 Мозгу приходится делать маппинг имен переменных на реальные сущности. А я люблю, чтобы код читался как проза и даже комментариев не требовалось. Комментарии в основном для описания работы блоков использую, чтобы навигацию по бизнес-логике можно было делать быстро, даже не вчитываясь в код.
Я вообще считаю, что выбор имен — это своего рода искусство 🙂 Потому что в идеале имя переменной должно быть без сокращений, но при этом не слишком длинное. А для этого нужно изящно учитывать контекст и постоянно контролировать читабельность. С именами методов легче — им можно и подлиннее/пополнее имена давать. Ессно, общепринятые сокращения или принятые в контексте кодируемой бизнес-логики использовать можно. Читабельность — главный критерий. Что такое читабельность? Читабельность — это насколько мало придется морщить мозг вашему коллеге (не вам!), разбирая ваш код.
Да, важное дополнение — все вышесказанное касается кодирования бизнес-логики. На математические и системные алгоритмы это ессно нет смысла натягивать. Но мы же про 1С говорим. А 99,99% кода 1с-программиста — это чистая бизнес-логика.
(130)
Лично я «люблю» использовать сокращения в итераторах и временных переменных. Какие-то относительно стабильные переменные внутри кода «люблю» называть «лапидарно «.
ЗЫ: да, а еще я не люблю называть результат результатом, а люблю называть рез’ом, то же самое с «ДополнительныеПараметры» — слишком длинно. Достаточно «доп». Если кому-то такие сокращения непонятны, то я просто снимаю шляпу перед интеллектуальной нищетой этих товарищей.
(131)
Избегаю и там тоже. Если это временная переменная в текущем скоупе, добавляю впереди слово «Текущий»/»Текущая».
Если это итератор — стараюсь именовать так, чтобы можно было понять, что он итерирует.
ЗЫ. Всегда пишу полностью «Результат» и «ДополнительныеПараметры» 🙂 Я снисходителен к чужим слабостям 🙂
(132) есть такой диагноз — маниакальный педантизм. Да и вообще фанатизм в любом деле несет больше вреда, чем пользы)))
(133) У программистов часто подобные профдеформации 🙂 Но я тихий пациент, и снисходителен к не познавшим дзен. Какой от меня вред? Сплошная польза 🙂
(126) А если переменные выборки назвать X и Y, то как, нормально?
(134) Ээээ… программирование эта такая штука…
Вот программист сел, полчаса посидел и избавил десять(сто,тысячу, сто тысяч) человек от необходимости выполнять тупую работу.
Но этот ножик заточен с двух сторон. Программист сел, полчаса посидел и создал для десяти(ста,тысячи, ста тысяч) человек необходимость выполнять тупую работу.
У каждого программиста свое сальдо. Оно может быть как дебетовым, так и кредитовым. Подумайте об этом.
(136) Уже думал. Видимо слишком много и слишком долго. Ибо в итоге получилось то, что получилось 🙂
(137) Программист сел, посидел, вынес в общий модуль алгоритмы проведения документов. И создал для десятков тысяч других пограммистов необходимость выполнять тупую работу.
Согласны?
(138) Нет. И даже обсуждать эту тему с вами не хочу 🙂 Я достаточно уже наблюдал подобных дискуссий с вашим участием.
Вы любитель натягивать сову на глобус (сводить все трейдоффы к крайним случаям). Только время потратим и все равно при своем останемся.
(138) И дал возможность миллионам пользователей оперативно получать обновления конфигураций в соответствии с изменяющимся законодательством не прибегая к услугам программиста. Ну, это в теории. Реальность типовых от 1С не такова, к сожалению 🙂
(135)
Если выбирать декартовы координаты, то даже очень нормально, но, боюсь, некоторые любители стандартов такое не смогут оценить )))
(139)
А вот это, кстати, очень верное замечание.
(141) Ну не надо уподобляться автору, рассматривая только крайние случаи 🙂
(144) С алгоритмами в общих модулях разработчики решения быстрее внесут изменения и выпустят работающий продукт. И вот такое дело — если кастомизировать документы нужно 1-2% пользователей, стоит ли с коммерческой точки зрения думать о них?
(145) На очередном цикле обновления они съэкономят 10 человеко-часов, но их партнёры за этот же период потратят лишних 10 000 человеко-часов. Где здесь профит?
(146) Какой профит, вы о чём? Партнёров никто не заставлял кастомизировать так, чтобы при обновлении были проблемы.
(147) Вы теряете нить разговора. Затраты времени будут при кастомизации, а не при обновлении.
(148) Значит, в (146) я вас не так понял. Хорошо, тогда другой вопрос — 10 000 часов вы откуда взяли? И сколько часов будет потрачено, если бы процедуры были в модулях проведения? Почему думаете, что при общих модулях в разы больше, собственный опыт или есть какая-то статистика?
(149) Если процедуры продублированы, то времени будет потрачено МЕНЬШЕ. Тут даже не сильно важно насколько меньше. Разработчиков типовых, условно говоря, 10 человек. А внедренцев 10 000. Вот это соотношение важно. Если найдется какой-то способ съэкономить хотя бы две минуты рабочего времени внедренца, то уже имеет смысл потратить МЕСЯЦ работы одного разработчика 1С на реализацию этого способа. Экосистема 1С в целом от этого выиграет. Как вы думаете — дополнительного месяца работы разработчику 1С хватит на то чтобы внести изменения не в один модуль, а в пять-шесть?
(149) Да оставьте автора в покое) Образ о себе он уже сформировал — специалист тех поддержки, который меняет пару символов в течении 10 000 человеко-часов, в чем виноваты разработчики преувеличивающие значение своего продукта. Предлагаю просто набраться терпения и подождать выхода следующей статьи от Максима.
P.S. 10 000 и 10 — почему именно так и очень часто? Это какие-то сакральное числа?)
(150) Если разработчик партнёра не знаком с устройством проведения документов в типовой конфигурации — да, в первый раз им будет потрачено больше времени. Но во все последующие — столько-же. Развивают типовые решения на 1С не партнёры, а разработчики. 10 часов разработчика должны давать больше развитию решения, чем 10 000 часов партнёра. Еще раз оговорюсь, в типовых от 1С пока не так.
(154) Этот спор можно продолжать бесконечно. Тут только надо понимать, что если доводить вашу позицию до логического конца, то мы получим закрытый код и бинарные файлы от разработчиков. Если цель — прийти сюда, тогда да, дублирование кода бессмысленно.
(153) Они делятся на 10 без остатка )))
А кто такой Максим?
(156) Извините, Михаил. Меня проглючело к концу недели. Конечно Вас имел ввиду.
(157) Следующая статья будет немного о другом. И не такая спорная. Но тему, конечно буду развивать в дальнейшем.
(155) Как вам удаётся из таких посылок делать столь глобальные выводы — загадка…
(165) А что тут сложного? Если вы говорите, что внедренцы не должны лезть в код, то логично же этот код закрыть.
(166) Это где я такое говорил? Между строк читаете что-ли? «Лезть в код» можно по-разному, благо платформа теперь много вариантов позволяет…
(167) Как только вы полезете в код. Неважно зачем. Вы начнете тратить рабочее время. Это неочевидно?
(168) Я ННП о чём вы 🙁 Но очень интересно.
(165)
Он вроде обещал «поделится» в прошлой теме, так и не отсыпал?
(170) Вас это убьет )))
(169) Ничего сложного. Код открыт. Широкие народные массы лезут в код. Они при этом тратят свое время?
(172) Я потерял нить разговора. Поэтому просто предлагаю вам переписать типовую УТ 11 без использования общих модулей. Когда закончите — продолжим.