Текстовые параметры

1. Алиса Ловер (user611326_anikoolat) 07.12.17 14:48 Сейчас в теме
Всем привет!
Я очень начинающий программист. Подскажите, пожалуйста.
В 1с добавлена внешняя обработка, выводит на печать вордовский документ.
Если открыть макет этого ворда (двоичные данные), то вижу, что там, где данные должны заполнится автоматически (например, организация, ФИО сотрудника) обозначены как {v8 ОрганизацияНаименование}, {v8 СотрудникФИО} и тд. В связи с этим вопрос, это просто ручками написано и в коде этому что-то присваивается, или это какие то специальные вставки. Не могу разобраться.
Создала обработку, что бы при установке галочки выводился на печать определенный документ. Галку устанавливаю, но на печать выводится пустой вордовский документ, как бы новый создается :(
И вот думаю, может я с этими параметрами что то не так делала
Спасибо!
Ответы
2. Random Name (BackinSoda) 07.12.17 14:53 Сейчас в теме
(1) Всё что идёт в этих скобках {v8 Что-то} - параметры. В процессе вывода заменяются на значения из документа (или то, что передадут в них).
Создала обработку, что бы при установке галочки выводился на печать определенный документ. Галку устанавливаю, но на печать выводится пустой вордовский документ, как бы новый создается

видимо тут косяк какой-то. нужен код чтоб разобраться
3. Александр Лаптев (SaschaL) 07.12.17 15:03 Сейчас в теме
(1) Код обработки в студию
4. Andrey Kolesnikov (Boneman) 141 07.12.17 15:06 Сейчас в теме
(1) это имена параметров в макете.
А в коде формирования печатной формы, в эти места, впечатываются нужные данные.

Если макет отредактировали криво, и удалили из документа эти параметры, или переименовали - то естественно, документ не сможет заполнится
5. Максим Бурляев (maks_20) 16 07.12.17 15:10 Сейчас в теме
Посмотрите модуль внешней обработки. там все заполнение должно быть прописано, в том числе там сделана замена этих параметров на данные. Возможно вы параметры задали некорректно либо у вас не прописано их заполнение.
6. Алиса Ловер (user611326_anikoolat) 07.12.17 15:45 Сейчас в теме
(5) Спасибо всем большое!
То есть, если хотя бы один параметр не задан или задан некорректно, то печатная форма выводится вся будет пустой, правильно?
Я просто думала, если косяк с каким-то одним параметром, то документ весь выводится будет, только один параметр - нет.

И эти параметры я просто вручную должна прописать руками? Это не какие то специальные вставки?
8. Сергей Сизов (sssss_aaaaa_2011) 07.12.17 16:01 Сейчас в теме
(6)
То есть, если хотя бы один параметр не задан или задан некорректно, то печатная форма выводится вся будет пустой, правильно?
Нет.

(6)
если косяк с каким-то одним параметром, то документ весь выводится будет, только один параметр - нет.
Да.

Но если косяк с заполнением всех параметров, то все равно будет пустая форма.
9. Random Name (BackinSoda) 07.12.17 16:02 Сейчас в теме
(6) скорее всего выводиться будут. Параметры не заменятся и выйдут на печать как и заданы в макете.
10. Алиса Ловер (user611326_anikoolat) 07.12.17 16:08 Сейчас в теме
(9) странно тогда, почему у меня просто создается новый документ, получается программа просто не видит, что я указала выводить именно тот макет, который я добавила в макеты что ли.
Косяк где-то в этом.
Я не могу сюда закинуть весь код, он большой очень (
12. Random Name (BackinSoda) 07.12.17 16:12 Сейчас в теме
(10) может по кнопке "вставка кода" на форуме выложите часть, где задаются хотяб параметры, типа "Функция ПолучитьДанныеОбъекта" или с похожим названием. Или обработку сразу приложите )
7. Алиса Ловер (user611326_anikoolat) 07.12.17 15:57 Сейчас в теме
Подскажите еще, пожалуйста, откуда узнать, откуда тянутся эти данные Структура.Вставить("СотрудникФИО", КадровыеДанные.ФамилияИО). Точнее как узнать путь, что именно ФамилияИО хранится в кадровых данных?
11. Random Name (BackinSoda) 07.12.17 16:09 Сейчас в теме
(7)
КадровыеДанные
курсором если встать на переменную и нажать F12 на клавиатуре то он перейдет к месту где его в первый раз задали.
скорее всего там будет примерно такой код :
КадровыеДанные = КадровыйУчет.КадровыеДанныеСотрудников(Истина, МассивСотрудников, "ФамилияИО,ИОФамилия,Подразделение,Должность,ТабельныйНомер,Пол,ФИОПолные");
13. Алиса Ловер (user611326_anikoolat) 07.12.17 16:16 Сейчас в теме
(11) ой, трудно мне понять.

У меня тут создается процедура:
Процедура ЗаполнитьДанныеСотрудника(Структура, КадровыеДанные)
Структура.Вставить("СотрудникФИО", КадровыеДанные.ФамилияИО);
КонецПроцедуры;


А теперь мне нужно сюда добавить еще, что бы заполнился номер трудового договора сотрудника в печатной форме. И вот как мне узнать, что прописывать для него.
14. Алиса Ловер (user611326_anikoolat) 07.12.17 16:22 Сейчас в теме
(11) ну кстати, это вот и есть эти параметры, которые я указывала в ворде.

Процедура ЗаполнитьДанныеСотрудника(Структура, КадровыеДанные)
	
	Структура.Вставить("СотрудникФИО", КадровыеДанные.ФамилияИО);
	Структура.Вставить("СотрудникАдрес", КадровыеДанные.АдресПоПропискеПредставление);
	
КонецПроцедуры
15. Random Name (BackinSoda) 07.12.17 16:26 Сейчас в теме
(14) добавляете туда
Структура.Вставить("ТрудовойДоговорНомер", КадровыеДанные.ТрудовойДоговорНомер); 
, при этом в ворде должна быть такая вставка
{v8 ТрудовойДоговорНомер}. При этом в кадровых данных, там где через запятую перечисляются реквизиты сотрудника, должно быть поле "ТрудовойДоговорНомер"
16. Алиса Ловер (user611326_anikoolat) 07.12.17 16:33 Сейчас в теме
Функция ПолучитьДанныеДляПечатиДопСоглашенияНаОбучение(Сотрудник, ДатаВступленияСоглашенияВСилу) Экспорт
	
	Организация = Сотрудник.ГоловнаяОрганизация;
	
	Структура = Новый Структура;
	
	Структура.Вставить("ДатаВступленияСоглашенияВСилу", Формат(ДатаВступленияСоглашенияВСилу, "ДФ='''""''дд''""'' ММММ гггг ''года'''"));
	
	ЗаполнитьДанныеОрганизации(Структура, Организация);
	
	КадровыеДанные = КадровыйУчет.КадровыеДанныеСотрудников(Истина, Сотрудник,
		"Должность, АдресПоПропискеПредставление, ФИОПолные, Пол, ФамилияИО, ДокументПредставление");
	Возврат Структура;
		
КонецФункции
Показать


Далее у меня идет процедура заполнения данных сотрудника (выше выкладывала) и заполнение данных по организации. Это все в модуле объекта.

В модуле формы:

&НаКлиенте
Процедура Печать(Команда)
		
	Если ДопСоглашениеНаОбучение Тогда
		ДанныеДляПечати = ПолучитьДанныеДляПечатиДопСоглашенияНаОбучение();
		НапечататьДопСоглашениеНаОбучение(ДанныеДляПечати);
	КонецЕсли;

	
КонецПроцедуры
Показать


&НаСервере
Функция ПолучитьДанныеДляПечатиДопСоглашенияНаОбучение()
	
	мОбъект = РеквизитФормыВЗначение ("Объект");
	ДвоичныеДанные = мОбъект.ПолучитьМакет("ПФ_DOC_ДопСоглашениеНаОбучение");
	Возврат мОбъект.ПолучитьДанныеДляПечатиДопСоглашенияНаОбучение(ОбъектПечати, ДатаВступленияСоглашенияВСилу);
	
КонецФункции

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


Создавала реквизиты Доп соглашение как галку, и дату вступления как дату
17. Random Name (BackinSoda) 07.12.17 16:47 Сейчас в теме
(16) я так понимаю половина кода вырезано..
видно вот что в этом месте :
Функция ПолучитьДанныеДляПечатиДопСоглашенияНаОбучение(Сотрудник, ДатаВступленияСоглашенияВСилу) Экспорт 

Организация = Сотрудник.ГоловнаяОрганизация; 

Структура = Новый Структура; 

Структура.Вставить("ДатаВступленияСоглашенияВСилу", Формат(ДатаВступленияСоглашенияВСилу, "ДФ='''""''дд''""'' ММММ гггг ''года'''")); 

ЗаполнитьДанныеОрганизации(Структура, Организация); 

КадровыеДанные = КадровыйУчет.КадровыеДанныеСотрудников(Истина, Сотрудник, 
"Должность, АдресПоПропискеПредставление, ФИОПолные, Пол, ФамилияИО, ДокументПредставление, ТрудовойДоговорНомер"); 
Возврат Структура; 

КонецФункции 
Показать

нет вызова процедуры ЗаполнитьДанныеСотрудника, куда бы передавались КадровыеДанные (в которые неплохо бы вставить "ТрудовойДоговорНомер" см.пример выше)
и в конце возвращается структура в которой только ДатаВступления, дополненная данными по организации ? что-то не то явно.
18. Алиса Ловер (user611326_anikoolat) 08.12.17 09:28 Сейчас в теме
(17) а если так:

Функция ПолучитьДанныеДляПечатиДопСоглашенияНаОбучение(Сотрудник, ДатаВступленияСоглашенияВСилу) Экспорт
	
	Организация = Сотрудник.ГоловнаяОрганизация;
	
	Структура = Новый Структура;
	
	Структура.Вставить("ДатаВступленияСоглашенияВСилу", Формат(ДатаВступленияСоглашенияВСилу, "ДФ='''""''дд''""'' ММММ гггг ''года'''"));
		

	ЗаполнитьДанныеОрганизации(Структура, Организация);
	
	КадровыеДанные = КадровыйУчет.КадровыеДанныеСотрудников(Истина, Сотрудник,
		"Организация, НомерДоговораКонтракта, ДатаДоговораКонтракта, АдресПоПропискеПредставление, ФИОПолные, Пол, ФамилияИО, ДокументПредставление");
	
	Если КадровыеДанные.Количество() > 0 Тогда
		СтрокаКадровыеДанные = КадровыеДанные[0];
		ЗаполнитьДанныеСотрудника(Структура, СтрокаКадровыеДанные);
		Структура.Вставить("ИменуемаяЫЙ", ?(КадровыеДанные.Пол = Перечисления.ПолФизическогоЛица.Мужской, "именуемый", "именуемая"));
		
		Если ЗначениеЗаполнено(СтрокаКадровыеДанные.НомерДоговораКонтракта) Тогда
			Структура.Вставить("НомерДоговора", СтрокаКадровыеДанные.НомерДоговораКонтракта);
		Иначе
			Структура.Вставить("НомерДоговора", "______________");
		КонецЕсли;
		
		Если ЗначениеЗаполнено(СтрокаКадровыеДанные.ДатаДоговораКонтракта) Тогда
			Структура.Вставить("ДатаДоговора", Формат(СтрокаКадровыеДанные.ДатаДоговораКонтракта, "ДФ=dd.MM.yyyy"));
		Иначе
			Структура.Вставить("ДатаДоговора", "______________");
		КонецЕсли;

	КонецЕсли;
	
	Возврат Структура;
		
КонецФункции
Показать



При чем потом у меня есть процедура заполнения данных сотрудника

Процедура ЗаполнитьДанныеСотрудника(Структура, КадровыеДанные)

Структура.Вставить("ИменуемаяЫЙ", ?(КадровыеДанные.Пол = Перечисления.ПолФизическогоЛица.Мужской, "именуемый", "именуемая"));

А при выведении на печать ругается, Поле объекта не обнаружено (Пол)
19. Random Name (BackinSoda) 08.12.17 09:45 Сейчас в теме
(18) а что в сотрудника передаётся ?
мОбъект.ПолучитьДанныеДляПечатиДопСоглашенияНаОбучение(ОбъектПечати, ДатаВступленияСоглашенияВСилу);

ОбъектПечати - это точно сотрудник ?
20. Алиса Ловер (user611326_anikoolat) 08.12.17 10:12 Сейчас в теме
(19) ну да, если нажать на f12 ссылается на справочник сотрудников
21. Random Name (BackinSoda) 08.12.17 10:16 Сейчас в теме
(20) а в предприятии из справочника сотрудники печатается ? пол заполнен у него ?
22. Алиса Ловер (user611326_anikoolat) 08.12.17 10:21 Сейчас в теме
(21) тут в этой обработке, еще несколько печатных макетов, они все печатаются, в них аналогично указаны именуемый/ая и все нормально.
Но, меня больше волнует, почему у меня пустой документ выводится на печать(
23. Random Name (BackinSoda) 08.12.17 10:24 Сейчас в теме
(22) сравнить с рабочим вариантом и построчно искать где проблема..или под отладчиком. Или выложите тут обработку ? так тяжело сказать
24. Алиса Ловер (user611326_anikoolat) 08.12.17 10:45 Сейчас в теме
(23) ладно, буду разбираться, спасибо большое)
Оставьте свое сообщение