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

Ключ

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

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

...

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

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

Расширения

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

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

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

...

  • в

...

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

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

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

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

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

...

Примечание

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

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

...

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

Примечание

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

...

note

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

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

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

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

  • Если новый объект - Константа, разместить ее на общей форме 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