|   |   | 
| 
 | Плохой код, у кого есть более страшные примеры ↓ (Волшебник 18.02.2015 15:25) | ☑ | ||
|---|---|---|---|---|
| 0
    
        Spyke 18.02.15✎ 13:59 | 
Где Док.Товар - рек табл части тип знпчения спр. номен | |||
| 1
    
        zak555 18.02.15✎ 14:00 | 
        и ?     | |||
| 2
    
        H A D G E H O G s 18.02.15✎ 14:00 | 
        БСП     | |||
| 3
    
        vis_tmp 18.02.15✎ 14:00 | 
        (1)Это 7.7 + какой-то умелец     | |||
| 4
    
        Karav 18.02.15✎ 14:01 | 
        (1) Конца цикла нет наверно...в этом проблема :)     | |||
| 5
    
        PLUT гуру 18.02.15✎ 14:01 | 
        (0) мой пофигуратор не знает что такое "СоздатьОбъект"     | |||
| 6
    
        shuhard 18.02.15✎ 14:01 | 
        (0) примеры кода на 7.7, древнем как гуано мамонта - к чему это ?     | |||
| 7
    
        PLUT гуру 18.02.15✎ 14:01 | 
        +(5) *у меня пофигуратор     | |||
| 8
    
        Spyke 18.02.15✎ 14:01 | 
        (4) в точку     | |||
| 9
    
        MMF 18.02.15✎ 14:02 | 
        (0) ну немножко медленный и бессмысленный код. Но разве он плохой? Плохой - это когда вперемешку русский и англ синтаксис и идентификаторы А0, А11, А111, А11111     | |||
| 10
    
        Spyke 18.02.15✎ 14:03 | 
        А это не смущает?
 Товар=Строка(Док.Товар); Тов.НайтиПоНаименованию(Товар,0,1); | |||
| 11
    
        Гёдза 18.02.15✎ 14:04 | 
        в 77 и нельзя было найти док в котором есть товар более хорошим способом     | |||
| 12
    
        DimG 18.02.15✎ 14:05 | 
        (10) Смешные вы, гуру :)     | |||
| 13
    
        ДенисЧ 18.02.15✎ 14:05 | 
        (11) ЛПП!     | |||
| 14
    
        Рэйв 18.02.15✎ 14:06 | 
        (0)Типичная ошибка студента новичка, не понимающего еще что такое ссылка. Часто такое встречал в поделках франчей.     | |||
| 15
    
        Гёдза 18.02.15✎ 14:06 | 
        (10) Да и это не особо хуже чем по ссылке найти     | |||
| 16
    
        Гёдза 18.02.15✎ 14:06 | 
        Ибо в 7 нет Ссылка.ПолучитьОбъект()     | |||
| 17
    
        pav007 18.02.15✎ 14:07 | 
        (16) Есть НайтиЭлемент()     | |||
| 18
    
        MMF 18.02.15✎ 14:07 | 
        (13) ээ стесняюсь спросить, что такое ЛПП?     | |||
| 19
    
        kobzon2 18.02.15✎ 14:07 | 
        В документе используется справочник не Номенклатура что-ли?     | |||
| 20
    
        Builder 18.02.15✎ 14:09 | 
        (10) Но ведь работает! :) Правда не всегда найдет то что надо.
 Плохой код - это когда в одной конфе список касс был сделан Перечислением! И что бы добавить новую кассу нужно было перелопатить конфу в поисках строчек типа Если Касса = Перечисление.Кассы.Касса1 Тогда .... Вот это была жесть. | |||
| 21
    
        MMF 18.02.15✎ 14:10 | 
        (15) в курсе, что могут существовать дубли номенклатуры? Не говоря о тупости искать по наименованию, имея готовую ссылку     | |||
| 22
    
        Гёдза 18.02.15✎ 14:10 | 
        (17) Это и есть поиск по ссылке, про что я говорил
 НайтиЭлемент() НайтиПоНаименованию() по скорости не особая разница | |||
| 23
    
        Stim 18.02.15✎ 14:11 | 
        Для каждого СтрокаТЧ Из МояТЧ.НайтиСтроки(Новый Структура("реквизит1", ЗначениеРеквизита1)) Цикл
 МояТЧ.Удалить(СтрокаТЧ) КонецЦикла; | |||
| 24
    
        Гёдза 18.02.15✎ 14:11 | 
        (21) Этот код конечно ужас, но не ужас-ужас-ужас как в (0)     | |||
| 25
    
        silent person 18.02.15✎ 14:11 | 
        (0) ниче, мне вот в наследство досталась конфа. предыдущий прог не знал как в константу запихнуть группу из справочника, поэтому он запихнул в константу код группы и потом искал ее по коду.
 а тут видимо чел не знал как НайтиЭлемент() | |||
| 26
    
        Kvant1C 18.02.15✎ 14:11 | 
        (18) Вот https://www.google.ru/search?q=ЛПП&oq=ЛПП&aqs=chrome..69i57&sourceid=chrome&es_sm=122&ie=UTF-8
 выбирай что понравится :) | |||
| 27
    
        Spyke 18.02.15✎ 14:12 | 
        (17) Это хорошо, но это тоже не самое страшное, было бы оправдано, если бы с элемент потом записывался, а так там просто обращение к реквизиту.
 и опять же какое Если СтрДлина(СокрЛП(Тов.Г))>0 Тогда Г=Тов.Г; Иначе Г="ДРУГОЕ"; КонецЕсли; | |||
| 28
    
        Builder 18.02.15✎ 14:13 | 
        (22) Разница в том что НайтиПоНаименованию() может найти не тот элемент, а элемент с таким же наименованием.     | |||
| 29
    
        DimG 18.02.15✎ 14:14 | 
        (28) А мож ему пофиг какой там элемент?     | |||
| 30
    
        Karav 18.02.15✎ 14:16 | 
        Меня вообще смущает такая конструкция:
 Тов=СоздатьОбъект("Справочник.Номенклатура"); Товар=Строка(Док.Товар); Тов.НайтиПоНаименованию(Товар,0,1); Надо так делать: Товар=Док.Товар.ПолучитьОбъект(); а все остальное - от Лукавого. | |||
| 31
    
        Builder 18.02.15✎ 14:16 | 
        (29) А мне тем более :) 
 Ховнокода встречал немерянно. Хотя, я думаю, по первости все такой писали :) | |||
| 32
    
        silent person 18.02.15✎ 14:17 | 
        (30) нету такого метода ПолучитьОбъект();     | |||
| 33
    
        Builder 18.02.15✎ 14:17 | 
        (30) На 7.7 - Товар=Док.Товар.ПолучитьОбъект(); 
 Это сильно! | |||
| 34
    
        Spyke 18.02.15✎ 14:17 | 
        (28) Да разница в том что и его искать не надо
 //было Тов=СоздатьОбъект("Справочник.Номенклатура"); Док.ВыбратьДокументы(ВыбДата,ВыбДата); Пока Док.ПолучитьДокумент()>0 Цикл Док.ВыбратьСтроки(); Пока Док.ПолучитьСтроку()>0 Цикл Товар=Строка(Док.Товар); Тов.НайтиПоНаименованию(Товар,0,1); Если СтрДлина(СокрЛП(Тов.Г))>0 Тогда Г=Тов.Г; Иначе Г="ДРУГОЕ"; КонецЕсли; КОнецЦикла; //Стало Тов=СоздатьОбъект("Справочник.Номенклатура"); Док.ВыбратьДокументы(ВыбДата,ВыбДата); Пока Док.ПолучитьДокумент()>0 Цикл Док.ВыбратьСтроки(); Пока Док.ПолучитьСтроку()>0 Цикл Док.Товар Если Док.Товар.Г.Выбран() =1 Тогда Г=Тов.Г; Иначе Г="ДРУГОЕ"; КонецЕсли; КОнецЦикла; КОнецЦикла; | |||
| 35
    
        Karav 18.02.15✎ 14:18 | 
        (32) Ну и  выкинь свой конфигуратор.     | |||
| 36
    
        DimG 18.02.15✎ 14:18 | 
        (34) И что, работает?     | |||
| 37
    
        Гёдза 18.02.15✎ 14:19 | 
        а где прерывание цикла?     | |||
| 38
    
        Karav 18.02.15✎ 14:19 | 
        (33) Если у него молоток каменный, то я не виноват, что он крошится.     | |||
| 39
    
        Mutniy2 18.02.15✎ 14:19 | 
        (6) > примеры кода на 7.7, древнем как гуано мамонта - к чему это ?
 Что-бы экспериментаторы новофилы понервничали. | |||
| 40
    
        Бовка 18.02.15✎ 14:19 | 
        (0) неужели так накипело, что решил запостить?! Возьми БСП и пости сюда :)     | |||
| 41
    
        Spyke 18.02.15✎ 14:19 | 
        (36)
 Если выкинуть Док.Товар исправлял в блокноте | |||
| 42
    
        Бовка 18.02.15✎ 14:20 | 
        +(40) а тем более 7.7. В ней столько этого добра было, особенно во франях с большой текучкой)     | |||
| 43
    
        Адский плющ 18.02.15✎ 14:21 | 
        Что не нравится в БСП? Примеры кода будут?     | |||
| 44
    
        Бовка 18.02.15✎ 14:21 | 
        (43) форум ляжет, примеры постить     | |||
| 45
    
        Адский плющ 18.02.15✎ 14:22 | 
        (44) Одного достаточно.     | |||
| 46
    
        MaxS 18.02.15✎ 14:23 | 
        Клиент серверная 1С. 1С сервер и SQL на разных компьютерах. 1С сервер спрашивает у гугля "где находится наш SQL?". А они физически стоят друг на друге. гугль отвечает "да вон там ищи...", 1С работает. Если интернета нет, 1С не видит SQL сервер, пользователи не могут войти в базу.     | |||
| 47
    
        rsv 18.02.15✎ 14:23 | 
        (0) А что в нем не так ?     | |||
| 48
    
        Адский плющ 18.02.15✎ 14:24 | 
        +(45) Ситуация с БСП скорее выглядит так: 
 Открыл -> Нихрена не понял -> "Гов*о!" -> Закрыл. | |||
| 49
    
        trad 18.02.15✎ 14:24 | 
        откуда вы знаете, быть может там далее такой код
 Док.Товар = Тов.ТекущийЭлемент(); КонецЦикла; Док.Записать(); КонецЦикла; Тогда в результате выполнения алгоритма, в документах ссылки на разные товары с одинаковым наименованием заменятся на одинаковую ссылку | |||
| 50
    
        rsv 18.02.15✎ 14:24 | 
        +(47) Код написан в соответствии с ЖКК     | |||
| 51
    
        rsv 18.02.15✎ 14:25 | 
        Если этот код  плох - пусть вендор убираем методы обращения к объектам и курсоры и оставляет только Объект запрос.     | |||
| 52
    
        Spyke 18.02.15✎ 14:26 | 
        (49) Этот код для выгрузки в xls     | |||
| 53
    
        rsv 18.02.15✎ 14:27 | 
        (52) Пусть работает .... и читабельный и стабильный . Всегда и все могут разобраться в нем .     | |||
| 54
    
        trad 18.02.15✎ 14:29 | 
        (52) ну пусть и в ексел
 Допустим, имеем товары с одинаковым наименованием, но с отличающимися другими реквизитами. По условиям задачи необходимоЮ чтобы в екселе у товаров с одинаковым наименованием и другие реквизиты были гарантированно одинаковые | |||
| 55
    
        Гёдза 18.02.15✎ 14:29 | 
        Рекомендую ТС начать принимать новопассит     | |||
| 56
    
        Spyke 18.02.15✎ 14:34 | 
        (53) А чем тебе этот не читабелен. И в чем была необходимость позиционировать объект?
 Тов=СоздатьОбъект("Справочник.Номенклатура"); Док.ВыбратьДокументы(ВыбДата,ВыбДата); Пока Док.ПолучитьДокумент()>0 Цикл Док.ВыбратьСтроки(); Пока Док.ПолучитьСтроку()>0 Цикл Если Док.Товар.Г.Выбран() =1 Тогда Г=Док.Товар.Г; Иначе Г="ДРУГОЕ"; КонецЕсли; КОнецЦикла; КОнецЦикла; | |||
| 57
    
        vhl 18.02.15✎ 14:35 | 
        (0) работает - не трожь!     | |||
| 58
    
        rsv 18.02.15✎ 14:37 | 
        (56) Тоже хороший пример .  Все они похожи т.к. струтура одна . Проста и читабельна.     | |||
| 59
    
        rsv 18.02.15✎ 14:37 | 
        Я называю это Пока Выбрать Если :)     | |||
| 60
    
        1Сергей 18.02.15✎ 14:38 | 
        (58) это тот же код, но правильный     | |||
| 61
    
        uno-group 18.02.15✎ 14:39 | 
        (21) Вы уверены что автор хотел найти именно тот товар что забит в табличной части? Видел не раз когда бухи на создают куча товаров Товар1 по разным ценам пришел или еще с неведомой целью. а потом хотят гдето увидеть все товар1 собранные в 1 элемент. Данный код делает ссылку всех товаров с одинаковым наименование на 1 элемент справочника.     | |||
| 62
    
        rsv 18.02.15✎ 14:39 | 
        (60) Вот и я о том же . Чем проще код - быстрее ошибку найти .     | |||
| 63
    
        uno-group 18.02.15✎ 14:42 | 
        А может тупое копи пасте из обработки, что с оле базой работала и минимальное исправление для разовых вещей вполне допустимо     | |||
| 65
    
        1Сергей 18.02.15✎ 14:45 | 
        (62) нет, я не согласен с вами. Если элемент справочника ищется по наименованию, вместо того, чтобы обращаться к нему напрямую, то это не простой код. Это ошибка     | |||
| 66
    
        Spyke 18.02.15✎ 14:46 | 
        (61) Уверен     | |||
| 67
    
        GreatOne 18.02.15✎ 14:46 | 
        Самые страшные примеры кода - это наши собственные n времени назад     | |||
| 68
    
        dmpl 18.02.15✎ 14:47 | 
        (56) Как элегантно: Док - это выборка документов, и одновременно - сам документ. Нет, все-таки 1С деградирует: в 6-ке вообще можно было из пользовательского режима константы и прочие поля добавлять...     | |||
| 69
    
        uno-group 18.02.15✎ 14:55 | 
        (66)  Если Док.Товар.Г.Выбран() =1  Тогда  ели Г неопределенного вида, что скажет     | |||
| 70
    
        Shamandafil 18.02.15✎ 14:58 | 
        Процедура КнопкаСформироватьНажатие(Кнопка)
 таб=новый ТабличныйДокумент; Макет=ПолучитьМакет("МакетОтчета"); Область=Макет.ПолучитьОбласть("Заголовок"); таб.Вывести(Область); Работники=ПроцедурыУправленияПерсоналом.РаботникиОрганизацииНаДату(ДатаОтчета,Организация); для каждого Работник из Работники цикл Если Работник.Сотрудник.Актуальность Тогда Сотрудник=Работник.Сотрудник; ФизЛицо=Сотрудник.ФизЛицо; ВывестиСотрудника=истина; ДатаПриема=ПроцедурыУправленияПерсоналом.НайтиДатуПриема(Сотрудник,ДатаОтчета,Организация); если ДатаПриема<>Неопределено тогда если ДатаОтчета>=ДобавитьМесяц(ДатаПриема,6) тогда НачалоРабочегоГода=НачалоДня(ДатаПриема); пока истина цикл отпуск=ПроцедурыУправленияПерсоналом.РасчетныйОтпускПоРабочемуГоду(НачалоРабочегоГода,Сотрудник,ДатаОтчета); если отпуск.ДниОтпуска>1 тогда ИспользованныйОтпуск=ПроцедурыУправленияПерсоналом.НайтиИспользованныйОтпускПоРабочемуГоду(НачалоРабочегоГода,Сотрудник); если ИспользованныйОтпуск<>отпуск.ДниОтпуска тогда ВывестиСтрокуОтпуска(Сотрудник,отпуск.НачалоРабочегоГода,отпуск.КонецРабочегоГода,отпуск.ДниОтпуска,ИспользованныйОтпуск); конецесли; иначе если отпуск.Конец тогда Прервать; конецесли; конецесли; НачалоРабочегоГода=ДобавитьМесяц(НачалоРабочегоГода,12); если НачалоРабочегоГода>ДатаОтчета тогда Прервать; конецесли; конеццикла; конецесли; конецесли; конецесли; конеццикла; таб.Показать(); КонецПроцедуры | |||
| 71
    
        uno-group 18.02.15✎ 14:58 | 
        Тогда уж ПустоеЗначение() юзать и  проверять что товар выбран. кстати товар точно справочник определенного вида сейчас и так ли это было когда этот код писался. В итоге может потребоваться еще 10 проверек на выдран тип значение вид значения и читабельность и скорость будет в разы хуже     | |||
| 72
    
        rsv 18.02.15✎ 14:59 | 
        (70) В отладчике хорошо ходить . читабельно и быстросопровождаемо .     | |||
| 73
    
        kosts 18.02.15✎ 15:02 | 
        (70) Могу придраться только к строке
 если ДатаПриема<>Неопределено тогда так как возможно надо сравнивать с пустой датой, а не с неопределено | |||
| 74
    
        Spyke 18.02.15✎ 15:05 | 
        (69) Г - это рек спр Номенклатура с типом Справочник Г     | |||
| 75
    
        Shamandafil 18.02.15✎ 15:05 | 
        А к запросам в двойном цикле?     | |||
| 76
    
        Spyke 18.02.15✎ 15:09 | 
        (75) В двойном????     | |||
| 77
    
        ilyavorobyev 18.02.15✎ 15:10 | Запрос = Новый Запрос;
может кто объяснит смысл этого кода?в erp функция | |||
| 78
    
        dmpl 18.02.15✎ 15:12 | 
        (77) Дык все же понятно - если нет ни 1 строки в регистре - значит не используется.     | |||
| 79
    
        ilyavorobyev 18.02.15✎ 15:13 | 
        (78) блин, точно     | |||
| 80
    
        ilyavorobyev 18.02.15✎ 15:13 | 
        с этим ERP сознание расширять надо     | |||
| 81
    
        Shamandafil 18.02.15✎ 15:13 | 
        (76) 1. для каждого Работник из Работники цикл 
 2. пока истина цикл И внутри: функция НайтиИспользованныйОтпускПоРабочемуГоду(ДатаНачалаРабочегоГода,Cотрудник,ВидОтпуска,ТаблицаОтпусков) Экспорт ИспользованныйОтпускПоРабочемуГоду=0; // Использованный отпуск по другим документам Запрос = Новый Запрос; Запрос.Текст="ВЫБРАТЬ | ОтпускаОрганизацийРаботникиОрганизации.ДатаНачала, | ОтпускаОрганизацийРаботникиОрганизации.ДатаОкончания |ИЗ | Документ.ОтпускаОрганизаций.РаботникиОрганизации КАК ОтпускаОрганизацийРаботникиОрганизации |ГДЕ | ОтпускаОрганизацийРаботникиОрганизации.Ссылка.Проведен | И ОтпускаОрганизацийРаботникиОрганизации.Сотрудник = &Сотрудник | И ОтпускаОрганизацийРаботникиОрганизации.РабочийГодС = &РабочийГодС | И ОтпускаОрганизацийРаботникиОрганизации.ПричинаОтсутствия = &ВидОтпуска"; ... | |||
| 82
    
        rsv 18.02.15✎ 15:25 | 
        (77) Использую всегда  Количество() .     | |||
| 83
    
        rsv 18.02.15✎ 15:25 | 
        +(82) При Топах 1     | |||
| 84
    
        tridog 18.02.15✎ 15:28 | 
        (0) Открываем БП3 -> Делаем Ctrl+Shift+F -> вводим "ПараметрыРаботыКлиентаПриЗапуске" -> Enter
 Смотреть все, откуда это вызывается, и все, что вызывается из него. | |||
| 85
    
        IVT_2009 18.02.15✎ 15:38 | 
        Пришлось перерабатывать свои поделки примерно 10летней давности. Там и не такое было. Но ... нужно было быстро и вчера - а как твои проблемы. Улыбало , когда после модернизации кода скорость расчета отчета возрастала в десятки раз. 
 Немного ставит на путь истинный программирование на языке отличном от 1с , например JAVA, когда недоработки просто не прокатывали. | |||
| 86
    
        Тюря 19.02.15✎ 16:27 | 
        (0)Вроде в счет фактуре храниться наименования товара тип  текст     | |||
| 87
    
        Тюря 19.02.15✎ 16:29 | ||||
| 88
    
        Salimbek 24.02.15✎ 12:17 | 
        (56) Порекомендую лишь заменить
 "Если Док.Товар.Г.Выбран() =1" на "Если ПустоеЗначение(Док.Товар.Г) =0" (источник) V7 выбран() или пустоеЗначение() | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |