Создание предопределенных элементов в собственном справочнике, созданном в расширении

09.04.20

Задачи пользователя - Адаптация типовых решений

Создание "предопределенных" элементов в собственном справочнике, созданном в расширении. Представлена как шаблон на конкретном примере.

Скачать файлы

Наименование Файл Версия Размер
Создание предопределенных элементов в собственном справочнике, созданном в расширении:
.cfe 13,74Kb
3
.cfe 13,74Kb 3 Скачать

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

1. Создаем справочник с нужными реквизитами, добавляем еще реквизит типа Булево (имя свое, типа "НеИзменять", а заголовок "Предопределенный").

2. Создаем Форму элемента и Форму списка.

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

Модуль формы элемента:


&НаКлиенте
Процедура ПриОткрытии(Отказ)
	Если Объект.НеИзменять Тогда
		//выдаем предупреждение оставляем Наименование без изменения
		Элементы.Наименование.Доступность = Ложь;
	КонецЕсли;
КонецПроцедуры

Модуль формы списка:


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

&НаКлиенте
Процедура ПриОткрытии(Отказ)
	ПриОткрытииНаСервере();
КонецПроцедуры

&НаСервере
Процедура ЗаполнитьПредопределенные()
	// заполним "предопределенными" элементами
	
	НовыйЭл = Справочники.Тар_КатегорииСотрудников.СоздатьЭлемент(); 
	НовыйЭл.Наименование = "Первая"; 
	НовыйЭл.НеИзменять = Истина;
	НовыйЭл.Коэффициент = 1.1;
	НовыйЭл.Записать(); 
	
	НовыйЭл = Справочники.Тар_КатегорииСотрудников.СоздатьЭлемент(); 
	НовыйЭл.Наименование = "Вторая"; 
	НовыйЭл.НеИзменять = Истина;
	НовыйЭл.Коэффициент = 1.2;
	НовыйЭл.Записать(); 
	
	НовыйЭл = Справочники.Тар_КатегорииСотрудников.СоздатьЭлемент(); 
	НовыйЭл.Наименование = "Высшая"; 
	НовыйЭл.НеИзменять = Истина;
	НовыйЭл.Коэффициент = 1.3;
	НовыйЭл.Записать();
	
	Элементы.Список.Обновить();
КонецПроцедуры

Модуль объекта:


Процедура ПередУдалением(Отказ)
	
	//Очень нужная вещь, но.... для РАСШИРЕНИЯ НЕ работает!!!
	
КонецПроцедуры

Процедура ПередЗаписью(Отказ)
	// Как-то странно работает!
	// Задано условие, что если справочник пустой
	// нужно заполнить его "предопределенными" элементами
	// но..., ошибка записи предопределенных!
КонецПроцедуры


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

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

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

См. также

Табличная часть в доп. реквизитах и формирование таблиц в шаблоне docx для 1С:ДО 3.0

Адаптация типовых решений Платформа 1С v8.3 1С:Документооборот Россия Платные (руб)

Расширение конфигурации для «1С:Документооборот КОРП», редакция 3.0. позволяет: 1.использовать произвольные табличные части в качестве дополнительных реквизитов к документу; 2 использовать произвольные табличные части в шаблонах в формате docx для автоматического заполнения таблиц.

29400 руб.

29.06.2023    4452    9    4    

18

Расширение для 1С:УНФ. Автоматическое снятие резервов в Заказах покупателей

Логистика, склад и ТМЦ Адаптация типовых решений Платформа 1С v8.3 1С:Управление нашей фирмой 1.6 1С:Управление нашей фирмой 3.0 Россия Управленческий учет Платные (руб)

Чтобы не допустить путаницы с обещаниями клиентам и для четкого контроля исполнения заказов мы используем резервирование товаров. Мы доработали УНФ, чтобы она автоматически отменяла старые резервы и не мешала эффективно продавать.

7200 руб.

02.08.2023    2953    4    0    

19

Создать на основании - своя кнопка (БСП). Проблема двух подменю Создать на основании

БСП (Библиотека стандартных подсистем) Адаптация типовых решений Платформа 1С v8.3 1С:ERP Управление предприятием 2 Бесплатно (free)

Понадобилось в подменю "Создать на основании" добавить свою команду, которая открывает обработку. В процессе доработок появилась проблема двух подменю "Создать на основании". В статье о том, как решились проблемы.

01.03.2024    1282    dimanich70    6    

13

Доработка отчета "Связанные документы" (структура подчиненности) для вывода объектов из любого расширения

Адаптация типовых решений Платформа 1С v8.3 1С:Управление торговлей 11 Россия Абонемент ($m)

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

1 стартмани

27.10.2023    1994    13    avmartynov    10    

43

Печать непроведенных документов для УТ, КА, ERP. Настройка печати по пользователям, документам и печатным формам

Пакетная печать Печатные формы Адаптация типовых решений Универсальные функции Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Абонемент ($m)

Расширение для программ 1С:Управление торговлей, 1С:Комплексная автоматизация, 1С:ERP, которое позволяет распечатывать печатные формы для непроведенных документов. Можно настроить, каким пользователям, какие конкретные формы документов разрешено печатать без проведения документа.

2 стартмани

22.08.2023    2071    21    progmaster    7    

3
Отзывы
5. type 27.01.21 17:17 Сейчас в теме
Буду очень благодарен тому, кто подскажет решение на запрет удаления

Ещё актуально? Или уже нафиг не нужно?

У себя вот так сделал:
Процедура ПередЗаписью(Отказ)
	Если НеИзменять и Не ОбменДанными.Загрузка Тогда
		Отказ = Истина;
	КонецЕсли;
КонецПроцедуры

Процедура ПередУдалением(Отказ)
	Если НеИзменять и Не ОбменДанными.Загрузка Тогда
		Отказ = Истина;
	КонецЕсли;
КонецПроцедуры
Показать
cleaner_it; mdzen; ivnik; milov.aleksey; +4 Ответить
Остальные комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. ixijixi 1775 09.04.20 20:42 Сейчас в теме
Примерно так же организован справочник НаборыДополнительныхРеквизитовИСведений из БСП. Сначала были предопределенные элементы, затем разработчики добавили реквизит ИмяПредопределенногоНабора. Контроль удаления (точнее, полный запрет) проводят в форме списка и в подписках на события, заполнение "предопределённых" элементов - при обновлении ИБ.
2. ixijixi 1775 09.04.20 20:48 Сейчас в теме
Кстати, на ИТС пишут, что подписки в расширения нельзя добавлять (https://its.1c.ru/db/v8313doc#bookmark:dev:TI000001923), но я добавил для интереса)) Платформа 8.3.17
Прикрепленные файлы:
3. ivnik 581 09.04.20 20:49 Сейчас в теме
Добрый вечер, Максим!
Большое Спасибо за информацию.
4. ixijixi 1775 09.04.20 21:05 Сейчас в теме
5. type 27.01.21 17:17 Сейчас в теме
Буду очень благодарен тому, кто подскажет решение на запрет удаления

Ещё актуально? Или уже нафиг не нужно?

У себя вот так сделал:
Процедура ПередЗаписью(Отказ)
	Если НеИзменять и Не ОбменДанными.Загрузка Тогда
		Отказ = Истина;
	КонецЕсли;
КонецПроцедуры

Процедура ПередУдалением(Отказ)
	Если НеИзменять и Не ОбменДанными.Загрузка Тогда
		Отказ = Истина;
	КонецЕсли;
КонецПроцедуры
Показать
cleaner_it; mdzen; ivnik; milov.aleksey; +4 Ответить
6. ivnik 581 27.01.21 23:17 Сейчас в теме
(5) Большое Спасибо! Попробую, вопрос до сих пор висел в воздухе.
7. mrostovsky 22.07.22 03:10 Сейчас в теме
Процедура ПередЗаписью(Отказ)

	Если ЭтотОбъект.rs_Предопределенный И ЭтотОбъект.ПометкаУдаления Тогда 
		ЭтотОбъект.ПометкаУдаления = Ложь;	
	КонецЕсли;

КонецПроцедуры
8. Ctrl P 193 17.08.22 11:14 Сейчас в теме
а в чем особое различие между пользовательскими и предопределенными элементами? Основное: пользователь не может менять Имя и при открытии они всегда на верху (в первых строках) + запрет на удаление

да нет... основное отличие: доступ к значениям из конфигуратора по имени предопределенного значения...
Andreeei; vladvms; KOLYNNN; SAGerasimov; Izumov; luchik.lipetsk; Craig; Sparrow1974; NikeeNik; akocur; 3man001; mlv84; de0nis; Sean1s; +14 Ответить
Оставьте свое сообщение