Інтернет Windows Android

1с activex для word звичайна програма. Створення зовнішньої друкованої форми "Договір"

Доброго вам дня!

Для більшості організацій стандартна друкована форма будь-якого договору в програмах 1С не підходить. Тому фірма 1С надала можливість додавати додаткові друковані форми для документів і інших об'єктів. У цій статті я хочу розповісти, як створити і підключити зовнішню друковану форму договору, яка буде відкриватися в Microsoft Word.

Підключення додаткових зовнішніх друкованих форм

Запускаємо 1С: Підприємство. Відкриваємо довідник «Додаткові зовнішні друковані форми» через меню «Сервис» - « додаткові звіти і обробки ».

Натиснемо кнопку «Додати», потім зареєструємо нову друковану форму, натиснувши «Замінити файл зовнішньої обробки». Автоматично заповниться приналежність друкованої форми документу «Реалізація товарів і послуг». Вибираємо «Договір» в колонці «Замінювана друкована форма», щоб стандартна друкована форма більш не використовувалася.

Запускаємо 1С: Підприємство, відкриваємо довідник "Контрагенти", вибираємо контрагента, для якого буде друкуватися наш договір і по кнопці "Файли" переходимо до довідника "Сховище додаткової інформації", Завантажуємо в нього шаблон для договору і, обов'язково, називаємо його" Договір ", як показано на малюнку нижче, інакше програма не зможе знайти макет для друкованої форми.

Тепер відкриваємо будь-який документ "Реалізація товарів і послуг" і натискаємо кнопку «Друк» - «Договір». Відкриється документ Microsoft Word з договором.

Зовнішню друковану форму "Договір" і макет до неї можна завантажити за посиланням нижче.

Макет трудового договору в форматі Microsoft Word

Існує, щонайменше, три способи створення шаблону:

1. У документі Word створюються опорні фрази, наприклад, "[НомерДоговора]", потім, в модулі обробки проводиться пошук і заміна значень.

2. У документі Word створюються закладки, до яких потім можна звертатися по імені. Мінус цього способу в тому, що мітка повинна бути унікальна, тобто, якщо потрібно вставити прізвище співробітника в кожен абзац тексту, то доведеться зробити кілька закладок з різними іменами.

3. У документі Word додаються службові поля, наприклад, «DocVariable» або «Author». Використовуючи DocVariable можна звертатися до змінної по імені, наприклад, «ДокументВорд.Variables.Add (ІмяПеременной, ЗначеніеПеременной);», але її не видно в шаблоні. Поле «Author» відображається в шаблоні, але звертатися до нього доведеться в циклі за індексом: «ДокументВорд.Fields.item (Індекс) .Result.Text \u003d Значення;».

На мій погляд, перший спосіб є найоптимальнішим. Шаблон документа легко редагується, опорні фрази видно в тексті. Тому шаблон створюємо цим способом.

відкриваємо програму Microsoft Office. Для прикладу додаємо пару рядків, як показано на малюнку нижче і зберігаємо шаблон.

Створення зовнішньої друкованої форми "Договір"

Запускаємо 1С: Підприємство в режимі «Конфігуратор» і через меню «Файл» - «Новий» створюємо зовнішню обробку. Додаємо реквізит "Посилання на об'єкт" і макет "Параметри_Авторегістраціі" з типом "Табличний документ". Тип реквізиту "Посилання на об'єкт" залежить від того, для яких об'єктів буде використовуватися друкована форма, в нашому випадку друкована форма буде використовувати для документа "Реалізація товарів і послуг", тому вказуємо тип "ДокументСсилка.РеалізаціяТоваровУслуг".

Розробка процедури друку

В даний час ми з Lord of fear працюємо над одним цікавим проектом - розробляємо рішення на базі платформи 1С: Підприємство 8.2 для однієї великої компанії. Для поставлених завдань, можливостей 1C'скі більш, ніж достатньо і ми нітрохи не шкодуємо про наш вибір. Власне далі мова піде не про великої і могутньої платформі 1С: Підприємство.

Одна з ключових функцій нашої програми - генерування друкованих форм різних законодавчих документів (протоколи, повідомлення і т.д.). З технічного боку ніби все просто - створюєш стандартний макет типу табличний документ і берешся за його верстці. Ми витратили час і швиденько накидали все друковані форми. Вийшло непогано, але потім замовник зажадав переробити оформлення, і ми сіли в калюжу. Проблема полягала в неможливості застосовувати стилі форматування до певних словами, знаходяться всередині одного осередку. Так, можна застосувати стиль до цілої осередку, але нам такий спосіб не підійшов, тому що в одній комірці може знаходитися кілька слів, а як-то особливо виділяти потрібно лише одне з них.

В принципі цю проблему можна вирішити шляхом зменшення розміру осередків табличного документа. У певних випадках з такими (дрібними) осередками простіше працювати, але занадто часто змінювати таку розмітку кайфу теж мало. У всякому разі для мене.

Подумали ми подумали і вирішили відмовитися від типових макетів типу "Табличний документ", а заюзать можливості MS Word. Ідея була приблизно такою:

1. Створити шаблони необхідних документів. Всі файли шаблонів створювалися саме як шаблони для MS Word. Хто не в курсі, шаблони - це файли з розширенням dot. На їх основі можна створювати нові документи.

2. За допомогою технології OLE виробляти створення документів і заміну псевдо-змінних на потрібний текст. Псевдо-змінні оформлялися у вигляді: [ІмяПеременной].

3. В залежності від ситуації виконувати друк або збереження сформованого документа.

Складнощів в принципі ніяких немає, але до цього дня нам обом не доводилося працювати з "1С: Підприємство" з MS Word. В основному всі створювані мною макети друкованих форм базувалися на табличних документах, Тому досвіду в передачі даних з платформи, скажімо в MS Word / Excel у мене не було. Зчитуванням даних з Excel доводилося займатися частенько, а от передавати - ніколи.

Виконавши пару треків під гітару, ми вирішили відкласти багатостраждальний інструмент і приступити до роботи. Трохи подумала і почитавши хелпи, нами був накидав ось такий прімерчік:

// Створюємо новий об'єкта типу Word.Application WordApplication \u003d Новий COMОб'ект ( "WORD.Application"); // Створюємо новий документ на основі шаблону // В змінної ПутьКШаблону вказуємо повний шлях до створеного // нами шаблоном (файл з расшірешеніем dot) НовийДокумент \u003d WordApplication .Documents.Add (ПутьКШаблону); // Готуємося до пошуку ЗаменаКонтента \u003d НовийДокумент.content.Find; // Замінюємо текст // В перший параметр методу Execute передаємо рядок яку потрібно замінити // У дев'ятий - рядок, на яку буде проводити заміну //т.е. в ЧтоЗаменяем ми будемо передавати ім'я змінної (наприклад, [ім'я користувача]) // а в останній - її значення ЗаменаКонтента.Execute (ЧтоЗаменяем, Брехня, Істина, Брехня, Істина, Брехня, Рядок (ЧемЗаменяем)); // Далі все залежить від наших хотелок // Збереження документа НовийДокумент.SaveAs (ПутьДляСохраненія); // Друк документа НовийДокумент.PrintOut (); // По закінченню роботи потрібно закрити документ і сам Winword. Робиться це так // Для методу Quit я передаю значення Брехня. Це говорить про те, що нам не потрібно зберігати заповнений документ. WordApplication.application.Quit (Брехня); WordApplication \u003d 0;

Результати роботи

Варіант використання MS Word для генерації витончених друкованих форм нас повністю влаштував. Ми витратили пару годинок для написання процедур-обгорток, а також переробили раніше створені форми під шаблони MS Word. Результатом ми залишилися більш, ніж задоволені. Все працює спритно і наш замовник без проблем може самостійно змінити шаблони вихідних документів. На випадок косяків (ну, якщо замовник випадково дропнет наявні шаблони) ми передбачили можливість відновлення оригінальних файлів-шаблонів.

Якщо ти вирішиш застосовувати даних підхід в своїх проектах, то будь гранично обережний. Застосування всіх цих няшек вимагає наявності на комп'ютері користувача MS Word. З огляду на, що сьогодні багато компаній переходять на жахливий (ИМХО) OpenOffice - застосування даного способу може викликати труднощі. На щастя, нам в цьому плані пощастило.

УВАГА! При використанні кодів описаних нижче, приберіть символ _
Давайте розглянемо на прикладах як це робиться! \u003d) Мені відомо 2 способи:
1. Шляхом заміни шаблонного тексту в макеті за допомогою Word.
2. Шляхом вставки тексту за допомогою закладок в Wordе,

У першому випадку відразу скажу, що довжина рядка передається в функцію заміни, досить невелика 255 символів, та й розстановка шаблонних виразів в макеті Word займає досить багато часу. Через процедуру Content.Find.Execute.

У другому випадку довжина, наскільки мені відомо необмежена, також воськаться з закладками набагато швидше і зручніше, ніж розставляти шаблонний текст. Використовуючи Bookmarks (). S_elect (). Тому давайте на коді розглянемо другий приклад.

І так, для початку необхідно додати Word макет до документа. Додаємо макет за допомогою конструктора макетів вказавши Active document і вибравши відповідний макет.

Називаємо його Акт. Відкриваємо макет в 1Ске, ставимо курсор в потрібному місці, переходимо в меню Вставка закладка натискаємо додати закладку наприклад у мене це НарушеніяТекст

Тепер кидаємо на форму документа кнопку Сформувати і після натискання на неї пишемо код який відкриває наш макет Word шукаємо закладку на ім'я і вставляє туди текст:
Код 1C v 8.х // ініціалізація частина 1
СсилкаМакет \u003d ПолучітьМакет (Акт);
MSWord \u003d СсилкаМакет.Получіть ();
спроба
СсилкаМакет \u003d MSWord.Application.Documents (1);
СсилкаМакет.Activate ();
// вивантажуємо табличну частину з порушеннями в рядок частину 2
str \u003d Новий COMОб'ект (ADODB.Stream);
str.Open ();
СтрочкаТабліци \u003d ЕлементиФорми.Нарушенія.ТекущіеДанние;
Для Кожного СтрочкаТабліци З Порушення Цикл
str.WriteText (+ СтрочкаТабліци.Опісаніе + Порушено вимоги СНІПФЗГОСТ: + СтрочкаТабліци.СНІПФЗГОСТ + Стаття: + СтрочкаТабліци.ЧастьСтатья + Символ (13), 0);
КонецЦікла;
str.Position \u003d 0;
НарушеніяТекст \u003d str.readText ();

// вставляємо в ятати текст з порушеннями частина 3
MSWord.Bookmarks (НарушеніяТекст) .S_elect ();
MSWord.Application.S_election.TypeText (НарушеніяТекст);

СсилкаМакет.Activate ();
виняток
// якщо помилка
Повідомити (ОпісаніеОшібкі ());
MSWord.Application.Quit ();
КонецПопиткі;
Це приклад виведення безлічі рядків з табличній частині одним рядком, якщо потрібно просто вивантажити якийсь реквізит то можна пропустити частину 2 і перейти до частини 3.

Для вивантаження табличній частині в формі таблиці можна використовувати функцію автоформату, наприклад код вивантаження табличній частині документа Припис:
Код 1C v 8.х Word \u003d MSWord.Application;
Документ \u003d Word.ActiveDocument ();
// Переміститися вниз на 22 рядків
Word.S_election.MoveDown (, 22);
Документ.Paragraphs.Add ();
// підготовка таблиці:
Rng \u003d Word.S_election.Range;
// Формуємо заголовок:
Rng.I_nsertAfter (№ п / п * Встановлені порушення і заходи щодо їх усунення * Підстави);
Rng.I_nsertParagraphAfter ();
// сама таблиця
СтрочкаТабліци \u003d ЕлементиФорми.НарушеніяПредпісаніе.ТекущіеДанние;
Для Кожного СтрочкаТабліци з НарушеніяПредпісаніе Цикл
Rng.I_nsertAfter (Рядок (СтрочкаТабліци.НомерСтрокі) + * + СтрочкаТабліци.Опісаніе +; + СтрочкаТабліци.Предпісаніе + * + СтрочкаТабліци.СНІПФЗГОСТ + + СтрочкаТабліци.ЧастьСтатья);
Rng.I_nsertParagraphAfter ();
КонецЦікла;
Rng.ConvertToTable (*);
Документ.Tables (1) .AutoFormat (17); // номер таблиці в шаблоні
Word.Visible \u003d Істина;
Ну ось і все \u003d)

Ще спосіб Active document
У Конфігураторі Макети - правий клік - Додати
Тип макета: Active document
Створити новий - Документ Microsoft Word

Меню Вставка - Поле - Автоматизація - DocVariable
Написати ім'я поля в графі "Нове ім'я:" ДатаПріказа

У модулі форми документа створюємо кнопку, і в її обробнику пишемо:



КомОб'ект.Variables.Item ( "ДатаПріказа"). Value \u003d "24.01.2007";
КомОб'ект.Fields.UpDate ();

КомОб'ект.PrintOut (); // роздрукувати документ

// Очікування закінчення відправки на друк ...
поки objWord.Application.BackgroundPrintingStatus<>0 Цикл
Попередження ( "Очікування", 1);
КонецЦікла;

КомОб'ект.Application.Quit (); // закрити Word
КомОб'ект \u003d 0;
КонецПроцедури

2) додаємо не поле, а Закладання
Меню Вставка - Закладка і далі вказуємо її ім'я ( "ІмяЗакл")
Код 1C v 8.х Процедура ОсновниеДействіяФормиWord (Кнопка)
АктівнийДокумент \u003d ПолучітьМакет ( "Макет");
КомОб'ект \u003d АктівнийДокумент.Получіть ();
КомОб'ект.Application.Visible \u003d 1;
КомОб'ект.Bookmarks (СокрЛП ( "ІмяЗакл")). S_elect ();
КомОб'ект.Application.S_election.TypeText (СокрЛП ( "тест перевірка"));
КонецПроцедури

Код 1C v 8.2 УП // Параметри договору позначені в тексті змінними виду "[% НомерДоговора%]"
Функція ПечатьДокумента () Експорт

Договір \u003d ПолучітьМакет ( "ActiveDocument_ДоговорПоставкі"); // отримаємо макет-ActiveDocument
MSWord \u003d Договор.Получіть ();
спроба
Doc \u003d MSWord.Application.Documents (1);
Doc.Activate ();
Replace \u003d Doc.Content.Find;

FindText \u003d "(НомерДоговора)"; // що шукати - імя_шаблона
MatchCase \u003d Брехня; // використовувати регулярні вирази
MatchWholeWord \u003d Істина; // шукати слово цілком
MatchWildcards \u003d Брехня; // іспоьзовать регулярні вирази
MatchSoundsLike \u003d Не визначено; // шукати співзвучні
MatchAllWordForms \u003d Не визначено; // шукати всі форми слова
Forward \u003d Істина; // шукати вперед
Wrap \u003d Не визначено; // що повинен повернути Find-об'єкт
Format_ \u003d Брехня; // використовувати форматування
ReplaceWith \u003d "N777"; // текст, на який треба замінити імя_шаблона

// коротко:
//Replace.Execute(FindText,Ложь,Істіна,Ложь,Істіна,Ложь,НомерДоговора);

Replace.Execute (
FindText,
MatchCase,
MatchWholeWord,
MatchWildcards,
MatchSoundsLike,
MatchAllWordForms,
Forward,
Wrap,
Format_,
Номер договору);

