INFOSTART EVENT 2018 EDUCATION

Второй тур голосования за доклады.
Окончание 5 сентября.

Шамсутдинов Артем | Руководитель проектов автоматизации | ООО «ОйлГИС»

«Советы бывалого: практика внедрения 1С:ERP в машиностроении.»

1) Предпосылки внедрения. Почему не 1С:УПП 2) Выбор партнера (франчайзи), а так ли он необходим? 3) Работа только на типовом функционале. Какого это? 4) Внедрение складского учета и интеграция с торговым оборудованием 5) Диспетчеризация производства. Разработка АРМов, подключение POS-терминалов. Что? Где? Когда? 6) Как учитывать инструментальное оснащение в производстве? 7) Как узнать все потребности в материалах по всем заказам и планируемым заявкам в один клик? 8) Автоматизация простого документооборота и системы оповещений (SMS, E-Mail) в 1С:ERP через расширение конфигурации.

Заполняем по шаблону (по умолчанию)

Программирование - Практика программирования

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

Интерфейс

На форме документа/справочника две кнопки Сохранить как шаблон и Заполнить из шаблона.

 

 

По нажатию на кнопку Сохранить как шаблон открывается форма:

 

 

Пользователь вводит наименование шаблона, отмечает нужные реквизиты и нажимает кнопку Сохранить. Настройки записываются в ХранилищеОбщихНастроек в разрезе пользователя и типа текущего документа/справочника. Значения реквизитов сохраняются также в ХранилищеОбщихНастроек в разрезе пользователя, типа документа/справочника и имени шаблона.

Соответственно, при нажатии на кнопку Заполнить из шаблона открывается форма:

 

 

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

Серым цветом выделяются реквизиты объекта возможно неразмещенные на форме.

Команды работают также и из форм списков.

Реализация

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

Рассматриваемая конструкция может быть реализована в двух вариантах.

 

Вариант 1

 

В расширение добавлена одна общая форма, две общие команды и (для красоты) группа команд.

 

 

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

 

 
 Код модуля команды:

 

Код модулей команд Сохранить… и Заполнить… отличается только значением параметра ЭтоСохранениеШаблона.

 

Форма заполнения/сохранения в конфигураторе выглядит следующим образом:

 

 

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

 

 
 Код модуля формы с комментариями:

Вариант 2

 

Вариант 2 отличается от первого тем, что форму заполнения/сохранения добавляем в каждый нужный нам документ/справочник.

У формы устанавливаем свойство АвтоматическоеСохранениеДанныхВНастройках – "Использовать" и расставляем флажки "Сохранение". Платформа сама позаботится о сохранении настроек. Соответственно, код по сохранению настроек не нужен.

 

 

Команды добавляем в форму самого документа. Здесь больше возможностей по размещению кнопок. Можно разместить их, например, только в меню Ещё.

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

Кроме того, в коде команд уже не нужно проверять, откуда открыта форма сохранения/заполнения: из формы списка или из формы объекта.

 

Следует отметить преимущества и недостатки представленных вариантов.

 

Вариант 1

Плюсы:

1. Простое подключение к документу/справочнику - добавить тип параметра команды и все.

2. Возможность заполнения/сохранения из формы списка. Хотя, на мой взгляд, это скорее недостаток. Дело в том, что глобальные параметризуемые команды размещаются в формах списка автоматически (если в форме списка – объекты одного типа). И обойти этот платформенный сервис не удается.

Минусы:

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

2. При сохранении/заполнении нового объекта платформа требует предварительной его записи. Это также следствие использования команд глобального интерфейса. И это тоже не удается обойти.

 

Вариант 2

Плюсы:

1. Кнопки можно разместить почти в любом разумном месте формы.

2. Для каждого подключаемого объекта легко добавить персональный список незаполняемых реквизитов.

3. Шаблоны можно сохранять из незаписанного в базу нового объекта.

Минусы:

1. Более трудоемкое подключение.Необходимо копировать одну и ту же форму в ветку форм каждого нужного объекта метаданных. Необходимо добавить в форму заполняемого объекта две команды-кнопки.

2. Пользователь может сохранить пустой шаблон.

 

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

- передача с клиента на сервер данных владельца текущей формы (тип ДанныеФормыСтруктура);

- программная проверка типа реквизита на доступность в данных формы;

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

 

Расширение первого варианта работоспособно в режиме совместимости 8.3.10 и выше, поскольку в этом релизе появилась возможность добавлять общие команды. Расширение второго варианта работоспособно, начиная с режима совместимости 8.3.6.

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

 

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

58

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

Наименование Файл Версия Размер
Заполнение по шаблону - расширения и dt
.rar 42,24Mb
08.02.18
13
.rar 42,24Mb 13 Скачать

См. также

Комментарии
Сортировка: Древо
1. leosoft 116 08.02.18 12:14 Сейчас в теме
А табличные части запоминает в шаблон?
2. mvxyz 77 08.02.18 14:18 Сейчас в теме
Нет, заполнение табличных частей не делал. Сделать, в принципе, можно, но не было такой необходимости.
3. leosoft 116 08.02.18 15:03 Сейчас в теме
Тогда можно было бы забить номенклатуру по конкретному поставщику и
загонять ее по шаблону.
5. AlX0id 08.02.18 16:56 Сейчас в теме
(3)
Обычно в таком случае юзеры тупо копипастят документы )
buganov; obmanOZ; klinval; +3 Ответить
6. mvxyz 77 08.02.18 17:11 Сейчас в теме
(5) В этом случае пользователь сначала должен найти-подобрать, что копировать, а потом очистить ненужные реквизиты. А тут у него сразу шаблон "Основной для Алхимова" или "Запасной для ИноТрейд". Хотя, конечно, дело вкуса.
4. mvxyz 77 08.02.18 15:37 Сейчас в теме
Да, в ряде случаев было бы полезно. Подумаю на досуге.
7. MSK_Step 21 09.02.18 01:52 Сейчас в теме
8. Team leader 8 12.02.18 16:18 Сейчас в теме
- В любом случае это лучше чем копипаст, ошибок меньше будет.
9. gigabyte_artur 14.02.18 10:27 Сейчас в теме
Интересный функционал
10. ivanov660 785 03.04.18 17:42 Сейчас в теме
У меня пару практических вопросов:
1. Есть какие-нибудь проверки на актуальность шаблона? К примеру, пометка на удаление реквизитов, удаленный элемент, не действующие соглашение и т.п.
2. Есть ли возможность администрирования результатов шаблона по всем пользователям?
3. Хотелось бы иметь возможность настроек шаблонов под базы (что можно сохранять, а что нельзя)

Иначе через некоторое время жизни базы могут начаться проблемы в данных.
11. mvxyz 77 03.04.18 23:30 Сейчас в теме
(10)
1. В текущем коде таких проверок не предусмотрено, но их несложно добавить.
2. Шаблоны сохраняются персонально для каждого пользователя, но в принципе можно опять же внести изменения в код и сохранять один набор шаблонов для всех пользователей.
3. Не совсем уловил, что имеется в виду, поскольку ничто не мешает внести необходимые изменения при подключении к конкретной базе.
12. ivanov660 785 04.04.18 13:47 Сейчас в теме
(11) В каждой базе свой набор объектов (документы, справочники), поэтому проверки будут писаться под каждую базу конкретно, а можно некоторые условия вынести в шаблон. Чтобы использовать одно решение, а матрицу настраивать через конфиг файл что-ли - шаблон для УТ, шаблон для БП и др.
Это мое мнение о возможном развитии вашего решения.
13. mvxyz 77 04.04.18 19:43 Сейчас в теме
(12) Мысль интересная, но на практике имеет место необходимость подпиливать шаблон не под конфиграцию, а под конкреный документ. Как я уже писал, обсуждаемая конструкция использована в интеграционном решении, которое подключается к достаточно блольшому количеству различных конфигураций (УТ10, УТ11, БП, УПП, ERP, УНФ и др.). Под конфигурации ничего не меняли, а вот для интегрируемых документов в форме шаблона делаем реквизит НезаполняемыеРеквизиты с типом Список значений и заполняем его в ПриСозданииНаСервере именами реквизитов соответствующего документа. Потом в процедуре ЗаполнитьСписокРеквизитов выводим только те, которых нет в указанном списке:
Если НезаполняемыеРеквизиты.НайтиПоЗначению(Реквизит.Имя) = Неопределено Тогда
НоваяСтрока = Реквизиты.Добавить();
...
Необходимости в других доработках пока не возникало.
14. ivanov660 785 05.04.18 13:32 Сейчас в теме
(13) Справочники договор с контрагентами, контрагенты, документы РТУ и др. - есть во всех конфигурациях практически, но также отличаются по составу в зависимости от конфигурации.
15. mvxyz 77 05.04.18 21:17 Сейчас в теме
(14) Так в том и "фишка" предлагаемого механизма, что ему "все равно" какой состав документа/справочника. Он просто выводит для заполнения реквизиты (кроме стандартных) того объекта, к которому подключен.
16. ivanov660 785 06.04.18 15:42 Сейчас в теме
(15) я с практической стороны применения ограничиваю, т.к. пользователю нельзя давать полную свободу действия, желательно чтобы у него было ограничение и чем оно строже тем лучше.
Если утопизировать фразу "все равно какой состав" , то идеальной конфигурацией можно назвать конфигурацию с одним документом и справочником, но это не работает.
17. mvxyz 77 06.04.18 16:31 Сейчас в теме
(16) Про ограничения я написал в (13). Ограничивать, конечно, необходимо.
Оставьте свое сообщение