Имя: Пароль:
1C
1С v8
Занялся улучшением качества кода. Есть интересные вопросы...
0 Genius
 
17.04.13
15:43
Собственно, встретил несколько "некрасивых" приёмов в кодировании. Поэтому возникла идея в данной теме коллективно разобрать некоторые моменты, которые могут положительно отразиться на качестве программоного кода.

Вот к примеру первый момент:
есть два способа программного открытия форм оъектов:

1. Форма = Обработки.ДополнительнаяИнформация.ПолучитьФорму("ФормаРабочийСтол");
Форма.Открыть();

2. ОткрытьФорму("Обработка.ДополнительнаяИнформация.Форма.ФормаРабочийСтол");

Есть ли между ними принципиальная разница?
1 butterbean
 
17.04.13
15:45
1-й вариант не работает в тонком клиенте
2 jsmith82
 
17.04.13
15:45
ОткрытьФорму - клиентская процедура
В первом случае можно редактировать реквизиты формы
Думаю, с развитием УФ первый пункт уже не кошерен
3 jsmith82
 
17.04.13
15:46
Потому что логичней через параметры передать нужную инфу
4 shuhard
 
17.04.13
15:46
(0)[Поэтому возникла идея в данной теме коллективно разобрать некоторые моменты,]
получишь срач
5 1Сергей
 
17.04.13
15:46
(2)+1
До открытия можно немного поработать с формой
6 jsmith82
 
17.04.13
15:48
Давай второй момент
7 H A D G E H O G s
 
17.04.13
15:50
(4) Верный ответ в (4)!
8 Defender aka LINN
 
17.04.13
15:50
(0) Эти варианты откроют разные формы, есличе
9 1Сергей
 
17.04.13
15:51
(8) ы?
10 Конфигуратор1с
 
17.04.13
15:51
(0) по первому случаю на инфосамизнаете где была статья что в некоторых случаях если не сделать форма = 0; переменная форма будет оставаться в памяти после выхода из процедуры
11 HeroShima
 
17.04.13
15:51
(4) Без мата такое обсуждать невозможно!
14 Defender aka LINN
 
17.04.13
15:53
(9) Ыгы.
(12) Да, это еще более срачеблагодатная тема
16 fisher
 
17.04.13
15:54
В управляемых формах есть метод глобального контекста ПолучитьФорму(). Юзаю, когда перед открытием надо с формой сделать что-то эдакое. А в противном случае зачем усложнять себе жизнь, если достаточно заюзать ОткрытьФорму()?
17 БалбесВ1с
 
17.04.13
15:56
(0) "программоного кода" - опечатка по Фрейду?
Среднее между программным и гомнокодом?
18 jsmith82
 
17.04.13
15:57
возможность сделать что-то разными способами это всегда муки выбора, что приводит к увеличению сроков проектов и является причиной ссор в инетах
19 Genius
 
17.04.13
16:25
Вообще, я стараюсь пользоваться 2-м вариантом, но в типовых решениях (не управляемые формы) 1С использует 1-й, стандартный замер производительности показывает, что 1-й работает быстрее, хоть и не на много.
20 Genius
 
17.04.13
16:26
(17)  и (4) вам отдельное спасибо, очень приятно с вами общаться
21 mistеr
 
17.04.13
16:28
(0) В аервом случае нет контроля при написании.
22 mistеr
 
17.04.13
16:28
(21) В первом
23 Genius
 
17.04.13
16:30
это да, согласен, вероятность ошибки больше
24 jsmith82
 
17.04.13
16:31
(23) не стоит овчина такой выделки
25 jsmith82
 
17.04.13
16:32
Короче, ОткрытьФорму это макрос
26 Genius
 
17.04.13
16:32
а вот таким фрагментом удалось больше чем на 10% увеличить быстродействие операции "Свернуть движения по регистрам" при расчете себестоимости выпуска :

Если ОптРежим Тогда
           ЗаполнитьЗначенияСвойств(НоваяПроводка,Проводка,ИзмеренияСтр + ", " + РесурсыСтр);
       Иначе    
           Для Каждого Поле Из СтруктПоля Цикл
               НоваяПроводка[Поле.Ключ] = Проводка[Поле.Ключ];
           КонецЦикла;
       КонецЕсли;
27 В тылу врага
 
17.04.13
16:32
первый вариант красивше выглядит, зря переделали тонкоклиентщики
28 Genius
 
17.04.13
16:33
т.е. использование структуры  тупо заменяем функцией "ЗаполнитьЗначениеСвойств"
29 Genius
 
17.04.13
16:34
(26) - Общий модуль "ПроцедурыРасчетаСебестоимостиВыпуска", Процедура "СвернутьТаблицуДвиженийРегистраБухгалтерии"
30 Defender aka LINN
 
17.04.13
16:37
Defender aka LINN закрыл лицо рукой и тихо ушел
31 samozvanec
 
17.04.13
16:48
да уж... я ожидал увидеть нечто более хитрое, чем открытие форм в УП и процедуру ЗаполнитьЗначенияСвойств()
32 samozvanec
 
17.04.13
16:52
меня вот бесит когда код не форматируют, пишут все нижним регистром, закомменченые куски не удаляют. улучшите свой код, не делайте такой хрени. это может спасти вас от икоты
33 samozvanec
 
17.04.13
16:53
объекты в дереве конфы если не отсортированы, тоже бесит
34 jsmith82
 
17.04.13
16:54
комменты вообще зло
35 jsmith82
 
17.04.13
16:55
реквизиты объекта имхо должны сами всегда автосортироваться по наименованию
36 Defender aka LINN
 
17.04.13
16:58
(35) Угу. И измерения в регистре, да?
37 H A D G E H O G s
 
17.04.13
17:00
(26) Лови и не благодари

v8: Преобразование текста модуля в одну строку

Только ветку почитай полностью и вдумчиво, я понимаю, это сложно, но осиль дорогу, ползущий.
38 mistеr
 
17.04.13
17:04
(34) Ага, и отступы тоже, и СП выпилить из платформы. Только хардкор!
39 ildary
 
17.04.13
17:08
(33) зачем сортировать объекты, если при добавлении в типовую своих объектов - удобно их видеть в одном месте?
40 Desna
 
17.04.13
17:09
(33) наооборот, когда самоделки в конце.
41 Desna
 
17.04.13
17:10
+(39) и найти их быстрей
42 Конфигуратор1с
 
17.04.13
17:12
(39) +100500
43 H A D G E H O G s
 
17.04.13
17:13
(36) Боюсь, автор тебя даже не понял.
44 fisher
 
17.04.13
17:15
(39) Делаешь свои объекты с префиксом и хоть обсортируйся.
45 Genius
 
17.04.13
17:16
Сколько людей - столько и мнений, но реально, когда после некоторых уменьцев в каждом цикле по запросу и модифицированность формы в ИСТИНУ при открытии - ещё и не таким займешься.
46 samozvanec
 
17.04.13
17:16
(39) (40) у меня самоделок больше чем типовых объектов. что-то найти там сейчас просто не реально.
47 samozvanec
 
17.04.13
17:17
(44) дело говоришь
48 Genius
 
17.04.13
17:18
(39) (40) Добавление своего префикса и сортировка - всё находится. Свой префикс считаю обязательным
49 Конфигуратор1с
 
17.04.13
17:18
(45) " когда после некоторых уменьцев в каждом цикле по запросу" это ты о типовых?
50 Desna
 
17.04.13
17:20
(44) когда их много и с префиксом и со своими подсистемами, а которому ходишь раз в году можно и в конце
51 samozvanec
 
17.04.13
17:21
(49) типовые вообще отдельная тема) тиражники хреновы. один копипастит, другой заменяет.

сначала смотришь на типовые, и понимаешь - вот так надо писать. но приходит время, когда смотришь на типовые, и понимаешь - вот так писать не надо)
52 Конфигуратор1с
 
17.04.13
17:23
буквально час назад залез в типовую печатную форму начисления отпуска и напоролся(
   Пока ВыборкаРаботники.Следующий() Цикл
       Запрос = Новый запрос;
       Запрос.УстановитьПараметр("Праздник", Перечисления.ВидыДнейПроизводственногоКалендаря.Праздник);
       Запрос.УстановитьПараметр("ДатаНачала", ВыборкаРаботники.ДатаНачала);
       Запрос.УстановитьПараметр("ДатаОкончания", ВыборкаРаботники.ДатаОкончания);
       Запрос.Текст = "
       |ВЫБРАТЬ
       |    КОЛИЧЕСТВО(ДатаКалендаря) КАК КоличествоПраздников
       
       |ИЗ
       |    РегистрСведений.РегламентированныйПроизводственныйКалендарь
       |ГДЕ
       |    ВидДня = &Праздник И (ДатаКалендаря <&ДатаОкончания) И (ДатаКалендаря > &ДатаНачала)";    
       Выборка = Запрос.Выполнить().Выбрать();
       Пока Выборка.Следующий() Цикл
           КоличествоПраздников = Выборка.КоличествоПраздников;
       КонецЦикла;
53 Конфигуратор1с
 
17.04.13
17:26
(52) у самого гофнокода выше крыши - стыдно впспомнить. Но откуда мне, простому быдлокодеру значть как правильно писать если в типовых такое.
54 samozvanec
 
17.04.13
17:26
(52) ыыы. ну такое да, тоже бывает
55 Genius
 
17.04.13
17:28
(49) не совсем, но и на их "шедевры" натыкался. У нас много сторонних подрядчиков - программистов, приходится всё перепроверять
56 samozvanec
 
17.04.13
17:29
(53) мне разок снилось, что меня поймали старые клиенты и собираются убить за овнокод
57 Конфигуратор1с
 
17.04.13
17:30
(56) думаю такое снится каждому честному 1снику)
58 ptiz
 
17.04.13
17:31
(52) А что страшного в этом запросе?
59 Desna
 
17.04.13
17:31
(56) клиенты не авнокод убивают, а за косяки или фичи.
60 Desna
 
17.04.13
17:32
а за авнокод убивают гламурные кисы
61 samozvanec
 
17.04.13
17:33
(59) там этого навалом. как вспоминаю - так краснею
62 mistеr
 
17.04.13
17:34
(58) Выкинули первый и последний день.
63 Конфигуратор1с
 
17.04.13
17:35
(58) во-первых он в цикле
64 Конфигуратор1с
 
17.04.13
17:35
(63) ВыборкаРаботники это выборка из запроса    Запрос.Текст =
       "ВЫБРАТЬ
       |    ВЫБОР КОГДА (ФИОФизЛиц.Фамилия) ЕСТЬ NULL  ТОГДА Отпуска.Ссылка.Сотрудник.ФизЛицо.Наименование ИНАЧЕ ФИОФизЛиц.Фамилия + "" "" + ФИОФизЛиц.Имя + "" "" + ФИОФизЛиц.Отчество КОНЕЦ КАК Работник,
       |    ДанныеОРаботникахОрганизации.ПодразделениеОрганизации.Наименование КАК Подразделение,
       |    ДанныеОРаботникахОрганизации.Должность.Наименование КАК Должность,
       |    ДанныеОРаботникахОрганизации.Должность.Категория КАК Категория,
       |    ДанныеОРаботникахОрганизации.Сотрудник.Код КАК ТабельныйНомер,
       |    Отпуска.ВидРасчета,
       |    Отпуска.ДатаНачала КАК ДатаНачала,
       |    Отпуска.ДатаОкончания КАК ДатаОкончания
       |ИЗ
       |    Документ.НачислениеОтпускаРаботникамОрганизаций.Отпуска КАК Отпуска
       |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ФИОФизЛиц.СрезПоследних(&ДатаДокумента, ФизЛицо = (&Сотрудник).ФизЛицо) КАК ФИОФизЛиц
       |        ПО Отпуска.Ссылка.Сотрудник.ФизЛицо = ФИОФизЛиц.ФизЛицо
       |        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.РаботникиОрганизаций.СрезПоследних(&ДатаДокумента, Сотрудник = &Сотрудник И Организация = &Организация) КАК ДанныеОРаботникахОрганизации
       |        ПО Отпуска.Ссылка.Сотрудник = ДанныеОРаботникахОрганизации.Сотрудник
       |
       |ГДЕ
       |    Отпуска.Ссылка = &ТекущийДокумент";
65 ptiz
 
17.04.13
17:35
(62) Отпуск не может начинаться или заканчиваться в праздник, так что всё нормально :)
66 ptiz
 
17.04.13
17:36
(63) Не смертельно, зато читабельно.
67 Конфигуратор1с
 
17.04.13
17:37
(66) только методисты 1с так не считают
68 DexterMorgan
 
17.04.13
17:41
(66) Даже в проф разработке написано, что в этом случае как минимум нужно Запрос.Текст = ".." вынести из цикла
69 stix2010
 
17.04.13
17:51
меня больше убивают граждане
с кодом:

ТекстЗапроса="Выбрать xxxx ";

Если А Тогда
ТекстЗапроса=ТекстЗапроса+" Где YYYYY";
КонецЕсли;

киянкой бы по рукам.

И в УПП 1.2 этого дохрена
70 DexterMorgan
 
17.04.13
17:52
(69) Иногда без динамически формируемого текста не обойтись
71 ildary
 
17.04.13
17:57
(69) можно для новичка объяснить, чем это плохо?
72 Genius
 
17.04.13
17:58
Я сам иногда пользуюсь следущим :

ТекстЗапроса = "Выбрать .... Из ... Где %Условие1% %Условие1% ";
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,%Условие1%,?(Услосие1,<Условие1>,""));
ТекстЗапроса = СтрЗаменить(ТекстЗапроса,%Условие2%,?(Услосие2,<Условие2>,""));

Вобщем, нечто подобное. Как вы на это смотрите? вообще удобно и читаемо.
73 stix2010
 
17.04.13
17:59
(70) очень редко, при подмене источника данных


Где
Выбор Когда &А=Неопределено Тогда
 Истина
Иначе
 YYYY=&A
Конец

(70) чтобы запрос открыть в конфе:
74 Фауст
 
17.04.13
18:04
(72)Всегда так пишу. И читать можно нормально и конструктором разобрать.
75 stix2010
 
17.04.13
18:07
(72) читаемость запроса не улучшится

вот пример тру запроса  с параметром который может быть или не быть:

ГДЕ
ВЫБОР КОГДА &Участок = ЗНАЧЕНИЕ(Справочник.Т_Участки.ПустаяСсылка)
ИЛИ &Участок = НЕОПРЕДЕЛЕНО ТОГДА ИСТИНА

ИНАЧЕ Поступление.Ссылка.Участок = &Участок
КОНЕЦ
76 MaxisUssr
 
17.04.13
18:10
(75)
+ 100. Что сложного в этом, в чем минусы? А если запрос на 2000+ строк и такие вставки (особенно "хороши" вставки посередине запроса) - то вообще ахтунг
77 mistеr
 
17.04.13
18:11
(74) Конструктор понимает %%?
78 Desna
 
17.04.13
18:14
(72) шаблон проверь
79 Genius
 
17.04.13
18:20
(77) я использую в относительно не больших запросах. И "%%" - я использую для себя, можно любые другие символы, которые конструктор понимает. В принципе я этот способ не сам придумал - увидел и очень быстро к нему привык. Мне например такие конструкции , особенно если текст отворматирован, предельно понятны.
80 Genius
 
17.04.13
18:21
*отформатирован
81 acsent
 
17.04.13
18:22
(0) для начала лучше проверь код на соответствие стандартам 1с
82 acsent
 
17.04.13
18:22
(72), (75) за такое нужно убивать на месте, ведь есть же построитель
83 Genius
 
17.04.13
18:22
(81) да, согласен, тоже нужно..
84 acsent
 
17.04.13
18:23
(83) не тоже нужно, а нужно с этого начинать
85 jsmith82
 
17.04.13
18:30
(36)(43) имхо для этого можно сделать отдельную таблицу приоритетов, предпочитаю, когда у каждой сущности своя функция
86 jsmith82
 
17.04.13
18:31
мне проще видеть список реквизитов в алфавитном порядке, это естественно
от порядка реквизитов не должно что-то зависеть
приоритет индексирования это отдельная сущность, она не должна быть связана с порядком реквизитов
Ошибка? Это не ошибка, это системная функция.