MSWord.Application.Visible \u003d Істина;
MSWord.Activate ();
виняток
Повідомити (ОпісаніеОшібкі ());
MSWord.Application.Quit ();
КонецПопиткі;

Повернення 0;

Публікація - свого рода пам'ятка, яка містить приклади коду для:

1. заповнення шаблону Word даними з 1С;
2. заповнення колонтитулів Word даними з 1С;
3. заповнення таблиці в Word даними з 1С;

Початок роботи

У більшості випадків перед нами ставиться наступне завдання:
потрібно відкрити документ Word, Заповнений даними з 1С.

Для цього нам потрібно підготувати шаблон документа Word. Не плутайте це з Word Template, спеціальні файли Word, які містять настройки документів для багаторазового використання. Нам потрібен звичайний вордовскій документ з расшіреніемі * .docx або * .doc. А далі помістити цей документ в макет з двійковими даними.

Спроба // Отримуємо макет з двійкових даних Шаблон \u003d ПолучітьМакет (ДополнітельниеПараметри.ВідДоговора); Имяфайла \u003d ПолучітьІмяВременногоФайла ( ". Docx"); Шаблон.Запісать (имяфайла); // Створюємо COM-об'єкт для роботи з Word Об'ектВорд \u003d Новий COMОб'ект ( "Word.Application"); Об'ектВорд.Documents.add (имяфайла); // В Word можна відкривати в одному додатку кілька документів, тому Об'ектВорд.Application.Documents - це колекція відкритих документів. // У нашому випадку документ відкритий завжди один ДокументВорд \u003d Об'ектВорд.Application.Documents (1); ДокументВорд.Activate (); Виняток Повідомити ( "Помилка при запуску програми" + ОпісаніеОшібкі ()); КонецПопиткі; // Зрозуміло, отримання COM-об'єкта потрібно помістити в спробу. Хіба мало, що щось піде не так.

Читач може справедливо зауважити, що використовується модальний виклик, і погрозити автору пальцем. І буде правий.

// Створимо структуру параметрів документа ПараметриДокумента \u003d ПодготовітьСтрукутруПараметров (); // Заповнимо структуру параметрів документа ЗаполнітьСтруктуруПараметров (ПараметриДокумента);

Заглибимося трішки в принципи роботи Word ...

Кожен документ Word розділений на розділи, які складаються зі сторінок.

Для кожного розділу є можливість створювати свою нумерацію елементів, унікальні колонтитули і налаштування параметрів сторінки. Так, наприклад, щоб повернути одну зі сторінок (вивести на друк як альбомну), потрібно створити під неї окремий розділ.

кожна сторінка Word розділена на кілька областей:

  • Верхній колонтитул
  • Основний текст
  • нижній колонтитул

Потрібно зауважити, що в кожному розділі може бути унікальний колонтитул для першої сторінки.

// Об'єкт, містить весь основний текст з усіх розділів ДокументВорд.Content // Об'єкт містить колекцію розділів документа ДокументВорд.Sections // У кожному розділі є своя колекція для верхніх колонтитулів ДокументВорд.Sections (1) .Headers // І своя колекція для нижніх колонтитулів ДокументВорд.Sections (1) .Footers // При цьому, якщо стоїть галочка "Унікальний колонтитул для першої сторінки", то колекції Headers і Footers міститимуть два елементи

Заповнення призначених для користувача параметрів

При зверненні до цих колекцій ми можемо виконувати в них пошук і отримувати вбудовані об'єкти, наприклад, таблиці.

Тепер ми більш-менш зрозуміли, як звертатися до областям Word, можемо в них поширювати і виконати заміну наших параметрів:

// Переберемо всі параметри і замінимо їх в документі Для кожного Параметр З ПараметриДокумента Цикл ВиполнітьЗамену (ДокументВорд.Content, Параметр.Ключ, Параметр.Значеніе); // іщім входження параметра в верхньому колонтитулі ВиполнітьЗамену (ДокументВорд.Sections (1) .Headers.Item (1) .Range (), Параметр.Ключ, Параметр.Значеніе); // іщім входження параметра в нижньому колонтитулі першої і наступних сторінок ВиполнітьЗамену (ДокументВорд.Sections (1) .Footers.Item (1) .Range (), Параметр.Ключ, Параметр.Значеніе); ВиполнітьЗамену (ДокументВорд.Sections (1) .Footers.Item (2) .Range (), Параметр.Ключ, Параметр.Значеніе); КонецЦікла; // Виконати пошук і заміну Функція ВиполнітьЗамену (знач Object, Параметр, Значення) Object.Find.Execute (Параметр ,, Значення, 2) КонецФункціі

Розглянь докладніше метод Execute. Його параметри ідентичні діалоговуму вікна при заміні / пошуку непоседресвенно з MS Word:

А ось і основні параметри (вільний переклад довідки MSDN):

  1. Шуканий текст - Рядок - Текст для заміни. Текст може містити спеціальні параметри. Наприклад, ^ p - абзац, ^ t - табуляція
  2. Чутливість до регістру - Булево - Якщо істина, то пошук буде здійснюватися з урахуванням регістру
  3. Слова цілком - Булево - Якщо істина, то шукаються слова цілком. Входження слів не враховуються. Наприклад, при пошуку слова будинок буде пропущено слово домашній
  4. Використовувати символи узагальнення - Булево - Якщо істина, то використовуються вбудовані регулярні вирази.
  5. Шукати схожі - Булево - Якщо істина, то результат пошуку буде містити схожі слова
  6. Шукати всі форми - Булево - Якщо істина, то результат пошуку буде містити різні форми слів.
  7. Пошук спочатку - Булево - Якщо істина, то буде здійснюватися з початку до кінця документа
  8. Охоплення - WdFindWrap - Опредяляет напрямок пошуку
  9. Формат - Format - Формат шуканого тексту
  10. Рядок заміни - рядок - рядок, на яку буде замінений вихідний текст
  11. Кількість замін - WdReplace - Визначає скільки разів виконувати заміну
  12. і т.д.

WdReplace - Constant Value:
wdReplaceAll 2
wdReplaceNone 0
wdReplaceOne 1

Даний метод не дозволяє отримати "Рядок заміни" як виділену область, але він працює десь в 10 разів повільніше. Для отримання виділеної області можна скористатися трошки відкоригованої типовий функцією:

// УправленіеПечатьюMSWordКліент c незначними змінами для конфігурації УПП 1.3 Функція ВиполнітьЗамену (знач Object, Параметр, Значення) СтрокаПоіска \u003d "[" + Параметр + "]"; СтрокаЗамени \u003d Рядок (Значення); // Слід наголосити областей, в якій ми здійснюємо заміну Object.Select (); // Отримуємо виділену область Selection \u003d Object.Application.Selection; // Знайдемо всі входження параметра і замінимо його на потрібне нам значення FindObject \u003d Selection.Find; FindObject.ClearFormatting (); Поки FindObject.Execute (СтрокаПоіска) Цикл Якщо ПустаяСтрока (СтрокаЗамени) Тоді Selection.Delete (); Інакше Selection.TypeText (СтрокаЗамени); КонецЕсли; КонецЦікла; // Скасуємо виділення Selection.Collapse (); КонецФункціі

Вже отримавши виділену область можна відредагувати стиль тексту, шрифт і т.д.

// Редагування шрифту Selection.Font // Редагування кольору Selection.HighlightColorIndex

Також є другий підхід, який використовує такий об'єкт Word, Як поля. Мені він не дуже подобається, тому що у великих документах, близько 100 сторінок, ці поля починають глючити (зникати, не підставляти потрібні значення) і інша нісенітниця. Ну принаймні в Word 2007. Але я його все одно наведу:

При підготовці шаблону в тіло документа необхідно навставлять полів з типом DOCVARIABLE (можна вставляти комбінацією клавіш Ctrl + F9).

Доступ до таких полях можна отримати наступним нехитрим чином:

ДокументВорд.Variables.Item (НазваніеПараметра) .Values

Заповнення таблиць за шаблоном

Отже, ми заповнили параметри в основному тексті документа, замінили параметри в колонтитулах, але у нас ще є одна неприємність - потрібно заповнити таблицю.

Підхід, описаний нижче, годиться тільки для таблиць із заздалегідь відомим форматом. Тобто ми можемо як завгодно відформатувати таблицю і її рядки спочатку. Але потім змінювати досить-таки проблематично.

До таблиць можна отримати доступ через області документа.

// Отримуємо доступ до першої таблиці в основному тексті Таблиця \u003d ДокументВорд.Content.Tables (1)

Для завдання форматування легше в шаблоні створити таблицю з порожньою першою рядком, яку ми в подальшому видалимо.

// Дані для заповнення ПараметриТЧ \u003d ПараметриДокумента.ПріложеніеТЧ; // Потрібно залишити шапку і перший рядок недоторканою Итератор \u003d 2; Таблиця \u003d ДокументВорд.Content.Tables (3); Для кожного Рядок З ПараметриТЧ Цикл // За умовчанням додає рядок вище першої Табліца.Rows.Add (); ЗаполнітьСтрокуТабліци (Таблиця, Итератор, Рядок, "ПП, НоменклатураНаіменованіе, ЕдІзмеренія, ЦенаСтрокой", ПараметриТЧ); Итератор \u003d Итератор + 1; КонецЦікла; // Структура шаблонів містить Найменування колонок і їх порядок Процедура ЗаполнітьСтрокуТабліци (Таблиця, НомерСтрокі, ЗначеніеЗаполненія, СтруктураШаблонов, ТабліцаЗначеній) МассівСтрок \u003d ОбщегоНазначенія.РазложітьСтрокуВМассівПодстрок (СтруктураШаблонов, ","); Итератор \u003d 1; Для кожного Рядок З МассівСтрок Цикл Якщо ТабліцаЗначеній.Колонкі.Найті (Рядок) \u003d Не визначено І Рядок<> "ПП" Тоді Итератор \u003d Итератор + 1; продовжити; // Не забуваємо, що Шапка теж рядок, а при нумерації нам потрібно її виключити ІначеЕслі Рядок \u003d "ПП" Тоді Табліца.Cell (НомерСтрокі, Итератор) .Range (). Text \u003d Рядок (НомерСтрокі-1); Итератор \u003d Итератор + 1; продовжити; КонецЕсли; Табліца.Cell (НомерСтрокі, Итератор) .Range (). Text \u003d Рядок (ЗначеніеЗаполненія [Рядок]); Итератор \u003d Итератор + 1; КонецЦікла; КонецПроцедури

Ось, в принципі, і все. Основні питання, що виникають при роботі з Word, я постарався висвітлити. Сподіваюся, цей огляд допоможе вам у роботі \u003d)

Дякую за поради і коментарі:
,

Критика тільки вітається. Чим більше зауважень, тим краще буде гайд \u003d)

дуже корисна зовнішня обробка для всіх типових конфігурацій 1С: Підприємство 8.3, дозволяє формувати файл Word за обраним шаблоном з довідників і документів системи. З її допомогою ви можете роздруковувати з 1С різні специфікації, трудові договори і договори з контрагентами, гарантійні талони та інше інше. Маючи під рукою Word потрібної структури і трохи допрацювавши його, ви отримаєте можливість формувати його прямо з 1с із заповненням всіх корисних властивостей.

Принцип роботи обробки наступний:

  • вибираємо Word потрібної структури,
  • в тих місцях файлу, де необхідно вставити інформацію з 1С, робимо закладки,
  • після підготовки шаблону додаємо його в 1С (довідник Файли),
  • налаштовуємо заповнення шаблону друку в 1С,
  • друкуємо потрібні документи / довідники, вибравши створений шаблон.

Підготовка шаблону Word

Для демонстрації роботи обробки налаштуємо друк специфікації до договору з документа Реалізація товарів і послуг. Припустимо, у нас є такий Word:

З нього будемо формувати повноцінну специфікацію. Починаємо з того, що вставляємо закладки в тих місцях, де необхідно підставляти інформацію з бази:



У найменуванні закладок можна використовувати прогалини.

При друку також будемо заповнювати таблицю товарів. Щоб вона сформувалася красиво, залишимо шапку і один порожній рядок:


Зберігаємо Word, закриваємо.

Налаштування заповнення шаблону

Тепер в програмі відкриваємо журнал документів продажу, заходимо в меню друку і тиснемо кнопку для настройки друку за шаблоном Word:


Налаштування шаблонів доступна тільки користувачам з повними правами.

У вікні налаштувань насамперед створимо новий файл в програмі (мається на увазі елемент довідника файли) І прив'яжемо до нього наш Word:


У вікні вибираємо Додати файл:


Потім вибираємо його в налаштуваннях шаблону. Після цього заповнюється таблиця закладок, нам потрібно вибрати джерела заповнення даних в цих закладках:


Як джерело використовуються реквізити самого документа продажу, а також похідні від цих реквізитів:

При друку можна використовувати також додаткові реквізити довідників і документів.

Список доступних реквізитів дуже великий, зручно скористатися швидким введенням:


В результаті вибору джерела таблиця прийме наступний вигляд:


Для значення до рядках таблиці є відмінювання за відмінками, а також скорочення ПІБ:


Для друку таблиці в Word виберемо вихідну таблицю документа:


Після вибору таблиці з'являється довідка з іменами тих реквізитів, які можна використовувати для виведення таблиці в Word. Нам залишається перерахувати необхідні реквізити через кому (в порядку проходження колонок файлу). Допускається залишати пусте значення в колонці або писати туди довільний текст:


Все ОК, тепер можемо друкувати потрібний Word.

Друк по налаштованому шаблоном доступна тепер для всіх, тобто користувачам не потрібно кожному налаштовувати друк самостійно.



Чи можемо друкувати як один документ, так і список:


На формі налаштувань друку крім створення нових шаблонів можна редагувати наявні:


У тому випадку, якщо для об'єкта налаштоване кілька шаблонів Word, то при виборі команди друку відкриється вікно з вибором потрібного:


Щоб уникнути колізій з правами доступу користувачів до довідника файли вам необхідно встановити крім самої обробки друку в Word ще й розширення для 1С (знаходиться в одному архіві з обробкою), яке надасть користувачам доступ на читання довідника.

Якщо у вас є питання / зауваження / пропозиції по даній обробці, буду радий відповісти.

Реліз 1.1.2.2 від 15.12.2018

Для виведення дати при друку шаблону додана можливість вибору формату, в табличній частині крім номенклатури тепер можна вказувати артикул і одиницю виміру:


Тепер можна видаляти непотрібні шаблони:


Реліз 1.1.2.3 від 29.01.2019

З'явилася можливість виводити частині дати окремо - день, місяць (номер або назва) і рік:


Для фізичних осіб (і контрагентів з типом фізособа) тепер можна виводити паспортні дані:


Реліз 1.1.2.4 від 12.03.2019

При друку в Word табличній частині документів руху товару з'явилася можливість використовувати не тільки реквізити цієї табличній частині, а й будь-які реквізити номенклатури:


Реліз 1.1.2.5 від 12.07.2019

З'явилася можливо не тільки формувати шаблон Word, А й автоматично прикріплювати його до вихідного об'єкта (в приєднані файли). Для цього потрібно вибрати варіант настройки Зберегти в приєднані файли.


Після закінчення процедури друку відкриється форма приєднаного файлу.


З цієї форми можна при необхідності відкрити на перегляд / редагування заповнений шаблон Word.