Сравнение версий

Ключ

  • Эта строка добавлена.
  • Эта строка удалена.
  • Изменено форматирование.

Хранилище конфигурации

  • Все конфигурации должны быть подключены к хранилищам конфигураций

  • Расширения допускается не подключать к хранилищам

...

  • Каждый разработчик должен работать под своим именем. Для этого он должен получить у Администратора хранилища логин/пароль и право захвата объектов в конфигурации

  • Обновление рабочей конфигурации происходит под универсальным пользователем. Под этим пользователем не допускается внесение изменений в конфигурацию

Расширения

Расширения могут быть использованы в двух случаях:

  • Поставщик конфигурации реализовал исправление ошибки

  • Для внесения срочного изменения конфигурации

...

  • в

...

  • конфигурацию

Базы для разработчиков

  • Каждому разработчику необходимо иметь собственную копию базы с конфигурацией, которую ему необходимо изменять

  • Для получения копии необходимо обратиться к Администратору баз данных

  • После получения копии ее необходимо отключить от хранилища и подключить с логином/паролем, полученным Администратором хранилища

...

Захват объектов в хранилище

  • Разработчик должен захватывать только те объекты, которые ему необходимо изменять

Примечание

Нельзя надолго захватывать корень хранилища, т.к. другие разработчики не смогут в это время добавлять новые объекты

Создание новых объектов конфигурации

Новый объект конфигурации должен иметь префикс PRO_ (независимо от разработчика, подрядчика)

Подсистема

Новый объект конфигурации должен быть размещен в подсистеме PRO_…

Если требуется добавить объект в штатную подсистему, то необходимо сначала создать в этой подсистеме подсистему PRO_…

Исключения

Исключениями являются объекты, входящие в обновляемые подсистемы сторонних разработчиков, таких как: Diadoc. PAPI, ПИТ и т.п.

Если объекты таких подсистем не находятся на поддержке и не планируется их обновление, префикс должен быть PRO_

Добавление собственных реквизитов и табличных частей в стандартные объекты

Если реквизит или табличная часть добавляется в стандартный объект конфигурации, то он должен иметь префикс PRO_

Если реквизит или табличная часть добавляется в собственный объект конфигурации, специальных префиксов у него быть не должно

Как создать новый объект конфигурации

Примечание

Т.к. захват корня хранилища может быть произведен только одним разработчиком в один момент времени, важно, чтобы эта процедура занимала минимальное время.

Недопустимо надолго захватывать корень хранилища

  • Захватить корень хранилища и подсистемы, в которых будет размещен объект

  • Создать все объекты, которые необходимы для решения задачи, в том числе подсистемы. Включить все объекты в необходимые подсистемы

  • Создать роли на доступ к объектам, включить новые роли в те же подсистемы, в которые включен новый объект

  • Если новый объект - Константа, разместить ее на общей форме PRO_Настройки, расположив в группе по смыслу значения

  • Проверить, что конфигурация собирается без ошибок (особенно при создании регистров). Это необходимо делать до создания модулей всех реквизитов объектов (кроме обязательных)

  • Поместить в хранилище все созданные объекты, оставив захваченными

  • Отпустить корень хранилища

Как заменить реквизит или объект на новый

Бывают ситуации, когда необходимо перенести реквизит из расширения в основную конфигурацию, или заменить один реквизит другим (был текстовый реквизит, стал перечислением, ссылкой и т.п.). Общий алгоритм следующий:

  • Переименовать старый реквизит - добавить в начало префикс Удалить_

  • При переименовании учесть изменение кода модулей

  • Добавить новый реквизит с новым типом

  • Изменить код модулей таким образом, чтобы он работал с новым реквизитом

  • Написать обработку заполнения данных из старого реквизита в новый

  • Передать обработку Главному разработчику для выполнения после обновления рабочей конфигурации

Расширения

Расширения могут быть использованы в двух случаях:

  • Поставщик конфигурации реализовал исправление ошибки

  • Для внесения срочного изменения конфигурации

В дальнейшем функционал расширения должен пройти рефакторинг и внесение в основную конфигурацию

Дополнительные обработки и отчеты

Дополнительные отчеты и обработки (далее просто Обработки) допускается использовать для очень редко выполняемых задач.

Текст внешней обработки не может быть автоматически протестирован при изменении / обновлении конфигурации, поэтому нет никаких гарантий работоспособности обработок на длительном периоде.

Все отчеты и обработки, запускаемые хотя бы раз в квартал, должны быть перенесены в основную конфигурацию.

Примером обработки, которая не будет перенесена в основную конфигурацию является обработка Диадок. Она поддерживается компанией-разработчиком, не изменяет структуру базы данных.

При разработке отчета и обработки

В процессе разработки обработки необходимо создать объект в конфигурации, после чего его можно выгрузить во внешнюю обработку/отчет для доработки, оставив объект конфигурации в захваченном виде.

При завершении разработки объект в конфигурации заменить на внешнюю обработку/отчет и поместить в хранилище

Комментарий в тексте модуля

Комментарии должны содержать специальные символы для идентификации кода при обновлении.

Комментарии должны быть достаточно понятными, чтобы пояснять работу модуля или комментируемого оператора.

Тексты комментариев должны составляться по правилам русского языка, в деловом стиле, быть эмоционально сдержанными и не содержать слов, не относящихся к функциональности программы. 

Блок кода
languagecpp
//++PRO, Создает прокси на основе определения веб-сервиса и связывает
// его с точкой подключения веб-сервиса. 
  ...
  Код программы
  ...
//--PRO 

Программирование

  • Стандартные объекты не изменяем

Если необходимо изменить стандартный объект

Изменить модуль стандартного объекта

Все изменения должны находится в блоке, у которого написан комментарий

Блок кода
languagecpp
//++PRO Дата и фамилия изменившего, краткое описание что изменено и зачем
//Например, добавлено автоматическое заполнение Направления деятельности из договора, 
//чтобы не было проблем при взаиморасчетах
Код...
//--PRO

Изменить форму стандартного объекта

Все изменения вносятся программно в модуле объекта. В процедуре ПриСозданииНаСервере вызывается функция модуля PRO__СобытияФорм

Блок кода
в модуле объекта формы:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
...
//++PRO
  PRO__СобытияФорм.ПриСозданииНаСервере(ЭтаФорма);
//--PRO
...
КонецПроцедуры

в общем модуле: 
Процедура ПриСозданииНаСервере(ЭтаФорма) Экспорт 	
	ИмяФормы = ЭтаФорма.ИмяФормы;
	Если ИмяФормы = "Справочник.Контрагенты.Форма.ФормаЭлемента" Тогда
		ПриСозданииНаСервереКорреспонденты(ЭтаФорма);	
	ИначеЕсли ИмяФормы = ... Тогда
		...
	КонецЕсли;
КонецПроцедуры

Процедура ПриСозданииНаСервереКорреспонденты(ЭтаФорма)
  НовыйЭлемент = ЭтаФорма.Элементы.Добавить("PRO_Поклажедатель", Тип("ПолеФормы"), ЭтаФорма.Элементы.ГруппаСтраницы);
  НовыйЭлемент.Вид = ВидПоляФормы.ПолеФлажка;
  НовыйЭлемент.ПутьКДанным = "Объект.PRO_Поклажедатель";
 КонецПроцедуры 

Добавить процедуру/функцию в стандартный модуль объекта

Все процедуры/функции должны начинаться с префикса PRO_…, например PRO_РасчетЗадолженностиНаДату(ДатаЗадолженности)

НЕ писать комментарий перед процедурой/функцией, если необходимо добавить комментарий, то написать его внутри процедуры

Правильно

Блок кода
&НаКлиенте
Процедура PRO_РасчетЦен(Команда)
//Добавлена команда расчета цен, 01.01.2020

	Если Объект.Проведен=Истина Тогда
		PRO_ОбщегоНазначенияСервер.СформироватьОсновнойЗапросЦенообразования(Объект.Ссылка);
	Иначе
		Сообщить("Необходимо провести документ");
	КонецЕсли;
КонецПроцедуры

Неправильно

Блок кода
//++PRO, добавлена команда расчета цен, 01.01.2020
&НаКлиенте
Процедура PRO_РасчетЦен(Команда)
	Если Объект.Проведен=Истина Тогда
		PRO_ОбщегоНазначенияСервер.СформироватьОсновнойЗапросЦенообразования(Объект.Ссылка);
	Иначе
		Сообщить("Необходимо провести документ");
	КонецЕсли;
КонецПроцедуры
//--PRO

Добавление нескольких процедур и функций

Если в штатный модуль добавлено более 2-х собственных процедур/функций, то их необходимо объединить в область и все новые процедуры/функции располагать в этой области

Блок кода
languagecpp
#Область PRO

&НаКлиенте
Процедура PRO_РасчетЦен(Команда)
	Если Объект.Проведен = Истина Тогда
		PRO_ОбщегоНазначенияСервер.СформироватьОсновнойЗапросЦенообразования(Объект.Ссылка);
	Иначе
		Сообщить("Необходимо провести документ");
	КонецЕсли;
КонецПроцедуры

&НаСервереБезКонтекста
Функция PRO_ДоступКРолиПолныеПрава()
	Возврат РольДоступна("ПолныеПрава");
КонецФункции

&НаКлиенте
Процедура PRO_ТоварыПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа, Параметр)
	...
КонецПроцедуры

&НаСервере
Функция PRO_ЭтоГоспрогорамма()
	...
КонецФункции

#КонецОбласти

Проверка свойств перед записью с последующим отказом

Примечание

При отказе записи объекта ОБЯЗАТЕЛЬНО формировать сообщение пользователю о причине отказа

Правильно

Блок кода
&НаСервере
Процедура ПередЗаписью(Отказ)
    Если ПорядокРасчетов <> Перечисления.ПорядокРасчетов.ПоДоговорамКонтрагентов Тогда
		ОбщегоНазначения.СообщитьПользователю(
			"У договора может быть только порядок расчетов ""По договорам"", укажите это свойство на странице ""Расчеты и оформление"" в поле ""Детализация расчетов""",
			Ссылка,,,
			Отказ);
	КонецЕсли;
КонецПроцедуры

Неправильно

Блок кода
&НаСервере
Процедура ПередЗаписью(Отказ)
	Если ПорядокРасчетов <> Перечисления.ПорядокРасчетов.ПоДоговорамКонтрагентов Тогда
		Отказ = Истина;
	КонецЕсли;
КонецПроцедуры
//--PRO

Связанные статьи

Фильтр по метке (контент, отфильтрованный по метке)
showLabelsfalse
max5
spacescom.atlassian.confluence.content.render.xhtml.model.resource.identifiers.SpaceResourceIdentifier@1f735d
sortmodified
showSpacefalse
reversetrue
typepage
cqllabel in ( "изменение" , "конфигурация" , "регламент" ) and type = "page" and space = "CATS"
labelsизменение конфигурация регламент
Свойства страницы
hiddentrue

Связанный запросы

https://ooo-rassvet.atlassian.net/browse/CATE-41