Skip to content

Latest commit

 

History

History
 
 

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 

Правила оформления кода в 1С

  1. Общие требования
    1.1. Язык модулей
    1.2. Использование букву "ё"
    1.3. Неиспользуемые процедуры и функции
    1.4. Последовательность операторов
    1.5. Синтаксический отступ
    1.6. Длина строк
  2. Комментарии
  3. Имена переменных
  4. Имена процедур и функций
  5. Параметры процедур и функций
  6. Сложные конструкции
  7. Условия
  8. Стандарты от фирмы 1С

1. Общие требования

1.1. Язык модулей

Тексты модулей должны быть написаны на русском языке. Исключения могут составлять методы soap и http-сервисов, а также идентификаторы внешних информационных систем.

1.2. Использование буквы "ё"

В текстах модулей не допускается использовать букву "ё", за исключением ситуаций, когда она используется в выводимых пользовавателю сообщениях.

1.3. Неиспользуемые процедуры и функции

Модули не должны иметь неиспользуемых процедур и функций.

1.4. Последовательность операторов

Тексты модулей необходимо оформлять по принципу "один оператор в одной строке".

Хорошо

    Если ПроверитьЗаполнение() Тогда 
        Возврат; 
    КонецЕсли;

Плохо

    Если ПроверитьЗаполнение() Тогда Возврат; КонецЕсли;

1.5. Синтаксический отступ

Текст модуля необходимо оформлять синтаксическим отступом. Для синтаксического отсутпа используется таблуляция.

С крайней левой позиции начинаются только:

  • операторы Процедура, КонецПроцедуры, Функция, КонецФункции;
  • операторы предварительного объявления процедур и функций;
  • заголовки (описания) процедур и функций;
  • объявление переменных модуля;
  • операторы "раздела основной программы" (с учетом синтаксического отступа);
  • директивы компилятора &НаКлиенте, &НаСервере и т.д.
  • инструкции препроцессора (в т.ч. #Область и #КонецОбласти)

Внутри ветвлений и циклов отступ увеличивается на одни символ табуляции. Для автоматического выравнивания можно воспользоваться горячими клавишами Shift+Alt+F в конфигураторе.

Хорошо

	Для Каждого ДанныеСтроки Из ДанныеФайла Цикл
		
		Номенклатура = Справочники.Номенклатура.НайтиПоНаименованию(ДанныеСтроки.НаименованиеНоменклатуры);		
		
		Если Не ЗначениеЗаполнено(Номенклатура) Тогда
			
			ШаблонСообщения = НСтр("ru = 'Номенклатура: %1 не найдена'");
			
			Сообщение = Новый СообщениеПользователю;
			Сообщение.Текст = СтрШаблон(ШаблонСообщения, ДанныеСтроки.НаименованиеНоменклатуры);
			Сообщение.Сообщить();
			
			Продолжить;
			
		КонецЕсли;
		
		НоваяСтрокаТЧ = ДокументЦены.Товары.Добавить();
		НоваяСтрокаТЧ.Номенклатура = Номенклатура;
		НоваяСтрокаТЧ.Цена = ДанныеСтроки.Цена;
		
	КонецЦикла;

Плохо

    Для Каждого ДанныеСтроки Из ДанныеФайла Цикл
		
        Номенклатура = Справочники.Номенклатура.НайтиПоНаименованию(ДанныеСтроки.НаименованиеНоменклатуры);		
    
    Если Не ЗначениеЗаполнено(Номенклатура) Тогда
    
    ШаблонСообщения = НСтр("ru = 'Номенклатура: %1 не найдена'");
    
    Сообщение = Новый СообщениеПользователю;
    Сообщение.Текст = СтрШаблон(ШаблонСообщения, ДанныеСтроки.НаименованиеНоменклатуры);
    Сообщение.Сообщить();
    
    Продолжить;
    
    КонецЕсли;
    
    НоваяСтрокаТЧ = ДокументЦены.Товары.Добавить();
    НоваяСтрокаТЧ.Номенклатура = Номенклатура;
    НоваяСтрокаТЧ.Цена = ДанныеСтроки.Цена;
		
	    КонецЦикла;

1.6. Длина строк

Длина строк не должна быть более 120 символов. Исключение - длинные строковые константы, которые должны выводится без переноса.

2. Комментарии

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

Между символами комментария "//" и текстом комментария должен быть пробел.

Недопускается наличие в текстах модулей закомментированного кода, а также фрагментов, которые связаны в процессом разработки (служебные отметки, TODO, MRG и т.д.).

3. Имена переменных

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

Имена переменных не должны начинаться с подчеркивания или состоять из одного символа. Переменные не должны содержать отрицания в имени.

Плохо

Перем ;
Перем ПроверкаНеПройдена;
Перем ОстТов;

Хорошо

Перем ДиалогВыбораФайла;
Перем ПроверкаПройдена;
Перем ОстатовТовараНаСкладе;

4. Имена процедур и функций

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

Плохо

Процедура ЗаписатьТовары()
Функция Получить(Путь)

Хорошо

Процедура СформироватьДвиженияТовары()
Функция ДанныеСайта(АдресСайта)

5. Параметры процедур и функций

Параметры должны идти в логической последовательности. Лучше располагать их от общего к частному.

Необязательные параметры должны располагаться после обязательных

Функция КурсВалютыНаДату(Валюта, Дата = Неопределено) Экспорт

Не должно быть более 7 параметров. В идеале не более 4. При необходимости передавать в процедуру или функцию большое число параметров рекомендуется:

  • группировать однотивные параметры в один или несколько составных параметров типа Структура;
  • либо полностью пересмотреть логику работы, разделв на несколько разных, более простых процедур и функций.

6. Сложные конструкции

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

Плохо

СтруктураВложений.Вставить(ПрисоединенныйФайл.Наименование, Новый Картинка(ПолучитьИзВременногоХранилища(ПрисоединенныеФайлы.ПолучитьДанныеФайла(ПрисоединенныйФайл.Ссылка).СсылкаНаДвоичныеДанныеФайла)));

Лучше разбивать такие вызовы на отдельные строки с помощью вспомогательных локальных переменных:

Хорошо

АдресФайлаИзображения = ПрисоединенныеФайлы.ПолучитьДанныеФайла(ПрисоединенныйФайл.Ссылка).СсылкаНаДвоичныеДанныеФайла;
ДанныеИзображения = Новый Картинка(ПолучитьИзВременногоХранилища(АдресФайлаИзображения));
СтруктураВложений.Вставить(ПрисоединенныйФайл.Наименование, ДанныеИзображения);

Не рекомендуется использовать конструктор структуры с большым количеством свойство (более 2):

Плохо

ПараметрыЗаполнения = Новый Структура("Дата, Организация, Контрагент, Договор", ТекущаяДата(), Строка.Организация, Строка.Контрагент, Строка.Договор)

Хорошо

ПараметрыЗаполнения = Новый Структура;
ПараметрыЗаполнения.Вставить("Дата", ТекущаяДата());
ПараметрыЗаполнения.Вставить("Организация", Строка.Организация);
ПараметрыЗаполнения.Вставить("Контрагент", Строка.Контрагент);
ПараметрыЗаполнения.Вставить("Договор", Строка.Договор);

7. Условия

Желательно не использовать тернарный оператор, вместо него использовать функцию с понятным именем.

Плохо

НДС = Сумма * ?(СтавкаНДС = "НДС0", 0, 20);

Хорошо

НДС = Сумма * ПроцентНДС(СтавкаНДС);

Сложные условия (содержащие 3 конструкции и более) лучше выносить в отдельные методы:

Плохо

Если ИдентификаторОбъекта = "АнализСубконто"
    ИЛИ ИдентификаторОбъекта = "АнализСчета"
    ИЛИ ИдентификаторОбъекта = "ОборотноСальдоваяВедомость"
    ИЛИ ИдентификаторОбъекта = "ОборотноСальдоваяВедомостьПоСчету"
    ИЛИ ИдентификаторОбъекта = "ОборотыМеждуСубконто"
    ИЛИ ИдентификаторОбъекта = "ОборотыСчета"
    ИЛИ ИдентификаторОбъекта = "СводныеПроводки" 
    ИЛИ ИдентификаторОбъекта = "ГлавнаяКнига"
    ИЛИ ИдентификаторОбъекта = "ШахматнаяВедомость" Тогда
    ПараметрыРасшифровки.Вставить("ОткрытьОбъект", Ложь);
		
    ЕстьПоказатель  = Ложь;
    ЕстьКорЗначение = Ложь;
    ЕстьСчет        = Истина;
    Счет            = Неопределено;
    ПервыйЭлемент   = Неопределено;
КонецЕсли;

Хорошо

Если ОткрыватьОбъектПриИдентификаторе(ИдентификаторОбъекта) Тогда
    ПараметрыРасшифровки.Вставить("ОткрытьОбъект", Ложь);
		
    ЕстьПоказатель  = Ложь;
    ЕстьКорЗначение = Ложь;
    ЕстьСчет        = Истина;
    Счет            = Неопределено;
    ПервыйЭлемент   = Неопределено;
КонецЕсли;

Функция ОткрыватьОбъектПриИдентификаторе(ИдентификаторОбъекта)
	
    Возврат ИдентификаторОбъекта = "АнализСубконто"
        ИЛИ ИдентификаторОбъекта = "АнализСчета"
        ИЛИ ИдентификаторОбъекта = "ОборотноСальдоваяВедомость"
        ИЛИ ИдентификаторОбъекта = "ОборотноСальдоваяВедомостьПоСчету"
        ИЛИ ИдентификаторОбъекта = "ОборотыМеждуСубконто"
        ИЛИ ИдентификаторОбъекта = "ОборотыСчета"
        ИЛИ ИдентификаторОбъекта = "СводныеПроводки" 
        ИЛИ ИдентификаторОбъекта = "ГлавнаяКнига"
        ИЛИ ИдентификаторОбъекта = "ШахматнаяВедомость";

КонецФункции

8. Стандарты от фирмы 1С

Подробные рекомендации по разработке на платформе доступны на сайте 1С:ИТС по ссылке.