gifts2017

Маленькие хитрости большого программирования. Часть 1. "Контекст, покажи личико"

Опубликовал Константин Хрипков (mbreaker) в раздел Программирование - Практика программирования

Привыкнув к лучшему с трудом переходишь на хорошее. Заставляем контекстную подсказку показывать то, что нужно Вам, а не то, что видит она.

Заходишь раним солнечным утром в обработчик ОбработкаЗаполнения, хочешь написать что-то хорошее и красивое...

...но после первого же нажатия любомого Ctrl+Space после "Основание." весь романтический настрой разбивается о 30-тиэтажный небоскрёб 50-значных наименований реквизитов типа "ОбъемПродукцииРаботДляВычисленияАмортизации" или "ПорядокВключенияСтоимостиВСоставРасходовУСН"...  паника... КОНТЕКСТНАЯ ПОДСКАЗКА, ВЕРНИСЬ, Я ВСЁ ПРОЩУ!!!

Знакомо? Нет? А, ну да! Какой-же нормальный программер с утра пораньше в код-то полезет! Извиняюсь... Сторно "Заходишь раним солнечным утром", приход "Залетаешь поздним-поздним вечером"...

Итак, решение: вставляем до текущего вызова нужной переменной незначащий блок

    Если Ложь Тогда  //ПОТОМ УДАЛИТЬ!!!
        НужнаяПеременная = <Создание или назначение объекта нужного типа>;
    КонецЕсли;

ИЛИ для любителей чистого исполняемого кода (объяснения см. в конце статьи)

    #Если НЕ (Клиент Или Сервер Или ВнешнееСоединение) Тогда  // типизирование переменных без вреда для исполняемого кода
        НужнаяПеременная = <Создание или назначение объекта нужного типа>;
    #КонецЕсли

и обманываем парсер контекстной подсказки, заставляя его подумать, что возможно... в принципе... ну, при каких-то обстоятельствах... ведь чем чёрт не шутит... две параллельные пересекутся и этот блок отработает!

Результат - видим по "НужнаяПеременная." и Ctrl+Space.

После написания всего кода, блок можно стереть. А если поставить комментарий "//ПОТОМ УДАЛИТЬ!!!", то в последствии блок для удаления легко найти поиском по "!!!". Основная прелесть способа в том, что даже если забыть его потом удалить - ничего страшного (кроме недоумения того, кто не знает) не произойдёт.

На всякий случай размещаю явный пример:

пример

Для реализации всплывающего контекста для составного типа привожу пример на базе конф. "Бухгалтерия предприятия 8 ред. 1.6":

    Если Ложь Тогда  //ПОТОМ УДАЛИТЬ!!!
        Основание = Документы.СчетФактураВыданный.СоздатьДокумент().ДокументОснование;
    КонецЕсли;

Бурные обсуждения статьи в комментариях сподвигли сделать ещё одно дополнение (см. выше). Так как в бой вступили сторонники семёрки, а точнее приверженцы таких модов для семёрки, как телепат или интеллисенс, поднялся вопрос о чистоте исполняемого кода уже скомпилированного приложения. В связи с этим выложил ещё один вариант принудительного типизирования переменной с использованием инструкций препроцессора. Суть этого варианта - полное исключение из компиляции объявления переменной за счет того, что условие "НЕ (Клиент Или Сервер Или ВнешнееСоединение)" никогда не вернёт положительный результат. Тем не менее процессор контекстной подсказки обрабатывает этот блок и приводит к нужному результату.


За поднятие темы про чистоту кода спасибо artbear и orefkov

За дополнение комментарием "//ПОТОМ УДАЛИТЬ!!!" спасибо Трактор

За вопрос про составной тип спасибо GROOVY

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Павел Чистов (GROOVY) 09.02.10 13:28
Удобно для кодинга. Сам так делал пару раз, правда без условия, и только на время кодинга...
2. Константин Хрипков (mbreaker) 09.02.10 13:37
(1) В условии основная фишка: его можно безболезненно забыть... :D
Да и во время отладки он не мешается...
3. Трактор Трактор (Трактор) 09.02.10 13:39
(0) Я обычно добавляю комментарий // УБРАТЬ!!!!!!
Потом ищу по восклицательным знакам.

(1) Странное слово "кодинг". Созвучно словам модинг, гопинг и маркетинг.
4. Трактор Трактор (Трактор) 09.02.10 13:41
(2) И потом искать свой код тут http://govnokod.ru/1c
Его туда выложат настоящие говнокодеры :-)
5. Павел Чистов (GROOVY) 09.02.10 13:52
Да и я обычно пишу "ПустаяСсылка()"... ;)
6. Константин Хрипков (mbreaker) 09.02.10 13:53
(3) Можно искать и по "//УБРАТЬ!!!" и по "Если Ложь" и по "//Уп-с облажался забыл убрать!!!"...

Главное - этот блок не испортит ЛОГИКУ ВАШЕГО КОДА!

Много раз ловил себя на том, что в запарке полчаса тратишь на отладку куска кода, который не работает только из-за забытого

Основание = Документы.СчетНаОплатуПокупателю.СоздатьДокумент().Ссылка;

(4) Лучше попасть туда, чем в кабинет к директору предприятия с миллионными оборотами, лепеча что-то типа "ну забыл... ну с кем не бывет..."

Согласны?
7. Константин Хрипков (mbreaker) 09.02.10 13:57
(5) Честно сказать, здесь написал, что в голову первое пришло... На самом деле, что именно будет там - не важно... Главное - чтобы это что-то было нужного типа... ;)
8. Александр Рытов (Арчибальд) 09.02.10 14:01
9. Константин Хрипков (mbreaker) 09.02.10 16:22
(8) с бухгалтерами 6 лет пообщаешься - и кошелёк свой в разрезе статей ДДС начнёшь видеть... :D
Mustard; DMSDeveloper; +2 Ответить 1
10. Александр Рытов (Арчибальд) 09.02.10 17:05
(9) Вот потому и понравилось. Имею 1С Бухгалтерию 17-й год :D
11. Павел Чистов (GROOVY) 09.02.10 17:37
А с составным типом ктонить победил также красиво?
12. Яков Коган (Yashazz) 09.02.10 17:57
Да. Вот его безобидность, если забыли убрать, это безусловно прекрасно. Спасибо за идею!
13. Константин Хрипков (mbreaker) 09.02.10 18:32
(11) можно и с составным... кто мешает? :)
Динамически формируемый тип, как правило не требуется, а используется на базе типа элемента метаданных, а для этого присвойте переменной в этом блоке значение этого элемента...

На пример на базе конф. "Бухгалтерия предприятия 8 ред. 1.6" будет так:

Если Ложь Тогда
Основание = Документы.СчетФактураВыданный.СоздатьДокумент().ДокументОснование;
КонецЕсли;

все реквизиты документов составного типа реквизита ДокументОснование будут доступны в контекстной подсказке... минус, что одинаковые будут дублироваться... но это уже издержки производства...
14. Олег Пономаренко (O-Planet) 09.02.10 18:49
(0) Тож так делаю, только без Если Ложь Тогда... Потом просто убиваю явное определение.

ПС, Что-то подсказывает, что прочитавшие это пользователи Опенконфа и Телепата вытерли грустную слезу о потугах восьмерочников...
ms33; Оболтус; mtv:); MaxDavid; +4 Ответить 1
15. Артур Аюханов (artbear) 09.02.10 19:04
(0) Бывшие пользователи и соучастники Опенконфа и его скриптов/плагинов постоянно матюгаются при написании кода в 1С 8 :)
ret-Phoenix; wokituk; cleaner_it; Mustard; ms33; Оболтус; mtv:); MaxDavid; +8 Ответить 1
16. Константин Хрипков (mbreaker) 09.02.10 19:23
(14) честно скажу, не пользовался ни тем, ни другим... знакомство с миром 1С начал с V8 с самых её первых релизов... и наслушался критики в её сторону - вагон и две телеги... так что привычно... ;)

тем не менее не совсем понимаю, чем могут помочь надстройки конфигуратора при обращении к нетипизированному параметру? ведь такое обращение может быть как в событии (где ещё можно выйти на тип передаваемого параметра), так и в процедуре общего модуля... а "парсить" все обращения к этой процедуре - по меньшей мере неблагодарное занятие...
17. Константин Хрипков (mbreaker) 09.02.10 19:24
(15) на вкус и цвет... все фломастеры одинаковые... :D

может и 8.х станет расширяемой когда-нибудь...
18. Сергей (sipoju) 09.02.10 19:25
"Если Ложь Тогда" -- Красота :D
19. Александр Медведев (anig99) 09.02.10 19:50
Чтобы так сладко не было...
Именно из-за таких баянистов 1совцев за программистов не считают...
Для 1с применимы все приемы упрощения разработки кода. Такие вещи приходят в нетормозящую голову на первый год изучения любого языка программирования в среде с контекстными подсказками.
Если бы не было столько восторгов, то минус бы не поставил... А так, нужно что-то отрезвляющее внести в тему.
Sardukar; AlexO; Borisych; ZOMI; larisab; +5 8 Ответить 2
20. Константин Хрипков (mbreaker) 09.02.10 20:48
(19) Уважаемый Александр, если Вы недостаточно внимательно прочитали комментарии, специально для Вас повторю: 8-й платформой я занимаюсь более 6-ти лет. Программированием - более 15-ти лет. Перед тем, как размещать эту статью, поиском прошелся по Инфостарту и нечего на тему работы с контекстной подсказкой не нашёл, поэтому вашу фразу "из-за таких баянистов" откровенно не понял.

Статья была написана как раз-таки для начинающих и чуть более того программистов 1С. И навеяна очередным объяснением своим подопечным таких вот "азов", потому что они либо продолжают терять время, набирая километровые наименования реквизитов, либо зовут помочь разобраться, почему у них код не работает, т.к. забыли убрать принудительное назначение типа в "безблочной" конструкции.

В этой своих статьях я не претендую на лавры изобретателя чего-то сверхэкстраординарного. Поэтому и написал статью в такой шутливой форме.

Просто есть вещи, которые очень просты, но не всегда очевидны. Вы же тоже пузырьковую сортировку не с яслей знаете, хотя, согласитесь, что что-либо элементарнее придумать просто трудно...

Уважайте, пожалуйста, своих коллег по профессии, а то Вы тут всех второгодок в "тормоза" записали своей фразой про "нетормозящую голову".

Если Вы сомневаетесь в моей компетенции почитайте мои статьи на более серьёзные темы... Например http://infostart.ru/public/65456/ [Пардон, не заметил Ваш плюсик, на этой статье]

И, если Вас, конечно, это не затруднит, объясните что именно "отрезвляющее" Вы внесли своим постом в эту тему? Раз десять перечитал Ваше сообщение и так и не понял, Вы призываете не пользоваться такими уловками?
Pervuy; asu2; 1_C; cleaner_it; Styvi; Новенький; Valerich; ms33; vers139; PowerBoy; Borisych; vlk_led; Serj1C; DIvanmgn; niyaz; Трактор; anig99; ZERO_; Tatitutu; support; +20 Ответить 1
21. Александр Медведев (anig99) 09.02.10 23:25
(20) Боян - в том смысле, что данная вещь давно известна...А не то, что упоминалась на инфостарте... Если ограничиваться инфостартом, то можно большую часть мисты опубликовать.
Во-вторых, я не сомневался в Вашей компетенции. Мой минус не за саму статью, а частично за её наличие, и частично за удивительно большое число плюсов от опытных программистов. По поводу наличия... Тут уже давно был разговор о том, что "программисты 1с" не знают элементарных основ написания кода. Причем не отдельных приемов, а систематическое незнание. Поэтому было бы лучше, на мой взгляд, отсылать пользователей "в сад", т.е. к книгам по основам, сайтам для изучающих (вроде того же delphikingdom), где не зацикливаются на синтаксисе, а рассматривают в том числе приемы и алгоритмы. Меня очень сильно раздражает мнение многих программистов в других средах, которые считают, что те, кто занимается 1с ну ни как не программисты. Часто это обосновано - доля носильщиков ИТС гордо именующих себя программистами 1с очень велика. Сам был свидетелем, когда человек, окончивший институт по соответствующей специальности не смог открыть 7.7 в режиме конфигуратора - он просто не знал где и что это...
Так вот, такие вот статьи вредны тем, что способствуют такой ситуации, когда новичок не чувствует потребности не то, чтобы прочитать книжку по основам программирования, но даже пройти курсы 1с и сдать на сертификат... Сажают человека за руль автомобиля, когда он ещё ходить не умеет... Научится ездить, а когда машина сломается не сможет сдвинуться с места, или покалечится...
Именно поэтому, я приветствую дискуссию по этому поводу, но отрицательно отношусь к активному плюсованию статьи.
Вот... Щас нараздаю плюсы за комменты.
Ish_2; larisab; +2 Ответить 2
22. Coolain (zaebidze) 10.02.10 00:27
Ну anig99 ты и выдaл)))))Дело в том что другие программисты и правильно что не считают тех кто занимается 1с программистами.Нуралиев правильно ответил для PC Magazine вот кусок статьи

"Теперь попробуем ответить на второй вопрос - о профессии разработчика приложений на базе платформы «1С:Предприятие». Все-таки, по нашему мнению, специалиста любой профессии характеризует не только инструмент, которым он пользуется, но и круг задач, которые он умеет решать. Нам кажется, лучше использовать не термин «программист», а именно термин «разработчик». Создание приложений на «1С:Предприятии» не является написанием программы. Написание кода - только часть работы. Это именно разработка приложения, строящаяся, как мы говорили выше, начиная от структуры прикладных объектов, описания их взаимосвязи, продумывания бизнес-процессов. То есть разработчиков на «1С:Предприятии» характеризует не знание синтаксиса встроенного языка. Профессиональные разработчики на «1С:Предприятии» - специалисты по разработке бизнес-приложений. Само по себе описание структуры данных в «1С:Предприятии», написание программы на встроенном языке, рисование форм не является сложным и осваивается на некотором уровне, достаточном для решения несложных задач, обычно за 2-3 недели. Но разработка бизнес-приложений - это весьма сложная задача, не менее сложная, чем создание, например, средств разработки, САПР и т. д."
AzagTot; cleaner_it; indigo_; iov; +4 Ответить 2
23. Александр Зубцов (iov) 10.02.10 00:49
(4) Хм вот всегда удивлялся пусть хоть весь мой код будет там . НО именно таким кодом большенство делает БЫСТРО И ДЕШЕВО и это работатет.
А если я сижу и пишу для себя для души. то я каждую строчку откоомментирую
Главное правило (потраченное время (еффективно*) = вознаграждение* оставшееся свободное время). тоесть если я портатил 1 час то останется 15 часов (примерно 24 -1 - 9(сон)). Так вот в идеале потраченное время стремимся свести к минимуму а вознаграждение к максимуму и достигается это именно забиванием на эргономичнось красоту и простоту и справку и камменты.
Да и извиняюсь Потом или вы или иной программист заработатет на ОПТИМИЗАЦИИ!!!
*еффективно это то время что оплачивается лично Вам. Тут уже поднималась статья на тему времени и его использования.
(21) Ну многие всетаки верно не считают 1С - ПРОГРАММИСТАМИ! Потому как все таки нет возможности работы с базами данных напрямую (записи) штатными средствами (да понятно что так меньше сломают но все же).
Потому как нет возможности штатными средствами чистить память за собой . Да много чено нету. Но зато 1С предоставила возможность зарабатывать больше большинства сишников дельфистов и иных. Да прогеры SAP ов больше получают но их меньше и им сложнее. А по поводу статьи... Ну вот чесно она же привлекла внимание? Вы потратили время написав комментарий. Но количество плюсов указывает на то что как минимум 22 человека получили ПОЛЕЗНУЮ информацию. Так что минус наверно стоило адресовать тем кто не хочет изучать азы, а автор статьи все таки донес крупицу истины.
лично я называя себя программистом 1С (8 лет стажа) в дуже понимаю что умение писать код и умение ПИСАТЬ КРАСИВЫЙ код - это две большие разницы.
А в большинстве когда ищут программиста ищут не того кто красиво пишет а того кто сделает меньше ошибок принесет, больше пользы, и не будет требовать доплатить за откамментированный код. И что не маловажно программист должен не только оптимизировать и "кирпичизировать"* программу а так же снизить расходы на её эксплуатацию.
* кирпичизировать - сделать максимально простую и непотопляемую систему с максимально простым в понимании и изучении интерфейсом.

P.S. Просьба авторов постов не кипятится отвечаю не ВАМ лично а не темы вами затронутые. Просто добавив немного буковок в базу сайта.
indigo_; arz; Valerich; +3 Ответить 3
24. Александр Зубцов (iov) 10.02.10 00:52
(23) Блин надо почаще спать все таки... :o АпШибок море.
вобщем вспоминаем статью английских учены про то что если перепутать буквы то прочесть можно. :D
25. Александр Зубцов (iov) 10.02.10 00:54
(22) Вот точно я то вспоминал кто же это сказал....
26. Александр Зубцов (iov) 10.02.10 01:00
Да и вообще учитывая что мы то хотьчто-то создаем. А посмотрите на бухгалтеров они то бедные кроме кучи отчетов и пачек архивной бумаги ничего не создают... Спросите их что они создали? А многие директора кроме создания перемещения кадров по компаниям и акустических колебаний на собраниях вообще нихрена не создали но ОНИ получают больше и руководят ВАМИ. Так что радость создания ЛЮБОГО кода это уже путь к большому и светлому чувству Я _ АРРЕНИТЕЛЬНЫЙ ПРОГРАММИСТ СОЗДАВШИЙ ДОХРЕНА ПРОГРАММ :D .
P.S. но кроме этого дерево- дом, дерево-сын, дерево-дуб все таки надобы выполнить :D
27. larissa builova (larisab) 10.02.10 06:57
(0) Отрицать полезные вещи трудно, поэтому поддержу anig99. Писать красочные статьи с картинками для студентов наверное надо, но вот данная тема... хм... есть что-то тошнотворное в этом... вспоминаются прописи в первом классе школы...
28. WellMaster (WellMaster) 10.02.10 10:02
Спасибо. Знал, но почитать было весело :)
29. Артур Аюханов (artbear) 10.02.10 12:25
(19) Я поставил плюс не за то, что написано или открыто что-то супер.
Мне лично это было известно и использование этой фичи для меня естественно, я даже не думал, что другим будет полезно.
Но после прочтения сабжа лично я считаю, что подобные публикации как раз и помогают программистам/разработчикам совершенствовать свой профессионализм.
За это и плюсанул.
TreeDogNight; rusakov_igor; cleaner_it; Styvi; nerl; jeg; mbreaker; Трактор; shadowcpu; Evg-Lylyk; +10 Ответить 1
30. Артур Аюханов (artbear) 10.02.10 12:33
(23) В "красивом" коде как раз и ошибок меньше хотя бы за счет того, что его читать/изучать легче, а значит, и ошибки лучше видны :)
И как раз человек, умеющий писать "красивый" код, сложные вещи напишет реально быстрее и точнее, чем чел, не умеющий такого писать.

А по поводу противопоставления разработчиков и программистов - ИМХО Нуралиев просто применил психологический прием для повышения самооценки работников нашей отрасли и все.
Лично я не отделяю разработку от программирования.

Программирование включает в себя и разработку, и чистое кодирование, и многое другое.

А сравнивать/разделять программистов и разработчиков ИМХО равносильно поведению простых юзеров, которых всех ИТ-ников "обзывают" программистами, независимо от роли, знаний, умений и т.д. :) - т.е. это такой крайне низкий уровень знаний и умений.
31. Артур Аюханов (artbear) 10.02.10 12:42
И вообще мало в среде 1С публикаций, направленных на повышение уровня разработки как в кодировании, так и в разработке архитектуры бизнес-решений.

Например, досталась мне тут одна база 77 - это пример некачественной разработки архитектуры решения http://www.1cpp.ru/forum/YaBB.pl?num=1265121403/15
В одном регистре куча измерений, более 8, из них часть числовых - ВУ_Метраж, ВУ_Площадь, ВУ_Ширина и т.д.
В результате этого решения на реальной базе ОЧЕНЬ медленно открывается период ТА, хотя сама база очень маленькая.
V.Nikonov; +1 Ответить
32. Артур Аюханов (artbear) 10.02.10 14:12
(0) Насчет " //ПОТОМ УДАЛИТЬ!!!"
ИМХО проще и привычнее написать что-то типа
//TODO_УДАЛИТЬ код после разработки
и выполнять поиск по TODO

В более удобных средах разработки давным-давно есть TODO-списки, формируемые средой автоматом

