Миниатюра 1С обработка табличных частей

С переходом на управляемые формы изменился шаблон создания внешних обработок. Теперь для создания подключаемой внешней обработки необходимо описать несколько процедур и заполнить ряд параметров подключения. Хотелось бы раскрыть этот вопрос подробно, поэтому в публикации будет создана 1С обработка табличной части 8.3 для подключения к конфигурациям на управляемых формах и исходник выложен в конце публикации.



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

Но давайте все по порядку, пройдем весь путь от создания до ввода в работу…

Создание обработки табличной части 1С и описание необходимых сведений

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

Для этого создаем реквизит с наименованием «Ссылка» и указываем тип объекта, у которого нам необходимо обработать табличную часть. В нашем примере это будет справочник «Спецификации» и обрабатывать мы будем табличную часть «Состав».

1С обработка табличной части - создание реквизита Ссылка

Далее переходим в модуль объекта и, в соответствии с рекомендациями 1С по созданию новых обработок, вставляем обязательную для внешних обработок функцию СведенияОВнешнейОбработке().

Функция СведенияОВнешнейОбработке() Экспорт

    ПараметрыРегистрации = Новый Структура;
    МассивНазначений = Новый Массив;
    МассивНазначений.Добавить("Справочники.Спецификации");

    ПараметрыРегистрации.Вставить("Вид", "ЗаполнениеОбъекта");
    ПараметрыРегистрации.Вставить("Назначение", МассивНазначений);
    ПараметрыРегистрации.Вставить("Наименование", "Обработка табличной части Состав у справочника Спецификации");
    ПараметрыРегистрации.Вставить("Версия", "1.0");
    ПараметрыРегистрации.Вставить("БезопасныйРежим", Истина);
    ПараметрыРегистрации.Вставить("Информация", "Обработка изменяет табличную часть Состав у справочника Спецификации");

    ТаблицаКоманд = ПолучитьТаблицуКоманд();

    ДобавитьКоманду(ТаблицаКоманд,
    "Обработка табличной части Состав у справочника Спецификации",
    "ОбработкаТЧСоставУСпецификации",
    "ВызовКлиентскогоМетода",
    Истина);

    ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд);

    Возврат ПараметрыРегистрации;
КонецФункции

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

Процедура ДобавитьКоманду(ТаблицаКоманд, Представление, Идентификатор, Использование, ПоказыватьОповещение = Ложь, Модификатор = "")
  НоваяКоманда = ТаблицаКоманд.Добавить();
  НоваяКоманда.Представление = Представление;
  НоваяКоманда.Идентификатор = Идентификатор;
  НоваяКоманда.Использование = Использование;
  НоваяКоманда.ПоказыватьОповещение = ПоказыватьОповещение;
  НоваяКоманда.Модификатор = Модификатор;
КонецПроцедуры

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

1С обработка табличной части в режиме отладки

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

1С обработка табличной части - создание команды

Описываем действие команды:

&НаКлиенте
Процедура выполнитьком1(Команда)
	ВыполнитьКоманду("ОбработкаТЧСоставУСпецификации", Объект);
КонецПроцедуры

После того, как подключенная 1С обработка табличной части будет запущена, 1С Предприятие будет исполнять процедуру ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначения) в модуле формы. Поэтому нашей командой мы так же будем выполнять эту процедуру, только на объекте, выбранном в реквизите «Ссылка» на форме.

При выполнении команды проверим идентификатор формы и поскольку операция меняет данные, то перед выполнением обработки табличной части зададим вопрос о целесообразности этой процедуры (а то может быть пользователь случайно активировал команду):

&НаКлиенте
Процедура ВыполнитьКоманду(ИдентификаторКоманды, ОбъектыНазначения) Экспорт
	
	 Если ИдентификаторКоманды = "ОбработкаТЧСоставУСпецификации" Тогда
		Режим = РежимДиалогаВопрос.ДаНет;
		Оповещение = Новый ОписаниеОповещения("ПослеОтветаНаВопросОЗаполненииТЧ", ЭтаФорма, Параметры);
		ПоказатьВопрос(Оповещение, "Заполнить табличную часть?", Режим, 0); 
	КонецЕсли;

КонецПроцедуры
&НаКлиенте
Процедура ПослеОтветаНаВопросОЗаполненииТЧ(Результат, Параметры) Экспорт
	
	Если Результат = КодВозвратаДиалога.Нет Тогда
        Возврат;
	КонецЕсли;
	
	Если Не ВладелецФормы = Неопределено Тогда
		НовыйОбъект = ВладелецФормы.Объект;
	Иначе	
		ВладелецФормы = ОткрытьФорму("Справочник.Спецификации.Форма.ФормаЭлемента", Новый Структура("Ключ", Объект.Ссылка));
		НовыйОбъект = ВладелецФормы.Объект;
        КонецЕсли;
	ЗаполнитьТЧСервер(НовыйОбъект);
	КопироватьДанныеФормы(НовыйОбъект, ВладелецФормы.Объект);

	Сообщение = Новый СообщениеПользователю();
	Сообщение.Текст = "Табличная часть обработана!!!";
	Сообщение.Сообщить();
		
КонецПроцедуры

После получения положительного ответа, проверяем, кто ВладелецФормы и узнаем, откуда запущена обработка табличной части:

  • из формы объекта (после её добавления в конфигурации 1С в «Дополнительных отчетах и обработках»); в этом случае передаем копию объекта формы на сервер для обработки табличной части.
  • из созданной нами формы обработки (при её открытии через «Файл-Открыть…» и выполнении команды «Команда1» на форме); в этом случае открываем форму элемента с поиском по ссылке объекта, выбранного в форме и так же передаем копию объекта формы на сервер для обработки табличной части.

 Обработанные данные в последствии будут скопированы снова в объект форы через команду КопироватьДанныеФормы().

На сервере мы можем обработать табличную часть объекта по необходимому алгоритму. Что бы не усложнять пример, наша 1С обработка табличной части 8.3 будет всего лишь очищать табличную часть. А вообще можно пробежаться по списку табличной части и изменить любые реквизиты в соответствии с необходимой логикой.

&НаСервере
Функция ЗаполнитьТЧСервер(объектСТабличнойЧастью)
	
	СоставСпецификации = объектСТабличнойЧастью.Состав;
	СоставСпецификации.Очистить();
	
КонецФункции

Всё! Обработка табличной части 1С готова, давайте её тестировать.

Тестирование 1С обработки табличной части

1. Запустим обработку в режиме отладки через Файл-Открыть… В модуле формы ставим точку останова на строчке серверной процедуры ЗаполнитьТЧСервер(). Запускаем обработку на выполнение через команду на форме «Команда 1».

Код обработки табличных частей

Наша точка останова останавливает выполнение программы в заданном месте, что дает возможность обратиться к Объекту. Таким образом мы можем посмотреть необходимые реквизиты и обработать табличную часть переданного объекта и другие реквизиты как необходимо. После выполнения кода в режиме 1С Предприятие, откроется форма элемента выбранного объекта с обработанными реквизитами.

2. Добавляем нашу обработку в дополнительных отчетах и обработках в 1С конфигурации. Все реквизиты описания обработки заполнятся автоматически, как мы указывали в процессе разработки.

Добавление дополнительной обработки в режиме 1С Предприятие

В реквизите «Размещение» указываем тип изменяемого объекта (в нашем примере это справочник «Спецификации»). Нажимаем записать и закрыть. После этого в форме справочника «Спецификации» появится кнопка «Заполнить» и в ней команда — «Обработка табличной части Состав у справочника Спецификации». При выполнении команды табличная часть «Состав» в форме справочника «Спецификации» очистится. А это значит, что наша 1С обработка табличной части 8.3 отработала корректно.

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

Желаю удачи и хорошего настроения!


1С обработка табличной части 8.3 с возможностью отладки, скачать

1С обработка табличной части 8.3 с возможностью отладки, скачать: 5 комментариев

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

Рейтинг@Mail.ru
Яндекс.Метрика
Здесь находится аттестат нашего WM идентификатора 739402762981
Проверить аттестат