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

15.02.10

Разработка - Механизмы платформы 1С

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

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

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

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

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

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

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

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

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

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

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

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

пример

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

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

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


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

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

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

См. также

Поинтегрируем: сервисы интеграции – новый стандарт или просто коннектор?

Обмен между базами 1C Администрирование СУБД Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

В платформе 8.3.17 появился замечательный механизм «Сервисы интеграции». Многие считают, что это просто коннектор 1С:Шины. Так ли это?

11.03.2024    4498    dsdred    53    

71

Как готовить и есть массивы

Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

Все мы используем массивы в своем коде. Это один из первых объектов, который дают ученикам при прохождении обучения программированию. Но умеем ли мы ими пользоваться? В этой статье я хочу показать все методы массива, а также некоторые фишки в работе с массивами.

24.01.2024    5286    YA_418728146    25    

63

Планы обмена VS История данных

Обмен между базами 1C Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

Вы все еще регистрируете изменения только на Планах обмена и Регистрах сведений?

11.12.2023    6405    dsdred    36    

111

1С-ная магия

Механизмы платформы 1С Бесплатно (free)

Язык программирования 1С содержит много нюансов и особенностей, которые могут приводить к неожиданным для разработчика результатам. Сталкиваясь с ними, программист начинает лучше понимать логику платформы, а значит, быстрее выявлять ошибки и видеть потенциальные узкие места своего кода там, где позже можно было бы ещё долго медитировать с отладчиком в поисках источника проблемы. Мы рассмотрим разные примеры поведения кода 1С. Разберём результаты выполнения и ответим на вопросы «Почему?», «Как же так?» и «Зачем нам это знать?». 

06.10.2023    18469    SeiOkami    46    

118

Дефрагментация и реиндексация после перехода на платформу 8.3.22

Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

Начиная с версии платформы 8.3.22 1С снимает стандартные блокировки БД на уровне страниц. Делаем рабочий скрипт, как раньше.

14.09.2023    12086    human_new    27    

74

Валидация JSON через XDTO (включая массивы)

WEB-интеграция Универсальные функции Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

При работе с интеграциями рано или поздно придется столкнуться с получением JSON файлов. И, конечно же, жизнь заставит проверять файлы перед тем, как записывать данные в БД.

28.08.2023    8811    YA_418728146    6    

141

Внешние компоненты Native API на языке Rust - Просто!

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Внешние компоненты для 1С можно разработывать очень просто, пользуясь всеми преимуществами языка Rust - от безопасности и кроссплатформенности до удобного менеджера библиотек.

20.08.2023    6275    sebekerga    54    

94

Все скопируем и вставим! (Буфер обмена в 1С 8.3.24)

Механизмы платформы 1С Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Рассмотрим новую возможность 8.3.24 и как её можно эффективно использовать

27.06.2023    15980    SeiOkami    31    

103
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. GROOVY 2505 09.02.10 13:28 Сейчас в теме
Удобно для кодинга. Сам так делал пару раз, правда без условия, и только на время кодинга...
2. mbreaker 1413 09.02.10 13:37 Сейчас в теме
(1) В условии основная фишка: его можно безболезненно забыть... :D
Да и во время отладки он не мешается...
4. Трактор 1246 09.02.10 13:41 Сейчас в теме
(2) И потом искать свой код тут http://govnokod.ru/1c
Его туда выложат настоящие говнокодеры :-)
23. iov 406 10.02.10 00:49 Сейчас в теме
(4) Хм вот всегда удивлялся пусть хоть весь мой код будет там . НО именно таким кодом большенство делает БЫСТРО И ДЕШЕВО и это работатет.
А если я сижу и пишу для себя для души. то я каждую строчку откоомментирую
Главное правило (потраченное время (еффективно*) = вознаграждение* оставшееся свободное время). тоесть если я портатил 1 час то останется 15 часов (примерно 24 -1 - 9(сон)). Так вот в идеале потраченное время стремимся свести к минимуму а вознаграждение к максимуму и достигается это именно забиванием на эргономичнось красоту и простоту и справку и камменты.
Да и извиняюсь Потом или вы или иной программист заработатет на ОПТИМИЗАЦИИ!!!
*еффективно это то время что оплачивается лично Вам. Тут уже поднималась статья на тему времени и его использования.
(21) Ну многие всетаки верно не считают 1С - ПРОГРАММИСТАМИ! Потому как все таки нет возможности работы с базами данных напрямую (записи) штатными средствами (да понятно что так меньше сломают но все же).
Потому как нет возможности штатными средствами чистить память за собой . Да много чено нету. Но зато 1С предоставила возможность зарабатывать больше большинства сишников дельфистов и иных. Да прогеры SAP ов больше получают но их меньше и им сложнее. А по поводу статьи... Ну вот чесно она же привлекла внимание? Вы потратили время написав комментарий. Но количество плюсов указывает на то что как минимум 22 человека получили ПОЛЕЗНУЮ информацию. Так что минус наверно стоило адресовать тем кто не хочет изучать азы, а автор статьи все таки донес крупицу истины.
лично я называя себя программистом 1С (8 лет стажа) в дуже понимаю что умение писать код и умение ПИСАТЬ КРАСИВЫЙ код - это две большие разницы.
А в большинстве когда ищут программиста ищут не того кто красиво пишет а того кто сделает меньше ошибок принесет, больше пользы, и не будет требовать доплатить за откамментированный код. И что не маловажно программист должен не только оптимизировать и "кирпичизировать"* программу а так же снизить расходы на её эксплуатацию.
* кирпичизировать - сделать максимально простую и непотопляемую систему с максимально простым в понимании и изучении интерфейсом.

P.S. Просьба авторов постов не кипятится отвечаю не ВАМ лично а не темы вами затронутые. Просто добавив немного буковок в базу сайта.
Designer1C; indigo_; arz; Valerich; +4 Ответить
24. iov 406 10.02.10 00:52 Сейчас в теме
(23) Блин надо почаще спать все таки... :o АпШибок море.
вобщем вспоминаем статью английских учены про то что если перепутать буквы то прочесть можно. :D
30. artbear 1448 10.02.10 12:33 Сейчас в теме
(23) В "красивом" коде как раз и ошибок меньше хотя бы за счет того, что его читать/изучать легче, а значит, и ошибки лучше видны :)
И как раз человек, умеющий писать "красивый" код, сложные вещи напишет реально быстрее и точнее, чем чел, не умеющий такого писать.

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

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

А сравнивать/разделять программистов и разработчиков ИМХО равносильно поведению простых юзеров, которых всех ИТ-ников "обзывают" программистами, независимо от роли, знаний, умений и т.д. :) - т.е. это такой крайне низкий уровень знаний и умений.
Designer1C; +1 Ответить
65. Abadonna 3958 14.03.10 11:22 Сейчас в теме
(30)
А сравнивать/разделять программистов и разработчиков ИМХО равносильно поведению простых юзеров, которых всех ИТ-ников "обзывают" программистам

Простые юзеры зовут еще круче - "компьютерщики" ;)
3. Трактор 1246 09.02.10 13:39 Сейчас в теме
(0) Я обычно добавляю комментарий // УБРАТЬ!!!!!!
Потом ищу по восклицательным знакам.

(1) Странное слово "кодинг". Созвучно словам модинг, гопинг и маркетинг.
6. mbreaker 1413 09.02.10 13:53 Сейчас в теме
(3) Можно искать и по "//УБРАТЬ!!!" и по "Если Ложь" и по "//Уп-с облажался забыл убрать!!!"...

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

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

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

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

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

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

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

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

ПС, Что-то подсказывает, что прочитавшие это пользователи Опенконфа и Телепата вытерли грустную слезу о потугах восьмерочников...
ms33; Оболтус; mtv:); MaxDavid; +4 Ответить
16. mbreaker 1413 09.02.10 19:23 Сейчас в теме
(14) честно скажу, не пользовался ни тем, ни другим... знакомство с миром 1С начал с V8 с самых её первых релизов... и наслушался критики в её сторону - вагон и две телеги... так что привычно... ;)

тем не менее не совсем понимаю, чем могут помочь надстройки конфигуратора при обращении к нетипизированному параметру? ведь такое обращение может быть как в событии (где ещё можно выйти на тип передаваемого параметра), так и в процедуре общего модуля... а "парсить" все обращения к этой процедуре - по меньшей мере неблагодарное занятие...
43. orefkov 1152 11.02.10 15:58 Сейчас в теме
(16)
тем не менее не совсем понимаю, чем могут помочь надстройки конфигуратора при обращении к нетипизированному параметру?


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

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

или

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



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

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

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

ЗЫ в тестировании - наше все :)
mbreaker; +1 Ответить
48. mbreaker 1413 12.02.10 13:57 Сейчас в теме
(47) да, спасибо за исправление... скопировал - не заметил ";"

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

Кстати, можно попробовать проверить :)
1000 раз или еще побольше с замером времени запустить код Выполнить(Строка), передавая обе строки в Выполнить.
15. artbear 1448 09.02.10 19:04 Сейчас в теме
(0) Бывшие пользователи и соучастники Опенконфа и его скриптов/плагинов постоянно матюгаются при написании кода в 1С 8 :)
ret-Phoenix; wokituk; cleaner_it; Mustard; ms33; Оболтус; mtv:); MaxDavid; +8 Ответить
17. mbreaker 1413 09.02.10 19:24 Сейчас в теме
(15) на вкус и цвет... все фломастеры одинаковые... :D

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

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

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

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

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

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

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

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

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

И готовы ли Вы назвать хоть один курс или книжку или аттестационный тест, в котором бы было описание или вопрос про вещи, подобные этой?
42. anig99 2843 11.02.10 15:00 Сейчас в теме
(38) Тут где-то была ссылка на целую книгу по оптимизацию написания кода...
Нет... все уловки я не знаю.
А про курсы... Эти курсы называются "школа, 9-11 классы"... Именно там была заложена основа, о которой я говорю.
29. artbear 1448 10.02.10 12:25 Сейчас в теме
(19) Я поставил плюс не за то, что написано или открыто что-то супер.
Мне лично это было известно и использование этой фичи для меня естественно, я даже не думал, что другим будет полезно.
Но после прочтения сабжа лично я считаю, что подобные публикации как раз и помогают программистам/разработчикам совершенствовать свой профессионализм.
За это и плюсанул.
nik2754; TreeDogNight; rusakov_igor; cleaner_it; Styvi; nerl; jeg; mbreaker; Трактор; shadowcpu; Evg-Lylyk; +11 Ответить
22. zaebidze 10.02.10 00:27 Сейчас в теме
Ну anig99 ты и выдaл)))))Дело в том что другие программисты и правильно что не считают тех кто занимается 1с программистами.Нуралиев правильно ответил для PC Magazine вот кусок статьи

"Теперь попробуем ответить на второй вопрос - о профессии разработчика приложений на базе платформы «1С:Предприятие». Все-таки, по нашему мнению, специалиста любой профессии характеризует не только инструмент, которым он пользуется, но и круг задач, которые он умеет решать. Нам кажется, лучше использовать не термин «программист», а именно термин «разработчик». Создание приложений на «1С:Предприятии» не является написанием программы. Написание кода - только часть работы. Это именно разработка приложения, строящаяся, как мы говорили выше, начиная от структуры прикладных объектов, описания их взаимосвязи, продумывания бизнес-процессов. То есть разработчиков на «1С:Предприятии» характеризует не знание синтаксиса встроенного языка. Профессиональные разработчики на «1С:Предприятии» - специалисты по разработке бизнес-приложений. Само по себе описание структуры данных в «1С:Предприятии», написание программы на встроенном языке, рисование форм не является сложным и осваивается на некотором уровне, достаточном для решения несложных задач, обычно за 2-3 недели. Но разработка бизнес-приложений - это весьма сложная задача, не менее сложная, чем создание, например, средств разработки, САПР и т. д."
Leon29; nik2754; Designer1C; AzagTot; cleaner_it; indigo_; iov; +7 Ответить
25. iov 406 10.02.10 00:54 Сейчас в теме
(22) Вот точно я то вспоминал кто же это сказал....
35. anig99 2843 10.02.10 20:33 Сейчас в теме
(22) В данном высказывании Нуралиев ставить 1совцев ВЫШЕ программистов. А я говорю о тех, кто не может поставить рядом словосочетания "1с Предприятие" и "программирование".
(23) Душелов, Гилев, Абадонна... Они находят возможность программировать вполную для 1с... Еще можно вспомнить 1с++, ei...1с - высокоуровневый язык программирования, поэтому много ему напрямую недоступно. В том же самом Delphi работа с базами данных происходит через BDE и т.д - в 1с можно работать с SQL посредством драйвера совершенно спокойно... А в С++ нельзя нормально работать с массивами...
(29) Лучше бы потратили время на другое - например на подробную статью о тонкостях работы запросов...
36. iov 406 10.02.10 21:36 Сейчас в теме
(35) Я еще раз повторюсь. Я сказал что ПУСТЬ ХОТЬ ВЕСЬ КОД ТАМ бУДЕТ ... И так же написал про то что я стремлюсь меньше работать и больше зарабатывать. Просто показатель эффективности работы не красота кода или его мега качество а желание клиента за него платить.
И если я пишу что-то то каменты описания и максимум универсальности стараюсь выжать. Уговорить меня (если оплата не по часам) добавить лишний реквизит может только ПОЛНОЕ отсутсвие других вариантов (при этом я делаю копию "до" "после" и описываю изменения). Но всегда стараюсь изучить что-то новое даже напрямую не связанную с 1С. И если кто-то что-то выкладывает чего не было раньше на ресурсе - Я ЗА. И Я ЗА КРАСИВЫЙ КОД если конечно средства не превышают задач цели.
Да и по поводу Нуралиева он ОБЯЗАН продвигать свой продукт. Так что пусть хоть религию 1С проповедует и пострижение в разработчики проводит ето дело каждого. Но в 1С действительно своя специфика... Как пример текущая хотелка клиента привязывать возврат от покупателя к одной накладной (а товар в возврате из накладных за месяц) И что делать основание - неправильно.
Но учитывая особенности учета в компании необходимо. Как програмисту мне это сделать 5 минут. Как разработчику мне это надо изучить возможные проблемы и методы их решения. И как обьяснить заказчику что это займет мое время и увеличит его затраты ? Директора считают деньги и готовы платить не за проблемы через год а за решение проблемы СЕЙЧАС. Так что я не готов тратить СВОЕ ВРЕМЯ и внедрять универсальные процедуры - оптимизировать -
и так далее. Это я на основной работе облизываю программу и внедряю и оптимизирую и модернизирую - потому что мне платят не за строчки кода и не за время а за безпроблемность, маштабируемость и гибкость.
Душелов, Гилев, Абадонна... ОНИ ПРОДАЮТ СВОИ РЕШЕНИЯ. Тоесть количество продаж зависит от качества кода и возможности его применения и развития. Так что .... Да кстати и они учились и развивались на статьях других...
39. mbreaker 1413 11.02.10 00:05 Сейчас в теме
(36)
Директора считают деньги и готовы платить не за проблемы через год а за решение проблемы СЕЙЧАС

Знакомая проблема... Вменяемым директорам полезно бывает озвучить в цифрах стоимость "решения проблемы через год" (50% гарантировано передумают ибо "считают деньги"). Для невменяемых составлять ТЗ, в котором указаны возможные проблемы при конкретной реализации, и заставлять подписаться в нём и в акте сдачи-приемке.
40. iov 406 11.02.10 10:45 Сейчас в теме
(39) НЕкоторых это не особо пугает... это же потом будет... Конечно акт подписывают и в коде пишу тем кто будет исправлять почему так сделал. И в документации. Но некоторые перцы все равно потом пытаются свое фи высказать.
92. AlexO 135 03.06.13 10:43 Сейчас в теме
(35) anig99,
...Гилев...

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

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

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

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

ну, может, кто-то и назовет это кучей: Delphi XE4 и C++ Builder XE4.
А все остальное под смартфоны и прочие мобилы - эту пену я за языки не считаю, через 20 лет никто и не вспомнит про смартфоны и языки "допрограммирования" для них... :)
26. iov 406 10.02.10 01:00 Сейчас в теме
Да и вообще учитывая что мы то хотьчто-то создаем. А посмотрите на бухгалтеров они то бедные кроме кучи отчетов и пачек архивной бумаги ничего не создают... Спросите их что они создали? А многие директора кроме создания перемещения кадров по компаниям и акустических колебаний на собраниях вообще нихрена не создали но ОНИ получают больше и руководят ВАМИ. Так что радость создания ЛЮБОГО кода это уже путь к большому и светлому чувству Я _ АРРЕНИТЕЛЬНЫЙ ПРОГРАММИСТ СОЗДАВШИЙ ДОХРЕНА ПРОГРАММ :D .
P.S. но кроме этого дерево- дом, дерево-сын, дерево-дуб все таки надобы выполнить :D
27. larisab 160 10.02.10 06:57 Сейчас в теме
(0) Отрицать полезные вещи трудно, поэтому поддержу anig99. Писать красочные статьи с картинками для студентов наверное надо, но вот данная тема... хм... есть что-то тошнотворное в этом... вспоминаются прописи в первом классе школы...
28. WellMaster 104 10.02.10 10:02 Сейчас в теме
Спасибо. Знал, но почитать было весело :)
31. artbear 1448 10.02.10 12:42 Сейчас в теме
И вообще мало в среде 1С публикаций, направленных на повышение уровня разработки как в кодировании, так и в разработке архитектуры бизнес-решений.

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

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

ЗЫ лично я давно, еще со времен 77, юзаю следущие варианты дополнительно к простому TODO :
TODO_МЕТАДАННОЕ - в комменте описываю изменения, который я вносил в метаданные типовой конфы, например, движения по доп.регистрам
TODO_ФОРМА
TODO_ИНТЕРФЕЙС
TODO_ПРАВА
и т.д.
очень удобно при анализе изменений в типовых конфах
33. WKBAPKA 214 10.02.10 15:25 Сейчас в теме
лично как по мне, мне в голову даже мысль об этом не приходила... а зачем? лучше немного потренировать мозги на развитие памяти... а вот забывать удалять такие кусочки кода всеж не следует, все же интерпритатор их отрабатывает :)
34. artbear 1448 10.02.10 19:11 Сейчас в теме
Завел новую публикацию Повышение удобства разработки в 1С 8
Сослался в своей публикации на сабж, т.к. считаю очень полезным.
37. mbreaker 1413 10.02.10 23:05 Сейчас в теме
(34) Приятно это слышать! :)
41. Tiger77 69 11.02.10 12:49 Сейчас в теме
Кто б еще написал шаблон, быстро генерирующий нужный код ?
52. ll13 1047 13.02.10 19:21 Сейчас в теме
#Если Клиент И Сервер Тогда // типизирование переменных без вреда для исполняемого кода
НужнаяПеременная = <Создание или назначение объекта нужного типа>;
#КонецЕсли

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

Правильно использовать следующую конструкцию
#Если НЕ (Клиент Или Сервер Или ВнешнееСоединение) Тогда
Объект = Документы.РеализацияТоваровУслуг.СоздатьДокумент();
#КонецЕсли
svartemov; NewNick; mbreaker; K_A_O; Поручик; artbear; +6 Ответить
54. mbreaker 1413 15.02.10 09:43 Сейчас в теме
(52) да, согласен, благодарю за поправку... сказывается апгрейд конфигурации "1С:Мозг программиста" с версии 8.1 на версию 8.2... :D
60. NewNick 26.02.10 23:16 Сейчас в теме
(52) #Если НЕ Клиент И Клиент Тогда
помоему короче ;)
плюс сразу позволяет вменяемому человеку на париться - ясно вписан бред

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

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

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

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

по поводу отдела - угадали... в принципе, данная статья и родилась после очередного консультирования на тему "как сделать быстрее" и последующего выискивания, где же забыли что-то закомментировать...
53. пользователь 13.02.10 22:05
Сообщение было скрыто модератором.
...
55. Ivon 673 17.02.10 12:11 Сейчас в теме
Я в конфигураторе сделал, чтобы циклы и Если раскрывались плюсами, как процедуры и функции, теперь для выделения определенных блоков использую конструкцию
Если Истина Тогда
// Блок кода, делающий то-то
......
КонецЕсли;
Теперь для того, чтобы скрыть ненужный блок я просто сворачиваю ненужное Если
mbreaker; +1 Ответить
56. mbreaker 1413 26.02.10 17:51 Сейчас в теме
(55) :idea: хм... тоже интересное решение... а главное - этот блок можно быстро отключить, поменяв флаг на Ложь...
Ivon, Вы не против упоминания такого трюка в одной из частей "Маленьких хитростей"? естественно с упоминанием о первоисточнике...
57. Ivon 673 26.02.10 18:12 Сейчас в теме
58. mbreaker 1413 26.02.10 18:20 Сейчас в теме
78. l_men 15 24.10.11 16:38 Сейчас в теме
(56) (55) Ivon, А не проще данный кусок кода вынести в отдельную процедуру и уж если что, то просто комментировать вызов данной процедуры? Хотя решение классное, я его даже в свой шаблон кода включил.
79. Ivon 673 24.10.11 16:44 Сейчас в теме
(78). Можно, но в определенных случаях это не всегда будет удобно. Тем более, что в процедуры лучше выводить куски кода, которые могут повторяться в нескольких местах кода. Если фрагмент единичен, то выносить его в процедуру не имеет смысла. Это мое ИМХО.
80. l_men 15 24.10.11 17:57 Сейчас в теме
(79) Ivon, Конечно ответ не по сабжу, в этом случае одна процедура может получиться очень большой, а где гарантия того что через пару недель не потребуется этот кусок кода, а так процедуру отладил и забыл о ней и в коде особо не мешается, но это лично мое мнение.
59. mbreaker 1413 26.02.10 18:25 Сейчас в теме
(55) Кстати, натолкнули на одну интересную идею... Постараюсь в ближ. время оформить её во вторую часть "маленьких хитростей"... пришлю ссылку... ;)
62. php5 25 04.03.10 02:02 Сейчас в теме
хм...как ни странно, я эту методу сам выработал и использовал иногда...дежавю...
63. mbreaker 1413 04.03.10 08:25 Сейчас в теме
(62) :D этот велосипед каждый для себя изобретает сам... вопрос в том, когда именно "осенит"...
прописные истины всегда лежат на поверхности, проблема как раз в том и состоит, что со временем "ныряешь" всё глубже, и часть неувиденного в начале так и остается где-то там за спиной...
смысл в таких публикациях двойной: с одной стороны "осенить" новичков как можно раньше, с другой - дать возможность профи "оглянуться назад" (ведь там тоже могло остаться что-то маленькое, но полезное)...
64. Мастер1С 780 14.03.10 07:21 Сейчас в теме
Блок Если ... Тогда... КонецЕсли лишний.
Просто пустую ссылку нужного типа запихиваю
66. mbreaker 1413 15.03.10 01:36 Сейчас в теме
(64) Ошибаетесь... Этот блок сохраняет массу времени при отладке, у вас не было случая, когда вы свою пустую ссылку забывали закомментировать, а потом никак не могли понять, почему же простейший кусок кода неправильно отрабатывает?
67. пользователь 15.03.10 04:03
Сообщение было скрыто модератором.
...
68. mbreaker 1413 15.03.10 11:05 Сейчас в теме
(67) прочитайте ту часть статьи, которая выделена красным цветом, там как раз подробно объясняется, зачем тут приведены "всякие варианты извращений с инструкциями препроцессора"...
69. Abadonna 3958 15.03.10 11:06 Сейчас в теме
(68) Да я уж свой пост и закрыл, когда ВНИМАТЕЛЬНО прочитал ;)
70. Abadonna 3958 14.08.10 08:29 Сейчас в теме
Блин, с самого начала изучения 8.х стал так делать, но как-то даже в голову и не пришло, что это ноу-хау ;) Это мне просто от Дельфи в наследство досталось
71. mbreaker 1413 27.08.10 06:57 Сейчас в теме
(70) "ноу хау" (просто для справки) переводится с английского (know how) как "знаю как"... так что соглашусь! это действительно "ноу хау", т.к. я ЗНАЮ КАК и сообщаю об этом тем, кто ещё может быть не знает...
72. Abadonna 3958 27.08.10 07:05 Сейчас в теме
Ноу-хау (от англ. know how — знать как) или секрет производства — это сведения любого характера (оригинальные технологии, знания, умения и т. п.), которые охраняются режимом коммерческой тайны и могут быть предметом купли-продажи или использоваться для достижения конкурентного преимущества над другими субъектами предпринимательской деятельности
Как правило, под ноу-хау подразумевают инновации, имеющие коммерческую ценность в силу неизвестности иным лицам в отношении которой введен режим коммерческой тайны. В высокотехнологичной экономике ноу-хау составляет ключевую часть активов компании.

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

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

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

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

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

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

А надо было:
...установлены под углом, например, 38 градусов
77. tsd 105 27.08.10 09:50 Сейчас в теме
(76) вообще градусы указывать не нужно было.
Градус заранее на бутылках с алкоголем видить хорошо :D
81. saiten 246 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 7136 23.03.12 13:00 Сейчас в теме
А где же мой супер способ?
#Если _ Тогда
 ...
#КонецЕсли

Подробнее читайте здесь http://partners.v8.1c.ru/forum/thread.jsp?id=1001471#1001471
Способ несколько более рискованный чем с компилируемым Если, но я пользуюсь им.
88. Necytij 08.05.12 23:26 Сейчас в теме
(86) tormozit,
Очень интересует
#Если _ Тогда
отрабатывает нормально и на 8.1, и на 8.2? при всех типах соединения?
А то скобочку
не (клиент или сервер или внешнсоед)
для 8.2 писать надо другую... а так можно будет одну юзать.
89. tormozit 7136 09.05.12 10:41 Сейчас в теме
(88) Будет работать и в 8.1 и в 8.2 во всех режимах компиляции
87. tormozit 7136 23.03.12 13:08 Сейчас в теме
Кстати способ с Если Ложь Тогда я описал тут http://www.forum.mista.ru/topic.php?id=256586 еще в далеком 2007 году.
90. Flashill 990 14.06.12 07:52 Сейчас в теме
Тоже постоянно так обманывал конфигуратор, но за
#Если НЕ (Клиент Или Сервер Или ВнешнееСоединение) Тогда...
большое спасибо :)
91. echo77 1868 27.03.13 11:52 Сейчас в теме
Раньше так делал, правда без условия. И периодически забывал убрать, потом удивлялся почему не работает :-)
С условием можно и забыть про этот кусок и не убирать его
96. orefkov 1152 02.11.15 15:06 Сейчас в теме
У, какая старая тема.
Из свежих новостей.
Снегопат-Reborn позволяет такие типизирующие выражения прописывать сразу как комментарий:
Функция Некоторая Функция(Док, Таблица)
    //: Док = Документы.ВозвратМатериаловИзЭксплуатации.ПолучитьСсылку()
    Док. < тут выдаст методы и свойства ДокументСсылка.ВозвратМатериаловИзЭксплуатации
    //: Таблица = Новый ТабличныйДокумент
    Таблица. < тут выдаст методы и свойства типа ТабличныйДокумент

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