Вывод массива в печатную форму Word

1. user1816391 07.10.22 15:38 Сейчас в теме
Здравствуйте, есть вот такой код

Функция СформироватьДоговорПолнойМатОтв(МассивОбъектов,Ссылка)
	
	
	// Подготавливаем макет для формирования печатной формы OpenXML
	МакетДокумента = УправлениеПечатью.МакетПечатнойФормы("Документ.СЭ_ДоговорМОЛ_Коллективный.ПФ_DOC_ДоговорМатОтвКол_ru");
	Макет = УправлениеПечатью.ИнициализироватьМакетОфисногоДокумента(МакетДокумента, Неопределено);
	
	// Создаем структуру областей формируемой печатной формы OpenXМL
	ОписаниеОбластей = Новый Структура;
	УправлениеПечатью.ДобавитьОписаниеОбласти(ОписаниеОбластей, "Заголовок", "Общая");
	УправлениеПечатью.ДобавитьОписаниеОбласти(ОписаниеОбластей, "Шапка", "Общая");
	УправлениеПечатью.ДобавитьОписаниеОбласти(ОписаниеОбластей, "Массив", "СтрокаТаблицы");
	УправлениеПечатью.ДобавитьОписаниеОбласти(ОписаниеОбластей, "Подвал", "Общая");
	//УправлениеПечатью.ДобавитьОписаниеОбласти(ОписаниеОбластей, "СтрокаТаблица", "Общая");
	УправлениеПечатью.ДобавитьОписаниеОбласти(ОписаниеОбластей, "СтрокаТаблицаСот", "СтрокаТаблицы");
	УправлениеПечатью.ДобавитьОписаниеОбласти(ОписаниеОбластей, "Подвал1", "Общая");
	
	// Подготавливаем печатную форму в формате офисного документа
	ПечатнаяФорма = УправлениеПечатью.ИнициализироватьПечатнуюФорму(Неопределено, Неопределено, Макет);
	//получаем данные документа
	
	СсылкаНаОбъект = МассивОбъектов[0];
	
	Объект 				= СсылкаНаОбъект;
	ДанныеОбъекта 		= Новый Структура;
	
	МассивСотрудниковТЗ	= Объект.Сотрудники.ВыгрузитьКолонку("Сотрудник");
	
	Если МассивСотрудниковТЗ.Количество() = 0 Тогда
		Возврат Ложь;	
	КонецЕсли;
	
	Запрос = Новый Запрос;
	Запрос.Текст = 
	"ВЫБРАТЬ
	|	СЭ_ДоговорМОЛ_Коллективный.Номер КАК Номер,
	|	СЭ_ДоговорМОЛ_Коллективный.Дата КАК Дата,
	|	СЭ_ДоговорМОЛ_Коллективный.Ссылка КАК Ссылка,
	|	СЭ_ДоговорМОЛ_Коллективный.Подразделение КАК Подразделение,
	|	СЭ_ДоговорМОЛ_Коллективный.СодержаниеРабот КАК Работа
	|ИЗ
	|	Документ.СЭ_ДоговорМОЛ_Коллективный КАК СЭ_ДоговорМОЛ_Коллективный
	|ГДЕ
	|	СЭ_ДоговорМОЛ_Коллективный.Ссылка = &Ссылка
	|;
	|
	|////////////////////////////////////////////////////////////­////////////////////
	|ВЫБРАТЬ
	|	СотрудникиТЧ.Ссылка КАК Ссылка,
	|	СотрудникиТЧ.Сотрудник КАК Сотрудники
	|ИЗ
	|	Документ.СЭ_ДоговорМОЛ_Коллективный.Сотрудники КАК СотрудникиТЧ
	|ГДЕ
	|	СотрудникиТЧ.Ссылка = &Ссылка";	
	
	Запрос.УстановитьПараметр("Ссылка", Ссылка);
	
	ДанныеДляПечати = Запрос.ВыполнитьПакет();
	
	Шапка = ДанныеДляПечати[0].Выгрузить();
	Сотрудники = ДанныеДляПечати[1].Выгрузить();
	
	ДанныеШапка = ОбщегоНазначения.СтрокаТаблицыЗначенийВСтруктуру(Шапка[0]);   
	ДанныеШапка["Номер"] = ПрефиксацияОбъектовКлиентСервер.НомерНаПечать(ДанныеШапка["Номер"]);
	ДанныеШапка["Дата"] = Формат(ДанныеШапка["Дата"], "ДФ=dd.MM.yyyy");
	//ДанныеШапка["Сотрудники"] = (ДанныеШапка["Сотрудники"]);
	ДанныеШапка["Подразделение"] = СЭ_УправлениеПечатьюСервер.СЭ_ПолучитьСклонение(ДанныеШапка["Подразделение"],"ПД=Родительный");
	ДанныеШапка["Работа"] = НРег(ДанныеШапка["Работа"]);
	//ДанныеТовары =  ОбщегоНазначения.ТаблицаЗначенийВМассив(Сотрудники);
	
	//Список Сотрудников
	КЛ = СотрудникиФормы.КлючиСтруктурыТекущихКадровыхДанныхСотрудника();
	КадровыеДанные = КадровыйУчет.КадровыеДанныеСотрудников(Истина, МассивСотрудниковТЗ, КЛ, Объект.Дата,,Ложь);
	
	МассивСотрудников 	= Новый Массив;
	ДанныеОбъекта.Вставить("МассивСотрудников", МассивСотрудников);
	
	Если Тип(Объект.Сотрудники) = Тип("ДокументТабличнаяЧасть.СЭ_ДоговорМОЛ_Коллективный.Сотрудники") Тогда
		ТЗДат = Объект.Сотрудники.Выгрузить(,"Сотрудник");
	Иначе
		Возврат Ложь;
	КонецЕсли;

	
	
	СтрокаМассива = "";
СтрокаМассива1 = "";
Ии = -1;
КириллМассив = Новый Массив;
КириллСтруктура = Новый Структура;
	
СписокДолжностей = КадровыеДанные.Скопировать(, "ТекущаяДолжность");
СписокДолжностей.Свернуть("ТекущаяДолжность");
СписокДолжностей = СписокДолжностей.ВыгрузитьКолонку("ТекущаяДолжность");
Для Каждого Должность Из СписокДолжностей Цикл
     СтрокаДляВывода = "";

     Отбор = Новый Структура("ТекущаяДолжность", Должность);
     МассивСотрудников = КадровыеДанные.НайтиСтроки(Отбор);
	  
     СотрудникиСтрока = "";
     Сч = 1;
	 СчетчикДолжностей = 1;
     Для Каждого СтрокаСотр Из МассивСотрудников Цикл
                  
        СЭ_ТабНомер     = ПрефиксацияОбъектовКлиентСервер.НомерНаПечать(СтрокаСотр.Сотрудник.Код, Истина, Истина);
        Если ПустаяСтрока(СЭ_ТабНомер) Тогда
        СЭ_ТабНомер = СокрЛП(СтрокаСотр.Сотрудник.Код);
        СЭ_ТабНомер = СЭ_УправлениеПечатьюСервер.УбратьНечисловые(СЭ_ТабНомер);
        КонецЕсли;
        СтрДолжность     = НРег(СокрЛП(СтрокаСотр.ТекущаяДолжность)); 
        ПредставлениеПодразделения     = СЭ_УправлениеПечатьюСервер.СЭ_ПолучитьСклонение(СтрокаСотр.ТекущееПодразделение, "ПД=Родительный");
        ПредставлениеДолжности         = СтрокаСотр.ТекущаяДолжность;
        //ПредставлениеИмени            = СЭ_УправлениеПечатьюСервер.СЭ_ПолучитьСклонение(СтрокаСотр.Сотрудник,"ПД=Дательный");
        ПредставлениеИмени             = СтрокаСотр.Сотрудник;
		ФизЛицо             = СтрокаСотр.ФизическоеЛицо;
		ПредоставлениеИмениИн = СЭ_УправлениеПечатьюСервер.СЭ_ФамилияИнициалы(СтрокаСотр.Сотрудник);
        СотИнА = ФизическиеЛицаКлиентСервер.ФамилияИнициалы (СтрокаСотр.Сотрудник.Наименование);        
        Если СтрНайти(ПредставлениеДолжности, ПредставлениеПодразделения) <> 0 Тогда
            ПредставлениеПодразделения = "";
        КонецЕслИ;  
        СотрудникКатегория            = ПолучитьРазрядКатегориюСотрудника(СтрокаСотр.Сотрудник, Объект.Дата);
        СотрудникКатегория            = Сред(СотрудникКатегория, 1, СтрДлина(СотрудникКатегория) - 1);           		
		СотрудникиСтрока = СотрудникиСтрока + ПредоставлениеИмениИн + ?(Сч = МассивСотрудников.Количество(), "", ", ");
    	Сч = Сч + 1;

	КонецЦикла;
	//СтрокаДляВывода = Строка(Должность) + ": " + СотрудникиСтрока + Символы.ПС + Символы.ВК;
	
	СтрокаДляВывода = СтрокаДляВывода + Нрег(Строка(Должность)) + ": " + СотрудникиСтрока + ?(СчетчикДолжностей = СписокДолжностей.Количество(), "", Символы.ПС);
	
	СчетчикДолжностей = СчетчикДолжностей + 1;
	  	  
	      СтрокаМассива1 = Строка(Должность) + ": " + СотрудникиСтрока; 
		  Ии = Ии +1;
		  КириллМассив.Вставить(Ии,СтрокаДляВывода);
		  
