Имя: Пароль:
1C
 
Внешняя печатная форма с использованием 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
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан