|
Плохой код, у кого есть более страшные примеры 🠗 (Волшебник 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 выбран() или пустоеЗначение() |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |