Как добавить реквизит в динамический список в расширении


Добавление доп. реквизита в динамический список программно

Добавление доп. реквизита в динамический список программно

Некоторые пользователи хотят видеть дополнительную аналитику по определенным объектам конфигурации 1С, для реализации этой потребности существует функционал дополнительных реквизитов и сведений, который зачастую выводится в группу «Дополнительно» или «Дополнительные реквизиты».

Мы же разберем как отобразить дополнительные реквизиты в форме списка элементов. Практически всегда в этой форме используется «Динамический список», но данный способ не позволяет использовать это на обычной «Таблице значений».

Как добавить дополнительный реквизит в динамический список:

Получившейся код модуля:

&НаКлиенте
Процедура dev_ПриОткрытииПосле(Отказ)
	
	ОтображениеДополнительныхРеквизитов();
	
КонецПроцедуры

&НаСервере
Процедура ОтображениеДополнительныхРеквизитов()
		
	// Получаем набор свойств объекта по пустой ссылке объекта метаданных.
	НаборСвойств = УправлениеСвойствамиСлужебный.ПолучитьНаборыСвойствОбъекта(Справочники.Номенклатура.ПустаяСсылка());
		
	// Инициализируем имя набора свойств. 
	ИмяНабора = НаборСвойств[0].Набор.Наименование;     
	Свойства  = НаборСвойств[0].Набор.ДополнительныеРеквизиты.Выгрузить().ВыгрузитьКолонку("Свойство");
	
	// Наполняем массив именами доп.реквизитов, которые мы хотим отобразить в списке формы. 
	// Можно создать отдельную настроку, например регистр где будем хранить выводимые поля,
	// для конкретных объектов метаданных или даже в зависимости от роли.
	МассивОтображаемыхСвойств = Новый Массив;
	МассивОтображаемыхСвойств.Добавить("Краткое описание");
	// и т.д.
	
	// Если например у нас полные права то выведем все доп.реквизиты.
	Если РольДоступна("ПолныеПрава") Тогда   
		МассивОтображаемыхСвойств = ПолучитьМассивНаименованийСвойств(Свойства);
	КонецЕсли;
	
	// Квадратные скобки обязательны.
	// Именно так платформа понимает что мы обращаемся к реквизиту ТЧ "ДополнительныеРеквизиты" 
	ШаблонПутьКДанным = "Список.Ссылка.[%1 (%2)]";	 
	
	// Обход циклом свойств для вывода в список.
	Для каждого ТекущееСвойство Из Свойства Цикл
		
		НаименованиеСвойства = ТекущееСвойство.Наименование; 
		ИмяЭлемента = ТекущееСвойство.ИдентификаторДляФормул; 
		
		Если  МассивОтображаемыхСвойств.Найти(НаименованиеСвойства) <> Неопределено Тогда
			СтрокаДанные = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонПутьКДанным, НаименованиеСвойства, ИмяНабора); 					
			НовыйЭлемент = Элементы.Добавить(ИмяЭлемента, Тип("ПолеФормы"), Элементы.Список);
			НовыйЭлемент.Вид 			= ВидПоляФормы.ПолеВвода;
			НовыйЭлемент.ПутьКДанным 	= СтрокаДанные;
			НовыйЭлемент.Заголовок 		= НаименованиеСвойства;	  
		КонецЕсли;  
		
	КонецЦикла; 
	
КонецПроцедуры

&НаСервереБезКонтекста
Функция ПолучитьМассивНаименованийСвойств(МассивСвойств) 

	МассивНаименований = Новый Массив;
	Для каждого Свойство Из МассивСвойств Цикл	
		МассивНаименований.Добавить(Свойство.Наименование);
	КонецЦикла;
	
	Возврат МассивНаименований;
	
КонецФункции;

Данный код проверялся на конфигурации «Бухгалтерия предприятия 3.0», но он подойдет для любой конфигурации.

Как результат работы нашего кода прикладываем скриншот и тестовое расширение конфигурации:

6.png - ITsale

Как видим все доп. реквизиты появились в нашем списке.

Для подключения расширения использовались такие надстройки:

7.png - ITsale

Скачать расширение

Оставить заявку на бесплатную консультацию прямо сейчас!


В общем, сижу изучаю возможности расширения, в частности возможность добавления в динамический список колонок. И не выходит…

Что сделано — добавлен документ, его форма, сам список, связанные документы в запросе и т.д. — в расширение.

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

Пробую добавить реквизит на форму… и тут затык.

Вроде как запрос не переопределяется в коде, но колонка не хочет добавляться.

Пробовал через

НоваяКолонкаТаблицы = Элементы.Добавить(«СписокСНТ»,Тип(«ПолеФормы»),Элементы.Список);

НоваяКолонкаТаблицы.Заголовок = «СНТ»;

НоваяКолонкаТаблицы.Вид = ВидПоляФормы.ПолеНадписи;

НоваяКолонкаТаблицы.ПутьКДанным = «Список.СНТ»;

НоваяКолонкаТаблицы.Видимость=Истина;

В теории это должно добавить колонку СНТ в конец таблицы. На практике не добавляется ничего. Я что-то не так сделал в концептуальном плане? Или таки это какая-то особенность конкретной формы и надо в ней ковыряться?

Содержание:

1.       Как программно добавить в динамический список данные?

2.       Вариант решения для динамических списков в 1С 8.3

3.       Использование Схемы запросов 

1.    Как программно добавить в динамический список данные?

Использование объекта СхемаЗапроса для универсальной модификации динамических списков.

Дано:

·         динамические списки данных объектов конфигурации (списки элементов справочника, журналы документов);

·         некоторые данные, которыми нужно программно добавить в динамические списки (каждый элемент списка), содержащиеся, например, в регистрах сведений.

Требуется предложить решение, которое:

·         легко масштабируется на любые динамические списки данных в 1С (и может быть перенесено в другую конфигурацию);

·         оставляет основную конфигурацию на полной поддержке.  

2.    Вариант решения для динамических списков в 1С 8.3

Допустим, с помощью расширения добавлен некий регистр сведений, в котором хранятся данные о ссылочных объектах БД (элементы справочника, документы). Необходимо в типовые формы динамических списков в 1С 8.3 и формы выбора добавить информацию из этого регистра, соединив левым соединением с типовым списком.

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

3.    Использование Схемы запросов

Используем объект «Схема Запросов» в 1С.

В расширении в процедуре ПриСозданииНаСервере (с аннотацией &После) получим запрос динамического списка, передадим его в нашу процедуру, обработаем с помощью объекта СхемаЗапроса и обратно вернемся в текст, содержащий левое соединение с нужным нам регистром.

Ниже приводится примерный текст функции, решающий эту задачу. На большинстве динамических списков в 1С 8.3 он может быть использован без изменений. Вывод новой колонки в форму списка для показа пользователю здесь не рассматривается.

Рисунок 1 Запрос динамического списка

Функция ПолучитьРасширенныйТекстЗапроса(ТекстЗапроса) Экспорт

                СхемаЗапроса = Новый СхемаЗапроса;

                // передадим текст запроса в Схему запроса

                СхемаЗапроса.УстановитьТекстЗапроса(Знач ТекстЗапроса);

                //получим последний запрос пакета, к которому будем присоединять таблицу

                ПоследнийЗапросПакета = СхемаЗапроса.ПакетЗапросов[СхемаЗапроса.ПакетЗапросов.Количество()-1]);

                //Каждый оператор представляет собой запрос ВЫБРАТЬ.

                Оператор = ПоследнийЗапросПакета.Операторы[0];

                // получаем источники оператора ВЫБРАТЬ

                Источники = Оператор.Источники;

                ОсновнойИсточник = Источники[0];

                //добавим к источникам наш регистр, укажем его псевдоним

                НовыйИсточник = Источники.Добавить(«РегистрСведений.Расш_НашРегистр.СрезПоследних», «Расш_НашРегистр»);

                // получим псевдоним основном таблицы для формирования условия соединения

                ПсевдонимОсновнойТаблицы = ОсновнойИсточник.Псевдоним;

                //Сформируем строку соединения

                УсловиеСоединения = ПсевдонимОсновнойТаблицы + «.Ссылка = Расш_НашРегистр.Ссылка»;

                // получим соединения основного источника и добавим к нему своё

                Соединения = ОсновнойИсточник.Соединения;

                Соединения.Добавить(НовыйИсточник, УсловиеСоединения);

                // установим тип соединения

                Соединения[Соединения.Количество()-1].ТипСоединения = ТипСоединенияСхемыЗапроса.ЛевоеВнешнее;

                // чтобы в динамическом списке стало доступно для вывода поле из нашего регистра, добавим его в запрос

                Оператор.ВыбираемыеПоля.Добавить(«Расш_НашРегистр.НекийРесурс»);

                // вернем получившийся запрос

                НовыйТекстЗапроса = СхемаЗапроса.ПолучитьТекстЗапроса();

                Возврат НовыйТекстЗапроса;

КонецФункции

Специалист компании «Кодерлайн»

Татьяна Федорова

Программное создание практически всех популярных элементов формы.

2020

Добрый день, Коллеги!

//+++ Обновление публикации от 31.08.2020 г.

// Посмотрите новую статью «Динамическое формирование интерфейса»

//— Обновление публикации от 31.08.2020 г.

Предлагаю вашему вниманию шпаргалку, шаблоны кода для применения в разработке динамического интерфейса — программное формирование элементов управляемой формы. Особенно будет полезно начинающим разработчикам.

Применение

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

  1. Заранее неизвестно какое количество элементов необходимо разместить на форме (Примеры: Система тестирования, где при формирование тестового задания заранее неизвестно сколько будет вопросов или документ корректировки регистров, когда так же заранее не известно какие колонки будут у таблицы формы).
  2. Доработка типового функционала. Программное размещение элементов впоследствии упрощает обновление типовых конфигураций. Многие разработчики даже придерживаются данного правила при работе с «расширениями».

Шпаргалка

Оглавление

Введение

Общее

Группа — Тип(«ГруппаФормы»)

Поле — Тип(«ПолеФормы»)

Создаем реквизит

Создаем Поле

Декорация — Тип(«ДекорацияФормы»)

Декорация «Надпись»

Декорация «Картинка»

Кнопка — Тип(«КнопкаФормы»)

Создание команды

Создание кнопок

Таблица формы и колонки

Создание таблицы формы

Создание колонок

Динамический список

Бонус — общий модуль с готовыми функциями

В публикации будет разработан пример создания интерфейса с задействованием практически всех популярных элементов формы. Одно из исключений — таблица, вариант программного создания таблицы описывал ранее — программное создание динамического списка. Ниже пример интерфейса, который будет разобран (тестировалось на платформе 8.3.15.1534):

Создание элементов, реквизитов и команд лучше производить в процедуре «ПриСозданииНаСервере».

Есть два варианта размещения элементов на форме — «добавить» и «вставить».

ЭтаФорма.Элементы.Добавить([Название нового элемента], [Тип элемента], [Элемент-родитель]) — Элемент будет добавлен на размещаемый элемент-родитель в конец списка.

ЭтаФорма.Элементы.Вставить([Название нового элемента], [Тип элемента], [Элемент-родитель], [Последующий элемент]) — Элемент будет добавлен на размещаемый элемент-родитель и вставлен перед желаемым элементом.

После создания элемента, мы можем определить ему свойства. Свойства практически всегда совпадают с названиями на панели свойств элемента.

Элементы формы, которые можно создать с типом «ГруппаФормы»:

  • ГруппаКнопок
  • ГруппаКолонок
  • КоманднаяПанель
  • КонтекстноеМеню
  • ОбычнаяГруппа
  • Подменю
  • Страницы
  • Страница

Пример создания элементов типа «ГруппаФормы»

Для работы элемента формы «Поле» необходимо наличие источника данных — реквизита. Если необходимого реквизита нет, его нужно предварительно создать.

Элементы формы, которые можно создать с типом «ПолеФормы»:

  • ПолеHTMLДокумента
  • ПолеВвода
  • ПолеГеографическойСхемы
  • ПолеГрафическойСхемы
  • ПолеДендрограммы
  • ПолеДиаграммы
  • ПолеДиаграммыГанта
  • ПолеИндикатор
  • ПолеКалендарь
  • ПолеКартинки
  • ПолеНадписи
  • ПолеПереключателя
  • ПолеПланировщика
  • ПолеПолосыРегулирования
  • ПолеТабличногоДокумента
  • ПолеТекстовогоДокумента
  • ПолеФлажок
  • ПолеФорматированногоДокумента

Создаем реквизит

При создании важно понимать, что указывается не «тип», а «описание типов» и для часто используемых типов: «строка», «число» и «дата», необходимо указывать квалификатор. Рассмотрим на примере ниже.

Пример создания реквизитов

Создаем Поле

При создании поля указываем тип «ПолеФормы», принцип мало чем отличается от создания группы:

Обе существующие декорации имеют один тип, но разный вид.

Декорация «Надпись»

Пример создания декорации надпись

Декорация «Картинка»

Пример создания декорации картинка

Для работы кнопок, необходимо наличие команды. Если на форме нет определенной команды, то её необходимо создать программно.

Создание команды

Важно, для работы команды должно быть определено действие. Действие — это основная процедура команды, программно его создать не получится.

Пример заранее описанного общего действия для всех команд

Создание кнопок

//+++ Обновление публикации от 10.02.2020 г.

Для работы таблицы формы необходимо наличие реквизита «Таблица значений» или «Динамический список». Не забывайти про путь, если таблица находиться в объекте, тогда указываем полный путь, пример: «Объект.Товары» и так же для колонок «Объект.Товары.Номенклатура».

Создание таблицы

Создание колонок

//— Обновление публикации от 10.02.2020 г.

«Лень — двигатель прогресса» и костылей J

Я пошел дальше, создал общий модуль, где описал создание всех выше описанных элементов формы. Поэтому предлагаю вам с ним познакомиться. Для этого создайте новый модуль:

// +++ Обновление публикации от 30.03.2021 г.

// НОВЫЙ МОДУЛЬ СМОТРИТЕ ТУТ

// — Обновление публикации от 30.03.2021 г.

И скопируйте в него код:

Код общего модуля (лучше использовать новый, по ссылке выше)

Удобно или нет — решать вам. Приведу лишь пример кода, созданного выше с помощью и без помощи общего модуля.

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

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

Всем удачного кодинга!

Другие полезные шпаргалки:

Несколько 1С-Серверов на одном сервере Свой заголовок отчету на СКД (с параметрами)

Публикации по работе с интерфейсом:

Интерактивный выбор даты Интерактивный выбор периода

Свой флажок Цифровые и аналоговые часы

Инструкция. Программная модификация управляемых форм

Одним из требований для прохождения аудита расширения в модели сервиса является программная модификация управляемых форм без заимствования самой формы в расширение.

Мы рассмотрим основные составляющие этой задачи: добавление реквизитов, добавление элементов формы и назначение обработчиков событий элементов формы.

Добавление реквизитов

Для добавления реквизитов используется метод объекта ФормаКлиентскогоПриложения

							ИзменитьРеквизиты(ДобавляемыеРеквизиты, УдаляемыеРеквизиты);
						

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

Переменная ДобавляемыеРеквизиты является массивом объектов типа РеквизитФормы.

Например, если мы создаем таблицу значений из двух колонок, то программный код для их создания будет выглядеть следующим образом:

							ДобавляемыеРеквизиты = Новый Массив;
							ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("Демо_ТаблицаДанных", Новый ОписаниеТипов("ТаблицаЗначений"), , "Таблица значений", Ложь));
							ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("Поставщик", Новый ОписаниеТипов("СправочникСсылка.Контрагенты"), "ТаблицаДанных", "Кто поставляет", Ложь));
							ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("Товар", Новый ОписаниеТипов("СправочникСсылка.Товары"), "ТаблицаДанных", "Имя товара", Ложь));
							ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("ОписаниеОбъекта", ТипСтрока, "", "Описание объекта", Ложь));
							ИзменитьРеквизиты(ДобавляемыеРеквизиты);
							

К добавленным реквизитам верхнего уровня из модуля можно обращаться только с помощью конструкции ЭтотОбъект. ˂Имя реквизита˃.

Процедуру ИзменитьРеквизиты логично вызывать из обработчика ПриСозданииНаСервере, но т.к. мы не заимствуем форму в расширение, то следует найти другую точку входа. Для конфигураций УТ 11, КА 2 и ERP 2 существует типовой механизм упрощенного изменения конфигураций. Нас интересует модуль МодификацияКонфигурацииПереопределяемый, в состав которого входит процедура

							ПриСозданииНаСервере(Форма, Отказ, СтандартнаяОбработка)
						

Данную процедуру можно заимствовать в расширение, добавить проверку имени формы и вставить код изменения реквизитов:

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

Для остальных конфигураций придется переопределять другие процедуры. Например

							ПодключаемыеКоманды.ПриСозданииНаСервере(Форма)
						

или

							ВерсионированиеОбъектов.ПриСозданииНаСервере(Форма)
						

Использование той или иной процедуры следует проверить в модуле редактируемой формы.

Изменение элементов формы

Управление элементами формы производится через коллекцию Элементы объекта ФормаКлиентскогоПриложения, с помощью которой можно добавлять, удалять, изменять свойства элементов формы, а также перемещать элементы формы между родителями.

Для добавления нового элемента формы требуется передать в функцию Добавить данной коллекции имя элемента, его тип и родителя (при необходимости). Например:

							Элемент = Элементы.Добавить("Демо_ОписаниеОбъекта", Тип("ПолеФормы"));
							Элемент.Вид = ВидПоляФормы.ПолеВвода;
							Элемент.ПутьКДанным = "ОписаниеОбъекта";
						

По аналогии с добавлением реквизитов, данный код можно выполнять в функциях МодификацияКонфигурацииПереопределяемый.ПриСозданииНаСервере (УТ, КА, ERP), ПодключаемыеКоманды.ПриСозданииНаСервере или ВерсионированиеОбъектов.ПриСозданииНаСервере.

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

Обработка событий формы

Выполнить код по событию элемента формы можно двумя способами:

  • Создать команду, указать для этой команды имя обработчика события и назначить эту команду элементу формы
  • Выполнить метод УстановитьДействие элемента формы, чтобы указать имя обработчика события в модуле формы

Оба метода предполагают наличие в модуле формы процедуры с сигнатурой, соответствующей обработчику события. Для первого способа в модуле формы должна быть клиентская процедура, принимающая единственный аргумент — Команда. Для второго — всё зависит от события, для которого выполняется обработчик. Так, например, для события ПриИзменении элемента формы с типом ПолеВвода будет требоваться процедура, принимающая единственный аргумент — ЭлементФормы. А для события ПередНачаломДобавления таблицы формы — целых 6 аргументов (ЭлементФормы, Отказ, Копирование, Родитель, ЭтоГруппа, Параметр). Поэтому для некоторых событий попросту невозможно подобрать соответствующие клиентские методы в модуле формы и заимствования формы в расширение не избежать.

Для самых простых случаев (команда или событие без параметров) можно использовать следующие комбинации обработчиков и переопределяемых процедур:

  • обработчик Подключаемый_ВыполнитьПереопределяемуюКоманду с переопределением процедуры МодификацияКонфигурацииКлиентПереопределяемый.ВыполнитьПереопределяемуюКоманду для УТ, КА и ERP;
  • обработчик Подключаемый_ВыполнитьКоманду с переопределением процедуры ПодключаемыеКомандыКлиент.ВыполнитьКоманду

При этом в предопределенной процедуре обязательно проверять имя команды (или имя элемента формы) и имя самой формы.

Например:

							ЭлементУПД.УстановитьДействие("ПриИзменении", "Подключаемый_ВыполнитьКоманду");
							
							&Вместо("ВыполнитьКоманду")
							Процедура Демо_ВыполнитьКоманду(Форма, Команда, Источник)
								Если ТипЗнч(Форма) = Тип("ФормаКлиентскогоПриложения") И Форма.ИмяФормы = "Справочник.Контрагенты.Форма.ФормаЭлемента" Тогда
									Если ТипЗнч(Команда) = Тип("ПолеФормы") Тогда
										Если Команда.Имя = "Демо_ВедущийМенеджер" Тогда
							// код обработки события
											Возврат;
										КонецЕсли;
									КонецЕсли;
								КонецЕсли;
								ПродолжитьВызов(Форма, Команда, Источник);
							КонецПроцедуры;
						

Либо вариант с использованием команд:

							Команда = Команды.Добавить("Демо_КомандаИзменитьСтроку");
							Команда.Действие = "Подключаемый_ВыполнитьПереопределяемуюКоманду ";
							Элемент = Элементы.Добавить("Демо_ИзменитьСтроку", Тип("КнопкаФормы"));
							Элемент.ИмяКоманды = "Демо_КомандаИзменитьСтроку";
							
							
							&Вместо("ВыполнитьПереопределяемуюКоманду")
							Процедура Демо_ВыполнитьПереопределяемуюКоманду(Форма, Команда, ДополнительныеПараметры) Экспорт
							Если ТипЗнч(Форма) = Тип("ФормаКлиентскогоПриложения") И Форма.ИмяФормы = "Справочник.Контрагенты.Форма.ФормаЭлемента" Тогда
								Если Команда.Имя = "Демо_КомандаИзменитьСтроку" Тогда
							// код обработчика события
								КонецЕсли;
							КонецПроцедуры
						

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

Полезные советы

Работа с динамическими списками

Довольно частой задачей является модификация в расширении текста запроса динамического списка. Многие разработчики просто копируют текст запроса из конфигуратора, редактируют его и заменяют стандартный в свойстве ТекстЗапроса объекта Динамический список.

Для небольших изменений гораздо лучше воспользоваться объектом СхемаЗапроса, появившемся в версии платформы 8.3.5. Он позволит всегда иметь актуальный текст запроса, если он поменяется при обновлении конфигурации.

Например:

							СхемаЗапроса = Новый СхемаЗапроса;
							СхемаЗапроса.УстановитьТекстЗапроса(Список.ТекстЗапроса);
							Пакет = СхемаЗапроса.ПакетЗапросов[0];
							Оператор = Пакет.Операторы[0];
							Оператор.ВыбираемыеПоля.Добавить("РеализацияТоваровУслуг.Ссылка");
							Список.ТекстЗапроса = СхемаЗапроса.ПолучитьТекстЗапроса();
						

Переопределение открываемой формы

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

Для этого следует реализовать новую форму (не заимствовать её, а написать с нуля) и в модуле менеджера переопределить процедуру ОбработкаПолученияФормы.

Например:

							Процедура ОбработкаПолученияФормы(ВидФормы, Параметры, ВыбраннаяФорма, ДополнительнаяИнформация, СтандартнаяОбработка)
								Если ВидФормы = "ФормаОбъекта" И Параметры.Ключ.Вид = Перечисления.ВидыТоваров.Услуга Тогда
									ВыбраннаяФорма = Метаданные.Справочники.Товары.Формы.ФормаУслуги;
									СтандартнаяОбработка = Ложь;
								КонецЕсли;
							КонецПроцедуры
						

Данный метод следует использовать с осторожностью или ограничивать его использование ключами открытия формы, т.к. в этом случае мы делаем недоступной типовую форму.

Работая с расширениями, вы наверняка столкнулись с неудобством редактирования текстов запросов. Ведь для того, чтобы воспользоваться конструктором запросов или конструктором СКД, требуется предварительно заимствовать в расширение все объекты и соответствующие реквизиты. В рамках Мастер-группы курса Разработка расширений и технологии доработки конфигураций 1С без снятия с поддержки тренер предлагает альтернативные варианты заимствованию.

Вопрос

Подскажите, как правильно сделать следующее: в конфигурации есть обработка, основной объект – динамический список, с запросом. Хотел через расширение модернизировать запрос, но даже не измененный запрос сохранить не получается. Появляется целый список  значений, на который ссылается запрос. Что нужно делать в таких случаях?

Ответ

Платформа выдает ошибки, потому что указанные объекты не заимствованы в расширение. Значит, в контексте этого расширения система не знает, что такие объекты вообще существуют.

  1. Поэтому для начала попробуйте проигнорировать эти ошибки. Да, сообщения об ошибках появляются, но скорее всего система даст обновить конфигурацию базы данных. При работе в режиме “1С:Предприятие” основная конфигурация и расширения находятся в одном “пространстве”, поэтому ошибок выполнения не должно возникать. Минус такого подхода – неудобство разработки.
  2. Можно заимствовать в расширение все объекты, которые выдают ошибки. Тогда при сохранении ошибки такого рода не будут возникать. Тут недостаток в большом количестве заимствованных объектов. Это лишние проверки при попытке применения расширения, потенциальная возможность, что после обновления значение какого-то из контролируемых свойств в основной конфигурации и расширении не совпадут (т.е. расширение не будет подключено).
  3. Еще вариант – программная работа с объектами. Например, текст запроса динамического списка можно установить программно в обработчике события ПриСозданииНаСервере. Попробуйте рассмотреть такой вариант доработки.

Понравилась статья? Поделить с друзьями:
  • Как добавить реквизит на форму в расширении конфигурации
  • Как доказать вину управляющей компании в затопе квартиры
  • Как должны выглядеть реквизиты банковской карты сбербанк
  • Как доставить товар на склад озон транспортной компанией
  • Как заверить доверенность в управляющей компании образец