Макросы: как создавать и использовать для обработки отчетов из 1С

Для начала немного о терминологии. 

Макрос — это код, написанный на встроенном в Excel языке VBA (Visual Basic for Application). Макросы могут создаваться как вручную, так и записываться автоматически с помощью так называемого макрорекодера.

Макрорекодер — это инструмент в Excel, который пошагово записывает все что вы выполняете в Excel и преобразует это в код на языке VBA. Макрорекодер создает очень подробный код (как мы увидим позже), который вы сможете при необходимости отредактировать в дальнейшем.

Записанный макрос можно будет запускать неограниченное количество раз и Excel повторит все записанные шаги. Это означает, что даже если вы ничего не знаете о VBA, вы можете автоматизировать некоторые задачи, просто записав свои шаги и затем повторно использовать их позже.

Теперь давайте погрузимся и посмотрим, как записать макрос в Excel.

Отображение вкладки «Разработчик» в ленте меню

Перед тем как записывать макрос, нужно добавить на ленту меню Excel вкладку «Разработчик». Для этого выполните следующие шаги:

  1. Щелкните правой кнопкой мыши по любой из существующих вкладок на ленте и нажмите «Настроить ленту». Он откроет диалоговое окно «Параметры Excel».Макросы: как создавать и использовать для обработки отчетов из 1С
  2. В диалоговом окне «Параметры Excel» у вас будут параметры «Настроить ленту». Справа на панели «Основные вкладки» установите флажок «Разработчик».Макросы: как создавать и использовать для обработки отчетов из 1С
  3. Нажмите «ОК».

В результате на ленте меню появится вкладка «Разработчик»

Макросы: как создавать и использовать для обработки отчетов из 1С

Запись макроса в Excel

Теперь давайте запишем очень простой макрос, который выбирает ячейку и вводит в нее текст, например «Excel».

Вот шаги для записи такого макроса:

  1. Перейдите на вкладку «Разработчик».
  2. В группе «Код» нажмите кнопку «Запись макроса». Откроется одноименное диалоговое окно. Макросы: как создавать и использовать для обработки отчетов из 1С
  3. В диалоговом окне «Запись макроса» введите имя для своего макроса, например «ВводТекста». Есть несколько условий именования, которые необходимо соблюдать при назначении макроса. Например, вы не можете использовать пробелы между ними. Обычно я предпочитаю сохранять имена макросов как одно слово, с разными частями с заглавным первым алфавитом. Вы также можете использовать подчеркивание для разделения двух слов — например, «Ввод_текста». Макросы: как создавать и использовать для обработки отчетов из 1С
  4. Если вы хотите, то можете задать сочетание клавиш. В этом случае мы будем использовать ярлык Ctrl + Shift + N. Помните, что сочетание, которое вы указываете, будет отменять любые существующие горячие клавиши в вашей книге. Например, если вы назначили сочетание Ctrl + S, вы не сможете использовать это для сохранения рабочей книги (вместо этого, каждый раз, когда вы его используете, он выполняет макрос). Макросы: как создавать и использовать для обработки отчетов из 1С
  5. В поле «Сохранить в» убедитесь, что выбрана опция «Эта книга». Этот шаг гарантирует, что макрос является частью рабочей книги. Он будет там, когда вы сохраните его и снова откроете, или даже если вы поделитесь файлом с кем-то. Макросы: как создавать и использовать для обработки отчетов из 1С
  6. Введите описание при необходимости. Обычно я этого не делаю, но если у вас много макросов, лучше указать, чтобы в будущем не забыть что делает макрос.
  7. Нажмите «ОК». Как только вы нажмете OK, Excel начнет записывать ваши действия. Вы можете увидеть кнопку «Остановить запись» на вкладке «Разработчик», которая указывает, что выполняется запить макроса.
  8. Выберите ячейку A2.
  9. Введите текст «Excel» (или вы можете использовать свое имя).
  10. Нажмите клавишу Enter. Вы попадете на ячейку A3.
  11. Нажмите кнопку «Остановить запись» на вкладке «Разработчик». Макросы: как создавать и использовать для обработки отчетов из 1С

Поздравляем! Вы только что записали свой первый макрос в Excel. Хотя макрос не делает ничего полезного, но он поможет нам понять как работает макрорекордер в Excel. 

Теперь давайте рассмотрим код который записал макрорекодер. Выполните следующие действия, чтобы открыть редактор кода:

  1. Удалите текст в ячейке A2. Это нужно, чтобы проверить будет ли макрос вставлять текст в ячейку A2 или нет.
  2. Выберите любую ячейку — кроме A2. Это нужно проверить, выбирает ли макрос ячейку A2 или нет.
  3. Перейдите на вкладку «Разработчик».
  4. В группе «Код» нажмите кнопку «Макросы».
  5. В диалоговом окне «Макрос» щелкните макрос «ВводТекста».
  6. Нажмите кнопку «Выполнить». Макросы: как создавать и использовать для обработки отчетов из 1С

Вы увидите, что как только вы нажмете кнопку «Выполнить», текст «Excel» будет вставлен в ячейку A2 и выбрана ячейка A3. Это происходит за миллисекунды. Но на самом деле макрос последовательно выполнил записанные действия.

Примечание. Вы также можете запустить макрос с помощью сочетания клавиш Ctrl + Shift + N (удерживайте клавиши Ctrl и Shift, а затем нажмите клавишу N). Это тот же самый ярлык, который мы назначили макросу при его записи.

Что записывает макрос?

Теперь перейдем к редактору кода и посмотрим что у нас получилось.

Вот шаги по открытию редактора VB в Excel:

  1. Перейдите на вкладку «Разработчик».
  2. В группе «Код» нажмите кнопку «Visual Basic».  

Вы также можете использовать комбинацию клавиш Alt + F11 и перейти в редактор кода VBA.

Рассмотрим сам редактор кода. Далее коротко опишем интерфейс редактора.

Макросы: как создавать и использовать для обработки отчетов из 1С

  • Панель меню: содержит команды, которые можно использовать во время работы с редактором VB.
  • Панель инструментов — похожа на панель быстрого доступа в Excel. Вы можете добавить к ней дополнительные инструменты, которыми часто пользуетесь.
  • Окно проектов (Project Explorer) — здесь Excel перечисляет все книги и все объекты в каждой книге. Например, если у нас есть книга с 3 рабочими листами, она появится в Project Explorer. Здесь есть несколько дополнительных объектов, таких как модули, пользовательские формы и модули классов.
  • Окно кода — собственно сам код VBA размещается в этом окне. Для каждого объекта, указанного в проводнике проекта, есть окно кода, например, рабочие листы, книги, модули и т. д. В этом уроке мы увидим, что записанный макрос находится в окне кода модуля.
  • Окно свойств — вы можете увидеть свойства каждого объекта в этом окне. Я часто использую это окно для обозначения объектов или изменения их свойств. 
  • Immediate Window (окно предпросмотра) — На начальном этапе оно вам не пригодится. Оно полезно, когда вы хотите протестировать шаги или во время отладки. Он по умолчанию не отображается, и вы можете его отобразить, щелкнув вкладку «View» и выбрав опцию «Immediate Window».

Когда мы записали макрос «ВводТекста», в редакторе VB произошли следующие вещи:

  • Был добавлен новый модуль.
  • Макрос был записан с именем, которое мы указали — «ВводТекста»
  • В окне кода добавлена новая процедура.
  • Поэтому, если вы дважды щелкните по модулю (в нашем случае модуль 1), появится окно кода, как показано ниже.
  • Вот код, который записан макрорекодером:

Sub ВводТекста()
'
' ВводТекста Макрос
'

'
    Range(«A2»).Select
    ActiveCell.FormulaR1C1 = «Excel»
    Range(«A3»).Select
End Sub

В VBA, любая строка , которая следует за ' (знак апострофа) не выполняется. Это комментарий, который предназначен только для информационных целей. Если вы удалите первые пять строк этого кода, макрос по-прежнему будет работать.

Теперь давайте пробежим по каждой строке кода и опишем что и зачем. 

Код начинается с Sub, за которым следует имя макроса и пустые круглые скобки. Sub — сокращение для подпрограммы. Каждая подпрограмма (также называемая процедурой) в VBA начинается с Sub и заканчивается End Sub.

  • Range(«A2»).Select — эта строка выбирает ячейку A2.
  • ActiveCell.FormulaR1C1 = «Excel» — эта строка вводит текст «Excel» в активной ячейке. Поскольку мы выбрали ячейку A2 в качестве первого шага, она становится нашей активной ячейкой.
  • Range(«A3»).Select — выбор ячейки A3. Это происходит, когда мы нажимаем клавишу Enter после ввода текста, результатом которого является выбор ячейки A3.

Надеюсь, что у вас есть некоторое базовое понимание того, как записывать макрос в Excel.

Обращаем внимание, что код, записанный через макрорекордер, как правило, не является эффективным и оптимизированным кодом. Макрорекордер часто добавляет дополнительные ненужные действия. Но это не значит, что не нужно пользоваться макрорекодером. Для тех, кто только изучает VBA , макрорекордер может быть отличным способом проанализировать и понять как все работает в VBA.

Абсолютная и относительная запись макроса

Вы уже знаете про абсолютные и относительные ссылки в Excel? Если вы используете абсолютную ссылку для записи макроса, код VBA всегда будет ссылаться на те же ячейки, которые вы использовали.

 Например, если вы выберете ячейку A2 и введете текст «Excel», то каждый раз — независимо от того, где вы находитесь на листе и независимо от того, какая ячейка выбрана, ваш код будет вводить текст «Excel» в ячейку A2.

Если вы используете параметр относительной ссылки для записи макроса, VBA не будет привязываться к конкретному адресу ячейки. В этом случае программа будет «двигаться» относительно активной ячейки. Например, предположим, что вы уже выбрали ячейку A1, и вы начинаете запись макроса в режиме относительной ссылки.

 Теперь вы выбираете ячейку A2, вводите текст Excel и нажмите клавишу Enter. Теперь, если вы запустите этот макрос, он не вернется в ячейку A2, вместо этого он будет перемещаться относительно активной ячейки. Например, если выбрана ячейка B3, она переместится на B4, запишет текст «Excel» и затем перейдет к ячейке K5.

Теперь давайте запишем макрос в режиме относительных ссылок:

  1. Выберите ячейку A1.
  2. Перейдите на вкладку «Разработчик».
  3. В группе «Код» нажмите кнопку «Относительные ссылки». Он будет подсвечиваться, указывая, что он включен.
  4. Нажмите кнопку «Запись макроса».
  5. В диалоговом окне «Запись макроса» введите имя для своего макроса. Например,  имя «ОтносительныеСсылки».
  6. В опции «Сохранить в» выберите «Эта книга».
  7. Нажмите «ОК».
  8. Выберите ячейку A2.
  9. Введите текст «Excel» (или другой как вам нравится).
  10. Нажмите клавишу Enter. Курсор переместиться в ячейку A3.
  11. Нажмите кнопку «Остановить запись» на вкладке «Разработчик».

Макрос в режиме относительных ссылок будет сохранен.

Теперь сделайте следующее.

  1. Выберите любую ячейку (кроме A1).
  2. Перейдите на вкладку «Разработчик».
  3. В группе «Код» нажмите кнопку «Макросы».
  4. В диалоговом окне «Макрос» кликните на сохраненный макрос «ОтносительныеСсылки».
  5. Нажмите кнопку «Выполнить».

Как вы заметите, макрос записал текст «Excel» не в ячейки A2. Это произошло, потому что вы записали макрос в режиме относительной ссылки. Таким образом, курсор перемещается относительно активной ячейки. Например, если вы сделаете это, когда выбрана ячейка B3, она войдет в текст Excel — ячейка B4 и в конечном итоге выберет ячейку B5.

Вот код, который записал макрорекодер:

Sub ОтносительныеСсылки()
'
' ОтносительныеСсылки Макрос
'

'
    ActiveCell.Offset(1, 0).Range(«A1»).Select
    ActiveCell.FormulaR1C1 = «Excel»
    ActiveCell.Offset(1, 0).Range(«A1»).Select
End Sub

Читайте также:  Подходит срок уплаты и сдачи расчета по экологическому сбору

Обратите внимание, что в коде нет ссылок на ячейки B3 или B4. Макрос использует Activecell для ссылки на текущую ячейку и смещение относительно этой ячейки.

Не обращайте внимание на часть кода Range(«A1»). Это один из тех случаев, когда макрорекодер добавляет ненужный код, который не имеет никакой цели и может быть удален. Без него код будет работать отлично.

Что нельзя сделать с помощью макрорекодера?

Макро-рекордер отлично подходит для вас в Excel и записывает ваши точные шаги, но может вам не подойти, когда вам нужно сделать что-то большее.

  • Вы не можете выполнить код без выбора объекта. Например, если вы хотите, чтобы макрос перешел на следующий рабочий лист и выделил все заполненные ячейки в столбце A, не выходя из текущей рабочей таблицы, макрорекодер не сможет этого сделать. В таких случаях вам нужно вручную редактировать код.
  • Вы не можете создать пользовательскую функцию с помощью макрорекордера. С помощью VBA вы можете создавать пользовательские функции, которые можно использовать на рабочем листе в качестве обычных функций.
  • Вы не можете создавать циклы с помощью макрорекордера. Но можете записать одно действие, а цикл добавить вручную в редакторе кода. 
  • Вы не можете анализировать условия: вы можете проверить условия в коде с помощью макрорекордера. Если вы пишете код VBA вручную, вы можете использовать операторы IF Then Else для анализа условия и запуска кода, если true (или другой код, если false).

Расширение файлов Excel, которые содержат макросы

Когда вы записываете макрос или вручную записываете код VBA в Excel, вам необходимо сохранить файл с расширением файла с поддержкой макросов (.xlsm).

До Excel 2007 был достаточен один формат файла — .xls. Но с 2007 года .xlsx был представлен как стандартное расширение файла. Файлы, сохраненные как .xlsx, не могут содержать в себе макрос.

 Поэтому, если у вас есть файл с расширением .

xlsx, и вы записываете / записываете макрос и сохраняете его, он будет предупреждать вас о сохранении его в формате с поддержкой макросов и покажет вам следующее диалоговое окно:

Если вы выберете «Нет», Excel сохранить файл в формате с поддержкой макросов. Но если вы нажмете «Да», Excel автоматически удалит весь код из вашей книги и сохранит файл как книгу в формате .xlsx. Поэтому, если в вашей книге есть макрос, вам нужно сохранить его в формате .xlsm, чтобы сохранить этот макрос.

Создание макроса и работа с ним

Для обеспечения корректного построения отчетов, содержащих макросы, требуется установить доверие на доступ к объектной модели VBA.

В Microsoft Word 2007 это осуществляется следующей последовательностью действий:

  • нажать кнопку Office в верхнем левом углу, нажать кнопку «Параметры Word»;
  • выбрать закладку «Центр управления безопасностью», нажать кнопку «Параметры центра управления безопасностью»;
  • выбрать закладку «Параметры макросов», в разделе «Параметры макросов для разработчика» установить опцию «Доверять доступ к объектной модели проектов VBA».

В Microsoft Word 2010/2013/2016:

  • выбрать пункт меню «Файл → Параметры…»;
  • в окне «Параметры Word» выбрать закладку «Центр управления безопасностью», нажать кнопку «Параметры центра управления безопасностью»;
  • выбрать закладку «Параметры макросов», в разделе «Параметры макросов для разработчика» установить опцию «Доверять доступ к объектной модели проектов VBA».

Примечание. VBA — Visual Basic for Applications (Visual Basic для приложений) — упрощённая реализация языка программирования Visual Basic, встроенная в линейку продуктов Microsoft Office.

Для того, чтобы создать или просмотреть макрос для отчета формата Word необходимо:

  • открыть отчет в Мастере отчетов;
  • на ленте «Разработчик» в группе «Код» нажать кнопку «Visual Basic» (или сразу нажать Alt+F11). Откроется окно приложения «Microsoft Visual Basic for Application»;
  • В окне «Project – TemplateProject» в дереве открыть узел «TemplateProject — Microsoft Word Objects – ThisDocument»;
  • В правой части окна приложения, где приведен код, будет макрос «ПослеВыполненияОтчета».

Макросы: как создавать и использовать для обработки отчетов из 1СРисунок 1. Вид окна среды VBA при работе с макросом для отчетов формата Word

  • Если макроса там не будет, его можно создать самостоятельно, введя в данном окне строки начала и конца макроса, а между ними — сам текст макроса:
  • Sub ПослеВыполненияОтчета(ob As Variant, app As Variant)
  • End Sub

Внимание! В Word 2007 закладка «Разработчик» по умолчанию скрыта. Чтобы вывести ее на показ необходимо:

  • нажать кнопку Office в верхнем левом углу, нажать кнопку «Параметры Word»;
  • на закладке «Основные» в разделе «Основные параметры работы с Word» установить опцию «Показывать вкладку «Разработчик» на ленте»

Для того, чтобы создать или просмотреть макрос для отчета формата Excel, необходимо:

  • открыть отчет в Мастере отчетов;
  • нажать кнопку «2. Редактировать шаблон»;
  • в MS Excel на ленте «Разработчик» в группе «Код» нажать кнопку «Visual Basic» (или сразу нажать Alt+F11). Откроется окно приложения «Microsoft Visual Basic for Application»;
  • В окне «Project – VBAProject» в дереве открыть узел «VBAProject — Modules – Module1»;
  • В правой части окна приложения, где приведен код, необходимо перейти к макросу «ПослеВыполненияОтчета».

Макросы: как создавать и использовать для обработки отчетов из 1СРисунок 2. Вид окна среды VBA при работе с макросом для отчетов формата Excel

Внимание! В Excel 2007 закладка «Разработчик» по умолчанию скрыта. Чтобы вывести ее на показ необходимо:

  • нажать кнопку Office в верхнем левом углу, нажать кнопку «Параметры Excel»;
  • на закладке «Основные» в разделе «Основные параметры работы с Excel» установить опцию «Показывать вкладку «Разработчик» на ленте»

Любой отчет изначально содержит следующий макрос:

Sub ПослеВыполненияОтчета(ob As Variant, app As Variant)

' MsgBox «MACRO ПослеВыполненияОтчета» + CStr(ob.Название)

End Sub

Этот макрос будет запускаться после вставки данных в отчет. Он используется в отчетах баз данных, поставляемых с программой. Код по обработке отчета следует вставлять в этот макрос.

Переменные, которые передаются в макрос:

  • «ob» − объект, от которого был вызван отчет;
  • «app» − приложение, от которого был вызван отчет, то есть Business Studio.

Внимание! Просмотреть объектную модель Word для разработки макросов в редакторе Visual Basic можно по клавише F2.

При решении ряда задач средствами программирования бывает удобно оперировать данными привязок отчета. Для этого необходимо:

  1. Знать название привязки.

  2. Связать переменные в коде VBA с этим названием.

  1. Ниже описано, как это это делается для привязок разных типов.
  2. Тип привязки: Объект
  3. В отчете такие привязки представлены полями.

Узнать название в шаблоне отчета: см. статью Руководство пользователя → Пример определения названия привязки типа «Объект».

Использование названия привязки в коде:

ПеременнаяВКоде = Application.ActiveDocument.Variables.Item(«НазваниеПривязки»).Value

Тип привязки: Список и Фильтр

В отчете такие привязки представлены таблицей.

Узнать название в шаблоне отчета: см. статью Руководство пользователя → Пример определения названия привязки типа «Список».

Использование названия привязки в коде:

Set ТаблицДляОбработки = Application.ActiveDocument.Bookmarks(«НазваниеПривязки»).Range.Tables(1)

В отчетах Business Studio присутствует большое количество таблиц. Поэтому высока вероятность того, что основные задачи будут связаны с их обработкой.

Примеры ключевых функций, которые будут полезны при работы с таблицами, приведены ниже.

Работа с таблицей через название привязки

'переменная для работы с конкретной таблицей
Set Table = Application.ActiveDocument.Bookmarks(«НазваниеПривязки»).Range.Tables(1)

countColumn = Table.Columns.Count 'количество столбцов таблицы

countRow = Table.Rows.Count 'количество строк таблицы

СellText = Table.Cell(2,1).Range.Text 'значение ячейки во 2й строке 1го столбца

Работа с таблицей через её номер в документе

сountTables = ActiveDocument.Tables.Count 'количество таблиц в документе

Selection.GoTo What:=wdGoToTable, Which:=wdGoToFirst, Count:=5, Name:=»» 'перейти к таблице номер 5

countColumn = Selection.Tables(1).Columns.Count 'количество столбцов таблицы

countRow = Selection.Tables(1).Rows.Count 'количество строк таблицы

СellText = Selection.Tables(1).Cell(2,1).Range.Text 'значение ячейки во 2й строке 1го столбца

При работе с таблицами следует помнить ряд моментов:

  • Таблицы могут содержать объединенные ячейки. В случае перебора всех строк таблицы может возникнуть ошибка. Чтобы этого не было, необходимо использовать команду игнорирования ошибки:

On Error Resume Next ' игнорирование — ячейки таблицы имеют вертикальное объединение

  • При получении текста таблицы следует помнить, что полученное значение ячейки так же содержит в себе 2 служебных символа. Для обработки данных ячейки без этих служебных символов следует произвести «очистку» значения. Например:

СellText = Selection.Tables(1).Cell(3,2).Range.Text 'текст ячейки со служебными символами

СellText = Left$(СellText, (Len(CellText) — 2)) 'убираем 2 последних символа ячейки — чистый текст

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

Один и тот же отчет Business Studio может рассматриваться из разных мест:

  • одиночный документ Word или Excel или несколько документов,
  • HTML-публикация,
  • Business Studio Portal.

При рассмотрении такого отчета в разных местах есть свои нюансы. Например, отчеты в HTML-публикации и Business Studio Portal не содержат колонтитулов, которые есть в отчете, сделанным отдельным документом Word.

Также могут быть и разные задачи по обработке отчета кодом в зависимости от направления формирования отчета. Для определения направления формирования отчета используются параметры: BSInThread, BSHtml и BSPortal.

Направление формирования отчета BSInThread BSHtml BSPortal
Одиночный файл (Word, Excel) False False False
Пакетное формирование (Word, Excel) True False False
HTML-публикация True True False
Business Studio Portal True True True

Таблица 1. Значения специальных переменных в зависимости от направления формирования отчета

Пример использования в коде:

Dim HTMLCreate As Boolean
HTMLCreate = Application.ActiveDocument.Variables(«BSHtml»).Value 'True или False

If HTMLCreate Then

MsgBox «Выводим для HTML: HTML-публикация или Business Studio Portal»

Else

MsgBox «Выводим в одиночный файл или потоком файлов»

End If

Примечание. При формировании отчета типа HTML (HTML-публикация, Business Studio Portal) так же происходит формирование и отдельного файла типа Word.

При обработке кодом VBA отчета, сформированного для HTML-публикации или Business Studio Portal, следует помнить, что после формирования отчет представляет собой отображение не тех данных, что видны в браузере, а документ с показом кодов полей. Это не позволяет вести обработку гиперссылок.