ДанныеОбъекта.МассивСотрудников.Добавить("    " + СтрокаМассива1);

		      Отбор = Новый Структура;
        Отбор.Вставить("Сотрудник" , СтрокаСотр.Сотрудник);
        НайденныеСтроки = ТЗДат.НайтиСтроки(Отбор);
         
        Первый = Ложь;

	КонецЦикла;
	СтруктураЧК = Новый Массив;
	СтруктураЧК = ПолучитьСот(Объект, СтруктураЧК);
	
	ДанныеОбъекта.Вставить("СтруктураЧК", СтруктураЧК);
	
	ДанныеОбъекта.Вставить("КириллМассив", КириллМассив);

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

	
	//Вывод подвала
	Область = УправлениеПечатью.ОбластьМакета(Макет, ОписаниеОбластей["Подвал"]);
	УправлениеПечатью.ПрисоединитьОбластьИЗаполнитьПараметры(ПечатнаяФорма, Область, ДанныеШапка);
	
	
	// Вывод таблицы                               
	Область = УправлениеПечатью.ОбластьМакета(Макет, ОписаниеОбластей["СтрокаТаблицаСот"]);
	УправлениеПечатью.ПрисоединитьИЗаполнитьКоллекцию(ПечатнаяФорма, Область, ДанныеОбъекта.СтруктураЧК);
	
	
	Область = УправлениеПечатью.ОбластьМакета(Макет, ОписаниеОбластей["Подвал1"]);
	УправлениеПечатью.ПрисоединитьОбластьИЗаполнитьПараметры(ПечатнаяФорма, Область, ДанныеШапка);
	
	// Помещаем сформированную печатную форму в соответствие ОфисныеДокументы
	АдресХранилищаПечатнойФормы = УправлениеПечатью.СформироватьДокумент(ПечатнаяФорма);
	
	//удаление временных файлов
	УправлениеПечатью.ОчиститьСсылки(ПечатнаяФорма);	
	УправлениеПечатью.ОчиститьСсылки(Макет);
	
	//Возврат ДанныеОбъекта;
	
	Возврат АдресХранилищаПечатнойФормы;
	
КонецФункции
Показать


нужно вывести ДанныеОбъекта.КириллМассив, сейчас почему-то ничего не выводится.

Сам Объект содержит в себе
Прикрепленные файлы:
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Kilka_v_Kepke 07.10.22 16:17 Сейчас в теме
(1) когда-то что-то выводилось? после чего перестало выводиться?
3. user1816391 07.10.22 16:18 Сейчас в теме
(2)выводится ДанныеОбъекта.СтруктураЧК, по такому же принципу сделал ДанныеОбъекта.КириллМассив, он не выводится
6. dehro 5 07.10.22 20:56 Сейчас в теме
(1)

Область = УправлениеПечатью.ОбластьМакета(Макет, ОписаниеОбластей["Массив"]);
УправлениеПечатью.ПрисоединитьИЗаполнитьКоллекцию(ПечатнаяФорма, Область, ДанныеОбъекта.КириллМассив);


Предположу, что в цикле нужно.
А вообще на несколько бы процедур разбить. Читабельнее код будет.
7. Asya.Ozerova 41 07.10.22 22:04 Сейчас в теме
(1)
//Ии = Ии +1;
КириллМассив.Добавить(Ии,СтрокаДляВывода);
ДанныеОбъекта.МассивСотрудников.Добавить(" " + СтрокаМассива1); // Поставьте тут Точку останова, проверьте, что в КириллМассив попадает

И после цикла;
8. Asya.Ozerova 41 07.10.22 22:10 Сейчас в теме
(1)
СтрокаДляВывода = СтрокаДляВывода + Нрег(Строка(Должность)) + ": " + СотрудникиСтрока + ?(СчетчикДолжностей = СписокДолжностей.Количество(), "", Символы.ПС);

Тут тоже не понятно, зачем СтрокаДляВывода плюсуете, она у Вас все равно на входе пустая!
9. Asya.Ozerova 41 07.10.22 22:14 Сейчас в теме
(1)
СтруктураЧК = ПолучитьСот(Объект, СтруктураЧК);

"ПолучитьСот" - что за функция, что делает?
4. Kilka_v_Kepke 07.10.22 16:21 Сейчас в теме
Слишком большой кусок кода чтобы в него вчитываться

не представляю как этот код работает
УправлениеПечатью.ПрисоединитьИЗаполнитьКоллекцию(ПечатнаяФорма, Область, ДанныеОбъекта.СтруктураЧК);
но
-сюда передается структура, а вы передаете массив(если я правильно понял)
-есть ли в области ваши параметры
5. Prikum 3 07.10.22 16:24 Сейчас в теме
(4)
сюда передается структура
Туда передается массив структур, по крайней мере если открыть функцию из БСП
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот