Состояния оригиналов первичных документов / Модуль менеджера

файл
///////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) 2024, ООО 1С-Софт
// Все права защищены. Эта программа и сопроводительные материалы предоставляются 
// в соответствии с условиями лицензии Attribution 4.0 International (CC BY 4.0)
// Текст лицензии доступен по ссылке:
// https://creativecommons.org/licenses/by/4.0/legalcode
///////////////////////////////////////////////////////////////////////////////////////////////////////

#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда

#Область ПрограммныйИнтерфейс

#Область УстаревшиеПроцедурыИФункции

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

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

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

КонецПроцедуры

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

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

#КонецОбласти

#КонецОбласти

#КонецЕсли

Связанные материалы