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

05.10.19

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

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

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

Наименование Файл Версия Размер
Немного полезного кода для программистов 1С (часть 2):
.cf 101,04Kb
22
.cf 1.0 101,04Kb 22 Скачать

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

Содержание

Продолжение

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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

Заключение

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

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

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

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

См. также

SALE! 20%

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

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

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

13000 10400 руб.

02.09.2020    121580    670    389    

710

SALE! 25%

Infostart PrintWizard

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

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

18000 15300 руб.

06.10.2023    7259    21    6    

39

SALE! 20%

Infostart УДиФ: Управление данными и формами

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

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

10000 8000 руб.

10.11.2023    3492    11    1    

33

SALE! 30%

PowerTools

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

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

3600 2520 руб.

14.01.2013    177723    1073    0    

849

Многопоточность. Универсальный «Менеджер потоков» 2.1

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

Восстановление партий или взаиморасчетов, расчет зарплаты, пакетное формирование документов или отчетов - теперь все это стало доступнее. * Есть желание повысить скорость работы медленных алгоритмов! Но... * Нет времени думать о реализации многопоточности? * о запуске и остановке потоков? * о поддержании потоков в рабочем состоянии? * о передаче данных в потоки и как получить ответ из потока? * об организации последовательности? Тогда ЭТО - то что надо!!!

5000 руб.

07.02.2018    99337    239    97    

296

[ЕХТ] Фреймворк для Расширений 1С

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

"Фреймворк для Расширений 1С" это универсальное и многофункциональное решение, упрощающее разработку и поддержку создаваемых Расширений. Поставляется в виде комплекта из нескольких Расширений с открытым исходным кодом. Работает в любых Конфигурациях в режиме Управляемого приложения с режимом совместимости 8.3.12 и выше без необходимости внесения изменений в Конфигурацию.

3000 руб.

27.08.2019    18100    6    8    

39

1С HTML Шаблоны / HTML Templates

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

Быстрая и удобная обработка для работы с шаблонами HTML. Позволяет легко и быстро формировать код HTML.

2040 руб.

27.12.2017    28091    3    10    

15

Выполнение произвольного кода или запроса с параметрами через Web-сервис (замена COM-подключений)

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

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

2400 руб.

24.09.2019    23592    15    15    

32
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. triviumfan 92 22.07.18 12:13 Сейчас в теме
Обычно такое реализуется внешней подключаемой обработкой заполнения ТЧ, но ваше решение довольно удобно и универсально.
Хотя, редко вообще где пользуются таким заполнением :)
DmitrySinichnikov; Anchoret; +2 Ответить
2. triviumfan 92 22.07.18 12:35 Сейчас в теме
(1) А можно ведь сделать это и внешней... было бы круто. Сначала принудительно вызывается форма с отбором, а затем заполнение. Или сохраняемые настройки запилить, чтобы по умолчанию заполнение было таким, а хочешь менять - иди в настройки отбора компоновщика.
3. vandalsvq 1537 22.07.18 16:17 Сейчас в теме
(0), (1) идея не плохая. Действительно, если делать внешней обработкой тогда в сохраняемые настройки пихать и восстанавливать (а что там с разграничением по пользователям?). Жаль на форме не расположить интерфейсные элементы (хотя может и это удастся? пробовать лень :) ).
Впрочем, у нас лишь одна конфа имеет серьезный "бэк" в виде бухгалтерии, остальные на основе БСП полностью самостоятельные. Поэтому порой просто делаем решение, не обращая внимание на "обходные" механизмы.
Что же касается именно кнопки "Заполнить", не всегда мы используем для нее. Есть формы подборов, куда мы тоже прикручиваем этот механизм, получается что подбор тоже усекается, чтобы быстрее/удобнее/веселее. Короче, как и писал, механизм оправдал себя, пользователи даже научились как-то им пользоваться.
4. triviumfan 92 22.07.18 20:23 Сейчас в теме
(3) Хранилище хранит настройки в разрезе пользователя.
А коль для БП, то можно было бы и расширение выпустить - скорее всего оно пользовалось бы популярностью. Конторки, не имеющие программиста или не желающие платить ему за написание внешней обработки заполнения ТЧ могли бы воспользоваться сей штуковиной всего за небольшую цену =)
Eriksson; +1 Ответить
5. vandalsvq 1537 23.07.18 06:00 Сейчас в теме
(4) у нас версия 2.5 (не доехавшая до 3ки вторая версия). Над расширением подумаем, но пока силы нужно на другое. Спасибо за дельные предложения.
6. herfis 498 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 1537 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 1537 23.07.18 19:07 Сейчас в теме
(9) упс, вам конвертнуть или так сойдёт?
11. DragEugen 25.07.18 09:14 Сейчас в теме
Здорово, будет мне полезно! )))))
12. Serg O. 224 11.09.18 12:28 Сейчас в теме
это похоже на гранату...
у нас юзеры не настолько продвинуты

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