загрузка...
Дата публикации: 20.05.2021 12:21:03


десь буду собирать наработки по управляемым формам

Заполнение макета ворд

 
//в модуле объекта
функция СведенияОВнешнейОбработке() Экспорт

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

ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд);

Возврат ПараметрыРегистрации;
	
КонецФункции	

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

Процедура ДобавитьКоманду(ТаблицаКоманд, Представление, Идентификатор, Использование, ПоказыватьОповещение = Ложь, Модификатор = "")

НоваяКоманда = ТаблицаКоманд.Добавить();
НоваяКоманда.Представление = Представление; 
НоваяКоманда.Идентификатор = Идентификатор;
НоваяКоманда.Использование = Использование;
НоваяКоманда.ПоказыватьОповещение = ПоказыватьОповещение;
НоваяКоманда.Модификатор = Модификатор;

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




//в модуле формы


&НаСервере
Функция ПолучитьМакетСервер(ИмяМакета)

    Макет = РеквизитФормыВЗначение("Объект").ПолучитьМакет(ИмяМакета);
    Возврат Макет;

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

&НаСервере
Функция ФормированиеДоговораПоШаблону()
	
		ИмяМакета = "Макет";
		если Парыгин = Истина Тогда  ИмяМакета = "Макет1"; КонецЕсли;
		 
       АктивныйДокумент = ПолучитьМакетСервер(ИмяМакета);

        УИД = Новый УникальныйИдентификатор();
        Адрес = ПоместитьВоВременноеХранилище(АктивныйДокумент, УИД);
        
        Возврат Адрес;
  
   
КонецФункции


&НаКлиенте
Процедура ЗаменитьЗначениеДокумента(Док,Знач СтрИсходная,Знач СтрЗамены)Экспорт  
	СтрокаИсходная ="  ";
	СтрокаЗамены   ="  ";
	
	Если НЕ ЗначениеЗаполнено(СтрИсходная) Тогда
			Возврат;
	ИначеЕсли ТипЗнч(СтрИсходная)<>Тип("Строка") Тогда
		Попытка
			СтрокаИсходная =   Строка(СтрИсходная);
		Исключение
			Сообщить("Не удалось привести значение к строке"); 
			СтрокаИсходная = " ";
		КонецПопытки; 
	КонецЕсли; 
	
	Если СтрокаИсходная="  " Тогда
		СтрокаИсходная =   СтрИсходная;
	КонецЕсли;  
	
	//Если НЕ ЗначениеЗаполнено(СтрЗамены) Тогда
	//		Возврат Ложь;
	Если ТипЗнч(СтрЗамены)<>Тип("Строка") Тогда
		Попытка
			СтрокаЗамены =   Строка(СтрЗамены);
		Исключение
			Сообщить("Не удалось привести значение к строке"); 
			СтрокаЗамены =" ";
		КонецПопытки; 
	КонецЕсли; 
	Если СтрокаЗамены   ="  " Тогда
		СтрокаЗамены = СтрЗамены;
	КонецЕсли;  
	
	
	
	
	
	//параметры
	//1. Текст, который заменяется
	//2. Текст для поиска чувствителен к регистру
	//3. Искать только указанный текст как есть. Не включать в найденное куски с частями текста для поиска 
	//4. Имеет групповой символ, например "*строка" - все слова, которые имеют окончание "строка"
	//5. Искать синонимы 
	//6. Искать все формы слов: например, take, took, taken  
	//7. Искать с начала к концу документа
	//8. Wrap. Controls what happens if the search begins at a point other than the beginning of the document 
	//and the end of the document is reached. 
	//This argument also controls what happens if there is a selection or range and the search text is not found 
	//in the selection or range. Can be one of the WdFindWrap constants.
	//9. Format
	//11. 1-заменить первое найденное, 2-заменить все найденные, 3-не заменять
	РезультатПопыткиЗамены = Неопределено;
	Попытка
		РезультатПопыткиЗамены = Док.Content.Find.Execute("[" + СтрокаИсходная + "]", Ложь, Истина, Ложь, Ложь, Ложь, Истина, , Ложь, СтрокаЗамены, 2);
	Исключение
		РезультатПопыткиЗамены = Ложь;
	КонецПопытки;  
КонецПроцедуры	

&НаКлиенте
Процедура СобратьМакет()
        
    Данные = Объект.ТаблицаРеквизитов;
      
    ИмяВременногоФайла = ПолучитьИмяВременногоФайла("doc");
	ИмяДоговора = ИмяВременногоФайла;
    Адрес = ФормированиеДоговораПоШаблону();// положить макет во временное хранилище на сервере и получить адрес на клиент
    Если Адрес = Неопределено Тогда
        Возврат;
    КонецЕсли;
      Макет = ПолучитьИзВременногоХранилища(Адрес); //получить макет из временного хранилища
      Макет.Записать(ИмяВременногоФайла); //создать документ на основе макета в TEMP клиента
        Word = Новый COMОбъект("Word.Application");//создаем COMОбъект
        Документ = Word.Documents.Open(ИмяВременногоФайла);//подключаем макет к созданному COMОбъект
        Попытка
            ДокументЗаполнение = Документ.Application.Documents(1);
            // Получить объект, который будем использовать для поиска и замены.
            Для Каждого ЭлементДанных Из Данные Цикл
               ЗаменитьЗначениеДокумента(ДокументЗаполнение,ЭлементДанных.Наименование,ЭлементДанных.Значение);
            КонецЦикла;

    i=0;
	Для каждого стрДок из Работы цикл
		если стрДок.нужно тогда	
			i=i+1;	
			ДокументЗаполнение.Tables(1).Rows.Add();		
			ДокументЗаполнение.Tables(1).Rows(i).Cells(1).Range.Text = "√  "+i+") "+стрДок.Наименование;
		КонецЕсли;
    КонецЦикла;
	
    
	
                                                                                       
            Word.Application.Visible = Истина;//установить видимость документа
            Word.Activate();//открыть документ пользователю

        Исключение
            // Если произойдет ошибка, выводятся данные об ошибке, и объект закрывается.
            Сообщение = Новый СообщениеПользователю();
            Сообщение.Текст = ОписаниеОшибки();
            Сообщение.Сообщить();    
            Word.Application.Quit();
        КонецПопытки;


	КонецПроцедуры // СобратьМакет()


 

Заполнение ТЧ формы запросом

 

&НаСервере
Процедура ПриОткрытииНаСервере()
	// Вставить содержимое обработчика.
	
	Запрос = Новый Запрос;
    Запрос.Текст = 
    "ВЫБРАТЬ
    |	ДоговорыКонтрагентов.Владелец КАК Контрагент,
    |	ДоговорыКонтрагентов.Ссылка КАК Договор,
    |	ДоговорыКонтрагентовДополнительныеРеквизиты.Значение КАК Адрес,
    |	ДоговорыКонтрагентовДополнительныеРеквизиты1.Значение КАК ПутьКПапке,
    |	ДоговорыКонтрагентовДополнительныеРеквизиты2.Значение КАК Ответственный,
    |	ДоговорыКонтрагентов.Дата КАК Дата,
    |	ДоговорыКонтрагентов.Номер КАК Номер
    |ИЗ
    |	Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
    |		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ДоговорыКонтрагентов.ДополнительныеРеквизиты КАК ДоговорыКонтрагентовДополнительныеРеквизиты
    |		ПО (ДоговорыКонтрагентовДополнительныеРеквизиты.Ссылка = ДоговорыКонтрагентов.Ссылка)
    |			И (ДоговорыКонтрагентовДополнительныеРеквизиты.Свойство.Имя = &Наименование)
    |		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ДоговорыКонтрагентов.ДополнительныеРеквизиты КАК ДоговорыКонтрагентовДополнительныеРеквизиты1
    |		ПО (ДоговорыКонтрагентовДополнительныеРеквизиты1.Ссылка = ДоговорыКонтрагентов.Ссылка)
    |			И (ДоговорыКонтрагентовДополнительныеРеквизиты1.Свойство.Имя = &Наименование1)
    |		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ДоговорыКонтрагентов.ДополнительныеРеквизиты КАК ДоговорыКонтрагентовДополнительныеРеквизиты2
    |		ПО (ДоговорыКонтрагентовДополнительныеРеквизиты2.Ссылка = ДоговорыКонтрагентов.Ссылка)
    |			И (ДоговорыКонтрагентовДополнительныеРеквизиты2.Свойство.Имя = &Наименование2)
    |ГДЕ
    |	НЕ ДоговорыКонтрагентовДополнительныеРеквизиты.Значение = """"
    |	И ДоговорыКонтрагентов.ПометкаУдаления = ЛОЖЬ";

    Запрос.УстановитьПараметр("Наименование", "АдресныйКлассификатор");
    Запрос.УстановитьПараметр("Наименование1", "Path");	
    Запрос.УстановитьПараметр("Наименование2", "Ответственный");		
	ЖурналДоговоров.Загрузить(Запрос.Выполнить().Выгрузить());

    

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

 

Разбор ФИО из строки

 
&НаКлиенте
Функция ФИО(ПолнИмя) Экспорт
	ВозМас = Новый Массив;
    ПервПроб = Найти(ПолнИмя," ");
    Если ПервПроб=0 Тогда
        Возврат ПолнИмя;
    Иначе
        Фамилия = Лев(ПолнИмя,ПервПроб);
        ИО = Сред(ПолнИмя,ПервПроб+1);
        ИО = СокрЛ(ИО);
	    ВторПроб = Найти(ИО," ");
        Имя = Лев(ИО,ВторПроб+1);
		Отчество = Сред(ИО,ВторПроб+1);
		
		ВозМас.Добавить(Фамилия);
		ВозМас.Добавить(Имя);
		ВозМас.Добавить(Отчество);
        Возврат ВозМас;
    КонецЕсли;
КонецФункции

 

Запись доп.реквизита

 

	
		мНовыйРеквизит = дог.ДополнительныеРеквизиты.Добавить();
		свойстворек=ПланыВидовХарактеристик.ДополнительныеРеквизитыИСведения.НайтиПоРеквизиту("Имя","КонтЛицКонтрДог");
		мНовыйРеквизит.Свойство = свойстворек;
		мНовыйРеквизит.Значение = ЛицоКонтрагента;
 


Назад в раздел

Личный кабинет

Логин:
Пароль:
Регистрация
Забыли свой пароль?
Войти как пользователь:
Войти как пользователь
Вы можете войти на сайт, если вы зарегистрированы на одном из этих сервисов:

Ссылки

Яндекс.Метрика

Последняя новость

18.06.2019 новое лицо сайта b-tema.ru
Закончена работа над ребрендингом сайта b-tema.ru, теперь это современный адаптивный одностраничный лэндинг.
подробнее тут

О погоде

Яндекс.Погода


SPRINTHOST.RU: быстрый и надежный хостинг!