Имя: Пароль:
JOB
Работа
Бывает кодер, бывает копро-кодер, а бывает просто вредитель.
Ø (Волшебник 14.03.2023 10:25)
,
0 mr_K
 
01.02.23
23:41
С таким сталкиваюсь впервые. Простая обработка, грузит данные из Excel в табличную часть. Из Excel сырое чтение в ТЗ, потом уже обработка полученных данных и загрузка в ТЧ
Попросили немного доработать. Начал смотреть и сказать, что офигел - значит ничего не сказать.
Вот выдержки из "шедевра":

Функция ЗаполнитьТЧ(ТЗ)

....
    Для Сч = 1 По ТЗ.Количество() - 1 Цикл
        
        СтрокаТЗ = ТЗ[Сч];
        
        НовСтрока = Объект.ТаблицаОсновное.Добавить();
        НовСтрока.Номенклатура = ПолучитьНоменклатуру(СтрокаТЗ.Наименование);
        ПодборЕденицыИзмерения(ТЗ, НовСтрока);
        
    .....
    КонецЦикла;
.....
КонецФункции


Функция ПодборЕденицыИзмерения(ТЗ, НовСтрока)
    
    Для Сч = 1 По ТЗ.Количество() - 1 Цикл
        
        СтрокаТЗ = ТЗ[Сч];
        Для Каждого Стр ИЗ Объект.ТаблицаОсновное Цикл
            
            Запрос = Новый Запрос;
            Запрос.Текст =
            "ВЫБРАТЬ
            |    УпаковкиЕдиницыИзмерения.Ссылка КАК Ссылка,
            |    УпаковкиЕдиницыИзмерения.Наименование КАК Наименование,
            |    УпаковкиЕдиницыИзмерения.ЕдиницаИзмерения КАК ЕдиницаИзмеренияНаименование
            |ИЗ
            |    Справочник.УпаковкиЕдиницыИзмерения КАК УпаковкиЕдиницыИзмерения
            |ГДЕ
            |    УпаковкиЕдиницыИзмерения.Владелец = &Владелец
            |    И УпаковкиЕдиницыИзмерения.ЕдиницаИзмерения.Наименование = &Наименование";
            Запрос.УстановитьПараметр("Владелец", Стр.Номенклатура);
            Запрос.УстановитьПараметр("Наименование", СтрокаТЗ.N4);
            РезультатЗапроса = Запрос.Выполнить();
            ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
            
            Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
                
                ЕденицыИзмеренияЗапроса = ВыборкаДетальныеЗаписи.ЕдиницаИзмеренияНаименование;    
                НовСтрока.ЕдИзм = ЕденицыИзмеренияЗапроса;
                
            КонецЦикла;
        КонецЦикла;
    КонецЦикла;
    
КонецФункции // ПодборЕденицыИзмерения()

Спрашиваю у пользователей, и это работало?? Да, говорят. Только большие файлы приходилось разбивать на много маленьких, чтобы было не больше 50 строк, иначе виснет.
Еще бы оно не висло, при таком коде.

Как мне это развидеть и что сделать с программистом, который это наваял?
213 vyaz
 
02.02.23
16:03
Нехорошо франчей лажать, они ведь разные бывают, знаю со своей практики франч (небольшой), где все ребята подкованные как по технической, так и по коммуникативной части, проекты ведут - закачаешься.
214 OldCondom
 
02.02.23
16:08
(210) Бывший кодер, который сейчас нач отдела.
215 Sadovnikov
 
02.02.23
16:13
(208) Я сейчас во франче работаю. Есть сомнения в моей компетенции?
216 OldCondom
 
02.02.23
16:19
(215) Если общаешься с такими умалишенными малолетками, будут вопросы к твоей адекватности
217 Гений 1С
 
гуру
02.02.23
16:35
(0) ггг... индусский код джи.
218 Гений 1С
 
гуру
02.02.23
16:36
(99) у меня в обработке удаления помеченных объектов есть кнопка, которая удаляет ссылки из РС, бегает с клиента на сервера на выборе 8000 объектов 8000 раз. И ниче, главное доходит до конца. Там скорость не главное.
219 Архитектор_1С
 
02.02.23
16:41
(218) 8 тысяч мало, пора переходить на миллионные транзакции
220 Lexandr
 
02.02.23
16:46
Работает - не трожь.
221 АгентБезопасной Нацио
 
02.02.23
16:46
(213) ... и упадешь.
Не, я верю, что бывают такие. Сам знаю парочку толковых ребят, работающих во франях.
Вроде с этим же франями, где они, работал - а в результате от франчей все равно либо недоделки, либо гомнокод.
222 АгентБезопасной Нацио
 
02.02.23
16:47
(215) какие люди! Как тебя угораздило вернуться?
223 tonymictian
 
02.02.23
16:49
(219) Если это какая-то разовая обработка, выполняемая ночью и под одеялом, то ничего плохого в этом нет. А если это что-то, выполняемое регулярно кучей пользователей в проде, то только живительная эвтаназия
224 Sadovnikov
 
02.02.23
16:52
(222) Черт его знает.. До сих пор не понимаю :)
225 Волшебник
 
модератор
02.02.23
17:01
(220) можно объявить этот код священным и не трогать его
226 Гений 1С
 
гуру
02.02.23
17:14
(215) сколько в час?
227 Sadovnikov
 
02.02.23
17:16
(226) Тебе столько кода в час и не снилось.
228 ДедМорроз
 
02.02.23
17:54
Есть такое понятие как математический подход,то есть свести задачу к любой предыдущей.
Если им сильно злоупотреблять,то получается такой код,т.к.то,что выполняется один раз оптимизируется одним способом,а что много раз - другим.
229 Полбатона
 
02.02.23
17:54
о, это же мой код.
230 ДедМорроз
 
02.02.23
18:02
У меня просто была история,когда я написал отчет по азаиморасчетам на дату,который был достаточно оптимизирован,а потом его доработали просто вызывая для каждого дня в месяце алгорттм расчета.
А потом все плевались - как так можно.
231 Злопчинский
 
02.02.23
18:14
(230) судя по скорости, с которой моргает 8-ка - там все так написано
232 НафНаф
 
02.02.23
18:20
(218) ты просто такой, все уже ы курсе
233 Волшебник
 
модератор
02.02.23
19:01
(230) О, клёво. А ты там оставил комментарий, что ты автор этого кода? ;)
234 FirstLine Support
 
02.02.23
19:06
(230) я всегда так делаю, я просто раньше не знал, что это называется математическим подходом.

Я наверное математик.
235 Гений 1С
 
гуру
02.02.23
19:24
(227) я про рубли
236 Гений 1С
 
гуру
02.02.23
19:25
(233) всегда надо подписывать свой код, не стесняться. Чтобы подаваны офигевали и писались в штаны от восторга, что сталкивались с твоим кодом.
237 Prog111
 
02.02.23
19:56
(236) Я один раз столкнулся с кодом, который подписал LivingStar)))
238 ДедМорроз
 
02.02.23
20:10
(233) так там было два внешних отчета - один мой,второй,который на основе него сделан.
239 experimentator76
 
02.02.23
20:24
Верую что есть идеальные франчи\интеграторы, но пока в работе попадаются не очень.
Как уже неоднократно говорил - мешает текучка кадров и сама суть высасывания денег из заказчиков.
Один плюс наверное есть - клепают свежие кадры для 1С, так как на фиксе мало кто будет обучать 1сников
240 Пульсир
 
02.02.23
20:37
(0) Не мешайте людям зарабатывать на хлеб, а профи красиво смотреться на их фоне.
241 Asmody
 
02.02.23
23:44
(0) Я бы разрефакторил этот код еще на пяток методов и хер бы ты в нем запрос в цикле в цикле в цикле нашел
242 experimentator76
 