ЗЫ лично я давно, еще со времен 77, юзаю следущие варианты дополнительно к простому TODO :
TODO_МЕТАДАННОЕ - в комменте описываю изменения, который я вносил в метаданные типовой конфы, например, движения по доп.регистрам
TODO_ФОРМА
TODO_ИНТЕРФЕЙС
TODO_ПРАВА
и т.д.
очень удобно при анализе изменений в типовых конфах
33. Ярослав Радкевич (WKBAPKA) 10.02.10 15:25
лично как по мне, мне в голову даже мысль об этом не приходила... а зачем? лучше немного потренировать мозги на развитие памяти... а вот забывать удалять такие кусочки кода всеж не следует, все же интерпритатор их отрабатывает :)
34. Артур Аюханов (artbear) 10.02.10 19:11
Завел новую публикацию Повышение удобства разработки в 1С 8
Сослался в своей публикации на сабж, т.к. считаю очень полезным.
35. Александр Медведев (anig99) 10.02.10 20:33
(22) В данном высказывании Нуралиев ставить 1совцев ВЫШЕ программистов. А я говорю о тех, кто не может поставить рядом словосочетания "1с Предприятие" и "программирование".
(23) Душелов, Гилев, Абадонна... Они находят возможность программировать вполную для 1с... Еще можно вспомнить 1с++, ei...1с - высокоуровневый язык программирования, поэтому много ему напрямую недоступно. В том же самом Delphi работа с базами данных происходит через BDE и т.д - в 1с можно работать с SQL посредством драйвера совершенно спокойно... А в С++ нельзя нормально работать с массивами...
(29) Лучше бы потратили время на другое - например на подробную статью о тонкостях работы запросов...
36. Александр Зубцов (iov) 10.02.10 21:36
(35) Я еще раз повторюсь. Я сказал что ПУСТЬ ХОТЬ ВЕСЬ КОД ТАМ бУДЕТ ... И так же написал про то что я стремлюсь меньше работать и больше зарабатывать. Просто показатель эффективности работы не красота кода или его мега качество а желание клиента за него платить.
И если я пишу что-то то каменты описания и максимум универсальности стараюсь выжать. Уговорить меня (если оплата не по часам) добавить лишний реквизит может только ПОЛНОЕ отсутсвие других вариантов (при этом я делаю копию "до" "после" и описываю изменения). Но всегда стараюсь изучить что-то новое даже напрямую не связанную с 1С. И если кто-то что-то выкладывает чего не было раньше на ресурсе - Я ЗА. И Я ЗА КРАСИВЫЙ КОД если конечно средства не превышают задач цели.
Да и по поводу Нуралиева он ОБЯЗАН продвигать свой продукт. Так что пусть хоть религию 1С проповедует и пострижение в разработчики проводит ето дело каждого. Но в 1С действительно своя специфика... Как пример текущая хотелка клиента привязывать возврат от покупателя к одной накладной (а товар в возврате из накладных за месяц) И что делать основание - неправильно.
Но учитывая особенности учета в компании необходимо. Как програмисту мне это сделать 5 минут. Как разработчику мне это надо изучить возможные проблемы и методы их решения. И как обьяснить заказчику что это займет мое время и увеличит его затраты ? Директора считают деньги и готовы платить не за проблемы через год а за решение проблемы СЕЙЧАС. Так что я не готов тратить СВОЕ ВРЕМЯ и внедрять универсальные процедуры - оптимизировать -
и так далее. Это я на основной работе облизываю программу и внедряю и оптимизирую и модернизирую - потому что мне платят не за строчки кода и не за время а за безпроблемность, маштабируемость и гибкость.
Душелов, Гилев, Абадонна... ОНИ ПРОДАЮТ СВОИ РЕШЕНИЯ. Тоесть количество продаж зависит от качества кода и возможности его применения и развития. Так что .... Да кстати и они учились и развивались на статьях других...
37. Константин Хрипков (mbreaker) 10.02.10 23:05
38. Константин Хрипков (mbreaker) 10.02.10 23:55
(21)
Так вот, такие вот статьи вредны тем, что способствуют такой ситуации, когда новичок не чувствует потребности не то, чтобы прочитать книжку по основам программирования, но даже пройти курсы 1с и сдать на сертификат...

Позвольте с Вами не согласиться... В данной статье рассматривается способ оптимизации написания кода без ущерба функциональности (сокращение времени на разработку и отладку и избежание ошибок), а не готовый шаблон "как нужно писать программы".

Вы вот, например, готовы сказать, что знаете абсолютно ВСЕ такие уловки? Можно заниматься программированием 20 лет, а на 21-й год узнать какую-то вещь, про которую кто-то другой скажет "фу, боян, ему 20 лет уже!"

И готовы ли Вы назвать хоть один курс или книжку или аттестационный тест, в котором бы было описание или вопрос про вещи, подобные этой?
39. Константин Хрипков (mbreaker) 11.02.10 00:05
(36)
Директора считают деньги и готовы платить не за проблемы через год а за решение проблемы СЕЙЧАС

Знакомая проблема... Вменяемым директорам полезно бывает озвучить в цифрах стоимость "решения проблемы через год" (50% гарантировано передумают ибо "считают деньги"). Для невменяемых составлять ТЗ, в котором указаны возможные проблемы при конкретной реализации, и заставлять подписаться в нём и в акте сдачи-приемке.
40. Александр Зубцов (iov) 11.02.10 10:45
(39) НЕкоторых это не особо пугает... это же потом будет... Конечно акт подписывают и в коде пишу тем кто будет исправлять почему так сделал. И в документации. Но некоторые перцы все равно потом пытаются свое фи высказать.
41. Tiger77 (Tiger77) 11.02.10 12:49
Кто б еще написал шаблон, быстро генерирующий нужный код ?
42. Александр Медведев (anig99) 11.02.10 15:00
(38) Тут где-то была ссылка на целую книгу по оптимизацию написания кода...
Нет... все уловки я не знаю.
А про курсы... Эти курсы называются "школа, 9-11 классы"... Именно там была заложена основа, о которой я говорю.
43. Александр Орефков (orefkov) 11.02.10 15:58
(16)
тем не менее не совсем понимаю, чем могут помочь надстройки конфигуратора при обращении к нетипизированному параметру?


Показываю принцип:

Процедура ОбработкаЗаполнения(Основание // :Документы.СчетФактураВыданный.ДокументОснование
   )

или

Процедура ОбработкаЗаполнения(Основание)
...
    // Основание : Документы.СчетФактураВыданный.ДокументОснование

...Показать Скрыть


intellisence в 7ке распознает такие комментарии и активно их использует для построения списка.
Самодокументирование кода практически.
44. Константин Хрипков (mbreaker) 12.02.10 11:48
(43) хм... забавно... в первом пример только по-моему такое описание убъёт закрывающую скобку процедуры...

тем не менее и принцип и сама реализация практически та же самая, что и у примера в статье...
45. Артур Аюханов (artbear) 12.02.10 11:52
(43), (44) Схема, аналогичная реализованной нами в Интеллисенс для 77, сделана в подсистеме "Контекстная подсказка" (и соответственно в Инструменты разработчика") для 8.1
(44) Схема все-таки отличается, т.к. в нашем варианте только комментарии, никакого лишнего кода :)
46. Константин Хрипков (mbreaker) 12.02.10 12:14
(43), (44) а если так? ;)
    #Если Клиент И Сервер Тогда
        НужнаяПеременная = <Создание или назначение объекта нужного типа>;
    #КонецЕсли;
47. Артур Аюханов (artbear) 12.02.10 13:12
(46) Да, ИМХО намного красивее, чем просто Если Ложь :)
Но сразу не работает :)
: Ошибка в операторе препроцессора
#<<?>>КонецЕсли;
: Ожидается завершение оператора препроцессора Если (If)

Точка с запятой после КонецЕсли лишние, без этого все путем.
Правда, я совсем не уверен в качестве реализации препроцессора - возможно, нет никакой разницы между 2-мя этими способами.

ЗЫ в тестировании - наше все :)
48. Константин Хрипков (mbreaker) 12.02.10 13:57
(47) да, спасибо за исправление... скопировал - не заметил ";"

если бы не было разницы, код бы исполнялся везде...
49. Артур Аюханов (artbear) 12.02.10 14:33
(48) Я говорю о разнице в быстродействии.
Т.к. мы не знаем деталей реализации препроцессора.
50. Константин Хрипков (mbreaker) 12.02.10 14:46
(49) и я о них же...
какой смысл в инструкциях препроцессора, если не будет производится анализ включаемых блоков?
51. Артур Аюханов (artbear) 12.02.10 15:20
(50) По опыту разработки над ВК 1С++ и ФормЕкс знаю, что 1С очень слабо занимается оптимизацией кода работы.

Кстати, можно попробовать проверить :)
1000 раз или еще побольше с замером времени запустить код Выполнить(Строка), передавая обе строки в Выполнить.
52. Дмитрий К (ll13) 13.02.10 19:21
#Если Клиент И Сервер Тогда // типизирование переменных без вреда для исполняемого кода
НужнаяПеременная = <Создание или назначение объекта нужного типа>;
#КонецЕсли

В файловой версии условие #Если Клиент И Сервер ВСЕГДА будет ИСТИНА (так называемое "слияние контекста") поэтому этот блок будет ВСЕГДА скомпилирован и выполнен.

Правильно использовать следующую конструкцию
#Если НЕ (Клиент Или Сервер Или ВнешнееСоединение) Тогда
Объект = Документы.РеализацияТоваровУслуг.СоздатьДокумент();
#КонецЕсли
svartemov; NewNick; mbreaker; K_A_O; Поручик; artbear; +6 Ответить 2
54. Константин Хрипков (mbreaker) 15.02.10 09:43
(52) да, согласен, благодарю за поправку... сказывается апгрейд конфигурации "1С:Мозг программиста" с версии 8.1 на версию 8.2... :D
55. Ivon (Ivon) 17.02.10 12:11
Я в конфигураторе сделал, чтобы циклы и Если раскрывались плюсами, как процедуры и функции, теперь для выделения определенных блоков использую конструкцию
Если Истина Тогда
// Блок кода, делающий то-то
......
КонецЕсли;
Теперь для того, чтобы скрыть ненужный блок я просто сворачиваю ненужное Если
56. Константин Хрипков (mbreaker) 26.02.10 17:51
(55) :idea: хм... тоже интересное решение... а главное - этот блок можно быстро отключить, поменяв флаг на Ложь...
Ivon, Вы не против упоминания такого трюка в одной из частей "Маленьких хитростей"? естественно с упоминанием о первоисточнике...
57. Ivon (Ivon) 26.02.10 18:12
58. Константин Хрипков (mbreaker) 26.02.10 18:20
59. Константин Хрипков (mbreaker) 26.02.10 18:25
(55) Кстати, натолкнули на одну интересную идею... Постараюсь в ближ. время оформить её во вторую часть "маленьких хитростей"... пришлю ссылку... ;)
60. Владимир (NewNick) 26.02.10 23:16
(52) #Если НЕ Клиент И Клиент Тогда
помоему короче ;)
плюс сразу позволяет вменяемому человеку на париться - ясно вписан бред

по поводу статьи -
правда если в шаблон конструкцию #если #конецесли не воткну пользоваться не буду - привык втыкать пустуюссылку и потом комментировать (если не забыл). собсно плюс за возможность "не забыть".

а на тему спора что мол 1с это не программисты и эта статья пример. я в 1с пришел после watcom c с ассемблером. про контекстную подсказку узнал ток через 2 года(халтурил чуток там и сям и выпадающее меню после точки меня в шок не повергло). а вывод стало быть простой - те же дельфисты то же как то на суровых полноценных программистов не тянут.

хотя если в дельфях человек аж целую сортировку методом пузырька написал, а в 1с ему только макеты править приходилось, то с его точки зрения определенное недовольство понятно.

зы. по комментам видно что автор статьи работает с отделом и ему проще заставить подчиненных вставлять как он выразился "не работающие блоки". большинство типизирует переменные без блоков и комментит опосля. немного разный подход в немного разных условиях.
61. Константин Хрипков (mbreaker) 27.02.10 14:15
(60) логика здравая, но... в предложенном варианте присутствует неоднозначность для препроцессора... трудно сходу сказать, что именно получится в процессе компиляции... это, наверное, больше вопрос для artbear, он в этом лучше разбирается...

по поводу отдела - угадали... в принципе, данная статья и родилась после очередного консультирования на тему "как сделать быстрее" и последующего выискивания, где же забыли что-то закомментировать...
62. Александр Плюшкин (php5) 04.03.10 02:02
хм...как ни странно, я эту методу сам выработал и использовал иногда...дежавю...
63. Константин Хрипков (mbreaker) 04.03.10 08:25
(62) :D этот велосипед каждый для себя изобретает сам... вопрос в том, когда именно "осенит"...
прописные истины всегда лежат на поверхности, проблема как раз в том и состоит, что со временем "ныряешь" всё глубже, и часть неувиденного в начале так и остается где-то там за спиной...
смысл в таких публикациях двойной: с одной стороны "осенить" новичков как можно раньше, с другой - дать возможность профи "оглянуться назад" (ведь там тоже могло остаться что-то маленькое, но полезное)...
64. Виктор Рыков (Мастер1С) 14.03.10 07:21
Блок Если ... Тогда... КонецЕсли лишний.
Просто пустую ссылку нужного типа запихиваю
65. Аркадий Кучер (Abadonna) 14.03.10 11:22
(30)
А сравнивать/разделять программистов и разработчиков ИМХО равносильно поведению простых юзеров, которых всех ИТ-ников "обзывают" программистам

Простые юзеры зовут еще круче - "компьютерщики" ;)
66. Константин Хрипков (mbreaker) 15.03.10 01:36
(64) Ошибаетесь... Этот блок сохраняет массу времени при отладке, у вас не было случая, когда вы свою пустую ссылку забывали закомментировать, а потом никак не могли понять, почему же простейший кусок кода неправильно отрабатывает?
68. Константин Хрипков (mbreaker) 15.03.10 11:05
(67) прочитайте ту часть статьи, которая выделена красным цветом, там как раз подробно объясняется, зачем тут приведены "всякие варианты извращений с инструкциями препроцессора"...
69. Аркадий Кучер (Abadonna) 15.03.10 11:06
(68) Да я уж свой пост и закрыл, когда ВНИМАТЕЛЬНО прочитал ;)
70. Аркадий Кучер (Abadonna) 14.08.10 08:29
Блин, с самого начала изучения 8.х стал так делать, но как-то даже в голову и не пришло, что это ноу-хау ;) Это мне просто от Дельфи в наследство досталось
71. Константин Хрипков (mbreaker) 27.08.10 06:57
(70) "ноу хау" (просто для справки) переводится с английского (know how) как "знаю как"... так что соглашусь! это действительно "ноу хау", т.к. я ЗНАЮ КАК и сообщаю об этом тем, кто ещё может быть не знает...
72. Аркадий Кучер (Abadonna) 27.08.10 07:05
Ноу-хау (от англ. know how — знать как) или секрет производства — это сведения любого характера (оригинальные технологии, знания, умения и т. п.), которые охраняются режимом коммерческой тайны и могут быть предметом купли-продажи или использоваться для достижения конкурентного преимущества над другими субъектами предпринимательской деятельности
Как правило, под ноу-хау подразумевают инновации, имеющие коммерческую ценность в силу неизвестности иным лицам в отношении которой введен режим коммерческой тайны. В высокотехнологичной экономике ноу-хау составляет ключевую часть активов компании.

Не стоит в лобовую переводить.
73. Александр Рытов (Арчибальд) 27.08.10 07:21
74. Аркадий Кучер (Abadonna) 27.08.10 07:24
(73) А то! ;)
Я просто помню как из-за одного недописанного слова "например" СССР профукал патент на подводные крылья.
75. Сергей Троицкий (tsd) 27.08.10 09:27
(74) вроде наоборот, лишней фразы. Дай бог памяти был указан конкретный угол постановки крыльев, а подлые пиндосы его потом немного изменили и наших, типа, послали.

(66) строка определения переменной, прием чисто технический, нужна только на момент написания кода, зачем же потом ее оставлять. Ежели забываем, что в начало блока кода энту строку ставим, то нужно выключать комп и идти спать ;)

Кстати, почему то нигде не увидел про конфигурирование в режиме отладчика.
Запускаем отладку, в начале модуля/блока кода ставим точку останова, ну и начинаем весело кодировать.

Если нажать "вычислить выражение", то получим рассчитанное значение требуемой переменной. Соответственно, видим ее текущее значение, можем поползать по всем реквизитам и т.п.
в поле Выражение можем попробовать написать некое выражение и сразу проверить какой результат получится. Ну и конечно перетащить из выражения требуемую срооку кода в текст модуля.

Если скрестить оба метода, то вообще гуд получается.
у нас и контекстная подстановка реквизитов есть, и можно сразу проверить каков будет результат.
Только строку определния переменной нужно вставлять после начала отладки или ставить точку останова до ее выполнения.
76. Аркадий Кучер (Abadonna) 27.08.10 09:32
(75)
вроде наоборот, лишней фразы.

В формуле изобретения написали:
...отличающее тем, что.. установлены под углом 38 градусов

А надо было:
...установлены под углом, например, 38 градусов
77. Сергей Троицкий (tsd) 27.08.10 09:50
(76) вообще градусы указывать не нужно было.
Градус заранее на бутылках с алкоголем видить хорошо :D
78. Дмитрий Перминов (l_men) 24.10.11 16:38
(56) mbreaker, (55) Ivon, А не проще данный кусок кода вынести в отдельную процедуру и уж если что, то просто комментировать вызов данной процедуры? Хотя решение классное, я его даже в свой шаблон кода включил.
79. Ivon (Ivon) 24.10.11 16:44
(78). Можно, но в определенных случаях это не всегда будет удобно. Тем более, что в процедуры лучше выводить куски кода, которые могут повторяться в нескольких местах кода. Если фрагмент единичен, то выносить его в процедуру не имеет смысла. Это мое ИМХО.
80. Дмитрий Перминов (l_men) 24.10.11 17:57
(79) Ivon, Конечно ответ не по сабжу, в этом случае одна процедура может получиться очень большой, а где гарантия того что через пару недель не потребуется этот кусок кода, а так процедуру отладил и забыл о ней и в коде особо не мешается, но это лично мое мнение.
81. Сергей Самошин (saiten) 14.12.11 14:31
Красиво. Люблю такие, якобы очевидные, плюшки: улыбает и повышает настроение.
82. Владимир Водин (BalVlad) 24.01.12 23:23
Очень познавательно. Хотелось бы увидеть вторую и дальнейшие части. +
83. Гость 25.01.12 09:28
Я постaвил плюс не за то, что написано или открыто что-то супер
Мне лично это было известно и использование этой фичи для меня естественно, я даже не думaл, что другим будeт полезно
Но после прочтeния сабжа лично я считаю, что подобные публикaции как раз и помогают прогрaммистaм/разработчикaм совершенствовaть свой профессионализм
За это и плюсaнул
84. Дмитрий Ташланов (Necytij) 19.02.12 18:12
Спасибо. Я также как г-н в 64м пихал вручную пустую ссылку. Потом удалял. Иногда маялся, но редко, у меня нет длинных модулей пока. Работаю на малых и крохотных базах, однако, ваш метод возьму себе под крыло. немного под себя перенастроил - создал отдельный шаблон для спр и документа с автозаменой с "контдок" на:
#Если НЕ (Клиент Или Сервер Или ВнешнееСоединение) Тогда  //УДАЛИТЬ
	<?"ИмяПеременной"> = Документы.<?"", Документ>.ПустаяСсылка();
#КонецЕсли

Заодно вопрос, а как вы потом переносите с машину на машину свои шаблоны? Я вот взял шаблоны GROOVY за основу, как наиболее близкие мне, добавил что необходимым считал, да, только вот смотрю сейчас не на всех моих серверах одна и та же версия этих самых шаблонов в итоге. Как вы синхронизируете их?
Теперь буду осторожнее и надеюсь быстрее )
Еще раз сердечно благодарю за разборку такого деликатного метода.
85. Александр Муравьев (trunix) 29.02.12 17:58
86. Сергей Старых (tormozit) 23.03.12 13:00
А где же мой супер способ?
#Если _ Тогда
 ...
#КонецЕсли

Подробнее читайте здесь http://partners.v8.1c.ru/forum/thread.jsp?id=1001471#1001471
Способ несколько более рискованный чем с компилируемым Если, но я пользуюсь им.
87. Сергей Старых (tormozit) 23.03.12 13:08
Кстати способ с Если Ложь Тогда я описал тут http://www.forum.mista.ru/topic.php?id=256586 еще в далеком 2007 году.
88. Дмитрий Ташланов (Necytij) 08.05.12 23:26
(86) tormozit,
Очень интересует
#Если _ Тогда
отрабатывает нормально и на 8.1, и на 8.2? при всех типах соединения?
А то скобочку
не (клиент или сервер или внешнсоед)
для 8.2 писать надо другую... а так можно будет одну юзать.
89. Сергей Старых (tormozit) 09.05.12 10:41
(88) Будет работать и в 8.1 и в 8.2 во всех режимах компиляции
90. Ay Bv (Flashill) 14.06.12 07:52
Тоже постоянно так обманывал конфигуратор, но за
#Если НЕ (Клиент Или Сервер Или ВнешнееСоединение) Тогда...
большое спасибо :)
91. Александр Крынецкий (echo77) 27.03.13 11:52
Раньше так делал, правда без условия. И периодически забывал убрать, потом удивлялся почему не работает :-)
С условием можно и забыть про этот кусок и не убирать его
92. Алекс Ю (AlexO) 03.06.13 10:43
(35) anig99,
...Гилев...

Лучше бы потратили время на другое

я только за
93. Алекс Ю (AlexO) 03.06.13 10:47
(35) anig99,
В том же самом Delphi работа с базами данных происходит через BDE и т.д - в 1с можно работать с SQL посредством драйвера совершенно спокойно...

Только "забываете" упомянуть, что Дельфи и "прочие" работают с "собственными" БД, на которые и написано приложение на "Дельфи и прочих" ЯП.
А 1С работает "напрямую" посредством драйвера - с люббой SQL-базой, кроме собственно базой 1С.
А в С++ нельзя нормально работать с массивами...

С++ уже давно (лет так 15) заменен на Visual C, Borland C, и прочие "С".
И все там с массивами прекрасно, разве что они значительно отличаются (в лучшую сторону причем) от "массивов" 1С.
94. Александр Медведев (anig99) 03.06.13 13:41
(93) да... сейчас уже не язык программирования важен, а среда разработки. Вот, например, недавно вышел RAD Studio XE4... Там куча языков.
95. Алекс Ю (AlexO) 03.06.13 16:28
(94) anig99,
Там куча языков.

ну, может, кто-то и назовет это кучей: Delphi XE4 и C++ Builder XE4.
А все остальное под смартфоны и прочие мобилы - эту пену я за языки не считаю, через 20 лет никто и не вспомнит про смартфоны и языки "допрограммирования" для них... :)
96. Александр Орефков (orefkov) 02.11.15 15:06
У, какая старая тема.
Из свежих новостей.
Снегопат-Reborn позволяет такие типизирующие выражения прописывать сразу как комментарий:
Функция Некоторая Функция(Док, Таблица)
    //: Док = Документы.ВозвратМатериаловИзЭксплуатации.ПолучитьСсылку()
    Док. < тут выдаст методы и свойства ДокументСсылка.ВозвратМатериаловИзЭксплуатации
    //: Таблица = Новый ТабличныйДокумент
    Таблица. < тут выдаст методы и свойства типа ТабличныйДокумент
...Показать Скрыть

Фишка в том, что когда контекстная подсказка 1С получает текст модуля для анализа, снегопат заменяет "//:" на пробелы.
97. Сергей Кирпо (Sardukar) 17.12.15 08:50
Я вначале был в некотором шоке, но, почитав комменты, понял что народ это практикует и считает нормальным. Ладно, вам виднее. Я свой код засорять не буду, чтобы потом те, кто после меня читать его будут под стол не упали.
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа