Last active
October 9, 2025 20:29
-
-
Save Albus/a8703fcbcb8dd9fe5e8f832bdc2edcbb to your computer and use it in GitHub Desktop.
1c code review
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Процедура СформироватьПодпись() | |
| Если ЗначениеЗаполнено(Объект.Руководитель) Тогда | |
| Элементы.ДекорацияПодпись.Гиперссылка = Истина; | |
| Если Не ЗначениеЗаполнено(Объект.ДолжностьРуководителя) | |
| И Не ЗначениеЗаполнено(Объект.ОснованиеПодписиРуководителя) Тогда | |
| Элементы.ДекорацияПодпись.Заголовок = "<должность не указана>"; | |
| Иначе | |
| ДолжностьРуководителя = ?(ЗначениеЗаполнено(Объект.ДолжностьРуководителя) | |
| , Строка(Объект.ДолжностьРуководителя), "<должность не указана>"); | |
| ОснованиеПодписи = ?(ЗначениеЗаполнено(Объект.ОснованиеПодписиРуководителя) | |
| , " /" + Строка(Объект.ОснованиеПодписиРуководителя) + "/", ""); | |
| Элементы.ДекорацияПодпись.Заголовок = СтрШаблон("%1 %2", ДолжностьРуководителя, ОснованиеПодписи); | |
| КонецЕсли; | |
| Иначе | |
| Элементы.ДекорацияПодпись.Гиперссылка = Ложь; | |
| Элементы.ДекорацияПодпись.Заголовок = "<должность не указана>"; | |
| КонецЕсли; | |
| КонецПроцедуры |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| // Формирует подпись документа на основе данных о руководителе | |
| // и его должности. Управляет отображением декорации подписи. | |
| Процедура СформироватьПодпись() | |
| ДекорацияПодпись = Элементы.ДекорацияПодпись; | |
| ЕстьРуководитель = ЗначениеЗаполнено(Объект.Руководитель); | |
| // Устанавливаем гиперссылку только если указан руководитель | |
| ДекорацияПодпись.Гиперссылка = ЕстьРуководитель; | |
| // Если руководитель не указан, показываем текст по умолчанию | |
| Если Не ЕстьРуководитель Тогда | |
| ДекорацияПодпись.Заголовок = ПолучитьТекстПодписиПоУмолчанию(); | |
| Возврат; | |
| КонецЕсли; | |
| // Формируем полный текст подписи | |
| ДекорацияПодпись.Заголовок = СформироватьТекстПодписи(); | |
| КонецПроцедуры | |
| // Возвращает текст подписи по умолчанию, используемый когда | |
| // данные о руководителе отсутствуют | |
| // | |
| // Возвращаемое значение: | |
| // Строка - текст подписи по умолчанию | |
| Функция ПолучитьТекстПодписиПоУмолчанию() | |
| Возврат "<должность не указана>"; | |
| КонецФункции | |
| // Формирует полный текст подписи, включающий должность | |
| // и основание подписи (если указано) | |
| // | |
| // Возвращаемое значение: | |
| // Строка - отформатированный текст подписи | |
| Функция СформироватьТекстПодписи() | |
| ЧастиПодписи = Новый Массив; | |
| // Добавляем должность (гарантированно не пустая) | |
| Должность = ПолучитьТекстДолжности(); | |
| ЧастиПодписи.Добавить(Должность); | |
| // Добавляем основание подписи, если оно указано | |
| Основание = ПолучитьТекстОснования(); | |
| Если Основание <> Неопределено Тогда | |
| ЧастиПодписи.Добавить(Основание); | |
| КонецЕсли; | |
| // Соединяем части подписи неразрывными пробелами | |
| Возврат СтрСоединить(ЧастиПодписи, Символы.НПП); | |
| КонецФункции | |
| // Возвращает текст должности руководителя. | |
| // Если должность не указана, возвращает значение по умолчанию. | |
| // | |
| // Возвращаемое значение: | |
| // Строка - текст должности или значение по умолчанию | |
| Функция ПолучитьТекстДолжности() | |
| // Если должность указана, возвращаем ее текстовое представление | |
| Если ЗначениеЗаполнено(Объект.ДолжностьРуководителя) Тогда | |
| Возврат Строка(Объект.ДолжностьРуководителя); | |
| КонецЕсли; | |
| // Возвращаем значение по умолчанию | |
| Возврат ПолучитьТекстПодписиПоУмолчанию(); | |
| КонецФункции | |
| // Возвращает отформатированный текст основания подписи. | |
| // Если основание не указано, возвращает Неопределено. | |
| // | |
| // Возвращаемое значение: | |
| // Строка - отформатированный текст основания | |
| // Неопределено - если основание не указано | |
| Функция ПолучитьТекстОснования() | |
| // Если основание указано, форматируем его в виде "/текст/" | |
| Если ЗначениеЗаполнено(Объект.ОснованиеПодписиРуководителя) Тогда | |
| Возврат СтрШаблон("/%(1)/", Объект.ОснованиеПодписиРуководителя); | |
| КонецЕсли; | |
| // Возвращаем Неопределено, если основание не указано | |
| Возврат Неопределено; | |
| КонецФункции |
Author
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Анализируя представленные версии кода, можно выделить следующие проблемы в оригинальной реализации и методы их решения в рефакторинговой версии:
Проблемы оригинального кода (original.bsl)
1. Нарушение принципа единственной ответственности
2. Дублирование кода
"<должность не указана>"повторяется три раза3. Жесткая связность
4. Сложность модификации
5. Потенциальная ошибка форматирования
Решения в рефакторинговой версии (review.bsl)
1. Декомпозиция на специализированные функции
2. Устранение дублирования
ПолучитьТекстПодписиПоУмолчанию()3. Улучшение читаемости
ЕстьРуководитель,ДекорацияПодпись)4. Гибкость и расширяемость
5. Улучшенное форматирование
Символы.НПП) для корректного отображения6. Улучшенная документированность
7. Упрощение тестирования
Каждую функцию можно тестировать независимо:
ПолучитьТекстДолжности()- тестирование различных состояний должностиПолучитьТекстОснования()- тестирование наличия/отсутствия основанияСформироватьТекстПодписи()- тестирование комбинаций элементовТакой подход делает код более поддерживаемым, тестируемым и готовым к дальнейшим изменениям требований.