Основная страница

Дополнительные приемы конфигурирования


Создание сервисных режимов групповой обработки данных

В некоторых случаях для эффективной работы пользователей с конкретной конфигурацией целесообразно разработать некоторые сервисные режимы обработки информации. Достаточно часто возникает потребность в специальных режимах выполняющих групповые действия с объектами (элементами справочника, документами). Такие операции оформляются в конфигурации 1С:Предприятия в качестве объектов метаданных "Обработка", по принципам конфигурирования идентичных объектам "Отчет".

Сами действия, выполняемые над множеством объектов вполне очевидны. Это могут быть:

* пометка и снятие пометки на удаление;

* проведение и отмена проведения документов;

* перенос элементов справочника в другую группу;

* изменение реквизитов определенным образом;

* печать документов

* другие варианты обработки.

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

Первый тип - это обработки, ограничивающие состав обрабатываемых объектов некоторыми условиями, которые задаются как выбираемые пользователем значения в диалоге формы обработки. Например, может быть создана обработка, помечающая на удаление все документы определенного вида с конкретным клиентом в определенном интервале. Этот принцип аналогичен параметрам настройки отчетов.

Второй тип предполагает задание множества обрабатываемых объектов пользователем посредством выбором самих объектов. Для создания таких обработок рекомендуется использовать объект "СписокЗначений". Для того, чтобы пользователь мог заполнить список обрабатываемых объектов в диалоге формы обработки следует создать элемент диалога "Список". Для его заполнения следует предусмотреть кнопки добавления и удаления значений. Само добавление может выполняться выбором или с использованием механизма "Подбора", что обеспечит достаточно быстрое заполнение списка. Отдельная кнопка должна быть предусмотрена для выполнения тех действий ради которых и создавалась обработка.

Пример обработки, выполняющей групповой перенос товаров в выбранную группу, приведен в методической конфигурации (обработка "ПереносТоваров").

Печать на матричных принтерах в текстовом режиме

При печати на матричном принтере Windows выводит всю информацию в графическом режиме, что сильно замедляет скорость работы принтера. Для ускорения этого процесса можно выводить информацию на принтер в текстовом режиме.

В методической конфигурации печать на матричном принтере в текстовом режиме  демонстрируется на примере печати расходной накладно (кнопка "Печать текст").

С помощью объекта "Текст" в каталоге временных файлов формируется текстовый файл, например  "Tmp.txt" (в DOS - кодировке) . После формирования файл, с помощью команды системы "copy", пересылается в порт, к которому подключен принтер (в данном примере порт указывается в переменной ПортПринтера). После того как файл переслан на принтер он удаляется из каталога временных файлов.

Для печати на сетевом принтере, он должен быть назначен на соответствующий порт с помощью настроек свойств принтера (для Windows 95, Windows 98) или с помощью команды системы:

"net use <порт>: \\<название компьютера>\<название принтера>" (для

WindowsNT) .

Где:

<порт> - название порта на который будет назначен принтер,

<название компьютера> - название сетевого компьютера к которому

подсоединен принтер,

<название принтера> - сетевое название принтера.

Например, команда может выглядеть следующим образом: "net use lpt1:

\\printserver\printer".

Публикация данных 1С:Предприятия в Интернет

Для организаций имеющих свой Web-сайт весьма актуальной является задача публикации в Интернет некоторой информации, получаемой из информационной базы 1С:Предприятия. Обычно это рекламно-коммерческая информация, которую организация хочет оперативно доводить до своих партнеров и потенциальных клиентов.

Средства 1С:Предприятия позволяют достаточно просто и эффективно получать необходимые данные для публикации в Web.

В методической конфигурации выгрузка данных для публикации в Интернет демонстрируется на примере формирования прайс-листа  в виде фрагмента Web-сайта. Для этого используется обработка "ПрайсВИнтернет".

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

То есть прайс формируется как обычный отчет, но табличный документ не показывается на экране, а записывается в виде файла в формате HTML. Так как прайс-лист может быть достаточно большой, то он выгружается не как один HTML-файл, а как набор файлов, каждый из которых содержит товары одной группы. Для формирования отдельных файлов по группам справочника используется рекурсивный вызов процедуры. Совокупность этих файлов образует фрагмент сайта обеспечивающий просмотр прайс-листа любого размера. Необходимое оформление страниц автоматически генерируется при записи табличного документа в формате HTML. Для осуществления перехода к определенным группам в ячейках табличного документа размещаются специальные теги языка HTML. В них указываются ссылки на соответствующие файлы, сформированные данной обработкой.

Вызов Конфигуратора из режима работы "1С:Предприятие" для сохранения резервной копии

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

Одним из путей решения этой проблемы может являться включение в меню 1С:Предприятия вызова режима "Конфигуратор" для создания резервной копии. В методическую конфигурацию включена обработка "РезервноеКопирование", которая фактически и выполняет вызов режима "Конфигуратор". Вызов данной обработки включен в меню "Сервис" пользовательского интерфейса.

Обработка выполняет собственно запуск 1С:Предприятия в режиме "Конфигуратор", а все необходимые действия по созданию резервной копии пользователь будет выполнять самостоятельно. Напоминание об этом включено в форму обработки.

Обработка позволяет выбрать исполняемый файл 1С:Предприятия (так как имена файлов в зависимости от установленной версии могут отличаться). В форме обработки предусмотрено поле для ввода пароля пользователя.

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

В обработке предусмотрена возможность установки режима автоматического вызова данной обработки при выходе из 1С:Предприятия.

В модуль обработки  включен текст, выполняющий запуск Конфигуратора в пакетном режиме для выполнения собственно сохранения данных, однако этот фрагмент модуля закомментирован. Это объясняется тем, что в общем случае невозможно гарантировать освобождение информационной базы к моменту запуска Конфигуратора даже при монопольном режиме работы данного пользователя. Поэтому использовать возможность запуска в пакетном режиме лучше всего внешними средствами, которые могут проанализировать результат выполнения необходимого действия и при необходимости запустить его снова.

Выполнение регламентных операций в режиме запуска "1С:Предприятие"

В некоторых случаях необходимо организовать выполнение определенных действий в режиме запуска "1С:Предприятие" без участия пользователя. Одним из путей решения этой задачи является использование технологии Ole-Automation. Однако эту же задачу можно решить и другим способом. В методической конфигурации данная задача реализована на примере организации регламентной выгрузки прайс-листа в Интернет. Для этого у обработки "ПрайсВИнтернет" в процедуре "ПриОткрытии" предусмотрена возможность выполнения выгрузки в пакетном режиме в каталог, переданный в качестве параметра при открытии формы обработки средствами встроенного языка. В глобальном модуле предусмотрен запуск обработки "ПрайсВИнтернет" в предопределенной процедуре "ПриНачалеРаботыСистемы". В качестве признака того, что 1С:Предприятие запущено для выполнения регламентных действий выступает файл с именем "AutoCmd.txt", располагающийся в каталоге пользователя. Если при запуске системы данный файл обнаружен, то выполняется анализ его содержимого, выполнение указанных там действий, удаление файла и завершение работы системы. Соответственно чтобы запустить 1С:Предприятие для выполнения регламентных операций достаточно указать в строке запуска того пользователя, у которого в пользовательском  каталоге будет размещаться файл "AutoCmd.txt". Это может быть специально введенный служебный пользователь или любой реальный пользователь.

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

Заметим, что для того, чтобы запуск выполнялся без выдачи диалога выбора информационной базы и диалога авторизации, в строке запуска должен быть указан каталог ИБ, слово "ENTERPRISE", имя пользователя, а также пароль пользователя, если он установлен.

Организованный таким образом регламентный запуск 1С:Предприятия может выполняться различными программами, например, в определенный момент времени. При этом отсутствие файла "AutoCmd.txt" в каталоге пользователя после запуска 1С:Предприятия может являться признаком того, что операция выполнена успешно.

Корректировка существующих движений при изменении структуры регистров

В процессе развития конфигураций разработанных на основе компоненты "Оперативный учет" достаточно часто возникает потребность в изменении структуры регистров. При этом в некоторых случаях встает необходимость внесения определенных значений в движения регистров уже проведенных документов.

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

В  методической конфигурации предлагается методика, реализующая заполнение необходимых данных движений регистров таким образом, что сами движения воспроизводятся полностью. Для этого в конфигурацию включена обработка "ПерепроведениеДокументов". Обработка обходит все проведенные документы и выполняет их перепроведение. Перед проведением документа обработка запоминает все его движения регистров в таблицах значений. В процессе проведения документов вместо обычного алгоритма формирования движений выполняется процедура глобального модуля ("глТехнологическоеПерепроведение"), которая записывает движения, запомненные в таблицах значений. Для реализации данной методики в модуле каждого документа в начале процедуры "ОбработкаПроведения" включен однотипный фрагмент, выполняющий анализ переданного при вызове метода "Провести" параметра и вызов при необходимости процедуры глобального модуля. Для того, чтобы вносить в записываемые движения необходимые изменения, при запоминании каждого движения вызывается процедура "КорректировкаДвижения", в которой выполняется заполнение новых данных регистра (измерений, ресурсов, реквизитов). В приведенном примере в регистр "ТовЗап" введен новый реквизит "Внутреннее", в котором предполагается отмечать движения, отражающие внутренние перемещения товаров. В процедуре "КорректировкаДвижения" значение этого реквизита заполняется числом "1" для документов "Перемещение".

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

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

Сортировка строк документа при печати

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

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

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

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

Переход к журналу документов из формы документа

В 1С:Предприятии не существует штатной возможности перехода из открытой формы документа к журналу документов. В некоторых случаях такая возможность может быть весьма полезна для пользователей. Например, если ввод документа инициализирован с помощью меню или документ открыт как расшифровка отчета и пользователь хочет посмотреть список "соседних" документов.

Для предоставления пользователю такой возможности предлагается методика реализации перехода средствами встроенного языка. В методической конфигурации эта методика реализована в виде процедуры глобального модуля "глПереходКЖурналу". Вызов данной процедуры помещается во все формы документов, в которых существует необходимость перехода к журналу документов. Данная процедура может быть использована в любой конфигурации без изменения.

Так как документ может входить в разные журналы, то данная процедура формирует с помощью объекта "Метаданные" список возможных журналов, и выдает пользователю запрос в виде меню. Далее выполняется открытие выбранного журнала с помощью функции "ОткрытьФорму". Так как дата документа может располагаться вне интервала журнала, то выполняется анализ интервала и при необходимости корректировка его. Далее выполняется активизация документа в открытом журнале. Если документ в форме еще не записан, то  выполняется позиционирование на последний документ в дате вводимого документа или ближайшей предыдущей дате, в который существуют документы.

Завершение работы пользователей с программой по требованию администратора

При реальной эксплуатации 1С:Предприятия в многопользовательском режиме в некоторых случаях возникает необходимость прекратить работу пользователей с информационной базой, например, для выполнения регламентных операций, таких как:  изменение конфигурации, сохранение архивной копии и т.д. Если все пользователи находятся в одном помещении, то это делается достаточно легко. Трудности возникают обычно, если пользователи находятся в различных помещениях.

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

Для реализации проверки необходимости завершения используется периодически вызываемая процедура "ПроверкаНеобходимостиЗавершения", вызываемая процедурой "ПроцессОбработкиОжидания", назначенной функцией "ОбработкаОжидания".

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

выполняется раз в минуту.

Сам признак необходимости завершения хранится в константе "СообщениеНеобходимостиЗавершения" в виде текстового сообщения, которое должно выдаваться пользователям. В некоторых реализациях данного механизма в качестве признака завершения используется файл с определенным именем, располагающийся в каталоге информационной базы.

Включение и выключение признака необходимости завершения выполняется с помощью обработки "ЗавершениеРаботыПользователей", выполняющей модификацию константы "СообщениеНеобходимостиЗавершения".

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

Проверка необходимости завершения выполняется для всех пользователей, кроме тех для которых установлен набор прав "Администратор". Таким образом, администратор будет иметь возможность войти в систему и снять признак необходимости завершения работы пользователей.

Данный механизм в некоторых случаях позволяет выполнить завершение работы даже, если пользователи не работают в текущий момент с программой. Для этого предупреждение с указанным текстом выдается с параметром "Таймаут". Однако процедура, назначенная функцией "ОбработкаОжидания", не будет вызываться, если в текущий момент открыт какой-либо системный модальный диалог, или какая-либо форма открыта модально.

Следует заметить, что завершение работы, выполняется функцией "ЗавершитьРаботуСистемы" в "мягком" режиме. То есть, если у пользователя открыты не записанные объекты (документы, элементы справочников), то пользователю будет предложено записать не сохраненные данные.

Таким образом, предложенный механизм является сервисной возможностью и не может гарантировать обязательного освобождения информационной базы всеми пользователями. Разумеется, более однозначного эффекта можно достичь с помощью средств администрирования локальной сети, но это решение будет сопряжено с опасностью потери данных вводимых пользователем и, в некоторых случаях (при работе с базой данных в формате DBF/CDX), с нарушением целостности информационной базы.

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

Установка стандартного интервала журнала для отдельных категорий пользователей

1С:Предприятие для нового пользователя (впервые запустившему систему с конкретной информационной базой) автоматически устанавливает стандартный интервал просмотра журналов документов, операций и проводок. Эту установку пользователь может затем изменить в режиме настройки параметров (меню "Сервис - Параметры" - закладка "Журналы").

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

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

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

В методической конфигурации пример такой установки реализован в глобальном модуле в процедуре "ПриНачалеРаботыСистемы". С помощью функций "СохранитьЗначение" и "ВосстановитьЗначение" определяется первый вход пользователя в систему, так как затем параметры интервала журнала он будет устанавливать самостоятельно.

Собственно установка начальных значений выполняется функциями "НачалоСтандартногоИнтервала" и "КонецСтандартногоИнтервала". Установка параметров выполняется только для администратора. Предполагается, что для лиц осуществляющих администрирование информационной базы имеет смыслпросматривать все документы. Поэтому в качестве начальной границы интервала выбирается дата начала года первого документа, а в качестве конечной границы - конец текущего года.

Организация быстрой смены пользователем системных установок

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

устанавливаются в конкретной организации.

В качестве примера такой сервисной функции в методической конфигурации реализовано быстрое изменение рабочей даты. Для этого в панель инструментов внесена кнопка "Рабочая дата", которая выполняет редактирование и установку нового значения рабочей даты. Для быстрого вызова данной функции кнопке назначен "Акселератор".

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

Вызов процедур и функций модуля открытой формы

Встроенный язык 1С:Предприятия не допускает вызова процедур и функций модуля формы из другого модуля. Допускается только обращение к атрибутам и методам контекста модуля формы.

В некоторых случаях возникает необходимость вызова некоторого алгоритма модуля формы (процедуры или функции) из другого модуля.

Для решения этой задачи можно использовать следующий прием. В 1С:Предприятии 7.7 в модуле формы может использоваться предопределенная процедура "ПриПовторномОткрытии". Эта процедура вызывается в том случае, если каким-либо способом выполняется открытие уже открытой формы. При чем при повторном открытии функцией "ОткрытьФорму" в модуль формы также как и при первом открытии передается параметр. Эта особенность может быть использована для активизации "снаружи" некоторого алгоритма в модуле открытой формы.

В методической конфигурации данный прием демонстрируется на примере открытия формы расходной накладной с автоматическим открытием подбора (меню "Документ - Расходная накладная с подбором"). Обычными средствами подбор в форме не может быть автоматически вызван непосредственно после открытия документа. Поэтому обычно пользователю необходимо после открытия документа вызывать подбор нажатием соответствующей кнопки. В приведенном примере при открытии нового документа сразу открывается режим подбора. Для реализации автоматического открытия подбора пункт меню вызывает процедуру "ОткрытьНакладнуюСПодбором" в глобальном модуле. В этой процедуре выполняется открытие формы документа "РасхНакл", а затем выполняется повторное открытие с передачей в качестве параметра строки

"Подбор". В модуле формы документа в предопределенной процедуре "ПриПовторномОткрытии" выполняется проверка параметра формы и в случае наличия в параметре строки "Подбор" выполняется активизация подбора.

В приведенной методике важным моментом является то, что при повторном вызове функции "ОткрытьФорму" должна открываться именно та форма, которая уже открыта, так как только в этом случае будет вызвана процедура "ПриПовторномОткрытии". Например, если после первого вызова функции "ОткрытьФорму" документ будет записан, то при втором вызове будет открыта новая форма.

Организация обращения к ранее открывавшимся объектам

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

Механизм обращения к ранее открывавшимся объектам реализован в методической конфигурации. В глобальном модуле ведется список значений "СписокИсторииОбъектов", в котором накапливаются те документы и справочники, которые пользователь открывает в ходе работы. В форме каждого элемента справочника (кроме тех, которые редактируются в списке) и в форме каждого документа в процедурах "ПриОткрытии" и "ПриЗакрытии" выполняется обращение к процедуре "ИсторияОбъектов", расположенной в глобальном модуле. В данной процедуре происходит пополнение списка истории объектов.

Объекты добавляются в начало списка, чтобы при просмотре истории первыми выдавались объекты, к которым обращение выполнялось позже. При добавлении больше 20 объектов, последний с конца объект удаляется, чтобы история не "распухала". Если объект уже содержится в списке, то перед добавлением в

начало предыдущее значение удаляется, чтобы не хранить в списке несколько одинаковых объектов.

Вызов в процедуре "ПриЗакрытии" целесообразен с точки зрения определения в качестве момента последнего обращения к объекту - момента закрытия формы. Кроме того, этот вызов необходим в тех случаях, когда создается новый объект (документ или элемент справочника). В процедуре "ПриОткрытии" новый объект не может быть, разумеется, добавлен в список истории.

Для обращения к истории объектов используется глобальная процедура "ПоказатьИсториюОбъектов". Она вызывается из меню "Сервис", из панели инструментов, а также с помощью клавиши Alt+F

В этой процедуре выполняется выбор объекта из истории с помощью обработки "ПоказИсторииОбъектов", вызываемой в модальном режиме, а также выполняется собственно открытие объекта с помощью функции "ОткрытьФорму". Использование в данном примере обработки, а не стандартного метода  "ВыбратьЗначение" обусловлено исключительно оформительскими возможностями, предоставляемыми обработкой. Например, документы и справочники различаются в таблице значений с помощью пиктограмм.

При окончании сеанса работы пользователя список истории объектов сохраняется. Это позволяет обращаться к истории и в последующих сеансах работы.

Организация работы с историей перехода по группам в форме списка справочника

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

Одной из таких сервисных возможностей является организация работы с историей переходов по группам. Пример реализации этой возможности приводится в методической конфигурации в справочнике "Организации". В форме списка справочника реализовано два различных механизма.

Первый механизм реализует поддержание истории открываемых пользователем групп справочника и возможность перехода к любой группе из истории. Для просмотра истории групп применяется кнопка "История". История групп накапливается в таблице значений и пополняется при смене текущего родителя. В таблице значений запоминается не только текущий родитель, но и текущий элемент в открытой группе, чтобы при обращении к ней установиться на тот же элемент. В истории поддерживаются только уникальные группы. Группы накапливаются в порядке обратном порядку обращению к ним. То есть при вызове истории пользователь будет видеть последние группы, к которым он обращался сверху.

История открываемых групп сохраняется между обращениями к справочнику и между запусками 1С:Предприятия. То есть этот режим может быть использован и для ускорения выбора элементов при вводе документов, особенно для тех пользователей, которые работают обычно с одними и теми же группами элементов.

Второй механизм предоставляет возможность возврата к ранее открытым группам, а также продвижения вперед, после выполнения возврата. Для обращения к этим функциям используются кнопки "Назад" и "Вперед" а также расположенные рядом кнопки, предоставляющие возможность перейти на несколько "шагов" назад и вперед соответственно. Для реализации этого механизма также использована таблица значений, но ее пополнение не вытесняет повторяющиеся группы, полностью сохраняя последовательность переходов выполняемых пользователем. Этот механизм является более сложным, так как обеспечивает поддержание переходов в двух направлениях. Этот режим поддерживается только в пределах работы с текущим окном справочника. Он может быть использован при интенсивной работе со справочником, например, при его реорганизации.

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

Открытие нескольких окон одной и той же формы

1С:Предприятие имеет некоторый предопределенный механизм отслеживания уникальности открытых форм. Для окон редактируемых объектов (документов, элементов справочников, счетов) эта уникальность определяется самим объектом. Например, для документов открывается отдельное окно формы для каждого документа и одно окно для ввода нового документа определенного вида. Для окон других форм уникальность определяется самой формой. То есть, если открывается, например, форма журнала документов то открывается одно окно на одну форму созданную в конфигурации. Если окно данной формы уже открыто, то новое окно не создается, а активизируется уже открытое. Заметим, что это не относится к окнам, открываемым для выбора и подбора. Их уникальность определяется той формой и полем ввода, для которых открыта форма.

