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

Ключ

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

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

...

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

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

Расширения

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

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

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

...

  • в

...

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

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

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

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

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

...

Примечание

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

Объекты конфигурации

...

Все новые объекты создаются с префиксом PRO_ (не важно кто является разработчиком)

...

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

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

Подсистема

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

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

...

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

Блок кода
//++PRO, текст комментария
// продолжение текста комментария 
  ...
  Код программы
  ...
//--PRO 

Создание новых объектов

...

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

...

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

...

сначала создать в этой подсистеме подсистему PRO_…

Исключения

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

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

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

Если реквизит или табличная часть добавляется в стандартный объект конфигурации, то он должен иметь префикс 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

...

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

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

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

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

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

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

Проверка свойств перед

...

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

Примечание

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

Правильно

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

Неправильно

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

...

Свойства страницы
hiddentrue

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

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