Руководство по стилю кода от Гения 1С
Существуют руководства по хорошему стилю программирования, вот пример от Google. Стиль — это не столько приемы хорошего кода, сколько об красивом и понятном оформлении кода.
Ведь если код оформлен красиво, он легче воспринимается и быстрее понимается не только вами, но и другими программистами, которым придется с ним работать.
В оформлении стиля нужно ориентироваться на типовой код. Не потому, что там правильно и идеально, а потому, что большинство программистов работают с типовым кодом и отличия в стиле от стиля типовых будет «бить по глазам». Рекомендации от самой 1С можно в открытом доступе почитать на ИТС.
Выражения
- После запятой ставится пробел, перед — не ставится.
- После и перед точкой вызова метода/реквзита пробел не ставится
- Арифметические операторы + — = > < и другие выделяются пробелами в обеих сторон
Вот пример типового кода 1С, где наглядно видны эти правила:
Некоторые программисты 77 не используют эти правила, потому что раньше были другие принципы, даже в типовом коде. Поэтому они так привыкли и их код «режет глаз». Я сам переучивался оформлять выражения под восьмерку.
Уровни, отступ
1С не жалеет разделителей строк, разделителями обрамляются с обеих сторон:
- Начало и конец процедуры
- Если, КонецЕсли
- Цикл, КонецЦикла
Последовательности обычных операторов не разделяются разделителями. Но если строк много, лучше их разбивать, объединяя в блоки, общие по смыслу.
Вот пример, где эти принципы видны:
Многострочные литералы
Переносите кавычку начала запроса на новую строку, так текст запроса будет прижат влево и будет смотреться компактнее:
Обычно новички делают так и это сразу выдает неопытного программиста, потому что в таких случаях может даже понадобиться прокручивать текст запроса, чтобы его посмотреть целиком:
Аналогично нужно оформлять и другие многострочные литералы — прижимать их влево.
Имена переменных
Для счетчиков обычно используются следующие имена.
- Сч, Инд — для счетчика цикла.
- Стр, Кол — для счетчика строк, колонок
Если в рамках процедуры используется только один объект, то можно использовать сокращения:
- ТЗ — для таблицы значений
- ТД, ТабДок — для табличного документа
- С — для списка, строки, структуры
- М — для массива
- Запрос, З — для запроса
- НЗ, Движения — для набора записей
- МЗ, Движение — для менеджера записей
- ПЗ — для построителя запроса
Если в рамках кода есть несколько однотипных объектов, их можно назвать: А, Б, В.. или ТЗ1, ТЗ2…
Для локальных переменных лучше использовать префикс Тек, чтобы они не пересекались с реквизитами объекта, например: ТекКонтрагент, ТекСчет.
Для реквизитов обработки лучше использовать префикс Выб, чтобы они не пересекались с осмысленно названными переменными текущего контекста, например ВыбИмяФайла, ВыбКонтрагент.
Избегайте длинных наименований реквизитов, они сложно воспринимаются, особенно если используются несколько и рядом. Пример плохого имени: ПодготовщикМакетаВариантаСтруктурыСистемыКомпоновкиДанных.
Помните, что человеческое внимание может работать только с 5-7 объектами одновременно, поэтому избегайте большого скопления переменных в одном месте.
Если даете переменным осмысленные имена, то не сокращайте их название. Если сокращаете, то так, чтобы был понятен принцип их сокращения. Хотя бы в комментариях пишите, почему дали такое сокращение, но лучше не сокращать, потому что не все могут понять и запомнить вашу систему сокращений.
Язык 1С считается самым простым в изучении. Одно из его конкурентных преимуществ – возможность написания кода на русском, что значительно упрощает процесс его освоения. Хотя имеются и англоязычные варианты языка, предназначенные для внедрения на зарубежных предприятиях.
Программирование на 1С – создание алгоритма или программного кода, который позволяет пользователю без проблем работать в программном интерфейсе. Основной инструмент языка – команды (слова), которые в определённой последовательности создают общую функциональную оболочку программы. Команды бывают следующих видов:
3. Функции и процедуры;
Давайте разберём все их более детально.
Переменные
Допустим, имеется число 15. Это есть значение. Изначально оно нигде не сохраняется. Чтобы поместить её в информационную базу (ИБ) программы, необходимо выполнить сохранение в переменной, которая может именоваться хоть как, скажем, результат.
Переменная, которая относится к объекту 1С (поле справочника, допустим) и сохраняется в информационную базу – это реквизит. К любой переменной допускается присвоение разных типов данных: можно сначала присвоить тип «число», а затем – тип «строка». Но для реквизитов язык 1С предусматривает только один тип данных. Если указать в нём другое значение, допустим, вместо цифры – строку, то программа сначала попробует выполнить преобразование в цифровой формат. Если она не сможет это сделать, значение будет пустым.
Строка в стандартной переменной не ограничена по длине, в реквизите – чётко определена (но если требуется выставить неограниченную длину – устанавливается значение длины 0). Выполнять обращение к отдельным буквам в слове нельзя, но можно искать целые части (Лев(), Прав(), Сред()).
Сложные переменные
Давайте разберём пример, когда переменной присвоено несколько значений.
- Массив
По виду массив аналогичен колонке в Excel. Каждая ячейка – переменная, которая имеет только одно название. Чтобы перейти к определённой ячейке, нужно ввести её номер.
Ячейки в 1С нумеруются с 0, а не с 1.
- СписокЗначений
Аналогичные ячейки, но с возможностью добавления комментария.
- ТаблицаЗначений
Здесь программирование таблиц значений на 1С аналогично Excel — страничке со множеством строк и колонок.
- ДеревоЗначений
Древовидная таблица, самый простой пример – окно конфигурации.
Строки программы
В конце любой строчки стоит «;», а комментарий добавляется после знака «//». Значение пишется в кавычках, например «14». Если требуется ввести кавычку в значении, её пишут два раза: «14 ««o»»!».
Значение может быть разделено на две строки, для этого язык 1С имеет знак «|»:
Для указания специфических символов используется объект: «Символы.»:
Операторы
Это средства, встроенные в язык 1С. Используются для создания простейшей последовательности.
- Условный оператор
Те или иные строки выполняются при наличии необходимых условий.
- Цикл
Строчки выполняются установленное количество раз или пока выполняется определённое условие.
Для прерывания цикла язык 1С имеет команду «Прервать». Для прерывания только одной итерации – «Продолжить».
Объекты
Любой объект в 1С полноценен, то есть ему могут присваиваться уникальные от остальных методы и данные.
Для создания объекта используется параметр «Новый».
Для создания объектов применяются менеджеры. Их называют в соответствии с ветками конфигурации: Документы, Справочники и т.д. Методы в менеджере можно расширять:
Собственные объекты конфигурации 1С неизменяемы.
Ошибки в 1С
Программирование на 1С отличается тем, что при написании программы не всегда понятно, появится ли ошибка при выполнении той или иной строчки. Так, если во внешней обработке ввести:
и открыть её в базе, где указанного справочника нет – возникнет ошибка.
Чтобы она не выскочила, можно применять такой алгоритм:
Если при выполнении кода между «Попытка» и «Исключение» будет ошибка, то выполнение остановится и программа перейдёт к строчке между «Исключение» и «КонецПопытки». Если ошибка не появится, строчки выполняться не будут.
Функция ОписаниеОшибки() запускается только между «Исключение» и «КонецПопытки» и выдаёт сведения о содержании возникшей ошибки.
Функции и Процедуры
Данные методы предназначены для одноимённого наименования сразу нескольких строчек. Затем, при написании этого названия в тексте кода, будет активирована соответствующая функция. Функции и процедуры – это стандартные методы и обработчики в языке 1С:
Отличие функции от процедуры в том, что последняя не может вернуть значение, которое было посчитано при выполнении данных строк:
Как программировать?
Программирование на 1С подразумевает использование модулей. Найдя подходящий модуль, можно приступать к написанию своего кода.
Код Икс Пи ☆ Центр автоматизации, сопровождения и поддержки
Как можно проверить тип значения переменной на равенство нужному?
Как очистить реквизит формы, имеющий ссылочный тип?
Как очистить значение, имеющее тип «Хранилище значения»?
Как проверить тип значения, помещенного в реквизит имеющий тип «Хранилище значения»?
Как сжать данные, помещаемые в хранилище значения?
Как предоставить пользователю возможность выбора значения составного типа?
Как применить округление при работе с вычисляемыми числовыми полями в запросе?
Как вывести многострочное предупреждение?
Как при выполнении обработки сообщить пользователю текущее время?
Как вывести число прописью по-русски, но без дробной части?
Как вывести число прописью по-русски, с указанием сотых в дробной части?
Как вывести прописью число килограммов с указанием дробной части в граммах?
Как долларовую сумму вывести прописью по-английски?
Как загрузить внешнюю компоненту?
Как выполнить команду операционной системы?
Как реализовать код процедуры в зависимости от режима выполнения (на клиенте, на сервере, во внешнем соединении) ?
Как при групповой обработке объектов реализовать стратегию «либо все, либо ничего»?
Как выглядит код в 1с
Войдите как ученик, чтобы получить доступ к материалам школы
Внутренний язык программирования 1С 8.3 для начинающих программистов: функции и процедуры в 1С часть 1
Автор уроков и преподаватель школы: Владимир Милькин
Сегодня мы приступаем к изучению того, без чего не может обойтись ни одна более менее серьезная программа — функций и процедур.
Функции и процедуры в языке 1С 8.3
Давайте я подведу вас к необходимости функций, заодно вы поймёте что это такое и почему они столь полезны для программистов.
Пусть нам требуется написать программу, которая вычисляет произведение суммы и разности двух введенных чисел. Выглядеть она будет так:
В данном случае формула вычисления результата достаточно проста, но она могла бы быть гораздо сложнее. А что если нам нужно вычислять её не один раз, а несколько? Причем в разных местах программы.
Неужели нам снова и снова придётся писать код для её вычисления:
Это никуда не годится. Нам придётся повторять один и тот же код, что приведёт к раздутости программы. И кроме того, переписывая его очередной раз мы можем допустить ошибку по невнимательности.
Вот бы придумать такое имя, которое будет связано с этой формулой и при обращении к нему мы будем обращаться ко всей этой формуле целиком. Вы читаете ознакомительную версию урока, полноценные уроки находятся здесь.
Пусть этим именем будет ПроизведениеСуммыИРазности.
Получается теперь мы можем написать:
И всё? Нет, конечно! Ведь непонятно произведение суммы и разности каких именно чисел нужно считать. Гораздо лучше будет передать эти числа нашему имени в качестве параметров, как мы обычно делаем при вызове команды:
Это, так называемый, вызов функции. Он выглядит точно также как и вызов многих других команд компьютера, которые мы уже неоднократно делали. Только это наша собственная команда, работу которой определяем мы, а не компьютер.
Давайте, наконец, определим нашу функцию, чтобы компьютер, встретив её вызов, не растерялся, а выполнил то, что мы хотим:
Что включает в себя определение этой функции?
Прежде всего ключевое слово Функция следом за которым идёт имя, которое мы придумали сами.
Затем следуют имена параметров, заключенные в круглые скобки. Параметры — это данные, которые мы передадим в нашу функцию при её вызове. Вы читаете ознакомительную версию урока, полноценные уроки находятся здесь. Она с ними что-то сделает и возвратит результат. Каждый параметр имеет своё имя, которое мы также придумываем сами. Это имя можно использовать только внутри функции.
Дальше идёт тело. Это команды компьютеру, которые будут выполняться в тот момент, когда мы сделаем вызов нашей функции. Тело заканчивается ключевым словом КонецФункции.
Внутри функции могут выполняться абсолютно любые знакомые нам команды: условные операторы, циклы и прочее. Но хотя бы один раз внутри каждой функции должна присутствовать команда:
Где вместо Результат может быть любое выражение, которое вернётся из функции в качестве её результата.
Мы можем вызывать функцию столько раз в программе сколько нам потребуется.
Процедуры это те же самые функции, но они не возвращают результат и объявляются при помощи других ключевых слов: Процедура и КонецПроцедуры.
Но функции и процедуры не следует писать лишь бы где! Для определения наших функций мы будем использовать новый модуль. Чтобы его добавить следуйте инструкциям ниже.
1. Раскройте список «Общие» в дереве конфигурации.
2. Найдите в нём пункт «Общие модули» и нажмите на нём правой кнопкой мыши. Выберите «Добавить».
3. Добавился модуль. В правой части окна конфигуратора задайте его имя и свойства, как показано ниже.
Внимание! Пожалуйста, ещё раз убедитесь, что вы поставили галки (Клиент, Сервер, Внешнее соединение) также, как на рисунке выше.
4. Перейдите в этот модуль. Всё! Здесь можно писать наши функции и процедуры. Напишите процедуру с именем Привет, без параметров, после вызова которой компьютер просто здоровается с нами.
Обратите внимание на ключевое слово Экспорт, которое идёт следом за круглыми скобками. Его наличие обязательно, так как мы определяем функцию в одном модуле (Уроки), а использовать будем совсем в другом (модуль управляемого приложения).
5. Теперь вернитесь в модуль управляемого приложения.
6. И сделайте вызов нашей процедуры. Так как она находится в другом модуле к её имени добавляется «Уроки.«.