БСП: инструкция подключения объектов к подсистеме запрета редактирования реквизитов

24.10.24

Разработка - БСП (Библиотека стандартных подсистем)

В статье описан алгоритм для включения документа или справочника в систему БСП. Будет полезно программистам 1С, начинающим работать с БСП.

Содержание

  1. Включение документа или справочника
  2. Внесение изменений в форму
  3. Важно обратить внимание
  4. Примеры функций и процедура

 

Справка: для предупреждения необдуманного изменения «ключевых» реквизитов формы документа или справочника создана подсистема Запрет редактирования реквизитов объектов. Описание работы есть на сайте ИТС: https://its.1c.ru/db/bsp3110doc#content:2329:hdoc

 

Для включения нашего документа или справочника выполняем:

  1. Подключим наш документ или справочник к подсистеме: в процедуре ЗапретРедактированияРеквизитовОбъектовПереопределяемый.ПриОпределенииОбъектовСЗаблокированнымиРеквизитами добавляем строку, аналогично уже заполненным: Объекты.Вставить(Метаданные.<"Документы" или "Справочники">.<Наименование документа или справочника>.ПолноеИмя(), "ПолучитьБлокируемыеРеквизитыОбъекта");
  2. Определим список блокируемых реквизитов: в модуле менеджера добавляемого объекта создаем функцию ПолучитьБлокируемыеРеквизитыОбъекта. Функция должна возвращать массив строк с именами реквизитов формы, объекта и табличных частей, которые предполагается запретить для редактирования. Текст функции можно подсмотреть в других справочниках и документах, добавленных в подсистему ранее. Пример функции ниже — см. пример 1.

 

Вносим изменения в форму:

  1. В процедуре ПриСозданииНаСервере требуется добавить вызов общей процедуры ЗапретРедактированияРеквизитовОбъектов.ЗаблокироватьРеквизиты(ЭтотОбъект);
  2. В процедуре ПослеЗаписиНаСервере добавляем ту же строку.
  3. Добавляем процедуру Подключаемый_РазрешитьРедактированиеРеквизитовОбъекта(Команда). Текст процедуры можно скопировать из объектов, добавленных в подсистему ранее. Пример функции ниже — см. пример 2. Есть несколько вариантов работы с разрешением редактирования реквизитов. Можно просто по кнопке «Разрешить редактирование реквизитов» открывать возможность изменения реквизитов, либо открывать отдельное окно с возможностью выбора нужных реквизитов и особыми предупреждениями по изменению отдельных реквизитов. Для обоих данных случаев есть примеры процедур ниже — см. пример 2.
  4. Описываем процедуру "Подключаемый_РазрешитьРедактированиеРеквизитовОбъектаЗавершение". Обратите внимание, что эта процедура экспортная. Пример 3
  5. Если решили добавить отдельную форму РазблокированиеРеквизитов – в качестве основы можно взять уже используемую форму документа или справочника, ранее используемого в подсистеме.
  6. Не забудьте обязательно внести следующие изменения:

— Каждый блокируемый реквизит размещаем как реквизит формы с типом Булево и размещаем на форме

— Создаем две кнопки "РазрешитьРедактирование" и "Закрыть"

— Если требуется дополнительно описать предупреждения пользователю - добавляем

— В процедуре ПриСозданииНаСервере каждому реквизиту устанавливаем значение "Истина"

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

 

Обратите внимание, что

— на некоторых формах документа в качестве табличной части может показываться и табличная часть документа и дополнительный реквизит формы с дополнительными данными. В таком случае в функции ПолучитьБлокируемыеРеквизитыОбъекта указываем строку "Результат.Добавить("Товары;ТоварыПоПериодам"). После наименования таблицы "Товары" указываем имя элемента на форме "ТоварыПоПериодам".

— при блокировании поля периода - если блокировать поля "ДатаНачала" и "ДатаОкончания", то блокируются сами поля, но не стандартная кнопка установки периода. В таком случае рекомендуется добавить в список блокируемых  добавить элемент "УстановитьИнтервал".  В таком случае в функции ПолучитьБлокируемыеРеквизитыОбъекта указываем строку "Результат.Добавить("НачалоПериода;УстановитьИнтервал").

В обоих случаях изменять форму РазблокированиеРеквизитов не требуется.

Следующая особенность нужна. Если требуется блокировать совместно с каким-то реквизитом кнопки, например: "Провести и закрыть", "Записать" и "Провести". Для этого в функции ПолучитьБлокируемыеРеквизитыОбъекта добавляем к блокируемому реквизиту наименования элементов формы, которые нужно заблокировать совместно. Например: "Результат.Добавить("Статус;ФормаПровестиИЗакрыть, ФормаЗакрыть, ФормаПровести");"

 

Примеры функций и процедура

Пример 1. Функция ПолучитьБлокируемыеРеквизитыОбъекта

Результат = Новый Массив;
Результат.Добавить("Статус");
Результат.Добавить("Сценарий");
Результат.Добавить("ВидПлана");
Возврат Результат;
КонецФункции

 

Пример 2. Если просто разрешаем редактирование реквизитов

&НаКлиенте
Процедура Подключаемый_РазрешитьРедактированиеРеквизитовОбъекта(Команда)
Оповещение = Новый ОписаниеОповещения("Подключаемый_РазрешитьРедактированиеРеквизитовОбъектаЗавершение", ЭтотОбъект);
ОбщегоНазначенияКлиент.РазрешитьРедактированиеРеквизитовОбъекта(ЭтотОбъект,, Оповещение);
КонецПроцедуры

 

Пример 2. Если требуется открыть особое окно с выбором открываемых реквизитов и предупреждениями об открытии. Не забудьте, что в данном случае саму форму с названием "РазблокированиеРеквизитов" требуется сформировать самим в формах создаваемого объекта.

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

 

Пример 3. Если после установки разблокировки реквизитов требуется установить доступность других элементов на форме. Обычно это указывается в процедуре УстановитьДоступностьПолей() – в таком случае не забудьте добавить её в конец добавляемой процедуры.  В примере ниже эта строка закомментирована:

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

 

Пример 4. 

&НаКлиенте
Процедура РазрешитьРедактирование(Команда)
Результат = Новый Массив;
Если РазрешитьРедактированиеСтатус Тогда
Результат.Добавить("Статус");
КонецЕсли
Если РазрешитьРедактированиеТовары Тогда
Результат.Добавить("Товары");
КонецЕсли
Если РазрешитьРедактированиеПериода Тогда
Результат.Добавить("ДатаНачала");
Результат.Добавить("ДатаОкончания");
КонецЕсли
Закрыть(Результат);
КонецПроцедуры

 

Автор: Михаил Х.

См. также

БСП (Библиотека стандартных подсистем) Работа с интерфейсом Программист Платформа 1С v8.3 Бесплатно (free)

В материале описан универсальный механизм работы с добавленными элементами на общую форму «ФормаОтчета». Думаю, облегчит работу многим разработчикам.

08.10.2024    919    PROSTO-1C    4    

9

БСП (Библиотека стандартных подсистем) Программист Стажер Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

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

04.10.2024    1730    MadRave    11    

23

БСП (Библиотека стандартных подсистем) Программист Стажер Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Пример отслеживания прогресса фонового выполнения дополнительной обработки с использованием программного интерфейса длительных операций БСП.

10.09.2024    1668    MadRave    1    

17

БСП (Библиотека стандартных подсистем) Программист Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

А что, если долгожданная реализация Паузы в 1С смутно напоминает старую, проверенную? А?!

06.09.2024    1182    n_mezentsev    10    

8

БСП (Библиотека стандартных подсистем) Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Добавим дополнительные свойства в новый документ средствами БСП

02.09.2024    4032    John_d    10    

52

БСП (Библиотека стандартных подсистем) Программист Платформа 1С v8.3 Бесплатно (free)

Всё больше организаций выбирает для серверов под 1С операционные системы Linux. Одним из отличий систем Windows и Linux является отсутствие COM объектов, которые зачастую использовались для формирования печатных форм офисных документов (Word). Конечно, можно выполнять печать и на клиенте, но есть риск импортозамещения. В работе у меня случались проблемы с зависанием процесса Word, поэтому я не люблю его использовать.

29.07.2024    5230    PROSTO-1C    12    

52
Оставьте свое сообщение