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

Створення зовнішнього звіту в 1С 8

Розглянемо створення зовнішнього звіту в 1с 8 без використання системи компоновки даних. Для створення зовнішнього звіту будемо використовувати конфігурацію Бухгалтерія 2.0, вихідні дані: "Написати звіт по 62 рахунку бухгалтерського обліку в який будуть виводиться обороти за вказаний період в розрізі контрагентів та договорів контрагентів.

1. Створення звіту

В першу чергу створимо файл зовнішнього звіту, для цього зайдемо в 1с 8 в режимі Конфігуратор, перейдемо в меню Файл -> Новий, або натиснемо на піктограму Новий документ.

В першу чергу створимо файл зовнішнього звіту, для цього зайдемо в 1с 8 в режимі Конфігуратор, перейдемо в меню Файл -> Новий, або натиснемо на піктограму Новий документ

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

Також додамо два реквізити: НачалоПеріода і КонецПеріода типу Дата, вони знадобляться нам для обмеження тимчасового інтервалу вибірки даних при формуванні звіту

2. Створення макета зовнішнього звіту

Для формування звіту в 1с 8 потрібен макет, це шаблон для виведення даних в якому задаються всі необхідні параметри, малюються таблиці і т.д. Додамо новий макет, для цього в дереві метаданих звіту виберемо пункт Макети і натиснемо кнопку Додати, при створенні виберемо для макета тип Табличний документ.

У нашому макеті буде 4 області:

  • Шапка - в цю область ми будемо виводити найменування звіту, період за який він сформований і шапку таблиці;
  • ДанниеКонтрагент - в цю область ми будемо виводить в таблицю дані по контрагенту;
  • ДанниеДоговорКонтрагента - в цю область ми будемо виводить в таблицю дані по договору контрагента;
  • Підвал - в цю область ми будемо виводити підсумкові значення впродовж усього звіту для полів Прихід і Витрата.

Приступимо до створення областей макета. Для того що б створити область в макеті виділіть потрібну кількість рядків і натисніть Меню Таблиця -> Імена -> Призначити ім'я (Або Ctrl + Shift + N). В область Шапка напишемо найменування звіту: Обороти 62 рахунку, намалюємо за допомогою інструменту Межі шапку звіту, а так само поставимо параметри НачалоПеріода і КонецПеріода. За допомогою параметрів у звіт можна виводити потрібні дані, ми будемо займатися ці на наступному етапі розробки, а саме при написанні програмного коду звіту. Що б створити параметр в макеті виберіть потрібну комірку, напишіть в ній найменування параметра (без пробілів), клацніть по ній правою кнопкою миші, в меню, виберіть пункт Властивості. У властивостях осередку на закладці Макет оберіть заповнення Параметр.

Після цього, в осередку ім'я параметра буде укладено в кутові дужки ( "<>"). В результаті область Шапка повинна виглядати так:

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

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

В області Підвал створимо параметри для підсумків по приходу і витраті.

У підсумку ми повинні отримати такий макет:

3. Створення форми звіту

Для виведення даних, завдання періоду формування і кнопки Сформувати нашому звіту потрібно форма. Для створення форми знайдіть в дереві метаданих зовнішнього звіту пункт Форми і натисніть кнопку Додати. На першій сторінці конструктора форми не потрібно вносити ніяких змін, слід просто натиснути кнопку Далі.

На першій сторінці конструктора форми не потрібно вносити ніяких змін, слід просто натиснути кнопку Далі

На наступній сторінці конструктора виберемо обидва доступних реквізиту (НачалоПеріода, КонецПеріода) для розташування на формі.

На наступній сторінці конструктора виберемо обидва доступних реквізиту (НачалоПеріода, КонецПеріода) для розташування на формі

В результаті у нас вийде ось така форма:

В результаті у нас вийде ось така форма:

Але в такому вигляді вона нас не влаштовує, внесемо в неї деякі зміни:

  • Перетягнемо кнопку Сформувати з нижньої панелі звіту на верхню (так буде зручніше для користувача);
  • Растянем форму по вертикалі і горизонталі;
  • Розташуємо поля НачалоПеріода і КонецПеріода по горизонталі;
  • Додамо на форму елемент управління Поле табличного документа (в нього і буде виводитися наш звіт), задамо йому ім'я ТабДок;
  • Створимо кнопку вибору періоду (при її натисканні буде виводитися діалог зі зручним вибором потрібного періоду). Програмний код для неї ми писати поки не будемо, тому просто розташуємо кнопку поруч з полями періоду.

У підсумку наша форма буде мати такий вигляд:

4. Програмування

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

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

Переключаться між формою і її модулем можна за допомогою закладок внизу форми

Переключаться між формою і її модулем можна за допомогою закладок внизу форми

Для виклику форми вибору періоду скористаємося типовий процедурою Бухгалтерії 2.0 із загального модуля РаботаСДіалогамі - ОбработчікНастройкаПеріодаНажатіе, в неї в якості параметрів потрібно передати реквізити звіту НачалоПеріода і КонецПеріода.

Процедура Кнопка1Нажатіе (Елемент) РаботаСДіалогамі.ОбработчікНастройкаПеріодаНажатіе (НачалоПеріода, КонецПеріода); КонецПроцедури

Тепер перейдемо до написання коду, який буде формувати і виводити наш звіт. У модулі форми вже є процедура КнопкаСформіроватьНажатіе, яка буде виконуватися при натисканні кнопки Сформувати, там то ми і будемо писати наш код. Почнемо з ініціалізації потрібних змінних. В першу чергу створимо змінну для поля табличного документа в яке ми будемо виводити дані, це не обов'язково, просто запис звернень до нього стане коротшим, а значить програмний код буде більш зрозумілий для читання.

ТабДок = ЕлементиФорми.ТабДок;

Отримаємо макет зовнішнього звіту скориставшись функцією ПолучітьМакет (<ІмяМакета>), в параметр йому передамо ім'я макета, і якщо такий макет існує, то функція його знайде.

Макет = ПолучітьМакет ( "Макет");

Після того як макет отримано, створимо змінні для кожної з його областей, скористаємося для цього методом макета ПолучітьОбласть (<ІмяОбласті>).

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

Очистимо поле табличного документа. Це потрібно для того що б при кожному новому формуванні звіту старі дані віддалялися.

ТабДок.Очістіть ();

Тепер, коли ініціалізація змінних закінчена, перейдемо до почергового заповнення і висновку областей макета. Почнемо з шапки. Якщо ви пам'ятаєте ми створили в цій області два параметра НачалоПеріода і КонецПеріода, передамо туди значення періоду формування звіту, для цього воспользуемcя властивістю Параметри області макета.

ОбластьШапка.Параметри.НачалоПеріода = НачалоПеріода; ОбластьШапка.Параметри.КонецПеріода = КонецПеріода;

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

ТабДок.Вивесті (ОбластьШапка);

Далі займемося написанням запиту до бази даних, за допомогою якого візьмемо обороти по рахунку 62 з регістра бухгалтерії Госпрозрахунковий. Визначимо змінну, в якій буде знаходитися наш запит.

Запит = новий запит;

Перед тим як приступити до написання тексту запиту передамо в нього потрібні параметри. Так як ми пишемо запит за рахунком 62 бухгалтерського обліку, то в першу чергу створимо параметр для нього

Запрос.УстановітьПараметр ( "Счет62", ПланиСчетов.Хозрасчетний.НайтіПоКоду ( "62"));

Так само в запит необхідно передати період формування звіту. Не забуваємо, що для періоду формування у нас є спеціальні реквізити звіту, їх і передаємо в якості параметрів.

Запрос.УстановітьПараметр ( "НачалоПеріода", НачалоПеріода); Запрос.УстановітьПараметр ( "КонецПеріода", КонецПеріода);

Приступимо до написання тексту запиту, робити це будемо за допомогою конструктора запитів. У багатьох навчальних посібниках пишуть, що потрібно вміти писати запит і вручну і використовуючи конструктор, але на практиці це не так. У завданнях, які постійно зустрічаються перед програмістом 1С, пріоритетом є швидке і якісне написання коду, а при складанні запиту до бази в ручну цього досягти практично неможливо, ви будете витрачати купу дорогоцінного часу на те, що б правильно відтворити всі конструкції запиту, знайти помилки які ви зробили під час написання і т.п .. Тому не витрачайте даремно час на спроби писати запити вручну, а користуйтеся конструктором запитом. Він заощадить ваш час і дозволить без особливих зусиль писати складні запити. Що б почати писати текст запиту напишемо в коді:

Запрос.Текст = "";

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

Відкриється вікно конструктора запиту

Тепер необхідно вибрати потрібну нам таблицю бази даних 1С 8. Нам необхідна віртуальна таблиця Обороти регістра бухгалтерії Госпрозрахунковий. Знайдемо її в лівій частині вікна конструктора

Знайдемо її в лівій частині вікна конструктора

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

Відкриємо вікно параметрів віртуальної таблиці

Заповнимо параметри, періоду які ми передали в запит. Що б в тексті запиту використовувати параметр слід перед його ім'ям писати символ амперсанда (&)

Що б в тексті запиту використовувати параметр слід перед його ім'ям писати символ амперсанда (&)

Залишилося заповнити умова по рахунку бух. обліку. Для цього знайдемо в параметрах віртуальної таблиці рядок УсловіеСчета і напишемо там

Рахунок У ІЄРАРХІЇ (& Счет62)

Також можна скористатися конструктором упорядкування умов натиснувши на кнопку з трьома крапками.

Також можна скористатися конструктором упорядкування умов натиснувши на кнопку з трьома крапками

Більше ніяких умов на віртуальну таблицю накладати не потрібно, тому натиснемо кнопку ОК у вікні параметрів віртуальної таблиці. Далі необхідно вибрати потрібні нам поля з таблиці Хозрасчетной.Обороти (а саме: Контрагент, Договір контрагента, Прихід і Витрата). Що б подивитися список полів доступних в обраній нами таблиці натисне символ "+" біля її назви. Після цього перетягнемо потрібні поля в найправішу область конструктора запитів, яка так і називається: Поля. Якщо відкрити план рахунків бухгалтерського обліку, то ми побачимо, що для рахунку 62 аналітика по Контрагенту - це Субконто1, а по ДоговоруКонтрагента - Субконто2.

Якщо відкрити план рахунків бухгалтерського обліку, то ми побачимо, що для рахунку 62 аналітика по Контрагенту - це Субконто1, а по ДоговоруКонтрагента - Субконто2

Тому з полів віртуальної таблиці вибираємо Субконто1 і Субконто2. Так як нам необхідний прихід і витрата по сумі, то вибираємо також поля СуммаОборотДт і СуммаОборотКт

Так як нам необхідний прихід і витрата по сумі, то вибираємо також поля СуммаОборотДт і СуммаОборотКт

Заповнимо псевдоніми обраних нами полів, для цього перейдемо на закладку Об'єднання / Псевдоніми і задамо потрібні імена полів.

Заповнимо псевдоніми обраних нами полів, для цього перейдемо на закладку Об'єднання / Псевдоніми і задамо потрібні імена полів

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

У группіровочние поля перетягнемо послідовно Контрагент і ДоговорКонтрагента, а в підсумкові Прихід і Витрата

На цьому робота в конструкторі запиту завершена, натискаємо кнопку ОК і бачимо, що текст нашого запиту з'явився в програмному коді.

Запрос.Текст = "ВИБРАТИ | ХозрасчетнийОбороти.Субконто1 ЯК Контрагент, | ХозрасчетнийОбороти.Субконто2 ЯК ДоговорКонтрагента, | ХозрасчетнийОбороти.СуммаОборотДт ЯК Прихід, | ХозрасчетнийОбороти.СуммаОборотКт ЯК Витрата | З | РегістрБухгалтеріі.Хозрасчетний.Обороти (& НачалоПеріода, & КонецПеріода,, Рахунок У ІЄРАРХІЇ (& Счет62),,,,) ЯК ХозрасчетнийОбороти | ПІДСУМКИ | СУМА (Прихід), | СУМА (Витрата) | ПО | Контрагент, | ДоговорКонтрагента ";

Після того як ми закінчили написання запиту, приступимо до заповнення областей ДанниеКонтрагент, ДанниеДоговорКонтрагент і Підвал. Всі ці області ми заповнимо даними отриманими при виконанні запиту. Так як наш запит містить угруповання (Контрагент і ДоговорКонтрагента) виберемо з нього дані в такий спосіб:

ВиборкаКонтрагент = Запрос.Виполніть (). Вибрати (ОбходРезультатаЗапроса.ПоГруппіровкам);

Таким чином ми отримаємо записи з підсумками по всім контрагентам.

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

ІтогоПріход = 0; ІтогоРасход = 0;

Для того щоб дані звіту виводилися з ієрархією (і розворотами по "+") задамо початок автогруппіровкі рядків табличного документа:

ТабДок.НачатьАвтогруппіровкуСтрок ();

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

Поки ВиборкаКонтрагент.Следующій () Цикл КонецЦікла;

На початку циклу обнулив параметри Прихід і Витрата області ДанниеКонтрагент. Для чого це потрібно? Уявімо ситуацію, що по контрагенту Дядя Вася, прихід 10, а витрата 5, а для за ним наступного контрагента Дядя Петя немає ні приходу ні витрати, в такому випадку якщо ми не обнулив параметри Прихід і Витрата, то по в рядку по контрагенту Дядя Петя потрапить прихід 5 і витрату 10.

ОбластьДанниеКонтрагент.Параметри.Пріход = 0; ОбластьДанниеКонтрагент.Параметри.Расход = 0;

Після цього заповнюємо область ДанниеКонтрагент даними елемента вибірки

ЗаполнітьЗначеніяСвойств (ОбластьДанниеКонтрагент.Параметри, ВиборкаКонтрагент);

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

ТабДок.Вивесті (ОбластьДанниеКонтрагент, 1);

Тепер для цього контрагента зробимо вибірку по його договорами.

ВиборкаДоговорКонтрагента = ВиборкаКонтрагент.Вибрать (ОбходРезультатаЗапроса.ПоГруппіровкам);

Обхід будемо здійснювати за допомогою циклу Поки.

Поки ВиборкаДоговорКонтрагента.Следующій () Цикл КонецЦікла;

У циклі за договорами контрагентів обнулив параметри Прихід і Витрата, заповнимо область ДанниеДоговор з вибірки і виведемо її в табличний документ на другий рівень записів.

ОбластьДанниеДоговор.Параметри.Пріход = 0; ОбластьДанниеДоговор.Параметри.Расход = 0; ЗаполнітьЗначеніяСвойств (ОбластьДанниеДоговор.Параметри, ВиборкаДоговорКонтрагента); ТабДок.Вивесті (ОбластьДанниеДоговор, 2);

Також в цьому циклі до змінних розрахунку підсумкових значень по приходу і витраті додамо поточні значення.

ІтогоПріход = ІтогоПріход + ВиборкаДоговорКонтрагента.Пріход; ІтогоРасход = ІтогоРасход + ВиборкаДоговорКонтрагента.Расход;

На цьому висновок даних в області ДанниеКонтрагент, ДанниеДоговорКонтрагент завершено, залишилося завершити автогруппіровку рядків табличного документа.

ТабДок.ЗакончітьАвтогруппіровкуСтрок ();

Повністю цикли відповідають за виведення даних в області ДанниеКонтрагент і ДанниеДоговорКонтрагент виглядають так:

ТабДок.НачатьАвтогруппіровкуСтрок (); Поки ВиборкаКонтрагент.Следующій () Цикл ОбластьДанниеКонтрагент.Параметри.Пріход = 0; ОбластьДанниеКонтрагент.Параметри.Расход = 0; ЗаполнітьЗначеніяСвойств (ОбластьДанниеКонтрагент.Параметри, ВиборкаКонтрагент); ТабДок.Вивесті (ОбластьДанниеКонтрагент, 1); ВиборкаДоговорКонтрагента = ВиборкаКонтрагент.Вибрать (ОбходРезультатаЗапроса.ПоГруппіровкам); Поки ВиборкаДоговорКонтрагента.Следующій () Цикл ОбластьДанниеДоговор.Параметри.Пріход = 0; ОбластьДанниеДоговор.Параметри.Расход = 0; ЗаполнітьЗначеніяСвойств (ОбластьДанниеДоговор.Параметри, ВиборкаДоговорКонтрагента); ТабДок.Вивесті (ОбластьДанниеДоговор, 2); ІтогоПріход = ІтогоПріход + ВиборкаДоговорКонтрагента.Пріход; ІтогоРасход = ІтогоРасход + ВиборкаДоговорКонтрагента.Расход; КонецЦікла; КонецЦікла; ТабДок.ЗакончітьАвтогруппіровкуСтрок ();

Залишилося вивести підсумкові дані в область Підвал і вивести саму область в табличний документ.

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

На цьому процес написання зовнішнього звіту для 1С 8 без використання СКД завершено. Тепер його можна сформувати в режимі 1С: Підприємство 8 і додати в довідник ВнешніеОбработкі Файл звіту розглянутого в статті ви можете завантажити за засланні .

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

Для чого це потрібно?
Провайдеры:
  • 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 Гбит / сек... 
    Читать полностью