02.02.23
23:48
(241) отладкой легко :)
243 Сергиус
 
03.02.23
00:19
(0)Ну их в целом всё устраивало же?)
244 1ctube
 
03.02.23
07:52
Ничего себе какое у автора темы завышенное ЧСВ. Попросили, так доработай, может тот кто писал код был не опытный, а сейчас учится
245 Chai Nic
 
03.02.23
07:54
(244) Угу, новичок без опытного наставника рядом. Жуткое дело.
246 1ctube
 
03.02.23
07:55
(245) Реалии жизни...
247 Chai Nic
 
03.02.23
07:58
(246) У меня такое с линуксом было. Помню, как я писал на Си парсеры логов, понятия не имея о более адекватных для этого инструментах. Вот так же и здесь.
248 ilkoder
 
03.02.23
07:59
Любой программист при виде чужой обработки-отчета говорит - ну и фигня, все переделывать надо. Главное правило программиста: работает - не трогай...
249 1ctube
 
03.02.23
08:00
(247) Во во. У меня так же: иногда смотрю на свой старый код и думаю как я так мог написать
250 АгентБезопасной Нацио
 
03.02.23
08:49
(244) говнокод, написанный "учеником", "админом-мимокрокодилом", "сыном подруги главбуха" - оно не перестает быть говнокодом.
251 1ctube
 
03.02.23
08:51
(250) Так и никто не спорит насчет этого
252 Tarzan_Pasha
 
03.02.23
09:52
(8)захотелось писать больше кода на Java ?
253 Волшебник
 
модератор
03.02.23
09:53
(252) Java умирает. Oracle ввела лицензирование. Google уже отказался от Java.
Я больше применительно к PHP 8.2
254 ДедМорроз
 
03.02.23
10:15
(247) я до чих пор на Си парсеры пишу,так как другие инструменты соединить несколько логов не могут и найти то,что нужно
255 Tarzan_Pasha
 
03.02.23
10:24
(253)о. понимаю. я тоже на php работаю. Правда для меня это основная работа.
256 Волшебник
 
модератор
03.02.23
10:34
(255) О, приятно слышать, что мы коллеги. Как Вам новые типы в виде дизъюнктивной нормальной формы?
257 Конструктор1С
 
03.02.23
10:41
(217) растет твой конкурент. Скоро тебя переплюнет
258 Конструктор1С
 
03.02.23
10:49
(220) такие "пословицы" рождаются там, где царит говнокод. Ведь говнокод отличает не только непонятность, запутанность и плохая производительность, но и хрупкость. Правки говнокода приводят к поломкам в неожиданных местах
259 Конструктор1С
 
03.02.23
10:51
(236) твой код может только рвоту вызвать
260 Tarzan_Pasha
 
03.02.23
13:38
(256)напоминают студенческую молодость. Когда проектировали микросхемы.  Приятные примеры из булевой алгебры.
261 lubitelxml
 
03.02.23
17:55
(0) я тут недавно УТ 11 внедрял, часть функционала просили из УТ 10 забрать, открыл я значит код а там - "Перейти ~M1;" - первый раз за 20 лет такое увидел.
262 Kassern
 
03.02.23
17:59
(261) это явно что-то не типовое)
Может кто-то пытался обфускацию своего решения сделать?
263 lubitelxml
 
03.02.23
18:02
(262) нет, просто кто-то про рекурсию забыл или не знал, это метки - оператор GOTO. Его никто не использует обычно
264 Krendel
 
03.02.23
18:03
(263) Его не используют потому что код не читаем ;-) Пока блок схему не построишь
265 Смотрящий от 1С
 
03.02.23
18:29
(0) ни одна типовая не проходит синтаксический контроль без ошибок. Для примера запустил проверку на демо УНф. "Обнаружена 91 ошибка". Их нужно сразу на 10 лет без права переписки?
266 lubitelxml
 
03.02.23
18:34
(265) возможно из-за режима совместимости и платформы. Но ведь не падает все равно, даже если есть ошибки. Замечал несколько раз - пишешь запрос руками (я вообще не фанат конструктора, ибо это для джунов) - нажимаешь - Конструктор запроса, чтобы проверить синтаксис - пишет ошибка, запускаешь 1с - тестишь - все четко. Я сейчас не про расширения говорю...
267 ejikbeznojek
 
03.02.23
18:41
(0) хз...вполне обычный код для начинающего. Бывает и хуже))
Я от джуниора на работе такой каждый день вижу.
Вот например из вчерашнего.
Почти к каждой строчке можно придраться...
Но этот код уже лучше того, который был раньше, главное чтоб динамика была положительная была))

              Если ЭтоНовый() тогда                                
                               Если Ссылка.ОсновнаяЗадача.КатегорияЗадачи = перечисления.КатегорииЗадачАсу.Проект тогда   //Всегда будет ложь, потому что это новый            
                               ОсновнаяЗадачаОбъект=ОсновнаяЗадача.ПолучитьОбъект();                                                          
                               СтрокаДобавить=ОсновнаяЗадача.ЭтапыПроекта.Добавить();    //тут по идее всегда конфигураторная ошибка была бы, но сюда никогда не дойдёт      
                               СтрокаДобавить.ЗадачаАсу = Ссылка;   //Опять же это новый, значит пустая строчка                            
                               КонецЕсли;        
                КонецЕсли;
268 lubitelxml
 
03.02.23
18:43
(267) это даже не джун, а просто стажор )
269 OldCondom
 
03.02.23
18:50
(267)
//Всегда будет ложь, потому что это новый
С чего бы?
270 Волшебник
 
модератор
03.02.23
18:51
(266) Подтверждаю. Конструктор запросов не понимает элементарные конструкции языка запросов, например, комментарии.
271 lubitelxml
 
03.02.23
18:51
(269) наверное потому, что Ссылка не заполнена
272 OldCondom
 
03.02.23
18:54
(266) это у вас паркинсон просто. Вы случайно выделили 1-2 символа и нажали конструктор)
273 OldCondom
 
03.02.23
18:57
(271) а, точно, я думал к реквизиты обращение. Штош... все я про себя понял
274 lubitelxml
 
03.02.23
18:59
(272) нет, если не забуду, пришлю в понедельник запрос из erp, сейчас уже нет доступа туда
275 lubitelxml
 
03.02.23
19:00
+(274) запрос не типовой, проверку не пройдет, но в режиме предприятия не отработает
276 lubitelxml
 
03.02.23
19:00
(275) но в режиме предприятия не отработает = но в режиме предприятия отработает
277 Kassern
 
03.02.23
19:06
(266) Если вы берете внешнюю таблицу и пихаете ее в запрос помещая во временную, то при дальнейшем обращении к реквизитам этой таблицы через точку конструктор будет ругаться, так как не понимает тип, а сам по себе запрос будет выполняться.
278 АгентБезопасной Нацио
 
03.02.23
20:18
(265) Ну почему сразу "10 лет без права переписки"? "Два года расстрела" вполне достаточно..
279 Бертыш
 
03.02.23
21:08
(0) Ну бывает же конечно. Моя память храни историю времён 7.7 о переписки двух коллег программистов 1С в глобальном модуле. Работала некая контра себе работала, но периодически у них 1С падала, то естль не падала, но переставала запускаться. Они дёргали в такой момент постоянно работавшего с ними программиста из местного франча и он посидев, поколдовав над базой через какое то время решал их проблему  база опять начинала работать. Однажды база перестала работать и они до него достучаться не смогли. В итог дёрнли моего приятеля который мне рассказал всю эту историю. Он был там чей-то родственник. Он открыл конфигуратор и в обработчике
ПриНачалеРаботыСистемы или как то так (Уже и не помню семёрку)
стояло  начале
Если Дата>ТакойТоДаты Тогда
Отказ = Чего то там (Чего уже опять таки не помню. Кажется там надо было для отказа ставить единичку);
Возврат;
КонецЕсли;