В большинстве случаев такой способ определения уникальности окон вполне удобен и позволяет поддерживать приемлемое количество одновременно открытых окон без специальных усилий со стороны разработчика конфигурации. Однако в некоторых случаях у пользователей возникает потребность в одновременной работе с несколькими окнами одной и той же формы. В 1С:Предприятии такая возможность предоставляется при открытии форм средствами встроенного языка. Для этого используется добавление символа "#" к первому параметру функции "ОткрытьФорму".

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

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

Организация фонового выполнения длительных процессов

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

В методической конфигурации предлагается пример организации фонового выполнения перепроведения документов. Для этого предлагается выделить отдельный запуск 1С:Предприятия на отдельном компьютере или на компьютере, который мало используется. Для активизации режима фонового перепроведения предлагается использовать определенное имя пользователя (в данном примере "Диспетчер"). При запуске с этим именем пользователя выполняется инициализация обработки ожидания специальной процедурой в глобальном модуле. В приведенном примере это процедура - "ПроцессОбработкиОжиданияДиспетчера". В ней выполняется анализ текущего положения границы последовательности. Если между границей последовательности и точкой актуальности существуют документы, относящиеся к границе последовательности, то выполняется проведение первого из этих документов. Соответственно граница последовательности сдвигается вперед.

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

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

Средства встроенного языка используемые для создания универсальных алгоритмов

1С:Предприятие 7.7 позволяет разрабатывать алгоритмы работающие независимо от конкретной конфигурации. Например, эта возможность активно используется в дополнительных отчетах и обработках, поставляемых в составе диска ИТС.

Для создания универсальных алгоритмов используются в основном два средства:

1)      Обращение к метаданным.

2)      Обращение к атрибутам объектов встроенного языка по их строковым идентификаторам.

Обращение к метаданным (через объект "Метаданные") позволяет варьировать действия алгоритма в зависимости от структуры метаданных текущей конфигурации. Однако для обращения непосредственно к данным этого недостаточно. Методы практически всех объектов встроенного языка 1С:Предприятия не зависят от структуры метаданных, а атрибуты, наоборот в большей степени определяются структурой метаданных. При написании обычных алгоритмов (ориентированных на конкретную конфигурацию) атрибуты объектов используются в модуле непосредственно. При написании универсальных алгоритмов для обращения к атрибутам следует использовать функции "ПолучитьАтрибут" и "УстановитьАтрибут". Эти функции включены в состав методов практически всех объектов встроенного языка, состав атрибутов которых определяется структурой метаданных.

Например, если нужно обратиться к реквизиту документа по идентификатору реквизита, то нужно написать не "Документ.ПолучитьАтрибут(ИмяАтрибута)", где "ИмяАтрибута" это имя переменной, в которой в виде строки содержится идентификатор реквизита документа.

Методы  "ПолучитьАтрибут" и "УстановитьАтрибут" следует применять именно к тем объектам, у которых необходимо получить значение атрибута. Например, если необходимо написать универсальный алгоритм формирования движений регистров в документе,  то для доступа к регистру по его идентификатору нужно написать "Регистр.ПолучитьАтрибут(ИмяРегистра).ДвижениеПриходВыполнить()" (так как движения могут записываться только атрибутом "Регистр" контекста модуля документа).

Для некоторых объектов метод "УстановитьАтрибут" не поддерживается, так как атрибуты не могут использоваться для присваивания значений. Для некоторых объектов метод "ПолучитьАтрибут" не поддерживается, так как они имеют другие методы для получения необходимого значения по идентификатору. Например, у вида перечисления имеется метод "ЗначениеПоИдентификатору". Однако, для самого глобального атрибута "Перечисление" поддерживается метод "ПолучитьАтрибут", что позволяет перебрать значения перечислений всех видов.

Заметим, что не существует возможности обращаться к значению реквизитов диалога формы по идентификатору, так как реквизиты созданные в форме, не являются частью структуры метаданных. Разумеется, в форме документа существует возможность доступа по идентификатору к реквизитам самого документа (независимо от того, включены они в диалог или нет). Объект "Форма" также имеет функции "ПолучитьАтрибут" и "УстановитьАтрибут". Это позволят обращаться по идентификаторам к его атрибутам, используемым для управления элементами диалога с точки зрения их отображения в форме.

Показ справочника в виде дерева

Стандартные средства 1С:Предаприятия (форма списка  справочника) предоставляют возможность просматривать список элементов по отдельным группам, а также группы справочника в виде дерева. Предлагаемая методика позволяет просматривать справочник в виде единого иерархического дерева, включающего элементы и группы.

Данная техника реализована в методической конфигурации в обработке "ТоварыВВидеДерева". Вызов данной обработки выполняется из колонки "Обработки" главного меню конфигурации.

Для показа справочника используется табличный документ, включенный в форму обработки. При открытии формы в табличный документ выводятся только группы справочника. Двойным щелчком мыши или нажатием клавиши Enter пользователь может раскрыть любую группу или свернуть открытую группу. Для этого используется значение расшифровки табличного документа. После выполнения расшифровки текущая группа запоминается как открытая и выполняется обновление табличного документа. При выводе справочника, для групп запомненных как раскрытые выполняется вывод подчиненных групп и элементов с помощью рекурсивного вызова процедуры "ВывестиГруппу".

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

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

Перестановка документов в журнале в пределах даты

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

В методической конфигурации в форме журнала "Общий" реализован дополнительный сервис перестановки документов. Данная возможность вызывается с помощью кнопки "Изменить время документа". При этом в модуле журнала вызывается процедура "ИзменитьВремяДокумента", в которой пользователю предоставляется выбор варианта перемещения документа. В данной процедуре реализованы наиболее типовые варианты перемещения: перестановка документа за следующий документ и перед предыдущим документом, а  также перенос документа в начало и в конец дня.  В качестве стандартного смещения документа выбрана одна минута. Если документы лежат более плотно, то при перемещении документу устанавливается среднее время между двумя соседними документами. В этой процедуре подбор времени осуществляется с дискретностью до секунды и не выполняется перестановка документов, если они расположены с интервалом меньше двух секунд. Хотя в 1С:Предприятии допускается, расположение двух и более документов в одной секунде, но в этом случае порядок следования документов в пределах секунды  не может быть установлен принудительно, что не позволяет управлять порядком следования документов.

Если документ проведен, то перед переносом выполняется отмена проведения, а после изменения времени документ вновь проводится.

Групповые операции над выбранными документами

Одной из возможных сервисных функций, которую можно реализовать с помощью средств конфигурирования 1С:Предприятия является отметка объектов в формах списков и их групповая обработка.

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

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

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

При выполнении отметки всех элементов и инвертирования отметок выбираются документы соответствующие текущему интервалу и отбору журнала.

Реализованный алгоритм является универсальным и может использоваться в других журналах. Однако при переносе алгоритма в другой журнал необходимо изменить идентификатор журнала, присваиваемый переменной "ВидЖурнала".

Разумеется, приведенный пример имеет потенциальное ограничение по количеству документов отмечаемых командами "Отметить все" или "Инвертировать", так как список отмеченных документов хранится в оперативной памяти. В приведенном примере не используется возможность отметки всех документов и инвертирования списка за счет запоминания списка "неотмеченных" документов. Это объясняется тем, что документы могут вводиться другими пользователями и поэтому нельзя однозначно считать признаком "отмеченности" отсутствие в списке "неотмеченных". При использовании данной возможности в монопольном режиме может быть использован алгоритм запоминания списка "неотмеченных", хотя на практике очевидно отметка большого количества документов не будет использоваться широко.

Автоматическое открытие периода оперативных итогов

При самостоятельном освоении конфигурации 1С:Предприятия использующей компоненту "Оперативный учет" для работников организации определенную трудность может представлять необходимость открытия в начале месяца периода оперативных итогов.

В методической конфигурации приводится пример алгоритма упрощающего выполнение этой регламентной операции. В глобальном модуле в процедуре "ПриНачалеРаботыСистемы" выполняется сравнение текущей даты и даты точки актуальности (ТА). Если текущая дата располагается в следующем месяце, по отношению к дате ТА, то пользователю предлагается выполнить перенос ТА.

Если программа запущена не в монопольном режиме, то предлагается завершить запуск программы и запустить ее в монопольном режиме.

Разумеется, данный прием имеет смысл использовать только при регулярной (непрерывной) работе пользователей. При выполнении отладки конфигурации или принудительном переносе ТА назад данная возможность практически не имеет смысла.

Кроме того, следует учитывать, что описанный алгоритм обеспечивает работу только при периодичности хранения оперативных итогов "Месяц". При другой периодичности в алгоритме следует учесть более частую смену периода хранения оперативных итогов. Соответственно алгоритм необходимо изменять при смене периодичности хранения итогов.


Hosted by uCoz