• Главная
  • Карта сайта
Не найдено

Зовнішня друкована форма 1С 8.3 для кероване додаток

  1. Створення зовнішньої обробки
  2. Створення макета друкарської форми
  3. програмування

Розглянемо написання найпростішої зовнішньої друкованої форми в 1С 8.3 для керованого застосування на прикладі конфігурацій Бухгалтерія 3.0 і Управління торгівлею 11 (дана друкована форма буде працювати в обох цих змінах).

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

Створення зовнішньої обробки

У конфігураторі 1C Підприємство 8 створюємо зовнішню обробку (Файл-> Новий-> Зовнішня обробка), задаємо ім'я, додаємо реквізит Документ з типом ДокументСсилка.РеалізаціяТоваровУслуг, він не є обов'язковим для роботи друкарської форми, але стане в нагоді нам для її реєстрації в базі.

Створення макета друкарської форми

Додаємо новий макет, тип макета залишаємо Табличний документ. На макеті створюємо три області: Шапка, Дані і Підвал. Зробити це можна виділивши потрібну кількість рядків і натиснувши меню Табліца-> імена-> Призначити ім'я (Ctrl + Shift + N).

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

В області Дані створимо параметри для виведення рядків табличної частини (Номенклатура, ціна і т.д.), а в області Підвал для підсумків за кількістю і сумою.

програмування

Зайдемо в модуль об'єкта друкованої форми дії-> Відкрити модуль об'єкта.

Тепер в модулі об'єкта слід створити обов'язкову функцію СведеніяОВнешнейОбработке (). Вона необхідна для реєстрації друкованої форми в довіднику ДополнітельниеОтчетиІОбработкі, в ній збирається структура з даними для підключення форми. Ця функція, а також ряд супутніх їй, практично однакові для всіх друкованих форм, тому їх можна просто копіювати в нову друковану форму нічого не змінюючи.

Розглянемо зміст функції СведеніяОВнешнейОбработке (). Для початку створимо її в модулі:

Функція СведеніяОВнешнейОбработке () Експорт КонецФункціі

Створимо структуру ПараметриРегістраціі в якій і будуть зберігатися всі дані необхідні для реєстрації.

ПараметриРегістраціі = Новий Структура;

Створимо масив МассівНазначеній в якому будуть зберігатися найменування документів і довідників з яких буде проводитися друк.

МассівНазначеній = Новий Масив;

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

Функція УказатьНаіменованіеВнешнейПечатнойФорми () Найменування = ЕтотОб'ект .Метаданние () Представлення (); Повернення Найменування; КонецФункціі

А тепер заповнимо змінну.

Найменування = УказатьНаіменованіеВнешнейПечатнойФорми ();

Заповнимо МассівНазначеній використовуючи реквізит зовнішньої обробки Документ. Також винесемо отримання елемента масиву в окрему функцію.

Функція ПолучітьМетаданниеДокументаПечаті () ПолноеІмя = Документ .Метаданние () .ПолноеІмя (); Повернення ПолноеІмя; КонецФункціі

А тепер додамо отримані дані в масив.

МассівНазначеній Додамо (ПолучітьМетаданниеДокументаПечаті ());

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

Приступимо до заповнення структури ПараметриРегістраціі.

Вид зовнішньої обробки, може бути: ЗаполненіеОб'екта, ДополнітельнийОтчет, СозданіеСвязаннихОб'ектов, ПечатнаяФорма і т.д.

ПараметриРегістраціі .Вставіть ( "Вид", "ПечатнаяФорма");

Призначення заповнимо вже отриманим масивом:

ПараметриРегістраціі .Вставіть ( "Призначення", МассівНазначеній);

Найменування з уже заповненою змінної:

ПараметриРегістраціі .Вставіть ( "Найменування", Найменування);

Номер версії можна поставити будь-який за бажанням:

ПараметриРегістраціі .Вставіть ( "Версія", "1.1");

Безпечний режим не дасть друкованій формі вносити зміни в базу даних. Але вона у нас абсолютно безпечна =), тому ставимо значення Брехня.

ПараметриРегістраціі .Вставіть ( "БезопаснийРежім", Брехня);

В поле Інформація вносимо опис друкованої форми для користувача. Запишемо туди Найменування.

ПараметриРегістраціі .Вставіть ( "Інформація", Найменування);

Приступимо до створення команди, яка необхідна для виведення на друк нашої друкованої форми. Наведемо колонки ТабліциКоманд, винісши це в окрему функцію.

Функція ПолучітьТабліцуКоманд () Команди = Новий ТабліцаЗначеній; // як буде виглядати опис печ.форми для користувача Команди Колонка Додамо ( "Подання", Новий ОпісаніеТіпов ( "Рядок")); // ім'я макета печ.форми Команди Колонка Додамо ( "Ідентифікатор", Новий ОпісаніеТіпов ( "Рядок")); // ВизовСерверногоМетода Команди Колонка Додамо ( "Використання", Новий ОпісаніеТіпов ( "Рядок")); Команди Колонка Додамо ( "ПоказиватьОповещеніе", Новий ОпісаніеТіпов ( "Булево")); Команди Колонка Додамо ( "Модифікатор", Новий ОпісаніеТіпов ( "Рядок")); Повернення Команди; КонецФункціі

Викличемо зізнався функцію.

ТабліцаКоманд = ПолучітьТабліцуКоманд ();

Додамо команду друку, винісши цей процес в окрему функцію:

Функція ДобавітьКоманду (ТабліцаКоманд, Подання, Ідентифікатор, Використання, ПоказиватьОповещеніе = Брехня, Модифікатор = "") НоваяКоманда = ТабліцаКоманд Додамо (); НоваяКоманда. Подання = подання; НоваяКоманда. Ідентифікатор = Ідентифікатор; НоваяКоманда. Використання = Використання; НоваяКоманда. ПоказиватьОповещеніе = ПоказиватьОповещеніе; НоваяКоманда. Модифікатор = Модифікатор; КонецФункціі

Параметри функції ДобавітьКоманду:

Виклик функції виглядає так:

ДобавітьКоманду (ТабліцаКоманд, Найменування, УказатьНаіменованіеКомандиПечаті (), "ВизовСерверногоМетода", Істина, "ПечатьMXL");

Залишилося передати заповнену таблицю команд в ПараметриРегістраціі:

ПараметриРегістраціі .Вставіть ( "Команди", ТабліцаКоманд);

І повернути їх з функції:

Повернення ПараметриРегістраціі;

На цьому створення функції СведеніяОВнешнейОбработке () завершено, всі параметри необхідні для реєстрації друкованої форми зібрані. Ось повний код цієї та супутніх функцій:

Функція СведеніяОВнешнейОбработке () Експорт ПараметриРегістраціі = Новий Структура; МассівНазначеній = Новий Масив; Найменування = УказатьНаіменованіеВнешнейПечатнойФорми (); МассівНазначеній Додамо (ПолучітьМетаданниеДокументаПечаті ()); // може бути - ЗаполненіеОб'екта, ДополнітельнийОтчет, СозданіеСвязаннихОб'ектов ... ПараметриРегістраціі .Вставіть ( "Вид", "ПечатнаяФорма"); ПараметриРегістраціі .Вставіть ( "Призначення", МассівНазначеній); // ім'я під яким обробка буде зареєстрована в довіднику зовнішніх обробок ПараметриРегістраціі .Вставіть ( "Найменування", Найменування); ПараметриРегістраціі .Вставіть ( "Версія", "1.1"); ПараметриРегістраціі .Вставіть ( "БезопаснийРежім", Брехня); // так буде виглядати опис печ.форми для користувача ПараметриРегістраціі .Вставіть ( "Інформація", Найменування); ТабліцаКоманд = ПолучітьТабліцуКоманд (); ДобавітьКоманду (ТабліцаКоманд, Найменування, УказатьНаіменованіеКомандиПечаті (), "ВизовСерверногоМетода", Істина, "ПечатьMXL"); ПараметриРегістраціі .Вставіть ( "Команди", ТабліцаКоманд); Повернення ПараметриРегістраціі; КонецФункціі Функція ПолучітьТабліцуКоманд () Команди = Новий ТабліцаЗначеній; // як буде виглядати опис печ.форми для користувача Команди Колонка Додамо ( "Подання", Новий ОпісаніеТіпов ( "Рядок")); // ім'я макета печ.форми Команди Колонка Додамо ( "Ідентифікатор", Новий ОпісаніеТіпов ( "Рядок")); // ВизовСерверногоМетода Команди Колонка Додамо ( "Використання", Новий ОпісаніеТіпов ( "Рядок")); Команди Колонка Додамо ( "ПоказиватьОповещеніе", Новий ОпісаніеТіпов ( "Булево")); Команди Колонка Додамо ( "Модифікатор", Новий ОпісаніеТіпов ( "Рядок")); Повернення Команди; КонецФункціі Функція УказатьНаіменованіеВнешнейПечатнойФорми () Найменування = ЕтотОб'ект .Метаданние () Представлення (); Повернення Найменування; КонецФункціі Функція УказатьНаіменованіеКомандиПечаті () Найменування = ЕтотОб'ект .Метаданние () .ПолноеІмя (); Повернення Найменування; КонецФункціі Функція ПолучітьМетаданниеДокументаПечаті () ПолноеІмя = Документ .Метаданние () .ПолноеІмя (); Повернення ПолноеІмя; КонецФункціі Функція ДобавітьКоманду (ТабліцаКоманд, Подання, Ідентифікатор, Використання, ПоказиватьОповещеніе = Брехня, Модифікатор = "") НоваяКоманда = ТабліцаКоманд Додамо (); НоваяКоманда. Подання = подання; НоваяКоманда. Ідентифікатор = Ідентифікатор; НоваяКоманда. Використання = Використання; НоваяКоманда. ПоказиватьОповещеніе = ПоказиватьОповещеніе; НоваяКоманда. Модифікатор = Модифікатор; КонецФункціі

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

Процедура Друк (МассівОб'ектов, КоллекціяПечатнихФорм, Об'ектиПечаті, ПараметриВивода) Експорт КонецПроцедури
  • МассівОб'ектов - масив містить посилання на друковані документи або довідники (аналог СсилкаНаОб'ект в звичайному додатку);
  • КоллекціяПечатнихФорм - таблиця значень містить сформовані табличні документи;
  • Об'ектиПечаті - строковою параметр, в якому передаються імена макетів друкованих форм перераховані через кому;
  • ПараметриВивода - параметри виведення табличних документів на друк.

У процедурі Друк нам слід сформувати табличний документ з даними нашої друкованої форми і додати його в Колекцію друкованих форм. Для заповнення табличного документа створимо в модулі об'єкта серверну функцію ПечатьФорми, передамо в параметр масив з посиланнями на друковані документи (МассівОб'ектов).

Функція ПечатьФорми (МассівОб'ектов) КонецФункціі

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

ТабДок = новий ТаблічнийДокумент; Макет = ПолучітьМакет ( "Макет"); ОбластьШапкі = Макет .ПолучітьОбласть ( "Шапка"); ОбластьДанние = Макет .ПолучітьОбласть ( "Дані"); ОбластьПодвал = Макет .ПолучітьОбласть ( "Підвал");

Для того щоб отримати рядки табличній частини Товари всіх документів, що друкуються використовуємо запит.

Запит = новий запит; Запит .УстановітьПараметр ( "МассівОб'ектов", МассівОб'ектов); Запит .Текст = "ВИБРАТИ | РеалізаціяТоваровУслугТовари.Номенклатура, | РеалізаціяТоваровУслугТовари.Сумма, | РеалізаціяТоваровУслугТовари.Цена, | РеалізаціяТоваровУслугТовари.Колічество, | РеалізаціяТоваровУслугТовари.Ссилка | З | Документ.РеалізаціяТоваровУслуг.Товари ЯК РеалізаціяТоваровУслугТовари | ДЕ | РеалізаціяТоваровУслугТовари.Ссилка В (& МассівОб'ектов) ";

У параметр запиту передаємо МассівОб'ектов, що б вказати в умови ДЕ, що нам потрібні дані тільки тих документів з яких виводимо друковану форму. Щоб отримати вибірку запиту, спочатку виконуємо його, а потім вивантажуємо.

ОбщаяВиборка = Запит .Виполніть () .Вигрузіть ();

Тепер за допомогою циклу обійдемо всі посилання з масиву об'єктів і в одному табличному документі сформуємо друковані форми для всіх обраних документів.

Для Кожного СсилкаНаОб'ект з МассівОб'ектов Цикл КонецЦікла;

В даному циклі почнемо формування друкованих форм кожного з документів.

Заповнимо параметри шапки і виведемо її в табличний документ.

ОбластьШапкі .Параметри .ТекстЗаголовка = "Друкована форма" + СсилкаНаОб'ект .Номер; ОбластьШапкі .Параметри .Організація = СсилкаНаОб'ект .Організація; ТабДок .Вивесті (ОбластьШапкі);

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

Відбір = Новий Структура; Відбір .Вставіть ( "Посилання", СсилкаНаОб'ект);

Тепер відберемо потрібні рядки використовуючи метод НайтіСтрокі (<Структура відбору>) і отримаємо вибірку по документу.

Вибірка = ОбщаяВиборка .НайтіСтрокі (Відбір);

Далі в циклі заповнюємо параметри області Дані для кожного рядка вибірки документа і виводимо їх в табличний документ. Також в циклі вважаємо підсумкові значення кількості і суми. Заповнювати кожен параметр окремо ми не будемо, а використовуємо процедуру ЗаполнітьЗначеніяСвойств ((<Приймач »,« Джерело>) з глобального контексту, вона копіює значення властивостей <Джерела> в якості <Приймача>. Зіставлення проводиться по іменах властивостей. Детальніше про це можна прочитати в синтаксис-помічника 1С Підприємство 8.

ІтогоСумма = 0; ІтогоКолічество = 0; Для Кожного Стор з Вибірка Цикл ЗаполнітьЗначеніяСвойств (ОбластьДанние .Параметри, Стор); ІтогоСумма = ІтогоСумма + Стор .Сумма; ІтогоКолічество = ІтогоКолічество + Стор .Кількість; ТабДок .Вивесті (ОбластьДанние); КонецЦікла;

Заповнимо і виведемо область Підвал.

ОбластьПодвал .Параметри .ІтогоКолічество = ІтогоКолічество; ОбластьПодвал .Параметри .ІтогоСумма = ІтогоСумма; ТабДок .Вивесті (ОбластьПодвал);

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

ТабДок .ВивестіГорізонтальнийРазделітельСтраніц ();

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

Повернення ТабДок;

Код функції ПечатьФорми цілком:

Функція ПечатьФорми (МассівОб'ектов) Експорт ТабДок = новий ТаблічнийДокумент; Макет = ПолучітьМакет ( "Макет"); ОбластьШапкі = Макет .ПолучітьОбласть ( "Шапка"); ОбластьДанние = Макет .ПолучітьОбласть ( "Дані"); ОбластьПодвал = Макет .ПолучітьОбласть ( "Підвал"); Запит = новий запит; Запит .УстановітьПараметр ( "МассівОб'ектов", МассівОб'ектов); Запит .Текст = "ВИБРАТИ | РеалізаціяТоваровУслугТовари.Номенклатура, | РеалізаціяТоваровУслугТовари.Сумма, | РеалізаціяТоваровУслугТовари.Цена, | РеалізаціяТоваровУслугТовари.Колічество, | РеалізаціяТоваровУслугТовари.Ссилка | З | Документ.РеалізаціяТоваровУслуг.Товари ЯК РеалізаціяТоваровУслугТовари | ДЕ | РеалізаціяТоваровУслугТовари.Ссилка В (& МассівОб'ектов) "; ОбщаяВиборка = Запит .Виполніть () .Вигрузіть (); Для Кожного СсилкаНаОб'ект з МассівОб'ектов Цикл ОбластьШапкі .Параметри .ТекстЗаголовка = "Друкована форма" + СсилкаНаОб'ект .Номер; ОбластьШапкі .Параметри .Організація = СсилкаНаОб'ект .Організація; ТабДок .Вивесті (ОбластьШапкі); Відбір = Новий Структура; Відбір .Вставіть ( "Посилання", СсилкаНаОб'ект); Вибірка = ОбщаяВиборка .НайтіСтрокі (Відбір); ІтогоСумма = 0; ІтогоКолічество = 0; Для Кожного Стор з Вибірка Цикл ЗаполнітьЗначеніяСвойств (ОбластьДанние .Параметри, Стор); ІтогоСумма = ІтогоСумма + Стор .Сумма; ІтогоКолічество = ІтогоКолічество + Стор .Кількість; ТабДок .Вивесті (ОбластьДанние); КонецЦікла; ОбластьПодвал .Параметри .ІтогоКолічество = ІтогоКолічество; ОбластьПодвал .Параметри .ІтогоСумма = ІтогоСумма; ТабДок .Вивесті (ОбластьПодвал); ТабДок .ВивестіГорізонтальнийРазделітельСтраніц (); КонецЦікла; повернення ТабДок; КонецФункціі

Тепер залишилося додати сформований табличний документ Колекцію друкованих форм. Для додавання табличного документа в колекцію можна скористатися типовою процедурою ВивестіТаблічнийДокументВКоллекцію з модуля УправленіеПечатью (процедура є і в Бухгалтерії 3.0 і в Управління торгівлею 11). У параметри цієї процедури необхідно передати:

  • КоллекціяПечатнихФорм - таблиця значень містить сформовані табличні документи ;;
  • ІмяМакета - найменування команди друку;
  • СінонімМакета - найменування друкованої форми;
  • ТаблічнийДокумент - заповнений табличний документ.

Для параметрів ІмяМакета і СінонімМакета використовуємо вже створені нами процедури, які використовувалися для заповнення відомостей про зовнішню обробки. Таким чином процедура Друк буде виглядати наступним чином:

Процедура Друк (МассівОб'ектов, КоллекціяПечатнихФорм, Об'ектиПечаті, ПараметриВивода) Експорт УправленіеПечатью .ВивестіТаблічнийДокументВКоллекцію (КоллекціяПечатнихФорм, УказатьНаіменованіеКомандиПечаті (), УказатьНаіменованіеВнешнейПечатнойФорми (), ПечатьФорми (МассівОб'ектов)); КонецПроцедури

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

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

Далі буде…

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

Провайдеры:
  • 08.09.2015

    Batyevka.NET предоставляет услуги доступа к сети Интернет на территории Соломенского района г. Киева.Наша миссия —... 
    Читать полностью

  • 08.09.2015
    IPNET

    Компания IPNET — это крупнейший оператор и технологический лидер на рынке телекоммуникаций Киева. Мы предоставляем... 
    Читать полностью

  • 08.09.2015
    Boryspil.Net

    Интернет-провайдер «Boryspil.net» начал свою работу в 2008 году и на данный момент является одним из крупнейших поставщиков... 
    Читать полностью

  • 08.09.2015
    4OKNET

    Наша компания работает в сфере телекоммуникационных услуг, а именно — предоставлении доступа в сеть интернет.Уже... 
    Читать полностью

  • 08.09.2015
    Телегруп

    ДП «Телегруп-Украина» – IT-компания с 15-летним опытом работы на рынке телекоммуникационных услуг, а также официальный... 
    Читать полностью

  • 08.09.2015
    Софтлинк

    Высокая скоростьМы являемся участником Украинского центра обмена трафиком (UA — IX) с включением 10 Гбит / сек... 
    Читать полностью