Рефакторинг в 1С. Этюд по выделению метода

May 29, 2021 01:04

Этюд по выделению метода
Ниже представлено последовательноое выделение фрагмента кода в функцию при помощи Конфигуратора. Механизм рефакторинг-выделить фрагмент.
У кого есть под рукой EDT проверьте, там так же или умнее работает?
Исходник

Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
НекаяФигня = Новый Массив;
ФигняВторогоУровня = Новый Массив;
ЭтоСамаяВнешняяПеременная = Неопределено;
Для Каждого Элемент из НекаяФигня Цикл
ЭтоВнутренняяПеременная = Неопределено;
Для Каждого ВнутреннийЭлемент Из ФигняВторогоУровня Цикл
ЭтоВнутренняяПеременная = ВнутреннийЭлемент;
КонецЦикла;
ЭтоСамаяВнешняяПеременная = ЭтоВнутренняяПеременная;
КонецЦикла;

Сообщить(ЭтоСамаяВнешняяПеременная);
КонецПроцедуры

Делай раз
Выделяем расчет внешней переменной

Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
НекаяФигня = Новый Массив;
ФигняВторогоУровня = Новый Массив;
ЭтоСамаяВнешняяПеременная = ПолучитьВнешнюю(НекаяФигня, ФигняВторогоУровня);

Сообщить(ЭтоСамаяВнешняяПеременная);
КонецПроцедуры

Функция ПолучитьВнешнюю(Знач НекаяФигня, Знач ФигняВторогоУровня)

Перем ВнутреннийЭлемент, Элемент, ЭтоВнутренняяПеременная, ЭтоСамаяВнешняяПеременная;

ЭтоСамаяВнешняяПеременная = Неопределено;
Для Каждого Элемент из НекаяФигня Цикл
ЭтоВнутренняяПеременная = Неопределено;
Для Каждого ВнутреннийЭлемент Из ФигняВторогоУровня Цикл
ЭтоВнутренняяПеременная = ВнутреннийЭлемент;
КонецЦикла;
ЭтоСамаяВнешняяПеременная = ЭтоВнутренняяПеременная;
КонецЦикла;
Возврат ЭтоСамаяВнешняяПеременная;

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

Делай два
Аналогично выделяем расчет внутренней переменной

Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
НекаяФигня = Новый Массив;
ФигняВторогоУровня = Новый Массив;
ЭтоСамаяВнешняяПеременная = ПолучитьВнешнюю(НекаяФигня, ФигняВторогоУровня);

Сообщить(ЭтоСамаяВнешняяПеременная);
КонецПроцедуры

Функция ПолучитьВнешнюю(Знач НекаяФигня, Знач ФигняВторогоУровня)

Перем ВнутреннийЭлемент, Элемент, ЭтоВнутренняяПеременная, ЭтоСамаяВнешняяПеременная;

ЭтоСамаяВнешняяПеременная = Неопределено;
Для Каждого Элемент из НекаяФигня Цикл
ПолучитьВнутреннюю(ФигняВторогоУровня, ЭтоВнутренняяПеременная);

ЭтоСамаяВнешняяПеременная = ЭтоВнутренняяПеременная;
КонецЦикла;
Возврат ЭтоСамаяВнешняяПеременная;

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

Процедура ПолучитьВнутреннюю(Знач ФигняВторогоУровня, ЭтоВнутренняяПеременная)

Перем ВнутреннийЭлемент;

ЭтоВнутренняяПеременная = Неопределено;
Для Каждого ВнутреннийЭлемент Из ФигняВторогоУровня Цикл
ЭтоВнутренняяПеременная = ВнутреннийЭлемент;
КонецЦикла;

КонецПроцедуры

Внимание вопрос?
Q - почему первый раз функция (как и ожидалось), а второй раз процедура?
A - потому что в первом случае ЭтоСамаяВнешняяПеременная это только что объявленная переменная, а во втором - она есть в строке Перем
Q - А кто её туда поставил???
A - Упс…
Q - А зачем вообще смотреть на список Перем? Может только для того, чтобы стирать из него лишнее?
A - вы можете отправить своё предложение боту в телеграм. Да, даже про конфигуратор. Да, только отправить. Ждать чего либо не стоит.

Previous post
Up