Приятель поинтересовался у сотрудников предприятия кто их обслуживае постоянно. Они назвали ему ФИО. Он закоментировал данный код и добавил пр этом строчку комментария
//Такой то такой то ты мудак
Но заказчику он ничего не рассказал
Та кчто вредители однозначно есть
280 Garykom
 
гуру
03.02.23
21:10
(279) А уверен что мудак?
Может мудаки контора которая оплату жмотит пока снова не упадет?
281 Волшебник
 
модератор
03.02.23
21:11
(279) Обзывания в программном коде
282 Krendel
 
03.02.23
21:19
(280) Не работай, в чем проблема
283 OldCondom
 
03.02.23
21:52
(279)дурачок ты некомпетентный.
Сын еврея-юриста недавно закончил унивеситет, тоже стал юристом, получил
практику и выиграл свой самый первый судебный процесс. Прибегает весь
взволнованный домой: - Папа, папа, я сегодня выиграл свой первый суд! И
знаешь, папа, это то самое дело которое ты вел все прошлые 10 лет и не
мог выиграть, а я его выиграл за один день! Отец на это очень
раздраженно отвечает: - Вы только посмотрите на этого идиота! Он сегодня
за один день закончил дело которое кормило нашу семью почти 10 лет! Кто
нас теперь кормить-то будет?
284 Конструктор1С
 
04.02.23
04:26
(283) а где-то рыдает профессиональная этика. Потом после таких "кормящихся" продукт обрастает дурной репутацией
285 Chai Nic
 
04.02.23
06:22
(284) +1. Не платят - прекращаешь работу. Никогда даже в голову не приходило оставлять закладки для выцыганивания оплат. Надо исходить из принципа, что ты им нужен больше, чем они тебе. А не нужен - найдутся другие.
286 Прохожий
 
04.02.23
07:02
(0) Передача в мире животных, а не ветка....
Какая молодежь нервная. Между прочим семерочная платформа 1С именно так конвертировала файлы в Эксель когда-то. Цикл в цикле. Большой отчет мог конвертироваться в Эксель час или больше. И даже самые порядочные люди писали и ставили патч платформы ибо иначе никак. А!!! Вы все врете про нашу любимую 1С г. Москва!
287 Прохожий
 
04.02.23
07:10
Семерка брала первую ячейку (а не строку как тут!) и записывала (каждый раз стомильонов раз итого) эту ячейка на диска как файл экселя. Потом добавляла кне вторую ячейку и первые две записывала на диск ,потом брал третью и в итоге записывала файл столько раз сколько ячеек в таблице. Постоянно прибавляя объем до полного.
Вот где была пестня.
288 Chai Nic
 
04.02.23
08:38
(286) "Не так всё было. Совсем не так."

Тормоза при записи 7.7 в формат xls были связаны с багом при записи строк с автовысотой. Как бы эта автовысота подсчитывалась для всего документа при
записи каждой строки или что-то подобное. Достаточно было убрать автовысоту, и огромные таблицы сохранялись быстро.
289 Прохожий
 
04.02.23
09:15
Парсили платформу вплоть до последних релизов. Весь советский народ.
290 lubitelxml
 
04.02.23
10:33
(288) было дело про Автовысоту, уже даже без подсказки и не вспомнил бы про это.
291 ДедМорроз
 
04.02.23
11:32
И еще.
Если что-то написано г.внокодом,но дает правильный результат  - это не вредительство,это из серии,если пироги будет печь сапожник.
А вот если отчет дает неправильный результат - вот это и есть вредительство.

Просто,например, ОбщегоНазначения.ПолучитьРеквизитыОбъекта - это запрос,вставляем в цикл,получаеи запрос в цикле.
Но,план запроса будет кеширован,а доступ по первичному ключу - это очень быстро,и вынос запроса за пределы цикла позволит сэкономить только на обмене меджу сервером 1с и сервером базы данных.

Смертельно,когда в цикле делается запоос с полным скпнированием ну или перебор таблицы,кпк в обсуждаемом примере.

Ну и не стоит забывать,что при количестве данных в таблицах несколько строк,как например,сисло покупок в чеке,часто перебор всего чека быстрее,чем какой-то поиск по индексу,т.к.ускорение от поиска будет несущественным,а число операций на подготовку поиска будет сравнимо с самим поиском.
Оптимизированный поиск дает логарифмическое количество сравнений,которое существенно меняет картину от 1000 записей.
292 Злопчинский
 
04.02.23
20:18
(204) не прокатит... кто тогда нагревает людей, которые нагревают вселенную?
293 Злопчинский
 
04.02.23
20:22
(239) "Верую что есть идеальные франчи\интеграторы, но пока в работе попадаются не очень.
Как уже неоднократно говорил - мешает текучка кадров и сама суть высасывания денег из заказчиков."
.
ну представь: хороший франч пришел на проект к Заказчику (сделать гоночный болид из трактора), у которого трэш угар и барадак, дорогоа в выибонах, мостов нет переезжают вброд итд... ну и начнется высасывание денег... потому что гоночный болид даже просто негде приемосдаточные испытания провести - начинаем строить дорогу, мосты итд.
.
294 Злопчинский
 
04.02.23
20:29
Я вас всех уважаю, коллеги!
Вы крутые.
295 Архитектор_1С
 
04.02.23
21:12
(294) Выпил чтоль?
296 1S_User
 
04.02.23
21:25
Если виснет после 50 строк, скорее всего, самое страшное тут в процедуре ПолучитьНоменклатуру(). Может, делается какой полный поиск, минуя индекс. "ПодборЕденицыИзмерения" так-то по индексу отбор делает. Конечно, это идиотизм, и надо все одним запросом, но вот прям жутко убивать оно не должно.
297 Злопчинский
 
04.02.23
23:52
(295) Почему? трезв. я вообще совсем редко алкоголь употребляю, даже пиво.
просто реально уважуха спецам.
298 Valdis2007
 
01.03.23
18:03
(0) Вы уважаемый разработчик 1С Бухгалтерия?
300 magicSan
 
01.03.23
19:39
Копрокодер это "давайте гить!!!! давайте сонаръ!!!!! а ещё а ещё куча тестов!!!!!!". Это обычное быдло из кодеров которые могут только тупо кодить не понимая предметной области и методов программирования RAD.

То что выше описано просто ошибки новичка.
301 Грю
 
01.03.23
19:42
(0) Много букав. Что не так с этим кодом?
302 Курцвейл
 
01.03.23
19:50
(215) Вот это да. Не ожидал что Олега тут увижу :)
303 Valdis2007
 
02.03.23
05:23
(0) так демонстрация, как ты  красиво исправил этот код и 50 строк из екселя теперь летают... будет))?
304 Адинэснег
 
02.03.23
08:34
(0) перепиши одним запросом, раз глаз еще дергается...
305 zak555
 
02.03.23
09:11
(0) работает же

Вред -- это когда в базе данные ломаются или данные отображаются неверно
306 Ботаник Гарден Меран
 
02.03.23
10:37
Разве это вредитель?
Вот анонимный разработчик, сделавший некогда в пояснениях 2 заполнение циклом по справочнику с запросом по каждому ОС.
И это ощутили на себе все типовые пользователи, у которых этих ос тысячи.
Заполнялось часа 3-4.
307 АгентБезопасной Нацио
 
02.03.23
11:08
(302) да многие офигели...
308 ProgAL
 
02.03.23
11:50
(0) Вы же в штат на 130 искали внедрять ЕРП, за 130 только такое.
309 ironicman
 
13.03.23
09:39
(303) +1. Интереснее всего выяснить как был исправлен этот код и мотивированную позицию почему именно так

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