|
Внешняя печатная форма с использованием ActiveDocument ЗУП 2.5 | ☑ | ||
---|---|---|---|---|
0
kalisto
24.11.16
✎
17:10
|
Всем, добрый вечер.
У меня есть печатная внешняя форма с шаблоном Word. Выгружаю данные из документа Начисление ЗП по договорникам. Прописала процедуру выгрузки, все вроде бы ок. В документе 21 человек. Но есть загвоздка. Для первых 9 человек выгружаются данные все. Постепенно с каждым человеком в шаблоне перестают заполняться поля. На 21 физике половину данных не выводит. Сделала сообщалки, чтобы посмотреть, данные-то есть или нет. У всех все заполнено. Что делаю не так, подскажите пожалуйста. Код функции: Функция Печать() Экспорт СписокСотр = Новый СписокЗначений; Для каждого стр из СсылкаНаОбъект.ДоговорыНаВыполнениеРабот Цикл СписокСотр.Добавить(стр.Физлицо); КонецЦикла; Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ФизическиеЛица.Ссылка, | ПаспортныеДанныеФизЛицСрезПоследних.ДокументВид.Представление КАК ДокументВид, | ПаспортныеДанныеФизЛицСрезПоследних.ДокументДатаВыдачи КАК ДокументДатаВыдачи, | ВЫРАЗИТЬ(ПаспортныеДанныеФизЛицСрезПоследних.ДокументКемВыдан КАК СТРОКА(300)) КАК ДокументКемВыдан, | ПаспортныеДанныеФизЛицСрезПоследних.ДокументКодПодразделения, | ПаспортныеДанныеФизЛицСрезПоследних.ДокументНомер КАК ДокументНомер, | ПаспортныеДанныеФизЛицСрезПоследних.ДокументСерия КАК ДокументСерия, | ФИОФизЛицСрезПоследних.Фамилия КАК Фамилия, | ФИОФизЛицСрезПоследних.Имя КАК Имя, | ФИОФизЛицСрезПоследних.Отчество КАК Отчество, | ДоговорГПХ.Ссылка КАК Договор |ИЗ | Справочник.ФизическиеЛица КАК ФизическиеЛица | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ФИОФизЛиц.СрезПоследних(, ФизЛицо В ИЕРАРХИИ (&ФизЛицо)) КАК ФИОФизЛицСрезПоследних | ПО (ФИОФизЛицСрезПоследних.ФизЛицо = ФизическиеЛица.Ссылка) | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПаспортныеДанныеФизЛиц.СрезПоследних(, ФизЛицо В ИЕРАРХИИ (&ФизЛицо)) КАК ПаспортныеДанныеФизЛицСрезПоследних | ПО ФизическиеЛица.Ссылка = ПаспортныеДанныеФизЛицСрезПоследних.ФизЛицо | ЛЕВОЕ СОЕДИНЕНИЕ Документ.ДоговорНаВыполнениеРаботСФизЛицом КАК ДоговорГПХ | ПО (ДоговорГПХ.ФизЛицо = ФизическиеЛица.Ссылка) |ГДЕ | ФизическиеЛица.Ссылка В ИЕРАРХИИ(&ФизЛицо) | И ДоговорГПХ.Дата МЕЖДУ &ДатаНач И &ДатаКон"; Запрос.УстановитьПараметр("ФизЛицо", СписокСотр); Запрос.УстановитьПараметр("ДатаНач", НачалоГода(СсылкаНаОбъект.Дата)); Запрос.УстановитьПараметр("ДатаКон", КонецГода(СсылкаНаОбъект.Дата)); Результат = Запрос.Выполнить(); ВыборкаДляПроверок = Результат.Выбрать(); АктивныйДокумент = ПолучитьМакет("Макет"); КомОбъект = АктивныйДокумент.Получить(); Word = КомОбъект.Application; Док=Word.Documents(1); Док.GrammarChecked=0; Док.ShowGrammaticalErrors=0; Док.Activate(); Word.Selection.WholeStory(); Word.Selection.Copy(); Счетчик = 1; Пока ВыборкаДляПроверок.Следующий() Цикл Replace = Док.Content.Find; FindText = "{ДатаДокумента}"; ReplaceWith = Строка(Формат(КонецМесяца(СсылкаНаОбъект.Дата), "ДЛФ=Д"))+"г."; Replace.Execute(FindText,Ложь,Истина,Ложь,,,Истина,,Ложь,ReplaceWith); Replace = Док.Content.Find; FindText = "{НомерД}"; ReplaceWith = Строка(ВыборкаДляПроверок.Договор.Номер); Replace.Execute(FindText,Ложь,Истина,Ложь,,,Истина,,Ложь,ReplaceWith); Replace = Док.Content.Find; FindText = "{ДатаД}"; ReplaceWith = Строка(Формат(ВыборкаДляПроверок.Договор.Дата, "ДЛФ=Д"))+"г."; Replace.Execute(FindText,Ложь,Истина,Ложь,,,Истина,,Ложь,ReplaceWith); Сообщить(ReplaceWith); Replace = Док.Content.Find; FindText = "{Сотрудник}"; ReplaceWith = Строка(СокрЛП(ВыборкаДляПроверок.Фамилия))+" "+Строка(СокрЛП(ВыборкаДляПроверок.Имя))+" "+Строка(СокрЛП(ВыборкаДляПроверок.Отчество)); Сообщить(ReplaceWith); Replace.Execute(FindText,Ложь,Истина,Ложь,,,Истина,,Ложь,ReplaceWith); Replace = Док.Content.Find; FindText = "{паспорт}"; ReplaceWith = Строка(ВыборкаДляПроверок.ДокументСерия) +" "+Строка(ВыборкаДляПроверок.ДокументНомер); Сообщить(ReplaceWith); Replace.Execute(FindText,Ложь,Истина,Ложь,,,Истина,,Ложь,ReplaceWith); Replace = Док.Content.Find; FindText = "{паспортвыдан}"; ReplaceWith = Строка(ВыборкаДляПроверок.ДокументКемВыдан) +" "+Строка(Формат(ВыборкаДляПроверок.ДокументДатаВыдачи, "ДЛФ=Д"))+"г."; Сообщить(ReplaceWith); Replace.Execute(FindText,Ложь,Истина,Ложь,,,Истина,,Ложь,ReplaceWith); АдресРегистр = РегистрыСведений.КонтактнаяИнформация.СоздатьНаборЗаписей(); АдресРегистр.Отбор.Объект.Установить(ВыборкаДляПроверок.Ссылка); АдресРегистр.Прочитать(); Для каждого Запись из АдресРегистр Цикл Если СокрЛП(Запись.Вид.Наименование) = "Адрес по прописке физ. лица" Тогда Replace = Док.Content.Find; FindText = "{адрес}"; ReplaceWith = Строка(Запись.Представление); Сообщить(ReplaceWith); Replace.Execute(FindText,Ложь,Истина,Ложь,,,Истина,,Ложь,ReplaceWith); КонецЕсли; Если СокрЛП(Запись.Вид.Наименование) = "Адрес по прописке физ. лица" Тогда Replace = Док.Content.Find; FindText = "{адрес1}"; ReplaceWith = Строка(Запись.Представление); Сообщить(ReplaceWith); Replace.Execute(FindText,Ложь,Истина,Ложь,,,Истина,,Ложь,ReplaceWith); КонецЕсли; Если СокрЛП(Запись.Вид.Наименование) = "Телефон физ. лица" Тогда Replace = Док.Content.Find; FindText = "{телефон}"; ReplaceWith = Строка(Запись.Представление); Сообщить(ReplaceWith); Replace.Execute(FindText,Ложь,Истина,Ложь,,,Истина,,Ложь,ReplaceWith); КонецЕсли; КонецЦикла; Word.Selection.EndKey(6); Если Счетчик < ВыборкаДляПроверок.Количество() тогда Word.Selection.InsertBreak(7); Word.Selection.Paste(); КонецЕсли; Счетчик = Счетчик + 1; КонецЦикла; КомОбъект.Application.Visible=1; КомОбъект.Activate(); |
|||
1
piter3
24.11.16
✎
17:15
|
Replace = Док.Content.Find; не надо по моему повторять для каждого реквизита
лучше бы по уникальнее выбирал бы FindText |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |