Подключение подсистемы исправления документов и регистров в конфигурации ЗУП 3.1

01.03.22

Разработка - БСП (Библиотека стандартных подсистем)

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

Продолжу свои публикации по конфигурациям 1С. В этот раз опишу механизм исправления документов и регистров. Ранее уже писал статью Пример создания документа с движениями в ERP 2.5.7, где описывал создание документа в конфигурации ERP 2.5 и подключение его к подсистемам. 

Т.к. каркас конфигурации у нас один - БСП, в этой статье я пропущу описание подключения к стандартным подсистемам.

В любом случае все создаваемые документы я по умолчанию подключаю к подсистемам "Даты запрета редактирования", "Префиксация документов и справочников", "Подключаемые команды", "Печать", "Отчеты" и "Управление доступом". Если документ делает движения, то добавляется отчет "Движения документа". Далее уже по ситуации и требованиям.

Пример создавался на моем тестовом решении задачи билета №1 экзамена "Специалист по ЗУП 3.1", поэтому возможно вы найдете что-то знакомое в названиях документов и регистров :)

Для начала опишу пользовательскую часть.

В форме проведенного документа у нас выводится надпись "Исправить".

 

 

При нажатии команды у нас открывается копия документа, где мы можем внести исправления. При проведении созданного документа-исправления, движения старого документа сторнируются, а сам исправленный документ становится недоступным для изменения.

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

При проведении документа-исправления, оригинальные движения копируются в регистр (испр.), а при отмене исправления копируются обратно.

Итак. Как это сделано :)

У меня создан документ экз_ГрафикРаботВОсобыхУсловиях (График работ в особых условиях).

Который делает движения по непериодическому регистру сведений экз_ГрафикиРаботВоВредныхУсловиях (Графики работ во вредных условиях).

1. Добавить подписку на события "экз_ПолучитьПрежнийИсправленный"

Источник: ДокументОбъект.экз_ГрафикРаботВОсобыхУсловиях
Событие: ПередЗаписью
Обработчик: ИсправлениеПериодическихСведений.ПолучитьПрежнийИсправленный

 

2. Добавить подписку на события "экз_ОтменитьИсправлениеПериодическихСведений"

Источник: ДокументОбъект.экз_ГрафикРаботВОсобыхУсловиях
Событие: ОбработкаУдаленияПроведения
Обработчик: ИсправлениеПериодическихСведений.ОтменитьИсправлениеПериодическихСведений

 

3. Добавить в документ реквизит "ИсправленныйДокумент" с типом ДокументСсылка.экз_ГрафикРаботВОсобыхУсловиях

 

4. В подвал формы документа (группа где мы размещаем ответственного и комментарий) добавить группу "ГруппаИсправление"

 

5. В форме документа в событие "ПриСозданииНаСервере" добавим

Если Параметры.Ключ.Пустая() Тогда
	ПриПолученииДанныхНаСервере();
КонецЕсли; 

 

6. В форме документа в событие "ПриЧтенииНаСервере" добавим 

ПриПолученииДанныхНаСервере();

 

7. И добавим саму процедуру ПриПолученииДанныхНаСервере()

&НаСервере
Процедура ПриПолученииДанныхНаСервере()

	ИсправлениеДокументовЗарплатаКадры.ГруппаИсправлениеДополнитьФорму(
		ЭтотОбъект, Истина, Истина, Ложь);

	ИсправлениеДокументовЗарплатаКадры.ПрочитатьРеквизитыИсправления(ЭтотОбъект, "ПериодическиеСведения");
	ИсправлениеДокументовЗарплатаКадрыКлиентСервер.УстановитьПоляИсправления(ЭтотОбъект, "ПериодическиеСведения");
		
КонецПроцедуры

 

8. В форме документа в событие ПослеЗаписиНаСервере добавим

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

 

9. В форме документа в событии "ОбработкаОповещения" добавим 

ИсправлениеДокументовЗарплатаКадрыКлиент.ОбработкаОповещения(ЭтотОбъект, ИмяСобытия, Параметр, Источник);

 

10. В форме документа добавим обработчики подключаемых команд

// ИсправлениеДокументов
&НаКлиенте
Процедура Подключаемый_Исправить(Команда)
	ИсправлениеДокументовЗарплатаКадрыКлиент.Исправить(ЭтотОбъект);
КонецПроцедуры

&НаКлиенте
Процедура Подключаемый_ПерейтиКИсправлению(Команда)
	ИсправлениеДокументовЗарплатаКадрыКлиент.ПерейтиКИсправлению(ЭтотОбъект);
КонецПроцедуры

&НаКлиенте
Процедура Подключаемый_ПерейтиКИсправленному(Команда)
	ИсправлениеДокументовЗарплатаКадрыКлиент.ПерейтиКИсправленному(ЭтотОбъект);
КонецПроцедуры
// Конец ИсправлениеДокументов

 

11. В форме документа в событие "ПослеЗаписи" добавим

ИсправлениеДокументовЗарплатаКадрыКлиент.ПослеЗаписи(ЭтотОбъект, ПараметрыЗаписи);

 

12. В модуле документа в обрабочик событий "ОбработкаЗаполнения" добавим

	Если ТипЗнч(ДанныеЗаполнения) = Тип("Структура") Тогда
		Если ДанныеЗаполнения.Свойство("Действие") Тогда
			
			Если ДанныеЗаполнения.Действие = "Исправить" Тогда
				
				ИсправлениеДокументовЗарплатаКадры.СкопироватьДокумент(ЭтотОбъект, ДанныеЗаполнения.Ссылка);
				
				ИсправленныйДокумент = ДанныеЗаполнения.Ссылка;

			КонецЕсли;
		
		КонецЕсли;
	КонецЕсли;

 

13. В модуле документа в обработчик события "ОбработкаПроведения" добавим

Документы.экз_ГрафикРаботВОсобыхУсловиях.ОбработкаПроведения(ЭтотОбъект, Отказ, РежимПроведения);

В котором соответственно опишем всю логику проведения документа.

Процедура ОбработкаПроведения(ДокументОбъект, Отказ, РежимПроведения) Экспорт

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

	ИсправлениеДокументовЗарплатаКадры.ПриПроведенииИсправления(
		ДокументОбъект.Ссылка, 
		ДокументОбъект.Движения, 
		РежимПроведения, 
		Отказ, 
		РеквизитыДляПроведения,, 
		ДокументОбъект, 
		"Дата");

	ИсправлениеПериодическихСведений.ИсправлениеПериодическихСведений(
		ДокументОбъект, 
		Отказ, 
		РежимПроведения, 
		ДокументОбъект.Ссылка, 
		ДокументОбъект.ИсправленныйДокумент);

	ДанныеДляПроведения = ДанныеДляПроведения(ДокументОбъект.Ссылка, ДокументОбъект.Организация);

	ДокументОбъект.Движения.экз_ГрафикиРаботВоВредныхУсловиях.Записывать = Истина;
	Для Каждого СтрокаДанных Из ДанныеДляПроведения.ГрафикРаботВОсобыхУсловияхСотрудники Цикл
		ЗаполнитьЗначенияСвойств(ДокументОбъект.Движения.экз_ГрафикиРаботВоВредныхУсловиях.Добавить(), СтрокаДанных);
	КонецЦикла;    
	
КонецПроцедуры

Обратите внимание. У меня идет вызов процедуры ИсправлениеДокументовЗарплатаКадры.ПриПроведенииИсправления, в которой идет проверка, что текущий документ входит в подписку "ПолучитьПрежнийИсправленный". Если это условие выполняется, то дополнительно вызывается метод ИсправлениеПериодическихСведений.ИсправлениеПериодическихСведений.

В моем случае идет доработка через расширение и создана собственная копия подписки "экз_ПолучитьПрежнийИсправленный". Поэтому в коде я отдельно делаю вызов ИсправлениеПериодическихСведений.ИсправлениеПериодическихСведений.

Так же для корректной работы необходимо добавить экспортную процедуру

// Формирует сторно записи отменяющие движения исправленного документа по регистрам подсистемы.
//
// Параметры:
//  Движения			 - КоллекцияДвижений, Структура	 - Коллекция движений в которую будут добавлены сторно записи.
//  ИсправленныйДокумент - ДокументСсылка				 - Документ, записи которого необходимо сторнировать.
//  Записывать			 - Булево						 - Если Истина, то наборы будут записаны сразу, если Ложь, то наборам будет установлен признак Записывать = Истина.
//
Процедура СторнироватьДвиженияДокумента(Движения, ИсправленныйДокумент, Записывать = Ложь) Экспорт
	
	МетаданныеРегистров = МетаданныеРегистровПодсистемы();
	
	ДвиженияВСтруктуре = ТипЗнч(Движения) = Тип("Структура");
	Набор = Неопределено;
	
	Для Каждого МетаданныеРегистра Из МетаданныеРегистров Цикл
		
		ИмяРегистра = МетаданныеРегистра.Имя;
		
		Если ДвиженияВСтруктуре Тогда 
			Движения.Свойство(ИмяРегистра, Набор);
		Иначе 
			Набор = Движения.Найти(ИмяРегистра);
		КонецЕсли;
		
	КонецЦикла;
	
КонецПроцедуры

 

Как уже писал ранее необходимо создать регистр сведений "экз_ГрафикиРаботВоВредныхУсловияхИспр" Непериодический и Независимый.  Регистр является копией основного, только с добавленным измерением "РегистраторИзмерение"

 

Вот собственно и все. Наш документ готов.

 

ps: Все вышеописанное реализовано через расширение, в т.ч. документ и регистры. Пример полностью рабочий, но при подготовке данной статьи, мог что-то пропустить в описании. Сообщите мне, если найдете неточности.

Протестировано на платформе 1С:Предприятие 8.3 (8.3.20.1613) и конфигурации Зарплата и управление персоналом, редакция 3.1 (3.1.16.108). (Выбран старый релиз, т.к. на текущий момент на нем сдается экзамен).

Исправление документов Зарплата и управление персоналом

См. также

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

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

Уже не одна веб-страница исписана знаниями о дополнительных обработках, как создать, как подключить. Есть масса вариантов, как их можно отладить. Я разобрался в кишках работы библиотеки и покажу, как можно расширить возможности дополнительных отчетов, а также покажу удобный способ отладки.

07.02.2024    2351    YA_418728146    11    

40

1С:БСП Дополнительные реквизиты и сведения

БСП (Библиотека стандартных подсистем) Платформа 1С v8.3 Бесплатно (free)

В этой статье расскажем об архитектуре, использовании и особенностях реализации подсистемы «Свойства» из инструментария разработчика «1С:Библиотека стандартных подсистем» (1С: БСП).

19.01.2024    5162    PROSTO-1C    5    

45

Шаблоны новых объектов 1С для 1С:Бухгалтерии предприятия

Инструментарий разработчика БСП (Библиотека стандартных подсистем) Механизмы типовых конфигураций Платформа 1С v8.3 1С:Бухгалтерия 3.0 Бесплатно (free)

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

28.12.2023    4831    mrXoxot    11    

99

Настройка истории изменений. Подключение новых объектов (которых нет в списке) к системе версионирования (БСП) без изменения конфигурации

БСП (Библиотека стандартных подсистем) Платформа 1С v8.3 Бесплатно (free)

Много материалов и видео в сети о том, как подключить объект, которого нет в списке настроек, к системе версионирования БСП. Суть сводится к изменению определяемого типа, на который все завязано. Но это предполагает изменение конфигурации. Недавно встала задача подключить объект, которого нет в определяемом типе без снятия замков. Пришлось изучить вопрос глубже. Здесь пояснения и краткая инструкция с картинками. Как подключиться, используя только расширение.

20.11.2023    1606    user1374747    0    

32

Ключи аналитик учета в ЕРП, КА, УТ

Механизмы типовых конфигураций Платформа 1С v8.3 1С:ERP Управление предприятием 2 Россия Управленческий учет Бесплатно (free)

Разбираемся, зачем в системе ЕРП созданы справочники: ключи аналитик учета, зачем созданы аналогичные по набору измерений регистры сведений. Какие проблемы они решают, какие создают новые и что с этим делать.

08.11.2023    7047    ids79    25    

74

Как включить привилегированный режим для дополнительных отчетов и обработок

БСП (Библиотека стандартных подсистем) Конфигурации 1cv8 Бесплатно (free)

Как отключить безопасный режим для дополнительных отчетов и обработок РазрешениеНаИспользованиеПривилегированногоРежима

14.10.2023    3663    SpecRam    16    

33
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. biimmap 1827 01.03.22 11:10 Сейчас в теме
Для бОльшей понятности стоит название статьи изменить на "Подключение подсистемы..."
2. maraty 432 01.03.22 11:26 Сейчас в теме
(1) Согласен, так информативнее.
3. frkbvfnjh 785 01.03.22 12:20 Сейчас в теме
Спасибо большое, сейчас стоит как раз такая задача! Очень нужная статья. О результатах постараюсь отписаться.
4. Beta 11 02.03.22 11:55 Сейчас в теме
Нужно попробовать для документа "Регистрация переработок"
5. apic 13 09.03.22 07:17 Сейчас в теме
Уважаемый автор публикации, а вы не работали с подсистемой рассылки уведомлений в КОРП версии ЗУМ 3.1? Вот это вот: https://buhexpert8.ru/1s-zup/vozmozhnosti-i-nastrojki-1s-zup-3/vozmozhnosti-1s-zup-3-i-kontseptsiya-ucheta/novye-vozmozhnosti-rassylki-uvedomlenij-zup-3-1-14-183-korp.html
Есть потребность сделать новый вид уведомлений со своим шаблоном и реквизитами, но нет нигде, никакой информации как этот механизм функционирует и по коду не понятно по каком принципу формируются задания на рассылку, как по мне - довольно сложный механизм. Думаю интересная тема для публикации. Если работали с этой подсистемой, очень хотелось получить от Вас подсказки.
6. zhkonst 04.08.23 09:18 Сейчас в теме
Интересно, а есть где-то документация по этомы механизму? Стал делать у себя (ЗУП 3.1.25.136) - кое-что не совпадает со статьёй, пришлось дописывать. Вот и хотелось бы глянуть хоть одним глазком, что по этому поводу авторы всего этого безобразия пишут.
Но автору всё равно респектище и благодарность.
7. zhkonst 04.08.23 13:09 Сейчас в теме
(6) вдогонку: в модуле менеджера документа пришлось ещё добавить две функции:
Функция СвойстваИсправляемогоДокумента(ДокументСсылка) Экспорт
и
Функция ПараметрыИсправляемогоДокумента(ДокументСсылка) Экспорт
8. maraty 432 09.08.23 12:11 Сейчас в теме
(6)
сть где-то документация по этомы механизму? Стал делать у себя (ЗУП 3.1.25.136) - кое-что не совпадает со статьёй, пришлось дописывать. Вот и хотелось бы глянуть хоть одним глазком, что по этому поводу авторы всего этого безо

Подобной документации не видел. Статьи писал по практическому опыту.
ps: При возможности актуализирую статью под актуальный релиз.
Оставьте свое сообщение