{"id":22374042,"url":"https://github.com/skyksandr/1c-styleguide","last_synced_at":"2026-01-07T00:03:40.654Z","repository":{"id":52568309,"uuid":"73553647","full_name":"skyksandr/1c-styleguide","owner":"skyksandr","description":"Руководство по стилю оформления","archived":false,"fork":false,"pushed_at":"2021-04-25T18:38:09.000Z","size":8,"stargazers_count":75,"open_issues_count":3,"forks_count":25,"subscribers_count":20,"default_branch":"master","last_synced_at":"2025-03-24T02:36:42.963Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/skyksandr.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2016-11-12T13:16:12.000Z","updated_at":"2025-03-04T06:23:17.000Z","dependencies_parsed_at":"2022-09-18T04:51:58.963Z","dependency_job_id":null,"html_url":"https://github.com/skyksandr/1c-styleguide","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/skyksandr%2F1c-styleguide","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/skyksandr%2F1c-styleguide/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/skyksandr%2F1c-styleguide/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/skyksandr%2F1c-styleguide/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/skyksandr","download_url":"https://codeload.github.com/skyksandr/1c-styleguide/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245701029,"owners_count":20658321,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-12-04T21:15:53.574Z","updated_at":"2026-01-07T00:03:40.640Z","avatar_url":"https://github.com/skyksandr.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"# 1С: Руководство по стилю оформления\n\n\u003e Почти все убеждены, что любой стиль кроме их собственного ужасен и нечитаем. Уберите отсюда \"кроме их собственного\" — и они будут, наверное, правы... \n\u003e \n\u003e -- Джерри Коффин (Jerry Coffin) об отступах\n\n## Оформление модулей\n\n- Длина строки в общем случае не должна превышать 120 символов.\n- Для отступов необходимо использовать символы табуляции.\n- Одна строка кода - одна управляющая конструкция.\n \n```bsl\n// Плохо:\nЕсли ЭтоБрак Тогда Продолжить; КонецЕсли;\n\n// Хорошо:\nЕсли ЭтоБрак Тогда\n  Продолжить;\nКонецЕсли;\n```\n- Следует отделять друг от друга пробелами ключевые слова, вызовы процедур и функций, параметры процедур и функций внутри скобок, операторы.\n\n```bsl\n// Плохо:\nСообщить(“Сумма: “+Сумма);\n\n// Хорошо:\nСообщить(“Сумма: “ + Сумма);\n```\n\n- Для разделения на логические части внутри модуля следует использовать пустые строки\n- При вызове функции с несколькими параметрами при переносе строк необходимо выравнивать параметры по первому\n\n```bsl\n// Начальное состояние (строка слишком длинная):\nНалоговыйУчет.ОстаткиВременныхРазниц(СтрокаВидАктиваОбязательства, СписокОрганизаций, Реквизиты.НачалоГода, Реквизиты.КонДата);\n\n// Плохо:\nНалоговыйУчет.ОстаткиВременныхРазниц(\n    СтрокаВидАктиваОбязательства, СписокОрганизаций, Реквизиты.НачалоГода, Реквизиты.КонДата);\n\n// Лучше:\nНалоговыйУчет.ОстаткиВременныхРазниц(СтрокаВидАктиваОбязательства,\n                                     СписокОрганизаций,\n                                     Реквизиты.НачалоГода,\n                                     Реквизиты.КонДата);\n\n// Хорошо:\nНалоговыйУчет.ОстаткиВременныхРазниц(\n    СтрокаВидАктиваОбязательства,\n    СписокОрганизаций,\n    Реквизиты.НачалоГода,\n    Реквизиты.КонДата);\n    \n```\n\n- Выравнивание однотипных операторов. При следовании друг за другом нескольких однотипных операторов допускается их выравнивание. Выравнивание следует выполнять с помощью пробелов\n\n```bsl\n// Хорошо:\nНоваяСтрока = ВидыОпераций.Добавить();\nНоваяСтрока.ВидОперации         = ВидОперации;\nНоваяСтрока.НомерГруппы         = ГруппаПоВидуОперации(ВидОперации);\nНоваяСтрока.ПоОрганизацииВЦелом = ГруппаПоОрганизации(НоваяСтрок);\n```\n\n### Методы\n\n- Параметр функции не должен возвращать значение. Иными словами не используйте входные параметры функций как дополнительный вывод. Весь вывод должен быть в возвращаемом значении. Если нужно возвращать несколько значений следует использовать такие типы как `Структура`, `Массив` и т.д.\n```bsl\n// Плохо:\nURLСервиса = \"\";\nИмяПользователя = \"\";\nПарольПользователя = \"\";\n\nЗаполнитьПараметрыПодключения(URLСервиса, ИмяПользователя, Пароль);\n\n// Хорошо:\nПараметрыПодключения = ПолучитьПараметрыПодключения();\n// Возвращаемое значение - структура:\n//     URLСервиса         - Строка\n//     ИмяПользователя    - Строка\n//     ПарольПользователя - Строка\n```\n\n### Условия\n- Предпочтительней использовать тернарный оператор для простых конструкций.\n```bsl\n// Плохо:\nЕсли НДС0 Тогда\n    Возврат 0;\nИначе\n    Возврат 18;\nКонецЕсли;\n\n// Хорошо:\nВозврат ?(НДС0, 0, 18);\n```\n\n- Не допускайте использования вложенных тернарных операторов.\n- Ключевое слово `Тогда` пишется на той же строке, что и последнее условие.\n- Сложные условия (содержащие 3  конструкции и более) необходимо выносить в отдельные методы.\n\n```bsl\n// Плохо:\nЕсли ИдентификаторОбъекта = \"АнализСубконто\"\n    ИЛИ ИдентификаторОбъекта = \"АнализСчета\"\n    ИЛИ ИдентификаторОбъекта = \"ОборотноСальдоваяВедомость\"\n    ИЛИ ИдентификаторОбъекта = \"ОборотноСальдоваяВедомостьПоСчету\"\n    ИЛИ ИдентификаторОбъекта = \"ОборотыМеждуСубконто\"\n    ИЛИ ИдентификаторОбъекта = \"ОборотыСчета\"\n    ИЛИ ИдентификаторОбъекта = \"СводныеПроводки\" \n    ИЛИ ИдентификаторОбъекта = \"ГлавнаяКнига\"\n    ИЛИ ИдентификаторОбъекта = \"ШахматнаяВедомость\" Тогда\n    ПараметрыРасшифровки.Вставить(\"ОткрытьОбъект\", Ложь);\n\t\t\n    ЕстьПоказатель  = Ложь;\n    ЕстьКорЗначение = Ложь;\n    ЕстьСчет        = Истина;\n    Счет            = Неопределено;\n    ПервыйЭлемент   = Неопределено;\nКонецЕсли;\n\n// Хорошо:\nЕсли ОткрыватьОбъектПриИдентификаторе(ИдентификаторОбъекта) Тогда\n    ПараметрыРасшифровки.Вставить(\"ОткрытьОбъект\", Ложь);\n\t\t\n    ЕстьПоказатель  = Ложь;\n    ЕстьКорЗначение = Ложь;\n    ЕстьСчет        = Истина;\n    Счет            = Неопределено;\n    ПервыйЭлемент   = Неопределено;\nКонецЕсли;\n\nФункция ОткрыватьОбъектПриИдентификаторе(ИдентификаторОбъекта)\n\t\n    Возврат ИдентификаторОбъекта = \"АнализСубконто\"\n        ИЛИ ИдентификаторОбъекта = \"АнализСчета\"\n        ИЛИ ИдентификаторОбъекта = \"ОборотноСальдоваяВедомость\"\n        ИЛИ ИдентификаторОбъекта = \"ОборотноСальдоваяВедомостьПоСчету\"\n        ИЛИ ИдентификаторОбъекта = \"ОборотыМеждуСубконто\"\n        ИЛИ ИдентификаторОбъекта = \"ОборотыСчета\"\n        ИЛИ ИдентификаторОбъекта = \"СводныеПроводки\" \n        ИЛИ ИдентификаторОбъекта = \"ГлавнаяКнига\"\n        ИЛИ ИдентификаторОбъекта = \"ШахматнаяВедомость\";\n\nКонецФункции\n```\n\n- Избегайте использование Йода-синтаксиса.\n```bsl\n// Плохо:\nЕсли 0 = Сумма Тогда\n\n// Хорошо:\nЕсли Сумма = 0 Тогда\n```\n\n### Переменные\n\n- Избегайте неявного определения переменных\n```bsl\n// Плохо\nФункция ИдентификаторОбъекта(Объект)\n    // Ошибки не будет, даже если переменная не определена в области видимости.\n    // В результате будет определена переменная со значением Неопределено.\n    ВашаПеременная = ВашаПеременная;\n    \n    Если Не ЗначениеЗаполнено(ВашаПеременная) Тогда\n        ...\n    КонецЕсли;\nКонецФункции\n\n// Хорошо\nФункция ИдентификаторОбъекта(Объект)\n    Перем ВашаПеременная;\n    ...\nКонецФункции\n```\n\n### Имена процедур, функций, переменных\n\n- Следуюйте общему подходу именования\n```bsl\n// Плохо:\nэтобрак, ЭТОБРАК, этоБрак\n\n// Хорошо:\nЭтоБрак\n```\n\n- Не используйте отрицание в именах переменных и методов\n```bsl\n// Плохо:\nФункция ПроверкаНеПройдена()\n...\n\nЕсли Не (Условие И Не ПроверкаНеПройдена()) Тогда\n\n// Хорошо:\nФункция ПроверкаПройдена()\n...\n\nЕсли Не Условие И Не ПроверкаПройдена() Тогда\n```\n\n### Комментарии\n- Если код требует комментария для пояснения работы - в первую очередь необходимо рассмотреть варианты рефакторинга, чтобы код не требовал комментария.\n- К комментариям также относятся ограничения на длину строки в 120 символов.\n\n## Создание, изменение объектов метаданных\n\n- Если составной тип используется многократно, следует использовать объект конфигурации \"Определяемый тип\". Пример: \"Документ резервирования\", \"Документ партии\".\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fskyksandr%2F1c-styleguide","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fskyksandr%2F1c-styleguide","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fskyksandr%2F1c-styleguide/lists"}