1с как поставить метку
При написании, просмотре, редактировании кода, навигации по пунктам меню 1С значительно ускорить эти процессы позволяют определенные комбинации нажатия на клавиши, так называемые «Горячие клавиши». Сразу скажу, что перечень будет приведен неполный. Только те, которые я использую в своей работе. Поэтому нелишним будет после прочтения этой статьи обратиться к справке 1С, чтобы расширить этот перечень. Список будет разбит на соответствующие разделы в соответствии с функциональным назначением. В основном будут рассмотрены сочетания, применимые при работе в режиме конфигуратора 1С.
При указании сочетаний клавиш будут использоваться латинские символы, хотя при использовании переключать клавиатуру на английский язык конечно же не нужно. Итак приступим.
Навигация
F12 — если установить курсор на место вызова процедуры или функции, то с помощью этой клавиши можно перейти непосредственно к процедуре или функции;
Ctrl + ] — позволяет из начала логической конструкции перейти в ее конец. Под логическими конструкциями понимаются: Если … КонецЕсли, Для … Цикл … КонецЦикла, Функция … КонецФункции, Процедура … КонецПроцедуры. То есть если курсор у нас спозиционирован на операторе «Если», то после применения данного сочетания, он спозиционируеься на операторе «КонецЕсли». Очень удобно в ситуациях, когда приходится анализировать большие блоки кода;
Ctrl + [ — позволяет из конца логической конструкции переместиться в ее начало;
Ctrl + T — при редактировании кода эта комбинация клавиш позволяет переместиться в дерево метаданных конфигурации и спозиционироваться на том объекте, чей код вы сейчас редактируете;
Alt + F2 — Устанавливает метку на строчке кода (впоследствии можно перемещаться к этой метке). Отображается синим кружком с левой стороны строки. Имя метки не устанавливается. Возможен последовательный обход меток в рамках текущего окна кода;
F2 — Переход к следующей метке по направлению «вперед» в текущем окне кода;
Shift + F2 — Переход к следующей метке по направлению «назад» в текущем окне кода;
Ctrl + F — поиск текста;
F3 — найти следующий фрагмент текста;
Shift + F3 — найти предыдущий фрагмент текста;
Ctrl + Home — переместить курсор в начало текста;
Ctrl + End — переместить курсор в конец текста;
Home — переместить курсор в начало текущей строки;
End — переместить курсор в конец текущей строки;
Ctrl + «стрелка вправо» — переместить курсор на одно слово вправо;
Ctrl + «стрелка влево» — переместить курсор на одно слово влево;
Работа с окнами
Alt + Enter — открыть окно свойств. Информация в окне отображается для того элемента который был выделен до нажатия клавиш. Например, это может быть объект конфигурации, ячейка табличного документа, и т.д.;
Alt + Shift + Enter — открыть окно дополнительных свойств. Используется для просмотра дополнительных свойств объектов конфигурации;
Shift + Ctrl + Т — открывает окно с шаблонами текста;
Редактирование текста
Ctrl + / (на цифровой клавиатуре) — закомментировать выделенный блок текста;
Shift + Ctrl + / (на цифровой клавиатуре) — раскомментировать выделенный блок текста;
Ctrl + C — скопировать выделенный текст в буфер;
Ctrl + V — вставить из буфера;
Ctrl + C — вырезать выделенный текст в буфер;
Выделение текста
Ctrl + A — выделить все;
Shift + Ctrl + Home — выделить текст начиная с текущей позиции курсора и до начала текста;
Shift + Ctrl + End — выделить текст начиная с текущей позиции курсора и до конца текста;
Shift + Home — выделить текст начиная с текущей позиции курсора и до начала строки;
Shift + End — выделить текст начиная с текущей позиции курсора и до конца строки;
Shift + Ctrl + «стрелка вправо» — выделить слово справа от курсора. Удерживая Shift и Ctrl и последовательно нажимая стрелку можно выделять сразу несколько слов;
Shift + Ctrl + «стрелка влево» — выделить слово слева от курсора;
Shift + «стрелка вниз» — выделить строку со смещением курсора на одну строчку вниз. Удобно использовать при выделении нескольких строк;
Shift + «стрелка вверх» — выделить строку со смещением курсора на одну строчку вверх;
Отладка
F7 — обновить конфигурацию;
F5 — обновляет конфигурацию, открывает новое окно в режиме предприятия и включает режим отладки открытого окна;
Ctrl + F5 — открывает новое окно в режиме предприятия и включает режим отладки открытого окна без обновления конфигурации;
F9 — устанавливает точку останова на текущей строке кода в конфигураторе;
Alt + F9 — открывает окно со списком всех точек останова конфигурации. Из этого окна можно переместиться к любой из них;
Ниже приведены сочетания клавиш, которые используются в процессе отладки после того как отработала точка останова
Sift + F9 — открывает окно в котором можно посмотреть значение переменной или результат вычисления какой-либо функции. Переменную или функцию можно предварительно выделить;
F11 — пошаговая отладка. При каждом нажатии выполняется одна строка кода;
Shift + F11 — текущая процедура или функция выполняется до конца, происходит выход из нее и отладочный курсор устанавливается на строке следующей за той из которой эта процедура (функция) вызывалась;
Здравствуйте! подскажите пожалуйста, как правильно пользоваться меткой
из синтаксис помощника я понял что должно быть написано как то так:
.
Для i=1 по N+1 цикл
c[i-1][N]=-cf[i-1]/cf[m];
перейти метка123 ;
c[i-1][N]=50;
метка123 ;
КонецЦикла;
если кто то заинтересуется вот так работает:
Для i=1 по N+1 цикл
c[i-1][N]=-cf[i-1]/cf[m];
перейти ~метка123;
c[i-1][N]=50;
~метка123:
КонецЦикла;
да, разумеется я слышал =) мне только чтобы проверить правильность работы кода, который я с vba "перенес", просто так будет намного проще ошибку если что найти.
когда меня только учили программировать много-много лет назад, преподаватель снижал на 5 баллов оценку тому, кто использовал метки! использование меток - дурной тон программирования и неумение правильно выстраивать логику работы системы. потому мне не интересно как работают метки в 1с. и ни разу за много лет мне не пришлось пользоваться метками. и Вам это не нужно - правильно выстраивайте алгоритм работы подсистемы.
(4) alenakrr,
нам тоже рассказывали о том как плохо ставить метки, но позволю себе привести цитату от zfilin в его блоге , где он делится впечатлениями о прочтении книги Стива Макконела "Совершенный код".
ну и сама цитата:
Очень приятно то, в книге нет догматов. Автор в каждой главе советует "включать свою голову" и делать свой выбор в пользу того или иного способа сообразно ситуации. Например, нет категорического запрета использования "goto", а только внимательный анализ и выводы о том, что его использование приведет к проблемам и рекомендации избегать использования этого оператора. Но, как пишет сам Макконел, "если вы твердо уверены, что это единственный правильный способ".
(5) Тот случай, когда искал информацию про "Перейти" и наткнулся на цитату из своего же блога. =)
И, да, кажется я сейчас нахожусь в ситуации, когда впервые было бы хорошо использовать безусловный переход.
Впрочем, я хочу еще хуже, я хочу безусловный переход по значению переменной типа того:
ИмяМетки = "М1";
Перейти ИмяМетки;
А это уже даже не грех, это грех + извращение. =)
Увы, 1С так не умеет.
использование меток - дурной тон программирования и неумение правильно выстраивать логику работы системы
Метки и GO TO - это отличный способ выйти из вложенных циклов (и единственный без дополнительных переменных). Также это единственный дешевый способ перейти в начало цикла без изменения итератора. В других случаях метки использовать не стоит - лучше подумать над логикой работы программы.
ЗЫ: Сам стал использовать метки только на 15-й год работы. Просто кое-кто еще до них не дорос )))
а чем так плох этот оператор?
в моем случае оператор goto используется что бы "визуально" сократить код, и избавиться от меток не составит труда.
я ведь сказал, что мне нужен синтаксис goto , только чтобы проверить правильность работы кода.
Принято считать, что:
1) использование меток в коде приводит к замедлению быстродействия по сравнению со всеми возможными методами (функциями и процедурами)
2) программист, который использует метки КРАЙНЕ НЕПРОФЕССИОНАЛЕН:
а) поскольку не умеет выстраивать алгоритм работы задачи,
б) поскольку не умеет пользоваться функциями или процедурами с параметрами.
и в 1с метки оставлены не для того, чтобы их использовать, а чтобы подтвердить язык 1с.
Кстати, визуально этот оператор ничего не сокращает, а, наоборот, усложняет чтение кода, потому что приходится прыгать туда-сюда между экранами, чтобы понять что за чем выполняется.
(7)
критика это хорошо :)
вы хотите сказать что я изначально неправильно подошел к своей задаче(может и так) тогда в чем ошибка, и как бы вы "распорядились временем"?
1. есть не тривиальный расчет.
есть код(VBA) которым он реализован.(код в котором куча меток)
2. требуется реализовать его в 1с не используя внешние компоненты( т.к. в моем понимании использование внешней компоненты, требует наличия компилятора на ПК, на котором производится расчет)
3. мои действия
-переписать код(VBA) с учетом возможностей/особенностей 1с(синтаксиса и.т.д.).
это делаю для того чтобы если где то допущу ошибку, гоняя параллельно 2 отладчика легко её найти.
-оптимизировать рабочий код 1С(избавиться от меток)
мне казалось у меня правильный подход к решению задачи.
это не критика - это попытка отговорить))
при лимите времени, тогда может стоит вызвать код VBA, а не переносить его в 1с?!
если excel не лицензирован, то возможно поможет open office?
переписывать под 1с при лимите времени можно только если Вы четко понимаете каждую строку vba)))
но переносить vba 1 к 1 в 1с - это нехорошо.
зы:
как я понимаю - Вы уже это сделали, раз решили проблему с метками.
тогда хотя бы оформите это внешней обработкой и пообещайте себе переписать при случае))
(9)
я понимаю, что вариант с excel-ем быстрый, однако для моей задачи он не подходит по ряду причин к примеру:
- необходима лицензия exсel, как собственно и сам exсel
- могут быть проблемы из за версии exсel
- и главное если 2 пользователя одновременно обратятся к 1 расчетному файлу будет "не очень хорошо"
делать все расчеты не на сервере а на пк пользователя конечно выход, однако если пользователей будет хотя бы 20 встанет проблемой каждому закинуть этот файл. + сразу 1 и 2 проблемы станут очень актуальными.
саму метку надо писать вот так: ~имяМетки
тильда в начале обязательна.
ПС:
ах, не заметил - раньше уже ответили. Ну раз в жизни бывают моменты нужды использования метки.
Если нельзя, но сильно хочется, то можно.
Включить голову, и понимать последствия действий. Можно в некоторых случаях и код в более читаемый вид привести, и изподвыперда вылезти - бывают исключения, что с Goto реализуется, а по другому уж очень заморочено. Этот вопрос поднимался уже с 90-х, тут все зависит от случая и метода его реализации.
Приведу пример хорошего, имхо, использования меток (GoTo), которым сам бывает пользуюсь.
Если коротко: использую GoTo для выхода из процедуры из многих точек этой процедуры с выполнением на выходе определенного блока операций.
Скажете, я плохой прогер из-за этого? )
(13) если программа оптимально выполняет те требования, для которых она написана, какая разница, как она написана. В конце-концов, врачей за плохой почерк критикуют, но лечиться то к ним ходят, несмотря на их почерк. А говорить, что плохой программист, потому что безусловный переход использует? ИМХО в корне неверно.
Лечиться раньше к "бабкам" ходили, на востоке - к "ламам, а сейчас анаферон жрут, в котором, как показали исследования на месс-спектрометре кроме сахаров ничего нет. К врачам только уже при серьезных симптомах идут, часто поздно, да и врачи не реже диагноз неверный ставят (консилиум китайских врачей, которых и расстрелять могут, угадывает диагноз по симптомам в 66% случаев, в то время как ИИ - в 83%).
(14) Сильно зависит от продукта. Если продукт является самодостаточной окаменелостью - то пусть он хоть в машинных кодах писался.
Но чем динамичнее его доработка и сопровождение - тем важнее КАК он написан.
И в 1С второе гораздо чаще первого.
Но чем динамичнее его доработка и сопровождение - тем важнее КАК он написан.
И в 1С второе гораздо чаще первого.
(22) Не очень понял комментария. В БСП, кстати, вполне следят за качеством кода. Большинство рефакторингов БСП, которые я наблюдал, делали код качественнее. Другое дело, что БСП получается "вечной альфой". Они плюют на обратную совместимость внешнего API. Хочешь написать универсальную обработку - не используй БСП.
(23) БСП, по мнению многих неназванных героев, - очень сложная штука. И действительно маразм переиспользования и дейкстровской арийской чистоты кода приводит к стеку вызовов размером с оборотно-сальдовую ведомость средней руки предприятия. Тут уже GO TO с моей точки зрения лучше, чем вся эта спагетти-связанность бесконечного числа бесполезных модулей, функции и процедуры которых мигрируют от версии к версии, что весьма дурно сказывается на поддержке решений, БСП использующих.
БСП, по мнению многих неназванных героев, - очень сложная штука. И действительно маразм переиспользования и дейкстровской арийской чистоты кода приводит к стеку вызовов размером с оборотно-сальдовую ведомость средней руки предприятия.
Я не принимаю это как аргумент. С чего это сложность кода должна автоматически приниматься как аргумент в сторону его "некачественности"?
Напишите все то же самое проще и тогда будет о чем поговорить.
Включая обсуждение того, какое из двух решений будет проще развивать.
В "моем мире" это почти одно и то же.
Качественный код отличают две вещи - эффективность и "поддерживаемость" (читабельность и модифицируемость).
Я не хочу ввязываться в спор, что якобы БСП можно было написать лучше. Но лично мне кажется, что большинство людей, сетующих на сложность БСП, просто сравнивают теплое с мягким.
Но лично мне кажется, что большинство людей, сетующих на сложность БСП, просто сравнивают теплое с мягким.
Ну вот от ГОТО перешли к БСП, но по мне ГОТО не так страшен, как страшна БСП, в которой спагетти-кода и безо всякого ГОТО хватает. И поддерживаемость кода с ГОТО (при правильном его применении для выхода из вложенных циклов, например) лучше, чем кода с дополнительными переменными, реализующими подобный функционал без ГОТО.
(13) Я считаю наоборот, если программист сильный и уверен в себе, то не будет спрашивать, что можно использовать, а что нет. В крайнем случае можно замерить производительность, если на то пошло. А слабый как раз будет оглядываться что можно, что нельзя. Обо нет абсолютной истины, все относительно в нашем мире и даже код.
Я считаю наоборот, если программист сильный и уверен в себе, то не будет спрашивать, что можно использовать, а что нет.
Для таких категоричных выводов информации маловато :)
Но данный пример неудачен. Он слишком легко переписывается на более читабельный без Перейти.
ЗЫ. Ну еще вкусовщина, конечно, но я не одобряю венгерскую нотацию даже в таких лайтовых и понятных вариантах. Люблю, чтобы код читался как проза и глаз не спотыкался. Кстати, не все знают, что редактор модулей легко настраивается на подсветку всех вхождений текущего операнда. Это снимает очень много проблем при анализе чужого или подзабытого кода. Ума не приложу, почему эта настройка не сделана дефолтовой, как в большинстве IDE. Кстати, а что означает нижнее подчеркивание в твоем стайлгайде?
(34) По условию человек говорит, что после первой же проверки остальные не делаются. И именно поэтому нужен GOTO в самый конец процедуры, чтобы там сообщить.
Это бесконечный спор) И, на самом деле, тут только вопрос архитектуры.
Мне только один раз пришлось пользоваться оператором именно во вложенных циклах, как писал коллега выше. Но только из-за того, что поступили новые требования, когда все уже было написано. Потом этот кусок был переписан целиком.
Чтобы использовать данную обработку, необходимо получить API-ключ Яндекса в Кабинете разработчика (ссылка на форме обработки).
В таблице "Адреса на карте" вбивается адрес (координаты определяются автоматически).
В таблице "Маршрут" добавляются автоматически из таблицы "Адреса на карте" (при выборе адреса галкой). Можно менять порядок строк маршрута.
При желание обработку можно будет доработать для своих нужд.
Тестирование производилось на платформе 8.3.13 и 8.3.15. Будет работать на любой платформе в обычном и управляемом приложении.
Обработка делает следующее:
- выводятся метки и прокладывается маршрут между метками.
- выводятся разноцветные метки, прокладывается маршрут между метками и подсчитывается расстояние при прокладке маршрута между адресами;
- выводятся метки, на нажатии которых высвечивается балун с содержимым;
- метки на карте группируются (кластеризуются) при уменьшении масштаба.
- построение маршрутов между двумя точками;
- возможно выбрать вид маршрута: автомобильный, общественный транспорт, пешеходный (пеший);
- при автомобильном маршруте есть возможность учитывать пробки.
Работа с Яндекс-картами в 1С (вывод меток, прокладка маршрута, отображение балуна, вывод меток в кластеры) (обычное приложение):
Работа с Яндекс-картами в 1С (вывод меток, прокладка маршрута, отображение балуна, вывод меток в кластеры) (управляемое приложение):
Работа с Яндекс-картами в 1С (вывод меток, прокладка маршрута, отображение балуна, вывод меток в кластеры) (обычное и управляемое приложение):
Специальные предложения
Автор запретил комментарии
Просмотры 6427
Загрузки 43
Рейтинг 9
Создание 13.01.20 10:50
Обновление 23.02.20 20:44
№ Публикации 1178717
Конфигурация Конфигурации 1cv8
Операционная система Не имеет значения
Вид учета Не имеет значения
Доступ к файлу Абонемент ($m)
Код открыт Да
Полная автоматическая загрузка данных, гибкие настройки списания партий, учтен опыт реальных производителей и оптовиков
См. также
Конвертация любых адресов, написанных в свободной форме, к ФИАС Промо
Допустим у нас есть база с адресами клиентов, и написаны они могут быть как душе угодно. С опечатками, без индексов, без разделителей, в совершенно любом формате. Вот было бы здорово иметь функцию, которая одним нажатием кнопки преобразует любую белиберду к строгому представлению адреса по ФИАС? Восстановит индекс, исправит опечатки и вернёт на 100% валидный адрес. Для всех, кто мечтательно сказал "ДА!", выкладываю данную обработку.
2 стартмани
30.06.2020 11171 100 XilDen 15
Сервис push-уведомлений для 1С (Push Notification Service For 1C - PNS4OneS)
1 стартмани
02.02.2022 4556 18 ltfriend 5
Создание интерактивных обучающих курсов с помощью Vanessa Interactive
Приветствую Вас, коллеги. Сегодня Вам предлагается рассмотреть технологию создания интерактивных обучающих курсов, системы Onboarding, интерактивной справки для любых конфигураций разработанных на базе платформы 1С при работе в web клиенте. Прошу посмотреть ролик, кому неинтересно, как это работает, можно дальше не читать. Тестировалось на 1С:Предприятие 8.3 (8.3.20.1646).
1 стартмани
02.02.2022 3234 0 Viktor_Ermakov 2
Универсальный метод, html шаблоны, страницы с авторизацией и без, многоязычность, страница авторизации, etc.
1 стартмани
22.01.2022 4406 7 vl-sher1 29
Модуль обмена с QIWI Промо
Компании, которые используют систему моментальных платежей QIWI, ценят ее за удобство по скорости выплат и для платежей по запросу. Но такие переводы сложны для учета, а при большом объеме проводимых операций отнимают много времени и превращаются в дополнительную головную боль. Мы сотрудничали с компаниями, которые отправляют большое количество платеже на QIWI, и часто слышали боль бухгалтеров о том, как им сложно работать с такими переводами. Поэтому мы автоматизировали выплаты через QIWI в 1С и создали модуль интеграции 1С c API QIWI Wallet и QIWI TopUp.
5 стартмани
25.05.2020 10638 1 Neti 10
Расширение конфигурации для Web-доступа к 1С (1С в роли back-end)
Для реализации того, чтобы 1С формировала и отдавала страницу, которую можно было бы открыть через браузер было написано расширение, которое позволяет публиковать из 1С произвольные ресурсы, будь то API, сайт или изображения / прочие файлы.
1 стартмани
01.04.2021 11840 13 SaschaG 4
Работа с картами в 1С на примере бесплатной библиотеки Leaflet
Разработка функционала отображения и выбора пунктов доставки на карте прямо в 1С с помощью бесплатной библиотеки Leaflet. Тестирование производилось на платформе 8.3.15.1534 на тонком клиенте.
1 стартмани
31.03.2021 14942 49 Parsec1C 18
1 стартмани
24.03.2021 10649 17 ltfriend 12
BIM: взаимодействие с платформой Autodesk Forge Промо
Предлагаемый пример демонстрирует широкие возможности для взаимодействия «1С:Предприятие» с платформой Autodesk Forge и позволяет вам получить базовые представления о применения технологий информационного моделирования в строительстве. Поддерживаются все версии платформы от 8.3.12 и выше до 8.3.18.
1 стартмани
25.11.2020 58106 13 kandr 3
Загрузка данных о продажах ОЗОН из API Ozon и Отчетов в формате *.xlsx в документ "Отчет комиссионера"
Обработки предназначены для следующих конфигураций: Бухгалтерия предприятия, редакция 3.0; Управление нашей фирмой, редакция 1.6; Управление торговлей, редакция 10.3; Управление торговлей, редакция 11; Комплексная автоматизация 2; ERP Управление предприятием 2
Рассмотрим ситуации использования операторов перехода Перейти (GoTo), Возврат (Return), Прервать (Break), Продолжить (Continue). Как вы считаете - это дурной тон, нормальная практика или зависит от ситуации?
Этот вопрос появился у нас в процессе обсуждения некоторых технических вопросов и проведения code-review, но мне интересно обсудить его и на данном тематическом ресурсе. Скажу сразу - мнение в нашей команде разделилось.
Со времен «старой школы» существует мнение, что структурное программирование — это хорошо, а любое отступление от него — это плохо. Однако, общение с профессиональными программистами показывает, что использование операторов break, continue, return на практике применяется довольно часто, потому что это удобно и в большинстве случаев делает программу более понятной. Если взять код типовой конфигурации от компании 1С и немного покопаться, то встречаются эти оба подхода вперемешку (предположу, что писали разные люди в разные временные промежутки).
И действительно Дональд Кнут в свое время писал:
«… Настоящая цель программиста состоит в том, чтобы формулировать наши программы таким образом, чтобы их было легко понимать.»
Давайте рассмотрим примеры использования и не использования этих операторов и сравним.
1. Оператор Перейти (GoTo).
Это совсем дурной тон и его использовать не будем). Однако интересно было бы услышать ваши мысли, возможно в сообществе еще есть «староверцы».
2. Оператор Возврат (Return).
Давайте рассмотрим некоторый виртуальный пример. Задача будет следующая: Требуется написать функцию получения математическое ожидание покупок клиента или средний чек.
Какие выводы мы можем сделать из двух вышеуказанных примеров?
- Во втором примере мы теряем локальность — при достаточно длинном тексте процедуры нужно еще посмотреть, не выполняются ли какие-то действия после условного оператора. Да и не совсем понятно, зачем добавлять лишний уровень вложенности. Теперь представьте, что вы проводите анализ кода (code-review), то вам придется время от времени скролить вверх и вниз всю эту простыню кода, чтобы вернуться к оператору условий.
- Дополнительно во втором примере нам пришлось вводить переменную, в которой хранится результат выполненных операций. Вспоминаем о «Бритве Оккама» и понятии «Не плоди лишних сущностей».
- Как вы уже догадались, то проблему большого куска кода в обоих случаях мы можем подвергнуть (в принципе должны) рефакторингу и заключить в отдельную функцию.
3. Оператор Прервать (Break)
Один из самых востребованных операторов, если рассмотреть программирование на C++. В свое время я часто его использовал в связке с Switch и Операторах цикла (For, While). Обратите внимание, что оператор "Прервать" может использоваться и для выхода из бесконечного цикла.
Рассмотрим вариацию типового примера для подключения к клиенту тестирования механизма автоматизированного тестирования от 1С.
Какие отличия мы видим?
- в первом случае мы последовательно встречаемся с условиями, так проводить анализ значительно проще на мой взгляд
- во втором случае код внутри процедуры получился значительно меньше и сразу видно условие выхода из цикла
- Использование "вечных" условий в операторах цикла - это дурной тон для языка 1С Предприятие.
4. Оператор Продолжить (Continue)
Оператор "Продолжить" (continue) позволяет сразу перейти в конец тела цикла, пропуская весь код, который находится под ним. Это полезно в тех случаях, когда мы хотим завершить текущую итерацию раньше времени.
Будьте осторожны при использовании оператора "Продолжить" с циклом "Пока" (while). Поскольку в этих циклах инкремент счетчиков выполняется непосредственно в теле цикла, то использование "Продолжить" может привести к тому, что цикл станет бесконечным!
Рассмотрим задачу - Требуется выполнить предварительную обработку таблицы данных загруженную из Excel.
В таблице хранится наименование контрагента и некоторые дополнительные данные (сумма и т.п.). В рамках обработки будем искать ссылку на контрагента в базе данных, если данные битые, то будем пропускать поиск.
Процедура "НайтиСсылкуПоНаименованию" ищет ссылку контрагента в базе 1С.
Функция "ЭтоБитыеДанные" проверяет наличие "кривой" информации в полях Сумма, КонтрагентНаименование.
Как видно, то в результате необдуманного выбора оператора цикла, установки счетчика и размещения условия прервать, мы уйдем в бесконечный цикл. Лучше переписать так:
Теперь рассмотрим вариант без использования оператора "Продолжить".
- В первом случае мы легко можем допустить ошибку, которая приведет к бесконечному циклу (эта ошибка будет "плавающая", т.е. не всегда будет срабатывать). Поэтому лучше выбрать другой оператор цикла.
- Большой код, рекомендуем выносить рефакторингом.
- Второй вариант выглядит более логически понятным и "завершенным".
5. Операторы прервать и продолжить
Многие учебники рекомендуют не использовать операторы "Прервать" (break) и "Продолжить" (continue), поскольку они приводят к произвольному перемещению точки выполнения программы по всему коду, что усложняет понимание и следование логике выполнения такого кода.
Тем не менее, разумное использование операторов "Продолжить" и "Прервать" может улучшить читабельность циклов в программе, уменьшив при этом количество вложенных блоков и необходимость наличия сложной логики выполнения циклов.
Функция "ЭтоБитыеДанные" проверяет наличие "кривой" информации в полях Сумма, Контрагент.
Код выше требует рефакторинга, т.к. гонять цикл впустую (вдруг битые данные будут сразу со второго элемента) - это "жесть" конечно. Иными словами для следования структурному подходу требуется изменение структуры.
Рассмотрим результат сравнения:
- Не желание использовать операторы переходов вынудило нас во втором случае полностью переписать код
- Во втором случае потребовалось заводить лишние переменные
- Во втором случае потребовалось вынести часть логики из цикла в конец функции, что увеличивает объем кода выполняющий решения поставленной задачи
- В циклах "Для" и "Для каждого" удобно использовать оператор "Продолжить" для быстрого перехода к следующей итерации по результатам условий, если текущая строка не требует обработки.
Заключение
Я считаю, что использование или не использование операторов зависит от ситуации. В некоторых случаях- это позволяет существенно упростить написание и понимание кода. Однако, в некоторых случаях небрежное или "слепое" использование операторов переходов может привести к нежелательным последствиям.
- Операторы " Продолжить " и " Прервать " удобно использовать в циклах " Для " и " Для каждого "
- Если речь идет про оператор цикла " Пока ", то тут лучше стараться не использовать " Продолжить ", т.к. в некоторых комбинациях возможно создание бесконечного цикла.
- Дурной тон в операторах циклов использовать "вечные" условия по типу " Пока Истина Цикл".
- При использовании оператора " Возврат " надо следить, чтобы не оставалось недостижимого кода.
- Также возможны случаи написания недостижимого кода с операторами " Продолжить " и " Прервать ".
- Оператор " Возврат " удобно использовать в начале функций при выполнении проверок на консистентность (корректность) входных параметров.
- Оператор " Перейти " запрещено использовать.
- Если придерживаться структурного подхода, то следует себя ограничивать в создании вложенности (или "матрешек") с условиями " Если Тогда ", так как это затрудняет понимание кода и увеличивает критерий цикломатичности.
- В процессе разработки (кодирования) всегда выполняем рефакторинг кода и выносим большие блоки в отдельные функции.
- Используйте в процессе работы анализ качества кода (код-ревью) (По следам код-ревью, Как завести у себя в команде код-ревью. Отвечаем на вопросы)
- Используйте тестирование и автоматизированное тестирование (Автоматизация тестирования, Пример создания сценарного UI теста для платформы 1С)
Специальные предложения
Во втором примере всегда делаю ЗначениеВозврата в начале функции.
Плюсом это сразу дает понимание, что возвращается из функции.
Плюсом сразу определяешь ЗначениеВозврата по умолчанию, которое всегда вернется, если даже одно условие с кодом изменения не сработает.
Крутку в любом случае по коду делаешь.
Мне для того и дано колесико мышки, чтобы крутку можно было делать удобно, это не аргумент.
(1) На счет скролла кода:
1. С психологической точки зрения при постоянном переключении туда-сюда больше устаешь и соответственно теряется эффективность.
2. По некоторым рекомендациям проведения код ревью: чем меньше код и более компактный, тем проще проводить эту процедуру.
3. С точки зрения эффективности анализа кода, гораздо проще понять в чем суть:
т.е. чем компактней код тем лучше, но не всегда такого можно добиться.
"Оператор "Перейти" запрещено использовать."
Если бы все было именно так, то этого оператора не было в синтаксисе.
(4) Это правило хорошего тона. Однако, мне встречались реализации на 1С, где довольно часто использовался этот оператор. И выглядел этот кода довольно уныло.
С другой стороны, если взять Ассемблер (или машинные коды), то там как раз в большинстве своем использования операторов перехода и особенно "перейти" (jmp)
(6) при программировании конечных автоматов логичнее использовать goto,
если вы чего-то не . то это не значит что это не . .
Статья из серии "Дейкстру и Вирта не читал , но имею собственное мнение "
Пфффф, у меня по арифметике было "5"!
Выводы гениальны, конечно.. <ОператорName>удобно использовать там, где он уместен.
Не понял, откуда у вас получился вывод, что Оператор "Перейти" использовать запрещено?ОператорName>
Прочитал статью по диагонали. НЕ увидел аргументированного вывода по переходу. Он здесь в принципе не раскрыт. Его можно и нужно использовать в условиях когда например тебе нужно выполнить код через Выполнить() и не хочешь чтобы выполнялась громоздкая конструкция в случае когда какая то проверка не выполнилась. По поводу примеров написанных выше скажу только одно. второй пример супер не оптимальный и можно сократить как миниму несколько возвратов, так же разность возвращаемых данных это просто жесть. Когда попробуешь потом возврат обработать еще такую же простыню получишь
Мне частенько приходится взаимодействовать с 1С-разработчиками, и во время совместной работы над проектами замечаю, что далеко не все из них хорошо знают свой главный инструмент – «Конфигуратор». Причем это не относится к степени крутости девелопера. Как оказалось, даже синьоры пользуются далеко не всеми возможностями «Конфигуратора», а ведь они могут сэкономить кучу времени, а тем самым повысить продуктивность разработчика.
Под катом я решил собрать несколько полезных фишек стандартного конфигуратора, которыми пользуюсь регулярно. Многие из них появились в платформе «1С:Предприятие 8.3.х», поэтому перед тестированием обязательно проверьте номер версии установленной у вас платформы.
Закладки
Хорошо, если новые функции добавлены в самый конец модуля, а если потребовалось расположить в разных частях? Вот тут начинается самое интересное. Одни программисты начинают скролить текст (как правило, этим страдают новички). Более продвинутые применяют поиск по тексту (Ctrl + F).
Оба способа рабочие, но пользоваться ими долго. Куда правильней использовать функцию «закладки». Например, переходим к какой-нибудь строке. Нажимаем ALT + F2 и получаем закладку (слева от строки отобразиться квадратик).
Убирается закладка тем же сочетанием клавиш. Так вот, закладок может быть в модуле расставлено много. По ним легко передвигаться нажатием клавиши F2. Фича крутая, но она была изначально не доделана и не позволяла, например, передвигаться по закладкам в разных модулях. Это досадное ограничение создавало лишние тормоза для программистов, привыкших к хорошим IDE (например, Visual Studio, PHP Storm).
В версии 8.3 недочет исправили и сделали классную вещь – «Список закладок». Нажимаем клавиши «Ctrl + Shift + F2», и перед нами откроется окно с полным списком установленных закладок.
В нем перечислены все закладки в разрезе модулей. Для каждой закладки указан номер строк и доступен перечень действий: перейти к коду, удалить закладку, удалить все закладки.
Таким образом, работать с закладками стало на порядок проще. Еще бы добавили возможность установки горячих клавиш на закладки, и стало бы совсем хорошо. Помню еще со времен «Delphi 6» привык к установке закладок по горячим клавишам Alt + . Наставил закладок и быстро перемещайся по ним.
Группировка строк
В «1С:Предприятие» с самого начала была одна большая проблема – отсутствие возможности создавать дополнительные модули для определенных объектов. Например, есть у меня справочник «Контрагенты» и мне хочется разделить его функционал на модули. Допустим, функционала очеееень много. Так вот, в моем распоряжении все равно стандартный набор: Модуль объекта, Модуль менеджера и модуль формы. Понятное дело, что у каждого модуля своя роль, но что делать мне с моими 100500 функциями, которые относятся непосредственно к справочнику «Контрагенты»?
По мнению 1С я должен оформить их в виде общего модуля. С одной стороны, идея классная. Делаем модуль, его сразу видно и т.д., и т.п. Правда всегда есть один нюанс. Если следователь этой методике, то при наличии кучу объектов в конфигурации число общих модулей будет зашкаливать.
Вот взять хотя бы библиотеку БСП. Стоит ее внедрить и в количестве модулей начинает теряться. Я уже молчу про конфигурации, которые построены на базе БСП. Там и сто пятьсот модулей от БСП, и еще столько же специально для конфигурации.
В общем, неудобство налицо (особенно после опыта разработки в языках, где нет подобных ограничений). Увы, спастись от этой проблемы в настоящее время не получится. Зато, мы можем использовать возможности группировки функций/процедур в модулях.
Например, есть у нас общий модуль «РаботаСКонтрагентами». В нем часть функций отвечают за поиск контрагента, другая часть за загрузку контрагентов из внешних источников и т.д. Чтобы не потеряться во всем этом многообразии возможностей, можно логически сгруппировать все функции/процедуру. Для этого в платформе 8.3 появилась функция под названием «Области». Рассмотрим пример:
После добавление областей (язык препроцессора) наш код будет сгруппирован. Если их свернуть (области), то в итоге мы увидим симпатичный комментарий (см. рисунок ниже):
Клик мышкой по плюсику развернет область, и мы увидим свернутые функции. Если хочется сразу развернуть все имеющиеся функции (в пределах области), то кликаем по плюсику удерживая Ctrl.
Вот такая мега удобная вещь и в модулях с большим количеством функций спасает очень даже. В предыдущих версиях платформы было модно использовать для подобных целей блоки комментариев, но управлять/добавлять областями явно удобней.
Форматирование кода
Собственно говоря, тут и рассказывать особо нечего – выделяем код, нажимаем «Alt + Shift + F» и редактор попытается привести его в божеский вид в соответствии с вшитым code-style. Функция работает вполне сносно и ей обязательно надо пользоваться. Пишу это потому, что неоднократно видел, как разработчики пытаются отбивать отступы самостоятельно. Это конечно круто, но зачем тратить время, если большую часть работы можно выполнить одной горячей клавишей?
Комментирование
Опять же, никаких секретных действий – выделили код, нажали “Ctrl + num /” (слеш на дополнительной области клавиатуры) и получили закомментированный участок. Захотели вернуть обратно? Не беда! Выделяем закомментированный участок кода, нажимаем «Ctrl + Shift + num /» и мгновенно приводим его в боевой режим. Фишка попсовая, но опять же, новички про нее не знают, и тратят кучу времени на расстановку слешей. Да еще и матерят компанию «1С», за отсутствие возможности многострочного комментирования, как в продвинутых язык программирования.
Быстрая вставка специальных символов
Иногда возникает необходимость быстро вставить в редактор специальный символ (которого нет на клавиатуре). В большинстве случаев разработчики используют для этого функции встроенного языка (например, символ). А ведь есть способ проще. Если удерживать клавишу Alt и набрать на доп. клавиатуре код нужного символа (из таблицы ASKII), то он тут же будет вставлен. Например, держим ALT и набираем 65. На выходе получаем букву «А». Или вводим 4 и получаем бубновую масть.
Хорошо, с этим понятно, но какой от этого еще можно получить профит? Лично я, таким образом вставляю символ амперсанда (&). Все знают, что этот символ используется для определения параметров в языке запросов. Неудобство состоит в том, что текст запроса мы пишем на русском языке, а для добавления этого символа перед параметром приходится переключить на английский, затем нажать Shift + 7, а потом вернуться обратно на русский.
Чтобы избавить себя от этой рутиной последовательности действий, я использую выше озвученную функцию. С ее помощью для установки амперсанда требуется лишь набрать с удержанной клавишей «alt» последовательность цифр 38. При этом надобность в двойном переключении языка отпадает.
Многие могут подумать, что я искусственно раздул проблему из ничего, но тут просто дело привычки. Кода приходится писать много и вот такие мелочи немного повышают производительность и избавляют от лишних нажатий клавиши backspace (для удаления случайно набранных символов). Не убедил? Тогда просто выделите время и попробуйте себя переучить.
Читайте также: