При работе с системами 1С на различных предприятиях может возникнуть ситуация, когда потребуется изменить определенные данные в табличных частях документов. Естественно, если система уже находится в эксплуатации, количество документов слишком велико, чтобы даже задуматься о ручном изменении. Это и не нужно, так как программист 1С может сделать обработку, которая будет автономно делать нужные исправления в документах. Это отличное решение, которое не перегружает интерфейс пользователя и позволяет прописать нужную нам логику для всех объектов системы.
Создание простой обработки в 1С 8.3
Если пользователь нуждается в простом исправлении какого-либо значения в табличной части документов, то не нужно подключать к конфигурации дополнительные обработки. Достаточно лишь создать внешнюю обработку, ее форму, разместить на ней кнопку и прописать алгоритм действий при ее нажатии. Этот метод будет оптимальным решением в случаях, когда в табличную часть документа уже функционирующей конфигурации добавили поле. Во вновь созданных документах пользователи будут самостоятельно заполнять его, а вот о тех объектах, которые уже были созданы, позаботятся программисты.
Допустим, что в табличную часть «Товары» документа «ПоступлениеТоваровУслуг» добавили реквизит «Назначение», которое должно проставляться при выборе склада. Естественно, перевыбирать склад во всех существующих документах никто не собирается, и принимается решение, что нужна внешняя обработка заполнения табличной части документа. Алгоритм наших действий следующий:
- Открываем ИБ в режиме конфигуратора и с помощью меню «Файл»-«Новый» создаем внешнюю обработку;
- Добавляем форму обработки, нажимая на кнопку в виде лупы у одноименного поля, подтверждаем предлагаемые настройки кнопкой «Готово»;
- В разделе «Команды» добавляем новый объект, изменяем наименование и перетаскиваем его влево, в элементы формы. Видим, что появилась кнопка с нужным нам именем;
- Чтобы добавить алгоритм заполнения нового реквизита, нам нужно создать процедуру на клиенте, вызывающую выполнение кода на сервере. Для этого вызываем контекстное меню на созданной нами кнопке и выбираем пункт «Действие команды». Выбираем «Создать на клиенте и процедуру на сервере без контекста»;
- Перед нашими глазами откроется текст модуля формы с 2 процедурами. Алгоритм работы с документами реализовываем в той, которая исполняется на серверной стороне. Сам текст кода состоит из следующих частей:
- С помощью запроса определяем, в строках ТЧ каких документов новый реквизит «Назначение» не заполнен;
- В цикле получаем объект каждого документа, заполняем реквизит строк табличной части и записываем документ для сохранения изменений.
&НаКлиенте
Процедура ЗаполнитьТЧ(Команда)
ЗаполнитьТЧНаСервере();
КонецПроцедуры
&НаСервереБезКонтекста
Процедура ЗаполнитьТЧНаСервере()
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ РАЗЛИЧНЫЕ
| ПоступлениеТоваровУслугТовары.Ссылка КАК Ссылка,
| ПоступлениеТоваровУслугТовары.Ссылка.Склад.Наименование КАК Назначение
|ИЗ
| Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары
|ГДЕ
| ПоступлениеТоваровУслугТовары.Назначение = """"";
ВыборкаРезультатаЗапроса = Запрос.Выполнить().Выбрать();
Пока ВыборкаРезультатаЗапроса.Следующий() Цикл
ДокументОбъектДляИзменения = ВыборкаРезультатаЗапроса.Ссылка.ПолучитьОбъект();
Для каждого строки из ДокументОбъектДляИзменения.Товары цикл
строки.Назначение = ВыборкаРезультатаЗапроса.Назначение;
КонецЦикла;
ДокументОбъектДляИзменения.Записать(РежимЗаписиДокумента.Проведение);
Сообщить("Документ "+ДокументОбъектДляИзменения.ссылка+" успешно исправлен.");
КонецЦикла;
КонецПроцедуры
- Сохраняем внешнюю обработку на компьютере;
- Запускаем информационную базу в режиме предприятия и через меню «Файл»-«Открыть…» находим нашу сохраненную обработку. Открывается форма с кнопкой, для которой мы реализовали код. Активируем исполнение описанного выше алгоритма нажатием на кнопку и получаем сообщения об успешном исправлении.
У этого способа есть недостаток – обработка не сохраняется в конфигурации. То есть, если через некоторое время добавят новый реквизит, то снова придется ее найти, адаптировать и открыть через основное меню. Но такие ситуации достаточно редки, так как перед вводом системы в эксплуатацию идет тщательный аудит с составлением списка нужных реквизитов. Гораздо более распространены ситуации, когда пользователям необходимо в процессе работы править данные в строках, например, изменять количество.
Добавление в ИБ дополнительной обработки
В конфигурациях, использующих библиотеку стандартных подсистем, существует возможность дополнять функциональность системы, не внося изменений в конфигурацию. Это очень удобный механизм и все компании, не снимающие типовые базы с поддержки, используют его. Реализуется это при помощи внешних обработок и отчетов одного из предусмотренных платформой видов:
- ЗаполнениеОбъекта;
- ДополнительнаяОбработка;
- СозданиеСвязанныхОбъектов;
- ПечатнаяФорма;
- Отчет;
- ДополнительныйОтчет.
Для пользователя управляемая обработка заполнения табличной части документов идеально подходит первого вида – «ЗаполнениеОбъекта». Для того чтобы воспользоваться этим механизмом, нам понадобится в режиме конфигуратор создать новую внешнюю обработку. Заполняем ее имя и сохраняем на компьютер, чтобы в дальнейшем после настройки, подключить ее в нашу информационную базу.
На следующем шаге создаем в модуле объекта внешней обработки процедуру для определения типа функционала. Она типичная для всех дополнительных обработок и отчетов, подключаемых к 1С 8.3, с небольшими отличиями в зависимости от вида. В качестве основных настроек используются следующие пункты:
- Вид – указывается 1 из вышеперечисленных вариантов;
- МасНазначений – массив, включающий в себя все объекты конфигурации, на которые предполагается добавить новый функционал;
- Наименование – как будет называться наша доработка в общем списке;
- БезопасныйРежим – ограничение определенных действий для обработки;
- Команды – список кнопок, которые появятся в объектах, перечисленных в МасНазначений.
Функция СведенияОВнешнейОбработке() Экспорт
ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("2.1.3.1");
ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиЗаполнениеОбъекта(); //ВидОбработкиПечатнаяФорма();
МасНазначений = Новый Массив;
МасНазначений.Добавить("Документ.ЗаказНаПеремещение");
МасНазначений.Добавить("Документ.ЗаказПоставщику");
ПараметрыРегистрации.Назначение = МасНазначений;
ПараметрыРегистрации.Наименование = "ДобавитьКоличество";
ПараметрыРегистрации.БезопасныйРежим = Ложь;
НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
НоваяКоманда.Представление = НСтр("ru = 'ДобавитьКоличество'");
НоваяКоманда.Идентификатор = "ДобавитьКоличество";
НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовКлиентскогоМетода();
НоваяКоманда.ПоказыватьОповещение = Истина;
Возврат ПараметрыРегистрации;
КонецФункции
Далее мы добавим пустую форму обработки и переключимся на ее модуль. Переключаются между формой и ее модулем с помощью закладок в нижней части окна. Следом добавляем процедуру «ВыполнитьКоманду» на клиентской стороне с нужным нам алгоритмом. Чтобы завершить создание обработки заполнения табличных частей, осталось лишь сохранить результат работы.
&НаКлиенте
Процедура ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначенияМассив) экспорт
Для каждого стр из ВладелецФормы.Объект.Товары цикл
стр.Количество = стр.Количество + 10;
стр.КоличествоУпаковок = стр.КоличествоУпаковок + 10;
КонецЦикла;
КонецПроцедуры
После сохранения внешней обработки нам остается только подключить ее в базу 1С в режиме предприятия. Запускаем 1С, заходим в раздел «НСИ и администрирование», «Печатные формы, отчеты и обработки». Открываем форму «Дополнительные отчеты и обработки» и перед нами открывается список всех подключенных объектов.
Нажав «Добавить из файла…», выбираем сохраненный файл, и 1С при помощи процедуры «СведенияОВнешнейОбработке» подгружает всю информацию. Нам лишь остается сохранить данные и зайти в документы, чтобы проверить результат работы. Так как в коде описаны действия на стороне клиента, чтобы данные попали в базу, необходимо провести документ после изменения количества.
Грамотно применяя все возможности платформы и библиотеки стандартных подсистем 1С, можно существенно облегчить труд пользователей и избежать множества проблем. Программное заполнение объектов информационной базы может помочь во внедрении, но нужно быть внимательным и тщательно тестировать добавленные возможности.
Предусмотрите все варианты, перед тем как автоматизировать какой-либо процесс на работающей базе данных. И обязательно регулярно делайте резервные копии, чтобы не рисковать потерей данных или отсутствием возможности восстановления некорректно измененных данных.
консультация эксперта
самые свежие новости 1 раз в месяц