#Область ОписаниеПеременных
&НаКлиенте
Перем ПолучательПеретаскиваемогоЗначения, АдресПараметровДляОбработкиОжидания;
#КонецОбласти
#Область ОбработчикиСобытийФормы
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда
ВызватьИсключение НСтр("ru = 'Редактирование табличного документа недоступно в мобильном клиенте.
|Используйте тонкий клиент или веб-клиент.'");
КонецЕсли;
Если Параметры.РежимОткрытияОкна <> Неопределено Тогда
РежимОткрытияОкна = Параметры.РежимОткрытияОкна;
КонецЕсли;
ТабличныйДокумент.КодЯзыка = ОбщегоНазначения.КодОсновногоЯзыка();
ИдентификаторМакета = Параметры.ИмяОбъектаМетаданныхМакета;
СсылкаМакета = Параметры.Ссылка;
Если ЗначениеЗаполнено(СсылкаМакета) Тогда
КлючОбъектаРедактирования = СсылкаМакета;
ЗаблокироватьДанныеДляРедактирования(КлючОбъектаРедактирования,, УникальныйИдентификатор);
ИначеЕсли ЗначениеЗаполнено(ИдентификаторМакета) Тогда
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Печать") Тогда
МодульУправлениеПечатью = ОбщегоНазначения.ОбщийМодуль("УправлениеПечатью");
КлючОбъектаРедактирования = МодульУправлениеПечатью.ПолучитьКлючЗаписиМакета(ИдентификаторМакета);
Если КлючОбъектаРедактирования <> Неопределено Тогда
ЗаблокироватьДанныеДляРедактирования(КлючОбъектаРедактирования,, УникальныйИдентификатор);
КонецЕсли;
КонецЕсли;
КонецЕсли;
ЭтоПечатнаяФорма = Параметры.ЭтоПечатнаяФорма;
ЭтоМакет = Не ПустаяСтрока(ИдентификаторМакета) Или ЭтоПечатнаяФорма;
ТабличныйДокумент.Макет = ЭтоМакет;
Элементы.КнопкаПоказатьСкрытьОригинал.Видимость = ЭтоМакет;
Элементы.КнопкаПоказатьСкрытьОригиналВсеДействия.Видимость = ЭтоМакет;
Элементы.УдалитьШтампЭП.Видимость = ЭтоМакет;
МакетДляВыгрузкиОбъекта = Параметры.МакетДляВыгрузкиОбъекта;
ФорматСохраненияВыгрузки = Параметры.ФорматСохраненияВыгрузки;
Если МакетДляВыгрузкиОбъекта
И НЕ ЗначениеЗаполнено(ФорматСохраненияВыгрузки) Тогда
ФорматСохраненияВыгрузки = Перечисления.ФорматыВыгрузкиОбъектов.XLSX;
КонецЕсли;
Элементы.ФорматСохраненияВыгрузки.Видимость = МакетДляВыгрузкиОбъекта;
Элементы.ТекстНазначение.Доступность = НЕ МакетДляВыгрузкиОбъекта;
Элементы.ЗаголовокНазначение.Доступность = НЕ МакетДляВыгрузкиОбъекта;
ФорматыВыгрузкиСОбластями = ФорматыВыгрузкиТребующиеНаличиеОбластей();
ВыводитьКомандыИменОбластей =
(МакетДляВыгрузкиОбъекта
И ФорматыВыгрузкиСОбластями.Найти(ФорматСохраненияВыгрузки) <> Неопределено);
Элементы.НазначитьИмя.Видимость = ВыводитьКомандыИменОбластей;
Элементы.УдалитьИмя.Видимость = ВыводитьКомандыИменОбластей;
Если ЭтоМакет Тогда
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Печать") Тогда
МодульУправлениеПечатью = ОбщегоНазначения.ОбщийМодуль("УправлениеПечатью");
ИсточникиДанныхМакета = МодульУправлениеПечатью.ИсточникиДанныхМакета(ИдентификаторМакета);
Для Каждого ИсточникДанных Из ИсточникиДанныхМакета Цикл
ИсточникиДанных.Добавить(ИсточникДанных);
КонецЦикла;
КонецЕсли;
КонецЕсли;
Если ЗначениеЗаполнено(Параметры.ИсточникДанных) Тогда
Если Не ЗначениеЗаполнено(ИсточникиДанных) Тогда
ИсточникиДанных.Добавить(Параметры.ИсточникДанных);
КонецЕсли;
КонецЕсли;
Элементы.ТекстНазначение.Заголовок = ПредставлениеИсточниковДанных(ИсточникиДанных);
ИмяДокумента = Параметры.ИмяДокумента;
ОсновнаяПечатнаяФорма = Параметры.ОсновнаяПечатнаяФорма;
НаименованиеПечатнойФормы = Параметры.НаименованиеПечатнойФормы;
Элементы.ИзменитьНастройкиМакета.Видимость = ЗначениеЗаполнено(Параметры.Ссылка)
Или ПустаяСтрока(ИдентификаторМакета) И ПустаяСтрока(Параметры.ПутьКФайлу);
Элементы.УдалитьЯзыкМакета.Видимость = Не ЗначениеЗаполнено(Параметры.Ссылка) И ПустаяСтрока(Параметры.ПутьКФайлу);
Если Параметры.ТабличныйДокумент = Неопределено Тогда
Если Не ПустаяСтрока(ИдентификаторМакета) Тогда
РедактированиеЗапрещено = Не Параметры.Редактирование;
ЗагрузитьТабличныйДокументИзМетаданных(Параметры.КодЯзыка);
Если Параметры.Копирование Тогда
ИдентификаторКопируемогоМакета = ИдентификаторМакета;
ИдентификаторМакета = "";
КонецЕсли;
КонецЕсли;
ИначеЕсли ТипЗнч(Параметры.ТабличныйДокумент) = Тип("ТабличныйДокумент") Тогда
ЗаполнитьТабличныйДокумент(ТабличныйДокумент, Параметры.ТабличныйДокумент);
Иначе
ТабличныйДокумент.КодЯзыка = Неопределено;
ДвоичныеДанные = ПолучитьИзВременногоХранилища(Параметры.ТабличныйДокумент);
ИмяВременногоФайла = ПолучитьИмяВременногоФайла("mxl");
ДвоичныеДанные.Записать(ИмяВременногоФайла);
ТабличныйДокумент.Прочитать(ИмяВременногоФайла);
УдалитьФайлы(ИмяВременногоФайла);
КонецЕсли;
Элементы.ТабличныйДокумент.Редактирование = Параметры.Редактирование;
Элементы.ТабличныйДокумент.ОтображатьГруппировки = Истина;
Элементы.ТабличныйДокумент.ОтображатьИменаСтрокИКолонок = ТабличныйДокумент.Макет;
Элементы.ТабличныйДокумент.ОтображатьИменаЯчеек = ТабличныйДокумент.Макет;
Элементы.Предупреждение.Видимость = ЭтоМакет И Не ЭтоПечатнаяФорма И Параметры.Редактирование;
Элементы.РедактироватьВоВнешнейПрограмме.Видимость = ОбщегоНазначения.ЭтоВебКлиент()
И Не ПустаяСтрока(ИдентификаторМакета) И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Печать");
ДоступенПереводМакета = Ложь;
Если ЭтоМакет Тогда
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Мультиязычность.Печать") Тогда
МодульУправлениеПечатьюМультиязычность = ОбщегоНазначения.ОбщийМодуль("УправлениеПечатьюМультиязычность");
ДоступенПереводМакета = МодульУправлениеПечатьюМультиязычность.ДоступенПереводМакета(ИдентификаторМакета);
Если ЭтоПечатнаяФорма Или МодульУправлениеПечатьюМультиязычность.ДоступенПереводМакета(ИдентификаторМакета) Тогда
МодульУправлениеПечатьюМультиязычность.ЗаполнитьПодменюЯзык(ЭтотОбъект, Параметры.КодЯзыка);
ДоступенАвтоматическийПеревод = МодульУправлениеПечатьюМультиязычность.ДоступенАвтоматическийПеревод(ТекущийЯзык);
КонецЕсли;
КонецЕсли;
КонецЕсли;
Элементы.Язык.Доступность = (ЭтоПечатнаяФорма Или ДоступенПереводМакета) И ЗначениеЗаполнено(ИдентификаторМакета);
Элементы.ЯзыкВсеДействия.Доступность = Элементы.Язык.Доступность;
Элементы.Перевести.Видимость = ДоступенАвтоматическийПеревод;
Элементы.ПеревестиВсеДействия.Видимость = Элементы.Перевести.Видимость;
Если ОбщегоНазначения.ЭтоМобильныйКлиент() Тогда
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "КоманднаяПанель", "Видимость", Ложь);
ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "Предупреждение", "Видимость", Ложь);
КонецЕсли;
Если ЭтоПечатнаяФорма И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонструкторФормул") Тогда
МодульКонструкторФормул = ОбщегоНазначения.ОбщийМодуль("КонструкторФормул");
ИсточникДанных = Параметры.ИсточникДанных;
Если Не ЗначениеЗаполнено(Параметры.ИсточникДанных) Тогда
ИсточникДанных = ИсточникиДанных[0].Значение;
КонецЕсли;
ОбъектМетаданных = ОбщегоНазначения.ОбъектМетаданныхПоИдентификатору(ИсточникДанных);
ПодобратьОбразец(ОбъектМетаданных);
Элементы.Редактирование.Видимость = Ложь;
ЦветФонаВыделенияПоля = ЦветаСтиля.ЦветНавигации;
Элементы.ТекстДляКопирования.Видимость = ОбщегоНазначения.ЭтоВебКлиент();
ПараметрыДобавления = МодульКонструкторФормул.ПараметрыДобавленияСпискаПолей();
ПараметрыДобавления.ИмяСписка = ИмяСпискаПолей();
ПараметрыДобавления.МестоРазмещенияСписка = Элементы.ГруппаДоступныеПоля;
ПараметрыДобавления.КоллекцииПолей = КоллекцииПолей(ИсточникиДанных.ВыгрузитьЗначения(), ПараметрыРедактирования());
ПараметрыДобавления.ПодсказкаВводаСтрокиПоиска = ПодсказкаВводаСтрокиПоискаСпискаПолей();
ПараметрыДобавления.ПриОпределенииИсточниковДоступныхПолей = "УправлениеПечатью";
ПараметрыДобавления.ОбработчикиСписка.Вставить("Выбор", "Подключаемый_СписокПолейВыбор");
ПараметрыДобавления.ОбработчикиСписка.Вставить("ПередНачаломИзменения", "Подключаемый_ДоступныеПоляПередНачаломИзменения");
ПараметрыДобавления.ОбработчикиСписка.Вставить("ПриОкончанииРедактирования", "Подключаемый_ДоступныеПоляПриОкончанииРедактирования");
ПараметрыДобавления.ИспользоватьФоновыйПоиск = Истина;
МодульКонструкторФормул.ДобавитьСписокПолейНаФорму(ЭтотОбъект, ПараметрыДобавления);
ПараметрыДобавления = МодульКонструкторФормул.ПараметрыДобавленияСпискаПолей();
ПараметрыДобавления.ИмяСписка = ИмяСпискаОператоров();
ПараметрыДобавления.МестоРазмещенияСписка = Элементы.ГруппаОператорыИФункции;
ПараметрыДобавления.КоллекцииПолей.Добавить(СписокОператоров());
ПараметрыДобавления.ПодсказкаВводаСтрокиПоиска = НСтр("ru = 'Найти оператор или функцию...'");
ПараметрыДобавления.СкобкиПредставлений = Ложь;
ПараметрыДобавления.ОбработчикиСписка.Вставить("Выбор", "Подключаемый_СписокПолейВыбор");
ПараметрыДобавления.ОбработчикиСписка.Вставить("НачалоПеретаскивания", "Подключаемый_ОператорыНачалоПеретаскивания");
ПараметрыДобавления.ОбработчикиСписка.Вставить("ОкончаниеПеретаскивания", "Подключаемый_ОператорыОкончаниеПеретаскивания");
МодульКонструкторФормул.ДобавитьСписокПолейНаФорму(ЭтотОбъект, ПараметрыДобавления);
ЗаполнитьТабличныйДокумент(ТабличныйДокумент, ПрочитатьМакет());
ПрочитатьТекстВПолеКолонтитула(ТабличныйДокумент.ВерхнийКолонтитул.ТекстСлева, ТекстСлеваСверху);
ПрочитатьТекстВПолеКолонтитула(ТабличныйДокумент.ВерхнийКолонтитул.ТекстВЦентре, ТекстВЦентреСверху);
ПрочитатьТекстВПолеКолонтитула(ТабличныйДокумент.ВерхнийКолонтитул.ТекстСправа, ТекстСправаСверху);
ПрочитатьТекстВПолеКолонтитула(ТабличныйДокумент.НижнийКолонтитул.ТекстСлева, ТекстСлеваСнизу);
ПрочитатьТекстВПолеКолонтитула(ТабличныйДокумент.НижнийКолонтитул.ТекстВЦентре, ТекстВЦентреСнизу);
ПрочитатьТекстВПолеКолонтитула(ТабличныйДокумент.НижнийКолонтитул.ТекстСправа, ТекстСправаСнизу);
РасширитьСписокПолей();
ТабличныйДокумент.Макет = Истина;
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда
МодульРаботаСФайламиСлужебный = ОбщегоНазначения.ОбщийМодуль("РаботаСФайламиСлужебный");
ТипыПрисоединенныхФайлов = МодульРаботаСФайламиСлужебный.ТипыПрисоединенныхФайлов();
КонецЕсли;
КонецЕсли;
Если Не ЭтоПечатнаяФорма Тогда
Элементы.ПоказыватьКолонтитулы.Видимость = Ложь;
Элементы.НастройкиТекущейОбласти.Видимость = Ложь;
Элементы.КнопкаДоступныеПоля.Видимость = Ложь;
Элементы.ПосмотретьПечатнуюФорму.Видимость = Ложь;
Элементы.ПовторятьВНачалеСтраницы.Видимость = Ложь;
Элементы.ПовторятьВКонцеСтраницы.Видимость = Ложь;
КонецЕсли;
ВидимостьКнопокУправленияТекстом(ЭтотОбъект);
Элементы.ВерхнийКолонтитул.Видимость = Ложь;
Элементы.НижнийКолонтитул.Видимость = Ложь;
Элементы.ГруппаНазначениеМакета.Видимость = ЭтоПечатнаяФорма;
Элементы.ГруппаНазначениеМакета.Доступность = Параметры.ДоступноНазначение;
КонецПроцедуры
&НаКлиенте
Процедура ПриОткрытии(Отказ)
Если Не ПустаяСтрока(Параметры.ПутьКФайлу) Тогда
Файл = Новый Файл(Параметры.ПутьКФайлу);
Если ПустаяСтрока(ИмяДокумента) Тогда
ИмяДокумента = Файл.ИмяБезРасширения;
КонецЕсли;
Файл.НачатьПолучениеТолькоЧтения(Новый ОписаниеОповещения("ПриЗавершенииПолученияТолькоЧтения", ЭтотОбъект));
Возврат;
КонецЕсли;
УстановитьНачальныеНастройкиФормы();
КонецПроцедуры
&НаКлиенте
Процедура ПередЗакрытием(Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка)
Если Элементы.ПосмотретьПечатнуюФорму.Пометка Тогда
Отказ = Истина;
ПосмотретьПечатнуюФорму(Неопределено);
Возврат;
КонецЕсли;
ОписаниеОповещения = Новый ОписаниеОповещения("ПодтвердитьИЗакрыть", ЭтотОбъект);
ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Сохранить изменения в %1?'"), ИмяДокумента);
ОбщегоНазначенияКлиент.ПоказатьПодтверждениеЗакрытияФормы(ОписаниеОповещения, Отказ, ЗавершениеРаботы, ТекстВопроса);
Если Модифицированность Или ЗавершениеРаботы Тогда
Возврат;
КонецЕсли;
Если Не ЭтоНовый() Тогда
ОповеститьОЗаписиТабличногоДокумента();
КонецЕсли;
Если Не Отказ И Не ЗавершениеРаботы И ЗначениеЗаполнено(КлючОбъектаРедактирования) Тогда
РазблокироватьНаСервере();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПодтвердитьИЗакрыть(Результат = Неопределено, ДополнительныеПараметры = Неопределено) Экспорт
ОписаниеОповещения = Новый ОписаниеОповещения("ЗакрытьФормуПослеЗаписиТабличногоДокумента", ЭтотОбъект);
ЗаписатьТабличныйДокумент(ОписаниеОповещения);
КонецПроцедуры
&НаКлиенте
Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
Если ИмяСобытия = "ЗапросИменРедактируемыхТабличныхДокументов" И Источник <> ЭтотОбъект Тогда
ИменаДокументов = Параметр;
ИменаДокументов.Добавить(ИмяДокумента);
ИначеЕсли ИмяСобытия = "ЗакрытиеФормыВладельца" И Источник = ВладелецФормы Тогда
Закрыть();
Если Открыта() Тогда
Параметр.Отказ = Истина;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиСобытийЭлементовШапкиФормы
&НаКлиенте
Процедура ТабличныйДокументПриАктивизации(Элемент)
ОбновитьПометкиКнопокКоманднойПанели();
СинхронизироватьОбластьПросмотраМакетов();
ПодключитьОбработчикОжидания("ОчиститьПодсветку", 0.1, Истина);
ПодключитьОбработчикОжидания("ОбновитьОбластьНастройкиВыбранныхЯчеек", 0.1, Истина);
КонецПроцедуры
&НаКлиенте
Процедура ПоставляемыйМакетПриАктивизации(Элемент)
СинхронизироватьОбластьПросмотраМакетов();
КонецПроцедуры
&НаКлиенте
Процедура ВладельцыМакетаНажатие(Элемент)
ПараметрыПодбора = СтандартныеПодсистемыКлиентСервер.ПараметрыВыбораОбъектовМетаданных();
ПараметрыПодбора.ВыбранныеОбъектыМетаданных = ОбщегоНазначенияКлиент.СкопироватьРекурсивно(ИсточникиДанных);
ПараметрыПодбора.ВыбиратьСсылки = Истина;
ПараметрыПодбора.Заголовок = НСтр("ru = 'Назначение макета'");
ПараметрыПодбора.ФильтрПоОбъектамМетаданных = ОбъектыСКомандамиПечати();
ОписаниеОповещения = Новый ОписаниеОповещения("ПриВыбореВладельцевМакета", ЭтотОбъект);
СтандартныеПодсистемыКлиент.ВыбратьОбъектыМетаданных(ПараметрыПодбора, ОписаниеОповещения);
КонецПроцедуры
&НаКлиенте
Процедура ФорматСохраненияВыгрузкиПриИзменении(Элемент)
ФорматыВыгрузкиСОбластями = ФорматыВыгрузкиТребующиеНаличиеОбластей();
ВыводитьКомандыИменОбластей =
(МакетДляВыгрузкиОбъекта И ФорматыВыгрузкиСОбластями.Найти(ФорматСохраненияВыгрузки) <> Неопределено);
Элементы.НазначитьИмя.Видимость = ВыводитьКомандыИменОбластей;
Элементы.УдалитьИмя.Видимость = ВыводитьКомандыИменОбластей;
ВидимостьКнопокУправленияТекстом(ЭтотОбъект);
Модифицированность = Истина;
КонецПроцедуры
&НаКлиенте
Процедура ФорматСохраненияВыгрузкиОчистка(Элемент, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
КонецПроцедуры
#КонецОбласти
#Область ОбработчикиКомандФормы
&НаКлиенте
Процедура ЗаписатьИЗакрыть(Команда)
ОписаниеОповещения = Новый ОписаниеОповещения("ЗакрытьФормуПослеЗаписиТабличногоДокумента", ЭтотОбъект);
ЗаписатьТабличныйДокумент(ОписаниеОповещения, Истина);
КонецПроцедуры
&НаКлиенте
Процедура Записать(Команда)
ЗаписатьТабличныйДокумент();
ОповеститьОЗаписиТабличногоДокумента();
КонецПроцедуры
&НаКлиенте
Процедура Редактирование(Команда)
Элементы.ТабличныйДокумент.Редактирование = Не Элементы.ТабличныйДокумент.Редактирование;
НастроитьПредставлениеКоманд();
НастроитьОтображениеТабличногоДокумента();
КонецПроцедуры
&НаКлиенте
Процедура РедактироватьВоВнешнейПрограмме(Команда)
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.Печать") Тогда
ПараметрыОткрытия = Новый Структура;
ПараметрыОткрытия.Вставить("ТабличныйДокумент", ТабличныйДокумент);
ПараметрыОткрытия.Вставить("ИмяОбъектаМетаданныхМакета", ИдентификаторМакета);
ПараметрыОткрытия.Вставить("ИдентификаторМакета", ИдентификаторМакета);
ПараметрыОткрытия.Вставить("ТипМакета", "MXL");
ОписаниеОповещения = Новый ОписаниеОповещения("РедактироватьВоВнешнейПрограммеЗавершение", ЭтотОбъект);
МодульУправлениеПечатьюКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("УправлениеПечатьюКлиент");
МодульУправлениеПечатьюКлиент.РедактироватьМакетВоВнешнейПрограмме(ОписаниеОповещения, ПараметрыОткрытия, ЭтотОбъект);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура СохранитьВФайл(Команда)
ОчиститьПодсветку();
ДиалогВыбораФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение);
ДиалогВыбораФайла.ПолноеИмяФайла = ОбщегоНазначенияКлиентСервер.ЗаменитьНедопустимыеСимволыВИмениФайла(ИмяДокумента);
ДиалогВыбораФайла.Фильтр = НСтр("ru = 'Табличный документ'") + " (*.mxl)|*.mxl";
ОписаниеОповещения = Новый ОписаниеОповещения("ПродолжитьСохранениеВФайл", ЭтотОбъект);
ФайловаяСистемаКлиент.ПоказатьДиалогВыбора(ОписаниеОповещения, ДиалогВыбораФайла);
КонецПроцедуры
&НаКлиенте
Процедура ЗагрузитьИзФайла(Команда)
ДиалогВыбораФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
ДиалогВыбораФайла.Фильтр = НСтр("ru = 'Табличный документ'") + " (*.mxl)|*.mxl";
ДиалогВыбораФайла.МножественныйВыбор = Ложь;
ОписаниеОповещения = Новый ОписаниеОповещения("ПродолжитьЗагрузкуИзФайла", ЭтотОбъект);
ФайловаяСистемаКлиент.ПоказатьДиалогВыбора(ОписаниеОповещения, ДиалогВыбораФайла);
КонецПроцедуры
&НаКлиенте
Процедура ИзменитьШрифт(Команда)
Если Элементы.ТабличныйДокумент.ТекущаяОбласть = Неопределено Тогда
Возврат;
КонецЕсли;
ОписаниеОповещения = Новый ОписаниеОповещения("ИзменитьШрифтПродолжение", ЭтотОбъект);
ОткрытьФорму("ОбщаяФорма.ФормаВыбораШрифта",, ЭтотОбъект,,,, ОписаниеОповещения);
КонецПроцедуры
&НаКлиенте
Процедура УвеличитьРазмерШрифта(Команда)
Для Каждого Область Из СписокОбластейДляИзмененияШрифта() Цикл
Размер = Область.Шрифт.Размер;
Размер = Размер + ШагИзмененияРазмераШрифтаУвеличение(Размер);
Область.Шрифт = Новый Шрифт(Область.Шрифт,,Размер);
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура УменьшитьРазмерШрифта(Команда)
Для Каждого Область Из СписокОбластейДляИзмененияШрифта() Цикл
Размер = Область.Шрифт.Размер;
Размер = Размер - ШагИзмененияРазмераШрифтаУменьшение(Размер);
Если Размер < 1 Тогда
Размер = 1;
КонецЕсли;
Область.Шрифт = Новый Шрифт(Область.Шрифт,,Размер);
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура Зачеркивание(Команда)
УстанавливаемоеЗначение = Неопределено;
Для Каждого Область Из СписокОбластейДляИзмененияШрифта() Цикл
Если УстанавливаемоеЗначение = Неопределено Тогда
УстанавливаемоеЗначение = Не Область.Шрифт.Зачеркивание = Истина;
КонецЕсли;
Область.Шрифт = Новый Шрифт(Область.Шрифт,,,,,,УстанавливаемоеЗначение);
КонецЦикла;
ОбновитьПометкиКнопокКоманднойПанели();
КонецПроцедуры
&НаКлиенте
Процедура Перевести(Команда)
ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Выполнить автоматический перевод на %1 язык?'"), Элементы.Язык.Заголовок);
Кнопки = Новый СписокЗначений;
Кнопки.Добавить(КодВозвратаДиалога.Да, НСтр("ru = 'Выполнить перевод'"));
Кнопки.Добавить(КодВозвратаДиалога.Нет, НСтр("ru = 'Не выполнять'"));
ОписаниеОповещения = Новый ОписаниеОповещения("ПриОтветеНаВопросОПереводеМакета", ЭтотОбъект);
ПоказатьВопрос(ОписаниеОповещения, ТекстВопроса, Кнопки);
КонецПроцедуры
&НаКлиенте
Процедура ТекстСлеваСверхуПриИзменении(Элемент)
ТабличныйДокумент.ВерхнийКолонтитул.ТекстСлева = ТекстСлеваСверху.ПолучитьФорматированнуюСтроку();
УстановитьВыводКолонтитула(ТабличныйДокумент.ВерхнийКолонтитул);
Модифицированность = Истина;
ПолучательПеретаскиваемогоЗначения = Элемент;
КонецПроцедуры
&НаКлиенте
Процедура ТекстВЦентреСверхуПриИзменении(Элемент)
ТабличныйДокумент.ВерхнийКолонтитул.ТекстВЦентре = ТекстВЦентреСверху.ПолучитьФорматированнуюСтроку();
УстановитьВыводКолонтитула(ТабличныйДокумент.ВерхнийКолонтитул);
Модифицированность = Истина;
ПолучательПеретаскиваемогоЗначения = Элемент;
КонецПроцедуры
&НаКлиенте
Процедура ТекстСправаСверхуПриИзменении(Элемент)
ТабличныйДокумент.ВерхнийКолонтитул.ТекстСправа = ТекстСправаСверху.ПолучитьФорматированнуюСтроку();
УстановитьВыводКолонтитула(ТабличныйДокумент.ВерхнийКолонтитул);
Модифицированность = Истина;
ПолучательПеретаскиваемогоЗначения = Элемент;
КонецПроцедуры
&НаКлиенте
Процедура ТекстСлеваСнизуПриИзменении(Элемент)
ТабличныйДокумент.НижнийКолонтитул.ТекстСлева = ТекстСлеваСнизу.ПолучитьФорматированнуюСтроку();
УстановитьВыводКолонтитула(ТабличныйДокумент.НижнийКолонтитул);
Модифицированность = Истина;
ПолучательПеретаскиваемогоЗначения = Элемент;
КонецПроцедуры
&НаКлиенте
Процедура ТекстВЦентреСнизуПриИзменении(Элемент)
ТабличныйДокумент.НижнийКолонтитул.ТекстВЦентре = ТекстВЦентреСнизу.ПолучитьФорматированнуюСтроку();
УстановитьВыводКолонтитула(ТабличныйДокумент.НижнийКолонтитул);
Модифицированность = Истина;
ПолучательПеретаскиваемогоЗначения = Элемент;
КонецПроцедуры
&НаКлиенте
Процедура ТекстСправаСнизуПриИзменении(Элемент)
ТабличныйДокумент.НижнийКолонтитул.ТекстСправа = ТекстСправаСнизу.ПолучитьФорматированнуюСтроку();
УстановитьВыводКолонтитула(ТабличныйДокумент.НижнийКолонтитул);
Модифицированность = Истина;
ПолучательПеретаскиваемогоЗначения = Элемент;
КонецПроцедуры
&НаКлиенте
Процедура ВыровнятьПоВерхнемуКраю(Команда)
Для Каждого Область Из СписокОбластейДляИзмененияШрифта() Цикл
Область.ВертикальноеПоложение = ВертикальноеПоложение.Верх;
КонецЦикла;
ОбновитьПометкиКнопокКоманднойПанели();
КонецПроцедуры
&НаКлиенте
Процедура ВыровнятьПоСередине(Команда)
Для Каждого Область Из СписокОбластейДляИзмененияШрифта() Цикл
Область.ВертикальноеПоложение = ВертикальноеПоложение.Центр;
КонецЦикла;
ОбновитьПометкиКнопокКоманднойПанели();
КонецПроцедуры
&НаКлиенте
Процедура ВыровнятьПоНижнемуКраю(Команда)
Для Каждого Область Из СписокОбластейДляИзмененияШрифта() Цикл
Область.ВертикальноеПоложение = ВертикальноеПоложение.Низ;
КонецЦикла;
ОбновитьПометкиКнопокКоманднойПанели();
КонецПроцедуры
&НаКлиенте
Процедура ИзменитьНастройкиМакета(Команда)
СтруктураПараметров = Новый Структура;
СтруктураПараметров.Вставить("НаименованиеМакета", ИмяДокумента);
СтруктураПараметров.Вставить("ИдентификаторМакета", ИдентификаторМакета);
СтруктураПараметров.Вставить("КодЯзыка", ТекущийЯзык);
СтруктураПараметров.Вставить("ВладелецМакета", Образец);
ПриИзмененииНастроекМакета(СтруктураПараметров);
КонецПроцедуры
&НаКлиенте
Процедура ИзменитьЦветГраницы(Команда)
ОписаниеОповещения = Новый ОписаниеОповещения("ЗавершениеИзменитьЦветГраницы", ЭтотОбъект);
ОткрытьФорму("ОбщаяФорма.ФормаВыбораЦвета",, ЭтотОбъект,,,, ОписаниеОповещения);
КонецПроцедуры
&НаКлиенте
Процедура ИзменитьЦветТекста(Команда)
ОписаниеОповещения = Новый ОписаниеОповещения("ЗавершениеИзменитьЦветТекста", ЭтотОбъект);
ОткрытьФорму("ОбщаяФорма.ФормаВыбораЦвета",, ЭтотОбъект,,,, ОписаниеОповещения);
КонецПроцедуры
&НаКлиенте
Процедура ИзменитьЦветФона(Команда)
ОписаниеОповещения = Новый ОписаниеОповещения("ЗавершениеИзменитьЦветФона", ЭтотОбъект);
ОткрытьФорму("ОбщаяФорма.ФормаВыбораЦвета",, ЭтотОбъект,,,, ОписаниеОповещения);
КонецПроцедуры
&НаКлиенте
Процедура РазмещениеАвто(Команда)
Для Каждого Область Из СписокОбластейДляИзмененияШрифта() Цикл
Область.РазмещениеТекста = ТипРазмещенияТекстаТабличногоДокумента.Авто;
КонецЦикла;
ОбновитьПометкиКнопокКоманднойПанели();
КонецПроцедуры
&НаКлиенте
Процедура РазмещениеЗабивать(Команда)
Для Каждого Область Из СписокОбластейДляИзмененияШрифта() Цикл
Область.РазмещениеТекста = ТипРазмещенияТекстаТабличногоДокумента.Забивать;
КонецЦикла;
ОбновитьПометкиКнопокКоманднойПанели();
КонецПроцедуры
&НаКлиенте
Процедура РазмещениеОбрезать(Команда)
Для Каждого Область Из СписокОбластейДляИзмененияШрифта() Цикл
Область.РазмещениеТекста = ТипРазмещенияТекстаТабличногоДокумента.Обрезать;
КонецЦикла;
ОбновитьПометкиКнопокКоманднойПанели();
КонецПроцедуры
&НаКлиенте
Процедура РазмещениеПереносить(Команда)
Для Каждого Область Из СписокОбластейДляИзмененияШрифта() Цикл
Область.РазмещениеТекста = ТипРазмещенияТекстаТабличногоДокумента.Переносить;
КонецЦикла;
ОбновитьПометкиКнопокКоманднойПанели();
КонецПроцедуры
#КонецОбласти
#Область СлужебныеПроцедурыИФункции
&НаСервере
Процедура ЗагрузитьТабличныйДокументИзМетаданных(Знач КодЯзыка = Неопределено)
ТребуетсяПеревод = Ложь;
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Печать") Тогда
МодульУправлениеПечатью = ОбщегоНазначения.ОбщийМодуль("УправлениеПечатью");
МакетПечатнойФормы = МодульУправлениеПечатью.МакетПечатнойФормы(ИдентификаторМакета, КодЯзыка);
ЗаполнитьТабличныйДокумент(ТабличныйДокумент, МакетПечатнойФормы);
Если Не ЗначениеЗаполнено(СсылкаМакета) Тогда
ПоставляемыйМакет = МодульУправлениеПечатью.ПоставляемыйМакет(ИдентификаторМакета, КодЯзыка);
КонецЕсли;
КонецЕсли;
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Мультиязычность.Печать") Тогда
МодульУправлениеПечатьюМультиязычность = ОбщегоНазначения.ОбщийМодуль("УправлениеПечатьюМультиязычность");
Если ЗначениеЗаполнено(КодЯзыка) Тогда
ДоступныеЯзыкиТабличногоДокумента = МодульУправлениеПечатьюМультиязычность.ЯзыкиМакета(ИдентификаторМакета);
ТребуетсяПеревод = ДоступныеЯзыкиТабличногоДокумента.Найти(КодЯзыка) = Неопределено;
КонецЕсли;
Если КодЯзыка <> "" Тогда
ЯзыкиМакета = МодульУправлениеПечатьюМультиязычность.ЯзыкиМакета(ИдентификаторМакета);
Модифицированность = Модифицированность Или (ЯзыкиМакета.Найти(КодЯзыка) = Неопределено);
КонецЕсли;
ДоступенАвтоматическийПеревод = МодульУправлениеПечатьюМультиязычность.ДоступенАвтоматическийПеревод(ТекущийЯзык);
Элементы.Перевести.Видимость = ДоступенАвтоматическийПеревод;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура УстановитьВыводКолонтитула(Колонтитул)
Колонтитул.Выводить = Не ПустаяСтрока(Колонтитул.ТекстСлева) Или Не ПустаяСтрока(Колонтитул.ТекстСправа) Или Не ПустаяСтрока(Колонтитул.ТекстВЦентре);
Колонтитул.НачальнаяСтраница = 1;
КонецПроцедуры
&НаКлиенте
Процедура НастроитьОтображениеТабличногоДокумента()
Элементы.ТабличныйДокумент.ОтображатьЗаголовки = Элементы.ТабличныйДокумент.Редактирование;
Элементы.ТабличныйДокумент.ОтображатьСетку = Элементы.ТабличныйДокумент.Редактирование;
КонецПроцедуры
&НаКлиенте
Процедура ОбновитьПометкиКнопокКоманднойПанели();
#Если Не ВебКлиент И НЕ МобильныйКлиент Тогда
Область = Элементы.ТабличныйДокумент.ТекущаяОбласть;
Если ТипЗнч(Область) <> Тип("ОбластьЯчеекТабличногоДокумента") Тогда
Возврат;
КонецЕсли;
Шрифт = Область.Шрифт;
Элементы.ТабличныйДокументЖирный.Пометка = Шрифт <> Неопределено И Шрифт.Полужирный = Истина;
Элементы.ТабличныйДокументНаклонный.Пометка = Шрифт <> Неопределено И Шрифт.Наклонный = Истина;
Элементы.ТабличныйДокументПодчеркивание.Пометка = Шрифт <> Неопределено И Шрифт.Подчеркивание = Истина;
Элементы.ТабличныйДокументПодчеркиваниеВсеДействия.Пометка = Элементы.ТабличныйДокументЖирный.Пометка;
Элементы.ТабличныйДокументНаклонныйВсеДействия.Пометка = Элементы.ТабличныйДокументНаклонный.Пометка;
Элементы.ТабличныйДокументПодчеркиваниеВсеДействия.Пометка = Элементы.ТабличныйДокументПодчеркивание.Пометка;
Элементы.ЗачеркиваниеВсеДействия.Пометка = Шрифт <> Неопределено И Шрифт.Зачеркивание = Истина;
Элементы.ТабличныйДокументВыровнятьВлево.Пометка = Область.ГоризонтальноеПоложение = ГоризонтальноеПоложение.Лево;
Элементы.ТабличныйДокументВыровнятьПоЦентру.Пометка = Область.ГоризонтальноеПоложение = ГоризонтальноеПоложение.Центр;
Элементы.ТабличныйДокументВыровнятьВправо.Пометка = Область.ГоризонтальноеПоложение = ГоризонтальноеПоложение.Право;
Элементы.ТабличныйДокументВыровнятьПоШирине.Пометка = Область.ГоризонтальноеПоложение = ГоризонтальноеПоложение.ПоШирине;
Элементы.ТабличныйДокументВыровнятьВлевоВсеДействия.Пометка = Элементы.ТабличныйДокументВыровнятьВлево.Пометка;
Элементы.ТабличныйДокументВыровнятьПоЦентруВсеДействия.Пометка = Элементы.ТабличныйДокументВыровнятьПоЦентру.Пометка;
Элементы.ТабличныйДокументВыровнятьВправоВсеДействия.Пометка = Элементы.ТабличныйДокументВыровнятьВправо.Пометка;
Элементы.ТабличныйДокументВыровнятьПоШиринеВсеДействия.Пометка = Элементы.ТабличныйДокументВыровнятьПоШирине.Пометка;
Элементы.ВыровнятьПоВерхнемуКраю.Пометка = Область.ВертикальноеПоложение = ВертикальноеПоложение.Верх;
Элементы.ВыровнятьПоСередине.Пометка = Область.ВертикальноеПоложение = ВертикальноеПоложение.Центр;
Элементы.ВыровнятьПоНижнемуКраю.Пометка = Область.ВертикальноеПоложение = ВертикальноеПоложение.Низ;
Элементы.ВыровнятьПоВерхнемуКраюВсеДействия.Пометка = Элементы.ВыровнятьПоВерхнемуКраю.Пометка;
Элементы.ВыровнятьПоСерединеВсеДействия.Пометка = Элементы.ВыровнятьПоСередине.Пометка;
Элементы.ВыровнятьПоНижнемуКраюВсеДействия.Пометка = Элементы.ВыровнятьПоНижнемуКраю.Пометка;
Элементы.РазмещениеАвто.Пометка = (Область.РазмещениеТекста = ТипРазмещенияТекстаТабличногоДокумента.Авто);
Элементы.РазмещениеПереносить.Пометка = (Область.РазмещениеТекста = ТипРазмещенияТекстаТабличногоДокумента.Переносить);
Элементы.РазмещениеЗабивать.Пометка = (Область.РазмещениеТекста = ТипРазмещенияТекстаТабличногоДокумента.Забивать);
Элементы.РазмещениеОбрезать.Пометка = (Область.РазмещениеТекста = ТипРазмещенияТекстаТабличногоДокумента.Обрезать);
Элементы.РазмещениеАвтоЕще.Пометка = (Область.РазмещениеТекста = ТипРазмещенияТекстаТабличногоДокумента.Авто);
Элементы.РазмещениеПереноситьЕще.Пометка = (Область.РазмещениеТекста = ТипРазмещенияТекстаТабличногоДокумента.Переносить);
Элементы.РазмещениеЗабиватьЕще.Пометка = (Область.РазмещениеТекста = ТипРазмещенияТекстаТабличногоДокумента.Забивать);
Элементы.РазмещениеОбрезатьЕще.Пометка = (Область.РазмещениеТекста = ТипРазмещенияТекстаТабличногоДокумента.Обрезать);
#КонецЕсли
КонецПроцедуры
&НаКлиенте
Функция ШагИзмененияРазмераШрифтаУвеличение(Размер)
Если Размер = -1 Тогда
Возврат 10;
КонецЕсли;
Если Размер < 10 Тогда
Возврат 1;
ИначеЕсли 10 <= Размер И Размер < 20 Тогда
Возврат 2;
ИначеЕсли 20 <= Размер И Размер < 48 Тогда
Возврат 4;
ИначеЕсли 48 <= Размер И Размер < 72 Тогда
Возврат 6;
ИначеЕсли 72 <= Размер И Размер < 96 Тогда
Возврат 8;
Иначе
Возврат Окр(Размер / 10);
КонецЕсли;
КонецФункции
&НаКлиенте
Функция ШагИзмененияРазмераШрифтаУменьшение(Размер)
Если Размер = -1 Тогда
Возврат -8;
КонецЕсли;
Если Размер <= 11 Тогда
Возврат 1;
ИначеЕсли 11 < Размер И Размер <= 23 Тогда
Возврат 2;
ИначеЕсли 23 < Размер И Размер <= 53 Тогда
Возврат 4;
ИначеЕсли 53 < Размер И Размер <= 79 Тогда
Возврат 6;
ИначеЕсли 79 < Размер И Размер <= 105 Тогда
Возврат 8;
Иначе
Возврат Окр(Размер / 11);
КонецЕсли;
КонецФункции
&НаКлиенте
Функция СписокОбластейДляИзмененияШрифта()
Результат = Новый Массив;
Для Каждого ОбрабатываемаяОбласть Из Элементы.ТабличныйДокумент.ПолучитьВыделенныеОбласти() Цикл
Если ОбрабатываемаяОбласть.Шрифт <> Неопределено Тогда
Результат.Добавить(ОбрабатываемаяОбласть);
Продолжить;
КонецЕсли;
ОбрабатываемаяОбластьВерх = ОбрабатываемаяОбласть.Верх;
ОбрабатываемаяОбластьНиз = ОбрабатываемаяОбласть.Низ;
ОбрабатываемаяОбластьЛево = ОбрабатываемаяОбласть.Лево;
ОбрабатываемаяОбластьПраво = ОбрабатываемаяОбласть.Право;
Если ОбрабатываемаяОбластьВерх = 0 Тогда
ОбрабатываемаяОбластьВерх = 1;
КонецЕсли;
Если ОбрабатываемаяОбластьНиз = 0 Тогда
ОбрабатываемаяОбластьНиз = ТабличныйДокумент.ВысотаТаблицы;
КонецЕсли;
Если ОбрабатываемаяОбластьЛево = 0 Тогда
ОбрабатываемаяОбластьЛево = 1;
КонецЕсли;
Если ОбрабатываемаяОбластьПраво = 0 Тогда
ОбрабатываемаяОбластьПраво = ТабличныйДокумент.ШиринаТаблицы;
КонецЕсли;
Если ОбрабатываемаяОбласть.ТипОбласти = ТипОбластиЯчеекТабличногоДокумента.Колонки Тогда
ОбрабатываемаяОбластьВерх = ОбрабатываемаяОбласть.Низ;
ОбрабатываемаяОбластьНиз = ТабличныйДокумент.ВысотаТаблицы;
КонецЕсли;
Для НомерКолонки = ОбрабатываемаяОбластьЛево По ОбрабатываемаяОбластьПраво Цикл
ШиринаКолонки = Неопределено;
Для НомерСтроки = ОбрабатываемаяОбластьВерх По ОбрабатываемаяОбластьНиз Цикл
Ячейка = ТабличныйДокумент.Область(НомерСтроки, НомерКолонки, НомерСтроки, НомерКолонки);
Если ОбрабатываемаяОбласть.ТипОбласти = ТипОбластиЯчеекТабличногоДокумента.Колонки Тогда
Если ШиринаКолонки = Неопределено Тогда
ШиринаКолонки = Ячейка.ШиринаКолонки;
КонецЕсли;
Если Ячейка.ШиринаКолонки <> ШиринаКолонки Тогда
Продолжить;
КонецЕсли;
КонецЕсли;
Если Ячейка.Шрифт <> Неопределено Тогда
Результат.Добавить(Ячейка);
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецЦикла;
Возврат Результат;
КонецФункции
&НаКлиенте
Процедура ЗакрытьФормуПослеЗаписиТабличногоДокумента(Закрывать, ДополнительныеПараметры) Экспорт
Если Закрывать Тогда
Закрыть();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ЗаписатьТабличныйДокумент(ОбработчикЗавершения = Неопределено, ОсвободитьФайл = Ложь)
ОчиститьПодсветку();
Если МакетДляВыгрузкиОбъекта Тогда
Если НЕ ЗначениеЗаполнено(ФорматСохраненияВыгрузки) Тогда
ТекстСообщения = Нстр("ru = 'Поле ""Формат сохранения"" не заполнено'");
ОбщегоНазначенияКлиент.СообщитьПользователю(ТекстСообщения,, "ФорматСохраненияВыгрузки");
Возврат;
Иначе
ПроверитьНаличиеНеИспользуемыхСвойств(ОбработчикЗавершения, ОсвободитьФайл);
КонецЕсли;
Иначе
ЕстьСсылка = ЗначениеЗаполнено(Параметры.Ссылка);
Если ЭтоНовый() И Не ЭтоМакет И Не ЕстьСсылка Или РедактированиеЗапрещено Тогда
НачатьДиалогСохраненияФайла(ОбработчикЗавершения, ОсвободитьФайл);
Возврат;
КонецЕсли;
ЗаписатьТабличныйДокументИмяФайлаВыбрано(ОбработчикЗавершения, ОсвободитьФайл);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ЗаписатьТабличныйДокументИмяФайлаВыбрано(Знач ОбработчикЗавершения, ОсвободитьФайл)
ДополнительныеПараметры = Новый Структура;
ДополнительныеПараметры.Вставить("ОбработчикЗавершения", ОбработчикЗавершения);
ДополнительныеПараметры.Вставить("ОсвободитьФайл", ОсвободитьФайл);
Если ПустаяСтрока(Параметры.ПутьКФайлу) Тогда
АдресМакетаВоВременномХранилище = "";
ДополнительныеПараметры.Вставить("АдресМакетаВоВременномХранилище", АдресМакетаВоВременномХранилище);
ОчиститьСообщения();
Если ЗаписатьМакет(Истина, ДополнительныеПараметры.АдресМакетаВоВременномХранилище) Тогда
ПослеЗаписиТабличногоДокумента(ДополнительныеПараметры.ОбработчикЗавершения, ОсвободитьФайл);
Иначе
Если НЕ МакетДляВыгрузкиОбъекта Тогда
ОписаниеОповещения = Новый ОписаниеОповещения(
"ПродолжитьЗаписьТабличногоДокумента",
ЭтотОбъект,
ДополнительныеПараметры);
ТекстВопроса = НСтр("ru = 'Макет заполнен некорректно. Продолжить запись?'");
ПоказатьВопрос(
ОписаниеОповещения,
ТекстВопроса,
РежимДиалогаВопрос.ДаНет,
,
КодВозвратаДиалога.Нет);
КонецЕсли;
КонецЕсли;
Иначе
ТабличныйДокумент.НачатьЗапись(
Новый ОписаниеОповещения("ОбработатьРезультатЗаписиТабличногоДокумента", ЭтотОбъект, ДополнительныеПараметры),
Параметры.ПутьКФайлу);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПродолжитьЗаписьТабличногоДокумента(РезультатДиалога, ДополнительныеПараметры) Экспорт
Если РезультатДиалога = КодВозвратаДиалога.Да Тогда
ЗаписатьМакет(Ложь, ДополнительныеПараметры.АдресМакетаВоВременномХранилище);
ПослеЗаписиТабличногоДокумента(ДополнительныеПараметры.ОбработчикЗавершения, ДополнительныеПараметры.ОсвободитьФайл);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОбработатьРезультатЗаписиТабличногоДокумента(Результат, ДополнительныеПараметры) Экспорт
Если Результат <> Истина Тогда
Возврат;
КонецЕсли;
РедактированиеЗапрещено = Ложь;
ПослеЗаписиТабличногоДокумента(ДополнительныеПараметры.ОбработчикЗавершения, ДополнительныеПараметры.ОсвободитьФайл);
КонецПроцедуры
&НаКлиенте
Процедура ПослеЗаписиТабличногоДокумента(ОбработчикЗавершения, ОсвободитьФайл)
ЗаписьВыполнена = Истина;
Модифицированность = Ложь;
УстановитьЗаголовок();
СохраненныеЯзыкиМакета.Добавить(ТекущийЯзык);
Если Параметры.ОсновнаяПечатнаяФорма <> ОсновнаяПечатнаяФорма Тогда
ОбновитьПовторноИспользуемыеЗначения();
Параметры.ОсновнаяПечатнаяФорма = ОсновнаяПечатнаяФорма
КонецЕсли;
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаСФайлами") Тогда
Если ЗначениеЗаполнено(Параметры.ПрисоединенныйФайл) Тогда
МодульРаботаСФайламиСлужебныйКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("РаботаСФайламиСлужебныйКлиент");
Если ОсвободитьФайл Тогда
ПараметрыОбновленияФайла = МодульРаботаСФайламиСлужебныйКлиент.ПараметрыОбновленияФайла(
ОбработчикЗавершения, Параметры.ПрисоединенныйФайл, УникальныйИдентификатор);
МодульРаботаСФайламиСлужебныйКлиент.ЗакончитьРедактированиеСОповещением(ПараметрыОбновленияФайла);
Иначе
МодульРаботаСФайламиСлужебныйКлиент.СохранитьИзмененияФайлаСОповещением(ОбработчикЗавершения,
Параметры.ПрисоединенныйФайл, УникальныйИдентификатор);
КонецЕсли;
Возврат;
КонецЕсли;
КонецЕсли;
ВыполнитьОбработкуОповещения(ОбработчикЗавершения, Истина);
КонецПроцедуры
&НаКлиенте
Процедура НачатьДиалогСохраненияФайла(Знач ОбработчикЗавершения, ОсвободитьФайл)
Перем ДиалогСохраненияФайла, ОписаниеОповещения;
ДиалогСохраненияФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение);
ДиалогСохраненияФайла.ПолноеИмяФайла = ОбщегоНазначенияКлиентСервер.ЗаменитьНедопустимыеСимволыВИмениФайла(ИмяДокумента);
ДиалогСохраненияФайла.Фильтр = НСтр("ru = 'Табличный документ'") + " (*.mxl)|*.mxl";
ДополнительныеПараметры = Новый Структура;
ДополнительныеПараметры.Вставить("ОбработчикЗавершения", ОбработчикЗавершения);
ДополнительныеПараметры.Вставить("ОсвободитьФайл", ОсвободитьФайл);
ОписаниеОповещения = Новый ОписаниеОповещения("ПриЗавершенииДиалогаВыбораФайла", ЭтотОбъект, ДополнительныеПараметры);
ФайловаяСистемаКлиент.ПоказатьДиалогВыбора(ОписаниеОповещения, ДиалогСохраненияФайла);
КонецПроцедуры
&НаКлиенте
Процедура ПриЗавершенииДиалогаВыбораФайла(ВыбранныеФайлы, ДополнительныеПараметры) Экспорт
Если ВыбранныеФайлы = Неопределено Тогда
Возврат;
КонецЕсли;
ПолноеИмяФайла = ВыбранныеФайлы[0];
Параметры.ПутьКФайлу = ПолноеИмяФайла;
ИмяДокумента = Сред(ПолноеИмяФайла, СтрДлина(ОписаниеФайла(ПолноеИмяФайла).Путь) + 1);
Если НРег(Прав(ИмяДокумента, 4)) = ".mxl" Тогда
ИмяДокумента = Лев(ИмяДокумента, СтрДлина(ИмяДокумента) - 4);
КонецЕсли;
ЗаписатьТабличныйДокументИмяФайлаВыбрано(ДополнительныеПараметры.ОбработчикЗавершения, ДополнительныеПараметры.ОсвободитьФайл);
КонецПроцедуры
&НаКлиенте
Функция ОписаниеФайла(ПолноеИмя)
ПозицияРазделителя = СтрНайти(ПолноеИмя, ПолучитьРазделительПути(), НаправлениеПоиска.СКонца);
Имя = Сред(ПолноеИмя, ПозицияРазделителя + 1);
Путь = Лев(ПолноеИмя, ПозицияРазделителя);
ПозицияРасширения = СтрНайти(Имя, ".", НаправлениеПоиска.СКонца);
ИмяБезРасширения = Лев(Имя, ПозицияРасширения - 1);
Расширение = Сред(Имя, ПозицияРасширения + 1);
Результат = Новый Структура;
Результат.Вставить("ПолноеИмя", ПолноеИмя);
Результат.Вставить("Имя", Имя);
Результат.Вставить("Путь", Путь);
Результат.Вставить("ИмяБезРасширения", ИмяБезРасширения);
Результат.Вставить("Расширение", Расширение);
Возврат Результат;
КонецФункции
&НаКлиенте
Функция ИмяНовогоДокумента()
Возврат НСтр("ru = 'Новый'");
КонецФункции
&НаКлиенте
Процедура УстановитьЗаголовок()
Заголовок = ИмяДокумента;
Если ЗначениеЗаполнено(ТекущийЯзык) Тогда
ТекущийЯзыкПредставление = Элементы["Язык_"+ТекущийЯзык].Заголовок;
Заголовок = Заголовок + " ("+ТекущийЯзыкПредставление+")";
КонецЕсли;
Если ЭтоНовый() Тогда
Заголовок = Заголовок + " (" + НСтр("ru = 'создание'") + ")";
ИначеЕсли РедактированиеЗапрещено Тогда
Заголовок = Заголовок + " (" + НСтр("ru = 'только просмотр'") + ")";
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура НастроитьПредставлениеКоманд()
ДокументРедактируется = Элементы.ТабличныйДокумент.Редактирование;
Элементы.Редактирование.Пометка = ДокументРедактируется;
Элементы.КомандыРедактирования.Доступность = ДокументРедактируется;
Элементы.ЗаписатьИЗакрыть.Доступность = ДокументРедактируется Или Модифицированность;
Элементы.Записать.Доступность = ДокументРедактируется Или Модифицированность;
Если ДокументРедактируется И ЭтоМакет И Не ЭтоПечатнаяФорма Тогда
Элементы.Предупреждение.Видимость = Истина;
КонецЕсли;
Элементы.Редактирование.Доступность = ДокументРедактируется Или Не ЭтоМакет;
Элементы.ЗагрузитьИзФайла.Доступность = ДокументРедактируется Или Не ЭтоМакет;
Элементы.ЗачеркиваниеВсеДействия.Доступность = ДокументРедактируется Или Не ЭтоМакет;
Элементы.ТекущееЗначение.Доступность = ДокументРедактируется;
Элементы.ПоказыватьКолонтитулы.Доступность = ДокументРедактируется;
Элементы.Перевести.Доступность = ДокументРедактируется;
УстановитьДоступностьРекурсивно(Элементы.КомандыРедактирования);
УстановитьДоступностьРекурсивно(Элементы.ДобавляемыеЯзыки, ДокументРедактируется);
КонецПроцедуры
&НаКлиенте
Функция ЭтоНовый()
Возврат Не ЗначениеЗаполнено(Параметры.Ссылка) И ПустаяСтрока(ИдентификаторМакета) И ПустаяСтрока(Параметры.ПутьКФайлу);
КонецФункции
&НаКлиенте
Процедура РедактироватьВоВнешнейПрограммеЗавершение(ЗагруженныйТабличныйДокумент, ДополнительныеПараметры) Экспорт
Если ЗагруженныйТабличныйДокумент = Неопределено Тогда
Возврат;
КонецЕсли;
Модифицированность = Истина;
ОбновитьТабличныйДокумент(ЗагруженныйТабличныйДокумент);
КонецПроцедуры
&НаСервере
Процедура ОбновитьТабличныйДокумент(Знач ЗагруженныйТабличныйДокумент)
ЗаполнитьТабличныйДокумент(ТабличныйДокумент, ЗагруженныйТабличныйДокумент);
КонецПроцедуры
&НаСервереБезКонтекста
Процедура ЗаполнитьТабличныйДокумент(ТабличныйДокумент, Знач ЗагруженныйТабличныйДокумент)
Для НомерСтроки = 1 По ЗагруженныйТабличныйДокумент.ВысотаТаблицы Цикл
Для НомерКолонки = 1 По ЗагруженныйТабличныйДокумент.ШиринаТаблицы Цикл
ИсходнаяЯчейка = ЗагруженныйТабличныйДокумент.Область(НомерСтроки, НомерКолонки, НомерСтроки, НомерКолонки);
Если ИсходнаяЯчейка.Заполнение <> ТипЗаполненияОбластиТабличногоДокумента.Текст Тогда
ТабличныйДокумент = ЗагруженныйТабличныйДокумент;
Возврат;
КонецЕсли;
КонецЦикла;
КонецЦикла;
ТабличныйДокумент.Очистить();
ТабличныйДокумент.Вывести(ЗагруженныйТабличныйДокумент);
ТабличныйДокумент.ВерхнийКолонтитул.ТекстСлева = ЗагруженныйТабличныйДокумент.ВерхнийКолонтитул.ТекстСлева;
ТабличныйДокумент.ВерхнийКолонтитул.ТекстВЦентре = ЗагруженныйТабличныйДокумент.ВерхнийКолонтитул.ТекстВЦентре;
ТабличныйДокумент.ВерхнийКолонтитул.ТекстСправа = ЗагруженныйТабличныйДокумент.ВерхнийКолонтитул.ТекстСправа;
ТабличныйДокумент.НижнийКолонтитул.ТекстСлева = ЗагруженныйТабличныйДокумент.НижнийКолонтитул.ТекстСлева;
ТабличныйДокумент.НижнийКолонтитул.ТекстВЦентре = ЗагруженныйТабличныйДокумент.НижнийКолонтитул.ТекстВЦентре;
ТабличныйДокумент.НижнийКолонтитул.ТекстСправа = ЗагруженныйТабличныйДокумент.НижнийКолонтитул.ТекстСправа;
ТаблицаОбластей = ТаблицаОбластей(ЗагруженныйТабличныйДокумент);
Для Каждого ТекущаяОбласть Из ТаблицаОбластей Цикл
Область = ТабличныйДокумент.Области.Найти(ТекущаяОбласть.Имя);
Если Область = Неопределено Тогда
Продолжить;
КонецЕсли;
Если ТипЗнч(Область) = Тип("ОбластьЯчеекТабличногоДокумента")
И Область.ТипОбласти = ТипОбластиЯчеекТабличногоДокумента.Строки
Или ТипЗнч(Область) = Тип("РисунокТабличногоДокумента") Тогда
КопируемаяОбласть = ЗагруженныйТабличныйДокумент.Области.Найти(Область.Имя);
Если КопируемаяОбласть = Неопределено Тогда
Продолжить;
КонецЕсли;
Область.ПараметрРасшифровки = КопируемаяОбласть.ПараметрРасшифровки;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура УстановитьНачальныеНастройкиФормы()
Если Не ПустаяСтрока(Параметры.ПутьКФайлу) И Не РедактированиеЗапрещено Тогда
Элементы.ТабличныйДокумент.Редактирование = Истина;
КонецЕсли;
УстановитьИмяДокумента();
УстановитьЗаголовок();
НастроитьПредставлениеКоманд();
НастроитьОтображениеТабличногоДокумента();
КонецПроцедуры
&НаКлиенте
Процедура УстановитьИмяДокумента()
Если ПустаяСтрока(ИмяДокумента) Тогда
ИспользованныеИмена = Новый Массив;
Оповестить("ЗапросИменРедактируемыхТабличныхДокументов", ИспользованныеИмена, ЭтотОбъект);
Индекс = 1;
Пока ИспользованныеИмена.Найти(ИмяНовогоДокумента() + Индекс) <> Неопределено Цикл
Индекс = Индекс + 1;
КонецЦикла;
ИмяДокумента = ИмяНовогоДокумента() + Индекс;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПриЗавершенииПолученияТолькоЧтения(ТолькоЧтение, ДополнительныеПараметры) Экспорт
РедактированиеЗапрещено = ТолькоЧтение;
УстановитьНачальныеНастройкиФормы();
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ПереключитьЯзык(Команда)
Если ЭтоНовый() Тогда
Возврат;
КонецЕсли;
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.Печать") Тогда
МодульУправлениеПечатьюКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("УправлениеПечатьюКлиент");
МодульУправлениеПечатьюКлиент.ПереключитьЯзык(ЭтотОбъект, Команда);
Элементы.УдалитьЯзыкМакета.Видимость = Не ЗначениеЗаполнено(Параметры.Ссылка)
Или ТекущийЯзык <> ОбщегоНазначенияКлиент.КодОсновногоЯзыка();
Элементы.КнопкаПоказатьСкрытьОригинал.Доступность = ПоставляемыйМакет.ВысотаТаблицы > 0;
Если ЭтоПечатнаяФорма Тогда
ЗаполнитьТабличныйДокумент(ТабличныйДокумент, ПрочитатьМакет());
КонецЕсли;
Если ТекущийЯзык = ОбщегоНазначенияКлиент.КодОсновногоЯзыка() Тогда
Элементы.УдалитьЯзыкМакета.Заголовок = НСтр("ru = 'Удалить все изменения макета'");
Иначе
Элементы.УдалитьЯзыкМакета.Заголовок = НСтр("ru = 'Удалить макет на текущем языке'");
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура УдалитьЯзыкМакета(Команда)
УдалитьМакетНаТекущемЯзыке();
ЗаписьВыполнена = Истина;
ОповеститьОЗаписиТабличногоДокумента();
Элементы.УдалитьЯзыкМакета.Видимость = Не ЗначениеЗаполнено(Параметры.Ссылка)
Или ТекущийЯзык <> ОбщегоНазначенияКлиент.КодОсновногоЯзыка();
УстановитьЗаголовок();
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ПриПереключенииЯзыка(КодЯзыка, ДополнительныеПараметры) Экспорт
УстановитьЗаголовок();
ЗагрузитьТабличныйДокументИзМетаданных(КодЯзыка);
Если ТребуетсяПеревод И ДоступенАвтоматическийПеревод Тогда
ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Макет еще не переведен на %1 язык.
|Выполнить автоматический перевод?'"), Элементы.Язык.Заголовок);
Кнопки = Новый СписокЗначений;
Кнопки.Добавить(КодВозвратаДиалога.Да, НСтр("ru = 'Выполнить перевод'"));
Кнопки.Добавить(КодВозвратаДиалога.Нет, НСтр("ru = 'Не выполнять'"));
ОписаниеОповещения = Новый ОписаниеОповещения("ПриОтветеНаВопросОПереводеМакета", ЭтотОбъект);
ПоказатьВопрос(ОписаниеОповещения, ТекстВопроса, Кнопки);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПриОтветеНаВопросОПереводеМакета(Ответ, ДополнительныеПараметры) Экспорт
Если Ответ <> КодВозвратаДиалога.Да Тогда
Возврат;
КонецЕсли;
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.Мультиязычность.ПереводТекста") Тогда
ОписаниеОповещения = Новый ОписаниеОповещения("ПриЗавершенииПеревода", ЭтотОбъект);
МодульПереводТекстаНаДругиеЯзыкиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ПереводТекстаНаДругиеЯзыкиКлиент");
МодульПереводТекстаНаДругиеЯзыкиКлиент.ПеревестиТекстыТабличногоДокумента(
ТабличныйДокумент, ТекущийЯзык, ОбщегоНазначенияКлиент.КодОсновногоЯзыка(), ЭтотОбъект, ОписаниеОповещения);
КонецЕсли;
Модифицированность = Истина;
КонецПроцедуры
&НаКлиенте
Процедура ПриЗавершенииПеревода(ПереведенныйТабличныйДокумент, ДополнительныеПараметры) Экспорт
Если ТипЗнч(ПереведенныйТабличныйДокумент) = Тип("ТабличныйДокумент") Тогда
ТабличныйДокумент = ПереведенныйТабличныйДокумент;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПоказатьСкрытьОригинал(Команда)
Элементы.КнопкаПоказатьСкрытьОригинал.Пометка = Не Элементы.КнопкаПоказатьСкрытьОригинал.Пометка;
Элементы.ПоставляемыйМакет.Видимость = Элементы.КнопкаПоказатьСкрытьОригинал.Пометка;
Если Элементы.КнопкаПоказатьСкрытьОригинал.Пометка Тогда
Элементы.ТабличныйДокумент.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Авто;
Иначе
Элементы.ТабличныйДокумент.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Нет;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура СинхронизироватьОбластьПросмотраМакетов()
Если Не Элементы.ПоставляемыйМакет.Видимость Тогда
Возврат;
КонецЕсли;
УправляемыйЭлемент = Элементы.ПоставляемыйМакет;
Если ТекущийЭлемент <> Элементы.ТабличныйДокумент Тогда
УправляемыйЭлемент = Элементы.ТабличныйДокумент;
ТекущийЭлемент = Элементы.ПоставляемыйМакет;
КонецЕсли;
Область = ТекущийЭлемент.ТекущаяОбласть;
Если Область = Неопределено Тогда
Возврат;
КонецЕсли;
Если ТипЗнч(Область) = Тип("ОбластьЯчеекТабличногоДокумента") Тогда
УправляемыйЭлемент.ТекущаяОбласть = ЭтотОбъект[ТекущийЭлемент.Имя].Область(
Область.Верх, Область.Лево, Область.Низ, Область.Право);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОповеститьОЗаписиТабличногоДокумента()
ПараметрыОповещения = СтандартныеПодсистемыКлиент.НовыйПараметрОповещенияЗаписиТабличногоДокумента();
ПараметрыОповещения.ПутьКФайлу = Параметры.ПутьКФайлу;
ПараметрыОповещения.ИмяОбъектаМетаданныхМакета = ИдентификаторМакета;
ПараметрыОповещения.КодЯзыка = ТекущийЯзык;
ПараметрыОповещения.Представление = ИмяДокумента;
ПараметрыОповещения.ИсточникиДанных = ИсточникиДанных.ВыгрузитьЗначения();
ПараметрыОповещения.ОсновнаяПечатнаяФорма = ОсновнаяПечатнаяФорма;
ПараметрыОповещения.НаименованиеПечатнойФормы = НаименованиеПечатнойФормы;
ПараметрыОповещения.ФорматСохраненияВыгрузки = ФорматСохраненияВыгрузки;
ПараметрыОповещения.МакетДляВыгрузкиОбъекта = МакетДляВыгрузкиОбъекта;
Если ЗаписьВыполнена Тогда
ИмяСобытия = "Запись_ТабличныйДокумент";
Иначе
ИмяСобытия = "ОтменаРедактированияТабличногоДокумента";
КонецЕсли;
Оповестить(ИмяСобытия, ПараметрыОповещения, ЭтотОбъект);
ЗаписьВыполнена = Ложь;
КонецПроцедуры
&НаСервере
Процедура РазблокироватьНаСервере()
РазблокироватьДанныеДляРедактирования(КлючОбъектаРедактирования, УникальныйИдентификатор);
КонецПроцедуры
&НаКлиенте
Процедура ИзменитьШрифтПродолжение(Результат, Параметры) Экспорт
ТекущаяОбласть = Элементы.ТабличныйДокумент.ТекущаяОбласть;
Если Результат = Неопределено Тогда
Возврат;
ИначеЕсли Результат = -1 Тогда
ДиалогВыбораШрифта = Новый ДиалогВыбораШрифта;
ОписаниеОповещения = Новый ОписаниеОповещения("ЗавершениеИзменитьШрифт", ЭтотОбъект);
ДиалогВыбораШрифта.Шрифт = ТекущаяОбласть.Шрифт;
ДиалогВыбораШрифта.Показать(ОписаниеОповещения);
Иначе
ТекущаяОбласть.Шрифт = Новый Шрифт(ТекущаяОбласть.Шрифт, Результат);
Модифицированность = Истина;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ЗавершениеИзменитьШрифт(Шрифт, Параметры) Экспорт
Если Шрифт = Неопределено Тогда
Возврат;
КонецЕсли;
ТекущаяОбласть = Элементы.ТабличныйДокумент.ТекущаяОбласть;
ТекущаяОбласть.Шрифт = Шрифт;
Модифицированность = Истина;
КонецПроцедуры
&НаКлиенте
Процедура ЗавершениеИзменитьЦветГраницы(Цвет, Параметры) Экспорт
УстановитьЦвет("ЦветРамки", Цвет);
КонецПроцедуры
&НаКлиенте
Процедура ЗавершениеИзменитьЦветТекста(Цвет, Параметры) Экспорт
УстановитьЦвет("ЦветТекста", Цвет);
КонецПроцедуры
&НаКлиенте
Процедура ЗавершениеИзменитьЦветФона(Цвет, Параметры) Экспорт
УстановитьЦвет("ЦветФона", Цвет);
КонецПроцедуры
&НаКлиенте
Процедура УстановитьЦвет(ИмяПоля, Цвет)
ТекущаяОбласть = Элементы.ТабличныйДокумент.ТекущаяОбласть;
Если ТипЗнч(Цвет) = Тип("Цвет")Тогда
ТекущаяОбласть[ИмяПоля] = Цвет;
Модифицированность = Истина;
ИначеЕсли Цвет = "ДругиеЦвета" Тогда
ДиалогВыбораЦвета = Новый ДиалогВыбораЦвета();
ОписаниеОповещения = Новый ОписаниеОповещения("ПослеВыбораЦвета", ЭтотОбъект, ИмяПоля);
ДиалогВыбораЦвета.Показать(ОписаниеОповещения);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПослеВыбораЦвета(Цвет, ИмяПоля) Экспорт
УстановитьЦвет(ИмяПоля, Цвет);
КонецПроцедуры
#Область КонструкторПечатныхФорм
&НаСервере
Функция ВладелецМакета()
Если ЗначениеЗаполнено(ВладелецМакета) Тогда
Возврат ОбщегоНазначения.ОбъектМетаданныхПоИдентификатору(ВладелецМакета);
КонецЕсли;
ПутьКМакету = ИдентификаторМакета;
ЧастиПути = СтрРазделить(ПутьКМакету, ".", Истина);
Если ЧастиПути.Количество() <> 2 И ЧастиПути.Количество() <> 3 Тогда
Возврат Неопределено;
КонецЕсли;
Если ЧастиПути.Количество() <> 3 Тогда
Возврат Неопределено;
КонецЕсли;
ЧастиПути.Удалить(ЧастиПути.ВГраница());
ИмяОбъекта = СтрСоединить(ЧастиПути, ".");
Если ПустаяСтрока(ИмяОбъекта) Тогда
Возврат Неопределено;
КонецЕсли;
Возврат ОбщегоНазначения.ОбъектМетаданныхПоПолномуИмени(ИмяОбъекта);
КонецФункции
&НаКлиенте
Процедура ТабличныйДокументПеретаскивание(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Область)
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.КонструкторФормул") Тогда
МодульКонструкторФормулКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("КонструкторФормулКлиент");
Если ТипЗнч(ПараметрыПеретаскивания.Значение) <> Тип("Строка") Тогда
Возврат;
КонецЕсли;
ВыбранноеПоле = МодульКонструкторФормулКлиент.ВыбранноеПолеВСпискеПолей(ЭтотОбъект, ИмяСпискаПолей());
Если ВыбранноеПоле = Неопределено Тогда
Возврат;
КонецЕсли;
РазместитьРисунокВТабличномДокументе(ВыбранноеПоле, Область.Лево, Область.Верх, СтандартнаяОбработка);
Если СтандартнаяОбработка Тогда
СтандартнаяОбработка = Ложь;
Область = ТабличныйДокумент.Область(Область.Верх, Область.Лево);
Область.Текст = ?(ЗначениеЗаполнено(Область.Текст), СокрП(Область.Текст) + " ", "") + ПараметрыПеретаскивания.Значение;
КонецЕсли;
КонецЕсли;
ПолучательПеретаскиваемогоЗначения = Элемент;
КонецПроцедуры
&НаСервере
Процедура РазместитьРисунокВТабличномДокументе(Знач ВыбранноеПоле, Знач Лево, Знач Верх, СтандартнаяОбработка)
Область = ТабличныйДокумент.Область(Верх, Лево, Верх, Лево);
Если СтрНачинаетсяС(ВыбранноеПоле.Имя, "Печать") Тогда
СтандартнаяОбработка = Ложь;
Рисунок = ТабличныйДокумент.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Картинка);
Рисунок.Имя = ПодобратьИмяОбласти(ТабличныйДокумент, ВыбранноеПоле.Имя);
Рисунок.ПараметрРасшифровки = "[" + ВыбранноеПоле.ПутьКДанным + "]";
Рисунок.Картинка = БиблиотекаКартинок["ПечатьОрганизации"];
Рисунок.Расположить(Область);
Рисунок.Высота = 40;
Рисунок.Ширина = 40;
Рисунок.Линия = Новый Линия(ТипЛинииРисункаТабличногоДокумента.НетЛинии);
Рисунок.ЦветФона = ЦветПоУмолчанию();
Рисунок.РазмерКартинки = РазмерКартинки.Пропорционально;
Элементы.ТабличныйДокумент.ТекущаяОбласть = Область;
Возврат;
КонецЕсли;
Если СтрНачинаетсяС(ВыбранноеПоле.Имя, "Подпись") Тогда
СтандартнаяОбработка = Ложь;
Рисунок = ТабличныйДокумент.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Картинка);
Рисунок.Имя = ПодобратьИмяОбласти(ТабличныйДокумент, ВыбранноеПоле.Имя);
Рисунок.ПараметрРасшифровки = "[" + ВыбранноеПоле.ПутьКДанным + "]";
Рисунок.Картинка = БиблиотекаКартинок["Подпись"];
Рисунок.Расположить(Область);
Рисунок.Высота = 10;
Рисунок.Ширина = 30;
Рисунок.Линия = Новый Линия(ТипЛинииРисункаТабличногоДокумента.НетЛинии);
Рисунок.ЦветФона = ЦветПоУмолчанию();
Рисунок.РазмерКартинки = РазмерКартинки.Пропорционально;
Элементы.ТабличныйДокумент.ТекущаяОбласть = Область;
Возврат;
КонецЕсли;
Если ВыбранноеПоле.Имя = "ШтампЭП" Тогда
СтандартнаяОбработка = Ложь;
ОбластьСтрок = ТабличныйДокумент.Область(Область.Верх, , Область.Верх + 6);
ОбластьСтрок.СоздатьФорматСтрок();
ОбластьШтампа = ТабличныйДокумент.Область(Область.Верх, Область.Лево, Область.Верх + 6, Область.Лево + 1);
ОбластьШтампа.Имя = ПодобратьИмяОбласти(ТабличныйДокумент, "ШтампЭП");
ОбластьШтампа = ТабличныйДокумент.Область(Область.Верх, Область.Лево, Область.Верх + 6, Область.Лево);
ОбластьШтампа.ШиринаКолонки = 10;
ОбластьШтампа = ТабличныйДокумент.Область(Область.Верх, Область.Лево + 1, Область.Верх + 6, Область.Лево + 1);
ОбластьШтампа.ШиринаКолонки = 30;
Элементы.ТабличныйДокумент.ТекущаяОбласть = Область;
Возврат;
КонецЕсли;
Если ВыбранноеПоле.Имя = "QRКод" Тогда
СтандартнаяОбработка = Ложь;
Рисунок = ТабличныйДокумент.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Картинка);
Рисунок.Имя = ПодобратьИмяОбласти(ТабличныйДокумент, ВыбранноеПоле.Имя);
Рисунок.ПараметрРасшифровки = "[" + ВыбранноеПоле.ПутьКДанным + "]";
Рисунок.Расположить(Область);
Рисунок.Высота = 40;
Рисунок.Ширина = 40;
Рисунок.Линия = Новый Линия(ТипЛинииРисункаТабличногоДокумента.НетЛинии);
Рисунок.ЦветФона = ЦветПоУмолчанию();
Рисунок.РазмерКартинки = РазмерКартинки.Пропорционально;
Рисунок.Картинка = БиблиотекаКартинок["МестоДляQRКода"];
Элементы.ТабличныйДокумент.ТекущаяОбласть = Область;
Возврат;
КонецЕсли;
Если ВыбранноеПоле.Имя = "КартинкаШтрихкода" Тогда
СтандартнаяОбработка = Ложь;
Рисунок = ТабличныйДокумент.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Картинка);
Рисунок.Имя = ПодобратьИмяОбласти(ТабличныйДокумент, ВыбранноеПоле.Имя);
Рисунок.ПараметрРасшифровки = "[" + ВыбранноеПоле.ПутьКДанным + "]";
Рисунок.Расположить(Область);
Рисунок.Высота = 25.93;
Рисунок.Ширина = 37.29;
Рисунок.Линия = Новый Линия(ТипЛинииРисункаТабличногоДокумента.НетЛинии);
Рисунок.ЦветФона = ЦветПоУмолчанию();
Рисунок.РазмерКартинки = РазмерКартинки.Пропорционально;
Рисунок.Картинка = БиблиотекаКартинок["МестоДляШтрихкода"];
Элементы.ТабличныйДокумент.ТекущаяОбласть = Область;
Возврат;
КонецЕсли;
ЭтоПрисоединенныйФайл = ВыбранноеПоле.Тип.Типы().Количество() = 1
И ТипыПрисоединенныхФайлов.СодержитТип(ВыбранноеПоле.Тип.Типы()[0]);
Если ЭтоПрисоединенныйФайл Тогда
СтандартнаяОбработка = Ложь;
Рисунок = ТабличныйДокумент.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Картинка);
Рисунок.Имя = ПодобратьИмяОбласти(ТабличныйДокумент, "Рисунок");
Рисунок.ПараметрРасшифровки = "[" + ВыбранноеПоле.ПутьКДанным + "]";
Рисунок.Картинка = БиблиотекаКартинок["МестоДляКартинки"];
Рисунок.Расположить(Область);
Рисунок.Высота = 20;
Рисунок.Ширина = 20;
Рисунок.Линия = Новый Линия(ТипЛинииРисункаТабличногоДокумента.НетЛинии);
Рисунок.ЦветФона = ЦветПоУмолчанию();
Рисунок.РазмерКартинки = РазмерКартинки.Пропорционально;
Элементы.ТабличныйДокумент.ТекущаяОбласть = Область;
Возврат;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ТабличныйДокументПроверкаПеретаскивания(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Область)
Если ТипЗнч(ПараметрыПеретаскивания.Значение) <> Тип("Массив")
Или ПараметрыПеретаскивания.Значение.Количество() <> 1
Или Не ПараметрыПеретаскивания.Значение[0].Таблица Тогда
Возврат;
КонецЕсли;
КоличествоКолонок = ПараметрыПеретаскивания.Значение[0].Элементы.Количество();
Если КоличествоКолонок = 0 Тогда
ШиринаОбласти = ?(Область.Лево > 1, 2, 1);
Область = ТабличныйДокумент.Область(Область.Верх, Область.Лево, Область.Верх, Область.Лево + ШиринаОбласти - 1);
Элемент.ТекущаяОбласть = Область;
Возврат;
КонецЕсли;
СтандартнаяОбработка = Ложь;
Область = ТабличныйДокумент.Область(Область.Верх, Область.Лево, Область.Верх + 1, Область.Лево + КоличествоКолонок - 1);
Элемент.ТекущаяОбласть = Область;
КонецПроцедуры
&НаКлиенте
Процедура ОбновитьПолеВводаЗначенияТекущейЯчейки()
ТекущаяОбласть = ТабличныйДокумент.ТекущаяОбласть;
ДоступноРедактирование = Элементы.ТабличныйДокумент.Редактирование И ТекущаяОбласть <> Неопределено
И ТипЗнч(ТекущаяОбласть) = Тип("ОбластьЯчеекТабличногоДокумента");
Элементы.ТекущееЗначение.Доступность = ДоступноРедактирование;
Если ДоступноРедактирование Тогда
ТекущееЗначение = ТекущаяОбласть.Текст;
Иначе
ТекущееЗначение = "";
КонецЕсли;
Элементы.ПовторятьВНачалеСтраницы.Доступность = Ложь;
Элементы.ПовторятьВКонцеСтраницы.Доступность = Ложь;
ПредставлениеОбласти = НСтр("ru = 'Текст выбранной ячейки'");
Если ТипЗнч(ТекущаяОбласть) = Тип("ОбластьЯчеекТабличногоДокумента") Тогда
Если ТекущаяОбласть.ТипОбласти = ТипОбластиЯчеекТабличногоДокумента.Строки
И ЗначениеЗаполнено(ТекущаяОбласть.Верх) Тогда
Диапазон = ТекущаяОбласть.Верх;
Если ТекущаяОбласть.Верх <> ТекущаяОбласть.Низ Тогда
Диапазон = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = '%1-%2'"), ТекущаяОбласть.Верх, ТекущаяОбласть.Низ);
ПредставлениеОбласти = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Условия вывода строк %1'"), Диапазон);
Иначе
ПредставлениеОбласти = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Условия вывода строки %1'"), Диапазон);
КонецЕсли;
Элементы.ПовторятьВНачалеСтраницы.Доступность = Истина;
Элементы.ПовторятьВКонцеСтраницы.Доступность = Истина;
Если ЗначениеЗаполнено(ТекущаяОбласть.Имя) Тогда
ТекущееЗначение = ТекущаяОбласть.ПараметрРасшифровки;
КонецЕсли;
КонецЕсли;
Если ЗначениеЗаполнено(ТекущаяОбласть.Лево) И Не ЗначениеЗаполнено(ТекущаяОбласть.Верх) Тогда
Диапазон = ТекущаяОбласть.Лево;
Если ТекущаяОбласть.Лево <> ТекущаяОбласть.Право Тогда
Диапазон = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = '%1-%2'"), ТекущаяОбласть.Лево, ТекущаяОбласть.Право);
ПредставлениеОбласти = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Условия вывода колонок %1'"), Диапазон);
Иначе
ПредставлениеОбласти = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Условия вывода колонки %1'"), Диапазон);
КонецЕсли;
КонецЕсли;
Если ЗначениеЗаполнено(ТекущаяОбласть.Лево) И ЗначениеЗаполнено(ТекущаяОбласть.Верх) Тогда
Если ТекущаяОбласть.Лево <> ТекущаяОбласть.Право Или ТекущаяОбласть.Верх <> ТекущаяОбласть.Низ Тогда
ПредставлениеОбласти = НСтр("ru = 'Текст в выбранной области'");
Иначе
ПредставлениеОбласти = НСтр("ru = 'Текст выбранной ячейки'");
КонецЕсли;
КонецЕсли;
ИмяОбласти = ПредставлениеОбласти;
КонецЕсли;
Элементы.УдалитьШтампЭП.Доступность = ТипЗнч(ТекущаяОбласть) = Тип("ОбластьЯчеекТабличногоДокумента")
И СтрНачинаетсяС(ТекущаяОбласть.Имя, "ШтампЭП");
Если ТипЗнч(ТекущаяОбласть) = Тип("ОбластьЯчеекТабличногоДокумента")
И ТекущаяОбласть.ТипОбласти = ТипОбластиЯчеекТабличногоДокумента.Строки Тогда
Элементы.ПовторятьВНачалеСтраницы.Пометка = ТекущаяОбласть.НачалоСтраницы;
Элементы.ПовторятьВКонцеСтраницы.Пометка = ТекущаяОбласть.КонецСтраницы;
Иначе
Элементы.ПовторятьВНачалеСтраницы.Пометка = Ложь;
Элементы.ПовторятьВКонцеСтраницы.Пометка = Ложь;
КонецЕсли;
ДоступностьКнопокУправленияТекстом(ТекущаяОбласть);
КонецПроцедуры
&НаСервере
Процедура ПодобратьОбразец(ОбъектМетаданных)
ТекстЗапроса =
"ВЫБРАТЬ ПЕРВЫЕ 1 РАЗРЕШЕННЫЕ
| ПсевдонимЗаданнойТаблицы.Ссылка КАК Ссылка
|ИЗ
| &Таблица КАК ПсевдонимЗаданнойТаблицы
|
|УПОРЯДОЧИТЬ ПО
| Ссылка УБЫВ";
ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "&Таблица", ОбъектМетаданных.ПолноеИмя());
Запрос = Новый Запрос(ТекстЗапроса);
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
Образец = Выборка.Ссылка;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура НастроитьКолонтитулы(Команда)
Элементы.ПоказыватьКолонтитулы.Пометка = Не Элементы.ПоказыватьКолонтитулы.Пометка;
Элементы.ВерхнийКолонтитул.Видимость = Элементы.ПоказыватьКолонтитулы.Пометка;
Элементы.НижнийКолонтитул.Видимость = Элементы.ПоказыватьКолонтитулы.Пометка;
Элементы.КомандыРедактирования.Видимость = Не Элементы.КомандыРедактирования.Видимость;
Элементы.КоманднаяПанельКолонтитулов.Видимость = Не Элементы.КомандыРедактирования.Видимость;
Элементы.ТекущееЗначение.Видимость = Не Элементы.ПоказыватьКолонтитулы.Пометка;
Элементы.НастройкиТекущейОбласти.Видимость = Не Элементы.ПоказыватьКолонтитулы.Пометка;
Элементы.ТабличныйДокумент.ТолькоПросмотр = Элементы.ПоказыватьКолонтитулы.Пометка;
ТекстСостояния = ?(Элементы.ПоказыватьКолонтитулы.Пометка, НСтр("ru = 'Редактирование колонтитулов'"), "");
ОтобразитьСостояниеТекущейПечатнойФормы(ТекстСостояния);
Если Элементы.ПоказыватьКолонтитулы.Пометка Тогда
ПереключитьВидимостьКомандКолонтитулов();
Иначе
ОтключитьОбработчикОжидания("ПереключитьВидимостьКомандКолонтитулов");
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОчиститьФормат(Команда)
ТекущаяОбласть = Элементы.ТабличныйДокумент.ТекущаяОбласть;
ОчиститьФорматОбласти(ТекущаяОбласть);
Модифицированность = Истина;
КонецПроцедуры
&НаКлиенте
Процедура ОчиститьФорматОбласти(Область)
Область.Шрифт = Неопределено;
Область.ЦветРамки = ЦветПоУмолчанию();
Область.ЦветТекста = ЦветПоУмолчанию();
Область.ЦветУзора = ЦветПоУмолчанию();
Область.ЦветФона = ЦветПоУмолчанию();
Область.ВертикальноеПоложение = Неопределено;
Область.ВертикальноеПоложениеКартинки = Неопределено;
Область.ГоризонтальноеПоложение = Неопределено;
Область.ГоризонтальноеПоложениеКартинки = Неопределено;
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Функция ЦветПоУмолчанию()
Возврат Новый Цвет;
КонецФункции
&НаСервере
Процедура УстановитьПримерыЗначений(КоллекцияПолей = Неопределено, ДанныеПечати = Неопределено)
Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Печать") Тогда
Возврат;
КонецЕсли;
МодульУправлениеПечатью = ОбщегоНазначения.ОбщийМодуль("УправлениеПечатью");
Если КоллекцияПолей = Неопределено Тогда
КоллекцияПолей = ЭтотОбъект[ИмяСпискаПолей()];
КонецЕсли;
Если ДанныеПечати = Неопределено Тогда
Если Не ЗначениеЗаполнено(Образец) Тогда
Возврат;
КонецЕсли;
Объекты = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Образец);
ОтображаемыеПоля = ЗаполнитьСписокОтображаемыхПолей(КоллекцияПолей);
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Печать") Тогда
Попытка
ДанныеПечати = МодульУправлениеПечатью.ДанныеПечати(Объекты, ОтображаемыеПоля, ТекущийЯзык);
Исключение
РазблокироватьДанныеДляРедактирования(КлючОбъектаРедактирования, УникальныйИдентификатор);
ВызватьИсключение ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
КонецПопытки;
ПолучитьСообщенияПользователю(Истина);
Иначе
Возврат;
КонецЕсли;
КонецЕсли;
МодульУправлениеПечатью.УстановитьПримерыЗначений(КоллекцияПолей, ДанныеПечати, Образец);
КонецПроцедуры
&НаСервере
Процедура УстановитьФорматЗначенийПоУмолчанию(КоллекцияПолей = Неопределено)
Если КоллекцияПолей = Неопределено Тогда
КоллекцияПолей = ЭтотОбъект[ИмяСпискаПолей()];
КонецЕсли;
Для Каждого Элемент Из КоллекцияПолей.ПолучитьЭлементы() Цикл
Если Не ЗначениеЗаполнено(Элемент.ПутьКДанным) Тогда
Продолжить;
КонецЕсли;
Если Не ЗначениеЗаполнено(Элемент.ФорматПоУмолчанию) Тогда
Элемент.ФорматПоУмолчанию = ФорматПоУмолчанию(Элемент.Тип);
КонецЕсли;
Элемент.Формат = Элемент.ФорматПоУмолчанию;
Если ЗначениеЗаполнено(Элемент.Формат) Тогда
Элемент.Образец = Формат(Элемент.Образец, Элемент.Формат);
Иначе
Элемент.КнопкаНастройкиФормата = -1;
КонецЕсли;
УстановитьФорматЗначенийПоУмолчанию(Элемент);
КонецЦикла;
КонецПроцедуры
&НаСервере
Функция ФорматПоУмолчанию(ОписаниеТипов)
Формат = "";
Если ОписаниеТипов.Типы().Количество() <> 1 Тогда
Возврат Формат;
КонецЕсли;
Тип = ОписаниеТипов.Типы()[0];
Если Тип = Тип("Число") Тогда
Формат = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'ЧЦ=%1; ЧДЦ=%2'"),
ОписаниеТипов.КвалификаторыЧисла.Разрядность,
ОписаниеТипов.КвалификаторыЧисла.РазрядностьДробнойЧасти);
ИначеЕсли Тип = Тип("Дата") Тогда
Если ОписаниеТипов.КвалификаторыДаты.ЧастиДаты = ЧастиДаты.Дата Тогда
Формат = НСтр("ru = 'ДЛФ=D'");
Иначе
Формат = НСтр("ru = 'ДЛФ=DT'");
КонецЕсли;
ИначеЕсли Тип = Тип("Булево") Тогда
Формат = НСтр("ru = 'БЛ=Нет; БИ=Да'");
КонецЕсли;
Возврат Формат;
КонецФункции
&НаКлиенте
Процедура ПодсветитьЯчейкиСВыбраннымПолем()
ТекущиеДанные = Элементы[ИмяСпискаПолей()].ТекущиеДанные;
Если ТекущиеДанные = Неопределено Или Не ЗначениеЗаполнено(ТекущиеДанные.ПредставлениеПутиКДанным) Тогда
Возврат;
КонецЕсли;
ОчиститьПодсветку();
ОбработанныеОбласти = Новый Соответствие();
МодульУправлениеПечатьюКлиент = Неопределено;
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.Печать") Тогда
МодульУправлениеПечатьюКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("УправлениеПечатьюКлиент");
Иначе
Возврат;
КонецЕсли;
Для НомерСтроки = 1 По ТабличныйДокумент.ВысотаТаблицы Цикл
Для НомерКолонки = 1 По ТабличныйДокумент.ШиринаТаблицы Цикл
Область = ТабличныйДокумент.Область(НомерСтроки, НомерКолонки);
ИдентификаторОбласти = МодульУправлениеПечатьюКлиент.ИдентификаторОбласти(Область);
Если ОбработанныеОбласти[ИдентификаторОбласти] <> Неопределено Тогда
Продолжить;
КонецЕсли;
ОбработанныеОбласти[ИдентификаторОбласти] = Истина;
Если ТекущиеДанные.Таблица
И СтрНайти(Область.Текст, "[" + ТекущиеДанные.ПредставлениеПутиКДанным + ".") > 0
Или СтрНайти(Область.Текст, "[" + ТекущиеДанные.ПредставлениеПутиКДанным + "]") > 0 Тогда
ПодсвеченныеОбласти.Добавить(Область.ЦветФона, Область.Имя);
Область.ЦветФона = ЦветФонаВыделенияПоля;
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура ОчиститьПодсветку()
Для Каждого Элемент Из ПодсвеченныеОбласти Цикл
ЦветФона = Элемент.Значение;
ИмяОбласти = Элемент.Представление;
Область = ТабличныйДокумент.Область(ИмяОбласти);
Область.ЦветФона = ЦветФона;
КонецЦикла;
ПодсвеченныеОбласти.Очистить();
КонецПроцедуры
&НаКлиенте
Процедура ДоступныеПоля(Команда)
Элементы.КнопкаДоступныеПоля.Пометка = Не Элементы.КнопкаДоступныеПоля.Пометка;
Элементы.ГруппаПоляИОператоры.Видимость = Элементы.КнопкаДоступныеПоля.Пометка;
КонецПроцедуры
&НаКлиенте
Процедура ОтобразитьСостояниеТекущейПечатнойФормы(ТекстСостояния = "")
ОтображатьСостояние = Не ПустаяСтрока(ТекстСостояния);
ПолеТабличногоДокумента = Элементы.ТабличныйДокумент;
ОтображениеСостояния = ПолеТабличногоДокумента.ОтображениеСостояния;
ОтображениеСостояния.Текст = ТекстСостояния;
ОтображениеСостояния.Видимость = ОтображатьСостояние;
ОтображениеСостояния.ДополнительныйРежимОтображения =
?(ОтображатьСостояние, ДополнительныйРежимОтображения.Неактуальность, ДополнительныйРежимОтображения.НеИспользовать);
ПолеТабличногоДокумента.ТолькоПросмотр = ОтображатьСостояние Или ПолеТабличногоДокумента.Вывод = ИспользованиеВывода.Запретить;
КонецПроцедуры
&НаКлиенте
Процедура ОбновитьОбластьНастройкиВыбранныхЯчеек()
ОбновитьПолеВводаЗначенияТекущейЯчейки();
КонецПроцедуры
&НаКлиенте
Процедура ПовторятьНаКаждойСтранице(Команда)
ТекущаяОбласть = ТабличныйДокумент.ТекущаяОбласть;
Если ТекущаяОбласть = Неопределено Или ТипЗнч(ТекущаяОбласть) <> Тип("ОбластьЯчеекТабличногоДокумента")
Или ТекущаяОбласть.ТипОбласти <> ТипОбластиЯчеекТабличногоДокумента.Строки Тогда
Возврат;
КонецЕсли;
Элементы.ПовторятьВНачалеСтраницы.Пометка = Не Элементы.ПовторятьВНачалеСтраницы.Пометка;
ТекущаяОбласть.НачалоСтраницы = Элементы.ПовторятьВНачалеСтраницы.Пометка;
КонецПроцедуры
&НаКлиенте
Процедура ПовторятьВКонцеСтраницы(Команда)
ТекущаяОбласть = ТабличныйДокумент.ТекущаяОбласть;
Если ТекущаяОбласть = Неопределено Или ТипЗнч(ТекущаяОбласть) <> Тип("ОбластьЯчеекТабличногоДокумента")
Или ТекущаяОбласть.ТипОбласти <> ТипОбластиЯчеекТабличногоДокумента.Строки Тогда
Возврат;
КонецЕсли;
Элементы.ПовторятьВКонцеСтраницы.Пометка = Не Элементы.ПовторятьВКонцеСтраницы.Пометка;
ТекущаяОбласть.КонецСтраницы = Элементы.ПовторятьВКонцеСтраницы.Пометка;
КонецПроцедуры
&НаКлиенте
Процедура ТекущееЗначениеПриИзменении(Элемент)
ОбновитьТекстВОбластиЯчеек();
ПолучательПеретаскиваемогоЗначения = Элемент;
КонецПроцедуры
&НаСервереБезКонтекста
Функция КоллекцииПолей(ИсточникиДанных, ПараметрыРедактирования)
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Печать") Тогда
МодульУправлениеПечатью = ОбщегоНазначения.ОбщийМодуль("УправлениеПечатью");
Попытка
Возврат МодульУправлениеПечатью.КоллекцииПолейИсточниковДанных(ИсточникиДанных);
Исключение
РазблокироватьДанныеДляРедактирования(ПараметрыРедактирования.КлючОбъектаРедактирования, ПараметрыРедактирования.УникальныйИдентификатор);
ВызватьИсключение ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
КонецПопытки
КонецЕсли;
Возврат Новый Массив;
КонецФункции
&НаСервере
Функция СписокОператоров()
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Печать") Тогда
МодульУправлениеПечатью = ОбщегоНазначения.ОбщийМодуль("УправлениеПечатью");
Возврат МодульУправлениеПечатью.СписокОператоров();
КонецЕсли;
КонецФункции
#Область ПодключаемыйСписокПолей
&НаКлиенте
Процедура Подключаемый_СписокПолейПередРазворачиванием(Элемент, Строка, Отказ)
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.КонструкторФормул") Тогда
МодульКонструкторФормулКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("КонструкторФормулКлиент");
МодульКонструкторФормулКлиент.СписокПолейПередРазворачиванием(ЭтотОбъект, Элемент, Строка, Отказ);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_РазвернутьТекущийЭлементСпискаПолей()
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.КонструкторФормул") Тогда
МодульКонструкторФормулКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("КонструкторФормулКлиент");
МодульКонструкторФормулКлиент.РазвернутьТекущийЭлементСпискаПолей(ЭтотОбъект);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ЗаполнитьСписокДоступныхПолей(ПараметрыЗаполнения) Экспорт
ЗаполнитьСписокДоступныхПолей(ПараметрыЗаполнения);
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьСписокДоступныхПолей(ПараметрыЗаполнения)
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонструкторФормул") Тогда
МодульКонструкторФормул = ОбщегоНазначения.ОбщийМодуль("КонструкторФормул");
МодульКонструкторФормул.ЗаполнитьСписокДоступныхПолей(ЭтотОбъект, ПараметрыЗаполнения);
Если ПараметрыЗаполнения.ИмяСписка = ИмяСпискаПолей() Тогда
ТекущиеДанные = ЭтотОбъект[ПараметрыЗаполнения.ИмяСписка].НайтиПоИдентификатору(ПараметрыЗаполнения.ИдентификаторСтроки);
УстановитьПримерыЗначений(ТекущиеДанные);
УстановитьФорматЗначенийПоУмолчанию(ТекущиеДанные);
Если (ТекущиеДанные.Папка Или ТекущиеДанные.Таблица) И ТекущиеДанные.ПолучитьРодителя() = Неопределено Тогда
ОтметитьОбщиеПоля(ТекущиеДанные);
Иначе
УстановитьПризнакОбщегоПоляДляПодчиненныхПолей(ТекущиеДанные);
КонецЕсли;
КонецЕсли
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_СписокПолейНачалоПеретаскивания(Элемент, ПараметрыПеретаскивания, Выполнение)
Реквизит = ЭтотОбъект[ИмяСпискаПолей()].НайтиПоИдентификатору(ПараметрыПеретаскивания.Значение);
Если Реквизит.Папка Или Реквизит.Таблица
Или Элементы.ПоказыватьКолонтитулы.Пометка
И Не СтрНачинаетсяС(Реквизит.ПутьКДанным, "ОбщиеРеквизиты.") Тогда
Выполнение = Ложь;
Возврат;
КонецЕсли;
ПараметрыПеретаскивания.Значение = "[" + Реквизит.ПредставлениеПутиКДанным + "]";
Если Элемент = Элементы[ИмяСпискаПолей()]
И ЗначениеЗаполнено(Реквизит.Формат) И Реквизит.Формат <> Реквизит.ФорматПоУмолчанию Тогда
ПараметрыПеретаскивания.Значение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
"[Формат(%1, %2)]", ПараметрыПеретаскивания.Значение, """" + Реквизит.Формат + """");
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_СтрокаПоискаИзменениеТекстаРедактирования(Элемент, Текст, СтандартнаяОбработка)
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.КонструкторФормул") Тогда
МодульКонструкторФормулКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("КонструкторФормулКлиент");
МодульКонструкторФормулКлиент.СтрокаПоискаИзменениеТекстаРедактирования(ЭтотОбъект, Элемент, Текст, СтандартнаяОбработка);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ВыполнитьПоискВСпискеПолей()
ВыполнитьПоискВСпискеПолей();
КонецПроцедуры
&НаСервере
Процедура ВыполнитьПоискВСпискеПолей()
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонструкторФормул") Тогда
МодульКонструкторФормул = ОбщегоНазначения.ОбщийМодуль("КонструкторФормул");
МодульКонструкторФормул.ВыполнитьПоискВСпискеПолей(ЭтотОбъект);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_СтрокаПоискаОчистка(Элемент, СтандартнаяОбработка)
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.КонструкторФормул") Тогда
МодульКонструкторФормулКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("КонструкторФормулКлиент");
МодульКонструкторФормулКлиент.СтрокаПоискаОчистка(ЭтотОбъект, Элемент, СтандартнаяОбработка);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура Подключаемый_ОбработчикКонструктораФормулСервер(Параметр, ДополнительныеПараметры)
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонструкторФормул") Тогда
МодульКонструкторФормул = ОбщегоНазначения.ОбщийМодуль("КонструкторФормул");
МодульКонструкторФормул.ОбработчикКонструктораФормул(ЭтотОбъект, Параметр, ДополнительныеПараметры);
КонецЕсли;
Если ДополнительныеПараметры.КлючОперации = "ОбработатьСообщениеПоиска" Тогда
ОтметитьОбщиеПоля();
УстановитьФорматЗначенийПоУмолчанию();
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ОбработчикКонструктораФормулКлиент(Параметр, ДополнительныеПараметры = Неопределено) Экспорт
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.КонструкторФормул") Тогда
МодульКонструкторФормулКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("КонструкторФормулКлиент");
МодульКонструкторФормулКлиент.ОбработчикКонструктораФормул(ЭтотОбъект, Параметр, ДополнительныеПараметры);
Если ДополнительныеПараметры <> Неопределено И ДополнительныеПараметры.ВыполнитьНаСервере Тогда
Подключаемый_ОбработчикКонструктораФормулСервер(Параметр, ДополнительныеПараметры);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_НачатьПоискВСпискеПолей()
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.КонструкторФормул") Тогда
МодульКонструкторФормулКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("КонструкторФормулКлиент");
МодульКонструкторФормулКлиент.НачатьПоискВСпискеПолей(ЭтотОбъект);
КонецЕсли;
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Функция ИмяСпискаПолей()
Возврат "ДоступныеПоля";
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Функция ИмяСпискаОператоров()
Возврат "СписокОператоров";
КонецФункции
#КонецОбласти
#Область ДополнительныеОбработчикиПодключаемыхСписков
&НаКлиенте
Процедура Подключаемый_СписокПолейВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка)
МодульКонструкторФормулКлиент = Неопределено;
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.КонструкторФормул") Тогда
МодульКонструкторФормулКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("КонструкторФормулКлиент");
Иначе
Возврат;
КонецЕсли;
Если Поле.Имя = Элемент.Имя + "Представление" Тогда
СтандартнаяОбработка = Ложь;
ВыбранноеПоле = МодульКонструкторФормулКлиент.ВыбранноеПолеВСпискеПолей(ЭтотОбъект);
Если ЗначениеЗаполнено(ТекущееЗначение) Тогда
ТекущееЗначение = СокрП(ТекущееЗначение) + " ";
Иначе
ТекущееЗначение = "";
КонецЕсли;
Если Элемент.Имя = ИмяСпискаПолей() Тогда
ТекущееЗначение = ТекущееЗначение + "[" + ВыбранноеПоле.ПредставлениеПутиКДанным + "]";
Иначе
ТекущееЗначение = ТекущееЗначение + МодульКонструкторФормулКлиент.ВыражениеДляВставки(ВыбранноеПоле);
КонецЕсли;
ОбновитьТекстВОбластиЯчеек();
КонецЕсли;
Если Поле = Элементы[ИмяСпискаПолей() + "КнопкаНастройкиФормата"] И ЗначениеЗаполнено(Элементы[ИмяСпискаПолей()].ТекущиеДанные.Формат) Тогда
СтандартнаяОбработка = Ложь;
Конструктор = Новый КонструкторФорматнойСтроки(Элементы[ИмяСпискаПолей()].ТекущиеДанные.Формат);
Конструктор.ДоступныеТипы = Элементы[ИмяСпискаПолей()].ТекущиеДанные.Тип;
ОписаниеОповещения = Новый ОписаниеОповещения("ПриВыбореФорматаПоля", ЭтотОбъект);
Конструктор.Показать(ОписаниеОповещения);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ОператорыНачалоПеретаскивания(Элемент, ПараметрыПеретаскивания, Выполнение)
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.КонструкторФормул") Тогда
МодульКонструкторФормулКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("КонструкторФормулКлиент");
Оператор = МодульКонструкторФормулКлиент.ВыбранноеПолеВСпискеПолей(ЭтотОбъект, ИмяСпискаОператоров());
ПараметрыПеретаскивания.Значение = МодульКонструкторФормулКлиент.ВыражениеДляВставки(Оператор);
Если Оператор.ПутьКДанным = "УправлениеПечатью_КоличествоСтрок" Тогда
ПредставлениеТекущейТаблицы = ПредставлениеТекущейТаблицы();
Выполнение = ПредставлениеТекущейТаблицы <> Неопределено;
ПараметрыПеретаскивания.Значение = СтрЗаменить(ПараметрыПеретаскивания.Значение, "()", "(["+ПредставлениеТекущейТаблицы+"])");
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ОператорыОкончаниеПеретаскивания(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка)
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.КонструкторФормул") Тогда
МодульКонструкторФормулКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("КонструкторФормулКлиент");
ВыбранноеПоле = МодульКонструкторФормулКлиент.ВыбранноеПолеВСпискеПолей(ЭтотОбъект, ИмяСпискаОператоров());
Контекст = Новый Структура("ПутьКДанным, Заголовок");
ЗаполнитьЗначенияСвойств(Контекст, ВыбранноеПоле);
Если Контекст.ПутьКДанным = "Формат" Тогда
ФорматСтроки = Новый КонструкторФорматнойСтроки;
Контекст.Вставить("ФорматСтроки", ФорматСтроки);
ОповещениеОкончанияПеретаскиванияЗавершение = Новый ОписаниеОповещения("ОператорыОкончаниеПеретаскиванияЗавершение", ЭтотОбъект, Контекст);
ФорматСтроки.Показать(ОповещениеОкончанияПеретаскиванияЗавершение);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ОператорыОкончаниеПеретаскиванияЗавершение(Текст, Контекст) Экспорт
Если Текст = Неопределено Тогда
Возврат;
КонецЕсли;
ТекстыДляЗамены = Новый Структура("ДляПоиска, ДляЗамены", "", "");
Если Контекст.ПутьКДанным = "Формат" Тогда
ФорматСтроки = Контекст.ФорматСтроки;
Если ЗначениеЗаполнено(ФорматСтроки.Текст) Тогда
ТекстыДляЗамены.ДляЗамены = Контекст.Заголовок + "( , """ + ФорматСтроки.Текст + """)";
ТекстыДляЗамены.ДляПоиска = Контекст.Заголовок + "(,,)";
КонецЕсли;
КонецЕсли;
АдресПараметровДляОбработкиОжидания = ПоместитьВоВременноеХранилище(ТекстыДляЗамены, УникальныйИдентификатор);
ПодключитьОбработчикОжидания("УстановитьЗначениеПослеПеретаскивания", 0.1, Истина);
КонецПроцедуры
#КонецОбласти
&НаКлиенте
Процедура УстановитьЗначениеПослеПеретаскивания()
ТекстыДляЗамены = ПолучитьИзВременногоХранилища(АдресПараметровДляОбработкиОжидания);
Если ПолучательПеретаскиваемогоЗначения = Элементы.ТекущееЗначение ИЛИ ПолучательПеретаскиваемогоЗначения = Неопределено Тогда
Элементы.ТекущееЗначение.ВыделенныйТекст = ТекстыДляЗамены.ДляЗамены;
Иначе
ТекущийРеквизит = ЭтотОбъект[ПолучательПеретаскиваемогоЗначения.Имя];
Если ТипЗнч(ТекущийРеквизит) = Тип("ФорматированныйДокумент") Тогда
ТекстДляРазмещения = СтрЗаменить(ТекущийРеквизит.ПолучитьТекст(), ТекстыДляЗамены.ДляПоиска, ТекстыДляЗамены.ДляЗамены);
ФорматированныйТекст = Новый ФорматированнаяСтрока(ТекстДляРазмещения);
ТекущийРеквизит.Удалить();
ТекущийРеквизит.УстановитьФорматированнуюСтроку(ФорматированныйТекст);
ИначеЕсли ТипЗнч(ТекущийРеквизит) = Тип("ТабличныйДокумент") Тогда
ТекущийРеквизит.ТекущаяОбласть.Текст = СтрЗаменить(ТекущийРеквизит.ТекущаяОбласть.Текст, ТекстыДляЗамены.ДляПоиска, ТекстыДляЗамены.ДляЗамены);
Иначе
ТекущийРеквизит = СтрЗаменить(ТекущийРеквизит, ТекстыДляЗамены.ДляПоиска, ТекстыДляЗамены.ДляЗамены);
КонецЕсли;
КонецЕсли;
ПолучательПеретаскиваемогоЗначения = Неопределено;
КонецПроцедуры
&НаКлиенте
Функция ПредставлениеТекущейТаблицы()
Для Каждого ПодключенныйСписокПолей Из ЭтотОбъект["ПодключенныеСпискиПолей"] Цикл
Если ПодключенныйСписокПолей.ИмяСпискаПолей <> ИмяСпискаОператоров() Тогда
Если Элементы[ПодключенныйСписокПолей.ИмяСпискаПолей].ТекущиеДанные <> Неопределено
И Элементы[ПодключенныйСписокПолей.ИмяСпискаПолей].ТекущиеДанные.Таблица Тогда
Возврат Элементы[ПодключенныйСписокПолей.ИмяСпискаПолей].ТекущиеДанные.ПредставлениеПутиКДанным;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Возврат Неопределено;
КонецФункции
&НаСервере
Процедура ЗаписатьМакетыНаДополнительныхЯзыках()
ПараметрыМакета = Новый Структура;
ПараметрыМакета.Вставить("ИдентификаторКопируемогоМакета", ИдентификаторКопируемогоМакета);
ПараметрыМакета.Вставить("ТекущийЯзык", ТекущийЯзык);
ПараметрыМакета.Вставить("УникальныйИдентификатор", УникальныйИдентификатор);
ПараметрыМакета.Вставить("ИдентификаторМакета", ИдентификаторМакета);
ПараметрыМакета.Вставить("ВладелецМакета", ВладелецМакета);
ПараметрыМакета.Вставить("ИмяДокумента", ИмяДокумента);
ПараметрыМакета.Вставить("СсылкаМакета", СсылкаМакета);
ПараметрыМакета.Вставить("ТипМакета", "MXL");
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Печать") Тогда
МодульУправлениеПечатью = ОбщегоНазначения.ОбщийМодуль("УправлениеПечатью");
МодульУправлениеПечатью.ЗаписатьМакетыНаДополнительныхЯзыках(ПараметрыМакета);
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция ПодготовитьМакетДляЗаписи(УстановитьКодЯзыка = Истина, Отказ = Ложь)
КодЯзыка = Неопределено;
Если УстановитьКодЯзыка Тогда
КодЯзыка = ТабличныйДокумент.КодЯзыка;
КонецЕсли;
Макет = СкопироватьТабличныйДокумент(ТабличныйДокумент, КодЯзыка);
Если Не ЭтоПечатнаяФорма Тогда
Возврат Макет;
КонецЕсли;
ОбработанныеОбласти = Новый Соответствие();
НомерПервойЗаполненнойСтроки = 0;
НомерПервойЗаполненнойКолонки = 0;
МассивИменКолонок = Новый Массив;
Для НомерСтроки = 1 По Макет.ВысотаТаблицы Цикл
Для НомерКолонки = 1 По Макет.ШиринаТаблицы Цикл
Область = Макет.Область(НомерСтроки, НомерКолонки);
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Печать") Тогда
МодульУправлениеПечатью = ОбщегоНазначения.ОбщийМодуль("УправлениеПечатью");
ИдентификаторОбласти = МодульУправлениеПечатью.ИдентификаторОбласти(Область);
Если ОбработанныеОбласти[ИдентификаторОбласти] <> Неопределено Тогда
Продолжить;
КонецЕсли;
ОбработанныеОбласти[ИдентификаторОбласти] = Истина;
КонецЕсли;
Если ЗначениеЗаполнено(Область.Текст) Тогда
ПредставлениеПоля = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'стр. %1 кол. %2'"), НомерСтроки, НомерКолонки);
ЗаменитьПредставленияПараметров(Область.Текст, , Отказ, ПредставлениеПоля);
Если НомерПервойЗаполненнойСтроки = 0 Тогда
НомерПервойЗаполненнойСтроки = НомерСтроки;
НомерПервойЗаполненнойКолонки = НомерКолонки;
КонецЕсли;
КонецЕсли;
Если МакетДляВыгрузкиОбъекта Тогда
ДанныеДляПроверки = Новый Структура;
ДанныеДляПроверки.Вставить("НомерПервойЗаполненнойСтроки", НомерПервойЗаполненнойСтроки);
ДанныеДляПроверки.Вставить("НомерПервойЗаполненнойКолонки", НомерПервойЗаполненнойКолонки);
ДанныеДляПроверки.Вставить("НомерСтроки", НомерСтроки);
ДанныеДляПроверки.Вставить("НомерКолонки", НомерКолонки);
ДанныеДляПроверки.Вставить("Макет", Макет);
ДанныеДляПроверки.Вставить("Область", Область);
ДанныеДляПроверки.Вставить("ТекстЯчейки", Область.Текст);
ПроверитьПоляВыгрузки(ДанныеДляПроверки, МассивИменКолонок, Отказ);
КонецЕсли;
КонецЦикла;
КонецЦикла;
ЗаменитьПредставленияПараметров(Макет.ВерхнийКолонтитул.ТекстСлева, "ТекстСлеваСверху", Отказ, НСтр("ru = 'верхний колонтитул слева'"));
ЗаменитьПредставленияПараметров(Макет.ВерхнийКолонтитул.ТекстВЦентре, "ТекстВЦентреСверху", Отказ, НСтр("ru = 'верхний колонтитул в центре'"));
ЗаменитьПредставленияПараметров(Макет.ВерхнийКолонтитул.ТекстСправа, "ТекстСправаСверху", Отказ, НСтр("ru = 'верхний колонтитул справа'"));
ЗаменитьПредставленияПараметров(Макет.НижнийКолонтитул.ТекстСлева, "ТекстСлеваСнизу", Отказ, НСтр("ru = 'нижний колонтитул слева'"));
ЗаменитьПредставленияПараметров(Макет.НижнийКолонтитул.ТекстВЦентре, "ТекстВЦентреСнизу", Отказ, НСтр("ru = 'нижний колонтитул в центре'"));
ЗаменитьПредставленияПараметров(Макет.НижнийКолонтитул.ТекстСправа, "ТекстСправаСнизу", Отказ, НСтр("ru = 'нижний колонтитул справа'"));
Для Каждого Область Из Макет.Области Цикл
Если ТипЗнч(Область) = Тип("ОбластьЯчеекТабличногоДокумента")
И Область.ТипОбласти = ТипОбластиЯчеекТабличногоДокумента.Строки Тогда
Если МакетДляВыгрузкиОбъекта
И НЕ ЗначениеЗаполнено(Область.ПараметрРасшифровки) Тогда
Продолжить;
КонецЕсли;
Область.ПараметрРасшифровки = ФормулаИзПредставления(Область.ПараметрРасшифровки);
КонецЕсли;
КонецЦикла;
ПереименоватьУсловныеОбласти(Макет, ПрефиксУсловнойОбласти(), МакетДляВыгрузкиОбъекта);
Если МакетДляВыгрузкиОбъекта Тогда
ПроверитьОбластиВыгрузки(Макет, Отказ);
КонецЕсли;
Возврат Макет;
КонецФункции
&НаСервереБезКонтекста
Процедура ПроверитьЯчейкиОбъединены(Знач Область, Знач НомерСтроки, Знач НомерКолонки, Отказ)
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Печать") Тогда
МодульУправлениеПечатью = ОбщегоНазначения.ОбщийМодуль("УправлениеПечатью");
Шаблон = НСтр("ru = 'Объединение ячеек запрещено (стр. %1 кол. %2)'");
ИдентификаторОбласти = МодульУправлениеПечатью.ИдентификаторОбласти(Область);
МассивАдреса = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ИдентификаторОбласти, ":");
Если МассивАдреса[0] <> МассивАдреса[2]
ИЛИ МассивАдреса[1] <> МассивАдреса[3] Тогда
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
Шаблон,
НомерСтроки,
НомерКолонки);
ОбщегоНазначения.СообщитьПользователю(ТекстОшибки,,,, Отказ);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаСервереБезКонтекста
Процедура ПроверитьИмяПоляDBF(Знач ТекстЯчейки, Знач НомерСтроки, Знач НомерКолонки, Отказ)
Если СтрДлина(ТекстЯчейки) > 10 Тогда
Шаблон = НСтр("ru = 'Имя поля не может превышать 10 знаков (стр. %1 кол. %2)'");
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
Шаблон,
НомерСтроки,
НомерКолонки);
ОбщегоНазначения.СообщитьПользователю(ТекстОшибки,,,, Отказ);
КонецЕсли;
ДопустимыеСимволы = "0123456789_";
Для Индекс = 1 По СтрДлина(ТекстЯчейки) Цикл
Символ = Сред(ТекстЯчейки, Индекс, 1);
Если СтрНайти(ДопустимыеСимволы, Символ) <> 0 Тогда
Продолжить;
КонецЕсли;
КодСимвола = КодСимвола(Символ);
ПервыйСимволЛатиницыВРег = 65;
ПоследнийСимволЛатиницыВРег = 90;
ПервыйСимволЛатиницыНРег = 97;
ПоследнийСимволЛатиницыНРег = 122;
ОшибкаКодаСимвола = ((КодСимвола < ПервыйСимволЛатиницыВРег)
Или (КодСимвола > ПоследнийСимволЛатиницыВРег
И КодСимвола < ПервыйСимволЛатиницыНРег)
Или (КодСимвола > ПоследнийСимволЛатиницыНРег));
Если ОшибкаКодаСимвола Тогда
Шаблон = НСтр("ru = 'Имена полей могут содержать только латинские буквы, цифры и символ подчеркивания (стр. %1 кол. %2)'");
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
Шаблон,
НомерСтроки,
НомерКолонки);
ОбщегоНазначения.СообщитьПользователю(ТекстОшибки,,,, Отказ);
Прервать;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаСервереБезКонтекста
Процедура ПроверитьПоляВыгрузкиDBF(Знач ДанныеДляПроверки, МассивИменКолонок, Отказ)
НомерСтрокиИменПолей = ДанныеДляПроверки.НомерПервойЗаполненнойСтроки;
НомерСтроки = ДанныеДляПроверки.НомерСтроки;
НомерКолонки = ДанныеДляПроверки.НомерКолонки;
Макет = ДанныеДляПроверки.Макет;
Область = ДанныеДляПроверки.Область;
ТекстЯчейки = ДанныеДляПроверки.ТекстЯчейки;
Если НомерСтрокиИменПолей = 0 Тогда
Возврат;
КонецЕсли;
ПроверитьЯчейкиОбъединены(Область, НомерСтроки, НомерКолонки, Отказ);
Если НЕ ПустаяСтрока(ТекстЯчейки) Тогда
Если НомерСтроки = НомерСтрокиИменПолей Тогда
Если МассивИменКолонок.Найти(ТекстЯчейки) <> Неопределено Тогда
Шаблон = НСтр("ru = 'Неуникальное имя колонки (стр. %1 кол. %2)'");
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
Шаблон,
НомерСтроки,
НомерКолонки);
ОбщегоНазначения.СообщитьПользователю(ТекстОшибки,,,, Отказ);
Иначе
ПроверитьИмяПоляDBF(ТекстЯчейки, НомерСтроки, НомерКолонки, Отказ);
МассивИменКолонок.Добавить(ТекстЯчейки);
КонецЕсли;
Иначе
ОбластьИменКолонок = Макет.Область(НомерСтрокиИменПолей, НомерКолонки);
ТекстЯчейкиИмен = ОбластьИменКолонок.Текст;
Если НомерСтроки > НомерСтрокиИменПолей + 1 Тогда
Шаблон = НСтр("ru = 'Данные выгрузки должны указываться в строке %1 (стр. %2 кол. %3)'");
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
Шаблон,
НомерСтрокиИменПолей + 1,
НомерСтроки,
НомерКолонки);
ОбщегоНазначения.СообщитьПользователю(ТекстОшибки,,,, Отказ);
КонецЕсли;
Если ПустаяСтрока(ТекстЯчейкиИмен) Тогда
Шаблон = НСтр("ru = 'Не указано имя колонки (кол. %1)'");
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
Шаблон,
НомерКолонки);
ОбщегоНазначения.СообщитьПользователю(ТекстОшибки,,,, Отказ);
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаСервереБезКонтекста
Процедура ПроверитьПоляВыгрузкиXML_JSON(Знач ДанныеДляПроверки, ЭтоXML, Отказ)
НомерСтроки = ДанныеДляПроверки.НомерСтроки;
НомерКолонки = ДанныеДляПроверки.НомерКолонки;
Область = ДанныеДляПроверки.Область;
Макет = ДанныеДляПроверки.Макет;
ТекстЯчейки = ДанныеДляПроверки.ТекстЯчейки;
ПроверитьЯчейкиОбъединены(Область, НомерСтроки, НомерКолонки, Отказ);
НомерКолонкиИменПолей = 1;
НомерКолонкиЗначений = 2;
Если НомерКолонки > НомерКолонкиЗначений
И НЕ ПустаяСтрока(ТекстЯчейки) Тогда
Шаблон = НСтр("ru = 'Имена полей и их значения должны располагаться в %1 и во %2 колонке соответственно (стр. %3 кол. %4)'");
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
Шаблон,
НомерКолонкиИменПолей,
НомерКолонкиЗначений,
НомерСтроки,
НомерКолонки);
ОбщегоНазначения.СообщитьПользователю(ТекстОшибки,,,, Отказ);
КонецЕсли;
Если НомерКолонки = НомерКолонкиИменПолей Тогда
Если НЕ ПустаяСтрока(ТекстЯчейки) Тогда
ПроверитьСимволыЯчейки(ТекстЯчейки, НомерСтроки, НомерКолонки, ЭтоXML, Отказ);
КонецЕсли;
ОбластьЗначение = Макет.Область(НомерСтроки, НомерКолонки + 1);
ТекстЗначения = ОбластьЗначение.Текст;
Если ПустаяСтрока(ТекстЯчейки) <> ПустаяСтрока(ТекстЗначения) Тогда
Шаблон = НСтр("ru = 'Имя поля и его значение не сопоставлены (стр. %1)'");
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
Шаблон,
НомерСтроки);
ОбщегоНазначения.СообщитьПользователю(ТекстОшибки,,,, Отказ);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаСервереБезКонтекста
Функция ТекстСоответствуетТребованиямКИменам(Знач Текст, ЭтоXML = Истина, ЗапрещеннаяПодстрока = Неопределено)
Результат = Новый Структура;
Результат.Вставить("СодержитЗапрещеннуюПодстроку", Ложь);
Результат.Вставить("СоответствуетТребованиямКИменам", Истина);
Если ЭтоXML Тогда
ШаблонВыражения = "^[\p{L}_]+[\w.-]*$";
Иначе
ШаблонВыражения = "^[\p{L}_]\w*$";
КонецЕсли;
Если ЗапрещеннаяПодстрока <> Неопределено Тогда
ДлинаЗапрещеннойПодстроки = СтрДлина(ЗапрещеннаяПодстрока);
КоличествоСимволов = Мин(СтрДлина(СокрЛП(Текст)), ДлинаЗапрещеннойПодстроки);
ПроверяемаяПодстрока = Лев(СокрЛП(Текст), КоличествоСимволов);
Результат.СодержитЗапрещеннуюПодстроку = (НРег(ПроверяемаяПодстрока) = НРег(ЗапрещеннаяПодстрока));
КонецЕсли;
Выражение = Текст;
РезультатВыражения = СтрНайтиПоРегулярномуВыражению(Выражение, ШаблонВыражения);
Результат.СоответствуетТребованиямКИменам = (РезультатВыражения.Длина <> 0);
Возврат Результат;
КонецФункции
&НаСервереБезКонтекста
Процедура ПроверитьСимволыЯчейки(Знач ТекстЯчейки, Знач НомерСтроки, Знач НомерКолонки, Знач ЭтоXML, Отказ)
ЗапрещеннаяПодстрока = Неопределено;
Если ЭтоXML Тогда
ШаблонНеСоответствуетТребованиям = НСтр("ru = 'Имя поля ""%1"" не соответствует требованиям к именам токенов XML (стр. %2 кол. %3)'");
ЗапрещеннаяПодстрока = "xml";
Иначе
ШаблонНеСоответствуетТребованиям = НСтр("ru = 'Имя поля ""%1"" не соответствует требованиям к именам переменных (стр. %2 кол. %3)'");
КонецЕсли;
РезультатПроверки = ТекстСоответствуетТребованиямКИменам(ТекстЯчейки, ЭтоXML, ЗапрещеннаяПодстрока);
Если РезультатПроверки.СодержитЗапрещеннуюПодстроку Тогда
ШаблонЗапрещеннаяСтрока = НСтр("ru = 'Имя поля ""%1"" не может начинаться с ""%2"" (стр. %3 кол. %4)'");
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
ШаблонЗапрещеннаяСтрока,
ТекстЯчейки,
ЗапрещеннаяПодстрока,
НомерСтроки,
НомерКолонки);
ОбщегоНазначения.СообщитьПользователю(ТекстОшибки,,,, Отказ);
КонецЕсли;
Если НЕ РезультатПроверки.СоответствуетТребованиямКИменам Тогда
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
ШаблонНеСоответствуетТребованиям,
ТекстЯчейки,
НомерСтроки,
НомерКолонки);
ОбщегоНазначения.СообщитьПользователю(ТекстОшибки,,,, Отказ);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ПроверитьПоляВыгрузки(Знач ДанныеДляПроверки, МассивИменКолонок, Отказ)
Если НЕ ЗначениеЗаполнено(ФорматСохраненияВыгрузки)
ИЛИ НЕ ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ВыгрузкаОбъектовВФайлы") Тогда
Возврат;
КонецЕсли;
МассивФорматовБезИспользованияТД = Новый Массив;
МодульВыгрузкаОбъектовВФайлы = ОбщегоНазначения.ОбщийМодуль("ВыгрузкаОбъектовВФайлы");
МассивФорматовБезИспользованияТД =
МодульВыгрузкаОбъектовВФайлы.ФорматыВыгрузкиБезИспользованияТабличногоДокумента();
Если МассивФорматовБезИспользованияТД.Найти(ФорматСохраненияВыгрузки) = Неопределено Тогда
Возврат;
КонецЕсли;
Если ФорматСохраненияВыгрузки = Перечисления.ФорматыВыгрузкиОбъектов.DBF Тогда
ПроверитьПоляВыгрузкиDBF(ДанныеДляПроверки, МассивИменКолонок, Отказ);
ИначеЕсли ФорматСохраненияВыгрузки = Перечисления.ФорматыВыгрузкиОбъектов.XML Тогда
ПроверитьПоляВыгрузкиXML_JSON(ДанныеДляПроверки, Истина, Отказ);
Иначе
ПроверитьПоляВыгрузкиXML_JSON(ДанныеДляПроверки, Ложь, Отказ);
КонецЕсли;
КонецПроцедуры
&НаСервереБезКонтекста
Функция ТаблицаОбластей(Знач Макет, ВсеОбласти = Ложь)
ОписаниеТиповСтрока = Новый ОписаниеТипов("Строка");
ОписаниеТиповЧисло = Новый ОписаниеТипов("Число");
ОписаниеТиповБулево = Новый ОписаниеТипов("Булево");
ТаблицаОбластей = Новый ТаблицаЗначений;
ТаблицаОбластей.Колонки.Добавить("Имя", ОписаниеТиповСтрока);
ТаблицаОбластей.Колонки.Добавить("Верх", ОписаниеТиповЧисло);
ТаблицаОбластей.Колонки.Добавить("Низ", ОписаниеТиповЧисло);
ТаблицаОбластей.Колонки.Добавить("ПараметрРасшифровки", ОписаниеТиповСтрока);
ТаблицаОбластей.Колонки.Добавить("Приоритет", ОписаниеТиповЧисло);
ТаблицаОбластей.Колонки.Добавить("ЭтоОбластьУсловияВывода", ОписаниеТиповБулево);
ТаблицаОбластей.Колонки.Добавить("ЭтоОбластьКартинки", ОписаниеТиповБулево);
Для Каждого Область Из Макет.Области Цикл
ДобавлятьОбластьВТаблицу = Ложь;
Если ВсеОбласти
ИЛИ ((ТипЗнч(Область) = Тип("ОбластьЯчеекТабличногоДокумента")
И Область.ТипОбласти = ТипОбластиЯчеекТабличногоДокумента.Строки)
ИЛИ ТипЗнч(Область) = Тип("РисунокТабличногоДокумента")) Тогда
ДобавлятьОбластьВТаблицу = Истина;
КонецЕсли;
Если ДобавлятьОбластьВТаблицу Тогда
НоваяСтрока = ТаблицаОбластей.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, Область);
НоваяСтрока.ЭтоОбластьКартинки = (ТипЗнч(Область) = Тип("РисунокТабличногоДокумента"));
Если Не ПустаяСтрока(Область.ПараметрРасшифровки)
И ТипЗнч(Область) = Тип("ОбластьЯчеекТабличногоДокумента")
И Область.ТипОбласти = ТипОбластиЯчеекТабличногоДокумента.Строки Тогда
НоваяСтрока.ЭтоОбластьУсловияВывода = Истина;
НоваяСтрока.Приоритет = 100;
КонецЕсли;
КонецЕсли;
КонецЦикла;
ТаблицаОбластей.Сортировать("Верх, Приоритет");
Возврат ТаблицаОбластей;
КонецФункции
&НаКлиенте
Процедура ПроверитьНаличиеНеИспользуемыхСвойств(ОбработчикЗавершения, ОсвободитьФайл)
Если НЕ ЗначениеЗаполнено(ФорматСохраненияВыгрузки) Тогда
Возврат;
КонецЕсли;
ЕстьНеиспользуемыеСвойства = ЕстьФорматированиеИОбластиНеИспользуемыеФорматомВыгрузки();
Если ЕстьНеиспользуемыеСвойства Тогда
НачатьДиалогУдаленияСвойств(ОбработчикЗавершения, ОсвободитьФайл);
Иначе
ЗаписатьТабличныйДокументИмяФайлаВыбрано(ОбработчикЗавершения, ОсвободитьФайл);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Асинх Процедура НачатьДиалогУдаленияСвойств(Знач ОбработчикЗавершения, ОсвободитьФайл)
ПараметрыОповещения = Новый Структура;
ПараметрыОповещения.Вставить("ОбработчикЗавершения", ОбработчикЗавершения);
ПараметрыОповещения.Вставить("ОсвободитьФайл", ОсвободитьФайл);
Оповещение = Новый ОписаниеОповещения("НачатьДиалогУдаленияСвойствЗавершение", ЭтотОбъект, ПараметрыОповещения);
ТекстПредупреждения = НСтр("ru = 'Форматирование макета или его содержимое не соответствует требованиям формата. При сохранении макета будут очищены неподходящие настройки.'");
Кнопки = Новый СписокЗначений();
Кнопки.Добавить("ОчиститьИСохранить", НСтр("ru = 'Очистить и сохранить'"));
Кнопки.Добавить("Отмена", НСтр("ru = 'Отмена'"));
ПараметрыВопроса = СтандартныеПодсистемыКлиент.ПараметрыВопросаПользователю();
ПараметрыВопроса.Картинка = БиблиотекаКартинок.ДиалогВосклицание;
ПараметрыВопроса.КнопкаПоУмолчанию = "ОчиститьИСохранить";
ПараметрыВопроса.ПредлагатьБольшеНеЗадаватьЭтотВопрос = Ложь;
ПараметрыВопроса.Заголовок = "";
СтандартныеПодсистемыКлиент.ПоказатьВопросПользователю(Оповещение, ТекстПредупреждения, Кнопки, ПараметрыВопроса);
КонецПроцедуры
&НаКлиенте
Процедура НачатьДиалогУдаленияСвойствЗавершение(РезультатВопроса, ДополнительныеПараметры) Экспорт
Если РезультатВопроса <> Неопределено Тогда
Если РезультатВопроса.Значение = "ОчиститьИСохранить" Тогда
ОбработчикЗавершения = ДополнительныеПараметры.ОбработчикЗавершения;
ОсвободитьФайл = ДополнительныеПараметры.ОсвободитьФайл;
УдалитьНеИспользуемыеСвойства();
ЗаписатьТабличныйДокументИмяФайлаВыбрано(ОбработчикЗавершения, ОсвободитьФайл);
ОповеститьОЗаписиТабличногоДокумента();
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура УдалитьНеИспользуемыеСвойства()
ОбработатьОбластиТабличногоДокумента();
ФорматыБезФорматированияТекста = ФорматыВыгрузкиНеТребующиеРаботыСТекстом();
Если ФорматыБезФорматированияТекста.Найти(ФорматСохраненияВыгрузки) <> Неопределено Тогда
Для НомерСтроки = 1 По ТабличныйДокумент.ВысотаТаблицы Цикл
Для НомерКолонки = 1 По ТабличныйДокумент.ШиринаТаблицы Цикл
Область = ТабличныйДокумент.Область(НомерСтроки, НомерКолонки);
ОчиститьФорматОбласти(Область);
Область.РазмещениеТекста = ТипРазмещенияТекстаТабличногоДокумента.Авто;
КонецЦикла;
КонецЦикла;
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ОбработатьОбластиТабличногоДокумента()
ФорматыВыгрузкиСОбластями = ФорматыВыгрузкиРазрешеноНаличияОбластей();
ФорматыСКартинками = ФорматыВыгрузкиРазрешеноНаличияКартинок();
МассивОбластейКартинок = Новый Массив;
МассивЗапрещенныхОбластей = Новый Массив;
Если ФорматыСКартинками.Найти(ФорматСохраненияВыгрузки) = Неопределено Тогда
Для Каждого ТекущаяОбласть Из ТабличныйДокумент.Рисунки Цикл
МассивОбластейКартинок.Добавить(ТекущаяОбласть);
КонецЦикла;
КонецЕсли;
ТаблицаДляАнализа = ТаблицаОбластей(ТабличныйДокумент, Истина);
Для Каждого ТекущаяСтрокаТаблицы Из ТаблицаДляАнализа Цикл
Если ТекущаяСтрокаТаблицы.ЭтоОбластьУсловияВывода
ИЛИ ТекущаяСтрокаТаблицы.ЭтоОбластьКартинки Тогда
Продолжить;
КонецЕсли;
ТекущаяОбласть = ТабличныйДокумент.Область(ТекущаяСтрокаТаблицы.Имя);
Если ФорматыВыгрузкиСОбластями.Найти(ФорматСохраненияВыгрузки) = Неопределено Тогда
МассивЗапрещенныхОбластей.Добавить(ТекущаяОбласть);
Иначе
Если ТекущаяОбласть.ТипОбласти <> ТипОбластиЯчеекТабличногоДокумента.Строки Тогда
МассивЗапрещенныхОбластей.Добавить(ТекущаяОбласть);
КонецЕсли;
КонецЕсли;
КонецЦикла;
Для Каждого ТекущаяОбласть Из МассивОбластейКартинок Цикл
ТабличныйДокумент.Рисунки.Удалить(ТекущаяОбласть);
КонецЦикла;
Для Каждого ТекущаяОбласть Из МассивЗапрещенныхОбластей Цикл
ТекущаяОбласть.Имя = "";
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Функция ЕстьФорматированиеИОбластиНеИспользуемыеФорматомВыгрузки()
ЕстьНеИспользуемыеМодификации = ЕстьОбластиНеИспользуемыеФорматомВыгрузки();
ФорматыБезФорматированияТекста = ФорматыВыгрузкиНеТребующиеРаботыСТекстом();
Если НЕ ЕстьНеИспользуемыеМодификации
И ФорматыБезФорматированияТекста.Найти(ФорматСохраненияВыгрузки) <> Неопределено Тогда
НовыйТабличныйДокумент = Новый ТабличныйДокумент;
ОбластьПоУмолчанию = НовыйТабличныйДокумент.Область(1, 1, 1, 1);
ШрифтПоУмолчанию = ОбластьПоУмолчанию.Шрифт;
ЦветПоУмолчанию = ЦветПоУмолчанию();
Для НомерСтроки = 1 По ТабличныйДокумент.ВысотаТаблицы Цикл
Для НомерКолонки = 1 По ТабличныйДокумент.ШиринаТаблицы Цикл
Область = ТабличныйДокумент.Область(НомерСтроки, НомерКолонки);
ЕстьНеИспользуемыеМодификации = ОбластьМодифицирована(
Область,
ОбластьПоУмолчанию,
ШрифтПоУмолчанию,
ЦветПоУмолчанию);
Если ЕстьНеИспользуемыеМодификации Тогда
Прервать;
КонецЕсли;
КонецЦикла;
Если ЕстьНеИспользуемыеМодификации Тогда
Прервать;
КонецЕсли;
КонецЦикла;
КонецЕсли;
Возврат ЕстьНеИспользуемыеМодификации;
КонецФункции
&НаКлиенте
Функция ОбластьМодифицирована(Область, ОбластьПоУмолчанию, ШрифтПоУмолчанию, ЦветПоУмолчанию)
Возврат НЕ (Область.Шрифт = ШрифтПоУмолчанию
И Область.ЦветРамки = ЦветПоУмолчанию
И Область.ЦветТекста = ЦветПоУмолчанию
И Область.ЦветУзора = ЦветПоУмолчанию
И Область.ЦветФона = ЦветПоУмолчанию
И Область.ВертикальноеПоложение = ОбластьПоУмолчанию.ВертикальноеПоложение
И Область.ВертикальноеПоложениеКартинки = ОбластьПоУмолчанию.ВертикальноеПоложениеКартинки
И Область.ГоризонтальноеПоложение = ОбластьПоУмолчанию.ГоризонтальноеПоложение
И Область.ГоризонтальноеПоложениеКартинки = ОбластьПоУмолчанию.ГоризонтальноеПоложениеКартинки
И Область.РазмещениеТекста = ТипРазмещенияТекстаТабличногоДокумента.Авто);
КонецФункции
&НаСервере
Функция ЕстьОбластиНеИспользуемыеФорматомВыгрузки()
ЕстьЗапрещенныеОбласти = Ложь;
ЕстьОбластиСКартинками = Ложь;
ФорматыВыгрузкиСОбластями = ФорматыВыгрузкиРазрешеноНаличияОбластей();
ФорматыСКартинками = ФорматыВыгрузкиРазрешеноНаличияКартинок();
ТаблицаДляАнализа = ТаблицаОбластей(ТабличныйДокумент, Истина);
Для Каждого ТекущаяСтрокаТаблицы Из ТаблицаДляАнализа Цикл
Если ТекущаяСтрокаТаблицы.ЭтоОбластьУсловияВывода
ИЛИ ТекущаяСтрокаТаблицы.ЭтоОбластьКартинки Тогда
Продолжить;
КонецЕсли;
Если ФорматыВыгрузкиСОбластями.Найти(ФорматСохраненияВыгрузки) = Неопределено Тогда
ЕстьЗапрещенныеОбласти = Истина;
Прервать;
Иначе
ТекущаяОбласть = ТабличныйДокумент.Область(ТекущаяСтрокаТаблицы.Имя);
Если ТекущаяОбласть.ТипОбласти <> ТипОбластиЯчеекТабличногоДокумента.Строки Тогда
ЕстьЗапрещенныеОбласти = Истина;
Прервать;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Если ФорматыСКартинками.Найти(ФорматСохраненияВыгрузки) = Неопределено Тогда
ЕстьОбластиСКартинками = (ТабличныйДокумент.Рисунки.Количество() > 0);
КонецЕсли;
Возврат Макс(ЕстьЗапрещенныеОбласти, ЕстьОбластиСКартинками);
КонецФункции
&НаСервере
Процедура ПроверитьОбластиУсловий(Знач ТаблицаОбластей, Отказ)
НомерСтрокиОбласти = 0;
Для Каждого ОбластьМакета Из ТаблицаОбластей Цикл
Если НомерСтрокиОбласти <> ОбластьМакета.Верх Тогда
НомерСтрокиОбласти = ОбластьМакета.Верх;
Продолжить;
КонецЕсли;
Если ОбластьМакета.ЭтоОбластьУсловияВывода Тогда
Шаблон = НСтр("ru = 'Область условия должна располагаться ниже области владельца хотя бы на одну строку (стр. %1)'");
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
Шаблон,
ОбластьМакета.Верх);
ОбщегоНазначения.СообщитьПользователю(ТекстОшибки,,,, Отказ);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура ПроверитьИмяОбластей(Знач ТаблицаОбластей, Отказ)
Если ФорматСохраненияВыгрузки <> Перечисления.ФорматыВыгрузкиОбъектов.XML Тогда
Возврат;
КонецЕсли;
ЗапрещеннаяПодстрока = "xml";
ШаблонНеСоответствуетТребованиям = НСтр("ru = 'Имя области ""%1"" не соответствует требованиям к именам токенов XML (стр. %2)'");
ШаблонЗапрещеннаяСтрока = НСтр("ru = 'Имя области ""%1"" не может начинаться с ""%2"" (стр. %3)'");
Для Каждого ОбластьМакета Из ТаблицаОбластей Цикл
Если ОбластьМакета.ЭтоОбластьУсловияВывода Тогда
Продолжить;
КонецЕсли;
ИмяОбласти = ОбластьМакета.Имя;
МассивИмен = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ИмяОбласти, "_");
Если МассивИмен.Количество() = 1 Тогда
РезультатПроверки = ТекстСоответствуетТребованиямКИменам(ИмяОбласти,, ЗапрещеннаяПодстрока);
Если РезультатПроверки.СодержитЗапрещеннуюПодстроку Тогда
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
ШаблонЗапрещеннаяСтрока,
ИмяОбласти,
ЗапрещеннаяПодстрока,
ОбластьМакета.Верх);
ОбщегоНазначения.СообщитьПользователю(ТекстОшибки,,,, Отказ);
КонецЕсли;
Если НЕ РезультатПроверки.СоответствуетТребованиямКИменам Тогда
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
ШаблонНеСоответствуетТребованиям,
ИмяОбласти,
ОбластьМакета.Верх);
ОбщегоНазначения.СообщитьПользователю(ТекстОшибки,,,, Отказ);
КонецЕсли;
Иначе
ПроверитьМассивИменОбласти(ИмяОбласти, МассивИмен, ОбластьМакета, ЗапрещеннаяПодстрока, Отказ);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура ПроверитьМассивИменОбласти(Знач ИмяОбласти, Знач МассивИмен, ОбластьМакета, ЗапрещеннаяПодстрока, Отказ)
Верх = ОбластьМакета.Верх;
СчетчикМассива = 0;
НомерПервойПодстроки = 1;
НомерВторойПодстроки = 2;
ШаблонНеСоответствуетТребованиямДо = НСтр("ru = 'Часть имени области ""%1"" до первого символа ''_'' не соответствует требованиям к именам токенов XML (стр. %2)'");
ШаблонНеСоответствуетТребованиямПосле = НСтр("ru = 'Часть имени области ""%1"" после первого символа ''_'' не соответствует требованиям к именам токенов XML (стр. %2)'");
ШаблонЗапрещеннаяСтрока = НСтр("ru = 'Имя области не может начинаться с ""%1"" (стр. %2)'");
ШаблонЗапрещеннаяСтрокаПосле = НСтр("ru = 'Часть имени области ""%1"" после первого символа ''_'' не может начинаться с ""%2"" (стр. %3)'");
Для Каждого ТекущееИмя Из МассивИмен Цикл
СчетчикМассива = СчетчикМассива + 1;
Если СчетчикМассива > НомерВторойПодстроки Тогда
Прервать;
КонецЕсли;
РезультатПроверки = ТекстСоответствуетТребованиямКИменам(ТекущееИмя,, ЗапрещеннаяПодстрока);
Если РезультатПроверки.СодержитЗапрещеннуюПодстроку Тогда
Если СчетчикМассива = НомерПервойПодстроки Тогда
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
ШаблонЗапрещеннаяСтрока,
ИмяОбласти,
ЗапрещеннаяПодстрока,
Верх);
Иначе
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
ШаблонЗапрещеннаяСтрокаПосле,
ИмяОбласти,
ЗапрещеннаяПодстрока,
Верх);
КонецЕсли;
ОбщегоНазначения.СообщитьПользователю(ТекстОшибки,,,, Отказ);
КонецЕсли;
Если НЕ РезультатПроверки.СоответствуетТребованиямКИменам Тогда
Если СчетчикМассива = НомерПервойПодстроки Тогда
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
ШаблонНеСоответствуетТребованиямДо,
ИмяОбласти,
Верх);
Иначе
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
ШаблонНеСоответствуетТребованиямПосле,
ИмяОбласти,
Верх);
КонецЕсли;
ОбщегоНазначения.СообщитьПользователю(ТекстОшибки,,,, Отказ);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура ПроверитьПересечениеОбластей(Знач ТаблицаОбластей, Отказ)
ТаблицаОбластейВЗапрос = ТаблицаОбластей.Скопировать();
ТаблицаОбластейВЗапрос.Колонки.Добавить("НомерОбласти", Новый ОписаниеТипов("Число"));
ТаблицаОбластейВЗапрос.Колонки.Верх.Имя = "ВерхОбласти";
ТаблицаОбластейВЗапрос.Колонки.Низ.Имя = "НизОбласти";
СчетчикСтрок = 0;
Для Каждого ТекущаяСтрока Из ТаблицаОбластейВЗапрос Цикл
СчетчикСтрок = СчетчикСтрок + 1;
ТекущаяСтрока.НомерОбласти = СчетчикСтрок;
КонецЦикла;
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("ТаблицаОбластей", ТаблицаОбластейВЗапрос);
Запрос.Текст =
"ВЫБРАТЬ
| ТаблицаОбластей.Имя КАК Имя,
| ТаблицаОбластей.ВерхОбласти КАК ВерхОбласти,
| ТаблицаОбластей.НизОбласти КАК НизОбласти,
| ТаблицаОбластей.НомерОбласти КАК НомерОбласти
|ПОМЕСТИТЬ ВТ_ТаблицаОбластей
|ИЗ
| &ТаблицаОбластей КАК ТаблицаОбластей
|;
|
|
|ВЫБРАТЬ
| ВТ_ТаблицаОбластей.Имя КАК ИмяОбласти,
| ВТ_ТаблицаОбластейПересечение.Имя КАК ИмяОбластиПересечения
|ИЗ
| ВТ_ТаблицаОбластей КАК ВТ_ТаблицаОбластей
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ ВТ_ТаблицаОбластей КАК ВТ_ТаблицаОбластейПересечение
| ПО ВТ_ТаблицаОбластей.ВерхОбласти < ВТ_ТаблицаОбластейПересечение.ВерхОбласти
| И ВТ_ТаблицаОбластей.НизОбласти < ВТ_ТаблицаОбластейПересечение.НизОбласти
| И ВТ_ТаблицаОбластей.НизОбласти >= ВТ_ТаблицаОбластейПересечение.ВерхОбласти
| И ВТ_ТаблицаОбластей.НомерОбласти <> ВТ_ТаблицаОбластейПересечение.НомерОбласти
|
|УПОРЯДОЧИТЬ ПО
| ВТ_ТаблицаОбластей.НомерОбласти";
Результат = Запрос.Выполнить();
Если НЕ Результат.Пустой() Тогда
Шаблон = НСтр("ru = 'Для типа макета выгрузки ""%1"" не допускается пересечение областей ""%2"" и ""%3""'");
Выборка = Результат.Выбрать();
Пока Выборка.Следующий() Цикл
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
Шаблон,
ФорматСохраненияВыгрузки,
Выборка.ИмяОбласти,
Выборка.ИмяОбластиПересечения);
ОбщегоНазначения.СообщитьПользователю(ТекстОшибки,,,, Отказ);
КонецЦикла;
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ПроверитьВхождениеТаблиц(Знач Макет, Знач ТаблицаОбластей, Отказ)
Если Не ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ВыгрузкаОбъектовВФайлы") Тогда
Возврат;
КонецЕсли;
Если Не ЗначениеЗаполнено(Образец) Тогда
Возврат;
КонецЕсли;
МодульУправлениеПечатью = ОбщегоНазначения.ОбщийМодуль("УправлениеПечатью");
МодульВыгрузкаОбъектовВФайлы = ОбщегоНазначения.ОбщийМодуль("ВыгрузкаОбъектовВФайлы");
КоллекцияПолей = ЭтотОбъект[ИмяСпискаПолей()];
Объекты = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Образец);
ОтображаемыеПоля = ЗаполнитьСписокОтображаемыхПолей(КоллекцияПолей);
Попытка
ДанныеПечати = МодульУправлениеПечатью.ДанныеПечати(Объекты, ОтображаемыеПоля, ТекущийЯзык);
Исключение
РазблокироватьДанныеДляРедактирования(КлючОбъектаРедактирования, УникальныйИдентификатор);
ВызватьИсключение ОбработкаОшибок.ПодробноеПредставлениеОшибки(ИнформацияОбОшибке());
КонецПопытки;
ОбластиМакета = МодульУправлениеПечатью.ОбластиМакета(Макет, ДанныеПечати);
ОбластиТаблиц = ОбластиМакета.ОбластиТаблиц;
ТаблицыМакета = МодульВыгрузкаОбъектовВФайлы.ТаблицыМакета(Макет, ОбластиТаблиц);
ТаблицыМакетаОбластей = ТаблицыМакета.Скопировать();
ТаблицыМакетаОбластей.Очистить();
ТаблицыМакетаОбластей.Колонки.Добавить("ИмяОбласти", Новый ОписаниеТипов("Строка"));
Для Каждого ТекущаяТаблицаМакета Из ТаблицыМакета Цикл
ВерхТаблицы = ТекущаяТаблицаМакета.Верх;
НизТаблицы = ТекущаяТаблицаМакета.Низ;
МаксимальныйВерхОбласти = 0;
МинимальныйНизОбласти = 9999999999;
Для Каждого ТекущаяОбласть Из ТаблицаОбластей Цикл
Если ТекущаяОбласть.ЭтоОбластьУсловияВывода Тогда
Продолжить;
КонецЕсли;
ВерхОбласти = ТекущаяОбласть.Верх;
НизОбласти = ТекущаяОбласть.Низ;
Если ВерхОбласти <= ВерхТаблицы
И НизОбласти >= НизТаблицы Тогда
МаксимальныйВерхОбласти = Макс(МаксимальныйВерхОбласти, ВерхОбласти);
МинимальныйНизОбласти = Мин(МинимальныйНизОбласти, НизОбласти);
КонецЕсли;
КонецЦикла;
Если МаксимальныйВерхОбласти <> 0 Тогда
Отбор = Новый Структура;
Отбор.Вставить("Верх", МаксимальныйВерхОбласти);
Отбор.Вставить("Низ", МинимальныйНизОбласти);
НайденныеСтроки = ТаблицаОбластей.НайтиСтроки(Отбор);
Если НайденныеСтроки.Количество() Тогда
ИмяОбласти = НайденныеСтроки[0].Имя;
НоваяСтрока = ТаблицыМакетаОбластей.Добавить();
ЗаполнитьЗначенияСвойств(НоваяСтрока, ТекущаяТаблицаМакета);
НоваяСтрока.ИмяОбласти = ИмяОбласти;
КонецЕсли;
КонецЕсли;
КонецЦикла;
ТаблицыМакетаОбластей.Сортировать("ИмяОбласти, Верх");
АнализТаблицыМакетаОбластей(ТаблицыМакетаОбластей, ТаблицаОбластей, Отказ);
КонецПроцедуры
&НаСервере
Процедура АнализТаблицыМакетаОбластей(Знач ТаблицыМакетаОбластей, Знач ТаблицаОбластей, Отказ)
Если ТаблицыМакетаОбластей.Количество() <= 1 Тогда
Возврат;
КонецЕсли;
Для Каждого ТекущаяОбласть Из ТаблицаОбластей Цикл
Если ТекущаяОбласть.ЭтоОбластьУсловияВывода Тогда
Продолжить;
КонецЕсли;
ИмяОбласти = ТекущаяОбласть.Имя;
Отбор = Новый Структура;
Отбор.Вставить("ИмяОбласти", ИмяОбласти);
НайденныеСтроки = ТаблицыМакетаОбластей.НайтиСтроки(Отбор);
Если НайденныеСтроки.Количество() <= 1 Тогда
Продолжить;
КонецЕсли;
ИмяТаблицы = НайденныеСтроки[0].Имя;
Для Каждого НайденнаяСтрока Из НайденныеСтроки Цикл
ИмяТаблицыТекущее = НайденнаяСтрока.Имя;
Если ИмяТаблицы = ИмяТаблицыТекущее Тогда
Продолжить;
КонецЕсли;
Шаблон = НСтр("ru = 'В области ""%1"" уже есть таблица ""%2"". Область может содержать только одну таблицу (стр. %3)'");
ВерхОбласти = НайденнаяСтрока.Верх;
НизОбласти = НайденнаяСтрока.Низ;
Пока ВерхОбласти <= НизОбласти Цикл
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
Шаблон,
ИмяОбласти,
ИмяТаблицы,
ВерхОбласти);
ОбщегоНазначения.СообщитьПользователю(ТекстОшибки,,,, Отказ);
ВерхОбласти = ВерхОбласти + 1;
КонецЦикла;
КонецЦикла;
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура ПроверитьОбластиВыгрузки(Знач Макет, Отказ)
ТаблицаОбластей = ТаблицаОбластей(Макет);
ОбластиПрисутствуют = (ТаблицаОбластей.Количество() > 0);
Если ОбластиПрисутствуют Тогда
ОшибкаОбластиУсловий = Ложь;
ПроверитьОбластиУсловий(ТаблицаОбластей, ОшибкаОбластиУсловий);
Если ОшибкаОбластиУсловий Тогда
Отказ = Истина;
КонецЕсли;
Если ФорматСохраненияВыгрузки = Перечисления.ФорматыВыгрузкиОбъектов.XML
ИЛИ ФорматСохраненияВыгрузки = Перечисления.ФорматыВыгрузкиОбъектов.JSON Тогда
Если НЕ ОшибкаОбластиУсловий Тогда
ПроверитьИмяОбластей(ТаблицаОбластей, Отказ);
КонецЕсли;
ПроверитьПересечениеОбластей(ТаблицаОбластей, Отказ);
ПроверитьВхождениеТаблиц(Макет, ТаблицаОбластей, Отказ);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура ЗаменитьПредставленияПараметров(Строка, Поле = Неопределено, Отказ = Ложь, ПредставлениеПоля = "")
ПараметрыЗамены = ФормулыИзТекста(Строка(Строка));
Для Каждого Параметр Из ПараметрыЗамены Цикл
Формула = Параметр.Ключ;
Если СтрЧислоВхождений(Формула, "[") > 1 Тогда
Формула = Сред(Формула, 2, СтрДлина(Формула) - 2);
КонецЕсли;
ТекстОшибки = "";
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонструкторФормул") Тогда
МодульКонструкторФормулСлужебный = ОбщегоНазначения.ОбщийМодуль("КонструкторФормулСлужебный");
ТекстОшибки = МодульКонструкторФормулСлужебный.ПроверитьФормулу(ЭтотОбъект, Формула);
КонецЕсли;
Если ЗначениеЗаполнено(ТекстОшибки) Тогда
Если ЗначениеЗаполнено(ПредставлениеПоля) Тогда
ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = '%1 (%2)'"),
ТекстОшибки,
ПредставлениеПоля);
КонецЕсли;
ОбщегоНазначения.СообщитьПользователю(ТекстОшибки, , Поле, , Отказ);
КонецЕсли;
КонецЦикла;
Если ТипЗнч(Строка) = Тип("ФорматированнаяСтрока") Тогда
Строка = ЗаменитьВФорматированнойСтроке(Строка, ПараметрыЗамены);
Иначе
Строка = ЗаменитьВСтроке(Строка, ПараметрыЗамены);
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция ЗаменитьВСтроке(Знач Строка, ПараметрыЗамены)
Для Каждого Элемент Из ПараметрыЗамены Цикл
ПодстрокаПоиска = Элемент.Ключ;
ПодстрокаЗамены = Элемент.Значение;
Строка = СтрЗаменить(Строка, ПодстрокаПоиска, ПодстрокаЗамены);
КонецЦикла;
Возврат Строка;
КонецФункции
&НаСервере
Функция ЗаменитьВФорматированнойСтроке(Строка, ПараметрыЗамены)
ФорматированныйДокумент = Новый ФорматированныйДокумент;
ФорматированныйДокумент.УстановитьФорматированнуюСтроку(Строка);
Для Каждого Элемент Из ПараметрыЗамены Цикл
ПодстрокаПоиска = Элемент.Ключ;
ПодстрокаЗамены = Элемент.Значение;
НайденнаяОбласть = ФорматированныйДокумент.НайтиТекст(ПодстрокаПоиска);
Пока НайденнаяОбласть <> Неопределено Цикл
Фрагменты = ФорматированныйДокумент.СформироватьЭлементы(НайденнаяОбласть.ЗакладкаНачала, НайденнаяОбласть.ЗакладкаКонца);
Для Индекс = 1 По Фрагменты.ВГраница() Цикл
Фрагменты[0].Текст = Фрагменты[0].Текст + Фрагменты[Индекс].Текст;
Фрагменты[Индекс].Текст = "";
КонецЦикла;
Фрагменты[0].Текст = СтрЗаменить(Фрагменты[0].Текст, ПодстрокаПоиска, ПодстрокаЗамены);
НайденнаяОбласть = ФорматированныйДокумент.НайтиТекст(ПодстрокаПоиска, НайденнаяОбласть.ЗакладкаКонца);
КонецЦикла;
КонецЦикла;
Возврат ФорматированныйДокумент.ПолучитьФорматированнуюСтроку();
КонецФункции
&НаСервере
Функция ФормулыИзТекста(Знач Текст)
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Печать") Тогда
МодульУправлениеПечатью = ОбщегоНазначения.ОбщийМодуль("УправлениеПечатью");
Возврат МодульУправлениеПечатью.ФормулыИзТекста(Текст, ЭтотОбъект);
КонецЕсли;
КонецФункции
&НаСервере
Функция ФормулаИзПредставления(Представление)
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Печать") Тогда
МодульУправлениеПечатью = ОбщегоНазначения.ОбщийМодуль("УправлениеПечатью");
Возврат МодульУправлениеПечатью.ФормулаИзПредставления(ЭтотОбъект, Представление);
КонецЕсли;
Возврат Представление;
КонецФункции
&НаСервере
Функция ПредставленияПараметровТекста(Знач Текст)
Результат = Новый Соответствие();
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Печать") Тогда
МодульУправлениеПечатью = ОбщегоНазначения.ОбщийМодуль("УправлениеПечатью");
Возврат МодульУправлениеПечатью.ПредставленияПараметровТекста(Текст, ЭтотОбъект);
КонецЕсли;
Возврат Результат;
КонецФункции
&НаСервере
Функция ПрочитатьМакет(Знач ДвоичныеДанные = Неопределено)
КодЯзыка = ТабличныйДокумент.КодЯзыка;
Если ДвоичныеДанные <> Неопределено Тогда
ТабличныйДокумент.КодЯзыка = Неопределено;
ТабличныйДокумент.Прочитать(ДвоичныеДанные.ОткрытьПотокДляЧтения());
КонецЕсли;
Макет = СкопироватьТабличныйДокумент(ТабличныйДокумент, КодЯзыка);
Если Не ЭтоПечатнаяФорма Тогда
Возврат Макет;
КонецЕсли;
ОбработанныеОбласти = Новый Соответствие();
Для НомерСтроки = 1 По Макет.ВысотаТаблицы Цикл
Для НомерКолонки = 1 По Макет.ШиринаТаблицы Цикл
Область = Макет.Область(НомерСтроки, НомерКолонки);
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Печать") Тогда
МодульУправлениеПечатью = ОбщегоНазначения.ОбщийМодуль("УправлениеПечатью");
ИдентификаторОбласти = МодульУправлениеПечатью.ИдентификаторОбласти(Область);
Если ОбработанныеОбласти[ИдентификаторОбласти] <> Неопределено Тогда
Продолжить;
КонецЕсли;
ОбработанныеОбласти[ИдентификаторОбласти] = Истина;
КонецЕсли;
Если ЗначениеЗаполнено(Область.Текст) Тогда
ЗаменитьПараметрыПредставлениями(Область.Текст);
КонецЕсли;
КонецЦикла;
КонецЦикла;
ЗаменитьПараметрыПредставлениями(Макет.ВерхнийКолонтитул.ТекстСлева);
ЗаменитьПараметрыПредставлениями(Макет.ВерхнийКолонтитул.ТекстВЦентре);
ЗаменитьПараметрыПредставлениями(Макет.ВерхнийКолонтитул.ТекстСправа);
ЗаменитьПараметрыПредставлениями(Макет.НижнийКолонтитул.ТекстСлева);
ЗаменитьПараметрыПредставлениями(Макет.НижнийКолонтитул.ТекстВЦентре);
ЗаменитьПараметрыПредставлениями(Макет.НижнийКолонтитул.ТекстСправа);
Для Каждого Область Из Макет.Области Цикл
Если ТипЗнч(Область) = Тип("ОбластьЯчеекТабличногоДокумента")
И Область.ТипОбласти = ТипОбластиЯчеекТабличногоДокумента.Строки Тогда
Если МакетДляВыгрузкиОбъекта
И НЕ ЗначениеЗаполнено(Область.ПараметрРасшифровки) Тогда
Продолжить;
КонецЕсли;
Область.ПараметрРасшифровки = ПредставлениеФормулы(Область.ПараметрРасшифровки);
КонецЕсли;
КонецЦикла;
ПереименоватьУсловныеОбласти(Макет, ЛокализованныйПрефиксУсловнойОбласти(), МакетДляВыгрузкиОбъекта);
Возврат Макет;
КонецФункции
&НаСервере
Процедура ЗаменитьПараметрыПредставлениями(Строка)
ПараметрыЗамены = ПредставленияПараметровТекста(Строка(Строка));
Если ТипЗнч(Строка) = Тип("ФорматированнаяСтрока") Тогда
Строка = ЗаменитьВФорматированнойСтроке(Строка, ПараметрыЗамены);
Иначе
Строка = ЗаменитьВСтроке(Строка, ПараметрыЗамены);
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция ПредставлениеФормулы(Знач Формула)
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Печать") Тогда
МодульУправлениеПечатью = ОбщегоНазначения.ОбщийМодуль("УправлениеПечатью");
Возврат МодульУправлениеПечатью.ПредставлениеФормулы(ЭтотОбъект, Формула);
КонецЕсли;
Возврат Формула;
КонецФункции
&НаСервереБезКонтекста
Функция СкопироватьТабличныйДокумент(ТабличныйДокумент, КодЯзыка)
Результат = Новый ТабличныйДокумент;
Результат.Макет = ТабличныйДокумент.Макет;
Результат.КодЯзыка = КодЯзыка;
Результат.Вывести(ТабличныйДокумент);
ОбработанныеЯчейки = Новый Соответствие;
Для НомерСтроки = 1 По ТабличныйДокумент.ВысотаТаблицы Цикл
Для НомерСтолбца = 1 По ТабличныйДокумент.ШиринаТаблицы Цикл
КопируемаяЯчейка = ТабличныйДокумент.Область(НомерСтроки, НомерСтолбца, НомерСтроки, НомерСтолбца);
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Печать") Тогда
МодульУправлениеПечатью = ОбщегоНазначения.ОбщийМодуль("УправлениеПечатью");
ИдентификаторОбласти = МодульУправлениеПечатью.ИдентификаторОбласти(КопируемаяЯчейка);
Если ОбработанныеЯчейки[ИдентификаторОбласти] <> Неопределено Тогда
Продолжить;
КонецЕсли;
ОбработанныеЯчейки[ИдентификаторОбласти] = Истина;
КонецЕсли;
Если КопируемаяЯчейка.Заполнение = ТипЗаполненияОбластиТабличногоДокумента.Текст Тогда
Продолжить;
КонецЕсли;
Ячейка = Результат.Область(НомерСтроки, НомерСтолбца, НомерСтроки, НомерСтолбца);
ЗаполнитьЗначенияСвойств(Ячейка, КопируемаяЯчейка, , "ФорматСтрок");
Если КопируемаяЯчейка.Заполнение = ТипЗаполненияОбластиТабличногоДокумента.Шаблон Тогда
Ячейка.Текст = КопируемаяЯчейка.Текст;
КонецЕсли;
КонецЦикла;
КонецЦикла;
Результат.ВерхнийКолонтитул.ТекстСлева = ТабличныйДокумент.ВерхнийКолонтитул.ТекстСлева;
Результат.ВерхнийКолонтитул.ТекстВЦентре = ТабличныйДокумент.ВерхнийКолонтитул.ТекстВЦентре;
Результат.ВерхнийКолонтитул.ТекстСправа = ТабличныйДокумент.ВерхнийКолонтитул.ТекстСправа;
Результат.НижнийКолонтитул.ТекстСлева = ТабличныйДокумент.НижнийКолонтитул.ТекстСлева;
Результат.НижнийКолонтитул.ТекстВЦентре = ТабличныйДокумент.НижнийКолонтитул.ТекстВЦентре;
Результат.НижнийКолонтитул.ТекстСправа = ТабличныйДокумент.НижнийКолонтитул.ТекстСправа;
ТаблицаОбластей = ТаблицаОбластей(ТабличныйДокумент);
Для Каждого ТекущаяОбласть Из ТаблицаОбластей Цикл
Область = Результат.Области.Найти(ТекущаяОбласть.Имя);
Если Область = Неопределено Тогда
Продолжить;
КонецЕсли;
Если ТипЗнч(Область) = Тип("ОбластьЯчеекТабличногоДокумента")
И Область.ТипОбласти = ТипОбластиЯчеекТабличногоДокумента.Строки
Или ТипЗнч(Область) = Тип("РисунокТабличногоДокумента")
И Область.ТипРисунка <> ТипРисункаТабличногоДокумента.Группа Тогда
КопируемаяОбласть = ТабличныйДокумент.Области.Найти(Область.Имя);
Если КопируемаяОбласть = Неопределено Тогда
Продолжить;
КонецЕсли;
Область.ПараметрРасшифровки = КопируемаяОбласть.ПараметрРасшифровки;
КонецЕсли;
КонецЦикла;
Возврат Результат;
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Процедура ПрочитатьТекстВПолеКолонтитула(Знач Текст, Колонтитул)
ФорматированнаяСтрока = Текст;
Если ТипЗнч(Текст) = Тип("Строка") Тогда
ФорматированнаяСтрока = Новый ФорматированнаяСтрока(Текст);
КонецЕсли;
Колонтитул.УстановитьФорматированнуюСтроку(ФорматированнаяСтрока);
КонецПроцедуры
&НаКлиенте
Процедура ПереключитьВидимостьКомандКолонтитулов()
Если ТекущийЭлемент = Элементы.ТекстСлеваСверху
Или ТекущийЭлемент = Элементы.ТекстВЦентреСверху
Или ТекущийЭлемент = Элементы.ТекстСправаСверху
Или ТекущийЭлемент = Элементы.ТекстСлеваСнизу
Или ТекущийЭлемент = Элементы.ТекстВЦентреСнизу
Или ТекущийЭлемент = Элементы.ТекстСправаСнизу Тогда
ПереключитьВидимостьЭлемента(Элементы.КомандыТекстаСлеваВерхнегоКолонтитула, ТекущийЭлемент = Элементы.ТекстСлеваСверху);
ПереключитьВидимостьЭлемента(Элементы.КомандыТекстаВЦентреВерхнегоКолонтитула, ТекущийЭлемент = Элементы.ТекстВЦентреСверху);
ПереключитьВидимостьЭлемента(Элементы.КомандыТекстаСправаВерхнегоКолонтитула, ТекущийЭлемент = Элементы.ТекстСправаСверху);
ПереключитьВидимостьЭлемента(Элементы.КомандыТекстаСлеваНижнегоКолонтитула, ТекущийЭлемент = Элементы.ТекстСлеваСнизу);
ПереключитьВидимостьЭлемента(Элементы.КомандыТекстаВЦентреНижнегоКолонтитула, ТекущийЭлемент = Элементы.ТекстВЦентреСнизу);
ПереключитьВидимостьЭлемента(Элементы.КомандыТекстаСправаНижнегоКолонтитула, ТекущийЭлемент = Элементы.ТекстСправаСнизу);
КонецЕсли;
ПодключитьОбработчикОжидания("ПереключитьВидимостьКомандКолонтитулов", 0.5, Истина);
КонецПроцедуры
&НаКлиенте
Процедура ПереключитьВидимостьЭлемента(Элемент, Видимость)
Если Элемент.Видимость <> Видимость Тогда
Элемент.Видимость = Видимость;
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция ЗаписатьМакет(ПрерватьЗаписьПриНаличииОшибокВМакете = Ложь, АдресМакетаВоВременномХранилище = "")
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Печать") Тогда
Отказ = Ложь;
Если Не ЗначениеЗаполнено(АдресМакетаВоВременномХранилище) Тогда
Если ЭтоПечатнаяФорма Тогда
Макет = ПодготовитьМакетДляЗаписи(, Отказ);
Иначе
Макет = ТабличныйДокумент;
КонецЕсли;
АдресМакетаВоВременномХранилище = ПоместитьВоВременноеХранилище(Макет, УникальныйИдентификатор);
КонецЕсли;
Если Отказ И ПрерватьЗаписьПриНаличииОшибокВМакете Тогда
Возврат Ложь;
КонецЕсли;
МодульУправлениеПечатью = ОбщегоНазначения.ОбщийМодуль("УправлениеПечатью");
ОписаниеМакета = МодульУправлениеПечатью.ОписаниеМакета();
ОписаниеМакета.ИмяОбъектаМетаданныхМакета = ИдентификаторМакета;
ОписаниеМакета.АдресМакетаВоВременномХранилище = АдресМакетаВоВременномХранилище;
ОписаниеМакета.КодЯзыка = ТекущийЯзык;
ОписаниеМакета.Наименование = ИмяДокумента;
ОписаниеМакета.Ссылка = СсылкаМакета;
ОписаниеМакета.ТипМакета = "MXL";
ОписаниеМакета.ИсточникиДанных = ИсточникиДанных.ВыгрузитьЗначения();
ОписаниеМакета.ОсновнаяПечатнаяФорма = ОсновнаяПечатнаяФорма;
ОписаниеМакета.НаименованиеПечатнойФормы = НаименованиеПечатнойФормы;
ОписаниеМакета.МакетДляВыгрузкиОбъекта = МакетДляВыгрузкиОбъекта;
ОписаниеМакета.ФорматСохраненияВыгрузки = ФорматСохраненияВыгрузки;
ИдентификаторМакета = МодульУправлениеПечатью.ЗаписатьМакет(ОписаниеМакета);
Если Не ЗначениеЗаполнено(СсылкаМакета) Тогда
СсылкаМакета = МодульУправлениеПечатью.СсылкаМакета(ИдентификаторМакета);
КонецЕсли;
ЗаписатьМакетыНаДополнительныхЯзыках();
Если Не Элементы.Язык.Доступность Тогда
Элементы.Язык.Доступность = Истина;
КонецЕсли;
КонецЕсли;
Возврат Истина;
КонецФункции
&НаСервере
Процедура РасширитьСписокПолей()
ДобавляемыеРеквизиты = Новый Массив;
ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("Образец", Новый ОписаниеТипов, ИмяСпискаПолей()));
ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("Формат", Новый ОписаниеТипов("Строка"), ИмяСпискаПолей()));
ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("ФорматПоУмолчанию", Новый ОписаниеТипов("Строка"), ИмяСпискаПолей()));
ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("КнопкаНастройкиФормата", Новый ОписаниеТипов("Число"), ИмяСпискаПолей()));
ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("Значение", Новый ОписаниеТипов, ИмяСпискаПолей()));
ДобавляемыеРеквизиты.Добавить(Новый РеквизитФормы("Общее", Новый ОписаниеТипов("Булево"), ИмяСпискаПолей()));
ИзменитьРеквизиты(ДобавляемыеРеквизиты);
СписокПолей = Элементы[ИмяСпискаПолей()];
СписокПолей.Шапка = Истина;
СписокПолей.УстановитьДействие("ПриАктивизацииСтроки", "Подключаемый_ДоступныеПоляПриАктивизацииСтроки");
ИмяКолонкиПредставление = ИмяСпискаПолей() + "Представление";
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонструкторФормул") Тогда
МодульКонструкторФормулСлужебный = ОбщегоНазначения.ОбщийМодуль("КонструкторФормулСлужебный");
ИмяКолонкиПредставление = МодульКонструкторФормулСлужебный.ИмяКолонкиПредставление(ИмяСпискаПолей());
КонецЕсли;
КолонкаПредставление = Элементы[ИмяКолонкиПредставление];
КолонкаПредставление.Заголовок = НСтр("ru = 'Поле'");
КолонкаОбразец = Элементы.Добавить(ИмяСпискаПолей() + "Образец", Тип("ПолеФормы"), СписокПолей);
КолонкаОбразец.ПутьКДанным = ИмяСпискаПолей() + "." + "Образец";
КолонкаОбразец.Вид = ВидПоляФормы.ПолеВвода;
КолонкаОбразец.Заголовок = НСтр("ru = 'Образец'");
КолонкаОбразец.УстановитьДействие("ПриИзменении", "Подключаемый_ОбразецПриИзменении");
КолонкаОбразец.ОтображатьВПодвале = Ложь;
КолонкаОбразец.КнопкаОчистки = Истина;
КнопкаНастройкиФормата = Элементы.Добавить(ИмяСпискаПолей() + "КнопкаНастройкиФормата", Тип("ПолеФормы"), СписокПолей);
КнопкаНастройкиФормата.ПутьКДанным = ИмяСпискаПолей() + "." + "КнопкаНастройкиФормата";
КнопкаНастройкиФормата.Вид = ВидПоляФормы.ПолеКартинки;
КнопкаНастройкиФормата.ОтображатьВШапке = Истина;
КнопкаНастройкиФормата.КартинкаШапки = БиблиотекаКартинок.ПараметрыВыводаКомпоновкиДанных;
КнопкаНастройкиФормата.КартинкаЗначений = БиблиотекаКартинок.ПараметрыВыводаКомпоновкиДанных;
КнопкаНастройкиФормата.Заголовок = НСтр("ru = 'Настройка формата'");
КнопкаНастройкиФормата.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Нет;
КнопкаНастройкиФормата.ГиперссылкаЯчейки = Истина;
КнопкаНастройкиФормата.ОтображатьВПодвале = Ложь;
УстановитьПримерыЗначений();
УстановитьФорматЗначенийПоУмолчанию();
НастроитьПолеОбразец();
ОтметитьОбщиеПоля();
Для Каждого ЭлементОформления Из УсловноеОформление.Элементы Цикл
Для Каждого ОформляемоеПоле Из ЭлементОформления.Поля.Элементы Цикл
Если ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных(ИмяСпискаПолей() + "Представление") Тогда
ОформляемоеПоле = ЭлементОформления.Поля.Элементы.Добавить();
ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных(ИмяСпискаПолей() + "Образец");
ОформляемоеПоле = ЭлементОформления.Поля.Элементы.Добавить();
ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных(ИмяСпискаПолей() + "КнопкаНастройкиФормата");
Прервать;
КонецЕсли;
КонецЦикла;
КонецЦикла;
ЭлементОформления = УсловноеОформление.Элементы.Добавить();
ОформляемоеПоле = ЭлементОформления.Поля.Элементы.Добавить();
ОформляемоеПоле.Поле = Новый ПолеКомпоновкиДанных(ИмяСпискаПолей());
ЭлементОтбора = ЭлементОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных(ИмяСпискаПолей() + ".Общее");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно;
ЭлементОтбора.ПравоеЗначение = Ложь;
ЭлементОформления.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ТекстЗапрещеннойЯчейкиЦвет);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ДоступныеПоляПриАктивизацииСтроки(Элемент)
ТекущиеДанные = Элементы[ИмяСпискаПолей()].ТекущиеДанные;
Если ТекущиеДанные = Неопределено Тогда
Возврат;
КонецЕсли;
Если ТекущиеДанные.ПолучитьРодителя() = Неопределено Тогда
Элементы["СтрокаПоиска" + ИмяСпискаПолей()].ПодсказкаВвода = ПодсказкаВводаСтрокиПоискаСпискаПолей();
Иначе
Элементы["СтрокаПоиска" + ИмяСпискаПолей()].ПодсказкаВвода = ТекущиеДанные.ПредставлениеПутиКДанным;
КонецЕсли;
СистемнаяИнформация = Новый СистемнаяИнформация;
ВерсияПлатформы = СистемнаяИнформация.ВерсияПриложения;
ПодключитьОбработчикОжидания("ПодсветитьЯчейкиСВыбраннымПолем", 0.1, Истина);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ДоступныеПоляПередНачаломИзменения(Элемент, Отказ)
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.КонструкторФормул") Тогда
МодульКонструкторФормулКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("КонструкторФормулКлиент");
ТекущиеДанные = Элементы[ИмяСпискаПолей()].ТекущиеДанные;
ТекущиеДанные.Образец = ТекущиеДанные.Значение;
ПолеВвода = Элементы[ИмяСпискаПолей() + "Образец"];
ВыбранноеПоле = МодульКонструкторФормулКлиент.ВыбранноеПолеВСпискеПолей(ЭтотОбъект, ИмяСпискаПолей());
ПолеВвода.ОграничениеТипа = ВыбранноеПоле.Тип;
КонецЕсли;
КонецПроцедуры
&НаСервере
Функция ЗаполнитьСписокОтображаемыхПолей(КоллекцияПолей, Результат = Неопределено)
Если Результат = Неопределено Тогда
Результат = Новый Массив;
КонецЕсли;
Для Каждого Элемент Из КоллекцияПолей.ПолучитьЭлементы() Цикл
Если Не ЗначениеЗаполнено(Элемент.ПутьКДанным) Тогда
Продолжить;
КонецЕсли;
Результат.Добавить(Элемент.ПутьКДанным);
ЗаполнитьСписокОтображаемыхПолей(Элемент, Результат);
КонецЦикла;
Возврат Результат;
КонецФункции
&НаКлиенте
Процедура ПриВыбореФорматаПоля(Формат, ДополнительныеПараметры) Экспорт
Если Формат = Неопределено Тогда
Возврат;
КонецЕсли;
ТекущиеДанные = Элементы[ИмяСпискаПолей()].ТекущиеДанные;
Если ТекущиеДанные = Неопределено Тогда
Возврат;
КонецЕсли;
ТекущиеДанные.Формат = Формат;
ТекущиеДанные.Образец = Формат(ТекущиеДанные.Значение, ТекущиеДанные.Формат);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ДоступныеПоляПриОкончанииРедактирования(Элемент, НоваяСтрока, ОтменаРедактирования)
ТекущиеДанные = Элементы[ИмяСпискаПолей()].ТекущиеДанные;
Если ЗначениеЗаполнено(ТекущиеДанные.Формат) Тогда
ТекущиеДанные.Образец = Формат(ТекущиеДанные.Значение, ТекущиеДанные.Формат);
КонецЕсли;
Если ТекущиеДанные.ПутьКДанным = "Ссылка" Тогда
Образец = ТекущиеДанные.Образец;
КонецЕсли;
ПодключитьОбработчикОжидания("ПриИзмененииОбразца", 0.1, Истина);
КонецПроцедуры
&НаКлиенте
Процедура Подключаемый_ОбразецПриИзменении(Элемент)
ТекущиеДанные = Элементы[ИмяСпискаПолей()].ТекущиеДанные;
ТекущиеДанные.Значение = ТекущиеДанные.Образец;
КонецПроцедуры
&НаКлиенте
Процедура ПриИзмененииОбразца()
ПриИзмененииОбразцаНаСервере();
КонецПроцедуры
&НаСервере
Процедура ПриИзмененииОбразцаНаСервере()
УстановитьПримерыЗначений();
Если Элементы.СтраницыМакетов.ТекущаяСтраница = Элементы.СтраницаОбразец Тогда
СформироватьПечатнуюФорму();
КонецЕсли;
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Процедура ПереименоватьУсловныеОбласти(Макет, Префикс, МакетДляВыгрузки)
Области = Новый Массив;
Для Каждого Область Из Макет.Области Цикл
Если ТипЗнч(Область) = Тип("ОбластьЯчеекТабличногоДокумента")
И Область.ТипОбласти = ТипОбластиЯчеекТабличногоДокумента.Строки Тогда
Если МакетДляВыгрузки
И НЕ ЗначениеЗаполнено(Область.ПараметрРасшифровки) Тогда
Продолжить;
КонецЕсли;
Области.Добавить(Область);
КонецЕсли;
КонецЦикла;
Для Каждого Область Из Области Цикл
ПодобратьИмяОбласти(Макет, Префикс, Область);
КонецЦикла;
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Функция ПодобратьИмяОбласти(Знач ТабличныйДокумент, Знач Префикс, Область = Неопределено)
ИспользованныеИмена = Новый Соответствие;
Для Каждого Элемент Из ТабличныйДокумент.Области Цикл
Если Область = Неопределено Или Элемент.Имя <> Область.Имя Тогда
ИспользованныеИмена.Вставить(Элемент.Имя, Истина);
КонецЕсли;
КонецЦикла;
Индекс = 1;
Пока ИспользованныеИмена[ИмяОбласти(Префикс, Индекс)] <> Неопределено Цикл
Индекс = Индекс + 1;
КонецЦикла;
НовоеИмяОбласти = ИмяОбласти(Префикс, Индекс);
Если Область <> Неопределено И Область.Имя <> НовоеИмяОбласти Тогда
Область.Имя = НовоеИмяОбласти;
КонецЕсли;
Возврат НовоеИмяОбласти;
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Функция ИмяОбласти(ИмяОбласти, Индекс)
Возврат ИмяОбласти + Формат(Индекс, "ЧГ=0;");
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Функция ПодсказкаВводаСтрокиПоискаСпискаПолей()
Возврат НСтр("ru = 'Найти поле...'");
КонецФункции
&НаКлиенте
Процедура ПосмотретьПечатнуюФорму(Команда)
Если Элементы.ПосмотретьПечатнуюФорму.Пометка Тогда
Элементы.СтраницыМакетов.ТекущаяСтраница = Элементы.СтраницаМакет;
Иначе
Если Не ЗначениеЗаполнено(Образец) Тогда
Элементы[ИмяСпискаПолей()].ТекущаяСтрока = ЭтотОбъект[ИмяСпискаПолей()].ПолучитьЭлементы()[0].ПолучитьИдентификатор();
ОбщегоНазначенияКлиент.СообщитьПользователю(
НСтр("ru = 'Выберите образец, по данным которого будет формироваться печатная форма'"), , ИмяСпискаПолей() + "[0].Образец");
Возврат;
КонецЕсли;
ФорматыВыгрузки = Новый Массив;
ФорматыВыгрузки.Добавить(ПредопределенноеЗначение("Перечисление.ФорматыВыгрузкиОбъектов.JSON"));
ФорматыВыгрузки.Добавить(ПредопределенноеЗначение("Перечисление.ФорматыВыгрузкиОбъектов.XML"));
Если ФорматыВыгрузки.Найти(ФорматСохраненияВыгрузки) <> Неопределено Тогда
ОчиститьСообщения();
СформироватьСтруктуруВыгрузки();
Элементы.СтраницыМакетов.ТекущаяСтраница = Элементы.СтраницаОбразецВыгрузки;
Иначе
СформироватьПечатнуюФорму();
Элементы.СтраницыМакетов.ТекущаяСтраница = Элементы.СтраницаОбразец;
КонецЕсли;
КонецЕсли;
Элементы.ПосмотретьПечатнуюФорму.Пометка = Не Элементы.ПосмотретьПечатнуюФорму.Пометка;
Элементы.НастройкиТекущейОбласти.Видимость = Не Элементы.ПосмотретьПечатнуюФорму.Пометка;
Элементы.ВтораяКоманднаяПанель.Доступность = Не Элементы.ПосмотретьПечатнуюФорму.Пометка;
Элементы.ПоказыватьКолонтитулы.Доступность = Не Элементы.ПосмотретьПечатнуюФорму.Пометка;
Элементы.ДействияСДокументом.Доступность = Не Элементы.ПосмотретьПечатнуюФорму.Пометка;
Элементы.Язык.Доступность = Не Элементы.ПосмотретьПечатнуюФорму.Пометка;
Элементы.ФорматСохраненияВыгрузки.Доступность = Не Элементы.ПосмотретьПечатнуюФорму.Пометка;
КонецПроцедуры
&НаСервере
Процедура СформироватьПечатнуюФорму()
Ссылки = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Образец);
ОбъектыПечати = Новый СписокЗначений;
Макет = ПодготовитьМакетДляЗаписи();
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Печать") Тогда
МодульУправлениеПечатью = ОбщегоНазначения.ОбщийМодуль("УправлениеПечатью");
ПечатнаяФорма = МодульУправлениеПечатью.СформироватьТабличныйДокумент(
Макет, Ссылки, ОбъектыПечати, ТекущийЯзык);
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура СформироватьСтруктуруВыгрузки()
Если НЕ ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ВыгрузкаОбъектовВФайлы") Тогда
Возврат;
КонецЕсли;
Отказ = Ложь;
Макет = ПодготовитьМакетДляЗаписи(, Отказ);
Если Отказ Тогда
Возврат;
КонецЕсли;
Ссылки = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(Образец);
Выгрузка = "";
МодульВыгрузкаОбъектовВФайлы = ОбщегоНазначения.ОбщийМодуль("ВыгрузкаОбъектовВФайлы");
Результат = МодульВыгрузкаОбъектовВФайлы.СформироватьСтруктуруДляВыгрузки(
Макет,
ФорматСохраненияВыгрузки,
Ссылки,
ТекущийЯзык);
СтруктураСДанными = Результат[Образец];
ПредставлениеВыгрузки = "";
ПолноеИмяФайла = "";
Если ФорматСохраненияВыгрузки = Перечисления.ФорматыВыгрузкиОбъектов.XML Тогда
МодульВыгрузкаОбъектовВФайлы.ВыполнитьВыгрузкуВXML(
СтруктураСДанными,
ПолноеИмяФайла,
ПредставлениеВыгрузки);
ИначеЕсли ФорматСохраненияВыгрузки = Перечисления.ФорматыВыгрузкиОбъектов.JSON Тогда
МодульВыгрузкаОбъектовВФайлы.ВыполнитьВыгрузкуВJSON(
СтруктураСДанными,
ПолноеИмяФайла,
ПредставлениеВыгрузки);
КонецЕсли;
Выгрузка = ПредставлениеВыгрузки;
КонецПроцедуры
&НаКлиенте
Процедура УдалитьШтампЭП(Команда)
Для Каждого Область Из Элементы.ТабличныйДокумент.ПолучитьВыделенныеОбласти() Цикл
Если СтрНачинаетсяС(Область.Имя, "ШтампЭП") Тогда
Область.Имя = "";
#Если ВебКлиент Тогда
Область.Защита = Область.Защита;
#КонецЕсли
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура УдалитьМакетНаТекущемЯзыке()
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Печать") Тогда
МодульУправлениеПечатью = ОбщегоНазначения.ОбщийМодуль("УправлениеПечатью");
МодульУправлениеПечатью.УдалитьМакет(ИдентификаторМакета, ТекущийЯзык);
КонецЕсли;
ЗагрузитьТабличныйДокументИзМетаданных(ТекущийЯзык);
Если ЭтоПечатнаяФорма Тогда
ЗаполнитьТабличныйДокумент(ТабличныйДокумент, ПрочитатьМакет());
КонецЕсли;
Модифицированность = Ложь;
Если Не ЗначениеЗаполнено(ТекущийЯзык) Или ТекущийЯзык = ОбщегоНазначения.КодОсновногоЯзыка() Тогда
Возврат;
КонецЕсли;
МенюЯзык = Элементы.Язык;
ДобавляемыеЯзыки = Элементы.ДобавляемыеЯзыки;
ЯзыкУдаляемойФормы = ТекущийЯзык;
ТекущийЯзык = ОбщегоНазначения.КодОсновногоЯзыка();
Для Каждого КнопкаЯзыка Из МенюЯзык.ПодчиненныеЭлементы Цикл
Если СтрЗаканчиваетсяНа(КнопкаЯзыка.Имя, ЯзыкУдаляемойФормы) Тогда
КнопкаЯзыка.Пометка = Ложь;
КнопкаЯзыка.Видимость = Ложь;
КонецЕсли;
Если СтрЗаканчиваетсяНа(КнопкаЯзыка.Имя, ТекущийЯзык) Тогда
КнопкаЯзыка.Пометка = Истина;
КонецЕсли;
КонецЦикла;
Для Каждого КнопкаДобавляемогоЯзыка Из ДобавляемыеЯзыки.ПодчиненныеЭлементы Цикл
Если СтрЗаканчиваетсяНа(КнопкаДобавляемогоЯзыка.Имя, ЯзыкУдаляемойФормы) Тогда
КнопкаДобавляемогоЯзыка.Видимость = Истина;
КонецЕсли;
КонецЦикла;
МенюЯзыкВсеДействия = Элементы.ЯзыкВсеДействия;
ДобавляемыеЯзыкиВсеДействия = Элементы.ДобавляемыеЯзыкиВсеДействия;
Для Каждого КнопкаЯзыка Из МенюЯзыкВсеДействия.ПодчиненныеЭлементы Цикл
Если ТипЗнч(КнопкаЯзыка) = Тип("КнопкаФормы") Тогда
Если СтрЗаканчиваетсяНа(КнопкаЯзыка.ИмяКоманды, ЯзыкУдаляемойФормы) Тогда
КнопкаЯзыка.Пометка = Ложь;
КнопкаЯзыка.Видимость = Ложь;
КонецЕсли;
Если СтрЗаканчиваетсяНа(КнопкаЯзыка.ИмяКоманды, ТекущийЯзык) Тогда
КнопкаЯзыка.Пометка = Истина;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Для Каждого КнопкаДобавляемогоЯзыка Из ДобавляемыеЯзыкиВсеДействия.ПодчиненныеЭлементы Цикл
Если ТипЗнч(КнопкаДобавляемогоЯзыка) = Тип("КнопкаФормы") Тогда
Если СтрЗаканчиваетсяНа(КнопкаДобавляемогоЯзыка.ИмяКоманды, ЯзыкУдаляемойФормы) Тогда
КнопкаДобавляемогоЯзыка.Видимость = Истина;
КонецЕсли;
КонецЕсли;
КонецЦикла;
Элементы.Язык.Заголовок = Элементы["Язык_"+ТекущийЯзык].Заголовок;
Элементы.ЯзыкВсеДействия.Заголовок = Элементы["Язык_"+ТекущийЯзык].Заголовок;
КонецПроцедуры
&НаКлиенте
Процедура ПродолжитьСохранениеВФайл(ВыбранныеФайлы, ДополнительныеПараметры) Экспорт
Если ВыбранныеФайлы = Неопределено Тогда
Возврат;
КонецЕсли;
ПолноеИмяФайла = ВыбранныеФайлы[0];
ОчиститьПодсветку();
Макет = ПодготовитьМакетДляЗаписи(Ложь);
Макет.Записать(ПолноеИмяФайла);
КонецПроцедуры
&НаКлиенте
Процедура ПродолжитьЗагрузкуИзФайла(ВыбранныеФайлы, ДополнительныеПараметры) Экспорт
Если ВыбранныеФайлы = Неопределено Тогда
Возврат;
КонецЕсли;
ПолноеИмяФайла = ВыбранныеФайлы[0];
ОписаниеОповещения = Новый ОписаниеОповещения("ПродолжитьЗагрузкуИзФайлаПослеПолученияДанных", ЭтотОбъект);
НачатьСозданиеДвоичныхДанныхИзФайла(ОписаниеОповещения, ПолноеИмяФайла);
КонецПроцедуры
&НаКлиенте
Процедура ПродолжитьЗагрузкуИзФайлаПослеПолученияДанных(ДвоичныеДанные, ДополнительныеПараметры) Экспорт
ЗакончитьЗагрузкуИзФайла(ДвоичныеДанные);
Модифицированность = Истина;
КонецПроцедуры
&НаСервере
Процедура ЗакончитьЗагрузкуИзФайла(Знач ДвоичныеДанные)
КодЯзыка = ТабличныйДокумент.КодЯзыка;
Макет = ПрочитатьМакет(ДвоичныеДанные);
ТабличныйДокумент.КодЯзыка = КодЯзыка;
ЗаполнитьТабличныйДокумент(ТабличныйДокумент, Макет);
КонецПроцедуры
&НаКлиенте
Процедура ОбновитьТекстВОбластиЯчеек()
ТекущаяОбласть = ТабличныйДокумент.ТекущаяОбласть;
Если ТекущаяОбласть = Неопределено Или ТипЗнч(ТекущаяОбласть) <> Тип("ОбластьЯчеекТабличногоДокумента") Тогда
Возврат;
КонецЕсли;
Модифицированность = Истина;
Если ТекущаяОбласть.ТипОбласти = ТипОбластиЯчеекТабличногоДокумента.Прямоугольник Тогда
ТекущаяОбласть.Текст = ТекущееЗначение;
ИначеЕсли ТекущаяОбласть.ТипОбласти = ТипОбластиЯчеекТабличногоДокумента.Строки Тогда
ТекущаяОбласть.Имя = "";
Область = ТабличныйДокумент.Область(ТекущаяОбласть.Верх, 1, ТекущаяОбласть.Верх, 1);
Если Область.Текст = "" Тогда
Область.Текст = "";
КонецЕсли;
ТекущаяОбласть.ПараметрРасшифровки = ТекущееЗначение;
Если ЗначениеЗаполнено(ТекущееЗначение) Тогда
ПодобратьИмяОбласти(ТабличныйДокумент, ЛокализованныйПрефиксУсловнойОбласти(), ТекущаяОбласть);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаСервереБезКонтекста
Функция ПрефиксУсловнойОбласти()
Возврат "Условие" + "_";
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Функция ЛокализованныйПрефиксУсловнойОбласти()
Возврат НСтр("ru = 'Условие'") + "_";
КонецФункции
&НаКлиенте
Процедура ПриВыбореИмениМакета(НовоеИмяМакета, ДополнительныеПараметры) Экспорт
Если НовоеИмяМакета = Неопределено Тогда
Возврат;
КонецЕсли;
Если ИмяДокумента <> НовоеИмяМакета Тогда
Модифицированность = Истина;
КонецЕсли;
ИмяДокумента = НовоеИмяМакета;
УстановитьЗаголовок();
КонецПроцедуры
#КонецОбласти
&НаКлиенте
Процедура ПриВыбореВладельцевМакета(Результат, ДополнительныеПараметры) Экспорт
Если Результат = Неопределено Тогда
Возврат;
КонецЕсли;
ИсточникиДанных.ЗагрузитьЗначения(Результат.ВыгрузитьЗначения());
Элементы.ТекстНазначение.Заголовок = ПредставлениеИсточниковДанных(ИсточникиДанных);
ОбновитьСписокДоступныхПолей();
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Функция ПредставлениеИсточниковДанных(ИсточникиДанных)
Значения = Новый Массив;
Для Каждого Элемент Из ИсточникиДанных Цикл
Значения.Добавить(Элемент.Значение);
КонецЦикла;
Результат = СтрСоединить(Значения, ", ");
Если Не ЗначениеЗаполнено(Результат) Тогда
Результат = "<" + НСтр("ru = 'не выбрано'") + ">";
КонецЕсли;
Возврат Результат;
КонецФункции
&НаСервереБезКонтекста
Функция ОбъектыСКомандамиПечати()
ОбъектыСКомандамиПечати = Новый СписокЗначений;
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Печать") Тогда
МодульУправлениеПечатью = ОбщегоНазначения.ОбщийМодуль("УправлениеПечатью");
Для Каждого ОбъектМетаданных Из МодульУправлениеПечатью.ИсточникиКомандПечати() Цикл
ОбъектыСКомандамиПечати.Добавить(ОбъектМетаданных.ПолноеИмя());
КонецЦикла;
КонецЕсли;
Возврат ОбъектыСКомандамиПечати;
КонецФункции
&НаСервере
Процедура ОбновитьСписокДоступныхПолей()
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Печать") Тогда
МодульУправлениеПечатью = ОбщегоНазначения.ОбщийМодуль("УправлениеПечатью");
МодульУправлениеПечатью.ОбновитьСписокДоступныхПолей(ЭтотОбъект,
КоллекцииПолей(ИсточникиДанных.ВыгрузитьЗначения(), ПараметрыРедактирования()), ИмяСпискаПолей());
НастроитьПолеОбразец();
ОтметитьОбщиеПоля();
УстановитьФорматЗначенийПоУмолчанию();
Если ИсточникиДанных.Количество() > 0 Тогда
ИсточникДанных = ИсточникиДанных[0].Значение;
ОбъектМетаданных = ОбщегоНазначения.ОбъектМетаданныхПоИдентификатору(ИсточникДанных);
ПодобратьОбразец(ОбъектМетаданных);
УстановитьПримерыЗначений();
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаСервере
Процедура НастроитьПолеОбразец()
КоллекцияПолей = ЭтотОбъект[ИмяСпискаПолей()].ПолучитьЭлементы();
Смещение = 0;
Для Каждого ОписаниеПоля Из КоллекцияПолей Цикл
Если ОписаниеПоля.ПутьКДанным = "Ссылка" Тогда
ОписаниеПоля.Заголовок = НСтр("ru = 'Образец'");
Если Смещение <> 0 Тогда
Индекс = КоллекцияПолей.Индекс(ОписаниеПоля);
КоллекцияПолей.Сдвинуть(Индекс, Смещение);
КонецЕсли;
ОписаниеПоля.ПолучитьЭлементы().Очистить();
Прервать;
КонецЕсли;
Смещение = Смещение - 1;
КонецЦикла;
КонецПроцедуры
&НаСервере
Функция ОбщиеПоляИсточниковДанных()
ОбщиеПоляИсточниковДанных = Новый Массив;
Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.Печать") Тогда
МодульУправлениеПечатью = ОбщегоНазначения.ОбщийМодуль("УправлениеПечатью");
ОбщиеПоляИсточниковДанных = МодульУправлениеПечатью.ОбщиеПоляИсточниковДанных(ИсточникиДанных.ВыгрузитьЗначения());
КонецЕсли;
Возврат ОбщиеПоляИсточниковДанных;
КонецФункции
&НаСервере
Процедура ОтметитьОбщиеПоля(Знач КоллекцияПолей = Неопределено, Знач ОбщиеПоля = Неопределено)
Если КоллекцияПолей = Неопределено Тогда
КоллекцияПолей = ЭтотОбъект[ИмяСпискаПолей()];
КонецЕсли;
Если ОбщиеПоля = Неопределено Тогда
ОбщиеПоля = ОбщиеПоляИсточниковДанных();
КонецЕсли;
Для Каждого ОписаниеПоля Из КоллекцияПолей.ПолучитьЭлементы() Цикл
Если ОписаниеПоля.Папка И ОписаниеПоля.Поле = Новый ПолеКомпоновкиДанных("ОбщиеРеквизиты")
Или ОписаниеПоля.ПолучитьРодителя() <> Неопределено И ОписаниеПоля.ПолучитьРодителя().Поле = Новый ПолеКомпоновкиДанных("ОбщиеРеквизиты") Тогда
ОписаниеПоля.Общее = Истина;
УстановитьПризнакОбщегоПоляДляПодчиненныхПолей(ОписаниеПоля);
Продолжить;
КонецЕсли;
Если ОбщиеПоля.Найти(ОписаниеПоля.Поле) <> Неопределено Тогда
ОписаниеПоля.Общее = Истина;
Если Не ОписаниеПоля.Папка И Не ОписаниеПоля.Таблица Тогда
УстановитьПризнакОбщегоПоляДляПодчиненныхПолей(ОписаниеПоля);
КонецЕсли;
КонецЕсли;
Если ОписаниеПоля.Общее И (ОписаниеПоля.Папка Или ОписаниеПоля.Таблица) Тогда
ОтметитьОбщиеПоля(ОписаниеПоля, ОбщиеПоля);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаСервере
Процедура УстановитьПризнакОбщегоПоляДляПодчиненныхПолей(КоллекцияПолей)
Для Каждого ОписаниеПоля Из КоллекцияПолей.ПолучитьЭлементы() Цикл
ОписаниеПоля.Общее = КоллекцияПолей.Общее;
УстановитьПризнакОбщегоПоляДляПодчиненныхПолей(ОписаниеПоля);
КонецЦикла;
КонецПроцедуры
&НаКлиенте
Процедура УстановитьДоступностьРекурсивно(Элемент, Доступность = Неопределено)
Если Доступность = Неопределено Тогда
Доступность = Элемент.Доступность;
КонецЕсли;
Для Каждого ПодчиненныйЭлемент Из Элемент.ПодчиненныеЭлементы Цикл
Если ТипЗнч(ПодчиненныйЭлемент) = Тип("КнопкаФормы") И ПодчиненныйЭлемент.ИмяКоманды <> "" Тогда
ПодчиненныйЭлемент.Доступность = Доступность;
КонецЕсли;
Если ТипЗнч(ПодчиненныйЭлемент) = Тип("ГруппаФормы") Тогда
УстановитьДоступностьРекурсивно(ПодчиненныйЭлемент, Доступность);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаСервере
Функция ПараметрыРедактирования()
Результат = Новый Структура;
Результат.Вставить("КлючОбъектаРедактирования", КлючОбъектаРедактирования);
Результат.Вставить("УникальныйИдентификатор", УникальныйИдентификатор);
Возврат Результат;
КонецФункции
&НаКлиенте
Процедура ПриИзмененииНастроекМакета(СтруктураПараметров)
Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.Печать")
И НЕ МакетДляВыгрузкиОбъекта Тогда
ОписаниеОповещения = Новый ОписаниеОповещения(
"ЗавершениеОткрытияНастроекМакета", ЭтотОбъект, Новый Структура("Форма", ЭтотОбъект));
МодульУправлениеПечатьюКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("УправлениеПечатьюКлиент");
МодульУправлениеПечатьюКлиент.ПриИзмененииНастроекМакета(СтруктураПараметров, ОписаниеОповещения);
Иначе
ОписаниеОповещения = Новый ОписаниеОповещения("ПриВыбореИмениМакета", ЭтотОбъект);
ПоказатьВводСтроки(ОписаниеОповещения, ИмяДокумента, НСтр("ru = 'Введите наименование макета'"), 100, Ложь);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ЗавершениеОткрытияНастроекМакета(Результат, ДополнительныеПараметры) Экспорт
Если Результат = Неопределено Тогда
Возврат;
КонецЕсли;
Для Каждого КлючЗначение Из Результат Цикл
ИмяРеквизита = КлючЗначение.Ключ;
НовоеЗначение = Результат[ИмяРеквизита];
Если НовоеЗначение <> ЭтотОбъект[ИмяРеквизита] Тогда
ЭтотОбъект[ИмяРеквизита] = НовоеЗначение;
Модифицированность = Истина;
Если ИмяРеквизита = "ИмяДокумента" Тогда
УстановитьЗаголовок();
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
&НаКлиентеНаСервереБезКонтекста
Функция ФорматыВыгрузкиТребующиеНаличиеОбластей()
МассивФорматов = Новый Массив;
МассивФорматов.Добавить(ПредопределенноеЗначение("Перечисление.ФорматыВыгрузкиОбъектов.JSON"));
МассивФорматов.Добавить(ПредопределенноеЗначение("Перечисление.ФорматыВыгрузкиОбъектов.XML"));
Возврат МассивФорматов;
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Функция ФорматыВыгрузкиНеТребующиеРаботыСТекстом()
МассивФорматов = Новый Массив;
МассивФорматов.Добавить(ПредопределенноеЗначение("Перечисление.ФорматыВыгрузкиОбъектов.JSON"));
МассивФорматов.Добавить(ПредопределенноеЗначение("Перечисление.ФорматыВыгрузкиОбъектов.XML"));
МассивФорматов.Добавить(ПредопределенноеЗначение("Перечисление.ФорматыВыгрузкиОбъектов.DBF"));
МассивФорматов.Добавить(ПредопределенноеЗначение("Перечисление.ФорматыВыгрузкиОбъектов.ANSITXT"));
МассивФорматов.Добавить(ПредопределенноеЗначение("Перечисление.ФорматыВыгрузкиОбъектов.TXT"));
Возврат МассивФорматов;
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Функция ФорматыВыгрузкиРазрешеноНаличияОбластей()
МассивФорматов = Новый Массив;
МассивФорматов.Добавить(ПредопределенноеЗначение("Перечисление.ФорматыВыгрузкиОбъектов.JSON"));
МассивФорматов.Добавить(ПредопределенноеЗначение("Перечисление.ФорматыВыгрузкиОбъектов.XML"));
Возврат МассивФорматов;
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Функция ФорматыВыгрузкиРазрешеноНаличияКартинок()
МассивФорматов = Новый Массив;
МассивФорматов.Добавить(ПредопределенноеЗначение("Перечисление.ФорматыВыгрузкиОбъектов.XLS"));
МассивФорматов.Добавить(ПредопределенноеЗначение("Перечисление.ФорматыВыгрузкиОбъектов.XLSX"));
МассивФорматов.Добавить(ПредопределенноеЗначение("Перечисление.ФорматыВыгрузкиОбъектов.HTML5"));
МассивФорматов.Добавить(ПредопределенноеЗначение("Перечисление.ФорматыВыгрузкиОбъектов.MXL"));
Возврат МассивФорматов;
КонецФункции
&НаКлиентеНаСервереБезКонтекста
Процедура ВидимостьКнопокУправленияТекстом(Форма)
ФорматСохраненияВыгрузки = Форма.ФорматСохраненияВыгрузки;
МакетДляВыгрузкиОбъекта = Форма.МакетДляВыгрузкиОбъекта;
Если НЕ МакетДляВыгрузкиОбъекта Тогда
Возврат;
КонецЕсли;
Элементы = Форма.Элементы;
Элементы.ПоказыватьКолонтитулы.Видимость = Ложь;
Элементы.ПовторятьВНачалеСтраницы.Видимость = Ложь;
Элементы.ПовторятьВКонцеСтраницы.Видимость = Ложь;
ФорматыВыгрузки = ФорматыВыгрузкиНеТребующиеРаботыСТекстом();
ВидимостьЭлемента = (ФорматыВыгрузки.Найти(ФорматСохраненияВыгрузки) = Неопределено);
Элементы.ФорматированиеТекста.Видимость = ВидимостьЭлемента;
Элементы.ТабличныйДокументШрифт.Видимость = ВидимостьЭлемента;
Элементы.УменьшитьРазмерШрифта.Видимость = ВидимостьЭлемента;
Элементы.УвеличитьРазмерШрифта.Видимость = ВидимостьЭлемента;
Элементы.ТабличныйДокументЖирный.Видимость = ВидимостьЭлемента;
Элементы.ТабличныйДокументНаклонный.Видимость = ВидимостьЭлемента;
Элементы.ТабличныйДокументПодчеркивание.Видимость = ВидимостьЭлемента;
Элементы.ТабличныйДокументВыровнятьВлево.Видимость = ВидимостьЭлемента;
Элементы.ТабличныйДокументВыровнятьПоЦентру.Видимость = ВидимостьЭлемента;
Элементы.ТабличныйДокументВыровнятьВправо.Видимость = ВидимостьЭлемента;
Элементы.ТабличныйДокументВыровнятьПоШирине.Видимость = ВидимостьЭлемента;
Элементы.ВыровнятьПоВерхнемуКраю.Видимость = ВидимостьЭлемента;
Элементы.ВыровнятьПоСередине.Видимость = ВидимостьЭлемента;
Элементы.ВыровнятьПоНижнемуКраю.Видимость = ВидимостьЭлемента;
Элементы.ТабличныйДокументЦветФона.Видимость = ВидимостьЭлемента;
Элементы.ТабличныйДокументЦветТекста.Видимость = ВидимостьЭлемента;
Элементы.ТабличныйДокументЦветГраницы.Видимость = ВидимостьЭлемента;
Элементы.ТабличныйДокументОчиститьФормат.Видимость = ВидимостьЭлемента;
Элементы.ФорматированиеТекстаВсеДействия.Видимость = ВидимостьЭлемента;
Элементы.ТабличныйДокументШрифтВсеДействия.Видимость = ВидимостьЭлемента;
Элементы.УменьшитьРазмерШрифтаВсеДействия.Видимость = ВидимостьЭлемента;
Элементы.УвеличитьРазмерШрифтаВсеДействия.Видимость = ВидимостьЭлемента;
Элементы.ТабличныйДокументЖирныйВсеДействия.Видимость = ВидимостьЭлемента;
Элементы.ТабличныйДокументНаклонныйВсеДействия.Видимость = ВидимостьЭлемента;
Элементы.ТабличныйДокументПодчеркиваниеВсеДействия.Видимость = ВидимостьЭлемента;
Элементы.ЗачеркиваниеВсеДействия.Видимость = ВидимостьЭлемента;
Элементы.ТабличныйДокументВыровнятьВлевоВсеДействия.Видимость = ВидимостьЭлемента;
Элементы.ТабличныйДокументВыровнятьПоЦентруВсеДействия.Видимость = ВидимостьЭлемента;
Элементы.ТабличныйДокументВыровнятьВправоВсеДействия.Видимость = ВидимостьЭлемента;
Элементы.ТабличныйДокументВыровнятьПоШиринеВсеДействия.Видимость = ВидимостьЭлемента;
Элементы.ВыровнятьПоВерхнемуКраюВсеДействия.Видимость = ВидимостьЭлемента;
Элементы.ВыровнятьПоСерединеВсеДействия.Видимость = ВидимостьЭлемента;
Элементы.ВыровнятьПоНижнемуКраюВсеДействия.Видимость = ВидимостьЭлемента;
Элементы.ТабличныйДокументЦветФонаВсеДействия.Видимость = ВидимостьЭлемента;
Элементы.ТабличныйДокументЦветТекстаВсеДействия.Видимость = ВидимостьЭлемента;
Элементы.ТабличныйДокументЦветГраницыВсеДействия.Видимость = ВидимостьЭлемента;
Элементы.ТабличныйДокументОчиститьФорматВсеДействия.Видимость = ВидимостьЭлемента;
Элементы.ТабличныйДокументОбъединить.Видимость = ВидимостьЭлемента;
Элементы.Рисунки.Видимость = ВидимостьЭлемента;
Элементы.Картинка.Видимость = ВидимостьЭлемента;
Элементы.Текст.Видимость = ВидимостьЭлемента;
Элементы.Прямоугольник.Видимость = ВидимостьЭлемента;
Элементы.Прямая.Видимость = ВидимостьЭлемента;
Элементы.Эллипс.Видимость = ВидимостьЭлемента;
Элементы.Сгруппировать.Видимость = ВидимостьЭлемента;
Элементы.Разгруппировать.Видимость = ВидимостьЭлемента;
Элементы.Границы.Видимость = ВидимостьЭлемента;
Элементы.ТабличныйДокументГраницаСлева.Видимость = ВидимостьЭлемента;
Элементы.ТабличныйДокументГраницаСверху.Видимость = ВидимостьЭлемента;
Элементы.ТабличныйДокументГраницаСправа.Видимость = ВидимостьЭлемента;
Элементы.ТабличныйДокументГраницаСнизу.Видимость = ВидимостьЭлемента;
Элементы.ТабличныйДокументГраницаВезде.Видимость = ВидимостьЭлемента;
Элементы.ТабличныйДокументГраницаВокруг.Видимость = ВидимостьЭлемента;
Элементы.ТабличныйДокументГраницаВнутри.Видимость = ВидимостьЭлемента;
Элементы.ТабличныйДокументТолстаяГраницаВокруг.Видимость = ВидимостьЭлемента;
Элементы.ТабличныйДокументТолстаяГраницаСверху.Видимость = ВидимостьЭлемента;
Элементы.ТабличныйДокументТолстаяГраницаСнизу.Видимость = ВидимостьЭлемента;
Элементы.ТабличныйДокументНетГраницы.Видимость = ВидимостьЭлемента;
Элементы.Таблица.Видимость = ВидимостьЭлемента;
Элементы.РазмещениеАвто.Видимость = ВидимостьЭлемента;
Элементы.РазмещениеПереносить.Видимость = ВидимостьЭлемента;
Элементы.РазмещениеЗабивать.Видимость = ВидимостьЭлемента;
Элементы.РазмещениеОбрезать.Видимость = ВидимостьЭлемента;
Элементы.РазмещениеТекстаЕще.Видимость = ВидимостьЭлемента;
Элементы.РазмещениеАвтоЕще.Видимость = ВидимостьЭлемента;
Элементы.РазмещениеПереноситьЕще.Видимость = ВидимостьЭлемента;
Элементы.РазмещениеЗабиватьЕще.Видимость = ВидимостьЭлемента;
Элементы.РазмещениеОбрезатьЕще.Видимость = ВидимостьЭлемента;
КонецПроцедуры
&НаКлиенте
Процедура ДоступностьКнопокУправленияТекстом(ТекущаяОбласть)
ДоступностьЭлемента = (ТипЗнч(ТекущаяОбласть) = Тип("ОбластьЯчеекТабличногоДокумента"));
Элементы.Шрифт.Доступность = ДоступностьЭлемента;
Элементы.ВертикальноеВыравнивание.Доступность = ДоступностьЭлемента;
Элементы.ТабличныйДокументЦветТекста.Доступность = ДоступностьЭлемента;
Элементы.ТабличныйДокументЦветГраницы.Доступность = ДоступностьЭлемента;
Элементы.ТабличныйДокументОчиститьФормат.Доступность = ДоступностьЭлемента;
Элементы.ФорматированиеТекстаВсеДействия.Доступность = ДоступностьЭлемента;
Элементы.РазмещениеТекста.Доступность = ДоступностьЭлемента;
Элементы.РазмещениеТекстаЕще.Доступность = ДоступностьЭлемента;
Элементы.НазначитьИмя.Доступность = ДоступностьЭлемента;
Элементы.УдалитьИмя.Доступность = ДоступностьЭлемента;
КонецПроцедуры
#КонецОбласти