РеСольДо. Действие 1: Динамическое отражение структуры и значений табличных частей документа

17.05.24

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

Данная публикация является первой в цикле публикаций, посвящённых используемых технологий в решении РеСольДо. Основная цель публикаций - поделиться используемыми технологиями с читателями, которые смогут воспользоваться представленными материалами для решения своих практических задач. Задача №1: Динамическое отражение структуры и значений табличных частей документа на форме.

Файлы

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

Наименование Скачано Купить файл
Обработка для динамического отражения структуры и значений табличных частей документа 'Авансовый отчет'
.epf 7,40Kb ver:1.0
0 2 500 руб. Купить

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

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

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

Вы можете заказать платную доработку или адаптацию этой разработки под вашу конфигурацию на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

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


Задача №1: Динамическое отражение структуры и значений табличных частей документа на форме

Первой решаемой задачей будет динамическое отражение структуры и значений всех табличных частей выбранного документа. Для экспериментов возьмём документ ‘Авансовый отчет’, который представлен в большинстве учётных решений 1С. Также его наименование в разных конфигурациях 1С не отличается (в отличие от документов поступлений/реализаций, наименование которых отличается в 1С:Бухгалтерия, 1С:УНФ и 1С:ERP).

 

Решение задачи №1

Для начала создадим внешнюю обработку с единственным реквизитом ‘АвансовыйОтчет’ с соответствующим типом.

 

 

Затем создадим форму и вынесем реквизит ‘АвансовыйОтчет’ на неё. Также активируем ‘КнопкуВыбора’.

 

 

Создадим два события. Сначала ‘ПриСозданииНаСервере’.

 

 

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

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	
	// создадим главную страницу
	СтраницаСТЧ = ЭтаФорма.Элементы.Добавить("СтраницаСДТЧ",Тип("ГруппаФормы"));
	СтраницаСТЧ.Вид = ВидГруппыФормы.Страницы;
	
КонецПроцедуры

Теперь создадим второе событие ‘АвансовыйОтчетПриИзменении’, которое будет инициализироваться при изменении (выборе) документа ‘Авансовый отчет’.

 

 

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

&НаКлиенте
Процедура АвансовыйОтчетПриИзменении(Элемент)
	
	СоздатьСтраницыСТЧДокументаНаФорме();
	
КонецПроцедуры

Создадим процедуру ‘СоздатьСтраницыСТЧДокументаНаФорме’ со следующим кодом:

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

После этого сохраним обработку, откроем её в режиме ‘Предприятие’ и после выбора документа ‘Авансовый отчет’ должны отразиться табличные части документа.

 

 

Особенность предложенного решения заключается в следующем:

- табличные части и их реквизиты создаются на форме программно;

- каждая новая табличная часть создаётся как отдельная страница на форме;

- программно создаётся столбец ‘Выбрана’ с типом Булево;

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

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

Разработка и тестирование обработки осуществлялись на типовой конфигурации «1С:Бухгалтерия предприятия, редакция 3.0 (3 3.0.152.23)» и платформе 1С:Предприятие 8.3 (8.3.22.2239). Работать данная обработка должна практически на любой типовой управляемой конфигурации 1С, содержащий документ ‘Авансовый отчет’.

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

Структура табличных частей документа динамический интерфейс

См. также

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

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

24900 руб.

20.08.2024    68591    360    164    

313

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

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

16500 руб.

02.09.2020    259043    1430    421    

1165

Пакетная печать Печатные формы Инструментарий разработчика Программист 1С:Предприятие 8 Платные (руб)

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

22570 руб.

06.10.2023    38304    107    46    

122

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

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

15250 руб.

25.08.2025    55320    111    29    

123

Мастера заполнения Поиск данных Инструментарий разработчика Подбор и обработка объектов 1С 8.3 1С 8.5 Платные (руб)

Infostart MagicInput улучшает подбор в полях ввода 1С: ищет по любой части названия и по нескольким ключевым фрагментам, распознаёт ввод в другой раскладке и показывает иконки/статусы объектов прямо в списке. Поддерживает вставку навигационной ссылки/представления документа для автоподбора; для разработчиков доступны поиск по GUID и полному имени предопределённого. Работает в управляемых формах и подключается в большинстве конфигураций 1С 8.3/8.5.

6000 руб.

25.02.2026    3707    14    1    

16

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

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

17000 руб.

10.11.2023    25320    93    46    

102

Инструментарий разработчика Программист 1С:Предприятие 8 Платные (руб)

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

9500 руб.

17.05.2024    52957    182    63    

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