1с внешний отчет пароль
Наверняка каждый разработчик заботится о том, чтобы его программы были защищены от нелегального распространения. Особенно если эта разработка – коммерческий, тиражируемый продукт.
Создатели системы 1С: Предприятие 8 позаботились о защите кода. К сожалению, пароль на доступ можно установить только на модули объектов, общие модули, модули обработок и отчетов. В том числе и внешних. Но и этого немало, так как можно значимые процедуры и функции разместить в модуле и потом к ним обращаться.
В данной статье я хочу разобраться, как установить защиту и снять её, если Вы забыли пароль.
Установка защиты на модуль 1C
Программа меня тут же предупредила о том, что нельзя защитить модуль, имеющий директивы препроцессора:
Если вы только начинаете программировать в 1С или просто хотите систематизировать свои знания - попробуйте Школу программирования 1С нашего друга Владимира Милькина. Пошаговые и понятные уроки даже для новичка с поддержкой учителя.
Попробуйте бесплатно по ссылке >>
Что же, посмотрим, во что это выльется. Устанавливаем пароль.
Все оказалось хуже, чем я предполагал. Документ полностью не рабочий. Провести его не удалось, постоянно программа ругается на какие-то незаполненные поля, которых ни в шапке формы, ни в таблице нет.
Вывод однозначный: не все модули можно защитить. Однако ничего Вам не мешает вынести функции и процедуры с директивами препроцессора в отдельный модуль.
Осталось проверить обработки. Возьмем для интереса внешнюю. Защита прошла без проблем.
Проверка надежности защиты с помощью декомилятора модулей 1С
Пробуем открыть модуль в конфигураторе, и он прекрасно открывается.
На форумах пишут, что иногда нужно запускать 1С от имени администратора, если выходит ошибка.
Теперь осталось проверить, как декомпилятор справится с общими модулями. Сохраняем конфигурацию в файл.
Выбираем в обработке:
Загружаем конфигурацию из файла и проверяем защиту. Защита полностью снята.
Данный материал предоставлен только в ознакомительных целях с целью обзора механизма защиты платформы 1С. Запрещено использовать данный материал для получения доступа к защищенным авторским правом разработкам.
Программы 1С можно дорабатывать через Конфигуратор. В таких случаях немного осложняется обновление конфигурации.
Поэтому широкое распространение получили внешние обработки — с помощью них выполняются необходимые действия, а конфигурация остается типовой.
Внешние обработки можно подключить в 1С в список дополнительных отчетов и обработок и разместить в нужном для себя разделе.
Но не все обработки поддерживают такую функцию, также бывает, что обработку нужно открыть разово или использовать редко. В таких случаях используется интерактивное открытие обработки и тогда часто выходит ошибка «Нарушение прав доступа».
Разберем, почему происходит такая ситуация в 1С 8.3, и как ее решить.
Как открыть обработку интерактивно
При интерактивном открытии обработки ее не нужно никуда подключать. Достаточно зайти в раздел «Сервис и настройки — Файл — Открыть» или нажать CTRL + O на клавиатуре.
Получите понятные самоучители по 1С бесплатно:
Затем выбираем саму обработку. В этот момент и выходит ошибка.
Для исправления ошибки назначим пользователю роль, которая позволяет открывать обработки интерактивно. Роль так и называется — Интерактивное открытие внешних отчетов и обработок. Отметим, что эту роль нужно назначить даже пользователю с полными правами.
Установка ролей построена таким образом: роли указываются в профилях групп доступа, а профили назначаются пользователям.
Сначала рассмотрим, где находится нужный профиль, а затем разберем, как назначить ее пользователю.
Профиль для открытия внешних обработок
Зайдем в меню «Администрирование — Настройки программы — Настройки пользователей и прав».
Раскроем раздел «Группы доступа» и перейдем по ссылке «Профили групп доступа».
Нужный профиль в программе уже создан и называется «Открытие внешних отчетов и обработок».
Откроем его и увидим, что в нем содержится единственная роль «Интерактивное открытие внешних отчетов и обработок».
Как назначить профиль пользователю
В том же разделе, где находится профиль групп доступа, откроем справочник «Пользователи».
Выберем пользователя, которому нужно назначить профиль. Перейдем по ссылке «Права доступа». Ставим флажок для пункта «Открытие внешних отчетов и обработок» и нажмем «Записать» для сохранения настроек.
Обязательно закрываем 1С и запускаем заново. Открываем обработку и ошибки больше не будет.
Поговорим об особенностях формирования внешних отчетов в программе 1С Бухгалтерия 8 без применения схемы компоновки информации. За исходную информацию примем необходимость: «Составить отчет по сч. 62 бухучета , в котором в разрезе Контрагентов и их Договоров станут отражаться обороты за определенный период».
Создание внешнего отчета
Прежде всего, перейдем в режим Конфигуратора , выберем подраздел Файл, после кликнем на значок Новый документ или слово Новый, и создадим файл внешнего отчета.
Выберем строку Внешний отчет в перечне. После формирования файлы, укажем его Наименование (допустим, ПростейшийОтвет ) и выполним сохранение на диск. Кроме того, внесем несколько реквизитов вида Дата – КонецПериода и НачалоПериода . Они потребуются для выставления временных рамок при выборке информации в процессе создания отчета.
Создание макета внешнего отчета
Для создания отчета в 1С Бухгалтерия 2.0 понадобится шаблон для вывода информации, или, другими словами, макет, в котором будут составляться таблицы, задаваться необходимые параметры и т.д. Для добавки шаблона кликаем на раздел Макеты, находящийся в дереве мета-данных отчета, после – на Добавить. При формировании макета определяем вид Табличный документ.
В шаблоне – четыре основных части:
- Шапка – в которой станет располагаться название отчета, временной отрезок, за который он создан, шапка таблицы.
- ДанныеКонтрагент – здесь будет находиться информация по контрагентам в таблице.
- ДанныеДоговорКонтрагента – тут мы станем указывать информацию по соглашению с контрагентом, также в таблице.
- Подвал – часть предназначается для указания итоговых параметров по всему отчету для Расхода и Прихода.
Начнем формировать части шаблона. Для этого выделяем необходимое число строк, после чего:
- Нажимаем одновременно сочетание клавиш «N + Shift + Ctrl»;
- Или кликаем на Назначить имя, расположенное в меню Имена в разделе Меню Таблица.
В Шапке прописываем название документа: Обороты сч. 62. Используя инструмент Границы, рисуем шапку отчета, после – задаем параметры. Последние позволяют указывать в отчете необходимые сведения. Но об этом мы поговорим позднее.
Параметр в шаблоне создается путем выбора необходимой ячейки и указания в ней (без пробелов) названия параметра. После нужно будет нажать на ячейку, используя правую кнопку мышки, и в выпавшем списке кликнуть на строчку Свойства. Выберите заполнение Параметр в закладке Макета в свойствах ячейки.
В результате название параметра в ячейке окажется окруженным скобками (<>). Вид получившейся Шапки должен быть таким:
В части ДанныеКонтрагент задаем параметры для указания названия контрагента, и для Расхода и Прихода по сч. 62. С этой целью используем инструмент Границы, оформляя часть как строку таблицы.
В части ДанныеДоговорКонтагент определяем парамаметры для указания названия соглашения, Расхода и Прихода по сч. 62. С этой целью используем инструмент Границы, оформляя часть как строку таблицы. Выполняем незначительный отступ перед параметром ДоговорКонтрагент (разбейте и соедините ячейки, работая с правой кпонкой мышки). Отступ потребуется для того, чтобы в документе было заметно, что строчка по соглашению располагается ниже по иерархии, в сравнении со строчкой по контагенту .
В части Подвал указываем параметры для результатов Расхода и Прихода.
В результате должен появиться шаблон следующего вида:
Создание формы отчета
Форма необходима для появления кнопки Формировать, указания срока формирования и внесения информации. Получить ее можно, перейдя к дереву с мета-данными и выбрав в нем раздел Форма. Кликайте на Добавить. На 1-ой странице конструктора для создания форм никакие корректировки не нужны. Кликайте сразу на Далее.
На новой странице указывайте для размещения на форме два реквизита – КонецПериода и НачалоПериода .
В результате будет показана форма следующего вида:
Этот вид формы нам не подходит, изменим его:
- Перенесем в верхнюю часть панели кнопку Сформировать, пока что расположенную внизу;
- Вытянем форму горизонтально и вертикально;
- Разместим по горизонтили КонецПериода и НачалоПериода ;
- Добавим Поле табличного документа (элемент управления) в форму. Поле потребуется нам для вывода отчета. Укажем его название – ТабДок ;
- Создадим кнопку для определения периода (при клике на нее станет показываться окно выбора необходимого периода). Заниматься написанием программного кода для этой кнопки мы сейчас не станем. Размещаем ее около полей периода.
В результате указанных действий форма выглядит так:
Программирование
Переходить к программированию можно после формирования формы. Выводим окно выбора периода. Нажимаем на кнопку правой кнопкой мышки, переходим в раздел Свойства – здесь выбираем События (в этом меню, используя символ лупы, в модуле формы мы создадим процедуру Кнопка-1Нажатие).
Для переключения между модулем и самой формой можно использовать расположенные в нижней части закладки.
Вызвать окно выбора периода можно, используя стандартный модуль ОбработчикНастройкаПериодаНажатие , расположенный в меню РаботаСДиалогами . Здесь в качестве параметров необходимо передать отчетные реквизиты КонецПериода и НачалоПериода .
Приступаем к программированию – нам нужен код для формирования и вывода отчета. Используем уже имеющуюся процедуру КнопкаСформироватьНажатие . Она станет осуществляться при клике на Сформировать.
Прежде всего, нам нужна переменная для поля таблицы-документа, в котором будут указываться данные.
ТабДок = ЭлементыФормы . ТабДок
Создался шаблон. Используя ПолучитьМакет (< ИмяМакета >), в параметр ему присвоим имя шаблона. При существовании такого шаблона, система отыщет его.
Макет = ПолучитьМакет («Макет»)
Оформляем переменные для всех областей шаблона. Используем макет ПолучитьОбласть (< ИмяОбласти >).
ОбластьШапка = Макет. ПолучитьОбласть («Шапка»)
ОбластьПодвал = Макет. ПолучитьОбласть («Подвал»);
ОбластьДанныеДоговор =Макет. ПолучитьОбласть (« ДанныеДоговор »)
ОбластьДанныеКонтрагент = Макет. ПолучитьОбласть (« ДанныеКонтрагент »).
Проводим очистку поля таблицы-документа. После этого каждый новый сформированный отчет станет удалять прежнюю информацию.
По завершению инициализации переменных, начинаем по очереди заполнять и выводить части шаблона – с Шапки. У Шапки есть КонецПериода и НачалоПериода – зададим тут показатели периода формирования документа. С этой целью используем Параметры области макета.
КонецПериода = ОбластьШапка .Параметры. КонецПериода
НачалоПериода = ОбластьШапка .Параметры. НачалоПериода
Другие действия с частью не нужны: убираем Шапку в поле таблицы-документа.
ТабДок .Вывести( ОбластьШапка )
Пишем запрос для базы данных, который позволит получать обороты по сч. 62 из бух . регистра Хозрасчетный. Указываем переменную для расположения запроса.
Запрос = новый Запрос.
Перенесем необходимые параметры в запрос перед написанием текста. Мы создаем запрос по сч. 62 бухучета , значит, прежде всего, нам нужен параметр для него.
Запрос. УстановитьПараметр («Счет62», ПланыСчетов .Хозрасчетный. НайтиПоКоду («62»)).
Теперь в запрос нужно перенести период создания отчета. Помните, что для периода формирования существуют соответствующие реквизиты. Перенесем их как параметры.
Запрос. УстановитьПараметр (« КонецПериода », КонецПериода )
Запрос. УстановитьПараметр (« НачалоПериода », НачалоПериода )
Используя конструктор запросов, создаем текст запроса. Рекомендуем отказаться от попытки написания запросов вручную, и всегда использовать конструктор, который не может допустить ошибку и опечатку. Вы сэкономите силы и время даже при создании наиболее сложных запросов. В коде указываем:
Далее наводим курсор мышки между кавычками, кликаем правой клавишей мышки и определяем строку Конструктор запроса. Откроется нужное нам окошко.
Сейчас нужно указать необходимую таблицу базы данных утилиты. Наша таблица должна быть виртуальной - Обороты регистра бухгалтерии Хозрасчетный. В окошке конструктора она располагается слева.
Переносим таблицу в часть Таблица и приступим к вводу параметров. Для любой виртуальной таблицы запроса имеется особый комплект параметров, воспользовавшись которыми, можно находить необходимые сведения в главной таблице. В нашем примере главной таблицей будет Регистр бухгалтерии Хозрасчетный. Открываем окошко параметров виртуальной таблицы.
Указываем параметры и периоды , которые ранее переносились в запрос. Для того, чтобы в тексте запроса можно было применить параметр, необходимо перед его названием указывать & (знак амперсанда ).
Теперь нужно оформить условие по сч. 62 бухгалтерского учета. С этой целью ищем УсловиеСчета в параметрах виртуальной таблицы, и пишем условие в нем.
Счет В ИЕРАРХИИ (&Счет62)
Кроме того, можно использовать Конструктор для формирования условий. Кликните на кнопку с 3 точками.
После этого на виртуальную таблицу больше не нужно будет накладывать никаких условий. Дальше кликаем на кнопку ОК, расположенную в окошке с параметрами виртуальной таблицы. После – определяем необходимые нам поля из таблички Хозрасчетной.Обороты. в частности требуются Расход и Приход, Договор контрагента и Контрагент. Просмотреть перечень полей, возможных в выбранной сейчас таблице, можно, кликнув на значок «+» (он располагается около наименования таблицы). Переносим необходимые поля в правую часть конструктора запросов (название части аналогичное – ПОЛЯ). Если вы перейдете в план счетов бухучета , то обнаружите, что для сч. 62 аналитика по ДоговоруКонтрагента — Субконто2, а по Контрагенту — это Субконто1.
Соответственно, из полей виртуальной таблички нам нужны Субконто2 и Субконто1. В связи с необходимостью Расхода и Прихода по сумме, дополнительно треуются поля СуммаОборотКт и СуммаОборотДт .
Оформив наименования определенных сейчас полей. С этой целью необходимо открыть меню Объединения/Псевдонимы, и указать необходимые названия полей.
В связи с тем, что в формируемом нами отчете информация станет указываться в соответствии с иерархией (соглашения с контрагентами будут выходить на уровне, перед которым будет располагаться уровень самих контрагентов), нужно настроить демонстрацию информации в иерархии, используя Итоги. Открываем подраздел Итоги в конструкторе. Переносим в поля группировок один за другим Контрагент и ДоговорКонтрагента , далее - итоговые Приход и Расход.
Все необходимые процедуры в редакторе выполнены. Остается кликнуть на кнопку ОК и убедиться в том, что в программном коде отражается текст только что сформированного запроса. Вид текста должен быть следующим:
| ХозрасчетныйОбороты .Субконто1 КАК Контрагент,
| ХозрасчетныйОбороты .Субконто2 КАК ДоговорКонтрагента ,
| ХозрасчетныйОбороты . СуммаОборотДт КАК Приход,
| ХозрасчетныйОбороты . СуммаОборотКт КАК Расход
| РегистрБухгалтерии .Хозрасчетный.Обороты(& НачалоПериода , & КонецПериода , , Счет В ИЕРАРХИИ (&Счет62), , , , ) КАК ХозрасчетныйОбороты
По окончанию формирования запроса, необходимо оформить части Подвал, ДанныеДоговорКонтрагент и ДанныеКонтрагент . Все указанные части нужно оформлять, указывая информацию, полученную при проведении запроса. В связи с тем, что в запросе есть группирование (в частности, ДоговорКонтрагента и Контрагент), указываем для него информацию таким путем:
ВыборкаКонтрагент = Запрос.Выполнить().Выбрать( ОбходРезультатаЗапроса . ПоГруппировкам );
В результате у нас будут записи с результатом по каждому контрагенту.
Прежде, чем обходить информацию выборки, используя цикл, инициализируем переменные, которые предназначаются для расчета всех результатов отчета:
Для корректного вывода данных с учетом иерархии и разворотами по знаку «+», указываем начало автоматической группировки строчек документа-таблицы:
Все предварительные работы завершены. Следует начать обходить итоги запроса. Для обхода потребуется использовать цикл Пока:
Пока ВыборкаКонтрагент .Следующий() Цикл
Аннулируем параметры Расход и Приход области ДанныеКонтрагент в самом начале цикла. Что это нам даст? Предположим, что по поставщику, назовем его Х, расход составляет 10, а приход 20. У следующего за ним поставщика, назовем его Н, расход и приход отсутствуют полностью. При аннулировании параметров Расхода и Прихода в такой ситуации в строке по поставщику Н окажутся данные поставщика Х – расход 10 и приход 20.
ОбластьДанныеКонтрагент .Параметры.Приход = 0;
ОбластьДанныеКонтрагент .Параметры.Расход = 0;
Теперь оформляем данными элемента выборки часть ДанныеКонтрагент
ЗаполнитьЗначенияСвойств ( ОбластьДанныеКонтрагент .Параметры, ВыборкаКонтрагент );
Оформив данные, можно выводить часть в Табличный документ. Т.к. мы работаем с автоматическим группированием строчек, необходимо определить степень строки в группировке (в нашем случае у отчета окажется 2 степени, для договоров контрагентов – второго уровня, для самих контрагентов – первого уровня).
ТабДок .Вывести( ОбластьДанныеКонтрагент ,1);
После для указанного контрагента нужно выполнить выборку по его соглашениям:
ВыборкаДоговорКонтрагента = ВыборкаКонтрагент .Выбрать( ОбходРезультатаЗапроса . ПоГруппировкам );
Используем цикл Пока для выполнения обхода:
Пока ВыборкаДоговорКонтрагента .Следующий() Цикл
Обнуляем параметры Расход и Приход в цикле по соглашениям контрагентов. Оформляем часть ДанныеДоговора из выборки и выносим эту часть на 2-ой уровень записей в таблицу-документ:
ОбластьДанныеДоговор .Параметры.Приход = 0;
ОбластьДанныеДоговор .Параметры.Расход = 0;
ЗаполнитьЗначенияСвойств ( ОбластьДанныеДоговор .Параметры, ВыборкаДоговорКонтрагента );
ТабДок .Вывести( ОбластьДанныеДоговор ,2);
Кроме того, к переменным расчета итоговых показателей по Расходу и Приходу в данном цикле присоединим нынешние показатели.
ИтогоПриход = ИтогоПриход + ВыборкаДоговорКонтрагента .Приход;
ИтогоРасход = ИтогоРасход + ВыборкаДоговорКонтрагента .Расход;
После этого вынос данных в части ДанныеДоговорКонтрагент и ДанныеКонтрагент будет закончен. Потребуется только окончить автоматическую группировку строчек таблицы-документа:
Циклы, ответственные за демонстрацию информации в частях документа ДанныеДоговорКонтрагент и ДанныеКонтрагент , целиком станут иметь следующий вид:
Пока ВыборкаКонтрагент .Следующий() Цикл
ОбластьДанныеКонтрагент .Параметры.Приход = 0;
ОбластьДанныеКонтрагент .Параметры.Расход = 0;
ЗаполнитьЗначенияСвойств ( ОбластьДанныеКонтрагент .Параметры, ВыборкаКонтрагент );
ТабДок .Вывести( ОбластьДанныеКонтрагент ,1);
ВыборкаДоговорКонтрагента = ВыборкаКонтрагент .Выбрать( ОбходРезультатаЗапроса . ПоГруппировкам );
Пока ВыборкаДоговорКонтрагента .Следующий() Цикл
ОбластьДанныеДоговор .Параметры.Приход = 0;
ОбластьДанныеДоговор .Параметры.Расход = 0;
ЗаполнитьЗначенияСвойств ( ОбластьДанныеДоговор .Параметры, ВыборкаДоговорКонтрагента );
ТабДок .Вывести( ОбластьДанныеДоговор ,2);
ИтогоПриход = ИтогоПриход + ВыборкаДоговорКонтрагента .Приход;
ИтогоРасход = ИтогоРасход + ВыборкаДоговорКонтрагента .Расход;
На завершающем этапе необходимо перенести итоговые сведения в часть Подвал и перевести сам Подвал в таблицу-документ:
ОбластьПодвал .Параметры. ИтогоПриход = ИтогоПриход ;
ОбластьПодвал .Параметры. ИтогоРасход = ИтогоРасход ;
ТабДок .Вывести( ОбластьПодвал );
После этого процедура формирования внешнего отчета в программе 1С Бухгалтерия 2.0 версия 8 без применения схемы компоновки данных будет полностью окончена. С этой минуты отчет можно будет создавать, используя рабочий режим утилиты 1С версия 8, и добавлять в справочник ВнешниеОбработки .
Рассмотрим подключение внешних отчетов, обработок и печатных форм на примере конфигурации ЗУП 3.1.1.91.
Для подключения внешнего файла переходим в раздел Администрирование – Печатные формы, отчеты и обработки – Дополнительные отчеты и обработки (рис. 1, рис. 2):
Рис. 2. Дополнительные отчеты и обработки
Нажимаем Создать (рис. 3):
Рис. 3. Добавление файла
Рис. 4. Предупреждение безопасности
Появляется окно для выбора файла, выбираем нужный файл, в примере это будет внешний отчет пр_ОтчетПоКадровымПеремещениям, нажимаем Открыть (рис. 5):
Рис. 5. Выбор файла
После выбора файла заполняются поля формы дополнительного отчета (рис. 6):
Рис. 6. Поля формы внешнего дополнительного отчета
Т.к. Размещение <Не задано>, нужно определить, в каких разделах будет видна команда вызова отчета. Нажимаем ссылку <Не задано> (рис. 6) и указываем раздел Кадры, нажимаем ОК (рис. 7):
Рис. 7. Выбор раздела
Указываем пользователей, которым будет доступен отчет: переходим в табличную часть формы в поле Быстрый доступ (рис. 8):
Рис. 8. Настройка быстрого доступа
Выбираем пользователя, нажимаем >, выбранный пользователь окажется в разделе Пользователи, для которых видна команда и нажимаем ОК (рис. 9):
Рис. 9. Выбор пользователя
Теперь можно записать и закрыть форму внешнего отчета (рис. 10):
Рис. 10. Сохранение внешнего отчета
Переходим в раздел Кадры – Сервис – Дополнительные отчеты, в котором должна появиться команда вызова внешнего отчета (рис. 11):
Рис. 11. Кадры – Сервис – Дополнительные отчеты
Открывается форма Дополнительные отчеты, выбираем нужный отчет (название отчета задается при регистрации внешнего отчета, рис. 6 в табличной части формы колонка Наименование) и нажимаем Выполнить (рис. 12):
Рис. 12. Запуск отчета
Если в разделе Кадры отсутствует команда Сервис – Дополнительные отчеты, нужно ее вывести. Нажимаем значок Настройки (рис. 13):
Рис. 13. Настройка команд раздела
Выбираем пункт Настройка действий (рис. 14):
Рис. 14. Настройка действий
В открывшемся окне Настройка панели действий в разделе Доступные команды выбираем Сервис – Дополнительные отчеты, нажимаем Добавить (после этого команда появится в разделе Выбранные команды), нажимаем ОК (рис. 15):
Рис. 15. Добавление команды Дополнительные отчеты
После этого в разделе Кадры появится пункт Сервис – Дополнительные отчеты (рис. 16):
Рис. 16. Кадры – Сервис – Дополнительные отчеты
Добавление внешней обработки аналогично добавлению внешнего отчета, только искать нужную внешнюю обработку нужно в разделе Сервис – Дополнительные обработки (внешние отчеты можно найти в разделе Сервис – Дополнительные отчеты, рис. 11).
Добавление внешней печатной формы аналогично добавлению внешнего отчета. В поле Размещение (рис. 10) будет указан объект, к которому относится печатная форма. Нужно открыть этот объект и у него при нажатии на кнопку Печать появится пункт с наименованием добавленной внешней печатной формы (наименование задается при регистрации внешней печатной формы, рис. 6 в табличной части формы колонка Наименование).
Если при регистрации файла происходит ошибка:
Для того, чтобы при регистрации внешнего отчета/обработки верно заполнились все поля формы внешнего отчета/обработки и регистрация прошла успешно, нужно в модуле объекта прописать определенные процедуры. Пример модуля объекта для файла внешнего отчета:
Читайте также: