1с стандартные реквизиты справочника в расширение

Доброго дня, коллеги!

А вы теряли стандартные реквизиты в конструкторе запросов в расширении? Сколько времени ушло на поиск решения проблемы? А наш слушатель получил  ответ оперативно. Теперь данной хитростью делимся с вами! Безвозмездно :)

Вопрос

Добрый день! Подскажите, а добавляются ли в расширение стандартные реквизиты, например, для справочника реквизит “ЭтоГруппа” или “Владелец” (когда я делаю запрос в расширении и хочу отобрать элементы, не являющиеся каталогами, данных реквизитов  нет). Пробовал добавлять все реквизиты и формы данного справочника в расширение, но стандартные так и не добавились. В свойствах стандартных реквизитов так же не нашел возможности добавить в расширение. Платформа 1С 8.3.15, конфигурация 1С:УПП 1.3.

Ответ

Добрый день! Нужно в расширении указать, что этот справочник является иерархическим (то есть указать в расширении свойство Иерархический как контролируемое):

Свойства: Справочник 1

Тогда конструктор запроса покажет поле ЭтоГруппа.

Или давайте рассмотрим на примере, на пустой базе. Пусть у нас есть справочник Спецификации, подчиненный справочнику Номенклатура:

Справочник Спецификации

Создадим расширение конфигурации, заимствуем оба справочника в расширение.

В расширении воспользуемся конструктором запроса. Для справочника Спецификации поле Владелец недоступно:

Конструктор запроса

Теперь отметим для справочника Спецификации свойство Владельцы как контролируемое:

Справочник Номенклатура Владельцы

После этого в конструкторе запроса появляется поле Владелец:

Конструктор запроса

На форме объекта в расширении можно отобразить владельца:

Форма объекта

УТ 11.4

Функция1 — Цель посмотреть характеристики номенклатуры, сравнить с входными параметрами, если нет совпадений то вернуть истину

Функция2 — Если 1 функция вернула истину создается новая характеристика номенклатуры

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

ВЫБРАТЬ
    ХарактеристикиНоменклатуры.Владелец КАК Владелец,
    ХарактеристикиНоменклатуры.ДополнительныеРеквизиты.(
        Значение КАК Значение,
        Свойство.Наименование КАК СвойствоНаименование1
    ) КАК ДополнительныеРеквизиты
ИЗ
    Справочник.ХарактеристикиНоменклатуры КАК ХарактеристикиНоменклатуры
ГДЕ
    ХарактеристикиНоменклатуры.Владелец = &Владелец
    И ХарактеристикиНоменклатуры.ДополнительныеРеквизиты.Свойство.Наименование = &Наименование

А вот в расширении ХарактеристикиНоменклатуры.Владелец недоступен.

Как сделать это поле доступным или как еще можно получить эти данные?

Skip to content

1С, как добавить, изменить реквизит формы объекта через расширение

Как добавить, изменить реквизит формы через расширение

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

Вам необходимо выполнить следующие действия:

  • В дереве метаданных нажать правой кнопкой мыши на реквизит -> «Добавить в расширение» -> выбрать расширение;

  • Перейти в расширение конфигурации, открыть форму, в которую планируем добавить (или изменить) реквизит -> в области справа выделить реквизит -> нажать правую кнопку мыши -> «Добавить реквизит»;

Почему в новой платформе изменился данный механизм?

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

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

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

Contents

  • 1 Механизм расширения конфигурации 1C
  • 2 Как добавить расширение конфигурации 1С 8.3

Механизм расширения конфигурации 1C

Приветствую уважаемый читатель, в данной статье предлагаю ознакомиться с Механизмом расширения конфигурации  1С 8.3, в частности мы познакомимся с его работой в режиме Адаптация, а также рассмотрим пример программного изменения Формы объекта при помощи расширения. Ну, а сейчас немного теории…

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

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

При разработке расширений следует учитывать следующие факты:

— в системе могут функционировать более одного расширения.

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

Расширение может иметь одно из следующих назначений:

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

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

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

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

Ограничения использования расширений:

Расширения конфигурации не поддерживают создание следующих собственных объектов:

— Параметры сеанса.

— Общие реквизиты.

— Критерии отбора.

— Подписки на события.

— Регламентные задания.

— Функциональные опции и параметры функциональных опций.

— Определяемые типы.

— Хранилища настроек.

— Языки.

— Константы.

— Журналы документов.

— Бизнес-процессы и задачи.

— Внешние источники данных.

Не поддерживается расширение следующих объектов:

— Нельзя создавать подчиненные подсистемы.

— Если объект не может быть собственным объектом расширения его расширение также не поддерживается.

— Состав значений перечислений;

Не поддерживается добавление реквизитов и табличных частей для:

— План видов характеристик;

— План счетов;

— План видов расчетов.

Не поддерживается изменение структуры регистров всех видов. Поддерживается только расширение состава регистраторов.

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

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

Как добавить расширение конфигурации 1С 8.3

Предлагаю рассмотреть задачу добавления нового Справочника «Категория должности по Классификатору Предприятия» с выводом его значения на Форму Справочника Должности, на базе Конфигурации ЗУП 3.1

Для создания расширения необходимо запустить 1С в режиме конфигуратора.

В конфигураторе необходимо зайти в меню «Конфигурация» и выбрать пункт «Расширения конфигурации». Откроется окно со списком расширений (если они есть). Далее нажмем кнопку «Добавить». Мы увидим диалоговое окно создания расширения:

Стоит отдельно выделить поле Назначение – необходимо выбрать его значение в зависимости от решаемой задачи – т.к. мы выполняем добавление объектов по требованиям конкретного заказчика – нам подойдет вариант «Адаптация».

После нажатия на кнопку «ОК» — двойным кликом по появившейся строке откроем Конфигурацию расширения. Мы увидим практически пустое дерево конфигурации.

Добавим в расширение справочник Категория должности по Классификатору Предприятия. Стоит обратить внимание, что в название всех объектов процедур и функций созданных в расширении, добавляется его префикс (в нашем случае Расш1_);

Разместим наш новый Справочник в Подсистеме «ШтатноеРасписание» для этого необходимо добавить эту подсистему в Расширение – Перейдем в дерево основной Конфигурации и  нажмем правой кнопкой мыши на строке с нужной подсистемой и выберем пункт «Добавить в расширение».

Теперь мы можем управлять ее составом, добавим наш новый объект в подсистему.

Далее добавим в расширение Справочник Должности и добавим для него новый реквизит КатегорияДолжности с типом СправочникСсылка.Расш1_КатегорияДолжностиПоКлассификаторуПредприятия

Далее необходимо решить задачу с выводом реквизита КатегорияДолжности на форму Справочника Должности, реализовать это можно двумя способами:

— Интерактивно, добавив Форму «ФормаЭлемента» в расширение

— Программно, не добавляя Форму Справочника в расширении, а добавив подходящую процедуру, вызываемую в обработчике Формы «ПриСозданииНаСервере» в расширение.

Останавливаться на плюсах и минусах каждого решения не будем, а ниже рассмотрим оба варианта.

Интерактивное изменение Формы в расширении.

Для того чтобы вывести Реквизит на форму интерактивно: необходимо добавить саму Форму «ФормаЭлемента» в расширение. Обращу ваше внимание на следующий момент – для того чтобы появилась возможность Интерактивного добавления Реквизита объекта на форму необходимо сам Объект тоже добавить в расширение.

Далее добавим  новый Реквизит в подходящую Группу на форме.

Запустив 1С в режиме Предприятия убедимся, что новый Справочник появился в интерфейсе

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

Программное изменение Формы в расширении.

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

Предлагаю воспользоваться одной из процедур вызываемых в обработчике Формы «ПриСозданииНаСервере», в которую передается наша Форма в качестве параметра например УправлениеСвойствами.ПриСозданииНаСервере.

Перейдем в Общий модуль УправлениеСвойствами где находится данная процедура, и кликнем правой кнопкой мыши по процедуре ПриСозданииНаСервере. В выпадающем меню выберем пункт «Добавить в расширение»

Система предложит нам выбрать одну из аннотаций, подробнее о каждой из них рассмотрим в следующих публикациях, а сейчас выберем «Вызывать после»

После проделанных процедур увидим что в Расширение был добавлен общий модуль УправлениеСвойствами  и процедура Расш1_ПриСозданииНаСервере с аннотацией &После(«ПриСозданииНаСервере»)

Далее в добавленную процедуру поместим следующий код:

//Определим тип, чтобы ограничить добавление реквизитов только нужными нам Формами
Если ТипЗнч(Форма.СсылкаНаобъект) = Тип("СправочникСсылка.Должности") Тогда

// Добавим элемент формы "Категория должности"
мИмя = "Расш1_КатегорияДолжности";

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

КонецЕсли;

Запустим 1С в режиме предприятия и убедимся, что на форме также появился добавленный реквизит «КатегорияДолжности (пр.)»

Готовое расширение можно выгрузить в файл перейдя в конфигураторе в меню «Конфигурация» и выбрать пункт «Расширения конфигурации». В открывшемся списке расширений по правой кнопкой мыши можно вызвать выпадающее меню, либо выбрать пункт командной панели «Конфигурация» и  выбрать пункт «Сохранить конфигурацию в файл…». На выходе мы получим Файл типа *.cfe который можно передать заказчику.

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

Описание ошибки

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

Как воспроизвести

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

2023-02-28_21-04-11

Далее справочник «Пользователи» был заимствован в расширение. Так же в расширении была создана новая роль «PEN007_Роль», в которую добавлен заимствованный справочник. Видно, что в окне настройки прав отсутствует возможность указать права на стандартные реквизиты.

2023-02-28_21-08-13

Так же в самом заимствованном справочнике стандартные реквизиты так же не отображаются.

2023-02-28_21-10-46

Важно! Конфигуратор ведет себя так ка ожидается. На скриншоте открыта роль созданная в расширении. В роль добавлен заимствованный справочник «Пользователи». Конфигуратор дает возможность установить права на стандартные реквизиты.

2023-02-28_21-21-56

Скриншоты

No response

Ожидаемое поведение

У объекта, заимствованного в расширение, стандартные реквизиты должны быть доступны для установки прав

Лог рабочей области

metadata.zip

Версия 1С:EDT

Ruby 2022.2.3

Операционная система

Windows

Установленные плагины

No response

Дополнительная информация

Платформа: 8.3.20
конфигурация: Конвертация данных 3.1

Файлы материала
Описание

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

Программное добавление реквизита на форму

Для примера, стоит задача в конфигурации ЗУП 3.1 добавить реквизит «Способ отражения зарплаты в БУ» для позиции штатного расписания в группе “Дополнительные данные”.

Способ отражение в позиции штатного расписания

Создадим расширение и выполним следующую последовательность действий:

  1. Добавим в расширение справочник “Штатное расписание” и создадим реквизит “АВ_СпособОтражения” с типом данных “СправочникСсылка.СпособыОтраженияЗарплатыВБухУчете”

добавление реквизита АВ_СпособОтражения в расширение

2. Заберем в расширение процедуру “ПриСозданииНаСервере” из общего модуля “УправлениеСвойствами”, программно добавим поле в форму и свяжем его с реквизитом объекта добавленного на первом шаге.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

&После(«ПриСозданииНаСервере»)

Процедура АВ_ПриСозданииНаСервере(Форма, ДополнительныеПараметры)

Если Форма.ИмяФормы = «Справочник.ШтатноеРасписание.Форма.ФормаЭлемента» Тогда

#Область ДобавлениеЭлементовФормы

ИмяГруппы = «ГруппаДополнительныеРеквизиты»;

ГруппаФормы = Форма.Элементы.Найти(ИмяГруппы);

Если ГруппаФормы <> Неопределено Тогда

ИмяЭлемента = «АВ_СпособОтражения»;

Если Форма.Элементы.Найти(ИмяЭлемента) = Неопределено Тогда

ЭлементФормы = Форма.Элементы.Добавить(ИмяЭлемента, Тип(«ПолеФормы»), ГруппаФормы);

//Вместо Добавить() можно использовать метод Вставить()

//в 4-й параметре указывается Элемент перед которым должен быть вставлен новый элемент.

//ЭлементФормы = Форма.Элементы.Вставить(ИмяЭлемента, Тип(«ПолеФормы»), ГруппаФормы, Форма.Элементы.Найти(«ИмяСледующегоЭлементаФормы»));

ЭлементФормы.Вид = ВидПоляФормы.ПолеВвода;

ЭлементФормы.ПутьКДанным = «Объект.АВ_СпособОтражения»;

//ЭлементФормы.МногострочныйРежим = Истина;

//ЭлементФормы.Высота = 3;

КонецЕсли;

КонецЕсли;

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

КонецЕсли;

КонецПроцедуры

Образец расширения для скачивания в начале описания.

Программное добавление реквизита в табличную часть формы

Например, таким же способом, добавим в табличную часть “Рабочие места” реквизит “Спецжиры” с типом “Булево”.

Результат спецоценки условий труда с  колонкой спецжиры

Добавление реквизита в табличную часть

&После(«ПриСозданииНаСервере»)

Процедура АВ_ПриСозданииНаСервере(Форма, ДополнительныеПараметры)

Если Форма.ИмяФормы = «Документ.РезультатыСпецоценкиУсловийТруда.Форма.ФормаДокумента» Тогда

#Область ДобавлениеЭлементовФормы

ИмяЭлемента = «АВ_ЕстьСпецжиры»;

Если Форма.Элементы.Найти(ИмяЭлемента) = Неопределено Тогда

ЭлементФормы = Форма.Элементы.Добавить(«Спецжиры», Тип(«ПолеФормы»), Форма.Элементы.РабочиеМеста);        

ЭлементФормы.Вид = ВидПоляФормы.ПолеФлажка;

ЭлементФормы.ПутьКДанным = «Объект.РабочиеМеста.АВ_ЕстьСпецжиры»;

//ЭлементФормы.ТолькоПросмотр = Истина;

КонецЕсли;

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

КонецЕсли;

КонецПроцедуры

В результате получим табличную часть с новой колонкой.

Программное добавление табличной части на форму

Аналогично добавим табличную часть “АВ_ВредныеФакторы” на форму справочника “Профессии”.

Табличная часть добавленная через расширение

Добавление табличной части на форму

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

&После(«ПриСозданииНаСервере»)

Процедура АВ_ПриСозданииНаСервере(Форма, ДополнительныеПараметры)

Если Форма.ИмяФормы = «Справочник.ПрофессииРабочих.Форма.ФормаЭлемента» Тогда

#Область ДобавлениеЭлементовФормы

ИмяГруппы = «ГруппаДополнительныеРеквизиты»;

ГруппаФормы = Форма.Элементы.Найти(ИмяГруппы);

Если ГруппаФормы <> Неопределено Тогда

ИмяЭлемента = «АВ_ВредныеФакторы»;

Если Форма.Элементы.Найти(ИмяЭлемента) = Неопределено Тогда   

ЭлементФормыТаблица = Форма.Элементы.Добавить(ИмяЭлемента, Тип(«ТаблицаФормы»), ГруппаФормы);  

ЭлементФормыТаблица.ПутьКДанным = «Объект.АВ_ВредныеФакторы»;

ЭлементФормы = Форма.Элементы.Добавить(«ВредныйФактор», Тип(«ПолеФормы»), ЭлементФормыТаблица);

ЭлементФормы.Вид = ВидПоляФормы.ПолеВвода;

ЭлементФормы.ПутьКДанным = «Объект.АВ_ВредныеФакторы.ВредныйФактор»;    

КонецЕсли;

КонецЕсли;

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

КонецЕсли;

КонецПроцедуры

Связь реквизитов формы с элементами формы

Кроме того, реквизиты формы можно создавать программно и связывать их с элементами формы

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

#Область ДобавлениеРеквизитовФормы

// Массив для новых реквизитов

ДобавляемыеРеквизиты = Новый Массив;

// Опишем ревизиты формы

Реквизит_РабочееМесто = Новый РеквизитФормы(«АВ_РабочееМесто», Новый ОписаниеТипов(«СправочникСсылка.РабочиеМестаОхраныТруда»), , «Рабочее место»);

// Заполним массив после описания реквизитов формы

ДобавляемыеРеквизиты.Добавить(Реквизит_РабочееМесто);

// Добавим новые реквизиты в форму

Форма.ИзменитьРеквизиты(ДобавляемыеРеквизиты);

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

#Область ДобавлениеЭлементовФормы

...

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

#Область ЗаполнениеДанных

Форма.АВ_РабочееМесто = Форма.Объект.АВ_РабочееМесто;

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


Расширения, Типовые приемы, Шаблоны и заготовки

Доброго времени суток, уважаемые коллеги! В этой статье приведен реальный пример реализации переноса изменений конфигурации Бит. Автотранспорт (3.0.80.36/3.0.4.55) в расширение конфигурации и установка конфигурации под «замок» с возможностью обновления. Также показано, как решить возникшие проблемы по ходу переноса. Давайте разберёмся!

  • Перечень основных шагов при переносе доработок конфигурации в расширение
  • Копирование целого объекта из конфигурации в расширение
  • Настройка связей параметров выбора для отбора по владельцу
  • Установка проверки заполнения реквизита в расширении
  • Перенос констант в расширение
  • Добавление команды для формирования документа на основании
  • Ввод на основании нескольких документов
  • Описание обработки переноса данных
  • Добавление дополнительных отчетов в расширение
  • Демонстрация добавления и удаления расширения 1С
  • Демонстрация доработок, перенесенных в расширение

Перечень основных шагов при переносе доработок конфигурации в расширение

  1. Сравнить основную конфигурацию с конфигурацией поставщика. Как это сделать посмотрите здесь.
  2. Посмотреть поддерживает ли режим совместимости возможность использования расширений? С версии платформы 8.3.11 появилась эта возможность. Нужно установить этот режим совместимости, если текущая версия ниже. 
  3. Создать новое расширение конфигурации и установить префикс для этого расширения. Назначение: Адаптация
  4. Добавить в расширение все структуры необходимые для хранения данных, которые отличаются от конфигурациии поставщика. Также для правильной работы расширения нужно будет заимствовать все необходимые объекты конфигурации. На этом шаге могут возникать разные ситуации, которые будут препятствовать переносу. Некоторые описаны начиная со следующего подзаголовка. На этом шаге расширение конфигурации уже должно быть готово. Как установить готовое расширение можно посмотреть на видео ниже.
  5. Создать обработку для переноса данных из старых структур, которые были в основной конфигурации, в новые структуры, которые были созданы при помощи расширений. Некоторое описание обработки можно посмотреть в подзаголовке, а скачать её можно по ссылке в конце статьи.
  6. Перенести данные. 
  7. Удалить старые данные из конфигурации в правильном порядке. Это значит, что нужно сначала удалить объекты, в которых есть ссылки на другие объекты. Например, в документе есть реквизит с типом справочник Номенклатура. Сначала удалить этот реквизит, а затем и сам справочник Номенклатура.
  8. Вернуть изменённые объекты конфигурации обратно на замок, установив для объектов правило поддержки Объект поставщика не редактируется.
  9. Конфигурация — Поддержка — Настройка поддержки.
  10. Снова выполнить сравнение с конфигурацией поставщика. Кнопка «Сравнить, обьединить».
  11. Выставить в поле «Фильтр» значение «Нет фильтра».
  12. Найти нужный объект в дереве, нажать в правом углу кнопку «Изменить» и выбрать правило «Объект поставщика не редактируется». И подобным образом для всех объектов, у которых раньше была снята поддержка. 

Копирование целого объекта из конфигурации в расширение

При копировании целого объекта из конфигурации в расширение может появится сообщение:

ОБНАРУЖЕНЫ НЕРАЗРЕШИМЫЕ ССЫЛКИ:

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

Если нужно добавить новые реквизиты на форму, то сначала нужно заимствовать эту форму и открыть её, затем перейти в правую панель с реквизитами. Основной реквизит формы (Объект) будет выделен серым. Чтобы заимствовать объект нужно в контекстном меню выбрать «Добавить в расширение», после этого основной реквизит формы (Объект) будет выделен черным.

Чтобы были видны реквизиты документа в модуле объекта расширения, например Контрагент или ВидОперации нужно эти реквизиты заимствовать в расширение. Иначе будет выдаваться такая ошибка:

{ЗаказНаТехнику Документ.СписаниеСРасчетногоСчета.МодульОбъекта(11,6)}: Переменная не определена (ВидОперации)

Если нужно на форме документа расширения добавить глобальную команду, то сначала нужно заимствовать эту команду в расширение и указать в ее свойствах «Тип параметра команды», как это показано в подзаголовке. Если, например, это документ СчетНаОплатуПокупателю, то параметром будет ДокументСсылка.СчетНаОплатуПокупателю соответственноЕсли есть картинка к команде, то нужно заимствовать и её.

Настройка связей параметров выбора для отбора по владельцу

В существующем расширении реализована возможность отбора по владельцу для реквизита Заказ_ИсполнительДоговор документа бит_мат_ЗаказНаТехнику. Чтобы поле Владелец и другие стандартные реквизиты подчиненного справочника ДоговорыКонтрагентов (в данной конфигураци) отобразились в поле «Связи параметров выбора» нужно, заимствовать справочники Контрагенты и ДоговорыКонтрагентов в расширение. Потом отметить для справочника ДоговорыКонтрагентов свойство Владельцы как контролируемое. 

Заимствование справочников Контрагенты и ДоговорыКонтрагентов и установка свойства справочника ДоговорыКонтрагентов Владельцы как контролируемое

После этого в заимствованном документе расширения (бит_мат_ЗаказНаТехнику) у нового реквизита (Заказ_ИсполнительДоговор) с типом ДоговорыКонтрагентов в форме «Связи параметров выбора» из выпадающего списка в левой панели можно выбрать «Отбор.Владелец» со значением отбора по владельцу (Заказ_Исполнитель).

Теперь для свойства "Связи параметров выбора" из выпадающего списка в левой панели можно выбрать значение "Отбор.Владелец"

Установка проверки заполнения реквизита в расширении

В документе (бит_мат_ЗаказНаТехнику) в табличной части (ТребованияКТехнике) есть реквизит Техника со свойством “Проверка заполнения”, значение которого установлено как “Выдавать ошибку”, а нужно для него в расширении проставить значение “Не проверять”. Хотя этот реквизит перенесен в расширение, его свойства недоступны для редактирования. К сожалению, далеко не все свойства реквизитов документа являются расширяемыми. Но существует программное изменение значений свойств в расширении.

Хотя и невозможно поменять свойство “Проверка заполнения” в расширении у заимствованного реквизита, но можно изменить обработку ОбработкаПроверкиЗаполнения() в модуле объекта через расширение, так чтобы реквизит, даже не заимствованный, не проверялся. Вот, что можно написать:

&После("ОбработкаПроверкиЗаполнения")
Процедура Заказ_ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
	ИндексПоляТехника = ПроверяемыеРеквизиты.Найти("ТребованияКТехнике.Техника");
	Если ИндексПоляТехника <> Неопределено Тогда
		ПроверяемыеРеквизиты.Удалить(ИндексПоляТехника);
	КонецЕсли;
КонецПроцедуры

Перенос констант в расширение

В конфигурации были добавлены две константы (бит_Номенклатура и НоменклатурнаяГруппа). Нужно было их перенести в расширение, но к сожалению, объекты Константы в расширении можно создавать только на платформе 8.3.16 и выше. Данная конфигурация не поддерживала режим совместимости 8.3.16. Поэтому было решено создать регистр сведений (Заказ_Константы) и хранить значение констант там, а для получения значений констант нужно использовать функцию общего модуля ЗаказНаТехнику. Эта функция возвращает структуру со всеми значениями констант, сохраненных в ресурсах регистра. Вот код этой функции:

Функция ПолучитьКонстанты() Экспорт
	Результат = Новый Структура();
	Результат.Вставить("бит_Номенклатура", Справочники.Номенклатура.ПустаяСсылка()) ;
	Результат.Вставить("НоменклатурнаяГруппа", Справочники.НоменклатурныеГруппы.ПустаяСсылка());
	Запрос = Новый Запрос;
	Запрос.Текст = 
	"ВЫБРАТЬ
	|   Заказ_Константы.бит_Номенклатура КАК бит_Номенклатура,
	|   Заказ_Константы.НоменклатурнаяГруппа КАК НоменклатурнаяГруппа
	|ИЗ
	|   РегистрСведений.Заказ_Константы КАК Заказ_Константы";
	
	РезультатЗапроса = Запрос.Выполнить();
	
	Выборка = РезультатЗапроса.Выбрать();
	
	Пока Выборка.Следующий() Цикл
		ЗаполнитьЗначенияСвойств(Результат, Выборка);
	КонецЦикла;
	Возврат Результат;
КонецФункции // ПолучитьКонстанты()

Добавление команды для формирования документа на основании

В конфигурации для документа РеализацияТоваровУслуг добавили возможность его ввода на основании документа бит_мат_ЗаказНаТехнику, а это значит, что стандартный реквизит ВводитсяНаОсновании документа РеализацияТоваровУслуг изменился. Чтобы сохранить возможность ввода документа РеализацияТоваровУслуг нужно:

  • В расширении в разделе «Общие -> Общие команды«, создать новую команду. 
  • Дать название, например, «Заказ_РеализацияТоваровУслугСоздатьНаОсновании«. 
  • Группу у команды указать: «Командная панель формы.Создать на основании».
  • Тип параметра команды: Ссылки тех документов, в которых появится новая строка в подменю ВводаНаОсновании. В данном случае «ДокументСсылка.битматЗаказНаТехнику«.
  • Режим использования параметра: «Одиночный». Теперь в меню документа битматЗаказНаТехнику появится новая команда ввода на основании.

Теперь в меню документа битматЗаказНаТехнику появится новая команда ввода на основании. В модуле команды в процедуре ОбработкаКоманды написать код, который будет делать ввод нового документа на основании:

&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
	СтрДанные = Новый Структура("Основание", ПараметрКоманды);
	ПараметрыФормы = Новый Структура("ЗначенияЗаполнения", СтрДанные);
	
	ОткрытьФорму("Документ.РеализацияТоваровУслуг.ФормаОбъекта", ПараметрыФормы, 
	ПараметрыВыполненияКоманды.Источник, ПараметрыВыполненияКоманды.Уникальность, 
	ПараметрыВыполненияКоманды.Окно, ПараметрыВыполненияКоманды.НавигационнаяСсылка);
КонецПроцедуры

И еще, чтобы уже все работало в расширении после исполнения обработки заполнения Реализации добавить код с использованием аннотации ИзменениеИКонтроль (Вызвать вместо (с контролем)): 

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

Ввод на основании нескольких документов

Чтобы можно было передавать сразу несколько документов в списке и создавать на их основе одну реализацию можно сделать следующее. Создать команду формы СоздатьНаОснованииРеализацияТоваровУслуг и расположить кнопку этой команды на форме списка в группе ГруппаГлобальныеКоманды и скрыть видимость этой кнопки. В списке документа в обработчике события ПриСозданииНаСервере переопределить команду, чтобы она появилась в ранее сформированной группе «Командная панель формы. Создать на основании»: 

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

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

Как это будет сделано зависит от задачи, которую поставит заказчик. Может быть он захочет, чтобы из нескольких документов списка создавался один документ РеализацияТоваровУслуг, а может захочет, чтобы формировалось столько же документов РеализацияТоваровУслуг, сколько было выделено в списке. Любая постановка задачи от заказчика ложится на плечи разработчика. В данном, конкретном случае, нужно было сделать только для одного документа, все выше это как пример для тех, кому нужно реализовать с несколькими документами.

Описание обработки переноса данных

Обработка переносит данные из старых структур, которые были в основной конфигурации, в новые структуры, которые были созданы при помощи расширений. Её следует запускать, только после того, как будут добавлены все данные в расширение или когда уже готовое расширение будет добавлено в конфигурацию. Каждый разработчик создаёт такую обработку и под те структуры данных, которые создал в расширении. Для данного расширения создана своя обработка, которую можно скачать по ссылке.

Если говорить об обработке для данного расширения, то ещё с помощью этой обработки были устранены проблемы, связанные с дублированием данных в регистрах сведений ДвоичныеДанныеФайлов и ФайлыВРабочемКаталоге. Дело в том, что разработчик, изменил определяемый тип ПрисоединенныйФайл, добавив к нему новый тип СправочникСсылка.битматЗаказНаТехникуПрисоединенныеФайлы. Если просто изменить определяемый тип, убрав оттуда лишний тип и попытаться сохранить конфигурацию базы данных, то это не получится, так как возникнет такая ошибка:

Записи регистра сведений стали не уникальными: ДвоичныеДанныеФайлов

ДвоичныеДанныеФайлов. Имеются записи с одинаковыми измерениями

Дело в том, что у этих двух регистров измерение Файл имеет определяемый тип ПрисоединенныйФайл. Когда происходит удаление одного из типов в определяемом типе ПрисоединенныйФайл, то некоторые записи в этих регистрах становятся дублирующими, так как раньше, до удаления типа, в измерении Файл присутствовали элементы справочника бит_мат_ЗаказНаТехникуПрисоединенныеФайлы, а теперь там появились значения Null. В обработке реализован механизм, который устраняет эту проблему.

К сожалению, на момент написания статьи, система 1С:Предприятие не поддерживает ОпределяемыйТип. Только начиная с версии «1С:Предприятие 8.3.20», расширения будут поддерживать изменение определяемых типов.

Кроме того, в документе бит_мат_ЗаказНаТехнику в реквизите ОтветственноеЛицо был изменён тип. Раньше был СправочникСсылка.ФизическиеЛица, а стал СправочникСсылка.Пользователи. Поэтому в расширение был добавлен новый реквизит Заказ_ОтветственноеЛицо. Чтобы перенести данные в новый реквизит в обработке был сформирован определенный механизм.

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

Добавление дополнительных отчетов в расширение

Для получения сводной информации о движениях в новом регистре накопления бит_ВзаиморасчетыСКонтрагентом были созданы два отчета. Чтобы перенести эти отчеты нужно было сначала сохранить их в расширение, потом менять запрос СКД. Если так не сделать, а изменять их как внешние отчеты, то при открытии схемы компоновки данных будет выдаваться ошибка о невозможности найти некоторые данные. Находясь в расширении отчет видит структуры данных, как конфигурации, так и расширения. Какую информацию показывают эти два отчета можно посмотреть на видео ниже.

Демонстрация доработок, перенесенных в расширение

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

ПОДПИСКА

Понравилась статья? Поделить с друзьями:
  • 1с управляемая форма реквизит использовать всегда
  • 1с управляемые формы получить реквизит на клиенте
  • 200 тысяч на открытие бизнеса от государства 2022
  • 200 часов исправительных работ это сколько в днях
  • 2021 реквизиты для платежей по несчастным случаям