При программной работе с Word или Excel могут возникнуть ситуации, когда в процессах остается висеть открытый процесс:
- WORD.EXE
- EXCEL.EXE
Завершение процесса через
Word.Quit() или Excel.Quit() не срабатывает .
Эта проблема тянется еще со старых версии и появляется в случаях, когда обращение к Word или Excel происходит не в интерактивном режиме. Например, при запуске обработок через назначенные задания Windows.
Данную проблему можно решить принудительно завершив процее командой:
taskkill /F /IM word.exe
taskkill /F /IM excel.exe
Для использования в коде 1С:
Код 1C v 8.х КомандаСистемы("taskkill /F /IM word.exe");
КомандаСистемы("taskkill /F /IM excel.exe");
Автоматическая генерация отчета "Анализ заказов поставщикам"
Отчет анализ заказов является штатным отчетом конфигурации 1С Управление производственным предприятием. Обработка для генерации отчета, рассматриваемая в данной статье, позволяет программно создать и настроить форму отчета, запустить его выполнение. Полученный результат сохраняется в файл Microsoft Excel (XLS, XLSX) и может быть отправлен по электронной почте.
Предлагаемое решение состоит из трех файлов: Скачивать файлы может только зарегистрированный пользователь!
service.vbs служит для запуска 1С предприятия и генерации отчета;
emailer.vbs - VBS скрипт предназначен для отправки результатов выполнения запроса отчета на указанный при настройке адрес электронной почты;
rep_email.epf - сама внешняя обработка для генерации отчета, выполняющая настройки отображаемых показателей, группировок строк и столбцов, установки требуемых отборов отчета, обеспечивает выполнение запроса и формирования табличного документа по макету отчета и сохранение сформированного отчета в XLS файл.
Запуск отчета выполняется посредством VBS файла (vbscript) при помощи "Назначенных заданий". VBS программа обеспечивает запуск приложения 1С, устанавливает соединение с сервером 1С и передает управление внешней обработке через экспортную функцию ReportNow(), размещенную в общем модуле обработки по генерации отчета. Пример VBS Script для выполнения внешней обработки 1С из командной строки:
Код VBS ' Установить соединение с сервером 1С
Set v81 = CreateObject("V81.Application")
res = v81.Connect("Srvr=Server1C;Ref = db1C;Usr=User1C;Pwd=Password1C")
' Передать управление внешней обработке по генерации Отчета Анализ Заказов
res = v81.ExternalDataProcessors.Create("C:\1C\Service\rep_email.epf").ThisObject.Report()
v81.Exit(false)
' Дать возможность 1С закрыть все открытые файлы и выгрузиться из памяти
WScript.Sleep(5000)
' Вызвать VBS скрипт отправки почты по E-Mail
Dim WshShell
Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.Run "C:\1C\ Service\emailer.vbs"
VBS E-Mail скрипт для отправки готового отчета в формате Excel создает новое электронное письмо на заданный адрес, в теле письма указывает пояснение к отчету, а в качестве вложения прикрепляет файл, создание и наполнение информацией которого была произведена при запуске service.vbs
Код VBS 'Отправить сообщение с помощью локальной службы SMTP
Const cdoSendUsingPickup = 1
'Отправить сообщение с помощью сети (SMTP через сеть)
Const cdoSendUsingPort = 2
Const cdoAnonymous = 0
Const cdoBasic = 1
Const cdoNTLM = 2
Set objMessage = CreateObject("CDO.Message")
' Тема сообщения и адрес отправителя
objMessage.Subject = "Ежедневный отчет Анализ заказов поставщикам"
objMessage.From = """Генератор отчетов"" "
' Получатели письма указываются через " ; "
objMessage.To = "email@domain.org; recv@domain.net; last@domain.ru"
' Содержимое тела письма.
objMessage.TextBody = "JSC AUTO SERVICE. Please find Orders reporting in attachment." & vbCRLF & _
"------------------------------------------" & vbCRLF & _
"Best regards, Auto report service" & vbCRLF & _
"Support line: it@domian.ru" & vbCRLF
' Добавляем файл - вложение для отправки отчета по EMail
objMessage.AddAttachment "C:\1C\Service\ЗаказыПоставщику.xls"
' Секция настроек SMTP сервера для отправки почты.
objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
' Имя или IP адрес SMTP Server
objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "mail.domain.ru"
' Тип используемой авторизации, NONE, Basic (Base64 encoded), NTLM
objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = cdoBasic
' Авторизация на SMTP server
objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = "report@domain.ru"
' Пароль SMTP server
objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "youpassword"
' Порт SMTP Server port (обычно 25, но может быть и другим)
objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25
' Использование SSL для соединения (False или True)
objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = False
' Время ожидания соединения с почтовым сервером
objMessage.Configuration.Fields.Item("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 60
' Сохранить настройки CDO для отправки сообщения
objMessage.Configuration.Fields.Update
' Отправить созданное почтовое сообщение с вложением отчета в формате XLS по указанному адресу
objMessage.Send
Внешняя обработка по запуску отчета "Анализ заказов поставщику" состоит из двух процедур. Первая - "ReportNow() Экспорт" служит для определения входной точки передачи управления от VBS к 1С. Вторая - "ОткрытьОтчетПоИмени()" - выполняет действия по настройке критериев отбора отчета, группировке строк и столбцов, определению состава количественных показателей. Данный способ вызова отчетов стандартной конфигурации широко применяется в различных формах 1С, и по мере развития конфигурации может быть позаимствован как минимум из нескольких форм списка справочников (Контрагенты, Номенклатура и т.д.). Исходный код первой функции: >
Код 1C v 8.х Процедура ReportNow() Экспорт
// Вызывается из vbscript, выполняет работы с отчетом.
ОткрытьОтчетПоИмени("АнализЗаказовПоставщикам");
КонецПроцедуры
Сохранение отчета из 1С в Excel
Процедура формирования формы отчета принимает в качестве параметра название объекта метаданных конфигурации, в данном случае - "АнализЗаказовПоставщикам". Очевидно, что в зависимости от типа отчета процедура будет меняться пропорционально используемым реквизитам. В рассматриваемом примере добавляется отбор по контрагенту. Для своего ключевого поставщика заменить значение искомого наименования на нужное.
Код 1C v 8.х Процедура ОткрытьОтчетПоИмени(НазваниеОтчета) Экспорт
// получаем отчет и открываем форму
// для построения отчета по названию отчета
Отчет = Отчеты[НазваниеОтчета].Создать();
Форма = Отчет.ПолучитьФорму(, , );
Форма.Открыть();
// Выполнить настройку отчета по умолчанию
Отчет.УстановитьНачальныеНастройки();
// Добавить требуемый отбор по поставщику
ТекОтбор = Отчет.УниверсальныйОтчет.ПостроительОтчета.Отбор.ДоговорКонтрагентаВладелец;
ТекОтбор.Использование = Истина;
ТекОтбор.Значение = Справочники.Контрагенты.НайтиПоНаименованию("Поставщик");
ТекОтбор.ВидСравнения = ВидСравнения.Равно;
// Добавляем специфичное для нас измерение в отборе - например, "осталось отгрузить"
// в данном случае из отчета уйдут позиции, по которым все получено.
Отчет.УниверсальныйОтчет.ПостроительОтчета.Отбор.Добавить("ОсталосьОтгрузитьЕдиницОтчетов");
ТекОтбор1 = ОтчетОстатки.УниверсальныйОтчет.ПостроительОтчета.Отбор.ОсталосьОтгрузитьЕдиницОтчетов;
ТекОтбор1.Использование = Истина;
ТекОтбор1.Значение = 0;
ТекОтбор1.ВидСравнения = ВидСравнения.Больше;
// Состав отдельных ключевых показателей
// для каждого отчета можно посмотреть в конфигураторе
Отчет.СостояниеОтгрузкиПоЗаказу = истина;
Отчет.НеОтгружено = Истина;
Отчет.ОтгруженоЧастично = Истина;
// После завершения настроек нажмем программно кнопку "Сформировать"
Отчет.СформироватьОтчет(ФормаОтчета.ЭлементыФормы.ПолеТабличногоДокументаРезультат);
// Сформировать путь и имя файла для сохранения отчета
мПутьШаблон="C:\1C\Service";
мФайлШаблон="ЗаказыПоставщику.xls";
ИмяФайла = мПутьШаблон + "\" + мФайлШаблон;
// Полученные в отчете цифры и данные сохраним в файл Excel
Если Не ИмяФайла = Неопределено Тогда
Форма.ЭлементыФормы.ПолеТабличногоДокументаРезультат.СохранятьСвойстваОтображения = Истина;
Форма.ЭлементыФормы.ПолеТабличногоДокументаРезультат.Записать(ИмяФайла, ТипФайлаТабличногоДокумента.XLS97);
КонецЕсли;
// Закрыть форму отчета после завершения работы
ФормаОтчета.Закрыть();
КонецПроцедуры
Для того, чтобы отладить обработку в режиме 1С:Предприятие, запущенного из конфигуратора можно создать экранную форму обработки и разместить в ней следующую процедур автоматического запуска отлаживаемого отчета:
Код 1C v 8.х Процедура ПередОткрытием(Отказ, СтандартнаяОбработка)
Отказ = истина;
ОткрытьОтчетПоИмени("АнализЗаказовПоставщикам");
КонецПроцедуры
Надеемся, что успешная комбинация внешней обработки для запуска отчета по расписанию и vbscript поможет в автоматизации бизнеса вашего предприятия. Данная редакция настроек больше ориентирована на менеджера поставщика для вашей компании, что отслеживать взаимное движение товаров и документов.
Источник
Руководство компании, хочет получать оперативную сводку продаж по фирме Код 1C v 8.х
Перем ОбъектыКонфы;
Перем СтруктКонфы;
Процедура ВыгрузитьВWord()
Попытка
Word = Новый COMОбъект("Word.Application");
Исключение
Сообщить("Не удалось открыть Word");
Возврат;
КонецПопытки;
Word.Documents.Add();
Документ = Word.ActiveDocument();
// Перебор типов метаданных
Для Каждого ТипОбъекта Из ОбъектыКонфы Цикл
Состояние(ТипОбъекта.Значение);
Если Метаданные[ТипОбъекта.Ключ].Количество() > 0 Тогда
// Добавляем новый параграф
Документ.Paragraphs.Add();
Номер = Документ.Paragraphs.Count();
Документ.Paragraphs(Номер-1).Range().I_nsertAfter(ТипОбъекта.Значение);
Документ.Paragraphs(Номер).Range().Style="Заголовок 1";
//Перебираем конктретные объекты
Для каждого Объект Из Метаданные[ТипОбъекта.Ключ] Цикл
// Добавляем новый параграф
Документ.Paragraphs.Add();
Номер = Документ.Paragraphs.Count();
Документ.Paragraphs(Номер-1).Range().I_nsertAfter(Объект.Синоним);
Документ.Paragraphs(Номер).Range().Style="Заголовок 2";
// Перебираем параметры метаданных
Для каждого Параметр Из СтруктКонфы Цикл
Попытка
Количество = Объект[Параметр.Ключ].Количество();
Исключение
Продолжить;
КонецПопытки;
Если Количество > 0 Тогда
// Добавляем новый параграф
Документ.Paragraphs.Add();
Номер = Документ.Paragraphs.Count();
Документ.Paragraphs(Номер-1).Range().I_nsertAfter(Параметр.Значение + " (" + Количество + ")");
Документ.Paragraphs(Номер).Range().Style="Заголовок 3";
// Добавляем новый параграф
Документ.Paragraphs.Add();
Номер=Документ.Paragraphs.Count();
// Добавляем новую таблицу
Документ.Tables.Add(Документ.Paragraphs(Номер).Range(),Количество+1,4);
Счетчик = 1;
// Заполняем шапку таблицы
Таблица = Документ.Tables(Документ.Tables.Count());
Таблица.Cell(Счетчик,1).Range().I_nsertAfter("Имя");
Таблица.Cell(Счетчик,2).Range().I_nsertAfter("Синоним");
Таблица.Cell(Счетчик,3).Range().I_nsertAfter("Тип");
Таблица.Cell(Счетчик,4).Range().I_nsertAfter("Комментарий");
// Устанавливаем жирный шрифт для шапки таблицы
Документ.Range(Таблица.Cell(Счетчик,1).Range.Start,Таблица.Cell(Счетчик,4).Range.End).Font.Bold = Истина;
Для каждого Значение Из Объект[Параметр.Ключ] Цикл
Счетчик = Счетчик + 1;
// Заполняем содержимое таблицы
Попытка
Таблица.Cell(Счетчик,1).Range().I_nsertAfter(Значение.Имя);
Исключение
КонецПопытки;
Попытка
Таблица.Cell(Счетчик,2).Range().I_nsertAfter(Значение.Синоним);
Исключение
КонецПопытки;
Попытка
СтрокаТипов = "";
// Выводим все типы
Для каждого Тип Из Значение.Тип.Типы() Цикл
СтрокаТипов = СтрокаТипов + " " + Строка(Тип);
КонецЦикла;
Таблица.Cell(Счетчик,3).Range().I_nsertAfter(СтрокаТипов);
Исключение
КонецПопытки;
Попытка
Таблица.Cell(Счетчик,4).Range().I_nsertAfter(Значение.Комментарий);
Исключение
КонецПопытки;
КонецЦикла;
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецЕсли;
КонецЦикла;
// Показываем документ
Word.Visible = Истина;
// Устанавливаем активность документа
Word.Activate();
Word = Неопределено;
КонецПроцедуры
Процедура ВыгрузитьВExcel()
Попытка
Excel = Новый COMОбъект("Excel.Application");
Исключение
Сообщить("Не удалось открыть Excel");
Возврат;
КонецПопытки;
// Добавляем новый лист
Excel.Application.Workbooks.Add(1);
Лист = Excel.ActiveSheet;
// Задаем имя закладки
Лист.Name = "Данные";
НомерСтроки = 0;
// Перебор типов метаданных
Для Каждого ТипОбъекта Из ОбъектыКонфы Цикл
Состояние(ТипОбъекта.Значение);
Если Метаданные[ТипОбъекта.Ключ].Количество() > 0 Тогда
// Добавляем новую строку
НомерСтроки = НомерСтроки + 1;
// Устанавливаем текст в ячейку
Лист.Cells(НомерСтроки, 1).Value = ТипОбъекта.Значение;
// Устанавливаем размер шрифта
Лист.Cells(НомерСтроки, 1).Font.Size = 16;
// Устанавливаем цвет
Лист.Cells(НомерСтроки, 1).Font.ColorIndex = 3;
//Перебираем конктретные объекты
Для каждого Объект Из Метаданные[ТипОбъекта.Ключ] Цикл
// Добавляем новую строку
НомерСтроки = НомерСтроки + 1;
// Устанавливаем текст в ячейку
Лист.Cells(НомерСтроки, 1).Value = Объект.Синоним;
// Устанавливаем отступ в 2 символа
Лист.Cells(НомерСтроки, 1).I_nsertIndent(2);
// Устанавливаем размер шрифта
Лист.Cells(НомерСтроки, 1).Font.Size = 12;
// Устанавливаем цвет
Лист.Cells(НомерСтроки, 1).Font.ColorIndex = 5;
// Перебираем параметры метаданных
Для каждого Параметр Из СтруктКонфы Цикл
Попытка
Количество = Объект[Параметр.Ключ].Количество();
Исключение
Продолжить;
КонецПопытки;
Если Количество > 0 Тогда
// Добавляем новую строку
НомерСтроки = НомерСтроки + 1;
Лист.Cells(НомерСтроки, 1).Value = Параметр.Значение + " (" + Количество + ")";
Лист.Cells(НомерСтроки, 1).I_nsertIndent(4);
// Устанавливаем жирный шрифт
Лист.Cells(НомерСтроки, 1).Font.Bold = Истина;
// Устанавливаем цвет
Лист.Cells(НомерСтроки, 1).Font.ColorIndex = 16;
// Добавляем новую таблицу
НомерСтроки = НомерСтроки + 1;
Лист.Cells(НомерСтроки, 1).Value = "Имя";
Лист.Cells(НомерСтроки, 2).Value = "Синоним";
Лист.Cells(НомерСтроки, 3).Value = "Тип";
Лист.Cells(НомерСтроки, 4).Value = "Комментарий";
Для Ном = 1 По 4 Цикл
// Устанавливаем ширину колонки
Лист.Cells(НомерСтроки, Ном).ColumnWidth = 20;
Лист.Cells(НомерСтроки, Ном).Font.Bold = Истина;
// Очищаем все границы
Лист.Cells(НомерСтроки, Ном).Borders(5).LineStyle = -4142;
// Устанавливаем левую границу
Лист.Cells(НомерСтроки, Ном).Borders(7).LineStyle = 1;
// Устанавливаем верхнюю границу
Лист.Cells(НомерСтроки, Ном).Borders(8).LineStyle = 1;
// Устанавливаем нижнюю границу
Лист.Cells(НомерСтроки, Ном).Borders(9).LineStyle = 1;
// Устанавливаем правую границу
Лист.Cells(НомерСтроки, Ном).Borders(10).LineStyle = 1;
// Устанавливаем цвет фона
Лист.Cells(НомерСтроки, Ном).Interior.ColorIndex = 34;
КонецЦикла;
Для каждого Значение Из Объект[Параметр.Ключ] Цикл
НомерСтроки = НомерСтроки + 1;
// Заполняем содержимое таблицы
Попытка
Лист.Cells(НомерСтроки, 1).Value = Значение.Имя;
Исключение
КонецПопытки;
Попытка
Лист.Cells(НомерСтроки, 2).Value = Значение.Синоним;
Исключение
КонецПопытки;
Попытка
СтрокаТипов = "";
// Выводим все типы
Для каждого Тип Из Значение.Тип.Типы() Цикл
СтрокаТипов = СтрокаТипов + " " + Строка(Тип);
КонецЦикла;
Лист.Cells(НомерСтроки, 3).Value = СтрокаТипов;
Исключение
КонецПопытки;
Попытка
Лист.Cells(НомерСтроки, 4).Value = Значение.Комментарий;
Исключение
КонецПопытки;
Для Ном = 1 По 4 Цикл
// Установка границ
Лист.Cells(НомерСтроки, Ном).Borders(5).LineStyle = -4142;
Лист.Cells(НомерСтроки, Ном).Borders(7).LineStyle = 1;
Лист.Cells(НомерСтроки, Ном).Borders(8).LineStyle = 1;
Лист.Cells(НомерСтроки, Ном).Borders(9).LineStyle = 1;
Лист.Cells(НомерСтроки, Ном).Borders(10).LineStyle = 1;
// Устанавливаем выравнивание по левому краю
Лист.Cells(НомерСтроки, Ном).VerticalAlignment = -4160;
// Устанавливаем перенос слов
Лист.Cells(НомерСтроки, Ном).WrapText = Истина;
КонецЦикла;
КонецЦикла;
КонецЕсли;
КонецЦикла;
КонецЦикла;
КонецЕсли;
КонецЦикла;
// Показываем документ
Excel.Visible = Истина;
Excel = Неопределено;
КонецПроцедуры
Процедура Сформировать()
// Определяем все возможные объекты метаданных
ОбъектыКонфы = Новый Структура();
ОбъектыКонфы.Вставить("ОбщиеМодули", "Общие модули");
ОбъектыКонфы.Вставить("ОбщиеФормы", "Общие формы");
ОбъектыКонфы.Вставить("ОбщиеМакеты", "Общие макеты");
ОбъектыКонфы.Вставить("ОбщиеКартинки", "Общие картинки");
ОбъектыКонфы.Вставить("Роли", "Роли");
ОбъектыКонфы.Вставить("Интерфейсы", "Интерфейсы");
ОбъектыКонфы.Вставить("Стили", "Стили");
ОбъектыКонфы.Вставить("Языки", "Языки");
ОбъектыКонфы.Вставить("ПланыОбмена", "Планы обмена");
ОбъектыКонфы.Вставить("Константы", "Константы");
ОбъектыКонфы.Вставить("КритерииОтбора", "Критерии отбора");
ОбъектыКонфы.Вставить("Справочники", "Справочники");
ОбъектыКонфы.Вставить("Документы", "Документы");
ОбъектыКонфы.Вставить("ЖурналыДокументов", "Журналы документов");
ОбъектыКонфы.Вставить("Перечисления", "Перечисления");
ОбъектыКонфы.Вставить("Отчеты", "Отчеты");
ОбъектыКонфы.Вставить("Обработки", "Обработки");
ОбъектыКонфы.Вставить("ПланыВидовХарактеристик", "Планы видов характеристик");
ОбъектыКонфы.Вставить("ПланыСчетов", "Планы счетов");
ОбъектыКонфы.Вставить("ПланыВидовРасчета", "Планы видов расчета");
ОбъектыКонфы.Вставить("РегистрыСведений", "Регистры сведений");
ОбъектыКонфы.Вставить("РегистрыБухгалтерии", "Регистры бухгалтерии");
ОбъектыКонфы.Вставить("РегистрыРасчета", "Регистры расчета");
// Определяем все возможные параметры
СтруктКонфы = Новый Структура();
СтруктКонфы.Вставить("Измерения", "Измерения");
СтруктКонфы.Вставить("Ресурсы", "Ресурсы");
СтруктКонфы.Вставить("Реквизиты", "Реквизиты");
СтруктКонфы.Вставить("Формы", "Формы");
СтруктКонфы.Вставить("Макеты", "Макеты");
СтруктКонфы.Вставить("Графы", "Графы");
СтруктКонфы.Вставить("ТабличныеЧасти", "Табличные части");
СтруктКонфы.Вставить("Значения", "Значения");
ВыгрузитьВWord(); // из 1С в Microsoft Word
ВыгрузитьВExcel(); // из 1C в Microsoft Excel
КонецПроцедуры
Код 1C v 7.x
Процедура Справочник()
Ворд=СоздатьОбъект("Word.Application");
Ворд.DisplayAlerts=0;
Ворд.ActiveDocument.ActiveWindow.S_election.I_nsertRowsBelow(1);
Ворд.ActiveDocument.ActiveWindow.S_election.MoveLeft(1,1);
Ворд.ActiveDocument.ActiveWindow.S_election.TypeText("Код");
Ворд.ActiveDocument.ActiveWindow.S_election.MoveRight(1,1);
Тип=?(Метаданные.Справочник(СокрЛП(Имя)).ТипКода="Текстовый","Строка","Число");
Ворд.ActiveDocument.ActiveWindow.S_election.TypeText(Тип+" ("+СокрЛП(Метаданные.Справочник(СокрЛП(Имя)).ДлинаКода)+")");
Ворд.ActiveDocument.ActiveWindow.S_election.MoveRight(1,1);
Ворд.ActiveDocument.ActiveWindow.S_election.TypeText("");
Ворд.ActiveDocument.ActiveWindow.S_election.I_nsertRowsBelow(1);
Ворд.ActiveDocument.ActiveWindow.S_election.MoveLeft(1,1);
Ворд.ActiveDocument.ActiveWindow.S_election.TypeText("Наименование");
Ворд.ActiveDocument.ActiveWindow.S_election.MoveRight(1,1);
Ворд.ActiveDocument.ActiveWindow.S_election.TypeText("Строка ("+СокрЛП(Метаданные.Справочник(СокрЛП(Имя)).ДлинаНаименования)+")");
Ворд.ActiveDocument.ActiveWindow.S_election.MoveRight(1,1);
Ворд.ActiveDocument.ActiveWindow.S_election.TypeText("");
Для Сч=1 По Метаданные.Справочник(СокрЛП(Имя)).Реквизит() Цикл
Ворд.ActiveDocument.ActiveWindow.S_election.I_nsertRowsBelow(1);
Ворд.ActiveDocument.ActiveWindow.S_election.MoveLeft(1,1);
Реквизит=Метаданные.Справочник(СокрЛП(Имя)).Реквизит(Сч);
Синоним=Реквизит.Синоним;
Если ПустоеЗначение(Синоним)=0 Тогда
Если нрег(СтрЗаменить(Синоним," ",""))<>нрег(Реквизит.Идентификатор) Тогда
Синоним=" ("+Синоним+")";
Иначе
Синоним="";
КонецЕсли;
КонецЕсли;
Ворд.ActiveDocument.ActiveWindow.S_election.TypeText(СокрЛП(Реквизит.Идентификатор)+Синоним);
Ворд.ActiveDocument.ActiveWindow.S_election.MoveRight(1,1);
Тип=Реквизит.Тип;
Если Тип="Строка" Тогда
Тип=Тип+" ("+СокрЛП(Реквизит.Длина)+")";
ИначеЕсли Тип="Число" Тогда
Тип=Тип+" ("+СокрЛП(Реквизит.Длина);
Если ПустоеЗначение(Реквизит.Точность)=0 Тогда
Тип=Тип+"."+СокрЛП(Реквизит.Точность);
КонецЕсли;
Тип=Тип+")";
Иначе
Тип=Тип+"."+Реквизит.Вид;
КонецЕсли;
Ворд.ActiveDocument.ActiveWindow.S_election.TypeText(Тип);
Ворд.ActiveDocument.ActiveWindow.S_election.MoveRight(1,1);
Ворд.ActiveDocument.ActiveWindow.S_election.TypeText(Реквизит.Комментарий);
КонецЦикла;
Предупреждение("Готово",5);
КонецПроцедуры
Процедура Документ()
Ворд=СоздатьОбъект("Word.Application");
Ворд.DisplayAlerts=0;
Для Сч=1 По Метаданные.Документ(СокрЛП(Имя)).РеквизитШапки() Цикл
Ворд.ActiveDocument.ActiveWindow.S_election.I_nsertRowsBelow(1);
Ворд.ActiveDocument.ActiveWindow.S_election.MoveLeft(1,1);
Ворд.ActiveDocument.ActiveWindow.S_election.TypeText("Шапка");
Ворд.ActiveDocument.ActiveWindow.S_election.MoveRight(1,1);
Реквизит=Метаданные.Документ(СокрЛП(Имя)).РеквизитШапки(Сч);
Синоним=Реквизит.Синоним;
Если ПустоеЗначение(Синоним)=0 Тогда
Если нрег(СтрЗаменить(Синоним," ",""))<>нрег(Реквизит.Идентификатор) Тогда
Синоним=" ("+Синоним+")";
Иначе
Синоним="";
КонецЕсли;
КонецЕсли;
Ворд.ActiveDocument.ActiveWindow.S_election.TypeText(СокрЛП(Реквизит.Идентификатор)+Синоним);
Ворд.ActiveDocument.ActiveWindow.S_election.MoveRight(1,1);
Тип=Реквизит.Тип;
Если Тип="Строка" Тогда
Тип=Тип+" ("+СокрЛП(Реквизит.Длина)+")";
ИначеЕсли Тип="Число" Тогда
Тип=Тип+" ("+СокрЛП(Реквизит.Длина);
Если ПустоеЗначение(Реквизит.Точность)=0 Тогда
Тип=Тип+"."+СокрЛП(Реквизит.Точность);
КонецЕсли;
Тип=Тип+")";
Иначе
Тип=Тип+"."+Реквизит.Вид;
КонецЕсли;
Ворд.ActiveDocument.ActiveWindow.S_election.TypeText(Тип);
Ворд.ActiveDocument.ActiveWindow.S_election.MoveRight(1,1);
Ворд.ActiveDocument.ActiveWindow.S_election.TypeText(Реквизит.Комментарий);
КонецЦикла;
Для Сч=1 По Метаданные.Документ(СокрЛП(Имя)).РеквизитТабличнойЧасти() Цикл
Ворд.ActiveDocument.ActiveWindow.S_election.I_nsertRowsBelow(1);
Ворд.ActiveDocument.ActiveWindow.S_election.MoveLeft(1,1);
Ворд.ActiveDocument.ActiveWindow.S_election.TypeText("Таб. часть");
Ворд.ActiveDocument.ActiveWindow.S_election.MoveRight(1,1);
Реквизит=Метаданные.Документ(СокрЛП(Имя)).РеквизитТабличнойЧасти(Сч);
Синоним=Реквизит.Синоним;
Если ПустоеЗначение(Синоним)=0 Тогда
Если нрег(СтрЗаменить(Синоним," ",""))<>нрег(Реквизит.Идентификатор) Тогда
Синоним=" ("+Синоним+")";
Иначе
Синоним="";
КонецЕсли;
КонецЕсли;
Ворд.ActiveDocument.ActiveWindow.S_election.TypeText(СокрЛП(Реквизит.Идентификатор)+Синоним);
Ворд.ActiveDocument.ActiveWindow.S_election.MoveRight(1,1);
Тип=Реквизит.Тип;
Если Тип="Строка" Тогда
Тип=Тип+" ("+СокрЛП(Реквизит.Длина)+")";
ИначеЕсли Тип="Число" Тогда
Тип=Тип+" ("+СокрЛП(Реквизит.Длина);
Если ПустоеЗначение(Реквизит.Точность)=0 Тогда
Тип=Тип+"."+СокрЛП(Реквизит.Точность);
КонецЕсли;
Тип=Тип+")";
Иначе
Тип=Тип+"."+Реквизит.Вид;
КонецЕсли;
Ворд.ActiveDocument.ActiveWindow.S_election.TypeText(Тип);
Ворд.ActiveDocument.ActiveWindow.S_election.MoveRight(1,1);
Ворд.ActiveDocument.ActiveWindow.S_election.TypeText(Реквизит.Комментарий);
КонецЦикла;
Предупреждение("Готово",5);
КонецПроцедуры
Процедура Общие()
Ворд=СоздатьОбъект("Word.Application");
Ворд.DisplayAlerts=0;
Для Сч=1 По Метаданные.ОбщийРеквизитДокумента() Цикл
Ворд.ActiveDocument.ActiveWindow.S_election.I_nsertRowsBelow(1);
Ворд.ActiveDocument.ActiveWindow.S_election.MoveLeft(1,1);
Ворд.ActiveDocument.ActiveWindow.S_election.TypeText("Шапка");
Ворд.ActiveDocument.ActiveWindow.S_election.MoveRight(1,1);
Реквизит=Метаданные.ОбщийРеквизитДокумента(Сч);
Синоним=Реквизит.Синоним;
Если ПустоеЗначение(Синоним)=0 Тогда
Если нрег(СтрЗаменить(Синоним," ",""))<>нрег(Реквизит.Идентификатор) Тогда
Синоним=" ("+Синоним+")";
Иначе
Синоним="";
КонецЕсли;
КонецЕсли;
Ворд.ActiveDocument.ActiveWindow.S_election.TypeText(СокрЛП(Реквизит.Идентификатор)+Синоним);
Ворд.ActiveDocument.ActiveWindow.S_election.MoveRight(1,1);
Тип=Реквизит.Тип;
Если Тип="Строка" Тогда
Тип=Тип+" ("+СокрЛП(Реквизит.Длина)+")";
ИначеЕсли Тип="Число" Тогда
Тип=Тип+" ("+СокрЛП(Реквизит.Длина);
Если ПустоеЗначение(Реквизит.Точность)=0 Тогда
Тип=Тип+"."+СокрЛП(Реквизит.Точность);
КонецЕсли;
Тип=Тип+")";
Иначе
Тип=Тип+"."+Реквизит.Вид;
КонецЕсли;
Ворд.ActiveDocument.ActiveWindow.S_election.TypeText(Тип);
Ворд.ActiveDocument.ActiveWindow.S_election.MoveRight(1,1);
Ворд.ActiveDocument.ActiveWindow.S_election.TypeText(Реквизит.Комментарий);
КонецЦикла;
Предупреждение("Готово",5);
КонецПроцедуры
Процедура СтруктураРегистра()
Ворд=СоздатьОбъект("Word.Application");
Ворд.DisplayAlerts=0;
Для Сч=1 По Метаданные.Регистр(СокрЛП(Имя)).Измерение() Цикл
Ворд.ActiveDocument.ActiveWindow.S_election.I_nsertRowsBelow(1);
Ворд.ActiveDocument.ActiveWindow.S_election.MoveLeft(1,1);
Ворд.ActiveDocument.ActiveWindow.S_election.TypeText("Измерение");
Ворд.ActiveDocument.ActiveWindow.S_election.MoveRight(1,1);
Реквизит=Метаданные.Регистр(СокрЛП(Имя)).Измерение(Сч);
Синоним=Реквизит.Синоним;
Если ПустоеЗначение(Синоним)=0 Тогда
Если нрег(СтрЗаменить(Синоним," ",""))<>нрег(Реквизит.Идентификатор) Тогда
Синоним=" ("+Синоним+")";
Иначе
Синоним="";
КонецЕсли;
КонецЕсли;
Ворд.ActiveDocument.ActiveWindow.S_election.TypeText(СокрЛП(Реквизит.Идентификатор)+Синоним);
Ворд.ActiveDocument.ActiveWindow.S_election.MoveRight(1,1);
Тип=Реквизит.Тип;
Если Тип="Строка" Тогда
Тип=Тип+" ("+СокрЛП(Реквизит.Длина)+")";
ИначеЕсли Тип="Число" Тогда
Тип=Тип+" ("+СокрЛП(Реквизит.Длина);
Если ПустоеЗначение(Реквизит.Точность)=0 Тогда
Тип=Тип+"."+СокрЛП(Реквизит.Точность);
КонецЕсли;
Тип=Тип+")";
Иначе
Тип=Тип+"."+Реквизит.Вид;
КонецЕсли;
Ворд.ActiveDocument.ActiveWindow.S_election.TypeText(Тип);
Ворд.ActiveDocument.ActiveWindow.S_election.MoveRight(1,1);
Ворд.ActiveDocument.ActiveWindow.S_election.TypeText(Реквизит.Комментарий);
КонецЦикла;
Для Сч=1 По Метаданные.Регистр(СокрЛП(Имя)).Ресурс() Цикл
Ворд.ActiveDocument.ActiveWindow.S_election.I_nsertRowsBelow(1);
Ворд.ActiveDocument.ActiveWindow.S_election.MoveLeft(1,1);
Ворд.ActiveDocument.ActiveWindow.S_election.TypeText("Ресурс");
Ворд.ActiveDocument.ActiveWindow.S_election.MoveRight(1,1);
Реквизит=Метаданные.Регистр(СокрЛП(Имя)).Ресурс(Сч);
Синоним=Реквизит.Синоним;
Если ПустоеЗначение(Синоним)=0 Тогда
Если нрег(СтрЗаменить(Синоним," ",""))<>нрег(Реквизит.Идентификатор) Тогда
Синоним=" ("+Синоним+")";
Иначе
Синоним="";
КонецЕсли;
КонецЕсли;
Ворд.ActiveDocument.ActiveWindow.S_election.TypeText(СокрЛП(Реквизит.Идентификатор)+Синоним);
Ворд.ActiveDocument.ActiveWindow.S_election.MoveRight(1,1);
Тип=Реквизит.Тип;
Если Тип="Строка" Тогда
Тип=Тип+" ("+СокрЛП(Реквизит.Длина)+")";
ИначеЕсли Тип="Число" Тогда
Тип=Тип+" ("+СокрЛП(Реквизит.Длина);
Если ПустоеЗначение(Реквизит.Точность)=0 Тогда
Тип=Тип+"."+СокрЛП(Реквизит.Точность);
КонецЕсли;
Тип=Тип+")";
Иначе
Тип=Тип+"."+Реквизит.Вид;
КонецЕсли;
Ворд.ActiveDocument.ActiveWindow.S_election.TypeText(Тип);
Ворд.ActiveDocument.ActiveWindow.S_election.MoveRight(1,1);
Ворд.ActiveDocument.ActiveWindow.S_election.TypeText(Реквизит.Комментарий);
КонецЦикла;
Для Сч=1 По Метаданные.Регистр(СокрЛП(Имя)).Реквизит() Цикл
Ворд.ActiveDocument.ActiveWindow.S_election.I_nsertRowsBelow(1);
Ворд.ActiveDocument.ActiveWindow.S_election.MoveLeft(1,1);
Ворд.ActiveDocument.ActiveWindow.S_election.TypeText("Реквизит");
Ворд.ActiveDocument.ActiveWindow.S_election.MoveRight(1,1);
Реквизит=Метаданные.Регистр(СокрЛП(Имя)).Реквизит(Сч);
Синоним=Реквизит.Синоним;
Если ПустоеЗначение(Синоним)=0 Тогда
Если нрег(СтрЗаменить(Синоним," ",""))<>нрег(Реквизит.Идентификатор) Тогда
Синоним=" ("+Синоним+")";
Иначе
Синоним="";
КонецЕсли;
КонецЕсли;
Ворд.ActiveDocument.ActiveWindow.S_election.TypeText(СокрЛП(Реквизит.Идентификатор)+Синоним);
Ворд.ActiveDocument.ActiveWindow.S_election.MoveRight(1,1);
Тип=Реквизит.Тип;
Если Тип="Строка" Тогда
Тип=Тип+" ("+СокрЛП(Реквизит.Длина)+")";
ИначеЕсли Тип="Число" Тогда
Тип=Тип+" ("+СокрЛП(Реквизит.Длина);
Если ПустоеЗначение(Реквизит.Точность)=0 Тогда
Тип=Тип+"."+СокрЛП(Реквизит.Точность);
КонецЕсли;
Тип=Тип+")";
Иначе
Тип=Тип+"."+Реквизит.Вид;
КонецЕсли;
Ворд.ActiveDocument.ActiveWindow.S_election.TypeText(Тип);
Ворд.ActiveDocument.ActiveWindow.S_election.MoveRight(1,1);
Ворд.ActiveDocument.ActiveWindow.S_election.TypeText(Реквизит.Комментарий);
КонецЦикла;
Предупреждение("Готово",5);
КонецПроцедуры