Хранилище конфигурации
Все конфигурации должны быть подключены к хранилищам конфигураций
Расширения допускается не подключать к хранилищам
Разработчики
Каждый разработчик должен работать под своим именем. Для этого он должен получить у Администратора хранилища логин/пароль и право захвата объектов в конфигурации
Обновление рабочей конфигурации происходит под универсальным пользователем. Под этим пользователем не допускается внесение изменений в конфигурацию
Базы для разработчиков
Каждому разработчику необходимо иметь собственную копию базы с конфигурацией, которую ему необходимо изменять
Для получения копии необходимо обратиться к Администратору баз данных
После получения копии ее необходимо отключить от хранилища и подключить с логином/паролем, полученным Администратором хранилища
После этого можно захватывать объекты
Захват объектов в хранилище
Разработчик должен захватывать только те объекты, которые ему необходимо изменять
Нельзя надолго захватывать корень хранилища, т.к. при захваченном корне другие разработчики не могут создавать новые объекты
Создание новых объектов конфигурации
Новый объект конфигурации должен иметь префикс PRO_ (независимо от разработчика, подрядчика)
Подсистема
Новый объект конфигурации должен быть размещен в подсистеме PRO_…
Если требуется добавить объект в штатную подсистему, то необходимо сначала создать в этой подсистеме подсистему PRO_…
Исключения
Исключениями являются объекты, входящие в обновляемые подсистемы сторонних разработчиков, таких как: Diadoc. PAPI, ПИТ и т.п.
Если объекты таких подсистем не находятся на поддержке и не планируется их обновление, префикс должен быть PRO_
Добавление собственных реквизитов и табличных частей в стандартные объекты
Если реквизит или табличная часть добавляется в стандартный объект конфигурации, то он должен иметь префикс PRO_
Если реквизит или табличная часть добавляется в собственный объект конфигурации, специальных префиксов у него быть не должно
Как создать новый объект конфигурации
Т.к. захват корня хранилища может быть произведен только одним разработчиком в один момент времени, важно, чтобы эта процедура занимала минимальное время.
Недопустимо надолго захватывать корень хранилища
Захватить корень хранилища и подсистемы, в которых будет размещен объект
Создать все объекты, которые необходимы для решения задачи, в том числе подсистемы. Включить все объекты в необходимые подсистемы
Создать роли на доступ к объектам, включить новые роли в те же подсистемы, в которые включен новый объект
Если новый объект - Константа, разместить ее на общей форме PRO_Настройки, расположив в группе по смыслу значения
Проверить, что конфигурация собирается без ошибок (особенно при создании регистров). Это необходимо делать до создания модулей всех реквизитов объектов (кроме обязательных)
Поместить в хранилище все созданные объекты, оставив захваченными
Отпустить корень хранилища
Как заменить реквизит или объект на новый
Бывают ситуации, когда необходимо перенести реквизит из расширения в основную конфигурацию, или заменить один реквизит другим (был текстовый реквизит, стал перечислением, ссылкой и т.п.). Общий алгоритм следующий:
Переименовать старый реквизит - добавить в начало префикс Удалить_
При переименовании уесть изменение кода модулей
Добавить новый реквизит с новым типом
Изменить код модулей таким образом, чтобы он работал с новым реквизитом
Написать обработку заполнения данных из старого реквизита в новый
После обновления выполнить обработку
Расширения
Расширения могут быть использованы в двух случаях:
Поставщик конфигурации реализовал исправление ошибки
Для внесения срочного изменения конфигурации
В дальнейшем функционал расширения должен пройти рефакторинг и внесение в основную конфигурацию
Дополнительные обработки и отчеты
Дополнительные отчеты и обработки (далее просто Обработки) допускается использовать для очень редко выполняемых задач.
Текст внешней обработки не может быть автоматически протестирован при изменении / обновлении конфигурации, поэтому нет никаких гарантий работоспособности обработок на длительном периоде.
Поэтому все отчеты и обработки, запускаемые хотя бы раз в квартал, должны быть перенесены в основную конфигурацию.
При разработке отчета и обработки
В процессе разработки обработки необходимо создать объект в конфигурации, после чего его можно выгрузить во внешнюю обработку для доработки, оставив объект конфигурации в захваченном виде. При завершении разработки перенести обработку в конфигурацию и поместить в хранилище
Комментарий в тексте модуля
Комментарии должны содержать специальные символы для идентификации кода при обновлении.
Комментарии должны быть достаточно понятными, чтобы пояснять работу модуля или комментируемого оператора. Тексты комментариев должны составляться по правилам русского языка, в деловом стиле, быть эмоционально сдержанными и не содержать слов, не относящихся к функциональности программы.
//++PRO, Создает прокси на основе определения веб-сервиса и связывает // его с точкой подключения веб-сервиса. ... Код программы ... //--PRO
Программирование
Стандартные объекты не изменяем
Если необходимо изменить стандартный объект
Изменить модуль стандартного объекта
Все изменения должны находится в блоке, у которого написан комментарий
//++PRO Дата и фамилия изменившего, краткое описание что изменено и зачем //Например, добавлено автоматическое заполнение Направления деятельности из договора, //чтобы не было проблем при взаиморасчетах Код... //--PRO
Изменить форму стандартного объекта
Все изменения вносятся программно в модуле объекта, обычно в процедуре ПриСозданииНаСервере
&НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) ... //++PRO, Необходимо вывести на форму реквизит PRO_Поклажедатель НовыйЭлемент = ЭтаФорма.Элементы.Добавить("PRO_Поклажедатель", Тип("ПолеФормы"), ЭтаФорма.Элементы.ГруппаСтраницы); НовыйЭлемент.Вид = ВидПоляФормы.ПолеФлажка; НовыйЭлемент.ПутьКДанным = "Объект.PRO_Поклажедатель"; //--PRO ... КонецПроцедуры
Добавить процедуру/функцию в стандартный модуль объекта
Все процедуры/функции должны начинаться с префикса PRO_…, например PRO_РасчетЗадолженностиНаДату(ДатаЗадолженности)
НЕ писать комментарий перед процедурой/функцией, если необходимо добавить комментарий, то написать его внутри процедуры
Правильно
&НаКлиенте Процедура PRO_РасчетЦен(Команда) //Добавлена команда расчета цен, 01.01.2020 Если Объект.Проведен=Истина Тогда PRO_ОбщегоНазначенияСервер.СформироватьОсновнойЗапросЦенообразования(Объект.Ссылка); Иначе Сообщить("Необходимо провести документ"); КонецЕсли; КонецПроцедуры
Неправильно
//++PRO, добавлена команда расчета цен, 01.01.2020 &НаКлиенте Процедура PRO_РасчетЦен(Команда) Если Объект.Проведен=Истина Тогда PRO_ОбщегоНазначенияСервер.СформироватьОсновнойЗапросЦенообразования(Объект.Ссылка); Иначе Сообщить("Необходимо провести документ"); КонецЕсли; КонецПроцедуры //--PRO
Добавление нескольких процедур и функций
Если в штатный модуль добавлено более 2-х собственных процедур/функций, то их необходимо объединить в область и все новые процедуры/функции располагать в этой области
#Область PRO &НаКлиенте Процедура PRO_РасчетЦен(Команда) Если Объект.Проведен = Истина Тогда PRO_ОбщегоНазначенияСервер.СформироватьОсновнойЗапросЦенообразования(Объект.Ссылка); Иначе Сообщить("Необходимо провести документ"); КонецЕсли; КонецПроцедуры &НаСервереБезКонтекста Функция PRO_ДоступКРолиПолныеПрава() Возврат РольДоступна("ПолныеПрава"); КонецФункции &НаКлиенте Процедура PRO_ТоварыПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа, Параметр) ... КонецПроцедуры &НаСервере Функция PRO_ЭтоГоспрогорамма() ... КонецФункции #КонецОбласти
Проверка свойств перед запись с последующим отказом
Нельзя делать просто Отказ = Истина, необходимо ОБЯЗАТЕЛЬНО сообщить пользователю, что не так
Правильно
&НаСервере Процедура ПередЗаписью(Отказ) Если ПорядокРасчетов <> Перечисления.ПорядокРасчетов.ПоДоговорамКонтрагентов Тогда ОбщегоНазначения.СообщитьПользователю( "У договора может быть только порядок расчетов ""По договорам"", укажите это свойство на странице ""Расчеты и оформление"" в поле ""Детализация расчетов""", Ссылка,,, Отказ); КонецЕсли; КонецПроцедуры
Неправильно
&НаСервере Процедура ПередЗаписью(Отказ) Если ПорядокРасчетов <> Перечисления.ПорядокРасчетов.ПоДоговорамКонтрагентов Тогда Отказ = Истина; КонецЕсли; КонецПроцедуры //--PRO