Добрый день, коллеги.
Возникла необходимость разработать свою конфигурацию. И, для упрощения жизни себе, и соблюдения каких-никаких, но стандартов решил начать с внедрения БСП 2.4.4.80.
Хочу поделиться своими первыми вопросами и их решением.
Вначале я попробовал использовать обработку "ПервоеВнедрениеБСП.epf".
Как и положено, я выбрал нужные мне подсистемы и сохранил настройки для конфигуратора:
В конфигураторе сравнил свою (пустую) конфигурацию с конфигурацией БСП.
Установил данные настройки.
Закомментировал модули управляемого приложения и сеанса - чтобы просто запустить окно и перейти к шагу 3 данной обработки:
Запустил... Мягко говоря, ошибок было очень и очень много.
Тогда я решил перенести все подсистемы, а ненужные постепенно выкинуть.
Залез в туже обработку, установил все флажки и думаю: "должно быть все Ок"
Но, не тут-то было. Было куча ошибок на то, что нет общих модулей. Т.е. подсистемы то он вроде как должен был перенести, но для обмена он не поотмечал кучу общих модулей. И хоть сами подсистемы мне особо не нужны, он их мало того, что не перенес ко мне, так еще и не удалил их на третьем шаге - ведь я отметил, что мне нужна эта подсистема.
Тогда я полез в конфигуратор и начал объединять вручную.
Выбрал пункт "Действия...->Отметить по подсистемам файла".
И снова выбрал все подсистемы:
Но тут я решил глазами пробежаться проверить - все ли он мне отметил. Наученный уже)
Хочу обратить ваше внимание - не поленитесь так сделать. Я нашел несколько "лишних" объектов, которые были отмечены к объединение с префиксом "_Демо". Так же были не отмечены некоторые обработки, которые мне были интересны на начальном этапе - их я тоже отметил.
После объединения (Напомню, это шаг 2 обработки) переходим к шагу 3.
И вот тут я столкнулся с тем, что у меня ничего не работает. И ругается он на отстутствие объектов с префиксами "_Демо".
Полез в код и нашел кучу вызовов наподобие:
// _Демо начало примера
_ДемоСтандартныеПодсистемы.ПриОпределенииОбщихПараметровБазовойФункциональности(ОбщиеПараметры);
// _Демо конец примера
Не удалять же их вручную. Как говорится, "я же программист". Полезли в обработку "Первое внедрение БСП" и нашел там код, отвечающий за 3-й шаг обработки - удаление вызовов неиспользуемых подсистем.
Для того, чтобы автоматически удалить ненужные нам вызовы надо сказать обработке, что "_Демо" - это тоже подсистема, которую тоже надо удалить.
Для этого надо вставить буквально пару строк кода. Функция "СписокПодсистемДляУдаления" примет вид (добавленные строки выделены комментариями):
&НаСервере
Функция СписокПодсистемДляУдаления();
СписокПодсистем = Подсистемы.Выгрузить(, "Имя").ВыгрузитьКолонку("Имя");
СписокИспользуемыхПодсистем = СписокИспользуемыхПодсистем();
ПодсистемыДляУдаления = Новый Массив;
Для Каждого ИмяПодсистемы Из СписокПодсистем Цикл
Если СписокИспользуемыхПодсистем.Найти(ИмяПодсистемы) = Неопределено Тогда
ПодсистемыДляУдаления.Добавить("СтандартныеПодсистемы." + ИмяПодсистемы);
КонецЕсли;
КонецЦикла;
//Kim
//BeginingChange
ПодсистемыДляУдаления.Добавить("_Демо");
//EndChange
Возврат ПодсистемыДляУдаления;
КонецФункции
И в процедуре "Процедура ВырезатьФрагментыПодсистемыВТексте" примет следующий вид:
&НаСервере
Процедура ВырезатьФрагментыПодсистемыВТексте(ИмяФайлаМодуля, ИмяПодсистемы, СтрокаТекста, ЧислоЗамен, Ошибки)
НачалоФрагмента = НайтиНачалоФрагмента(СтрокаТекста, ИмяПодсистемы);
Пока НачалоФрагмента > 0 Цикл
ПозицияКонцаФрагмента = НайтиКонецФрагмента(СтрокаТекста, ИмяПодсистемы);
Если ПозицияКонцаФрагмента = 0 Тогда
ТекстСообщения = НСтр("ru = '[ИмяФайлаМодуля]: для открывающей скобки [НачалоФрагмента] не обнаружена закрывающая скобка.'");
ТекстСообщения = СтрЗаменить(ТекстСообщения, "[НачалоФрагмента]", "// " + ИмяПодсистемы);
ТекстСообщения = СтрЗаменить(ТекстСообщения, "[ИмяФайлаМодуля]", ИмяФайлаМодуля);
ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Предупреждение,,, ТекстСообщения);
Ошибки = Ошибки + Символы.ПС + ТекстСообщения;
Возврат;
КонецЕсли;
Если ПозицияКонцаФрагмента < НачалоФрагмента Тогда
ТекстСообщения = НСтр("ru = '[ИмяФайлаМодуля]: для открывающей скобки [НачалоФрагмента] закрывающая скобка расположена выше по тексту.'");
ТекстСообщения = СтрЗаменить(ТекстСообщения, "[НачалоФрагмента]", "// " + ИмяПодсистемы);
ТекстСообщения = СтрЗаменить(ТекстСообщения, "[ИмяФайлаМодуля]", ИмяФайлаМодуля);
ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Предупреждение,,, ТекстСообщения);
Ошибки = Ошибки + Символы.ПС + ТекстСообщения;
Возврат;
КонецЕсли;
ДлинаНачалаФрагмента = СтрДлина("// " + ИмяПодсистемы);
ПромежуточнаяСтрока = Сред(СтрокаТекста, НачалоФрагмента + ДлинаНачалаФрагмента + 1, ПозицияКонцаФрагмента - (НачалоФрагмента + ДлинаНачалаФрагмента) + 1);
Если НайтиНачалоФрагмента(ПромежуточнаяСтрока, ИмяПодсистемы) > 0 Тогда
ТекстСообщения = НСтр("ru = '[ИмяФайлаМодуля]: внутри открывающейся скобки [НачалоФрагмента] есть еще одна открывающаяся скобка, до закрывающейся.'");
ТекстСообщения = СтрЗаменить(ТекстСообщения, "[НачалоФрагмента]", "// " + ИмяПодсистемы);
ТекстСообщения = СтрЗаменить(ТекстСообщения, "[ИмяФайлаМодуля]", ИмяФайлаМодуля);
ЗаписьЖурналаРегистрации(СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Предупреждение,,, ТекстСообщения);
Ошибки = Ошибки + Символы.ПС + ТекстСообщения;
Возврат;
КонецЕсли;
ПозицияПоследнегоСимвола = ПозицияКонцаФрагмента + СтрДлина("// Конец " + ИмяПодсистемы);
//Kim
//BeginingChange
Если ИмяПодсистемы = "_Демо" Тогда
ПозицияПоследнегоСимвола = ПозицияКонцаФрагмента + СтрДлина("// Конец " + ИмяПодсистемы + " примера");
КонецЕсли;
//EndChange
ВырезатьФрагмент(СтрокаТекста, НачалоФрагмента - 1, ПозицияПоследнегоСимвола);
ЧислоЗамен = ЧислоЗамен + 1;
НачалоФрагмента = НайтиНачалоФрагмента(СтрокаТекста, ИмяПодсистемы);
КонецЦикла;
КонецПроцедуры
Далее можно раскомментировать модули управляемого приложения и сеансов и начать внедрение подсистем по инструкции с сайта its.1c.ru.
Буду описывать, если возникнут еще интересные проблемы и как я их решил.
P.S. Прикрепил отредактированную обработку для БСП 2.4.4.80