Полезный код для программистов 1С (часть 2). Помощник заполнения.

05.10.19

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

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

Скачать файл

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

Наименование По подписке [?] Купить один файл
Немного полезного кода для программистов 1С (часть 2):
.cf 101,04Kb ver:1.0
23
23 Скачать (1 SM) Купить за 1 850 руб.

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

Содержание

Продолжение

В этой части мы рассмотрим то, как мы реализуем механизм заполнения табличных частей из данных программы. Да, это та самая пресловутая кнопка "Заполнить", которая как правило, висит над большинством табличных частей и ею даже иногда пользуются. Сразу объясню, почему лично мне не нравится как обычно реализован этот механизм. Возьмем, например, заполнение остатками материалов в документе "Реализация ТМЦ" или остатками долгов в документе "Корректировка долга":

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

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

Что предлагаю?

Отказаться от кнопки "Заполнить" в том виде, в котором мы привыкли ее видеть. И сделать ее другой:

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

Для этого мы реализовали ряд механизмов, которые приняли как "стандарт" для применения в нашей организации и (как показало время) пользователям понравилось. Хотя привыкли не сразу и пользоваться научились не все.

Подсистема "Помощник заполнения"

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

  • создаем СКД, куда помещаем запрос на получение данных. СКД хранится в макете прикрепленном к документу (или другому объекту);
  • на форме создаем реквизит "КомпоновщикНастроекКомпоновкиДанных", который при создании формы на сервере инициализируем на основании ранее созданной СКД. Дополнительно к нему добавляем реквизит с типом "Строка" для хранения представления настроек отбора. В случае если настройка пуста, выводим "Нажмите для настройки отбора..." (нагляднее и пользователю понятнее);
  • на форме создаем элемент "Надпись", связываем с нашим реквизитом "Строка", устанавливаем признак "Гиперссылка", добавляем обработчик "Нажатие";
  • при нажатии на элемент с представлением отбора, открываем специальную форму настройки отбора, куда при необходимости передаем все запрещенные поля (недоступные пользователю);
  • при нажатии кнопки "Заполнить" обычно проверяем что настройка отбора содержит один и более элементов. Предупреждаем пользователя, но все равно выполняем заполнение. Для этого получаем ТаблицуЗначений на основании схемы (из макета) и компоновщика (из формы);
  • перед записью формы, сериализуем пользовательскую настройку отбор, сохраняем в реквизит, для повторного восстановления при открытии.

Как видите, ничего нового. Все достаточно просто.

Конечно, мы сделали ряд общих модулей, которые помогают нам быстрее:

  • выполнять инициализацию компоновщика;
  • создавать необходимые реквизиты и элементы на форме;
  • обрабатывать событие "Нажатие" и открывать форму настройки отбора;
  • получать таблицу значений на основании СКД и компоновщика.

По сути это сделано лишь для минимизация кода на стороне конечного объекта и формы. Ниже представлен практически весь код, который необходим для выполнения указанных операций. Результат вы можете видеть на GIF в заголовке (пример из реальной конфигурации).


&НаСервере
Процедура ИнициализацияФормы()
	
	// ПомощникЗаполненияПТБ.Начало
	ПомощникЗаполненияПТБ.ИнициализацияКомпоновщикаНастроек(ЭтотОбъект,
		"БанкиКомпоновщикНастроек",
		Документы.ТестовыйДокументЗаполнениеСКД.ПолучитьМакет("ПомощникЗаполненияПТБ_СКД"),
		Объект.ОтборXML);
	
	ПомощникЗаполненияПТБ.ДобавитьПолеНастройкиОтбора(ЭтотОбъект, "БанкиКомпоновщикНастроек", "ГруппаНастройкиОтбораБанки");
	// ПомощникЗаполненияПТБ.Конец
	
КонецПроцедуры

&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)
	
	// ПомощникЗаполненияПТБ.Начало
	ТекущийОбъект.ОтборXML = ПомощникЗаполненияПТБ.ПолучитьСтрокуДляСохраненияОтбора(ЭтотОбъект, "БанкиКомпоновщикНастроек");
	// ПомощникЗаполненияПТБ.Конец
	
КонецПроцедуры

&НаКлиенте
Процедура ЗаполнитьБанки(Команда)
	
	ЗаполнитьБанкиНаСервере();
	
КонецПроцедуры

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

#Область СлужебныеПроцедурыИФункции_ПТБ_БСП

// ПомощникЗаполненияПТБ.Начало
&НаКлиенте
Процедура Подключаемый_ПомощникЗаполненияОтборНажатие(Элемент, СтандартнаяОбработка)
	
	ЗапрещенныеПоля = Новый Массив;
	ЗапрещенныеПоля.Добавить("Банк.Адрес");
	ЗапрещенныеПоля.Добавить("Банк.ИмяПредопределенныхДанных");
	
	ПомощникЗаполненияПТБКлиент.ПомощникЗаполненияОтборНажатие(ЭтотОбъект, Элемент, СтандартнаяОбработка, ЗапрещенныеПоля);
	
КонецПроцедуры
// ПомощникЗаполненияПТБ.Конец

#КонецОбласти

Заключение

На самом деле, мы эту схему применяем теперь практически везде. В формах документов, справочников, подборов. По сути, количество кода незначительно отличается от привычной нам схемы (объект Запрос - Результат - Выбора/ТаблицаЗначений). Но наличие множества настроек отборов, значительно упрощает подбор информации. А сохранение настройки отбора позволяет пользователю легко вспомнить по каким отборам и правилам была заполнена данная табличная часть.

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

Переход на данную схема начался около года назад, а большинство решений написано задолго до этого, но как показала практика: переезд на использование "ПомощникаЗаполнения" происходит достаточно быстро. В большинстве случаев достаточно просто перетащить запрос, немного настроить доступность полей для отбора, и разместить все необходимые команды (которые на самом деле можно просто разместить в заранее подготовленном шаблоне). Так что не надо бояться переделывать старые решения, ведь все что "работает" вовсе не обязательно что "хорошо".

P.S. Во вложении, вы найдете конфигурацию, в которой обрезано все что только можно, кроме функционала необходимого для работы данной подсистемы. Общие модули из 1С:БСП не брать, они урезаны, а то и вовсе обескровлены. Оставлены только чтобы синтаксический контроль проходил.

См. также

SALE! 15%

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

Набор инструментов программиста и специалиста 1С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

10000 руб.

02.09.2020    159882    876    399    

862

SALE! 15%

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

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

8400 7140 руб.

20.08.2024    7959    59    24    

70

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

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

9360 руб.

17.05.2024    23565    68    45    

117

SALE! 15%

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

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

10000 8500 руб.

10.11.2023    10498    36    25    

61

SALE! 15%

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

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

22200 19980 руб.

06.10.2023    15467    35    7    

70

SALE! 35%

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

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

4800 3120 руб.

14.01.2013    188116    1140    0    

912

SALE! 15%

Инструментарий разработчика Программист 8.3.14 1С:Конвертация данных Россия Платные (руб)

Расширение для конфигурации “Конвертация данных 3”. Добавляет подсветку синтаксиса, детальную контекстную подсказку, глобальный поиск по коду.

15000 12750 руб.

07.10.2021    17339    6    32    

42

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

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

1800 руб.

21.02.2023    7736    8    35    

23
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. triviumfan 97 22.07.18 12:13 Сейчас в теме
Обычно такое реализуется внешней подключаемой обработкой заполнения ТЧ, но ваше решение довольно удобно и универсально.
Хотя, редко вообще где пользуются таким заполнением :)
DmitrySinichnikov; Anchoret; +2 Ответить
2. triviumfan 97 22.07.18 12:35 Сейчас в теме
(1) А можно ведь сделать это и внешней... было бы круто. Сначала принудительно вызывается форма с отбором, а затем заполнение. Или сохраняемые настройки запилить, чтобы по умолчанию заполнение было таким, а хочешь менять - иди в настройки отбора компоновщика.
3. vandalsvq 1587 22.07.18 16:17 Сейчас в теме
(0), (1) идея не плохая. Действительно, если делать внешней обработкой тогда в сохраняемые настройки пихать и восстанавливать (а что там с разграничением по пользователям?). Жаль на форме не расположить интерфейсные элементы (хотя может и это удастся? пробовать лень :) ).
Впрочем, у нас лишь одна конфа имеет серьезный "бэк" в виде бухгалтерии, остальные на основе БСП полностью самостоятельные. Поэтому порой просто делаем решение, не обращая внимание на "обходные" механизмы.
Что же касается именно кнопки "Заполнить", не всегда мы используем для нее. Есть формы подборов, куда мы тоже прикручиваем этот механизм, получается что подбор тоже усекается, чтобы быстрее/удобнее/веселее. Короче, как и писал, механизм оправдал себя, пользователи даже научились как-то им пользоваться.
4. triviumfan 97 22.07.18 20:23 Сейчас в теме
(3) Хранилище хранит настройки в разрезе пользователя.
А коль для БП, то можно было бы и расширение выпустить - скорее всего оно пользовалось бы популярностью. Конторки, не имеющие программиста или не желающие платить ему за написание внешней обработки заполнения ТЧ могли бы воспользоваться сей штуковиной всего за небольшую цену =)
Eriksson; +1 Ответить
5. vandalsvq 1587 23.07.18 06:00 Сейчас в теме
(4) у нас версия 2.5 (не доехавшая до 3ки вторая версия). Над расширением подумаем, но пока силы нужно на другое. Спасибо за дельные предложения.
6. herfis 513 23.07.18 09:19 Сейчас в теме
Название статьи было бы неплохо переделать на более точно отражающее содержание
echo77; wowik; sergelemon; zqzq; +4 Ответить
7. Alias 176 23.07.18 14:43 Сейчас в теме
"Необходима версия платформы не меньше, чем 8.3.11" (с) :)
неужели там есть что-то такое, чего нельзя сделать,например, на той же 8.3.10?
8. vandalsvq 1587 23.07.18 15:35 Сейчас в теме
(7) упс, если учесть что у нас 8.3.11 но в режиме совместимости то уверен что и 8.3.6+ прокатит. Ну разве что методы Стр... надо в глобальном модуле эмулировать ))))))
9. Alias 176 23.07.18 15:39 Сейчас в теме
(8) смысл в том что я на своей 8.3.10 (у нас сейчас установлена такая) даже открыть конфигурацию не смог, платформа ругается.
10. vandalsvq 1587 23.07.18 19:07 Сейчас в теме
(9) упс, вам конвертнуть или так сойдёт?
11. DragEugen 25.07.18 09:14 Сейчас в теме
Здорово, будет мне полезно! )))))
12. Serg O. 297 11.09.18 12:28 Сейчас в теме
это похоже на гранату...
у нас юзеры не настолько продвинуты

но все-равно спасибо за пост
13. vandalsvq 1587 12.09.18 09:23 Сейчас в теме
(12) почему на гранату? ))))
14. rwn_driver 9 12.09.18 19:14 Сейчас в теме
А на гранату, наверное потому, что непродвинутые юзеры напоминают продвинутых обезьян, поэтому по старому анекдоту про обезьяну с гранатой...
15. German_Tagil 43 09.02.21 11:20 Сейчас в теме
(2) Делал подобное через отчет
Оставьте свое сообщение