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

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

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

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

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

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

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

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

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

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

	Возврат УчетОригиналовПервичныхДокументов.УстановитьНовоеСостояниеОригинала(ОбъектыЗаписи, СостояниеОригинала);

КонецФункции

// Возвращает ссылку на документ по штрихкоду табличного документа
//
// Параметры:
//  Штрихкод - Строка - отсканированный штрихкод документа.
//
Процедура ОбработатьШтрихкод(Штрихкод) Экспорт
	
	УчетОригиналовПервичныхДокументов.ОбработатьШтрихкод(ШтрихКод);

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

// Возвращает структуру с данными о текущим общем состоянии оригинала документа по ссылке.
//
//	Параметры:
//  ДокументСсылка - ДокументСсылка - ссылка на документ, для которого необходимо получить сведения о общем состоянии. 
//
//  Возвращаемое значение:
//    Структура - основные сведения о общем состоянии оригинала:
//    * Ссылка - ДокументСсылка - ссылка на документ;
//    * СостояниеОригиналаПервичногоДокумента - СправочникСсылка.СостоянияОригиналовПервичныхДокументов - текущее
//        состояние оригинала документа.
//
Функция СведенияОСостоянииОригиналаПоСсылке(ДокументСсылка) Экспорт

	Возврат УчетОригиналовПервичныхДокументов.СведенияОСостоянииОригиналаПоСсылке(ДокументСсылка);
	
КонецФункции

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

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

	КонецЦикла;
КонецПроцедуры

// Проверяет и возвращает признак того, является ли документ по ссылке документом с учетом оригиналов.
//
//	Параметры:
//  ОбъектСсылка - ДокументСсылка - ссылка на документ, который необходимо проверить.
//
//	Возвращаемое значение:
//  Булево - Истина, если документ является объектом учетом оригиналов.
//
Функция ЭтоОбъектУчета(ОбъектСсылка) Экспорт
	
	Возврат УчетОригиналовПервичныхДокументов.ЭтоОбъектУчета(ОбъектСсылка);

КонецФункции

// Возвращает ключ записи регистра общего состояния оригинала документа по ссылке.
//
//	Параметры:
//  ДокументСсылка - ДокументСсылка - ссылка на документ,для которого необходимо получить ключ записи общего состояния.
//
//	Возвращаемое значение:
//  РегистрСведенийКлючЗаписи.СостоянияОригиналовПервичныхДокументов - ключ записи регистра общего состояния оригинала документа.
//
Функция КлючЗаписиОбщегоСостояния(ДокументСсылка) Экспорт

	Возврат УчетОригиналовПервичныхДокументов.КлючЗаписиОбщегоСостояния(ДокументСсылка);

КонецФункции

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

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

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

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

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