Памятка разработчика внутри легкой обработки

22.10.25

Разработка - Инструментарий разработчика

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

Файлы

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование Скачано Купить файл
: ОпределениеДлиныРеквизита
.epf 13,10Kb
2 1 850 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

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

Сначала немного о самой обработке.

 

Основные функции:

*Анализ длины значений - вычисление минимальной, максимальной и средней длины реквизита.

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

*Гибкий выбор реквизитов - возможность анализа стандартных реквизитов, пользовательских реквизитов и реквизитов табличных частей.

*Визуализация результатов - отображение примеров значений с минимальной и максимальной длиной.

 

Примеры использования:

*Оптимизация хранения данных - определение реально используемой длины строковых полей.

*Валидация введенных данных - выявление аномально длинных или коротких значений.

*Анализ заполняемости - оценка качества ввода данных пользователями.

*Проектирование интерфейсов - настройка размеров полей ввода на основе реальных данных.

 

Работа обработки осуществляется с помощью каскадной системы выбора (каждый следующий выбор активируется только после заполнения предыдущего поля):

1. Выбор вида объекта метаданных.

2. Выбор конкретного объекта.

3. Выбор вида реквизитов.

4. Выбор конкретного реквизита.


Теперь об основных методах в обработке:

 

1. Динамическое создание реквизитов и элементов формы.

В произвольной форме реализован метод динамического создания интерфейса:

...
//Создаем реквизит:
НРек = Новый РеквизитФормы("ТаблицаЗначений",Новый ОписаниеТипов("ТаблицаЗначений"),,,Ложь); 
НРекКолонка = Новый РеквизитФормы("Значение",Новый ОписаниеТипов("Строка"),"ТаблицаЗначений",,Ложь);

Добавляемые Реквизиты = Новый Массив;
ДобавляемыеРеквизиты.Добавить(НРек);  
ДобавляемыеРеквизиты.Добавить(НРекКолонка);
ИзменитьРеквизиты(ДобавляемыеРеквизиты);

//Добавляем реквизит "ТаблицаЗначений" на форму:
НЭл = Элементы.Добавить("ТаблицаЗначений",Тип("ТаблицаФормы"),);
НЭл.ПутьКДанным = "ТаблицаЗначений";
НЭл.УстановитьДействие("ВыборЗначения","ОповеститьОсновнуюФорму"); //Устанавливаем процедуру/функцию, которая будет выполняться при событии таблицы значений - "ВыборЗначения"
НЭл.РежимВыбора = Истина;
НЭл.ТолькоПросмотр = Истина;

//Добавляем реквизит(колонку) "Значение" на форму:
НЭл = Элементы.Добавить("Значение",Тип("ПолеФормы"),НЭл);
НЭл.ПутьКДанным = "ТаблицаЗначений.Значение";
НЭл.Вид = ВидПоляФормы.ПолеВвода;
...

 

Особенности метода:

*Универсальность формы для различных сценариев выбора.

*Минимальное потребление ресурсов (создаются только необходимые элементы).

 

2. Связь между основной формой и произвольной

Сначала из основной формы передаем необходимые значения с помощью параметров в произвольную форму (ФормаВыбора):

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

 

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

Для этого в цикле обходим метаданные по заданным параметрам, а именно: "ВидОбъектаМетаданных" (Справочники, Документы, Регистры,...), "ОбъектМетаданных" (имя одного из выбранных элементов пример:"Номенклатура"), "ВидРеквизита"(реквизит, стандартный реквизит, измерение, ресурс, табличная часть,...):

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

 

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

&НаКлиенте
Процедура ОповеститьОсновнуюФорму(Элемент, Значение, СтандартнаяОбработка) //Отправляем выбранное значение обратно на основную форму
	СтандартнаяОбработка = Ложь;
	СтруктураПараметров = Новый Структура("Значение, ЗначениеВыбора", Элементы["ТаблицаЗначений"].ТекущиеДанные.Значение, ЗначениеВыбора);
	Оповестить("ОповеститьОсновнуюФорму", СтруктураПараметров, "ФормаВыбора");
	Закрыть();
КонецПроцедуры

 

"Элементы["ТаблицаЗначений"].ТекущиеДанные.Значение" - значение,  которое было выбрано двойным кликом или нажатием на кнопку выбрать в произвольной форме.

Данная процедура передает выбранный элемент на основную форму.

Вот обработчик на основной форме, который "ловит" переданный параметр:

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

 

3. Динамическое построение запросов с конкатенацией.

Один из наиболее интересных подходов в обработке - динамическое формирование текста запроса с помощью конкатенации переменных:

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

...
Если ВидРеквизита = "ТабличнаяЧасть" Тогда 
    ИмяТабличнойЧастиИмяРеквизита = ПолучитьИмяТабличнойЧастиИмяРеквизита();
    Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ
    |   "+ОбъектМетаданных+ИмяТабличнойЧастиИмяРеквизита[0]+"."+ИмяТабличнойЧастиИмяРеквизита[1]+" КАК "+ИмяТабличнойЧастиИмяРеквизита[1]+"
    |ИЗ
    |   "+Вид+"."+ОбъектМетаданных+"."+ИмяТабличнойЧастиИмяРеквизита[0]+" КАК "+ОбъектМетаданных+ИмяТабличнойЧастиИмяРеквизита[0];
Иначе
    Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ
    |   "+ОбъектМетаданных+"."+ИмяРеквизита+" КАК "+ИмяРеквизита+"
    |ИЗ
    |   "+Вид+"."+ОбъектМетаданных+" КАК "+ОбъектМетаданных;
КонецЕсли;
...

 

Пример значений переменных:

*Вид = "Справочник".
*ОбъектМетаданных = "Номенклатура".
*ИмяТабличнойЧастиИмяРеквизита[0] = "ТЧ".
*ИмяТабличнойЧастиИмяРеквизита[1] = "Наименование".
*ИмяРеквизита = "Наименование".

 

Особенности метода:
*Использование переменных для подстановки имен метаданных непосредственно в текст запроса.

*Разделение логики для обычных реквизитов и реквизитов табличных частей.

*Применение модификатора "РАЗРЕШЕННЫЕ" для соблюдения прав доступа.

 

На этом все, остальная логика работы прописана в обработке, в которой также присутствуют и другие методы:
 
*Парсинг значений формата: [ИмяТабличнойЧасти]ИмяРеквизита.

*Автоматическое изменение синтаксиса для работы запроса.

*Работа с видимостью элементов формы.

*Описание логики работы для кнопки открытия (универсальная процедура, которая находит ссылку на элемент по имени реквизита и значению, а далее открывает его форму объекта соответственно).

*Более наглядно продемонстрирована работа сразу с несколькими объектами метаданных.

 

Буду рад ответить на возникшие вопросы по данной статье.

Проверено на следующих конфигурациях и релизах:

  • 1С:ERP Управление предприятием 2, релизы 2.5.24.62

Вступайте в нашу телеграмм-группу Инфостарт

обработка 1С:Предприятие демонстрация интерфейс открытый код памятка инструмент разработчика начинающий программист

См. также

Инструментарий разработчика Роли и права Запросы СКД Программист Руководитель проекта 1С v8.3 Управляемые формы Запросы Система компоновки данных Платные (руб)

Инструменты для разработчиков 1С 8.3: Infostart Toolkit. Автоматизация и ускорение разработки на управляемых формах. Легкость работы с 1С.

15500 руб.

02.09.2020    221684    1209    414    

1062

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

Инструмент представляет собой обработку для проведения свёртки или обрезки баз данных. Работает на ЛЮБЫХ конфигурациях (УТ, БП, ERP, УНФ, КА и т.д.). Поддерживаются серверные и файловые базы, управляемые и обычные формы. Может выполнять свертку одновременно в несколько потоков. А так же автоматически, без непосредственного участия пользователя. Решение в Реестре отечественного ПО

14400 руб.

20.08.2024    45335    249    129    

229

Пакетная печать Печатные формы Инструментарий разработчика Программист 1С v8.3 Запросы 1С:Зарплата и кадры бюджетного учреждения 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Библиотека стандартных подсистем Платные (руб)

Расширение для создания и редактирования печатных форм в системе 1С:Предприятие 8.3. Благодаря конструктору можно значительно снизить затраты времени на разработку печатных форм, повысить качество и прозрачность разработки, а также навести порядок в многообразии корпоративных печатных форм.

22200 руб.

06.10.2023    28278    74    30    

101

Инструментарий разработчика Нейросети Платные (руб)

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

9900 руб.

25.08.2025    17794    33    7    

43

Инструментарий разработчика Программист 1С v8.3 Платные (руб)

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

9500 руб.

17.05.2024    40315    148    57    

183

Инструменты администратора БД Инструментарий разработчика Роли и права Программист 1С v8.3 1C:Бухгалтерия Россия Платные (руб)

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

16000 руб.

10.11.2023    20013    76    39    

92

Инструментарий разработчика WEB-интеграция 1С v8.3 1C v8.2 1C:Бухгалтерия 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Зарплата и Управление Персоналом 3.x Платные (руб)

Инструмент для генерации OpenApi (Swagger) спецификаций на основании файлов конфигураций 1С. Это консольное и десктопное приложение на языке Rust с полноценным редактором кода, содержащим автозамену и подсвечивание ошибок для быстрого и безошибочного написания документирующего комментария.

18000 руб.

22.11.2024    2757    2    0    

8
Для отправки сообщения требуется регистрация/авторизация