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

09.02.2010 12:15 [15.02.2010 00:00] mbreaker 102 [+] [−] Перейти к комментариям (87)

Конфигурации: 1C: Предприятие 8
Алгоритм для 1С: Предприятие 8.0; 1С: Предприятие 8.1; 1С: Предприятие 8.2

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

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

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

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

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

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

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

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

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

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

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

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

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

пример

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

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

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


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

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

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

Пример использования

Пример использования

На публикацию ссылаются:

Оценка сообщества

102

Поставьте плюс, если вы рекомендуете данную публикацию к прочтению и использованию.
Плюс добавляет публикацию в Мои рекомендации.

[+] Рекомендую   [−] Не тратить время
Если рейтинг упадет до -5, то публикация автоматически скроется.