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

17.05.24

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

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

Файлы

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

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

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

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

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

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


Задача №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С v8.3 Управляемые формы Запросы Система компоновки данных Платные (руб)

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

15500 руб.

02.09.2020    213420    1167    413    

1050

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

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

8400 руб.

20.08.2024    40733    222    115    

212

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

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

16000 руб.

10.11.2023    18854    76    39    

92

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

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

22200 руб.

06.10.2023    26680    67    30    

96

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

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

9500 руб.

17.05.2024    37732    134    55    

176

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

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

9900 руб.

25.08.2025    4243    8    10    

15

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

Разработка Конструктор автоматизированных рабочих мест "Конструктор АРМ" реализована в виде расширения и является универсальным инструментом для создания АРМ любой сложности в пользовательском режиме.

3600 руб.

27.12.2024    3707    7    0    

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