Подключение подсистемы исправления документов и регистров в конфигурации ЗУП 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). (Выбран старый релиз, т.к. на текущий момент на нем сдается экзамен).

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

См. также

Работа с контактной информацией. Часть 2

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

Во второй части статьи рассмотрим вопрос преобразования адреса из старого формата в новый. Рассмотрим реальные задачи, связанные с контактной информацией.

05.06.2023    2585    biimmap    3    

35

Работа с контактной информацией. Часть 1

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

Уверен, все в курсе, что контактная информация опять во всех конфигурациях хранится по-новому. Связано это с появлением так называемых муниципальных адресов, где районы заменили городские округа. Сейчас происходит массовый отказ от УПП и других устаревших решений, а также массовый переход с зарубежных систем. Возникает потребность преобразовать старые адреса в новые. И тут нас всех ждёт масса неприятных сюрпризов от разработчиков БСП. О программном интерфейсе контактной информации и пойдёт речь в данной статье.

23.05.2023    5530    biimmap    41    

56

Пример использования механизма "Блокировки изменения объектов" (БП, ЗУП, УХ, ЕРП)

Механизмы типовых конфигураций 8.3.14 1С:Бухгалтерия 3.0 1С:Управление холдингом 1С:Зарплата и Управление Персоналом 3.x Россия Абонемент ($m)

Механизм позволяет добавлять обработчики блокировки формы от изменения пользователем с выводом предупреждения "Документ не редактируется по причине:" и указанием причин блокировки. Также по некоторому условию может быть выведена кнопка "Разблокировать форму".

1 стартмани

18.05.2023    4196    9    FilippSerg    1    

27

Снова об использовании ТекущаяДата() на клиенте и на сервере и о работе в разных часовых поясах

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

Можно ли применять ТекущаяДата() вопреки требованиям стандартов 1С? Безопасно ли использование функции ОбщегоНазначенияКлиент.ДатаСеанса() из БСП? Как правильно поступать при работе пользователей в разных часовых поясах?

24.04.2023    5575    Alxby    26    

44

Многопоточное выполнение процедуры с помощью ДлительныеОперации

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

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

1 стартмани

26.02.2023    6134    egoriy111    24    

78
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. biimmap 1385 01.03.22 11:10 Сейчас в теме
Для бОльшей понятности стоит название статьи изменить на "Подключение подсистемы..."
2. maraty 391 01.03.22 11:26 Сейчас в теме
(1) Согласен, так информативнее.
3. frkbvfnjh 765 01.03.22 12:20 Сейчас в теме
Спасибо большое, сейчас стоит как раз такая задача! Очень нужная статья. О результатах постараюсь отписаться.
4. Beta 11 02.03.22 11:55 Сейчас в теме
Нужно попробовать для документа "Регистрация переработок"
5. apic 12 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 391 09.08.23 12:11 Сейчас в теме
(6)
сть где-то документация по этомы механизму? Стал делать у себя (ЗУП 3.1.25.136) - кое-что не совпадает со статьёй, пришлось дописывать. Вот и хотелось бы глянуть хоть одним глазком, что по этому поводу авторы всего этого безо

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