![]() |
![]() |
![]() |
|
В чем смысл такого кода | ☑ | ||
---|---|---|---|---|
0
Aleksey_3
06.04.10
✎
01:06
|
Ковыряю БП 2.0 и наткнулся на такой код
ТекстЗапроса = "ВЫБРАТЬ | Док.Дата КАК Дата |ИЗ | Документ.АвансовыйОтчет КАК Док |ГДЕ | Док.Ссылка = &Ссылка"; Запрос.Текст = СтрЗаменить(ТекстЗапроса, "Документ.АвансовыйОтчет", "Документ." + Источник.Метаданные().Имя); (с) Общий модуль->ОбщегоНазначения-> ПередЗаписьюДокументаДляУдаленияДвиженийПередЗаписью Почему сразу нельзя написать ТекстЗапроса = "ВЫБРАТЬ | Док.Дата КАК Дата |ИЗ Документ." + Источник.Метаданные().Имя+" КАК Док |ГДЕ | Док.Ссылка = &Ссылка"; Это что код студента или действительно так методологически правильно? |
|||
1
Maniac
06.04.10
✎
01:10
|
а вдруг он проверял запрос конструктором?))))))
|
|||
2
Aleksey_3
06.04.10
✎
01:13
|
Причем тоже не понятно, почему нельзя просто написать
Запрос.Текст = СтрЗаменить(ТекстЗапроса, "АвансовыйОтчет", "" + Источник.Метаданные().Имя); Типа для надежности? |
|||
3
i-rek
06.04.10
✎
01:16
|
"АвансовыйОтчет" - это первый док в метаданных.
Стыковать запрос из строк - теперь эта практика считается плохой (и это правильно !) |
|||
4
Читатель
06.04.10
✎
01:21
|
(0) Это код опытного чела, который заранее предусматривает, что запрос возможно необходимо будет дорабатывать. И чтобы не плеваться от склеек запроса, написал вот так
|
|||
5
Aleksey_3
06.04.10
✎
01:26
|
(3) Не понял. Типа
ТекстЗапроса="Начало "+" Конец"; - это не по пацански? Настоящие пацаны пишут ТекстЗапроса="Начало Бред Конец"; Запрос.Текст = СтрЗаменить(ТекстЗапроса, "Бред ", "Середина"); ? А в чем крутость такого кода? Вряд ли он будет от этого работать быстрее. Типа читабельность выше? |
|||
6
kitt
06.04.10
✎
03:30
|
(5) в твоем случае есть просто куски текста, в сабже - запрос которым можно открыть конструктором. При запросе в 5 строк - разницы почти не видно, когда 15 страниц конструкций сложения строк - это не есть гуд.
|
|||
7
AlStorm
06.04.10
✎
03:34
|
Было бы логичней, если б вместо "Документ.АвансовыйОтчет" писали что-то типа "ДокументыВыборки" или типо того, а то этот авансовый отчет смущает
|
|||
8
Читатель
06.04.10
✎
03:52
|
(7) Ёе мае... это же опять же для конструктора. ДокументыВыборки он них не поймет
|
|||
9
strange2007
06.04.10
✎
04:01
|
(0) Такую методологию во всю пропагандируют приближённые к 1С. Скоро сама 1С в стандарт это запишет. Есть несколько статей на инфостарте.
|
|||
10
Aleksey_3
06.04.10
✎
08:56
|
(9) т.е. такая конструкция только для того, чтобы ее можно было открыть в конструкторе? Я всегда думал что настоящий 1С-ник должен писать код без конструктора и синтаксис помощника.
А скоро, наверное, обязательно возле каждой команды 1С нужно будет писать комментарий с описанием этой команды. |
|||
11
Dmitrii
гуру
06.04.10
✎
09:06
|
(10) >>...Я всегда думал что настоящий 1С-ник должен писать код без конструктора...
В течении дня написать несколько запросов по паре страниц и твоя должность 1С-ник-машинистка :) |
|||
12
Stepa86
06.04.10
✎
09:06
|
(10) меня всегда бесили те, кто пишет запрос склейками и целиком который можно прочитать только в отладчике... отлаживать такой ооочень сложно, когда перед глазами нет всего текста и когда нельзя проверить корректность простым вызовом конструктора. и такие запросы можно программно в тесты передавать для проверки корректности текста через конструктор, а не узнавать о ошибках только в риалтайме.
по поводу почему СтрЗаменить(ТекстЗапроса, "Документ.АвансовыйОтчет", "Документ." + Источник.Метаданные().Имя); а не Запрос.Текст = СтрЗаменить(ТекстЗапроса, "АвансовыйОтчет", "" + Источник.Метаданные().Имя); |
|||
13
Stepa86
06.04.10
✎
09:08
|
+(12) блин... все время путаюсь с ентер и контрол+ентер...
первый вариант может быть проще адаптирован к другим типам метаданных и он не зацепит случайной заменой ничего другого, что имеет подстроку "АвансовыйОтчет" |
|||
14
Stim
06.04.10
✎
09:12
|
Все одинесники деляться на 2 типа - те, которые защищают косячный код разработчиков и те, кто его осуждают:)
|
|||
15
Ksandr
06.04.10
✎
09:12
|
(11) Ну не знаю, я в конструкторе только основные вещи набрасываю, а большую часть делаю руками. Сколько раз уже пробовал юзать конструктор - не вштырило
|
|||
16
mikecool
06.04.10
✎
09:15
|
(15) а я наоборот - только недавно ворвался в конструктор :)
удобно алиасы таблиц переименовывать :) |
|||
17
Dmitrii
гуру
06.04.10
✎
09:19
|
(15) Ну если владеешь методом "слепой" десятипальцевой печати, то ради бога. У меня лично не такая скорость печати на клавиатуре, чтобы запросы руками писать + возможность налепить опечаток,которые потом долго-долго вылавливать.
Хотя конечно запрос из трех строк мне проще ручками сделать, чем конструктор вызывать. |
|||
18
hhhh
06.04.10
✎
09:19
|
(15) ну если синтакические ошибки в запросе: запятой например не хватает или поля какого-то нет. Очень удобно через конструктор, открыл и он тебе всё это вылавливает, даже курсорчик подводит к месту, где ошибка. То есть запрос можешь писать руками, но в конце очень удобно для контроля открыть конструктором.
|
|||
19
mikecool
06.04.10
✎
09:22
|
(18) о, точно... но я чаще не для проверки, а для форматирования текста запроса открываю :)
|
|||
20
mikecool
06.04.10
✎
09:23
|
+19 ибо всякие юнионы проще руками налепить бывает, нежели в конструкторе поля выбирать или в том же конструкторе редактировать текст
|
|||
21
Serg_1960
06.04.10
✎
09:29
|
(0) Унификация и стандартизация - есть "гуд"... даже если она выглядит, по вашему мнению,... эээ... несколько абсурдно :)
|
|||
22
Stim
06.04.10
✎
09:32
|
Просто разработчиков заставляют пользоваться возможностями платформы по максимуму:)
- Зачем мы создавали конструктор запросов, если ты запрос набиваешь руками?? - пеняет руководитель молодого прыщавого программиста. - Делай все запросы через конструктор!! |
|||
23
Asmody
06.04.10
✎
09:32
|
если вам нравится печатать - идите в машинистки. запрос конструктором "пишется" быстрее в разы!
|
|||
24
mikecool
06.04.10
✎
09:35
|
(23) да ладно... :) не всегда, а особенно когда видишь конструктор первый раз
|
|||
25
Русмус
06.04.10
✎
09:35
|
(23) выборка нескольких полей из одной таблицы - и правда в пару кликов. Но если в запросе используются временные таблицы, соединения и прочее, легче, когда вся структура перед глазами, а не раскидана по закладкам в форме конструктора
|
|||
26
Asmody
06.04.10
✎
09:35
|
а самое главное, когда ты единственный владелец кода, можешь писать свой гамнокод руками хоть до опупения - тебе одному в нем и разбираться потом. Но когда разработчиков >1, уже приходится думать, _как_ написать, чтобы потом не пришлось объяснять 50 раз _что_ ты написал
|
|||
27
Русмус
06.04.10
✎
09:36
|
+(25) и изменения вносить проще, чем ползать по конструктору
|
|||
28
Asmody
06.04.10
✎
09:37
|
(25) если текст запроса >1 экрана, то он не может быть весь перед глазами. в конструкторе он разбит на логические блоки
|
|||
29
Aleksey_3
06.04.10
✎
09:37
|
Так никто и не спорит что запрос пишется в разы. Я сам почти все запросы пишу сначала в консоли, отлаживаю, а потом переношу в код обработки.
Но я понять не могу, почему после конструктора нельзя поправить сам текст запроса, а обязательно это делать через попин-гагин? |
|||
30
Asmody
06.04.10
✎
09:38
|
(27) не проще. при использовании конструктора я как минимум уверен, что код будет синтаксически правильным, и мне не придется отсматривать 50 строк в поисках пропущенной запятой
|
|||
31
Stim
06.04.10
✎
09:39
|
(30) но в (0)-то запрос в несколько строк. Делая так, как предлагает автор мы только упростили бы код
|
|||
32
Asmody
06.04.10
✎
09:40
|
(29) затем, что ты не последний день на свете живешь. завтра тебе потребуется этот запрос поправить, и ты уже будешь корячиться
|
|||
33
Asmody
06.04.10
✎
09:40
|
(31) унификация. это тоже к (26)
|
|||
34
Asmody
06.04.10
✎
09:41
|
(33)+ сегодня в нем 5 строк, завтра - 25. что - не бывает такого?
|
|||
35
Русмус
06.04.10
✎
09:42
|
(30) забыл уточнить:) имел ввиду мелкие изменения: добавить поле, условие, синоним назначить
(32) раскорячка начинается, когда большой запрос открывается в конструкторе и начинаешь ходить с закладки на закладку |
|||
36
Asmody
06.04.10
✎
09:43
|
(35) а прsufnm на 3-4 экрана туда-сюда - это нормально?
|
|||
37
Asmody
06.04.10
✎
09:43
|
прsufnm = прыгать
|
|||
38
Широкий
06.04.10
✎
09:45
|
(0) Сам так часто делаю. Это для того чтобы запрос можно было в конструкторе открыть.
|
|||
39
Русмус
06.04.10
✎
09:45
|
(28),(36) в моем представлении логический блок - это не список выбираемых полей или условий, а по крайней мере одна временная таблица. такое вполне помещается на 1 экран.
|
|||
40
Mitriy
06.04.10
✎
09:45
|
(0) нормальный способ... а главное - удобный...
|
|||
41
Один С
06.04.10
✎
09:46
|
>> Запрос.Текст = СтрЗаменить(ТекстЗапроса, "Документ.АвансовыйОтчет"
это охрененно читабельно... |
|||
42
Serg_1960
06.04.10
✎
09:46
|
Поддерживаю Asmody.
Сколько раз уже бывало так, что из простенькой обработки, за счёт многократной модификации, рождался вполне достойный код. Иногда сложно изначально это предусмотреть. А можно не гадать, а сразу писать, с учетом последующей (возможной) модификации. Согласен, что прогер... эээ... местами творческая профессия :) Но здесь - чистое ремесло и никакой отсебятины :( По мне - так проще написать стандартизованную конструктором болванку-шаблон, который потом несколькими строками кода видоизменить так, как мне надо. Указанный код - легко модифицирующийся. В этом его несомненный "плюс". |
|||
43
Mitriy
06.04.10
✎
09:47
|
(41) гораздо читабельнее, чем кучи кавычек плюсов и переносов в тексте запроса...
|
|||
44
Один С
06.04.10
✎
09:48
|
уж лучшеб тогда придумали что нибудь типа Запрос.УстановитьПараметр
чем такую херню с Авансовым отчетом городить.. |
|||
45
5 Элемент
06.04.10
✎
09:49
|
(32) один умный человек сказал, что не надо делать то что сейчас не нужно, но потом может пригодиться.
Т.к. когда придет это время, скорее всего то, что ты сделал предварительно, тебя не устроит и ты это переделаешь. |
|||
46
Demasiado
06.04.10
✎
09:51
|
Я "ЗА" конструктор запросов. Могу им собрать практически любой запрос, нарисовать вручную пакет хотя бы из 3 запросов, каждый состоящий из объединений по 3-4 запроса и ни в чем не ошибиться - нафик, а конструктором собирается минут за 10, причем этот текст запроса без лишнего гемора отлаживается либо консолями запроса либо консолями отчета.
ЗЫ Помнится моя мама тысячу лет назад заикнулась "Настоящие проггеры должны программировать без мышки", на что я открыл ей винду и офис и сказал "настоящие юзеры не должны юзать мышку, пользуйся хоткеями...Любопытно как ты рисовать будешь...." |
|||
47
Stepa86
06.04.10
✎
09:52
|
(45) одно дело сделать минимальными усилиями только то, что требуется, другое писать код так, что при доработке его проще выкинуть и начать заново...
|
|||
48
MM
06.04.10
✎
09:52
|
Я код вроде (0) задолго (уж года 3 точно) до 1С писать начал и до сих пор плююсь видя склеенные из кусков запросы.
|
|||
49
Asmody
06.04.10
✎
09:54
|
(45) другой умный человек сказал: "keep it simple stupid"
|
|||
50
Широкий
06.04.10
✎
09:54
|
(0) Вот еще пример. Как думаешь в чем смысл условия:
Запрос=Новый Запрос; Запрос.Текст="ВЫБРАТЬ | Заявка.Ссылка |ИЗ | Документ.Заявка КАК Заявка |ГДЕ | Заявка.Комментарий = ""тест"""; Результат=Запрос.Выполнить(); Выборка=Результат.Выбрать(); Пока Выборка.Следующий() Цикл ДокументОбъект=Выборка.Ссылка.ПолучитьОбъект(); Если Ложь Тогда ДокументОбъект=Документы.Заявка.СоздатьДокумент(); КонецЕсли; ДокументОбъект.Водитель=Водитель; ДокументОбъект.Комментарий="ааа"; ... |
|||
51
acsent
06.04.10
✎
09:57
|
(50) Это все потому что в 8 телепат кривой ((
|
|||
52
Serg_1960
06.04.10
✎
09:58
|
Ага :) Ты тоже так пишешь!
|
|||
53
5 Элемент
06.04.10
✎
09:58
|
(49) для меня проще 2-й вариант
|
|||
54
Mitriy
06.04.10
✎
09:58
|
(51) не подсказывай...
|
|||
55
acsent
06.04.10
✎
10:00
|
(53) Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете. (с) Кто-то
|
|||
56
Stepa86
06.04.10
✎
10:02
|
(55) Макконнелу приписывают, хотя на самом деле он сам откудо то скопипастил
|
|||
57
Serg_1960
06.04.10
✎
10:05
|
Я бы сказал "... так, чтобы не было стыдно за написанное" :)
Сколько раз уже так бывало: просишь автора темы озвучить полный код, а он... молчит и уходит от ответа :( |
|||
58
Mitriy
06.04.10
✎
10:06
|
(57) автор обиделся... он рассчитывал на поддержку, но 1С-ники опять оказались тупыми...
|
|||
59
Один С
06.04.10
✎
10:06
|
(50) ну дык в чём великий смысл?
|
|||
60
Mitriy
06.04.10
✎
10:07
|
(59) в том, что 1С-ники - жутко ленивый народ...
|
|||
61
Vovan1975
06.04.10
✎
10:08
|
Очередной спор тупоконечников с остроконечниками
|
|||
62
Один С
06.04.10
✎
10:08
|
(60) ну блин, я не могу проверить, у меня висит всё.
|
|||
63
Mitriy
06.04.10
✎
10:08
|
(62) это была подсказка )))
|
|||
64
Один С
06.04.10
✎
10:12
|
(63) аа, это типа как то так должно быть?
Если НЕ Выборка.Ссылка.ПолучитьОбъект() Тогда ДокументОбъект=Документы.Заявка.СоздатьДокумент(); КонецЕсли; |
|||
65
Один С
06.04.10
✎
10:13
|
(+64) ну тоесть совсем не так, но смысл ясен..
|
|||
66
Широкий
06.04.10
✎
10:14
|
(64) ДокументОбъект<Ставим точку и выбираем нужный реквизит из списка а не пишем его имя руками>
|
|||
67
Stepa86
06.04.10
✎
10:15
|
(64) нет
|
|||
68
vde69
06.04.10
✎
10:17
|
мне (0) не нравится, причина простая, он не читаемый, по тому как все эти замены где-то глубоко низу.
Если запрос на пару листов, то понять его смысл тяжело. по поводу доработки - ни кто не мешает поставить точку остановки и посмотреть уже собраный текст. |
|||
69
Aleksey_3
06.04.10
✎
10:17
|
(58) Нет я искал ответ и получил его.
|
|||
70
5 Элемент
06.04.10
✎
10:19
|
(68) согласен.
А вообще комментарии к коду решают многие вопросы читаемости кода. |
|||
71
Aleksey_3
06.04.10
✎
10:21
|
(64) Нет смысл в том, что телепат через точку не будет работать, потому что он не знает кто такой ДокументОбъект, поэтому мы явно ему говорим, что ДокументОбъект - это документ Заявка.
Но я обычно после себя такой код убираю, нечего "мусорить" код бессмысленными (с точки зрения функционала обработки) строками. |
|||
72
Snorkler
06.04.10
✎
10:21
|
А я вот, когда в ЗУПе увидел строчку
Сообщить("Отчет не поддерживает вывод расчетной ведомомсти в разрезе группировко."); грешным делом подумал, что 1С в кодеры набрали либо бландинко, либо жителей падонкоффстана… И то, и то, пожалуй, есть признак начала заката великой империи… :0) |
|||
73
Aleksey_3
06.04.10
✎
10:23
|
(72) В типовой 7-ке комплексной в каком то из древних релизов было такое сообщение "поле не заполенено"
|
|||
74
Один С
06.04.10
✎
10:26
|
(71) хренасе..
|
|||
75
Snorkler
06.04.10
✎
10:27
|
(73) Поле заполенивали-заполенивали, да не заполенили…
|
|||
76
Serg_1960
06.04.10
✎
10:28
|
(71) Автор остался при своём мнении :) Можно конечно код отладочный убирать... А по мне - так лучше в комменты его. Пригодится ещё при последующей модификации/отладки.
|
|||
77
Stepa86
06.04.10
✎
10:29
|
(70) писать подробные комментарии к непонятному коду, это как скрывать запах гуана с помощью флакона духов...
|
|||
78
Stepa86
06.04.10
✎
10:32
|
(68) посмотрел я собранный код, решил, что нужно изменить вот этот фрагмент и попилил его искать, исправлять без конструктора, без проверки корректности и без знания имен таблиц и реквизитов, так сказать на ощупь... а что запрос некорректен узнавать только при перезапуске...
|
|||
79
ASU_Diamond
06.04.10
✎
10:34
|
интересно, те кто пишет что запрос пишется без использования конструктора писали/смотрели/отлаживали запросы например в УПП, где запрос может занимать 3-4 страницы? или такие как в (0) только запросы пишем?
|
|||
80
5 Элемент
06.04.10
✎
10:38
|
(77) Запах духов не помешает в данном случае :)
|
|||
81
Stepa86
06.04.10
✎
10:40
|
(80) ИМХО лучше все же от причины запаха избавится...
|
|||
82
Aleksey_3
06.04.10
✎
10:40
|
(79) Не поверишь, но многие на 7-ке пишут без телепата, и ничего, живут как то. Даже пишут что-то.
К чему этот бессмысленный холивар конструктор VS руки? Почему обязательно навязывать свое мнение? Кому то удобно конструктором, кто то пишет конструктором и допиливает руками, а кто-то всю жизнь SQL запросы писал и он даже не знает, где конструктор расположен. |
|||
83
marvak
06.04.10
✎
10:41
|
(0)
Разработчикам фирмы 1С, пишущим типовую конфу в рамках стандарта разработки, разбираться и менять проще, разработчикам со стороны, меняющим типовую конфу под клиента - сложнее. и все но это стандарты фирмы 1С, у Раруса они могут быть другие, на какой то третьей фирме - третьи. |
|||
84
strange2007
06.04.10
✎
10:45
|
Самый лучший код, это когда любой прогер 1С сможет в нём разобраться за несколько часов. Поэтому мы стараемся следовать рекомендациям по оформлению кода.
Те кому удобнее руками писать, как правило любят 77, при этом шарахаются от ассемблера :) В общем это не лучше/хуже, а просто привычка, не более |
|||
85
vde69
06.04.10
✎
10:46
|
(78) конструктор - это хорошо, а ты про консоль запросов слышал? все отлаживается в консоли, а потом переносится на рабочий код.
А писать нужно так, что-бы не лазить в запрос раз в неделю... ИХМО - запросы в 10 листов текста - это бред. Если уж надо то делается большой, то делаем несколько запросов с одной временной таблицей, при таком подходе в промежутке между запросами можно подоптимизировать текст следующего запроса, или вообще от него отказатся... |
|||
86
Demasiado
06.04.10
✎
10:49
|
(85)+1
|
|||
87
Stepa86
06.04.10
✎
10:49
|
(85) я в контексте создания текста запроса с врезками кода, даже написанный заранее запрос не так просто модифицировать врезками и убедится, что код работоспособен
|
|||
88
strange2007
06.04.10
✎
10:51
|
(45) "...один умный человек сказал, что не надо делать то что сейчас не нужно, но потом может пригодиться..."
И в чем он умный? Если знаешь, что могут обокрасть, то ставишь замок на дверь. Согласно Вашему утверждению, это лишнее. Те кто делают что-то с взглядом вперёд, просто имеют больше опыта и умеют просчитывать на один-два хода дальше. Все начинающие шахматисты видят только на ход вперёд, а бывалые на несколько. Разве вторые более бестолковые? К этому подходят такие поговорки: "Уважай других, что бы уважали тебя" "Сложно и не нужно - разные вещи" Кстати, в начале своей карьеры я тоже гордился, что в моём коде ни кто не может разобраться, теперь я этого стыжусь |
|||
89
Широкий
06.04.10
✎
10:52
|
(85) Ну отладил ты свой запрос в консоле а дальше то что? Надо же как то вкраплять свои куски в эту солянку
|
|||
90
strange2007
06.04.10
✎
10:53
|
(85) Декомпозиция объектов - сложная тема и для многих очень сложная и не понятная. Как Вы определяете, что запрос большой? "На глаз" или по какой-то методике? Если первое, тогда найдется тот, кто сможет опровергнуть Ваше утверждение
|
|||
91
Stepa86
06.04.10
✎
10:53
|
а голосовалку еще не поздно прикрутить? =)
|
|||
92
ASU_Diamond
06.04.10
✎
10:53
|
(91) а смысл?
|
|||
93
Stim
06.04.10
✎
10:54
|
Имхо, код в (0) - чушь. Унификация должна делать код читабельнее, а не наоборот
|
|||
94
Stepa86
06.04.10
✎
10:54
|
(92) ну тут как бэ все поделились на два лагеря, хотелось бы по головам пересчитать
|
|||
95
Serg_1960
06.04.10
✎
10:56
|
"я тоже гордился, что в моём коде ни кто не может разобраться, теперь я этого стыжусь" - замечательно сказано. "Речь не мальчика - но мужа"(с) Говорю без обычных подначек с моей стороны.
|
|||
96
Stepa86
06.04.10
✎
11:06
|
+(88)(95) если мне не нравится мой код, написанный раннее, то я рад, что научился писать еще лучше и двигаюсь вверх, а не остановился в развитии... но код при необходимости приходится переписывать =(
|
|||
97
5 Элемент
06.04.10
✎
11:22
|
(88) >> Если знаешь, что могут обокрасть, то ставишь замок на дверь.
В этом примере замок на двери уже нужен, т.к. он выполняет роль защиты. Поэтому он не лишнее. |
|||
98
Armando
06.04.10
✎
11:35
|
(0) А так еще универсальнее:
ТекстЗапроса =
|
|||
99
Aleksey_3
06.04.10
✎
21:40
|
(98) Не взлетит. ИсточникДокумент <> НужныйДокумент
Но такой код по крайне мере более читабельный, так как заранее предполагает замену |
|||
100
Один С
06.04.10
✎
21:44
|
опа
|
|||
101
IronDemon
06.04.10
✎
22:09
|
Америка Европа
|
|||
102
Armando
06.04.10
✎
22:21
|
(99) блин, точно. косяк
вот так правильно: ТекстЗапроса =
|
|||
103
Собеседник
06.04.10
✎
22:42
|
(0)КилоГраммы/АвтоМеханизация
Сорри, так делаю всегда. Теперь все? Капец? ТекстЗапроса = "ВЫБРАТЬ | ИсточникДанных.Ссылка, | ИсточникДанных.Дата, | ИсточникДанных.Номер |ИЗ | #ИсточникДанных КАК ИсточникДанных |ГДЕ | &ИсточникДанныхУсловие"; ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "#ИсточникДанных", ТекстЗапросаИсточникДанных); Запрос.УстановитьПараметр("ИсточникДанныхУсловие",Истина); // при необходимости заменяем &ИсточникДанныхУсловие на ТекстИсточникДанныхУсловие |
|||
104
gae
07.04.10
✎
07:16
|
(12) В некоторых случаях компоновка текста запроса - совершенно правильное решение.
Например, когда нужно некую прикладную логику сконценрировать в одной единчственной процедуре. Например, есть специфический алгоритм расчета цены реализации для продукции. Её нужно считать иногда со скидками конкретному контрагенту и по назначенному ему типу цен, иногда с наценками в зависимости от условий продажи; иногда для одной позиции, иногда сразу для нескольких (и при этом хочется, чтобы данные выбрались одним запросом, а не в цикле). Исходные данные содержатся в разных таблицах. Неопытные 1С-ники на каждый случай пишут отдельную процедуру. В них будет по одному красивому запросу, все для каждого отдельного случая будет понятно. Кончается это тем, что когда надо внести изменения в алгоритм расчета цены (например, вставить округление на каком то этапе), приходится перелопачивать все эти процедуры. Забудешь в одной - будут ошибки. Поэтому правильнее всю логику заключить в одну общую процедуру. Она будет несколько сложнее, будет собирать запрос по кусочкам. Но зато всё будет в одном месте, будет как на ладони так называемый "общий случай". Оставить внятные комментарии и всё будет ОК. PS: Кстати, не испытываю проблем при вытаскивании реального текста запроса отладчиком и при пинании его в консоли запросов. |
|||
105
Stepa86
07.04.10
✎
08:35
|
(104) основная проблема при разработке чего либо - рост сложности, если без последствий можно один метод, который динамически собирает текст запроса, заменить двумя простыми, то я выберу второй путь...
естественно нужно учитывать и дублирование кода, и простоту сопровождения, и скорость разработки... но если будет 2 простых метода, то в них сделать все нужные изменения 2 раза на порядок проще, чем в одном сложном... иногда да, приходится собирать динамически тексты, но если можно сделать проще, то я делаю проще... и вообще у вас _разные_ алгоритмы с _разными_ исходными данными сконцентрированы в _одном_ методе. и это подход опытных 1Сников??? |
|||
106
Aleksey_3
07.04.10
✎
08:42
|
Всю жизнь в типовых 7-ках собирался запрос склейкой и по моему не у кого небыло проблем с пониманием.
Зато в 8-ке черт ногу сломит, с ее многостраничными запросами, плюс приколы, как в (0) |
|||
107
Stepa86
07.04.10
✎
08:44
|
(106) программировали с помощью перфокарт раньше и проблем не было, а теперь обленились все...
|
|||
108
i-rek
07.04.10
✎
08:49
|
Склеенные многостраничные запросы это на столько большое зло, что надо запретить склеивать и средние запросы. И маленькие запросы под страхом сожжения, чтоб все забыли, что вообще можно склеивать запросы :)
|
|||
109
i-rek
07.04.10
✎
08:50
|
И вручную тоже запретить писать запросы, а то умников развелось....
|
|||
110
gae
07.04.10
✎
09:03
|
(105)
>> и вообще у вас _разные_ алгоритмы с _разными_ исходными данными сконцентрированы в _одном_ методе. и это подход опытных 1Сников??? Нет, у нас ОДИН алгоритм на общий случай (иногда использующий разные исходные данные в зависимости от конкретного случая) сконцентрирован в ОДНОМ месте. |
|||
111
Freddy
07.04.10
✎
09:31
|
(0) Если бы отдоэсники писали код без потенциальных багов, то еще можно было понять. На вкус и цвет...
Запрос.Текст = СтрЗаменить(ТекстЗапроса, "Документ.АвансовыйОтчет", "Документ." + Источник.Метаданные().Имя); Где пробел после Документ.АвансовыйОтчет? А так в 99% это полная херня... |
|||
112
i-rek
07.04.10
✎
09:32
|
(111) а зачем пробел ? :)
|
|||
113
Freddy
07.04.10
✎
09:38
|
ну да... туплю :) тогда просто цвет :)
|
|||
114
MaxS
07.04.10
✎
10:17
|
(0) Я так часто делал. А теперь это методология? Кто у кого идеи берёт? ;)
Если есть возможность сделать текст запроса, который можно открыть конструктором, делаю это всегда. Например, есть типовые отчеты с вставками комментариями, которые нельзя удалять, но очень удобно если этот запрос можно открыть конструктором и быстро посмотреть. Чтобы внести изменения в него и не потерять комментарии, делаю это в конструкторе, там же смотрю текст запроса из которого руками переношу изменения в текст. Потом повторно открываю конструктором чтобы убедиться что правильно перенёс. но если нужно сделать так: ВЫБРАТЬ * ИЗ ВЗ (<текст старого запроса>) КАК ВЗ то быстрее сделать это руками и потом открыть конструктором. |
|||
115
xzorkiix
07.04.10
✎
10:31
|
(0) нормал написано.
(98) а конструктор вскроет? |
|||
116
gae
07.04.10
✎
10:32
|
(114) Да, кстати, насчет "ВЫБРАТЬ * ИЗ ВЗ (<текст старого запроса>) КАК ВЗ",
я что-то даже не знаю, как это сделать конструктором. Вернее сказать, не пробовал. |
|||
117
i-rek
07.04.10
✎
10:35
|
(116) жмём кнопку "запрос", "изменить", печатаем выбрать * ИЗ ({ctrl-end} как ВЗ
всё равно удобнее, чем в модуле печатать и "|" расставлять |
|||
118
Немытый 1сник
07.04.10
✎
10:45
|
Нубский вопрос(я семёрочник): Нельзя было вместо (0) написать Ссылка.Дата ?(!!!)
|
|||
119
gae
07.04.10
✎
10:47
|
(118) Как раз недавно обсуждалось:
v8: Анализ кода: Неужели так быстрее? |
|||
120
gae
07.04.10
✎
10:51
|
(117) да, несколько быстрее
|
|||
121
Сисой
07.04.10
✎
17:05
|
На axforume Mazzy уже язвительно прошелся по данному вопросу. С точки зрения специалиста по Аксапте сам объект Запрос, предлагаемый 1С, ущербный. "У них" это класс, в котором можно отдельно инициализировать и менять разделы запроса, при этом осуществляется контроль корректности. Это как если бы в 1С было можно:
Подход Аксапты (и ряда других ООП-систем, например, Эталона) более трудоемок, но зато облегчает последующие модификации. В 1С ближайшим аналогом является СКД в режиме вывода в ТЗ или ДЗ. Там можно править параметры схемы компоновки (отборы, сортировки и т.п.), но вот с предложением From проблема - опять надо работать с текстовой строкой. |
|||
122
i-rek
07.04.10
✎
17:15
|
(121) да уж, Запрос.From[0] = Документы. АвансовыйОтчет вроде и красиво, да можно представить какие страшные ограничения на запросы это накладывает. А соединения, виртуальные таблицы, подзапросы ?
|
|||
123
acsent
07.04.10
✎
17:23
|
(122) Практически тот же коструктор, только програмно
|
|||
124
milan
07.04.10
✎
17:29
|
(122) >>какие страшные
жуть какая, такой прогрессивный 1с и такая ущербная акцапта. |
|||
125
Сисой
07.04.10
✎
17:38
|
(122) все это можно отрабатывать атрибутами класса. Например, подзапрос - ссылка на другой объект класса Запрос.
|
|||
126
NcSteel
07.04.10
✎
17:40
|
(124) + Полностью согласен.
|
|||
127
milan
07.04.10
✎
17:42
|
(125) К чему такие глупости есть же стрЗаменить() ???
|
|||
128
EvgeniuXP
07.04.10
✎
19:33
|
в типовых пишут через кучу переменных, а потом на выходе пишут Запрос.Текст=Текст - вот и попробуйте добавить к результирующей таблице левое соединение и дополнить отчет еще одной колонкой... человек (0) правильно и сделал, главное быстро доработать, если вдруг какие изменения и можно было воспользоваться конструктором.
|
|||
129
Stagor
13.04.10
✎
11:29
|
(0) БрЕД
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |