#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
СостоянияОригиналов = УчетОригиналовПервичныхДокументов.ИспользуемыеСостояния();
УчетОригиналовПервичныхДокументов.ВывестиНаФормуКомандыСостоянияОригинала(ЭтотОбъект, КомплектПечатныхФорм, СостоянияОригиналов);
ЗаполнитьСписокПечатныхФормПоСсылке();
Если ЗначениеЗаполнено(Параметры.ДокументСсылка) И Не Параметры.ДокументСсылка.Пустая() Тогда
Запись.Владелец = Параметры.ДокументСсылка;
ФильтрПечатныхФорм = "Все";
Элементы.НадписьПредупреждение.Заголовок = НСтр("ru='Состояние оригинала документа будет установлено по печатным формам.'");
ИначеЕсли КомплектПечатныхФорм.Количество() = 0 Тогда
ЗаполнитьВсеПечатныеФормы();
ФильтрПечатныхФорм = "Все";
Элементы.НадписьПредупреждение.Заголовок = НСтр("ru='Состояние оригинала документа будет установлено по печатным формам.'");
Иначе
ФильтрПечатныхФорм = "Отслеживаемые";
КонецЕсли;
УстановитьСсылкуНаОригинал();
ВосстанавливатьФильтр = КомплектПечатныхФорм.Количество() > 0;
ВосстановитьНастройки(ВосстанавливатьФильтр);
УстановитьСсылкуНаОригинал();
УстановитьФильтрПечатныхФорм();
НастройкиПодсистемы = УчетОригиналовПервичныхДокументов.НастройкиПодсистемы();
Если Не НастройкиПодсистемы.ОтображатьПодсказкуВФормеИзмененияСостояний Тогда
Элементы.ГруппаДекорацияПредупреждение.Видимость = Ложь;
КонецЕсли;
ЭлементОформления = УсловноеОформление.Элементы.Добавить();
ЭлементОтбора = ЭлементОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("КомплектПечатныхФорм.Состояние");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено;
ЭлементОтбора.Использование = Истина;
ЭлементОформления.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ТекстЗапрещеннойЯчейкиЦвет);
ЭлементОформления.Использование = Истина;
ПолеОформления = ЭлементОформления.Поля.Элементы.Добавить();
ПолеОформления.Поле = Новый ПолеКомпоновкиДанных("КомплектПечатныхФормПредставление");
ПолеОформления.Использование = Истина;
КонецПроцедуры
&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
Если ИмяСобытия = "Запись_СостоянияОригиналовПервичныхДокументов" Тогда
Подключаемый_ОбновитьКомандыСостоянияОригинала();
ОбновитьОтображениеДанных();
ИначеЕсли (ИмяСобытия = "Запись_РегистрСведенийСостоянияОригиналовПервичныхДокументов"
И ((Источник <> Неопределено И ТипЗнч(Источник) = Тип("Массив") И Источник.Найти(Запись.Владелец) <> Неопределено)
Или Источник = Запись.Владелец))
Или ИмяСобытия = "ТабличныеДокументыНапечатаны" Тогда
КомплектПечатныхФорм.Очистить();
ПоказатьОтслеживаемыеНаСервере();
Если КомплектПечатныхФорм.Количество()=0 Тогда
ПоказатьВсеНаСервере();
КонецЕсли;
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовШапкиФормы
&НаКлиенте
Процедура СсылкаНаДокументНажатие(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ПоказатьЗначение(,Запись.Владелец);
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовТаблицыФормы
&НаКлиенте
Процедура КомплектПечатныхФормВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
Если Поле.Имя = "ОригиналПолученКартинка" Тогда
УстановитьСостояниеОригинала("УстановкаСостоянияОригиналПолучен");
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура КомплектПечатныхФормПередУдалением(Элемент, Отказ)
Отказ = Истина;
КонецПроцедуры
&НаКлиенте
Процедура КомплектПечатныхФормПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа, Параметр)
Отказ = Истина;
КонецПроцедуры
&НаКлиенте
Процедура КомплектПечатныхФормСостояниеПриИзменении(Элемент)
КоличествоСдвинуть = 0;
Для Каждого ПечатнаяФорма Из КомплектПечатныхФорм Цикл
Если ЗначениеЗаполнено(ПечатнаяФорма.Состояние) Тогда
КоличествоСдвинуть = КоличествоСдвинуть+1;
КонецЕсли;
КонецЦикла;
ТекущаяСтрока = Элементы.КомплектПечатныхФорм.ТекущиеДанные;
НовыйИндекс = КомплектПечатныхФорм.Индекс(ТекущаяСтрока);
Если Не НовыйИндекс <= КоличествоСдвинуть Тогда
КоличествоСдвинуть = НовыйИндекс - КоличествоСдвинуть +1;
КомплектПечатныхФорм.Сдвинуть(НовыйИндекс,-КоличествоСдвинуть);
КонецЕсли;
Если Не ЗначениеЗаполнено(Элементы.КомплектПечатныхФорм.ТекущиеДанные.Состояние) Тогда
Элементы.КомплектПечатныхФорм.ТекущиеДанные.ОригиналПолученКартинка = 0;
КонецЕсли;
Элементы.КомплектПечатныхФорм.ТекущиеДанные.АвторИзменения = ПользователиКлиент.ТекущийПользователь();
Элементы.КомплектПечатныхФорм.ТекущиеДанные.ДатаПоследнегоИзменения = НСтр("ru = '<только что>'");
КонецПроцедуры
&НаКлиенте
Процедура КомплектПечатныхФормСостояниеОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка)
Если ВыбранноеЗначение = ПредопределенноеЗначение("Справочник.СостоянияОригиналовПервичныхДокументов.ОригиналПолучен") Тогда
Элементы.КомплектПечатныхФорм.ТекущиеДанные.ОригиналПолученКартинка = 1;
Иначе
Элементы.КомплектПечатныхФорм.ТекущиеДанные.ОригиналПолученКартинка = 0;
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиКомандФормы
&НаКлиенте
Процедура ОК(Команда)
ОчиститьНеОтслеживаемые();
УстановитьОбщееСостояние();
СохранитьНастройки();
Если КомплектПечатныхФорм.Количество()<> 0 Тогда
ЗаписатьСостоянияОригиналовПервичныхДокументов();
Оповестить("Запись_РегистрСведенийСостоянияОригиналовПервичныхДокументов",, Запись.Владелец);
Закрыть();
УчетОригиналовПервичныхДокументовКлиент.ОповеститьПользователяОбУстановкеСостояний(1, Запись.Владелец,
Запись.Состояние);
ИначеЕсли КомплектПечатныхФорм.Количество() = 0 Тогда
Закрыть();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_УстановитьСостояниеОригинала(Команда)
Если Команда.Имя = "НастройкаСостояний" Тогда
УчетОригиналовПервичныхДокументовКлиент.ОткрытьФормуНастройкиСостояний();
Иначе
УстановитьСостояниеОригинала(Команда.Имя);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура Подключаемый_ОбновитьКомандыСостоянияОригинала()
УчетОригиналовПервичныхДокументов.ОбновитьКомандыСостоянияОригинала(ЭтотОбъект,Элементы.КомплектПечатныхФорм);
КонецПроцедуры
&НаКлиенте
Процедура УстановитьСостояниеОригинала(ИмяКоманды)
ОригиналПолучен = ПредопределенноеЗначение("Справочник.СостоянияОригиналовПервичныхДокументов.ОригиналПолучен");
Если ИмяКоманды = "УстановкаСостоянияОригиналПолучен" Тогда
СостояниеОригинала = ОригиналПолучен;
Иначе
СостояниеОригинала = УчетОригиналовПервичныхДокументовВызовСервера.СостояниеОригиналаПервичногоДокументаПоИмениКоманды(ИмяКоманды);
КонецЕсли;
Для Каждого СтрокаСписка Из Элементы.КомплектПечатныхФорм.ВыделенныеСтроки Цикл
ДанныеСтроки = Элементы.КомплектПечатныхФорм.ДанныеСтроки(СтрокаСписка);
ДанныеСтроки.Состояние = СостояниеОригинала;
ДанныеСтроки.ОригиналПолученКартинка = ?(ДанныеСтроки.Состояние = ОригиналПолучен, 1, 0);
ДанныеСтроки.АвторИзменения = ПользователиКлиент.ТекущийПользователь();
ДанныеСтроки.ДатаПоследнегоИзменения = НСтр("ru = '<только что>'");
КонецЦикла;
Элементы.КомплектПечатныхФорм.Обновить();
КонецПроцедуры
&НаКлиенте
Процедура ПоказатьВсе(Команда)
ПоказатьВсеНаСервере()
КонецПроцедуры
&НаКлиенте
Процедура ПоказатьОтслеживаемые(Команда)
ПоказатьОтслеживаемыеНаСервере()
КонецПроцедуры
&НаКлиенте
Процедура ДобавитьВручную(Команда)
Если Не ЗначениеЗаполнено(ПечатнаяФормаВручную) Тогда
Возврат;
КонецЕсли;
ПервичныйДокумент = СтрЗаменить(ПечатнаяФормаВручную," ","");
НайденныеСтроки = КомплектПечатныхФорм.НайтиСтроки(Новый Структура("ИмяМакета",ПервичныйДокумент));
Если НайденныеСтроки.Количество() > 0 Тогда
ОчиститьСообщения();
ОбщегоНазначенияКлиент.СообщитьПользователю(НСтр("ru = 'В списке уже есть такая форма.'"));
Возврат;
КонецЕсли;
Элементы.ДобавитьСвою.Скрыть();
КоличествоСдвинуть = 0;
Для Каждого ПечатнаяФорма Из КомплектПечатныхФорм Цикл
Если ЗначениеЗаполнено(ПечатнаяФорма.Состояние) Тогда
КоличествоСдвинуть = КоличествоСдвинуть+1;
КонецЕсли;
КонецЦикла;
Если КоличествоСдвинуть = 0 Тогда
КоличествоСдвинуть = КомплектПечатныхФорм.Количество();
Иначе
КоличествоСдвинуть = КомплектПечатныхФорм.Количество() - КоличествоСдвинуть;
КонецЕсли;
НоваяСтрока = КомплектПечатныхФорм.Добавить();
НоваяСтрока.ИмяМакета = ПервичныйДокумент;
НоваяСтрока.Представление = ПечатнаяФормаВручную;
НоваяСтрока.Состояние = ПредопределенноеЗначение("Справочник.СостоянияОригиналовПервичныхДокументов.ФормаНапечатана");
НоваяСтрока.Извне = Истина;
НоваяСтрока.Картинка = 2;
НоваяСтрока.ОригиналПолученКартинка = 0;
ПоследняяСтрока = КомплектПечатныхФорм.Количество()-1;
КомплектПечатныхФорм.Сдвинуть(ПоследняяСтрока,-КоличествоСдвинуть);
Элементы.КомплектПечатныхФорм.Обновить();
Элементы.КомплектПечатныхФорм.ВыделенныеСтроки.Очистить();
Элементы.КомплектПечатныхФорм.ВыделенныеСтроки.Добавить(НоваяСтрока.ПолучитьИдентификатор());
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
#Область ЗаполнениеТаблицыКомплектПечатныхФорм
&НаСервере
Процедура ЗаполнитьПервоначальныйСписокПечатныхФорм()
Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Печать") Тогда
Возврат;
КонецЕсли;
МодульУправлениеПечатью = ОбщегоНазначения.ОбщийМодуль("УправлениеПечатью");
ОбъектМетаданных = Запись.Владелец.Метаданные();
СписокОбъектов = Новый Массив;
СписокОбъектов.Добавить(ОбъектМетаданных);
КоллекцияПечатныхФорм = МодульУправлениеПечатью.КомандыПечатиОбъектаДоступныеДляВложений(ОбъектМетаданных);
СписокПечатныхФорм = Новый СписокЗначений;
Для Каждого ПечатнаяФорма Из КоллекцияПечатныхФорм Цикл
СписокПечатныхФорм.Добавить(ПечатнаяФорма.Идентификатор, ПечатнаяФорма.Представление);
КонецЦикла;
ОбъектыПечати = Новый СписокЗначений;
ОбъектыПечати.Добавить(Запись.Владелец);
УчетОригиналовПервичныхДокументов.ПриОпределенииСпискаПечатныхФорм(ОбъектыПечати, СписокПечатныхФорм);
ПолноеИмяОМД = ОбъектМетаданных.ПолноеИмя();
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ДополнительныеОтчетыИОбработки") Тогда
МодульДополнительныеОтчетыИОбработки = ОбщегоНазначения.ОбщийМодуль("ДополнительныеОтчетыИОбработки");
ТаблицаКоманд = МодульДополнительныеОтчетыИОбработки.ДополнительныеКомандыПечати(ПолноеИмяОМД, Истина);
КонецЕсли;
ТабличнаяЧасть = УчетОригиналовПервичныхДокументов.ТабличнаяЧастьССотрудниками(Запись.Владелец);
Если ТабличнаяЧасть <> "" Тогда
МассивСотрудников = Запись.Владелец[ТабличнаяЧасть].ВыгрузитьКолонку("Сотрудник");
НаименованияСотрудников = ОбщегоНазначения.ЗначениеРеквизитаОбъектов(МассивСотрудников, "Наименование");
Для Каждого Сотрудник Из МассивСотрудников Цикл
НаименованиеСотрудника = НаименованияСотрудников.Получить(Сотрудник);
ФИО = ФизическиеЛицаКлиентСервер.ФамилияИнициалы(НаименованиеСотрудника);
Для Каждого ТекСтрока Из СписокПечатныхФорм Цикл
НоваяСтрока = КомплектПечатныхФорм.Добавить();
НоваяСтрока.ИмяМакета = ТекСтрока.Значение;
НоваяСтрока.Представление = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru='%1 %2'"), ТекСтрока.Представление, ФИО);
НоваяСтрока.Картинка = 1;
НоваяСтрока.ОригиналПолученКартинка = 0;
НоваяСтрока.Сотрудник = Сотрудник;
КонецЦикла;
КонецЦикла;
Если ТаблицаКоманд.Количество() > 0 Тогда
Для Каждого Сотрудник Из МассивСотрудников Цикл
НаименованиеСотрудника = НаименованияСотрудников.Получить(Сотрудник);
ФИО = ФизическиеЛицаКлиентСервер.ФамилияИнициалы(НаименованиеСотрудника);
Для Каждого ТекСтрока Из ТаблицаКоманд Цикл
Если КомплектПечатныхФорм.НайтиСтроки(Новый Структура("ИмяМакета", ТекСтрока.Идентификатор)) = 0 Тогда
НоваяСтрока = КомплектПечатныхФорм.Добавить();
НоваяСтрока.ИмяМакета = ТекСтрока.Идентификатор;
НоваяСтрока.Представление = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru='%1 %2'"), ТекСтрока.Представление, ФИО);
НоваяСтрока.Картинка = 1;
НоваяСтрока.ОригиналПолученКартинка = 0;
НоваяСтрока.Сотрудник = Сотрудник;
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецЕсли;
Иначе
Для Каждого ТекСтрока Из СписокПечатныхФорм Цикл
НоваяСтрока = КомплектПечатныхФорм.Добавить();
Идентификатор = ТекСтрока.Значение;
НоваяСтрока.ИмяМакета = Идентификатор;
НоваяСтрока.Представление = ТекСтрока.Представление;
НоваяСтрока.Картинка = 1;
НоваяСтрока.ОригиналПолученКартинка = 0;
КонецЦикла;
Если ТаблицаКоманд.Количество() > 0 Тогда
Для Каждого ТекСтрока Из ТаблицаКоманд Цикл
Если КомплектПечатныхФорм.НайтиСтроки(Новый Структура("ИмяМакета", ТекСтрока.Идентификатор)) = 0 Тогда
НоваяСтрока = КомплектПечатныхФорм.Добавить();
НоваяСтрока.ИмяМакета = ТекСтрока.Идентификатор;
НоваяСтрока.Представление = ТекСтрока.Представление;
НоваяСтрока.Картинка = 1;
НоваяСтрока.ОригиналПолученКартинка = 0;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЕсли;
НенужныеСтроки = КомплектПечатныхФорм.НайтиСтроки(
Новый Структура("Представление", НСтр("ru='Комплект документов на принтер'")));
Для Каждого НеНужнаяСтрока Из НенужныеСтроки Цикл
КомплектПечатныхФорм.Удалить(НеНужнаяСтрока);
КонецЦикла;
НенужныеСтроки = КомплектПечатныхФорм.НайтиСтроки(
Новый Структура("Представление", НСтр("ru='Комплект документов с настройкой...'")));
Для Каждого НеНужнаяСтрока Из НенужныеСтроки Цикл
КомплектПечатныхФорм.Удалить(НеНужнаяСтрока);
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьСписокПечатныхФормПоСсылке()
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| СостоянияОригиналовПервичныхДокументов.ПервичныйДокумент КАК ПервичныйДокумент,
| СостоянияОригиналовПервичныхДокументов.Состояние КАК Состояние,
| СостоянияОригиналовПервичныхДокументов.ФормаИзвне КАК Извне,
| СостоянияОригиналовПервичныхДокументов.ПервичныйДокументПредставление КАК Представление,
| СостоянияОригиналовПервичныхДокументов.ДатаПоследнегоИзменения КАК ДатаПоследнегоИзменения,
| СостоянияОригиналовПервичныхДокументов.АвторИзменения КАК АвторИзменения,
| СостоянияОригиналовПервичныхДокументов.Сотрудник КАК Сотрудник
|ИЗ
| РегистрСведений.СостоянияОригиналовПервичныхДокументов КАК СостоянияОригиналовПервичныхДокументов
|ГДЕ
| НЕ СостоянияОригиналовПервичныхДокументов.ОбщееСостояние
| И СостоянияОригиналовПервичныхДокументов.Владелец = &Ссылка";
Запрос.УстановитьПараметр("Ссылка", Запись.Владелец);
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
НоваяСтрока = КомплектПечатныхФорм.Добавить();
НоваяСтрока.ИмяМакета = Выборка.ПервичныйДокумент;
НоваяСтрока.Представление = Выборка.Представление;
НоваяСтрока.Состояние = Выборка.Состояние;
НоваяСтрока.Извне = Выборка.Извне;
НоваяСтрока.ДатаПоследнегоИзменения = Выборка.ДатаПоследнегоИзменения;
НоваяСтрока.АвторИзменения = Выборка.АвторИзменения;
НоваяСтрока.Сотрудник = Выборка.Сотрудник;
Если Выборка.Извне = Истина Тогда
НоваяСтрока.Картинка = 2;
Иначе
НоваяСтрока.Картинка = 1;
КонецЕсли;
Если Выборка.Состояние = Справочники.СостоянияОригиналовПервичныхДокументов.ОригиналПолучен Тогда
НоваяСтрока.ОригиналПолученКартинка = 1;
Иначе
НоваяСтрока.ОригиналПолученКартинка = 0;
КонецЕсли;
КонецЦикла;
КомплектПечатныхФорм.Сортировать("Представление");
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьВсеПечатныеФормы()
ЗаполнитьСписокПечатныхФормПоСсылке();
ЗаполнитьПервоначальныйСписокПечатныхФорм();
УдалитьДубликатыФорм();
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| СостоянияОригиналовПервичныхДокументов.ПервичныйДокумент КАК ПервичныйДокумент,
| СостоянияОригиналовПервичныхДокументов.ПервичныйДокументПредставление КАК Представление,
| СостоянияОригиналовПервичныхДокументов.АвторИзменения КАК АвторИзменения,
| СостоянияОригиналовПервичныхДокументов.ДатаПоследнегоИзменения КАК ДатаПоследнегоИзменения,
| СостоянияОригиналовПервичныхДокументов.Сотрудник КАК Сотрудник
|ИЗ
| РегистрСведений.СостоянияОригиналовПервичныхДокументов КАК СостоянияОригиналовПервичныхДокументов
|ГДЕ
| ТИПЗНАЧЕНИЯ(СостоянияОригиналовПервичныхДокументов.Владелец) = &Тип
| И СостоянияОригиналовПервичныхДокументов.ДатаПоследнегоИзменения МЕЖДУ &ДатаНачала И &ДатаОкончания
| И СостоянияОригиналовПервичныхДокументов.ФормаИзвне
|
|СГРУППИРОВАТЬ ПО
| СостоянияОригиналовПервичныхДокументов.ПервичныйДокумент,
| СостоянияОригиналовПервичныхДокументов.ПервичныйДокументПредставление,
| СостоянияОригиналовПервичныхДокументов.АвторИзменения,
| СостоянияОригиналовПервичныхДокументов.ДатаПоследнегоИзменения,
| СостоянияОригиналовПервичныхДокументов.Сотрудник";
Запрос.Текст = СтрЗаменить(Запрос.Текст, "&Тип","ТИП ("+ОбщегоНазначения.ИмяТаблицыПоСсылке(Запись.Владелец)+")");
Запрос.УстановитьПараметр("ДатаНачала",НачалоМесяца(НачалоДня(ТекущаяДатаСеанса())));
Запрос.УстановитьПараметр("ДатаОкончания",КонецМесяца(КонецДня(ТекущаяДатаСеанса())));
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() Цикл
НоваяСтрока = КомплектПечатныхФорм.Добавить();
НоваяСтрока.ИмяМакета = Выборка.ПервичныйДокумент;
НоваяСтрока.Представление = Выборка.Представление;
НоваяСтрока.Извне = Истина;
НоваяСтрока.Картинка = 2;
НоваяСтрока.ОригиналПолученКартинка = 0;
НоваяСтрока.ДатаПоследнегоИзменения = Выборка.ДатаПоследнегоИзменения;
НоваяСтрока.АвторИзменения = Выборка.АвторИзменения;
НоваяСтрока.Сотрудник = Выборка.Сотрудник;
КонецЦикла;
УдалитьДубликатыФорм();
КонецПроцедуры
&НаСервере
Процедура ОчиститьНеОтслеживаемые()
Отбор = Новый Структура("Состояние", ПредопределенноеЗначение("Справочник.СостоянияОригиналовПервичныхДокументов.ПустаяСсылка"));
Для Каждого ПечатнаяФорма Из КомплектПечатныхФорм.НайтиСтроки(Отбор) Цикл
КомплектПечатныхФорм.Удалить(ПечатнаяФорма);
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура УдалитьДубликатыФорм()
УдаляемыеПечатныеФормы = Новый Массив;
Для Каждого ПечатнаяФорма Из КомплектПечатныхФорм Цикл
ТабличнаяЧасть = УчетОригиналовПервичныхДокументов.ТабличнаяЧастьССотрудниками(Запись.Владелец);
Если ТабличнаяЧасть <> "" Тогда
Отбор = Новый Структура("Представление", ПечатнаяФорма.Представление);
Иначе
Отбор = Новый Структура("ИмяМакета", ПечатнаяФорма.ИмяМакета);
КонецЕсли;
НайденныеДубли = КомплектПечатныхФорм.НайтиСтроки(Отбор);
Если НайденныеДубли.Количество() > 1 Тогда
НайденныеДубли.Удалить(0);
ОбщегоНазначенияКлиентСервер.ДополнитьМассив(УдаляемыеПечатныеФормы, НайденныеДубли, Истина);
КонецЕсли;
КонецЦикла;
Для каждого ПечатнаяФорма Из УдаляемыеПечатныеФормы Цикл
КомплектПечатныхФорм.Удалить(ПечатнаяФорма);
КонецЦикла;
КонецПроцедуры
#КонецОбласти
&НаСервере
Процедура ПоказатьВсеНаСервере()
Элементы.ПоказатьВсе.Пометка = Истина;
Элементы.ПоказатьОтслеживаемые.Пометка = Ложь;
ФильтрПечатныхФорм = "Все";
ОчиститьНеОтслеживаемые();
ЗаполнитьВсеПечатныеФормы();
КонецПроцедуры
&НаСервере
Процедура ПоказатьОтслеживаемыеНаСервере()
Элементы.ПоказатьВсе.Пометка = Ложь;
Элементы.ПоказатьОтслеживаемые.Пометка = Истина;
ФильтрПечатныхФорм = "Отслеживаемые";
ОчиститьНеОтслеживаемые();
ЗаполнитьСписокПечатныхФормПоСсылке();
УдалитьДубликатыФорм();
КонецПроцедуры
&НаСервере
Процедура УстановитьФильтрПечатныхФорм()
Если ФильтрПечатныхФорм = "Отслеживаемые" Тогда
ПоказатьОтслеживаемыеНаСервере();
Иначе
ПоказатьВсеНаСервере();
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура УстановитьСсылкуНаОригинал()
СведенияОДокументе = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Запись.Владелец, "Номер, Дата");
ТипДокумента = ОбщегоНазначения.ПредставлениеОбъекта(Запись.Владелец.Метаданные());
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПрефиксацияОбъектов") Тогда
НомерНаПечать = ПрефиксацияОбъектовКлиентСервер.НомерНаПечать(СведенияОДокументе.Номер, Истина, Истина);
Иначе
СсылкаНаДокумент = Строка(Запись.Владелец);
Возврат;
КонецЕсли;
Если Не ЗначениеЗаполнено(НомерНаПечать) И Не ЗначениеЗаполнено(СведенияОДокументе.Дата) Тогда
СсылкаНаДокумент = ТипДокумента;
Возврат;
КонецЕсли;
Если ЗначениеЗаполнено(НомерНаПечать) И ЗначениеЗаполнено(СведенияОДокументе.Дата) Тогда
СсылкаНаДокумент = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='%1 № %2 от %3'"),
ТипДокумента, НомерНаПечать, Формат(СведенияОДокументе.Дата, НСтр("ru='ДЛФ=DD'")));
ИначеЕсли ЗначениеЗаполнено(НомерНаПечать) И Не ЗначениеЗаполнено(СведенияОДокументе.Дата) Тогда
СсылкаНаДокумент = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='%1 № %2'"), ТипДокумента,
НомерНаПечать);
Иначе
СсылкаНаДокумент = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru='%1 от %2'"),
ТипДокумента, Формат(СведенияОДокументе.Дата, НСтр("ru='ДЛФ=DD'")));
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура УстановитьОбщееСостояние()
КоличествоЗаписываемых = 0;
Для Каждого ПечатнаяФорма Из КомплектПечатныхФорм Цикл
Если ЗначениеЗаполнено(ПечатнаяФорма.Состояние) Тогда
КоличествоЗаписываемых = КоличествоЗаписываемых + 1;
КонецЕсли;
КонецЦикла;
Для Каждого ПечатнаяФорма Из КомплектПечатныхФорм Цикл
Если ЗначениеЗаполнено(ПечатнаяФорма.Состояние) Тогда
Отбор = Новый Структура("Состояние",ПечатнаяФорма.Состояние);
НайденныеСтроки = КомплектПечатныхФорм.НайтиСтроки(Отбор);
Если НайденныеСтроки.Количество() = КомплектПечатныхФорм.Количество() Или КоличествоЗаписываемых = 1 Тогда
Запись.Состояние = ПечатнаяФорма.Состояние;
Иначе
Запись.Состояние = ПредопределенноеЗначение("Справочник.СостоянияОригиналовПервичныхДокументов.ОригиналыНеВсе");
КонецЕсли;
Прервать;
КонецЕсли;
КонецЦикла
КонецПроцедуры
&НаСервере
Процедура ЗаписатьСостоянияОригиналовПервичныхДокументов()
Блокировка = Новый БлокировкаДанных();
ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.СостоянияОригиналовПервичныхДокументов");
ЭлементБлокировки.УстановитьЗначение("Владелец", Запись.Владелец);
НачатьТранзакцию();
Попытка
Блокировка.Заблокировать();
НаборЗаписей = РегистрыСведений.СостоянияОригиналовПервичныхДокументов.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Владелец.Установить(Запись.Владелец);
ИмяТабличнойЧасти = УчетОригиналовПервичныхДокументов.ТабличнаяЧастьССотрудниками(Запись.Владелец);
Для Каждого ПечатнаяФорма Из КомплектПечатныхФорм Цикл
Если ЗначениеЗаполнено(ПечатнаяФорма.Состояние) Тогда
Если ИмяТабличнойЧасти <> "" Тогда
НаборЗаписей.Отбор.Сотрудник.Установить(ПечатнаяФорма.Сотрудник);
КонецЕсли;
НаборЗаписей.Отбор.ПервичныйДокумент.Установить(ПечатнаяФорма.ИмяМакета);
НаборЗаписей.Прочитать();
Если НаборЗаписей.Количество() > 0 Тогда
Если НаборЗаписей[0].Состояние <> ПечатнаяФорма.Состояние Тогда
УчетОригиналовПервичныхДокументов.ЗаписатьСостояниеОригиналаДокументаПоПечатнымФормам(Запись.Владелец,
ПечатнаяФорма.ИмяМакета, ПечатнаяФорма.Представление, ПечатнаяФорма.Состояние, ПечатнаяФорма.Извне, ПечатнаяФорма.Сотрудник);
КонецЕсли;
Иначе
УчетОригиналовПервичныхДокументов.ЗаписатьСостояниеОригиналаДокументаПоПечатнымФормам(Запись.Владелец,
ПечатнаяФорма.ИмяМакета, ПечатнаяФорма.Представление, ПечатнаяФорма.Состояние, ПечатнаяФорма.Извне, ПечатнаяФорма.Сотрудник);
КонецЕсли;
КонецЕсли;
КонецЦикла;
УчетОригиналовПервичныхДокументов.ЗаписатьОбщееСостояниеОригиналаДокумента(Запись.Владелец,
Запись.Состояние);
ЗафиксироватьТранзакцию();
Исключение
ОтменитьТранзакцию();
ВызватьИсключение;
КонецПопытки;
КонецПроцедуры
&НаСервере
Процедура ВосстановитьНастройки(ВосстанавливатьФильтр)
Настройки = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить(
"РегистрСведений.СостоянияОригиналовПервичныхДокументов.Форма.ИзменениеСостоянийОригиналовПервичныхДокументов",
"ФильтрПечатныхФорм");
Если ВосстанавливатьФильтр Тогда
Если ТипЗнч(Настройки) = Тип("Структура") Тогда
ФильтрПечатныхФорм = Настройки.ФильтрПечатныхФорм;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура СохранитьНастройки()
ИменаСохраняемыхРеквизитов = "ФильтрПечатныхФорм";
Настройки = Новый Структура(ИменаСохраняемыхРеквизитов);
ЗаполнитьЗначенияСвойств(Настройки, ЭтотОбъект);
ОбщегоНазначения.ХранилищеОбщихНастроекСохранить(
"РегистрСведений.СостоянияОригиналовПервичныхДокументов.Форма.ИзменениеСостоянийОригиналовПервичныхДокументов",
"ФильтрПечатныхФорм", Настройки);
КонецПроцедуры
#КонецОбласти