Имя: Пароль:
1C
1С v8
Методика разработки
0 IKSparrow
 
05.03.13
12:49
Ребят, а где поискать методические материалы по конфигурированию и разработке решений на 1С? Встречал на its.1c.ru но теперь там найти не могу эту информацию. Что-то вроде "типичные ошибки разработчика". Кодер строит отчёты, использует документы, справочники, совершенно не пользуется регистрами. Бывший семёрочник. Мозги работают но направить в нужное русло надо. В запросе обращается к реквизитам через точку - до пяти вложений. В общем, хотелось бы скорректировать человека.
1 Fragster
 
гуру
05.03.13
12:51
2 pumbaEO
 
05.03.13
12:51
>> В запросе обращается к реквизитам через точку - а что в этом плохого?
3 ДенисЧ
 
05.03.13
12:54
(2) В 77 это не очень.
4 France
 
05.03.13
12:54
и в 8.х, если результаты запроса потом через "." обрабатываются.
5 Mort
 
05.03.13
12:55
Найди другого программиста. Если чел кодил ещё на семере и до сих пор так лажает, его только могила исправит.
6 Тролль главный
 
05.03.13
12:55
(2) меня интересует: зачем делают инструмент, которым лучшене пользоваться? я лично через точку обращаюсь и не парюсь
7 IKSparrow
 
05.03.13
12:56
(2)
ВЫБРАТЬ
  Документ.Договор.УсловияДоговора.График.ДатаОплаты

Что в этом плохого сам поймёшь?
8 Тролль главный
 
05.03.13
12:56
(7) нет, расскажи
9 IKSparrow
 
05.03.13
12:57
(5) Да не, жалко. Тем более, что с алгоритмической составляющей у него полный порядок. Вот пишет абы как. Попробуем перевоспитать.
10 IKSparrow
 
05.03.13
12:57
(8) На троллинг не поддаюсь.
11 Тролль главный
 
05.03.13
12:58
(10) а потом человек уйдет из 1С в нормальный SQL и узнает, что NULL таки нормально хранится в полях и еще есть внешние ключи
12 Галахад
 
гуру
05.03.13
12:58
(7) А как надо-то?
13 Cube
 
05.03.13
12:59
(7) И что же тут плохого?
14 lxndr
 
05.03.13
12:59
(6) надо просто понимать когда это опасно и чем может угрожать
15 Дядя Вова
 
05.03.13
13:00
http://webfile.ru/6413242 - что то такое валяется у меня вот...
16 IKSparrow
 
05.03.13
13:01
(11) Я за него только порадуюсь.
17 IKSparrow
 
05.03.13
13:01
(15) Спасибо!
18 0xFFFFFF
 
05.03.13
13:01
(0) в семерке не было регистров чтоль, что он к ним не обращался?
19 Ksandr
 
05.03.13
13:01
Через точку без проблем, если тип не составной.
Попробуй у реквизита ЛюбаяСсылка прочитать ПометкаУдаления :)
20 lxndr
 
05.03.13
13:02
(7) Тут нормально
Хуже, если ченить вроде:

ВЫБРАТЬ
   Субконто1.Договор.Номер
ИЗ
   РегистрБухгалтерии.Хозрасчетный.Обороты()
21 Злопчинский
 
05.03.13
13:11
а как извлечь данные не через точку, если под требуемые итоговые данные нет внятной структуры данных/регистров..?
22 Сияющий Асинхраль
 
05.03.13
13:13
Вообще много точек, по крайней мере в семерке, 1С сильно не любит, но иногда влом и использую такое. Вот совсем недавно в семерке нарвался, что если через много точек сделать в документе выборку строк, то 1С вместо смены строк последовательно, крутится на первой строке :-(, очень был удивлен такой засаде :-)
23 z80a
 
05.03.13
13:13
(0) Автор ветки не_асилил разыменование полей?
24 lxndr
 
05.03.13
13:14
(21) можно и через точку, при условии грамотных отборов, преобразований типов.
25 Джинн
 
05.03.13
13:15
Через точку крайне хреново. Ваш запрос 1С придется "разузловывать" при трансляции на TSQL и не факт, что это будет сделано оптимальным способом.
26 z80a
 
05.03.13
13:19
(25) Это повод превратить код в нечитаемое УГ?
27 Джинн
 
05.03.13
13:21
(26) Хорошая читаемость - это повод для того, чтобы запрос выполнялся неоптимально, медленно и грузил ресурсы?
28 Тролль главный
 
05.03.13
13:21
через точку, но с явно типизацией
29 Stepa86
 
05.03.13
13:29
Основные причины неоптимальной работы запросов, диагностируемые на уровне кода конфигурации и структуры метаданных:
соединения с подзапросами;
соединения с виртуальными таблицами;
несоответствие индексов и условий запроса;
использование логического ИЛИ в условиях;
использование подзапросов в условии соединения;
получение данных через точку от полей составного типа;
фильтрация виртуальных таблиц без использования параметров.

http://kb.1c.ru/articleView.jsp?id=44

под (7) ни один пункт не подпадает
30 z80a
 
05.03.13
13:32
(27) "Г@внокод с оптимизацией" - пережиток прошлого, читаемость намного важнее.
31 France
 
05.03.13
13:36
собстна, вот же, что имеет автор в виду: получение данных через точку от полей составного типа; - поля составного типа..
32 Stepa86
 
05.03.13
13:37
(31) а чо там составного типа то?
33 France
 
05.03.13
13:41
(32) где "там"??..
34 Stepa86
 
05.03.13
13:44
(33) в (7).
Если там есть что-то составного типа, то да, надо либо Выразить вставлять либо еще как-то обходить. Если уже есть полученные данные по условиям например  другой временной таблице, то можно как то из них выцепить.

А так нормальный код
35 Александр Б
 
05.03.13
13:47
(30) я бы таких сразу увольнял.
То есть лучше 5 строк кода выполняющихся 10 минут, вместо 50 строк кода, выполняющихся за 1 минуту?
36 France
 
05.03.13
13:48
(34) собстна, я про автора - "В запросе обращается к реквизитам через точку "... строю предположение, почему автору не нравится обращение реквизит через точку - потому что, не рекомендуется для составных полей обращаться через точку..
37 Stepa86
 
05.03.13
13:50
(35) не надо скатываться в крайности, г@внокод по определению плохо, но при качественном написании кода часто наступает момент, когда нужно жертвовать или скоростью или читабельностью. Частенько менее опытные программисты готовы полностью пожертвовать читабельностью за счет ускорения на  0.0001с.
38 France
 
05.03.13
13:53
да, "менее опытные" даже заморачиваться не будут на производительность
39 Stepa86
 
05.03.13
13:56
(38) да они начитаются статей по верхам, а потом делают что то вроде

Для Каждого цСтрока Из Товары Цикл цСтрока.Артикул = цСтрока.Номенклатура.Артикул; КонецЦикла;

оптимизировали записью в одну строчку, называется...
40 z80a
 
05.03.13
13:58
(35) А по моему мнению, увольнять нужно г@внокодеров.
41 Александр Б
 
05.03.13
13:59
(37),(40) код всегда должен быть читаемым и понятным! Просто большой объем кода - это еще не означает "г@внокод".
Лучше 50 строк понятного кода, но реально быстрого, чем 5 строк понятного, но реально медленного кода.
42 Stepa86
 
05.03.13
14:00
(41) >>код всегда должен быть читаемым и понятным
43 Александр Б
 
05.03.13
14:00
+(41) очень часто запрос на 10 строчек, можно ускорить в 5-20 раз, увеличив объем запроса до 50 строк.
44 Stepa86
 
05.03.13
14:01
+(42) это иллюзия, как пример охеренные запросы в типовых, который оптом через кучу временных таблиц подготавливают данные для проведения. Это нифига не читабельно, но сделать так же быстро и читабельно не получится
45 France
 
05.03.13
14:02
а что за такой запрос можно сделать?
Выбрать Номенклатура.Ссылка, Номенклатура1.Ссылка
Из Справочник Номенклатура как Номенклатура, Справочник Номенклатура как Номенклатура1
))
46 Stepa86
 
05.03.13
14:03
(45) это на конкурс "Уронить базу за меньшее количество строк кода"?
47 France
 
05.03.13
14:04
(46) ну, можно и для тестирования ноута)...
48 Александр Б
 
05.03.13
14:06
(44) Если Вы не умеете читать большие запросы, это Ваша проблема. Если запрос написан верно без глупых ошибок в условиях (это мелочи), то он может быть очень большим, и это нормально.
49 Stepa86
 
05.03.13
14:08
(48) уметь читать большие запросы и читабельность кода это все же разные вещи.
50 Александр Б
 
05.03.13
14:13
(49) Кто определяет читабельность кода? Нечитабельный код = г@внокод?
51 Sammo
 
05.03.13
14:15
(45) Зависит от размеров справочника номенклатура, имхо
52 Stepa86
 
05.03.13
14:18
(50) >>Кто определяет читабельность кода?

ну тут кто как меряет, кто в "F@ckах" в минуту на аудите, кто в количестве обнаруженных запахов кода по Мартину, а ктото по ощущениям. Обычно более менее очевидно, какая запись читабельнее. Но у нас частенько холивары на эту тему всплывают на аудитах.

>>Нечитабельный код = г@внокод

Нет. Нечитабельный код может быть следствием гКода или агрессивной оптимизации (оптимизации в ущерб читабельности), запросы, которые под 500-1000 строк кода могут быть идеальными, но плохочитабельными. А гКод может быть читабельным, правда это редкость
53 Sserj
 
05.03.13
14:26
(7) Э.. вообще помоему в курсах Чистова именно это и рекомендовалось, где только возможно тянуть данные через точку. Уволить Чистова за профнепригодность?
54 Александр Б
 
05.03.13
14:28
(53) надо понимать, где можно тянуть данные через точку, а где нельзя.
55 Sserj
 
05.03.13
14:29
(54) Надо понимать, что ты говоришь именно про запрос или про денормализацию БД, ты привел конкретно кусок кода, но ни слово не сказал, что эти данные где-то еще можно достать или изменить структуру БД.
56 Sserj
 
05.03.13
14:30
+(55) Сорьки, конечно не ты, а человек так сказал :)
57 Александр Б
 
05.03.13
14:37
(52) Я говорю, что "нечитабельный" некоторыми людьми код не является г@внокодом. Если оптимизация из примера (37) всего на 0.0001с, и увеличение кода в разы, при этом написано абы как, вот это г@внокод.
А если выполнена оптимизация в 5-10 раз процедуры, которая запускается каждые несколько минут сотней пользователей, при этом код с 20 строк увеличен до 500-1000 строк, то это можно назвать профессиональным кодом. И если кто-то такой код не способен понять - это его проблемы, и его уровень профессионализма.
58 Crush
 
05.03.13
14:52
(45) Вспомнился Лустин: Выбрать * ИЗ * :)
59 Fragster
 
гуру
05.03.13
14:59
Вот это говнокод?

ЗначениеИзСтрокиВнутр("{""#"",51e7a0d2-530b-11d4-b98a-008048da3034,{0,{""S"",""" + СтрЗаменить(СтрЗаменить(Строка, """", """"""), Разделитель, """},{""S"",""") + """}}}")
60 Flyd-s
 
05.03.13
15:00
А как правильно построить запрос через точку, если тип данных составной?
61 skeptik_m
 
05.03.13
15:03
Закладка
62 Никола_
Питерский
 
05.03.13
15:05
(61) Есть такая кнопка внизу !
63 Fragster
 
гуру
05.03.13
15:07
(62) у кнопки косяк - она не отмечает, докуда ты дочитал
64 Александр Б
 
05.03.13
15:10
(59) Если данный код заменяет другой код, и выполняется в 5-10 раз быстрее, и невозможно заменить на понятный, но при этом работающий так же быстро код, и обязательно с комментарием, описывающим выполняемое действие, то это нормальный код.
При всем этом если данный код дает ускорение на миллисекунды, и используется слишком редко, то это гвнокод.
Всегда зависит от контекста. А судить гвнокод или нет просто по тексту, это глупо. ИМХО.
Иногда на первый взгляд гвнокод может оказаться гениальным. И наоборот.
65 pumbaEO
 
05.03.13
15:11
(64) + судить гвнокод или нет без истории развития и контекста принимаемых решений тоже глупо.
66 Александр Б
 
05.03.13
15:11
+(64) описанное относится к конкретному примеру. Однако, есть примеры, когда можно сразу сказать - это гвнокод.
67 Александр Б
 
05.03.13
15:12
(65) так я этом и говорю.
68 Тролль главный
 
05.03.13
15:17
void MDObject::Destroy()
{
   if (Service()) {
       //to do: todo
       return;
   }

   bool result = true;
   List<MDObject>* itemList = new List<MDObject>();
   List<MDObject>* dependenceList = new List<MDObject>();
   List<MDObject>* ownerList = new List<MDObject>();
   PrepareDependenceAndItemList(itemList,dependenceList,ownerList);
   Iterator<MDObject>* ownerIterator = ownerList->CreateIterator();
   ownerIterator->Reset();
   CollectionManager<MDObject> ItemListManager(itemList);
   _foreach(MDObject* d, dependenceList) {
       if(!ItemListManager.Contains(d)) {
           //to do: todo
           result = false;
       }
       ownerIterator->Next();
   }
   delete ownerIterator;
   delete ownerList;
   delete dependenceList;
   delete itemList;
   if(result) {
       delete this;
   }
}
69 samozvanec
 
05.03.13
15:27
на практике кто встречал ситуацию, что без нескольких точек не обойтись? бред какой-то. в запросах часто проще и нагляднее таблицу цепануть. а если человек пишет неподдерживаемый код - это часто не лечится.
70 Flyd-s
 
05.03.13
16:20
(69), в чем разница сам цепанешь таблицу или через точку напишешь и 1С создаст соединение с другой таблицей?
Выдавать глобальные идеи — это удовольствие; искать сволочные маленькие ошибки — вот настоящая работа. Фредерик Брукс-младший