Читайте также:  Образец нулевой единой упрощенной налоговой декларации

Для «нормализации» отображения данных следует сначала использовать следующий код:

ActiveWindow.View.ShowFieldCodes = Not ActiveWindow.View.ShowFieldCodes 'Alt+F9 — видим не коды пол

При копировании отчета названия всех привязок изменяются.

Макросы: как создавать и использовать для обработки отчетов из 1СРисунок 3. Названия привязок в исходном отчетеМакросы: как создавать и использовать для обработки отчетов из 1СРисунок 4. Названия привязок в копии отчета

В случае, если в отчете используется макрос, который «опирается» на названия привязок, то следует помнить, что после копирования такой отчет не сможет формироваться таким же образом как оригинал без дополнительной обработки.

Для корректной работы макроса рекомендуется использование проверки на предмет наличия привязки в отчете.

Пример проверки наличия привязки типа «Список». В документе это закладки.

Определяем название привязки типа «Список», которая представляет нужную таблицу (см. Руководство пользователя → Пример определения названия привязки типа «Список»).

BookmarkName = «Изменения_процесса_e1ded8b0» 'название привязки

'Проверка на корректность названия привязки

Dim BookmarkIs As Boolean 'сначала считаем, что нужной закладки нет
Dim Bkm As Bookmark 'переменная типа Закладка

For Each Bkm InActiveDocument.Bookmarks 'перебираем все закладки в документе

IfBkm.Name = BookmarkName Then 'если нашли закладку с нашим именем

BookmarkIs = True 'отмечаем, что закладка есть
'получаем таблицу по названию привязки
Set SettableStatus = Application.ActiveDocument.Bookmarks(BookmarkName).Range.Tables(1)

End If

Next

If BookmarkIs Then 'если в документе закладка есть

'производим необходимые действия c таблицей

End If

Выводить какое-либо сообщение в случае отсутствия привязки не рекомендуется по причине того, что если не будет данных для формирования привязки, то и соответствующей привязки не будет.

Пример проверки наличия привязки типа Объект

Определяем название привязки типа «Объект», которая представляет нужное поле в отчёте (см. статью Руководство пользователя → Пример определения названия привязки типа «Объект»).

VarName = «Статус_процесса_c9a10e8d» 'название привязки

'Проверка наличия указанной привязки в документе
Dim VarIs As Boolean 'сначала считаем что привязки нет

'перебираем все переменные документа
For Each aVar In ActiveDocument.Variables

If aVar.Name = VarName Then 'если среди них есть с нашим именем

VarIs = True 'отмечаем это
'получаем значение переменной по названию привязки
MyVar = Application.ActiveDocument.Variables.Item(VarName).Value

End If

Next aVar

If VarIs Then 'если в документе привязка есть

'производим необходимые действия с переменной

End If

Примечание. Закладки, не относящиеся к привязкам, например, созданные пользователем самостоятельно, при копировании отчетов не изменяются.

Из отчета можно напрямую обращаться к данным из базы бизнес-модели. Это делается двумя способами:

  1. Через обращение к параметрам объекта, от которого был вызван отчет.

  2. Через использование механизма OLE.

  • Обращение к параметрам объекта, от которого был вызван отчет, происходит таким образом:
  • ob.,
  • где
  • «ob» — объект, от которого был вызван отчет;

Например, при выводе отчета от процесса получить данные названия процесса можно таким образом:

Name = ob.Название 'получаем Название объекта, от которого вызвали отчет

Механизм OLE предоставляет более широкие возможности по обращению к данным бизнес-модели и выводу этих данных в отчетах по сравнению с обращением просто как данным объекта, от которого был вызван отчет.

Описание механизма OLE подробно описано в главе Руководство технического специалиста → Работа с Business Studio через OLE. Для задействования OLE в отчетах конкретной базы нет необходимости во включении опции «Разрешено использование OLE».

Внимание! В отчетах при работе с OLE недоступны все методы класса «Система.OleApplication», поскольку в макросе «ПослеВыполненияОтчета» есть аргумент «app», который является приложением Business Studio, а не «Система.OleApplication».

Бывают ситуации, когда:

  1. В рамках одного отчета необходимо решить более чем одну задачу. Например, форматирование полей типа RTF и вставка столбца в таблицу.

  2. Одну и ту же задачу необходимо применять к разным отчетам. Для этого необходимо скопировать код VBA, который решает поставленную задачу. И будет удобней, если этот код не пересекается с кодами других задач.

  3. Отладку кода удобно вести по одной из задач, на время отключив выполнение других задач.

В таких случаях каждую решаемую задачу удобно оформлять отдельным макросом. А в ключевом макросе «ПослеВыполненияОтчета» лишь вызывать по очереди нужные макросы. Все эти макросы оформляются в том же окне, где и ключевой макрос и делается так:

Sub ПослеВыполненияОтчета(ob As Variant, app As Variant)

Call Macros1
Call Macros2
'любые другие макросы

End Sub

Sub Macros1 ()
'В рамках этого макроса решается одна задача
End Sub

Sub Macros2 ()
'В рамках этого макроса решается другая задача
End Sub

Если такие макросы имеют одинаковые части кода, то их тоже можно (и рекомендуется) выносить в отдельные макросы или функции в том же окне с ключевым макросом. Например, функция для определения присутствия в отчете необходимой привязки типа «Список» (см. Работа с копией отчета, содержащим макрос) может быть следующей:

Function BookmarkIs(BookmarkName As String) As Boolean

'Проверка на корректность названия привязки

Dim Bkm As Bookmark 'переменная типа Закладка

BookmarkIs = False 'сначала считаем, что нужной закладки нет

For Each Bkm In ActiveDocument.Bookmarks 'перебираем все закладки в документе

If Bkm.Name = BookmarkName Then 'если нашли закладку с нашим именем

BookmarkIs = True 'отмечаем, что закладка есть

End If

Next

End Function

Использование этой функции из макроса может быть таким:

Sub MacrosN ()

BookmarkName = «НазваниеЗакладкиТипаСписок»

If BookmarkIs(BookmarkName) Then 'если в документе закладка есть
'Выполняются необходимые действия
End If

End Sub

Разработка макроса, как и любая другая работа, это определенный путь, в котором будут допущены ошибки и будет их исправление. Ошибки могут быть обнаружены сразу или не видны при первом взгляде. Более детально об этом описано в главе Подходы к отладке кода.

Макросы: как создавать и использовать для обработки отчетов из 1с — все о налогах

Макросы: как создавать и использовать для обработки отчетов из 1С

  • Перейти к программному продукту

Для сложных задач есть только сложные решения.А если Вы нашли простое решение – значит оно не правильное.

  • Для получения универсальных отчетов создан набор механизмов, доступ к которым осуществляется пунктом главного меню «Получение данных»
  • Рассмотрим следующий пример.
  • Допустим нам необходимо из регистра РегистрНакопления.бит_ОборотыПоБюджетам получить следующие данные:
  1. Получить сумму оборотов по статьям БДДС, содержащихся в папке «I ПОСТУПЛЕНИЯ» справочника Справочник.Статьи (СуммаПоступления)
  2. Получить сумму оборотов по статьям БДДС, содержащихся в папке «II ВЫПЛАТЫ» справочника Справочник.Статьи (СуммаВыплаты)
  3. Получить разницу : (Разница ) = (СуммаПоступления) — (СуммаВыплаты)

1. Начнем с формирования печатной формы отчета

Для этого используем механизм «Настройки произвольных отчетов». Создаем новый элемент справочника «Настройки произвольных отчетов» и в закладке «Макет» стандартными средствами рисуем внешний вид отчета.

  1. Дадим имена ячейкам   R5:С3 = «П001»,   R7:С3 = «П002»,
  2.    R6:С4 = «П003».
  3. Для этого необходимо установить курсор на нужную ячейку и нажать правую клавишу «мышки» в контекстном меню выбрать пункт «Свойства», и в открывшейся форме заполнить поле «Имя».
  4. Дадим имя нашей настройки «Новая настройка» и сохраним её.

2. Теперь можно заняться подготовкой данных для этого отчета

Из подменю «Запросы» входим в Справочник.Запросы и создаем новый элемент.

  • С помощью конструктора запросов ( кнопка «Конструктор») создаем запрос.
  • Примечание: В конструкторе запроса обязательно используем Построитель, где в закладке «Поля» указываем все поля и ресурсы, которые будем использовать в последствии.
  • А в закладке «Условия» выбираем поля, по которым впоследствии будем делать отбор.

3. Следующим этапом преобразуем наш запрос в источник данных

Используя подменю «Источники данных» создадим новый элемент справочника Справочник.ИсточникиДанных.

В поле «Запрос» выбирем запрос, который мы только что сделали.

При выборе запроса строки в таблице на закладке «Данные» заполняются автоматически (можно нажать кнопку «Заполнить»), установить всем флажок «Использовать».

4. Далее необходимо создать новый способ компоновки

Используя пункт подменю «Способы компоновки источников данных» создаем новый элемент Справочника.СпособыКомпоновкиИсточниковДанных

На закладке «Источники данных» в таблицу «Источники данных» добавляем созданный нами источник данных, а в таблицу «Соответствие колонок» добавляем новую строку, в которой в поле «Источник данных» выбираем наш источник данных, в колонке «Имя колонки источника» выбираем предложеный системой ресурс СуммаУпр.

Затем переходим на закладку «Колонки результата», добавляем там новую строку и в поле «Имя колонки» вводим название колонки, которое будет ипользоваться в компановке. Для простоты введем такое же имя «СуммаУпр». Заполним остальные поля, как указано.

Вернемся на закладку «Источники данных» и свяжем поля. В таблице «Соответствие колонок» в поле «Имя колонки» выбирем из появившегося списка «СуммаУпр».

Переходим на закладку «Элементы данных» и в предложеной таблице создаем новый элемент данных. Где

  • в поле «Вид» выбираем «Выборка данных» (будут выбираться данные из нашего запроса);
  • в поле «Наименование» пишем «Поступления»;
  • в поле «Источник данных» выбираем наш источник данных;

заполняем таблицу «Отбор»:

  • в новой строке в поле «Отбор» выбираем предложенное — «СтатьяОборотов»;
  • в поле «Тип сравнения» выбираем «В группе»;
  • в поле «Значение» (согласно нашей задачи) выбираем папку «I ПОСТУПЛЕНИЯ» из Справочника.СтатьиОборотов.

Создаем следующий элемент по такой же схеме для «Выплат»

А теперь создадим элемент, который будет функцией от первых двух элементов. В поле «Вид» ставим «Формула». В поле «Наименование» ставим «Разница». Переходим на закладку «Формула» и в предложеном поле формулы нажимаем кнопку выбора. В открывшемся окне редактора формул, используя предложеный механизм создаем формулу для вычисления разницы между Поступлениями и выплатами.

В итоге мы создали три элемента, которые будем впоследствии использовать.

5.Возвращаемся в настройку произвольных отчетов, которую мы приготовили в самом начале (через подменю «Настройки произвольных отчетов») откроем ранее сохраненную форму

  1. В поле «Способ компоновки» выбираем способ компоновки, который мы подготовили.
  2. Теперь для результирующих ячеек (R5:С3, R7:С3, R6:С4 ) установим соответствие в таблице «Правила заполнения».

  3. Для этого в макете устанавливаем курсор на ячейку на пересечении строки 5 ( Поступления ) и колонки 3 ( Сумма ) (R5:С3).

  4. Затем в таблице «Правила заполнения» добавляем новую строку и в появишейся форме заполняем поля:
  • в поле «Вид ячейки» выбираем значение «Значение»;
  • в поле «Элемент данных» выбираем значение «Поступления»;
  • в поле «Имя ресурса» выбираем значение «СуммаУпр»;
  • Аналогичную операцию выполняем для ячейки R7:С3.
  • Для этого в макете устанавливаем курсор на ячейку на пересечении строки 7 ( Выплаты ) и колонки 3 ( Сумма ).
  • Затем в таблице «Правила заполнения» добавляем новую строку и в появишейся форме заполняем поля:
  • в поле «Вид ячейки» выбираем значение «Значение»;
  • в поле «Элемент данных» выбираем значение «Выплаты»;
  • в поле «Имя ресурса» выбираем значение «СуммаУпр»;
Читайте также:  Без чего не сдать 4-ФСС за 9 месяцев...и другие интересные новости за неделю (17.09.2016 – 23.09.2016)

Теперь выполним операцию назначения соответствия для ячейки R6:С4.

Это можно сделать двумя способами.

  1. Первый способ был уже выше описан – это просто выбрать уже заготовленый в нашем способе компоновки элемент «Разница».
  2. Второй – это выбрать для поля «Вид ячейки» значение «Формула» и в предложеном редакторе написать формулу.

6. Сформировать отчет, нажав на кнопку «Сформировать отчет» на командной панели

10.09.2012 г.

наверх

Источник:

Частые вопросы по подготовке отчетности в «1С»

Макросы: как создавать и использовать для обработки отчетов из 1С

В этом материале мы собрали вопросы, которые наиболее часто возникают у пользователей программ «1С» при формировании и отправке отчетности. Ответы на них подготовили эксперты «1С» для информационной системы ИТС. Надеемся, что они будут полезны всем посетителям сайта.

Содержание

Вопрос: Где можно указать ОКТМО?Ответ: С 01.01.2014 в налоговых декларациях и платежных поручениях вместо кода ОКАТО применяется код ОКТМО.

Для автоматизации заполнения кода ОКТМО в конфигурации «Бухгалтерия предприятия», ред. 3.0 добавлено поле ОКТМО, которое указывается для всех сведений о регистрации организации или объекта налогообложения (основного средства в т.ч.

, земельного участка) в налоговом органе. Подробнее в статье в ИС ИТС «Заполнение кодов ОКТМО с 2014 года». 

Вопрос: Как подготовить и отправить справку 2-НДФЛ в ФНС?Ответ: Формирование сведений о доходах физических лиц в программе производится в автоматическом режиме.

  1. Для корректного формирования сведений необходимо, чтобы в программе были отражены все доходы, полученные физическими лицами за налоговый период, введены сведения о праве на налоговые вычеты (стандартные, имущественные и др.
  2. ) и отражены фактически предоставленные вычеты, рассчитаны и учтены суммы исчисленного, удержанного и перечисленного налога.

Для подготовки отчетных сведений о доходах физических лиц в программе используется документ Справка 2-НДФЛ для передачи в налоговый орган (раздел Сотрудники и зарплата — НДФЛ — Справки 2-НДФЛ для передачи в налоговый орган). Подробнее – в разделе Подготовка отчетных сведений о доходах физических лиц в программе «1С:Бухгалтерия Предприятия 8» (редакция 3.0) на сайте ИС 1С:ИТС. 

Вопрос: При формировании декларации «Налог на прибыль» за месяц не заполняются приложения к листу 2 (1 и 2). При формировании отчета за квартал все приложения заполняются.Ответ: Согласно Порядку заполнения налоговой декларации по налогу на прибыль (утв. приказом Минфина РФ от 22.03.

2012 № ММВ-7-3/174) организации, уплачивающие авансовые платежи ежемесячно исходя из фактически полученной прибыли, по итогам месяца (за январь, 2, 4, 5, 7, 8, 10, 11 месяцев) представляют Декларацию в объеме Титульного листа (Листа 01), подраздела 1.1 Раздела 1 и Листа 02.

При осуществлении соответствующих операций и (или) наличии обособленных подразделений в состав Деклараций включаются также подраздел 1.3 Раздела 1, Приложения № 5 к Листу 02 и Листы 03, 04».

Соответственно, автоматическое заполнение Приложений 1 и 2 по данным информационной базы реализовано только для отчетов, сформированных за отчетные периоды I квартал, полугодие, 9 месяцев.

Вопрос: Прошу разъяснить должны автоматически заполнятся строки в «Налоговой декларации по налогу на прибыль» строки 210-230 лист 02 (продолжение) или это нужно делать вручную.Ответ: Строки желтого цвета заполняются вручную.

Вопрос: Как отправить отчетность в ФНС и Росстат из из 1С:Бухгалтерия?Ответ: Последовательность действий по созданию и отправке регламентированного отчета в ФНС приведена в Руководстве по использованию сервиса «1С-Отчетность». Отправка отчетности на сайте 1С:ИТС 

Вопрос: Как узнать состояние отправленных отчетов?Ответ: Для отслеживания состояния документооборота по отправленному файлу отчетности в журнале Регламентированная и финансовая отчетность имеются специальные инструменты. Подробнее в Руководстве по использованию сервиса «1С-Отчетность». Отслеживание обработки отчета на сайте 1С:ИТС. 

Вопрос: Как распечатать подтверждение, что отчетность отправлена?Ответ: Нажать кнопку «Печать» в форме «Документооборот с контролирующими органами»

Вопрос: Как подключить 1С-Отчетность?Ответ: Порядок подключения описан на сайте 1С:ИТС в разделе Руководство по использованию сервиса «1С-Отчетность».Подключение к электронному документообороту. После оформления заявления нужно обязательно уведомить свою обслуживающую организацию.

Вопрос: Расскажите про тарифы и цены на 1С-ОтчетностьОтвет: Тарифы и льготы на странице сервиса «1С-Отчетность»

Вопрос: Долго не одобряется заявление на подключение к 1С-ОтчетностиОтвет: Как правило, такая ситуация происходит из-за проблем на стороне ИРУЦ ГНИВЦ ФНС России – системе регистрации налогоплательщиков, сдающих отчетность по электронным каналам в ФНС. Рекомендуем обращаться на линию техподдержки 1С-Отчетности по тел. 8-800-700-8668

Вопрос: Можно ли использовать существующую ЭЦП после переноса базы в «облако»?Ответ: Да. Процесс описан на сайте 1С:ИТС в разделе Руководство по использованию сервиса «1С-Отчетность».

Сдачаотчетности с другого компьютера. В процессе может потребоваться установить внешнюю компоненту для работы с криптографией – п. 2 инструкции на ИТС «Подготовка заявления на подключение к электронному документообороту».

Вопрос: Что такое «ЭЦП в облаке»?Ответ: У пользователей сервиса 1С-Отчетность есть возможность сохранить ключ электронной подписи непосредственно в сервисе.

Это позволяет подписывать и отправлять регламентированную отчетность в контролирующие органы по телекоммуникационным каналам связи, а также обмениваться прочими документами, с любого устройства в любое время из любого места без установки специального программного обеспечения (криптопровайдера) и дополнительных настроек.

Отправка отчетности становится возможной при работе в любой операционной системе с любым браузером, поддерживающим работу в сервисе. Подробнее об этом в статье на 1CFresh.com «Ключ в облаке».

Вопрос: Можно ли перенести существующую ЭЦП в «облако»?Ответ: Нет, нужно оформить заявление на перевыпуск ЭЦП. Статья об этом на сайте ИТС «Подготовка заявления на подключение к электронному документообороту» и на 1CFresh.com «Ключ в облаке».

Вопрос: Можно ли использовать ЭЦП 1С-Отчетности для участия в электронных торгах, ЭДО?Ответ: ЭЦП, выпущенная для «1С-Отчетности» не может быть использована для участия в электронных торгах и для ЭДО, встроенного в 1С.

Вопрос: Как изменить настройки подключения к 1С-Отчетности (изменились реквизиты организациии, нужно добавить новое направление для предоставления отчетности и т.д.)?Ответ: статья на ИТС «Продление и изменение настроек подключения к «1С-Отчетности»

Вопрос: Заканчивается оплаченный период 1С-Отчетности. Что делать?Ответ: Для абонентов 1С-Отчетности в типовых конфигурациях предусмотрен удобный сервис отправки заявлений специализированному оператору связи непосредственно из программы.

Специальный «Помощник изменения настроек подключения к «1С-Отчетности»» позволяет отправить заявление на продление лицензии, переиздание сертификата, а также на изменение прочих параметров подключения к «1С-Отчетности».

Подробнее об этом в статье на ИТС: «Продление и изменение настроек подключения к «1С-Отчетности».

Вопрос: Как указать регистрационный номер для подключения к отчетности?Ответ: FR, далее код абонента, указанный в менеджере сервиса. Статья «Как узнать свой регистрационный номер»

Вопрос: Организация была открыта 10.12.2013. Программа не формирует бухгалтерскую отчетность за 2013 год.Ответ

Источник:

Автоматизация бизнеса на платформе 1С:Предприятие 8

Макрос обработки прайсов из 1С

Программа обработки прайсов успешно справляется с обработкой прайс-листов, выгруженных из 1С, — благодаря привязке к форматам ячеек, можно настроить извлечение данных в разные столбцы в зависимости от уровня группировки строк, форматирования и цвета заливки ячеек, и т.д.

Но, изредка, из 1С выгружаются прайсы с категориями и товарами разной степени вложенности, причем может получиться так, что никак не задать условие, по которому программа сможет отличить строку с наименованием товара от строки с опцией. (под опцией подразумевается строка, в которой написан цвет или размер, без наименования товара)

В этой инструкции мы рассмотрим как раз такой вариант прайс-листа, настройка программы под который сопровождается следующими проблемами:

  1. в прайсе содержатся как товары с опциями (есть доп. строки под названием товара), так и товары без опций (есть только название товара)
  2. названия товаров и названия опций находятся на разных уровнях группировки строк (уровни 4, 5 и 6), т.е. к уровню группировки строк никак не привязаться
  3. заливка ячеек и отступы (количество пробелов) так же не позволяют нам отличить строку товара от строки опции
  4. и последний шанс — отличить строки по содержимому — тоже в данном случае отсутствует: и то и другое может начинаться с цифр, содержать скобки, и т.д.

Таким образом, мы не можем обработать этот прайс-лист так, чтобы в один столбец вывелись названия товаров, а в соседний столбец — цены (не говоря уж о выводе доступных цветов / размеров):

Макросы: как создавать и использовать для обработки отчетов из 1С

  • Наша задача — получить пригодный для обработки прайс, где в отдельных столбцах будет наименование, артикул, опция (цвет / размер), цена, а также подкатегория последнего уровня. 
  • Промежуточная задача — придумать алгоритм, позволяющий отличить одни строки от других, и написать макрос для преобразования таблицы в вид, подходящий для обработки программой Unification.
  • Сформулировать критерии отличия строк товаров от строк с опциями и прочих строк (подзаголовков) можно так:
  • Анализируем уровень группировки строки (число от 1 до 9), и выделение полужирным для столбца с наименованием.
  • Если строка выделена полужирным — считаем её подзаголовком, и не обрабатываем.
  • Для каждой из остальных строк смотрим её уровень группировки, и уровень группировки строки ниже неё.
    Если в строке ниже уровень группировки на 1 больше (вложенная строка), то запоминаем название товара.

Макрос в этом случае будет непростой, но код достаточно универсальный, и вы легко сможете адаптировать этот макрос под свой прайс-лист (достаточно поменять номера столбцов в первых 4 строках макроса):

Оставьте комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *