1С-Предприятие. Документация. Рекомендации по конфигурированию и администрированию

Модальный вызов позволяет после окончания ввода нового элемента добавить его в список значений, отображающий в форме справочника-владельца подчиненные элементы.
 Особенности.
При вызове формы в модальном режиме система автоматически переключает вызываемые в дальнейшем формы в модальный режим. Например, если в форме, открытой модально выполняется выбор значения реквизита из справочника, то справочник для выбора тоже открывается модально. Если в процессе выбора добавляется новый элемент, то и ввод нового элемента также выполняется в модальном режиме.
При открытии формы в модальном режиме с помощью функции ОткрытьФормуМодально в отличии от вызова метода ОткрытьФорму не возможно обращение к контексту формы после выполнения функции, так как управление будет передано модулю вызвавшему данную функцию только после закрытия формы.
Если форма открыта в модальном режиме, то вызов в ней функции ОткрытьФорму будет выполняться аналогично вызову функции  ОткрытьФормуМодально.
 Ограничения.
В модальном режиме работы системы поддерживается ограниченный набор возможностей. Многие механизмы 1С:Предприятия не имеют возможности отрабатывать в модальном режиме в качестве модального окна. Например, в этом режиме фактически не может быть использован механизм подбора, а также не имеет смысла открытие табличного и текстового документов. Не функционируют в модальном режиме такие системные формы, как список констант, список истории периодического значения и т.д. В модальной форме в процедуре ПриНачалеВыбораЗначения не могут быть использованы процедуры ОткрытьФорму и ОткрытьПодбор для инициации выбора значения элемента диалога.
 Рекомендации.
Если в конфигурации используется открытие форм в модальном режиме, то это обстоятельство следует учитывать при разработке функциональности форм. Так как, находясь в модальном режиме система автоматически устанавливает модальный режим для открываемых форм, то особенности работы в модальном режиме следует учитывать во всех формах, которые могут открыться модально.
Для определения модального режима следует использовать метод Форма.МодальныйРежим. Рекомендуется в формах, вызванных модально ограничить функциональность. Прежде всего, разумеется, целесообразно отключить вызов таких режимов, как подбор или печать.
Кроме того, если в форме используется вызов других форм функцией ОткрытьФорму, то  следует учесть изменение поведения этой функции, так как она в модальном режиме реально будет выполняться аналогично вызову функции  ОткрытьФормуМодально.
Рекомендуется также ограничить глубину проникновения модального режима, то есть отключить вызов из открытой модально формы других форм, кроме тех которые действительно необходимы в этом режиме. Это позволит ограничить круг форм, в которых необходимо будет учитывать особенности работы в модальном режиме.
Проектирование форм, ориентированных на работу пользователя с клавиатурой Не секрет, что, не смотря на бурное развитие интерфейсных решений ориентированных на работу пользователя с мышью, область экономических программ остается во многом весьма консервативной, особенно в части режимов ориентированных на массовый ввод информации. В этих режимах обычно использование клавиатуры намного эффективнее, чем управление мышью. Яркими примерами таких режимов могут служить интерфейсы, ориентированные на продавцов, менеджеров сервисных центров и другой персонал, выполняющий регулярные однотипные операции, доводимые до автоматизма. Очевидно, что работать с клавиатурой можно, практически не глядя на экран, а с мышью нельзя.
Средства 1С:Предприятия, предоставляемые специалисту, осуществляющему конфигурирование интерфейса рассчитаны на возможность создания интерфейса эффективно управляемого как мышью так и клавиатурой.
Заметим, что сама возможность выполнения большинства действий с помощью клавиауры, которая реализуется в большинстве Windows-интерфейсов, еще не вляется решением, претендующим на эффективность. Часто возможность работы с клавиатурой предоставляется как запасной вариант, причем не вполне удобный, и в большинстве случаев это вполне оправдано.
При разработке интерфейсов (меню, форм) конфигурации 1С:Предприятия следует рассмотреть каждый режим с точки зрения интенсивности работы с ним  пользователями.
В режимах, которые используются эпизодически (например, настройка аналитического отчета о движении товаров) основное внимание при разработке интерфейса следует уделить удобству освоения данного режима пользователем. Для этого можно использовать наглядно расположенные элементы управления, снабженные комментариями, кнопки, надписи которых понятно отражают их назначение, дополнительные надписи поясняющие выбранные в данный момент установки и т.д. Очевидно, что в данных режимах, скорее всего, все действия будут выполняться мышью.
Однако отдельно следует выбрать режимы, которые будут интенсивно использоваться персоналом для ввода информации. Прежде всего, это формы первичных документов тех видов, которые составляют основной объем операций предприятия. В отдельных случаях это могут быть формы элементов справочников, интенсивно пополняемых в текущей работе. Для таких режимов следует уделить особое внимание проектированию формы с точки зрения минимизации действий пользователя и возможности выполнения всех действий с клавиатуры. При внедрении данной конфигурации, разумеется, следует провести обучение пользователей с точки зрения быстрого ввода данных.
Приведем набор рекомендаций, которые могут быть использованы для разработки форм, ориентированных на массовый ввод данных.
Прежде всего, вызов режима массового ввода данных должен выполняться в одно касание. В методической конфигурации ввод документа Расходная накладная может быть вызван и из меню, и кнопкой панели инструментов и клавишей (F12). Причем для кнопки панели инструментов использована возможность текстового образа и в ней же отражается название клавиши, вызывающей данное действие.
В отдельных случаях можно с помощью механизма обработки ожидания в глобальном модуле организовать автоматический ввод документов. В этом случае форма ввода нового документа будет открываться автоматически после окончания ввода предыдущего документа. Пример организации автоматического ввода документа Расходная накладная содержится в методической конфигурации. Автоматический ввод документов организуется при помощи функции ОбработкаОжидания.
При проектировании самой формы ввода следует иметь ввиду, что формы 1С:Предприятия ориентированы на последовательное заполнение данных с использование клавиши Enter. В отличии от клавиш Tab и Shift-Tab, которые стандартным для Windows способом переключают курсор между полями формы, клавиша Enter воспринимается системой как окончание ввода данных в текущем поле и переход к вводу следующего поля. При этом система анализирует признак поля Пропускать при вводе. В качестве следующего поля ввода выбирается то, которое не имеет такого признака. Кроме того, для ускорения ввода система использует признак поля диалога Авто-выбор. Он автоматически инициирует выбор данных полей типа Справочник, Документ, Перечисление при переходе к ним в порядке последовательного заполнения данных формы, если значения полей еще не заполнены. Для полей, которые могут оставаться пустыми и заполняются редко этот признак можно отключить.
Для минимизации действий пользователя при вводе данных следует:
· автоматически заполнить все данные, которые возможно;
· организовать последовательность заполнения полей таким образом, чтобы курсор устанавливался только на тех полях, которые необходимо заполнять;
· предусмотреть удобное окончание заполнения формы.
Автоматическое заполнение данных должно выполняться для тех полей, значения  которых не изменяются или редко изменяются при вводе документов конкретным пользователем. Для автоматической подстановки данных могут быть использованы константы, в случае если для всех пользователей данные можно заполнить единым образом, например, основной склад, если практически все расходные документы выписываются с одного склада. Если склад является постоянным для пользователя, а пользователи выписывают товары с разных складов, то следует использовать функции СохранитьЗначение и ВосстановитьЗначение для запоминания значений полей постоянных для
конкретного пользователя.
Последовательность ввода данных регулируется порядком обхода элементов диалога и значениями признака Пропускать при вводе. Порядок обхода элементов диалога можно установить таким образом, чтобы первым элементом в порядке обхода было первое поле, значение которого будет обычно вводиться пользователем при массовом вводе. Так, например, номер и дата документа заполняются системой автоматически и поэтому в документе Расходная накладная  методической конфигурации в качестве первого элемента выступает Дата, чтобы после ее подтверждения клавишей Enter автоматически бы открылось окно выбора покупателя. Признак Пропускать при вводе следует установить у тех полей, значения которых обычно заполняются автоматически (системой или алгоритмом модуля формы). В приведенном примере такой признак установлен у полей Склад, Номер строки, Сумма.
При заполнении табличной части документа для удобства ввода большого количества строк может быть использован признак Автоматический ввод новой строки, устанавливаемый для многострочной части диалога формы. При его использовании оператор не должен будет инициировать ввод новой строки, но должен будет отказаться от  ввода последней строки. При заполнении реквизитов табличной части документа также следует установить признаки Пропускать при вводе так, чтобы минимизировать действия пользователя.
Более эффективным средством заполнения табличной части является организация подбора. Очевидно, вызов подбора в форме также должен выполняться не только кнопкой, но и клавишами. Вызов режима подбора клавишами может быть осуществлен либо удобным расположением копки подбора в последовательности обхода элементов диалога (чтобы данная кнопка становилась активной после заполнения шапки документа), либо с помощью символа в заголовке кнопки (данный символ устанавливает букву, которая будет использоваться с клавишей Alt для быстрого вызова действий кнопки).
Наиболее эффективным способом вызова режимов подбора или печати документа с помощью клавиатуры является назначение кнопке функциональной клавиши (закладка Команда свойств кнопки). При этом рекомендуется в названии кнопки отразить возможность использования функциональной клавиши. В расходной накладной методической конфигурации эта возможность реализована для вызова группового подбора.
Особым способом заполнения табличной части документа является использование сканера штрих-кодов. Данный метод весьма эффективен при наличии соответствующего оборудования и дисциплины штрих-кодирования в организации.
Окончание ввода данных в форме обычно выполняется кнопкой (например, ОК). Если, последовательность ввода достаточно четко определена, то можно рекомендовать расположить кнопку, которой обычно заканчивается ввод в порядке обхода сразу после всех данных, которые будут в водиться. В этом случае, после вода всех данных она автоматически станет активной и нажатие Enter приведет к записи данных и закрытию формы.
Можно также рекомендовать использовать для кнопки ОК признак  кнопки Кнопка по умолчанию (закладка Команда свойств кнопки). В этом случае, пользователь сможет в любой момент вызвать действие, предусмотренное данной кнопкой, нажатием клавиш Ctrl+Enter).
Если заполнение табличной части выполняется в основном с помощью сканера штрих-кодов, то рекомендуется кнопку, которая осуществляет запись данных и закрытие формы, расположить в порядке обхода сразу после реквизитов шапки, которые будут обычно вводиться, а если таковых нет, то первой в порядке обхода.
Функции, которые предусмотрены в кнопке, которая обычно используется для окончания ввода информации, следует выбрать таким образом, чтобы минимизировать количество задаваемых системой вопросов. Например, при массовом вводе можно убрать знаки ? из строки действий кнопки, чтобы запись и проведение документа выполнялись без запроса подтверждения.
Часть параметров, которые могут влиять на скорость ввода информации не может быть определена в конфигурации, а устанавливается каждым пользователем. Администратору системы рекомендуется установить самому или объяснить пользователем назначение параметров с тем, чтобы не производились лишние действия. В основном это касается группы параметров Оперативный учет, установка которых позволяет избежать различных вопросов системы при записи документов. Например, установка параметра Новые документы записывать …. С текущим временем позволяет избежать
запроса времени для документов, которые вводятся в текущую дату. С помощью других параметров можно избежать вопросов о проведении документа с изменением времени.
Заметим, что при особых требованиях к скорости и удобству ввода конкретного документа в конфигурации можно предусмотреть и другие решения, ориентированные на конкретную задачу. Например, при открытии формы могут быть последовательно запрошены необходимые параметры непосредственно в процедуре ВводНового.
Размещение в формах дополнительных элементов упрощающих работу пользователей Размещение в формах дополнительных элементов упрощающих работу пользователей.
Одной из важных целей, которые стоят перед разработчиком при проектировании диалога формы, является обеспечение быстрого освоения начинающими пользователями необходимых приемов работы в конкретной форме.
Приведем один из наиболее типичных примеров. Для элементов формы, значения которых выбираются из списков (значений типа Справочник, Документ, Перечисление и т.д.), в некоторых случаях одним из возможных действий пользователя может являться очистка значения, например, указание  пустого значения в поле Склад. Замечено, что пользователи обычно тратят определенное время на поиск возможности очистки значения в главном меню или с помощью клавиатуры. В таких случаях при проектировании диалога формы можно рекомендовать размещать рядом с элементами диалога, которые могут принимать пустые значение, кнопки, выполняющие очистку значения. Обычно такие кнопки создают с символом Х вместо заголовка. В некоторых случаях, можно рекомендовать вместо символа Х в заголовке указать строку,
соответствующую тому смыслу, который вкладывается в пустое значение очищаемого поля. Например, в кнопке отчета, предназначенной для очистки поля Склад, можно в заголовке кнопки указать По всем складам.
В тех случаях, когда весьма важные доступные в форме системные действия с трудом осваиваются пользователями, можно рекомендовать размещать в формах кнопки дублирующие средствами языка выполнение системных функций. Например, в форме справочника могут размещаться кнопки для вызова подчиненных справочников или истории периодических реквизитов. В формах документов и журналов могут размещаться кнопки для ввода документов на основании.
Особенности работы с формами Передача параметров  в форму При передаче параметров в форму в функциях ОткрытьФорму и ОткрытьПодбор не следует передавать в качестве параметра непосредственно атрибуты текущего контекста (например, значение реквизита документа в форме документа или значение реквизита диалога). Функции ОткрытьФорму и ОткрытьПодбор возвращают контекст формы в тот же параметр, в который передается параметр формы,   что приводит к очистке значения переданного реквизита. Для передачи следует параметра использовать выражение или промежуточную переменную.
Особенность использования многослойных форм При проектировании многослойных форм следует учитывать, что для показа элементов диалога располагающихся на видимых слоях система использует признак видимости  элемента диалога. Поэтому после переключения слоев следует отключить средствами встроенного языка видимость тех элементов, которые принадлежат видимому слою, но должны быть невидимыми, включая и те элементы, видимость которых отключена в свойствах элемента диалога.
Работа с модальными формами В 1С:Предприятии 7.7 появилась возможность открытия форм в модальном режиме. Для этого используется функция ОткрытьФормуМодально или признак модального открытия в настройке команды пользовательского интерфейса. В основном в 1С:Предприятии предполагается многооконный режим работы с формами. Модальное открытие форм является специальным режимом и его следует использовать для решения конкретных задач, в которых это необходимо.
В методической конфигурации модальное открытие формы демонстрируется на примере вызова обработки ВосстановлениеПоследовательностей.
 Назначение.
Прежде всего, модальный режим используется в тех случаях, когда необходимо исключить возможность вызова пользователем каких либо других режимов до окончания работы в данной форме. Например, в модальном режиме может вызываться форма, выполняющая регламентную обработку или форма, запрашивающая некоторые данные при старте системы, если необходимо, чтобы данные были введены до выполнения каких либо других действий.
Другой причиной для вызова формы в модальном режиме может являться необходимость обработки в алгоритме модуля данных, введенных пользователем в вызываемой форме. Например, в типовых конфигурациях модальные обработки используются для ввода элемента подчиненного справочника из формы справочника-владельца. Модальный вызов позволяет после окончания ввода нового элемента добавить его в список значений, отображающий в форме справочника-владельца подчиненные элементы.
 Особенности.
При вызове формы в модальном режиме система автоматически переключает вызываемые в дальнейшем формы в модальный режим. Например, если в форме, открытой модально выполняется выбор значения реквизита из справочника, то справочник для выбора тоже открывается модально. Если в процессе выбора добавляется новый элемент, то и ввод нового элемента также выполняется в модальном режиме.
При открытии формы в модальном режиме с помощью функции ОткрытьФормуМодально в отличии от вызова метода ОткрытьФорму не возможно обращение к контексту формы после выполнения функции, так как управление будет передано модулю вызвавшему данную функцию только после закрытия формы.
Если форма открыта в модальном режиме, то вызов в ней функции ОткрытьФорму будет выполняться аналогично вызову функции  ОткрытьФормуМодально.
 Ограничения.
В модальном режиме работы системы поддерживается ограниченный набор возможностей. Многие механизмы 1С:Предприятия не имеют возможности отрабатывать в модальном режиме в качестве модального окна. Например, в этом режиме фактически не может быть использован механизм подбора, а также не имеет смысла открытие табличного и текстового документов. Не функционируют в модальном режиме такие системные формы, как список констант, список истории периодического значения и т.д. В модальной форме в процедуре ПриНачалеВыбораЗначения не могут быть использованы процедуры ОткрытьФорму и ОткрытьПодбор для инициации выбора значения элемента диалога.
 Рекомендации.
Если в конфигурации используется открытие форм в модальном режиме, то это обстоятельство следует учитывать при разработке функциональности форм. Так как, находясь в модальном режиме система автоматически устанавливает модальный режим для открываемых форм, то особенности работы в модальном режиме следует учитывать во всех формах, которые могут открыться модально.
Для определения модального режима следует использовать метод Форма.МодальныйРежим. Рекомендуется в формах, вызванных модально ограничить функциональность. Прежде всего, разумеется, целесообразно отключить вызов таких режимов, как подбор или печать.
Кроме того, если в форме используется вызов других форм функцией ОткрытьФорму, то  следует учесть изменение поведения этой функции, так как она в модальном режиме реально будет выполняться аналогично вызову функции  ОткрытьФормуМодально.
Рекомендуется также ограничить глубину проникновения модального режима, то есть отключить вызов из открытой модально формы других форм, кроме тех которые действительно необходимы в этом режиме. Это позволит ограничить круг форм, в которых необходимо будет учитывать особенности работы в модальном режиме.
Проектирование форм, ориентированных на работу пользователя с клавиатурой Не секрет, что, не смотря на бурное развитие интерфейсных решений ориентированных на работу пользователя с мышью, область экономических программ остается во многом весьма консервативной, особенно в части режимов ориентированных на массовый ввод информации. В этих режимах обычно использование клавиатуры намного эффективнее, чем управление мышью. Яркими примерами таких режимов могут служить интерфейсы, ориентированные на продавцов, менеджеров сервисных центров и другой персонал, выполняющий регулярные однотипные операции, доводимые до автоматизма. Очевидно, что работать с клавиатурой можно, практически не глядя на экран, а с мышью нельзя.
Средства 1С:Предприятия, предоставляемые специалисту, осуществляющему конфигурирование интерфейса рассчитаны на возможность создания интерфейса эффективно управляемого как мышью так и клавиатурой.
Заметим, что сама возможность выполнения большинства действий с помощью клавиауры, которая реализуется в большинстве Windows-интерфейсов, еще не вляется решением, претендующим на эффективность. Часто возможность работы с клавиатурой предоставляется как запасной вариант, причем не вполне удобный, и в большинстве случаев это вполне оправдано.
При разработке интерфейсов (меню, форм) конфигурации 1С:Предприятия следует рассмотреть каждый режим с точки зрения интенсивности работы с ним  пользователями.
В режимах, которые используются эпизодически (например, настройка аналитического отчета о движении товаров) основное внимание при разработке интерфейса следует уделить удобству освоения данного режима пользователем. Для этого можно использовать наглядно расположенные элементы управления, снабженные комментариями, кнопки, надписи которых понятно отражают их назначение, дополнительные надписи поясняющие выбранные в данный момент установки и т.д. Очевидно, что в данных режимах, скорее всего, все действия будут выполняться мышью.
Однако отдельно следует выбрать режимы, которые будут интенсивно использоваться персоналом для ввода информации. Прежде всего, это формы первичных документов тех видов, которые составляют основной объем операций предприятия. В отдельных случаях это могут быть формы элементов справочников, интенсивно пополняемых в текущей работе. Для таких режимов следует уделить особое внимание проектированию формы с точки зрения минимизации действий пользователя и возможности выполнения всех действий с клавиатуры. При внедрении данной конфигурации, разумеется, следует провести обучение пользователей с точки зрения быстрого ввода данных.
Приведем набор рекомендаций, которые могут быть использованы для разработки форм, ориентированных на массовый ввод данных.
Прежде всего, вызов режима массового ввода данных должен выполняться в одно касание. В методической конфигурации ввод документа Расходная накладная может быть вызван и из меню, и кнопкой панели инструментов и клавишей (F12). Причем для кнопки панели инструментов использована возможность текстового образа и в ней же отражается название клавиши, вызывающей данное действие.
В отдельных случаях можно с помощью механизма обработки ожидания в глобальном модуле организовать автоматический ввод документов. В этом случае форма ввода нового документа будет открываться автоматически после окончания ввода предыдущего документа. Пример организации автоматического ввода документа Расходная накладная содержится в методической конфигурации. Автоматический ввод документов организуется при помощи функции ОбработкаОжидания.
При проектировании самой формы ввода следует иметь ввиду, что формы 1С:Предприятия ориентированы на последовательное заполнение данных с использование клавиши Enter. В отличии от клавиш Tab и Shift-Tab, которые стандартным для Windows способом переключают курсор между полями формы, клавиша Enter воспринимается системой как окончание ввода данных в текущем поле и переход к вводу следующего поля. При этом система анализирует признак поля Пропускать при вводе. В качестве следующего поля ввода выбирается то, которое не имеет такого признака. Кроме того, для ускорения ввода система использует признак поля диалога Авто-выбор. Он автоматически инициирует выбор данных полей типа Справочник, Документ, Перечисление при переходе к ним в порядке последовательного заполнения данных формы, если значения полей еще не заполнены. Для полей, которые могут оставаться пустыми и заполняются редко этот признак можно отключить.
Для минимизации действий пользователя при вводе данных следует:
· автоматически заполнить все данные, которые возможно;
· организовать последовательность заполнения полей таким образом, чтобы курсор устанавливался только на тех полях, которые необходимо заполнять;
· предусмотреть удобное окончание заполнения формы.
Автоматическое заполнение данных должно выполняться для тех полей, значения  которых не изменяются или редко изменяются при вводе документов конкретным пользователем. Для автоматической подстановки данных могут быть использованы константы, в случае если для всех пользователей данные можно заполнить единым образом, например, основной склад, если практически все расходные документы выписываются с одного склада. Если склад является постоянным для пользователя, а пользователи выписывают товары с разных складов, то следует использовать функции СохранитьЗначение и ВосстановитьЗначение для запоминания значений полей постоянных для
конкретного пользователя.
Последовательность ввода данных регулируется порядком обхода элементов диалога и значениями признака Пропускать при вводе. Порядок обхода элементов диалога можно установить таким образом, чтобы первым элементом в порядке обхода было первое поле, значение которого будет обычно вводиться пользователем при массовом вводе. Так, например, номер и дата документа заполняются системой автоматически и поэтому в документе Расходная накладная  методической конфигурации в качестве первого элемента выступает Дата, чтобы после ее подтверждения клавишей Enter автоматически бы открылось окно выбора покупателя. Признак Пропускать при вводе следует установить у тех полей, значения которых обычно заполняются автоматически (системой или алгоритмом модуля формы). В приведенном примере такой признак установлен у полей Склад, Номер строки, Сумма.
При заполнении табличной части документа для удобства ввода большого количества строк может быть использован признак Автоматический ввод новой строки, устанавливаемый для многострочной части диалога формы. При его использовании оператор не должен будет инициировать ввод новой строки, но должен будет отказаться от  ввода последней строки. При заполнении реквизитов табличной части документа также следует установить признаки Пропускать при вводе так, чтобы минимизировать действия пользователя.
Более эффективным средством заполнения табличной части является организация подбора. Очевидно, вызов подбора в форме также должен выполняться не только кнопкой, но и клавишами. Вызов режима подбора клавишами может быть осуществлен либо удобным расположением копки подбора в последовательности обхода элементов диалога (чтобы данная кнопка становилась активной после заполнения шапки документа), либо с помощью символа в заголовке кнопки (данный символ устанавливает букву, которая будет использоваться с клавишей Alt для быстрого вызова действий кнопки).
Наиболее эффективным способом вызова режимов подбора или печати документа с помощью клавиатуры является назначение кнопке функциональной клавиши (закладка Команда свойств кнопки). При этом рекомендуется в названии кнопки отразить возможность использования функциональной клавиши. В расходной накладной методической конфигурации эта возможность реализована для вызова группового подбора.
Особым способом заполнения табличной части документа является использование сканера штрих-кодов. Данный метод весьма эффективен при наличии соответствующего оборудования и дисциплины штрих-кодирования в организации.
Окончание ввода данных в форме обычно выполняется кнопкой (например, ОК). Если, последовательность ввода достаточно четко определена, то можно рекомендовать расположить кнопку, которой обычно заканчивается ввод в порядке обхода сразу после всех данных, которые будут в водиться. В этом случае, после вода всех данных она автоматически станет активной и нажатие Enter приведет к записи данных и закрытию формы.
Можно также рекомендовать использовать для кнопки ОК признак  кнопки Кнопка по умолчанию (закладка Команда свойств кнопки). В этом случае, пользователь сможет в любой момент вызвать действие, предусмотренное данной кнопкой, нажатием клавиш Ctrl+Enter).
Если заполнение табличной части выполняется в основном с помощью сканера штрих-кодов, то рекомендуется кнопку, которая осуществляет запись данных и закрытие формы, расположить в порядке обхода сразу после реквизитов шапки, которые будут обычно вводиться, а если таковых нет, то первой в порядке обхода.
Функции, которые предусмотрены в кнопке, которая обычно используется для окончания ввода информации, следует выбрать таким образом, чтобы минимизировать количество задаваемых системой вопросов. Например, при массовом вводе можно убрать знаки ? из строки действий кнопки, чтобы запись и проведение документа выполнялись без запроса подтверждения.
Часть параметров, которые могут влиять на скорость ввода информации не может быть определена в конфигурации, а устанавливается каждым пользователем. Администратору системы рекомендуется установить самому или объяснить пользователем назначение параметров с тем, чтобы не производились лишние действия. В основном это касается группы параметров Оперативный учет, установка которых позволяет избежать различных вопросов системы при записи документов. Например, установка параметра Новые документы записывать …. С текущим временем позволяет избежать
запроса времени для документов, которые вводятся в текущую дату. С помощью других параметров можно избежать вопросов о проведении документа с изменением времени.
Заметим, что при особых требованиях к скорости и удобству ввода конкретного документа в конфигурации можно предусмотреть и другие решения, ориентированные на конкретную задачу. Например, при открытии формы могут быть последовательно запрошены необходимые параметры непосредственно в процедуре ВводНового.
Размещение в формах дополнительных элементов упрощающих работу пользователей Размещение в формах дополнительных элементов упрощающих работу пользователей.
Одной из важных целей, которые стоят перед разработчиком при проектировании диалога формы, является обеспечение быстрого освоения начинающими пользователями необходимых приемов работы в конкретной форме.
Приведем один из наиболее типичных примеров. Для элементов формы, значения которых выбираются из списков (значений типа Справочник, Документ, Перечисление и т.д.), в некоторых случаях одним из возможных действий пользователя может являться очистка значения, например, указание  пустого значения в поле Склад. Замечено, что пользователи обычно тратят определенное время на поиск возможности очистки значения в главном меню или с помощью клавиатуры. В таких случаях при проектировании диалога формы можно рекомендовать размещать рядом с элементами диалога, которые могут принимать пустые значение, кнопки, выполняющие очистку значения. Обычно такие кнопки создают с символом Х вместо заголовка. В некоторых случаях, можно рекомендовать вместо символа Х в заголовке указать строку,
соответствующую тому смыслу, который вкладывается в пустое значение очищаемого поля. Например, в кнопке отчета, предназначенной для очистки поля Склад, можно в заголовке кнопки указать По всем складам.
В тех случаях, когда весьма важные доступные в форме системные действия с трудом осваиваются пользователями, можно рекомендовать размещать в формах кнопки дублирующие средствами языка выполнение системных функций. Например, в форме справочника могут размещаться кнопки для вызова подчиненных справочников или истории периодических реквизитов. В формах документов и журналов могут размещаться кнопки для ввода документов на основании.

Организация в справочниках определенного порядка элементов

- в ряде случаев целесообразно вынести вычисляемое выражение из колонки в текстовый элемент шапки, чтобы вычисление выполнялось не по каждой строке, а только по текущей;
- рекомендуется не включать обращение к итогам непосредственно в выражение элемента диалога, а вызывать в формуле функцию модуля;
- при получении итогов рекомендуется выполнять проверку является ли текущий элемент группой и не обращаться к итогам по группе (метод ЭтоГруппа() можно использовать непосредственно без обращения к текущему элементу -  см. пример в методической конфигурации в модуле формы списка ДляПодбораСписком  справочника Товары в функции ТекущийОстаток );
- в ряде случаев рекомендуется предусмотреть в форме отключение вывода итогов, чтобы пользователи могли регулировать  производительность работы со справочником, для этого в функциях следует анализировать значение включенного в диалог формы флажка;
- при выборе способа получения итогов следует учитывать затраты системы на получение необходимых данных, например, получение остатка регистра с помощью метода СводныйОстаток может существенно зависеть с точки зрения производительности от количества реально существующих остатков, суммируемых данным методом.
Организация в справочниках определенного порядка элементов В некоторых случаях возникает потребность организовать в справочниках определенный порядок следования элементов, который не является алфавитной последовательностью наименований или другого реквизита. В методической конфигурации эта возможность демонстрируется на примере справочника Подразделения. Он организован таким образом, что при его заполнении можно расставить элементы в необходимом порядке, например, согласно штатному расписанию.
Для реализации данной задачи в справочнике создан числовой реквизит Порядок с признаком Сортировка и с установкой его использования и для групп и для элементов. Кроме того, для данного справочника отключен признак Размещать группы сверху, чтобы  порядок следования можно было задавать для элементов и групп в единой последовательности.
В форме элемента справочника при создании нового элемента вызывается функция определяющая максимальное значение реквизита Порядок в той группе, в которую вводится элемент. Новому элементу присваивается порядок на 100 больший максимального из существующих. Автоматическая расстановка порядка через 100 позволяет затем изменять порядок следования простым редактированием значения реквизита Порядок в форме элемента справочника.
В форме списка при открытии устанавливается режим сортировки списка соответствующий значениям реквизита Порядок. Таким образом пользователь будет видеть список в необходимом порядке.
Для удобства перестановки элементов в форму включены кнопки Вверх и Вниз. Они вызывают поцедуру, выполняющую изменение значений реквизита Порядок таким образом, что текущий элемент перемещается в порядке следования соответственно назад или вперед.
В данной процедуре выполняется обход элементов подчиненных текущему родителю и они помещаются в список значений. Далее в списке значений выполняется сдвиг текущего элемента в нужном направлении.   Затем выполняется изменение значений реквизита Порядок у тех элементов, у которых он изменился.
Для обеспечении целостности данного действия оно выполняется в единой транзакции.
Для обеспечения контроля изменения заблокированного другим пользователем объекта используется обработка ошибочных ситуаций.
Открытие формы списка подчиненного справочника При работе пользователей с подчиненными справочниками иногда возникает потребность в одновременном открытии нескольких форм списка подчиненного справочника для различных элементов справочника - владельца. Такой штатной возможности в 1С:Предприятии не существует. После открытия формы списка  подчиненного справочника, в ней будет автоматически изменяться владелец при смене текущей позиции в форме списка справочника - владельца. Однако, при конфигурировании системы существует возможность организовать открытие нескольких форм списка подчиненного справочника средствами встроенного языка.
В методической конфигурации такая возможность демонстрируется на примере открытия справочника Договора из формы списка справочника Организации. Для этого в форме списка справочника - владельца (Организации) создана кнопка, вызывающая процедуру, которая выполняет открытие формы списка подчиненного справочника Договора для текущей организации (на которой установлен курсор). Открытие формы выполняется с помощью функции ОткрытьФорму. Добавление к первому параметру символа # и строкового представления элемента справочника - владельца обеспечивает открытие уникальной формы именно для данного элемента. То есть при повторном выполнении открытия для данного элемента активизируется уже открытая форма, а для другого элемента - откроется новая. После выполнения открытия формы, у ее контекста вызывается метод ИспользоватьВладельца, которому передается текущий элемент справочника - владельца и признак того, что владелец не должен меняться автоматически при смене текущей строки в форме списка справочника - владельца. Таким образом, если мы открываем форму списка справочника Договора используя специальную кнопку, то открывается форма для просмотра именно договоров подчиненных текущей организации, и таких форм может быть открыто несколько. При других вариантах открытия справочника Договора (например, из главного меню) будет сохраняться традиционное поведение формы списка. То есть, будет открываться все время одна и та же форма, и текущий владелец в ней будет меняться при смене текущей строки в форме списка справочника Организации.
          Рекомендации по использованию периодических реквизитов Рекомендации по использованию периодических реквизитов справочников Использование периодических реквизитов существенно облегчает реализацию многих прикладных моментов конфигурации, однако, использование периодических реквизитов требует при конфигурировании особого внимания.
Не следует злоупотреблять этим свойством. Установка свойства периодический для реквизита справочника должна быть обоснованным и хорошо продуманным шагом, иначе это просто усложнит работу пользователей со справочниками, но не даст большого выигрыша. Например, реквизиты, используемые для печати документов, не обязательно делать периодическими. Обычно, периодическими имеет смысл делать реквизиты, значения которых используются в алгоритмах проведения документов. Это позволяет избежать неверного перепроведения документа ранее введенных документов при
изменении значений реквизитов.
При написании  алгоритма следует всегда помнить, что для использования значения периодического реквизита справочника необходимо обязательно указывать дату, на которую требуется выбрать или записать значение. Установка даты использования периодических реквизитов для объекта типа Справчоник задается либо оператором ИспользоватьДату, либо методами Получить и Установить (через точку после идентификатора самого реквизита). Одновременно использовать оба эти способа задания даты для одного и того же объекта типа Справочник нельзя. Если метод ИспользоватьДату не вызывался, то к периодическому реквизиту справочника следует обращаться с помощью методов Получить и Установить. Если метод ИспользоватьДату был вызван, то можно обращаться только непосредственно к значениям реквизитов. Вызов метода ИспользоватьДату должен располагаться до позиционирования объекта на определенный элемент или у него в качестве параметра должен быть передан признак УстановитьСразу.
Рекомендуется в основном обращаться к периодическим реквизитам с помощью методов Получить и Установить.  Применение метода ИспользоватьДату более вызывает, обычно, больше ошибок при конфигурировании. Примером, целесообразного использования этого метода может являться печать справочника с большим количеством периодических реквизитов. В этом случае, один раз вызвав в самом начале этот метод, Вы сможете получать значения всех реквизитов перебираемых элементов непосредственно, без вызова метода Получить.
При написании алгоритмов также следует учитывать, что периодические реквизиты содержат не пустые значения только начиная с момента (даты) первой записи истории значений реквизита. Например, если самая первая запись периодического реквизита Курс отмечена датой  '94' со значением 4800, а в программном модуле выполняется обращение к значению этого реквизита на '94', то система выдаст пустое значение, т.е. ноль.
Еще одной особенностью использования периодических реквизитов является их редактирование в форме элемента справочника. Сама форма элемента справочника, как и форма списка, открывается с определенной датой. Если элемент открывается из списка справочника, то дата берется из списка. Если список в свою очередь открыт для выбора реквизита документа, то его дата будет совпадать с датой документа. Даты в формах списка и элемента справочника выводятся в заголовке окна и используются только для вывода и записи периодических реквизитов. Дату использования периодических реквизитов можно изменить методом ИспользоватьДату встроенного языка в модуле формы.
При записи элемента редактируемого в форме, если существуют периодические реквизиты, то выдается специальный запрос, в котором пользователь отмечает какие значения периодических реквизитов нужно установить на дату формы. По умолчанию изменения реквизитов выставляется на основании сравнения текущих значений со значениями, записанными на ближайшую предыдущую дату. Данный запрос выдается только для реквизитов, непосредственно включаемых в форму.
Если некоторый периодически реквизит непосредственно в форму не включен, а изменяется из встроенного языка, то он не будет выдаваться в стандартном запросе. Для того, чтобы не включенный в форму реквизит участвовал в запросе о записи периодических реквизитов можно использовать соответствующий вариант метода СохранениеПериодическихРеквизитов модуля формы.
Реквизиты могут записываться или не записываться на дату формы, но не могут быть записаны на разные даты. Для того, чтобы при записи элемента записать периодические реквизиты на некоторую дату следует воспользоваться методом СохранениеПериодическихРеквизитов модуля формы.  Данная методика реализована, например, в типовой конфигурации 1С:Бухгалтерии 7.7 (редакция 3.1).
Заметим, что поддержка большого количества периодических реквизитов в справочнике сложна для пользователя. Типичной ошибкой пользователя является ввод элемента и запись соответственно его периодических реквизитов на рабочую дату, а затем попытка провести задним числом документ, использующий при проведении значения периодических реквизитов этого элемента.
При разработке конфигураций использующих периодические реквизиты одной из важнейших задач является уменьшение вероятности ошибки пользователя при записи элементов с периодическими реквизитами. Для этого следует, прежде всего, обеспечить наглядность для пользователя самого факта записи значений на определенную дату.
В некоторых случаях можно рекомендовать организовывать изменение периодических реквизитов справочника только специальным механизмом изменения периодических реквизитов при проведении документа и запретить ручное редактирование этих реквизитов. Для этого обычно создают специальный документ, например, УстановкаЦенТоваров, который выполняет изменение периодически - зависимых цен товаров. При использовании такого документа установка периодических значений с некоторой даты становится для пользователей более наглядным, так как в качестве даты выступает дата документа, и фактически каждый документ фиксирует моменты изменения ериодических реквизитов.
На основе анализа опыта работы начинающих пользователей с периодическими реквизитами в редакции 3.1 типовой конфигурации 1С:Бухгалтерии 7.7 реализован комплекс мер, направленных на минимизацию ошибок и улучшение понимания пользователями самого принципа организации периодических реквизитов. Эти меры можно рекомендовать применять и при разработке других прикладных решений, рассчитанных на широкий круг пользователей.
При вводе новых элементов справочников, устанавливается дата записи периодических реквизитов '1980'. Это позволяет исключить ситуацию, когда при вводе проводок и документов с начала года реквизиты новых элементов записываются на текущую дату, что вызывает проблемы при проведении документов.
В формах списков и элементов справочников предусмотрены кнопки для вызова специальной обработки предназначенной для одновременного просмотра истории нескольких периодических реквизитов. При вызове обработки из формы списка в ней также допускается редактирование истории периодических реквизитов.
Применение этой обработки повышает наглядность работы с  периодическими реквизитами для пользователя.
При записи элементов имеющих периодические реквизиты в форме элемента предусмотрен вызов специальной обработки, заменяющей стандартный диалог системы. В ней допускается изменение даты записи значений периодических реквизитов, а также предусмотрен вызов обработки для просмотра истории изменения значений. Основной целью применения данной обработки является привлечение внимания пользователя к важности правильной установки даты записи значений и предоставление возможности записи значений на другую дату.
          Рекомендации по использованию подчиненных справочников При создании конкретных конфигураций довольно часто возникают задачи, когда надо реализовать для каждого конкретного элемента справочника - список относящихся к нему объектов (отношение один-ко-многим).
Например:
· Есть справочник товаров, и каждый товар должен иметь, произвольное число
единиц измерения.
· Есть справочник товаров, и каждый товар должен иметь список серийных
номеров изделий.
· Есть справочник клиентов, и по каждому клиенту нужно вести список
заключенных с ним договоров.
В системе 1С:Предприятие эти и другие аналогичные задачи решаются при помощи подчиненных справочников.
Например, справочник Договора создается как подчиненный справочнику Клиенты.
Если существует два справочника - родительский и починенный, то интерактивное добавление элементов подчиненного справочника возможно только при открытом справочнике-владельце. Например, для того, чтобы добавить элемент в справочник Договора, следует открыть форму списка справочника Клиенты, и выбрать в нем курсором нужный элемент. При этом форма подчиненного справочника Договора, будет отображать список договоров выбранного клиента. Заметим, что наличие элементов в подчиненном справочнике не допускается для групп справочника-владельца.
Когда владелец установлен, можно добавлять элементы в список  договоров. Если владелец не установлен, то в заголовке подчиненного справочника будет выведена строка Не задан элемент-владелец.
В форме списка справочника предусмотрены кнопки для открытия подчиненных справочников и справочника-владельца. Однако в некоторых случаях можно рекомендовать размещать в форме списка справочника-владельца специальные кнопки, для открытия определенных подчиненных справочников с помощью функции ОткрытьФорму. Это позволит пользователю быстрее освоить работу с подчиненными справочниками.
Просмотр списка элементов подчиненного справочника при не заданном владельце доступен только при выключенной иерархии. Таким образом, выключение иерархии позволяет искать элементы справочника даже при не выбранном владельце. Следует заметить, что отключение иерархии при просмотре многоуровневых подчиненных справочников отключает одновременно и иерархию групп. Иногда для удобства просмотра подчиненного справочника с отключенной иерархией целесообразно включить в форму списка справочника текстовый элемент диалога с формулой Владелец. Это позволит пользователю видеть владельца текущего элемента.
Выбор элементов подчиненного справочника, в форме, при условии, что в форме существует элемент диалога, в котором выбран элемент  справочника владельца, для которого  производится выбор, реализуется в конфигурации при помощи указания в форме в свойствах элемента диалога, предназначенного для выбора элемента подчиненного справочника, параметра Связан с. В нем вводится имя идентификатора реквизита, который содержит элемент справочника-владельца. В этом случае при выборе элемента подчиненного справочника автоматически будет производиться выбор из элементов подчиненных установленному элементу справочника-владельца.
Другим способом установки элемента справочника-владельца, среди которых должен выполняться выбор подчиненного справочника является вызов метода ИспользоватьВладельца объекта подчиненного справочника. Это позволяет определить выбор подчиненного справочника даже в том случае, когда в форме нет элемента диалога имеющего тип справочника-владельца.
При вводе проводок, если одно из субконто счета имеет тип справочника подчиненного справочнику, который  так же использован в качестве субконто данного счета, автоматически осуществляется выбор подчиненного справочника из элементов подчиненных выбранному элементу справочника-родителя в субконто данного счета.
В некоторых случаях ведение подчиненных справочников реализуется непосредственно в форме элемента справочника-владельца. Для этого рекомендуется использовать модальный режим открытия форм. Например, такая методика реализована в типовой конфигурации 1С:Бухгалтерии 7.7 (ред 3.1).
Однако следует учитывать, что ввод подчиненных элементов допускается только после того, как новый элемент справочника-владельца записан.
Использование групп справочников Механизм справочников 1С:Предприятия предполагает использование групп справочников как способа упорядочивания элементов для поиска, а также как средство группировки при составлении отчетности. То есть считается, что объектами, отражающими данные предметной области, являются непосредственно элементы справочника, а группы вводятся дополнительно, в качестве надстройки над элементами, упрощающими работу с ними.
Большинство механизмов 1С:Предприятия опирается именно на такую организацию справочников. Например, допускается свободное перемещение пользователем элементов из одной группы в другую.
При проектировании алгоритмов работающих с многоуровневыми справочниками не рекомендуется, кроме специальных случаев, опираться на принадлежность конкретного элемента определенной группе. Например, при делении товаров по группам, не рекомендуется устанавливать зависимость алгоритмов проведения документов от того, в какой группе находится товар. Более предпочтительно сосредоточить всю существенную информацию непосредственно в реквизитах элемента справочника, чтобы она оставалась неизменной при любых изменениях в структуре групп справочника.
Также не следует записывать группы справочников в качестве значений измерений регистров оперативного учета или субконто проводок.
  Использование произвольного отбора элементов в форме списка справочника В форме списка справочника существует возможность ограничить просмотр элементов, отобрав их по сколь - угодно сложным критериям. Для этого применяется метод ИспользоватьСписокЭлементов. В этом разделе приводятся разъяснения по назначению и особенностям использования этого метода.
Прежде всего, заметим, что данный метод не устанавливает условие отбора элементов, а задает форме списка справочника непосредственно список элементов, которые нужно показывать в форме. Этим собственно и достигается максимальная гибкость отбора, так как список элементов может быть сформирован с использованием любых средств 1С:Предприятия. Эта возможность позволяет оптимизировать  формирование необходимого списка, выбирая наиболее производительный способ отбора данных. Прежде всего, это позволяет при работе с данными в формате MS SQL Server максимально задействовать возможности SQL-сервера.
Важной особенностью применения метода ИспользоватьСписокЭлементов является необходимость формирования списка элементов отвечающих текущим значениям Родителя и Владельца в форме списка справочника. Типичной ошибкой при использовании данного метода является формирование полного списка элементов, удовлетворяющих требуемому условию.
В случае если методу ИспользоватьСписокЭлементов переданы элементы не соответствующие текущему Владельцу и Родителю, то такие элементы будут отображаться в списке пустой строкой, и будут отмечаться специальной пиктограммой с символом ?. При этом не будет выдаваться сообщение об ошибке. Фактически, появление такой пиктограммы означает, что метод ИспользоватьСписокЭлементов используется неправильно. Такой способ диагностирования ошибки применяется системой в данном случае потому, что проверка переданного списка на корректность в процессе вызова метода потребует фактически обращения к каждому элементу в информационной базе, что существенно замедлит работу данного механизма. Таким образом, после разработки алгоритма модуля формы списка справочника следует проверить его работу на реальных данных и убедиться, что все элементы в списке отображаются правильно.
Другой особенностью применения метода ИспользоватьСписокЭлементов является необходимость формирования списка элементов при изменениях текущих значений Родителя и Владельца. Для этого необходимо обрабатывать соответствующие предопределенные процедуры и выполнять формирование списка с учетом новых значений.
При работе с формой списка справочника с установленным списком элементов следует учитывать, что содержимое списка не будет автоматически обновляться при изменении данных справочника. Фактически просмотр списка будет отображать состояние справочника на момент формирования списка. По этой же причине в данном режиме запрещен ввод новых элементов. Если возможность динамического обновления необходима, то можно рекомендовать включить в форму кнопку для принудительного обновления списка.
При разработке алгоритма формирования списка следует обеспечить приемлемую производительность его выполнения на реальных данных. При работе с базами данных в формате MS SQL Server  целесообразно воспользоваться рекомендациями по оптимизации выполнения запросов в версии 1С:Предприятия для SQL. Если формирование списка с выбранным критерием не удается выполнить с приемлемой производительностью, то целесообразно изменить критерий отбора или отказаться от отбора элементов в справочнике.
Таким образом, метод ИспользоватьСписокЭлементов следует рассматривать как весьма специализированный способ представления списка справочника, который с одной стороны предоставляет максимальную гибкость с точки зрения отбора элементов, а с другой стороны требует достаточно аккуратного применения.
Подробное описание примера использования данного метода, включенного в методическую конфигурацию, приводится в разделе Методики организации подбора и выбора - Отбор элементов справочника по сложному критерию.
Использование режимов выбора групп справочника При работе с объектом типа Справочник метод ВыборГруппы используется для включения и выключения выбора групп при интерактивном выборе элемента справочника из формы списка.
Метод применяется для реквизита диалога типа Справочник или включенного в диалог реквизита типа Справочник какого либо объекта. В этом случае он управляет возможностью выбора в это поле группы при нажатии кнопки выбора.
В формах данный метод может быть вызван также для элементов диалога (атрибутов объекта Форма). Это позволяет, например, назначить режим выбора не для конкретного значения реквизита табличной части документа, а для значений данного реквизита во всех строках.
Этот метод может быть также вызван непосредственно в модуле формы списка справочника. Он имеет смысл, если форма списка открыта для выбора.
Для объектов созданных функцией СоздатьОбъект этот метод влияет только на  интерактивный выбор, осуществляемый методом Выбрать.
При обходе элементов справочника переменной созданной с помощью функции СоздатьОбъект метод ВыборГруппы не оказывает влияния на выборку. Для обработки только элементов (без групп) нужно выполнять проверку каждого полученного элемента методом ЭтоГруппа.

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

Метод ПолучитьПозицию  самого контекста проводимого документа выдаст позицию правильно - с учетом изменения времени.
В процессе проведения оперативного документа не следует с помощью объекта Запрос получать данные по движениям регистра уже записанным в процессе данного проведения. В случае, если в процессе проведения выполняется смещение ТА, движения проводимого документа не попадут в запрос, так как ТА  устанавливается на новую позицию по окончании проведения документа. Рекомендуется использовать метод ВыбратьДвиженияДокумента объекта Регистр.
В процессе проведения оперативного документа, если проводится еще не проведенный документ, то при использовании методов объекта Регистр: ВыбратьДвижения и ПолучитьДвижение в выборку не будут включаться движения регистра записанные в процессе данного проведения. Таким образом, в общем случае методы ВыбратьДвижения и ПолучитьДвижение могут быть использованы только для получения движений уже проведенных документов.
  Особенности записи и проведения документов средствами встроенного языка При создании или изменении документов средствами встроенного языка (при помощи переменной созданной функцией СоздатьОбъект) следует учитывать следующую особенность. В отличие от режима проведения документа, редактируемого в форме, при проведении документа с помощью переменной созданной функцией СоздатьОбъект не выполняется автоматически предварительная  запись документа. Фактически это означает, что после любого изменения документа перед выполнением метода Провести следует вызвать метод Записать, чтобы до проведения были записаны измененные данные документа.
Кроме того, следует учитывать, что метод ПриЗаписиПерепроводить используется для обеспечения согласованной записи и проведения документа при его ручном редактировании, то есть он распространяется только на форму документа. При записи и проведении документа с помощью переменной созданной функцией СоздатьОбъект для того, чтобы при любых сбоях и ошибках сохранялась согласованность данных документа и его движения следует объединять запись и проведение документа в транзакцию. Для этого используются процедуры НачатьТранзакцию и ЗафиксироватьТранзакцию.
Управление удалением движений документа При проведении уже проведенного ранее документа, перед вызовом предопределенной процедуры ОбработкаПроведения системой автоматически выполняется удаление всех записанных в процессе предыдущего проведения движений документа (бухгалтерских проводок, записей журнала расчетов, движений регистров, записей изменения периодических реквизитов справочников). Так же удаление движений выполняется и в случае отмены проведения перед вызовом предопределенной процедуры ОбработкаУдаленияПроведения. В 1С:Предприятии 7.7 появилась возможность отключения автоматического удаления движений. Отключение выполняется в свойствах вида документа в метаданных. При отключении автоматического удаления движений появляется возможность дописывать  движения в процессе проведения к уже имеющимся, частично удалять движения при перепроведении (например, по отдельным регистрам) и анализировать существующие движения документа в процессе выполнения проведения и отмены проведения. Заметим, что при отмене проведения реально движения будут удалены в любом случае, но при отключенном автоматическом удалении они будут удалены не до, а после выполнения предопределенной процедуры ОбработкаУдаленияПроведения.
В методической конфигурации использование отключения автоматического удаления движений, демонстрируется на примере документа Чек. Данный документ предназначен для оформления продажи товаров за наличный расчет. Предполагается, что количество чеков может быть достаточно большим. Введенные (пробитые) строки чека уже не могут меняться. Допускается лишь полная очистка чека. В предложенной методике при вводе каждой позиции чека выполняется проведение документа. При этом формируется движение по введенной позиции, а предыдущие движения не удаляются. В структуре документа не предусмотрено табличной части. Фактически, движения документа играют роль не производной информации (формируемой на основании документа), а первичных данных вводимых пользователем.
Управление проведением документа выполнятся с помощью передачи параметра в процедуру ОбработкаПроведения. В качестве параметра передается список значений, который содержит необходимые для проведения данные и вариант проведения. В данном примере имеется два варианта проведения: добавление товара и очистка всех движений. Так как в метаданных для данного вида документов отключено автоматическое удаление движений, то при проведении существующие движения сами собой не удаляются. При добавлении товара, записывается новое движение без удаления существующих, а при очистке вызывается специальный метод ОчиститьДвижения, который выполняет удаление всех движений документа. Заметим, что в других случаях проведения документа (например, если будет выполняться групповое перепроведение документов), так как параметр процедуре ОбработкаПроведения не передается, то никаких действий выполняться не будет (существующие движения не удаляться, и новые не запишутся).  При отмене проведения документу проставляется признак Аннулирован. Как уже отмечалось, удаление движений при этом выполняется системой автоматически после отработки процедуры ОбработкаУдаленияПровдения.
Приведенный в качестве примера документ Чек, кроме возможности управления удалением движений документа демонстрирует также методику организации интерфейса предназначенного для массового ввода информации оператором. Ввод документа в методической конфигурации выполняется с использованием формы обработки ВводЧеков. Все необходимые алгоритмы для традиционного ввода в форме документа содержатся в модуле формы, но они не используются. Для их использования следует отключить вызов формы обработки и отключение статуса возврата в процедуре ВводНового. Использование для ввода документа формы обработки предоставляет возможность инициировать ввод нового документа без закрытия формы.  Форма обработки ориентирована на ввод данных с помощью клавиатуры. Разумеется, в реальных условиях также должен использоваться сканер штрих-кодов.
Начало ввода чека инициируется нажатием клавиши F6. При этом в модуле создается новый документ и проводится. Далее в поле Код товара оператором вводится необходимый код. Переход к полю ввода количества осуществляется клавишей Enter. После ввода количества и нажатия клавиши Enter активизируется кнопка Пробить товар. Нажатием клавиши Enter выполняется проведение документа, при котором записывается движение по введенному товару. Текущие введенные в форму данные передаются в качестве параметра в метод, выполняющий проведение документа. Введенный товар заносится в размещенную в форме таблицу значений, предназначенную для отображения пробитых позиций чека.
Кнопка Очистить используется для удаления всех движений. Она также вызывает  метод проведения документа с параметром, содержащим признак необходимости очистки движений в процессе проведения.
В зависимости от принятой на предприятии технологии оформления документов, алгоритм обработки может быть переделан с тем, чтобы проведение выполнялось сразу по всем позициям чека, накопленным в таблице значений, а не по каждой позиции.
Разумеется, приведенный пример является только одной из возможных методик использования механизма управления удалением движений документа. В данном примере использование этого механизма позволяет, прежде всего, минимизировать объем хранимой информации. Однако, как уже отмечалось, механизм может быть использован и для других целей, например, для изменения при перепроведении движений только одного регистра или для формирования бухгалтерских проводок без повторной записи движений регистров. Заметим, что при использовании данного механизма следует  учитывать в модуле документа все возможные обстоятельства проведения документа (проведение из формы, проведение из алгоритма встроенного языка, проведение в процессе группового проведения).
Восстановление последовательностей документов средствами встроенного языка В 1С:Предприятии 7.7 существует штатный механизм восстановления последовательностей документов. Он вызывается в режиме запуска 1С:Предприятие из пункта Проведение документов колонки Операции главного меню программы. Однако в ряде случаев возникает потребность в выполнении восстановления последовательностей из алгоритма встроенного языка, например из модуля формы обработки.
В методической конфигурации содержится пример обработки (ВосстановлениеПоследовательностей), выполняющей действия аналогичные штатному механизму восстановления последовательностей.
Данный пример демонстрирует не только восстановление последовательностей документов, но и механизм оптимизации процесса массового перепроведения документов, выполняемого средствами встроенного языка.
Восстановление последовательностей документов выполняется путем поочередного перепроведения документов, относящихся к выбранным последовательностям. Перепроводятся только проведенные документы, находящиеся в диапазоне от самой ранней границы последовательности по точку актуальности или по дату, которую указал пользователь.
Так как в последовательности обычно участвуют документы, которые при проведении используют остатки по регистрам или счетам на момент документа, их перепроведение может быть достаточно критично с точки зрения производительности. Это объясняется тем, что для получения соответствующих остатков в процессе проведения выполняются временные расчеты итогов оперативного или бухгалтерского учета. Оптимизация перепроведения документов выполняется, если обработка используется в монопольном режиме запуска 1С:Предприятия. Для оптимизации процесса восстановления
последовательности в монопольном режиме, перед проведением документа выполняется анализ того, какие именно остатки используются в процессе проведения. Анализ используемых остатков выполняется на основании состава движений влияющих на последовательности, определенных в метаданных. Предполагается, что регистры и счета, остатки  по которым используются при проведении документа, включены в описание последовательностей. Если проводимый документ использует остатки по регистрам, то перед проведением точка актуальности будет установлена на данный документ. При этом в модуле документа в процессе проведения метод ИтогиАктуальны() будет возвращать значение 1. Это позволит документу получать актуальные данные непосредственно из итогов, без выполнения временного расчета. Если документ при проведении использует остатки  по счетам, то на него будет выполнен временный расчет специального объекта БухгалтерскиеИтоги, для которого установлен признак актуальности. В монопольном режиме все временные расчеты и запросы по бухгалтерским итогам используют данные из актуальных временных расчетов существующих объектов БухгалтерскиеИтоги, что позволяет сильно увеличить скорость их выполнения. Таким образом, и при использовании итогов оперативного учета и при использовании бухгалтерских итогов ускорение процесса восстановления последовательности достигается за счет того, что для получения итогов на моменты проводимых документов перебор движений регистров и проводок осуществляется только один раз, а не многократно при проведении каждого документа.
Однако, следует учитывать, что при проведении документов анализ текущих итогов может выполняться с двумя различными целями. С одной стороны, на основании анализа текущих итогов формируются движения с определенными характеристиками (выбираются конкретные партии, рассчитываются средние значения стоимости и т.д. ) . Фактически в этом случае итоги анализируются в процессе отражения хозяйственной операции. Такие обращения к итогам непосредственно связаны с последовательностями и полностью отвечают описанной выше схеме. Однако, с другой стороны, при проведении некоторых документов текущие итоги используются для контроля правомерности проведения документов, например, для анализа текущего наличия товара на складе. То есть в этом случае итоги используются для проверки самой возможности совершения хозяйственной операции. Первый вариант использования итогов требует обязательного анализа итогов при любом проведении документа. Однако, во втором варианте, в зависимости от выработанной методики проверки проведения документов, анализ итогов может выполняться только при проведении  документа в процессе оперативной работы пользователей в реальном времени. То есть тогда, когда выписанного товара может действительно не оказаться на складе. В этом случае, при перепроведении ранее проводимых документов такая проверка может не использоваться., так как фактически хозяйственная операция уже давно совершена и может быть отражена в учете в соответствии с данными, хранящимися в документе. Соответственно такие обращения к итогам не имеют прямого отношения и к последовательностям документов. Таким образом, при перепроведении документов в процессе восстановления последовательности могут не выполняться те обращения к итогам, которые используются для контроля правомерности проведения. При проведении отдельного документа задним числом в оперативном учете отключение проверок может выполняться на основании значения возвращаемого методом ИтогиАктуальны(). При восстановлении последовательностей штатным режимом 1С:Предприятия это обстоятельство проведения в модуле документа можно определить с помощью метода ГрупповаяОбработка и также отключить различные проверки. Однако при восстановлении последовательностей средствами встроенного языка данные методы, не могут быть использованы. Для анализа группового перепроведения документов средствами встроенного языка можно использовать глобальную переменную или передавать параметр при вызове метода документа Провести. Анализ глобальной переменной или параметра должен выполняться в модулях документов, выполняющих в процессе проведения контроль текущих остатков.
В отличие от штатного режима восстановления последовательности описанная в данном разделе обработка может использоваться не только в монопольном, но и в разделенном режиме. Это позволяет восстанавливать последовательности без прекращения работы пользователей с системой. Однако, на практике, целесообразно выполняться восстановление последовательности в разделенном режиме в том случае, если граница последовательности недалеко отстоит от текущего момента, до которого предполагается восстанавливать последовательность. При восстановлении последовательностей в разделенном режиме не будут задействованы механизмы оптимизации, и при проведении документов будут выполняться временные расчеты итогов. Очевидно, что при большом количестве перепроводимых документов это может занять достаточно продолжительное время.
Заметим, что механизм последовательностей документов сам по себе никак не связан с понятием точки актуальности. Например, проводимый задним числом документ, даже если он сбивает последовательность для документов расположенных за ним в хронологической последовательности, сам может проводиться в последовательности, если между ним и границей последовательности не существует относящихся к последовательности документов. Соответственно в модулях таких документов должно быть предусмотрено корректное проведение документа задним числом с расчетом временных итогов на момент документа. Это позволяет восстанавливать последовательности путем поочередного проведения документов задним числом в хронологическом порядке. Следует учитывать, что документ, который записал движения отодвинувшие границу последовательности назад при восстановлении последовательности сам не будет перепроводиться (если конечно граница последовательности затем не отодвинулась на еще более раннюю позицию). Поэтому при проведении этого документа обязательно должны быть правильно сформированы движения на основании итогов, рассчитанных на
момент документа.
Таким образом, для правильного выполнения группового перепроведения документов в предопределенных процедурах ОбработкаПроведения тех документов, которые предполагается перепроводить следует учитывать различные обстоятельства перепроведения, как с точки зрения необходимости выполнения временного расчета или возможности использования текущих остатков регистра, так  и, возможно, с точки зрения отключения проверки правомерности проведения документов. К различным обстоятельствам проведения относятся: проведение из формы; проведение из алгоритма обработки; проведение из штатного режима группового перепроведения; проведение задним числом; проведение с возможностью доступа к текущим итогам.
Подчиненные документы и ввод документов на основании Одной из типичных ошибок при освоении 1С:Предприятия является неверное понимание механизмов ввод документа на основании и подчиненный документ. Эти два механизма между собой никак не связаны.
Ввод на основании представляет собой возможность ввода одного документа одного вида с использованием данных документа другого вида. Для пользователя предоставляется интерфейсная возможность такого ввода с выбором вида документа, который будет вводиться на основании данного документа. В конфигурации может быть настроен список документов, которые будут предоставляться пользователю для ввода на основании по каждому виду документов. В модуле формы документа документ-основание передается в качестве параметра в предопределенную процедуру ВводНаОсновании. Собственно после открытия формы никакой информации о том, что документ введен на основании другого документа, система не хранит.
Механизм подчиненных документов поддерживает для каждого документа список документов, ссылающихся на данный документ. Под ссылкой понимается наличие в структуре документа реквизита типа Документ. Список подчиненных документов может быть просмотрен пользователем в виде журнала подчиненных документов и использован для быстрого перебора подчиненных документов средствами встроенного языка в конфигурации. Данный механизм никак не конфигурируется и работает только исходя из структуры документа (наличия в ней реквизитов типа Документ).
Заметим, что подчиненность документов представляет собой отношение многие ко многим, то есть документ может иметь несколько подчиненных документов и в свою очередь может быть подчиненным для нескольких документов одновременно. Последнее может иметь место, если в структуре документа существует несколько реквизитов типа Документ или реквизит типа Документ расположен в табличной части.
Для того, чтобы введенный на основании документ входил  в список подчиненных следует создать реквизит типа Документ и заполнять его в процедуре ВводНаОсновании. При этом рекомендуется, чтобы значение этого реквизита могло быть установлено не только путем ввода на основании, но и интерактивно в форме документа, для обеспечения возможности корректировки в уже записанном документе.
Для самого ввода на основании иногда рекомендуется предусмотреть специальную кнопку в форме документа, на основании которого выполняется ввод. При этом ввод на основании выполняется с помощью вызова функции ОткрытьФорму. Такое решение позволяет привлечь внимание пользователя к этой удобной возможности. Однако заметим, что ввод на основании может выполняться только после записи документа-основания.
Передача значений в модуль проведения документа В некоторых случаях возникает необходимость изменения хода проведения документа в зависимости от значений выбранных в форме документа. Например, при проведении документа может включаться или отключаться вывод сообщений или контроль остатков.
В модуле документа непосредственно не доступны переменные модуля формы документа. Это объясняется тем, что модуль документа может функционировать и без наличия формы (например, при проведении из языка или групповом перепроведении).
Для того, чтобы проинформировать процедуру проведения документа о том, как должно выполняться проведение рекомендуется использовать параметр процедуры ОбработкаПроведения. В этот параметр попадает значение, переданное в методе Провести. Метод Провести может быть вызван у объекта Документ, созданного функцией СоздатьОбъект или в форме документа. Фактически для передачи параметра в процедуру ОбработкаПроведения из модуля формы документа следует инициировать проведение не в конструкции # кнопки формы, а непосредственно в выражении формулы кнопки или в модуле, вызовом метода Провести с передачей соответствующего параметра. Пример такой передачи параметра содержится в типовой конфигурации Торговля+Склад (ред. 8) в документе РасходнаяНакладная, а также в методической конфигурации диска ИТС в документе Чек.
При активном применении параметра процедуры ОбработкаПроведения можно рекомендовать выработать некоторую дисциплину его использования. Например, если возникает необходимость передачи нескольких значений, то можно использовать для передачи список значений, в котором конкретные значения идентифицировать строковыми представлениями (используя методы  Установить и Получить объекта СписокЗначений).  Это может быть особенно актуально, если различные параметры передаются в процедуру ОбработкаПроведения из модуля формы документа и при проведении документа созданного функцией СоздатьОбъект.
Установка времени документа при записи новых документов При записи новых документов интерактивно (с помощью формы) выдается диалог запроса времени, с которым должен записаться документ. Запрос времени может быть отключен пользователем в режиме настройки параметров (для оперативных документов на закладке Оперативный учет и для бухгалтерских документов и операций на закладке Бухгалтерия). В диалоге запроса времени может быть задано конкретное время или выбран один из способов автоматического назначения времени.
Вариант Текущее время может использоваться только, если дата документа совпадает с системной датой компьютера. Он устанавливает  в качестве времени документа системное время компьютера.
Вариант После ТА позволяет поместить документ после точки актуальности, если она расположена в дате документа.
Вариант В начало дня записывает документ со временем 6:00 если это первый документ за данную дату, а если документы в этой дате уже есть, то время нового документа устанавливается на 10 секунд раньше самого раннего документа.
Вариант В конец дня записывает документ со временем 12:00 если это первый документ за данную дату, а если документы в этой дате уже есть, то время нового документа устанавливается на 10 секунд позже самого позднего документа.
При записи документов средствами встроенного языка для новых документов автоматически используется режим В конец дня. Это обстоятельство следует учитывать при разработке процедур выполняющих формирование документов средствами встроенного языка в процессе повседневной работы пользователей.
С помощью набора методов АвтоВремя… можно управлять режимом присвоения времени при записи нового документа.
Если при разработке алгоритма записывающего и проводящего оперативные документы не задать правильно режим установки времени, то это может привести к проблемам и неудобствам при работе пользователей. Например, если первый документ в новой дате создастся средствами языка и будет  проведен, то точка актуальности будет установлена на 12:00 и все вновь вводимые пользователями документы будут оказываться до точки актуальности, так как в большинстве случаев они записываются с текущим временем. В некоторых случаях пользователи записывают документы вперед или даже переносят вперед непроведенные документы с предыдущей даты. В этом случае формирование из языка документа с режимом В конец дня может записать и провести документ существенно более поздний, чем реальное время. Таким образом, если запись средствами языка имитирует фактически ручной ввод документов, то рекомендуется установить у документа режим АвтоВремяТекущее или АвтоВремяПослеТА.
При разработке формы документа существует возможность программного управления в форме временем записи новых документов. Это позволяет исключить запрос диалога в тех случаях, когда при разработке конфигурации можно определить какой режим установки времени больше подходит пользователю. Для программного управление временем записи нового документа используется тот же набор методов, что и для управления временем документа создаваемого и записываемого в алгоритме встроенного языка.
Изменение документа в процессе проведения Если при выполнении процедуры ОбработкаПроведения выполняется изменение реквизитов документа, то после окончания процедуры система автоматически выполняет запись измененного документа. Это позволяет в процессе проведения вносить необходимые изменения в реквизиты документа.
При этом следует учитывать следующую особенность. Если проведение выполняется из формы документа, и в процессе проведения произошла отмена проведения (вызвана процедура  СтатусВозврата(0) или НеПроводитьДокумент()), то записи информационной базы сформированные в процессе проведения (движения регистров, проводки и т.д.) будут автоматически отменены. Однако изменения в реквизитах документа не будут отменены и, если документ будет в дальнейшем записан, то будут соответственно записаны и изменения реквизитов. Чтобы избежать такой ситуации рекомендуется выполнять изменения реквизитов документа в самом конце алгоритма проведения, а если до этого вызывались процедуры СтатусВозврата(0) или НеПроводитьДокумент() то выполнять выход из процедуры до изменения реквизитов.
Особенности написания модуля документа При разработке модулей документов следует учитывать, что часть модуля, которая располагается в нижней части (ниже всех процедур и функций) выполняется системой при инициализации модуля, а не при каждом проведении или отмене проведения документа. Например, если документ проводится из формы документа, то данная часть модуля будет выполнена только один раз, хотя проведение может быть выполнено несколько раз без закрытия формы.
При групповом проведении данная часть модуля не будет выполняться перед началом проведения каждого документа (групповое проведение документов выполняется системой при переносе точки актуальности вперед и в режиме Проведение документов).
Таким образом, в нижней части модуля можно выполнять только инициализацию переменных, не имеющих непосредственного отношения к логике проведения документа (например, можно создать объект БухгалтерскиеИтоги). Все переменные, которые должны инициализироваться каждый раз при проведении документа следует присваивать в начале процедуры ОбработкаПроведения.
Использование позиции документа
Все документы 1С:Предприятия располагаются в определенном хронологическом порядке. Даже если два документа имеют одинаковую дату и время, один документ будет всегда располагаться позже другого. Для определения порядка документов имеющих одинаковую дату и время система использует внутренний уникальный идентификатор. Это необходимо для того, чтобы при любых операциях (выгрузке и загрузке данных, переносе данных в распределенной ИБ и др.) последовательность расположения документов не нарушалась.
Позиция документа представляется строковым значением специального формата. Она может быть получена методом документа ПолучитьПозицию. Разумеется, позиция имеет смысл только для записанного документа. Фактически в позиции документа отражаются в строковом виде дата, время и внутренний идентификатор. Эти характеристики располагаются в строке таким образом, чтобы сравнение строк позволяло определить, какая позиция больше, а какая меньше. Однако следует учитывать, что позиция документа, полученная в качестве строки, отображает некоторую точку на оси хронологии документа, а самого документа в этой точке может не быть. Например, если воспользоваться функцией ПолучитьПозициюТА(), то можно получить позицию точки актуальности, хотя сам документ установивший точку актуальности может быть к этому моменту удален. Таким образом, позицию документа можно использовать только для сравнения и указания границ выборки документов.
Функция СформироватьПозициюДокумента позволяет получить следующую и предыдущую позицию по отношению к указанной позиции. Однако полученная позиция не будет являться позицией предыдущего или последующего документа. Функция выдаст ближайшую предыдущую или ближайшую последующую возможную позицию. Например, это позволяет выбрать документы, располагающиеся после некоторого документа. Для этого получают позицию, следующую по отношению к указанному документу, и используют ее в качестве параметра метода ВыбратьДокументы.

Отбор элементов справочника по сложному критерию

Если выбор строки осуществлен в этих колонках, то выполняется увеличение и уменьшение количества выбранного товара на единицу.
Для обеспечения возможности редактирования количества уже выбранного товара предусмотрена также обработка выбора  строки таблицы значений, содержащей выбранные товары  (двойного щелчка мышью или нажатия клавиши Enter). В таблицу значений включены колонки с пиктограммами + и -. В зависимости от текущей колонки в формуле таблицы значений выполняется увеличение, уменьшение или редактирование количества товара в текущей строке.
Для окончания подбора и включения выбранных товаров в документ при нажатии кнопки ОК вызывается метод ВыполнитьВыбор объекта Форма , которому передается таблица значений, содержащая выбранные товары. Так как, при открытии формы подбора из формы документа в методе ОткрытьФорму указано значение флага, устанавливающее режим выбора одного значения (а не нескольких значений), то при вызове метода ВыполнитьВыбор форма закрывается.
В модуле формы расходной накладной в процедуре ОбработкаПодбора, строки документа заполняются товарами, содержащимися в таблице значений, которая получена из формы подбора.
В случае если режим подбора является основным способом ввода документов, применение описанной методики может значительно упростить процесс ввода данных.
Отбор элементов справочника по сложному критерию Одним из распространенных пожеланий пользователей при работе с режимом ввода документов в 1С:Предприятии является организация возможности выбора (подбора) из справочника с просмотром списка элементов отобранных по определенному критерию. Для некоторых критериев подходит механизм отбора по значениям реквизита справочника (например, по типу товара). Однако существует отдельная группа задач , в которых критерием отбора элементов является не информация содержащаяся в самом справочнике, а другие данные, например, текущие остатки регистров или бухгалтерские итоги. Для организации отбора по сложным критериям, не определяемым полностью данными справочника, в 1С:Предприятии 7.7 предусмотрен специальный механизм. В отличие от стандартного динамического режима просмотра списка справочника этот механизм предполагает формирование с помощью произвольного алгоритма списка значений, содержащего элементы справочника, удовлетворяющие выбранному критерию, использование данного списка системой для показа элементов в форме списка.
В методической конфигурации отбор по сложному критерию, демонстрируется на примере подбора товаров. Пример задействован в форме расходной накладной и вызывается по кнопке Подбор имеющихся в наличии. При нажатии кнопки открывается подбор из формы списка ДляПодбора справочника Товары.
По своей функциональности с точки зрения пользователя этот вариант подбора аналогичен традиционным режимам подбора. Однако, если включить в диалоге формы подбора флажок Показывать имеющиеся в наличии, то в список будут включаться только товары, имеющиеся в настоящий момент на складе, то есть те по которым имеются положительные остатки в регистре оперативного учета.
Для реализации отбора элементов в модуле формы подбора создана процедура, УстановкаФильтра. Алгоритм вынесен в отдельную процедуру, так как будет вызываться из различных мест модуля формы. В данной процедуре выполняется формирование списка значений, содержащего перечень элементов, удовлетворяющих критерию отбора. Собственно установка отбора по полученному набору элементов выполняется с помощью вызова метода ИспользоватьСписокЭлементов , которому в качестве параметра передается сформированный список значений.
Важной особенностью применения метода ИспользоватьСписокЭлементов является то, что передаваемый ему список значений должен содержать перечень именно тех элементов, которые должны выводиться в текущем состоянии формы списка, то есть, непосредственно подчиненных текущему владельцу и текущей группе (если таковые имеются).
В приведенном примере формирование такого списка достигается следующим образом. В начале в список помещаются все группы непосредственно подчиненные текущей (открытой) группе. Для этого используется объект типа Справочник. В список включаются все группы подчиненные текущей, без анализа остатков по входящим в них товарам. Фильтрация групп потребовала бы дополнительного времени и, обычно, не имеет большого смысла. Далее выполняется запрос, анализирующий остатки регистра. В запросе используется условие равенства родителя товара текущей группе формы списка справочника. Использование оператора В в данном случае было бы не корректным, так как в запрос были бы включены не только элементы непосредственно подчиненные текущей группе, но и элементы, подчиненные группам, входящим в текущую группу. На основании выполненного запроса товары с положительным остатком количества включаются в формируемый список значений.
Так как при работе со списком текущая (открытая) группа меняется, то вызов процедуры УстановкаФильтра выполняется не только при открытии формы, но и в предопределенной процедуре ПриВыбореРодителя. Также процедура вызывается при обработке включения(выключения) флажка отбора в диалоге формы и при включении(выключении) иерархического режима просмотра. При выключенном режиме иерархического просмотра отбор имеющихся в наличии товаров не выполняется, так как фактически будет анализироваться весь справочник, что не имеет на практике большого смысла, но потребует значительных затрат времени.
В приведенном примере, дополнительно запоминается (в отдельном списке значений) список групп верхнего уровня, если на верхнем уровне справочника введены только группы. Этот прием позволяет ускорить навигацию по справочнику, при переходе от одной группы к другой.
Кроме того, в данном примере, полученный результат запроса используется не только для отбора элементов, но и для показа текущего остатка в колонке табличной части формы. Это позволяет не обращаться повторно при просмотре списка к данным регистра.
Дадим несколько рекомендаций по применению данного режима. Прежде всего, заметим, что описанный режим имеет достаточно высокие требования к производительности системы в части выборки данных информационной базы. При реализации алгоритма отбирающего элементы по заданному критерию следует использовать наиболее производительные способы выборки информации. На практике, в разделенном режиме работы пользователей такой отбор будет эффективно работать в основном в случае применения версии 1С:Предприятия для SQL , так как в ней формирование запроса будет оптимизировано за счет возможностей архитектуры клиент-сервер. Следует учитывать, что описанный механизм является специальным режимом и должен применяться именно в тех случаях, когда это необходимо и обязательно с проверкой  эффективности в
реальных условиях. Кроме того, следует учитывать, что применение отбора по сложному критерию целесообразно в том случае, если в отбираемый список попадает незначительная часть элементов справочника. В противном случае использование этого механизма будет неоправданным с точки зрения соотношения затрат ресурсов системы и выигрыша в удобстве подбора. Заметим также, что использование формы списка справочника с отбором по сложному критерию следует применять в основном для многоуровневых справочников, так как для одноуровневых справочников может применяться подбор из формы обработки.
Подбор с использованием табличного документа Для организации подбора с ограничением набора значений предлагаемых для выбора можно применять табличный документ с использованием механизма расшифровки. Пример использования такого подбора приведен в методической конфигурации в документе Расходная накладная. Пример реализует заполнение табличной части документа товарами подбором из списка товаров, в который включаются только товары, которые в данный момент существуют на выбранном в накладной складе.
Подбор инициируется копкой формы документа Подбор из таблицы. В процедуре, вызываемой при нажатии этой кнопки,  открывается подбор из формы обработки ПодборТоваровТаблицей. В форму обработки включен табличный документ (этот режим устанавливается в меню Действия – пункт Свойства формы). При открытии формы происходит формирование табличного документа, в который вносятся товары и их текущее наличие на выбранном складе. Товары, которые имеют нулевое количество, в табличный документ не включаются. При выводе секций табличного документа заполняется не только наименование товара, но и значение расшифровки ячейки, в которое заносится собственно товар (как значение типа Справочник).
Пользователь просматривает полученный список товаров и выбирает нужные товары двойным щелчком мыши в требуемой строке. Обработка выбора пользователем товара организуется в модуле формы документа в предопределенной процедуре ОбрабокаЯчейкиТаблицы. Собственно выбор товара осуществляется методом ВыполнитьВыбор объекта Форма, которому передается товар, полученный из значения расшифровки.
Так как список товаров может быть достаточно большой в данном примере реализован вывод в табличный документ товаров по группам, что вполне напоминает выбор из справочника в режиме Иерархический список. Раскрытие группы товаров и возврат на предыдущий уровень реализованы в качестве специальной обработки расшифровки для значения являющегося группой справочника.
В приведенном примере список заполняется на основании справочника. В некоторых случаях целесообразно формировать список товаров с помощью запроса, обращающегося к остаткам регистра.
Специальный параметр метода Опции табличного документа позволяет организовать запоминание системой размера и местоположения данного табличного документа, что будет вполне удобно для пользователя регулярно обращающегося к данному режиму.
Существует, кроме того, дополнительная возможность использования для подбора уже существующего табличного документа, сохраненного в виде файла. В этом случае табличный документ открывается методом Открыть. Это позволяет существенно снизить затраты ресурсов на организацию подбора, так как никакой выборки данных в этом случае производиться не будет. Ограничением данного метода является невозможность использования текущих остатков. Примером такого решения может быть подбор из прайс-листа, который формируется на день и располагается на сетевом диске в доступном всем пользователям каталоге. Данный файл может формироваться и записываться, менеджером в начале дня. Разумеется, при открытии таблицы подбора из файла не используется техника расшифровки групп справочников. Целесообразнее, очевидно, формировать полный прайс-лист в случае если его объем сравнительно небольшой.
Следует помнить, что используемый в предлагаемой технике механизм расшифровок хранит значения типа Справочник, Документ и другие типы данных связанные с конкретной конфигурацией в табличном документе в специальном формате. В случае удаления, например, из справочника некоторого товара механизм контроля ссылочной целостности не будет анализировать ссылки на данный товар в табличных документах и в них могут остаться ссылки на несуществующие объекты. Поэтому при использовании данной техники имеет смысл перед включением выбранного товара в документ проверять, существует ли реально данный элемент справочника.
Организация выбора значения из небольшого списка При настройке элементов диалога для значений, которые выбираются из одноуровневого справочника существует возможность указать признак Быстрый выбор. В этом случае для выбора не будет открываться форма списка справочника, а будет выдаваться небольшой список рядом с элементом диалога.
Однако, при разработке конфигурации можно организовать аналогичный выбор для любых данных. В некоторых случаях выбор значения элемента диалога формы может осуществляться из достаточно небольшого списка, состав которого определяется подобранными по некоторому критерию значениями.
Для реализации выбора из небольшого списка с выборочным включением в него значений можно рекомендовать использовать список значений. Для достаточно постоянных наборов значений объект типа СписокЗначений может быть объявлен в глобальном модуле, и заполняться один раз при запуске конфигурации или при первом обращении. Например, в такой список, можно занести склады, которые будут использоваться при продаже товаров. Выбор из данного списка значений может осуществляться по нажатию предусмотренной в диалоге формы кнопке, которая располагается, обычно, рядом с полем, отображающем выбранное в данный момент значение. Выбор может производиться в качестве диалога, меню или списка методом ВыбратьЗначение объекта СписокЗначений. Способ выбора определяется параметром метода ВыбратьЗначение. Заметим, что в случае заполнения строкового представления списка значений при выборе вообще не будет производиться обращение к информационной базе, что также полезно с точки зрения производительности системы.
Кроме возможности выбора из списка значений по отдельной кнопке существует возможность организации выбора  непосредственно при нажатии кнопки выбора элемента диалога типа Справочник.
Для этого используется предопределенная процедура ПриНачалеВыбораЗначения. В методической конфигурации данная возможность демонстрируется на примере выбора склада в приходной накладной. Склад выбирается из всех складов имеющих признак Материальный. При этом список значений, используемый для выбора, может заполняться как при каждом выборе, так и один раз,  например, в глобальном модуле.  Использованиеварианта выбора  Выбор маленьким списком из списка значений позволяет сделать выбор внешне не отличающимся от режима Быстрый выбор, но ограниченным по составу элементов.
                     Выбор из справочника только групп В некоторых случаях при выборе значения из формы списка справочника необходимо выбрать только группу. Одним из стандартных путей может являться обработка выбираемого значения и выдача сообщения о том, что выбрана не группа. Однако существует возможность показывать в форме при выборе только группы справочника. Для этого используется метод формы списка справочника: ИспользоватьСписокЭлементов.
В методической конфигурации выбор групп, демонстрируется на примере формы списка справочника Товары - ДляВыбораГрупп. Пример задействован в форме обработки ПереносТоваров для выбора группы, в которую переносятся внесенные в список товары.
Для реализации выбора групп в модуле формы списка создана процедура, УстановкаФильтра. Алгоритм вынесен в отдельную процедуру, так как будет вызываться из различных мест модуля формы. В данной процедуре выполняется формирование списка значений, содержащего перечень элементов, удовлетворяющих критерию отбора. Собственно установка отбора по полученному набору элементов выполняется с помощью вызова метода ИспользоватьСписокЭлементов, которому в качестве параметра передается сформированный список значений.
В приведенном примере формирование списка элементов достигается включением в него всех групп подчиненных текущему родителю. Для этого используется объект типа Справочник. В список включаются все группы подчиненные текущей, без анализа подчиненных элементов. Так как группы в списке товаров следуют перед элементами, то при нахождении первого элемента заполнение списка прекращается.
Так как при работе со списком текущая (открытая) группа меняется, то вызов процедуры УстановкаФильтра выполняется не только при открытии формы, но и в предопределенной процедуре ПриВыбореРодителя. При открытии формы принудительно устанавливается иерархический режим просмотра и отключается возможность его изменения пользователем.
Выбор документа из общего журнала При выборе в форме значения элемента диалога типа Документ неопределенного вида  в начале системой выдается список видов документов, а затем открывается журнал для выбора документа конкретного вида. В некоторых случаях удобнее организовать выбор из общего журнала, без предварительного выбора вида документа.
В методической конфигурации выбор из общего журнала демонстрируется на примере отчета ДвижениеТоваров. В диалоге формы отчета конечная граница может быть выбрана в виде документа, чтобы получить данные о движениях и остатках товаров не до конца даты, а до определенного момента. Выбор осуществляется из общего журнала документов.
Для того, чтобы документ выбирался из общего журнала в форме отчета используется предопределенная процедура ПриНачалеВыбораЗначения. В ней для элемента диалога, в котором выбирается документ, отменяется стандартный выбор и открывается форма общего журнала, из которой и происходит выбор документа. Журнал открывается с помощью функции ОткрытьФорму.
В приведенном примере демонстрируется также возможность ограничения выбора документа. Для этого в открываемую форму передается параметр типа СписокЗначений, в котором могут задаваться различные ограничения, накладываемые на выбираемый документ. В данном примере допускается выбор только проведенных документов.
Собственно ограничение выбора выполняется в форме журнала документов с помощью обработки выбора строки в предопределенной процедуре ПриВыбореСтроки. Обработка выбора строки инициализируется в процедуре ПриОткрытии методом ОбработкаВыбораСтроки.
Использование такой методики позволяет наложить на выбираемый документ практически любые ограничения.
Поиск в списке справочника по первым символам В форме списка справочника существует штатная возможность быстрого поиска по первым символам наименования. Однако при работе в разделенном режиме и при достаточно высокой нагрузке локальной сети этот механизм работает недостаточно эффективно. Это объясняется тем, что после ввода каждого символа производится поиск нужного наименования в справочнике, активизация найденного элемента и отображение соседних элементов умещающихся в окне формы списка справочника. Однако часто операторы хорошо знают содержимое справочников, и для них поиск после ввода каждого символа является излишним.
Для получения более эффективного решения предлагается методика реализации аналогичного поиска средствами встроенного языка. В методической конфигурации эта методика демонстрируется на примере формы списка справочника Организации.
Для активизации поиска используется кнопка, которая может также быть вызвана с помощью функциональной клавиши. Это позволит оператору при интенсивной работе максимально быстро обращаться к функции поиска.
Основное отличие данной методики от стандартного режима заключается в том, что пользователю предлагается сначала ввести несколько первых букв поиска, а затем выполняется собственно поиск. Поиск выполняется сначала в активной группе, а затем (если в активной группе элемент не найден) во всем справочнике. В случае неудачного поиска пользователю предлагается повторить ввод строки. Если поиск прошел успешно, то выполняется активизация найденного элемента в списке справочника.
Обычно потребность в использовании таких процедур возникает в больших справочниках, которые интенсивно используются при вводе документов. Данная процедура реализована таким образом, что она может быть перенесена в форму любого справочника без каких-либо изменений.
Поиск в справочнике по подстроке В форме списка справочника существует штатная возможность поиска элемента по вхождению строки в наименование или другие реквизиты. Однако при работе в разделенном режиме и при большом размере справочника этот механизм работает недостаточно эффективно. Кроме того, данный режим не позволяет получить сразу все элементы, содержащие в наименовании искомую строку, а требует продолжения поиска после каждого найденного элемента.
Для получения более эффективного решения предлагается методика реализации аналогичного поиска средствами встроенного языка. В методической конфигурации эта методика демонстрируется на примере формы списка справочника Организации.
Для активизации поиска используется кнопка в форме списка справочника. Собственно механизм поиска реализован в виде отдельной обработки ВыборИзСправочникаПоПодстроке, которая вызывается в модальном режиме при нажатии кнопки в списке справочника. При вызове обработки с помощью функции ОткрытьФорму ей в качестве параметра передается  вид справочника, а выбранный элемент обработка возвращает в переданную в качестве параметра переменную. Основное отличие данной методики от стандартного режима заключается в том, что пользователю предлагается сначала ввести строку поиска, а затем выполняется собственно поиск среди всех элементов. Результаты поиска выводятся в виде таблицы, из которой пользователь может выбрать нужный элемент. После выбора окно обработки закрывается и выполняется позиционирование в списке справочника на выбранный элемент. Элементы диалога обработки расставлены таким образом, что пользователь может легко вводить строку и выполнять поиск, используя только алфавитную клавиатуру и клавишу Enter.
Для реализации выборки элементов по вхождению строки в наименование используется объект Запрос. Так как в объекте Запрос нет специальных средств для построения условия по вхождению подстроки, то с помощью запроса выбираются все элементы справочника, а затем из них выбираются нужные элементы. Ощутимый выигрыш с точки зрения производительности данная методика может дать при работе с базой данных в формате SQL. Это объясняется тем, что получение даже большого количества элементов с помощью одного запроса значительно эффективнее, чем  последовательный обход элементов справочника.
Обычно потребность в использовании таких процедур возникает в больших справочниках, которые могут содержать плохо знакомые пользователям наименования. Данная обработка реализована таким образом, что она может быть использована для выбора из любого справочника без каких-либо изменений.

Варианты заполнения табличного документа

Стандартные действия системы выполняются при отсутствии предопределенной процедуры ОбработкаЯчейкиТаблицы или если данная процедура установила флаг стандартной обработки.
Примером нестандартной обработки значения ячейки таблицы может быть вызов формирования другого отчета. Таким образом, мы можем создавать как бы вложенные отчеты, которые вызываются один из другого, выдавая с каждым разом более детальную информацию.
Рассмотрим построение вложенных отчетов на примере отчета ПродажаТоваров, в котором отображается количество проданных за некоторый период товаров. Пример этого отчета включен в методическую конфигурацию.
В отчете выводятся данные по продажам товаров. Мы хотим получить более подробный отчет по продажам конкретного товара. Так, чтобы, указав на товар в отчете, и дважды нажав кнопку мыши, мы получали отчет по продажам именно этого товара по различным клиентам. Для этого в таблице отчета ТабВсего в свойствах ячейки (Свойства ячейки - Текст - поле: Расшифровка), отображающей наименование товара, проставлено выражение Запрос.Товар.
В модуле отчета расположена процедура формирования дополнительного отчета ПродажаТовара. Эта процедура вызывается из предопределенной процедуры ОбработкаЯчейкиТаблицы, которая будет вызвана системой при двойном щелчке или нажатии клавиши Enter на выбранной ячейке отчета о продажах товаров. Главная задача этой процедуры - определить, что выбрана ячейка, где указано значение товара и вызвать на исполнение процедуру формирования дополнительного отчета.
В режиме исполнения, если в отчете Продажа товаров мы укажем курсором на товар и выполним на нем двойной щелчок мышью, то сформируется дополнительный (более подробный) отчет Отчет о покупке товаров клиентами.
В описанном варианте расшифровки используется одно конкретное значение - товар. Однако, важной особенностью механизма расшифровок является возможность включения в ячейки в качестве значения расшифровки объекта типа СписокЗначений. Это позволяет фактически передавать процедуре ОбработкаЯчейкиТаблицы в качестве параметров расшифровки несколько значений для одной ячейки. Это необходимо в том случае, если отчет являющийся расшифровкой должен параметризоваться более чем одним значением. Важно, что при выводе секции таблицы в ячейке записывается не
ссылка на список значений, а копия списка значений. Это позволяет использовать при выводе отчета один объект СписокЗначений, изменяя его перед выводом секций и включая его во все ячейки, для которых предусматривается расшифровка. Для идентификации отдельных значений в списке можно применять методы Установить и Получить, используя в качестве идентификатора строковое представление значения в списке.
В отчете ПродажаТоваров методической конфигурации возможность использования для расшифровки отчета списка значений демонстрируется на примере дальнейшей расшифровки полученного отчета о продаже товаров по конкретным клиентам. Для этого в поле Расшифровка таблицы отчета Таблица помещается объект Расш. Данный объект является списком значений, и по мере формирования отчета в нем устанавливаются два значения - организация и товар. Предопределенная процедура ОбработкаЯчейкиТаблицы анализирует полученный в качестве значения расшифровки список значений и вызывает процедуру Карточка, формирующую более подробный отчет по конкретному товару и конкретной организации.
Расшифровка отчета Карточка демонстрирует использование стандартных действий системы. В поле расшифровки включается значение типа Документ. Процедура ОбработкаЯчейкиТаблицы не выполняет никаких действий с данным значением расшифровки, и система автоматически открывает документ при вызове расшифровки ячейки.
Мы рассмотрели простейшее применение механизма расшифровок отчетов. При использовании этого механизма существуют некоторые дополнительные возможности.
Например, как отмечалось выше процедура ОбработкаЯчейкиТаблицы может располагаться не в модуле формы сформировавшей отчет, а в глобальном модуле. Это позволяет организовать в конфигурации единый централизованный механизм расшифровок.
В поле Расшифровка ячейки табличного документа после выражения заполняющего собственно значение расшифровки ячейки может присутствовать символ # . В этом случае значение расшифровки данной ячейки будет автоматически распространяться на всю строку таблицы, за исключениям тех ячеек, для которых определено собственное значение расшифровки. Это позволяет организовать расшифровку всей строки указанием значения расшифровки только в одной ячейке этой строки. Кроме того, наличие в строке расшифровки последовательности символов ## позволяет создавать ячейки со скрытыми значениями расшифровки, которые не будут использоваться системой при двойном щелчке мыши или нажатии клавиши Enter . Их можно использовать как дополнительную информацию при вызове других расшифровок, получая их значения по известным координатам ячейки таблицы в процедуре ОбработкаЯчейкиТаблицы. Например, в одну ячейку таблицы отчета можно помещать общие для всей таблицы данные, которые должны быть использованы в расшифровке.
Использование списка значений в качестве меню или диалога-выбора (метод ВыбратьЗначение) позволяет в некоторых случаях в процедуре ОбработкаЯчейкиТаблицы организовать выбор одного из нескольких вариантов расшифровки данной ячейки таблицы. Если используется объект СписокЗначений с выбором в виде меню, то положение меню автоматически привязывается системой на экране к положению курсора мыши в момент вызова расшифровки или к ячейке, для которой вызвана расшифровка, если расшифровка вызвана клавишей Enter.
Достаточно представительным примером использования механизма расшифровки отчетов является система стандартных бухгалтерских отчетов, включаемая в типовую конфигурацию 1С:Бухгалтерии и комплексную конфигурацию 1С:Предприятия.
Варианты заполнения табличного документа
Отключение режима Защита у ячеек табличного документа У ячеек табличного документа имеется флажок Защита. По умолчанию этот флажок включен.
В табличном документе, используемом для формирования печатных форм отключение данного флажка позволяет установить для отдельных ячеек режим, при котором  эти ячейки можно будет редактировать даже при включенном режиме ТолькоПросмотр. Это позволяет предусмотреть для отдельных ячеек сформированной печатной формы возможность изменения их содержимого перед выводом на печать.
В методической конфигурации отключение флажка Защита демонстрируется на примере печати расходной накладной. В печатной форме накладной допускается изменение номера документа и способа доставки. В открытой печатной форме существует возможность перехода по ячейкам, доступным для редактирования с помощью клавиш Tab и Shift+Tab.
Особенно важна возможность отключения защиты у отдельных ячеек при использовании режима Защита самой таблицы. Данный режим исключает возможность фальсификации персоналом данных первичных документов и отчетов, так как не позволяет отключить режим ТолькоПросмотр, а также выполнить копирование таблицы или сохранение ее в файле. В этом случае отключение защиты отдельных ячеек позволяет выделить часть данных табличного документа, которые могут изменяться при печати.
Заметим, что для табличного документа используемого в режиме ввода данных значение этого флажка имеет особое значение. С описанием этого режима Вы можете ознакомиться в отдельном разделе данной рубрики.
Размещение табличного документа в форме отчета (обработки) В версии 7.7 табличный документ в форме отчета (обработки) может быть включен непосредственно в форму. Он может выводиться вместе с диалогом формы или вместо диалога. Установка этого режима выполняется из меню Действия - пункт Свойства формы.  Для выбора режима размещения в форме табличного документа, предназначенного для просмотра и печати, следует выбрать вариант Использовать таблицу: Пустую.
Заметим, что для подключения табличного документа используемого в режиме ввода данных следует выбрать вариант Использовать таблицу: Для ввода данных. С описанием этого режима Вы можете ознакомиться в отдельном разделе данной рубрики.
Размещение в окне формы отчета (обработки) табличного документа, предназначенного для просмотра и печати, может использоваться в самых разнообразных целях.
Прежде всего, этот режим предназначен для создания часто используемых отчетов с небольшим количеством параметров настройки, которые размещаются в диалоге формы.  Для таких отчетов возможность размещения в одном окне параметров настройки и самого табличного документа позволяет быстро обновлять содержимое отчета, изменяя параметры настройки.
Доступ к контексту табличного документа в этом режиме осуществляется с помощью предопределенного атрибута Таблица контекста формы и не требует вызова функции СоздатьОбъект. В остальном, в этом режиме заполнение табличного документа ничем не отличается от обычного режима использования табличного документа.
В методической конфигурации размещение табличного документа в форме отчета  демонстрируется на примере отчета ДинамикаПродаж.
Основным преимуществом такой организации формы для пользователя является удобное переключение параметров отчета и его обновление без открытия специальных окон.
С точки зрения разработки конфигурации такой режим позволяет существенно упростить задачу обновления отчета и изменения его параметров настройки. Упрощение, прежде всего, обеспечивается тем, что табличный документ непосредственно связан с диалогом формы и модулем формы. Это позволяет избежать сложного управления расшифровками табличного документа для его обновления.
Кроме создания отчетов совмещенных с диалогом настройки этот режим позволяет решать многие другие задачи, например, на его основе разработан Путеводитель по типовой конфигурации 1С:Бухгалтерии. В методической конфигурации данный режим применен также в режиме подбора из таблицы в расходной накладной.
Использование табличного документа в режиме ввода данных Использование табличного документа в режиме ввода данных является отдельным механизмом и существенно отличается от обычного использования табличного документа.
Режим ввода данных табличного документа предназначен для решения специальных задач.
Прежде всего, его целесообразно использовать для заполнения данных в больших бланках установленного образца, когда информация вводится пользователем вручную, а не формируется программой автоматически. Именно такое использование данного режима применяется в регламентированных отчетах, поставляемых для типовых конфигураций 1С:Предприятия. Однако, данный механизм может применяться и для других задач.
В методической конфигурации применение данного механизма демонстрируется на примере настройки строк используемых для вывода числовых величин, дат и периодов прописью. Обработка НастройкаПрописи вызывается из справочника валют и из главного меню. В этой обработке использование табличного документа позволяет организовать удобный ввод большого количества строк.
При работе табличного документа в режиме ввода данных он обязательно размещается в форме отчета (обработки). Он может выводиться вместе с диалогом формы или вместо диалога. Данный режим настраивается на этапе конфигурирования. Установка этого режима выполняется из меню Действия - пункт Свойства формы.  Для выбора режима ввода данных, следует выбрать вариант Использовать таблицу: Для ввода данных.
В отличие от других режимов в режиме ввода данных в форме используется всегда только один табличный документ, и он не выводится средствами встроенного языка, а выбирается в диалоге настройки свойств формы на этапе конфигурирования. Соответственно в ходе работы формы сам состав ячеек табличного документа изменен быть не может, могут изменяться только данные и элементы оформления отдельных ячеек. Таким образом, принципы работы табличного документа в этом режиме во многом похожи на работу диалога формы.
Следует учитывать, что сама таблица, выбранная в свойствах формы, как  используемая для ввода данных и настроенная соответствующим образом будет обладать специфическими свойствами и ее не следует использовать как исходную таблицу для формирования обычной печатной формы.
Существует три способа использования ячеек табличного документа в режиме ввода данных.
Часть ячеек содержит исключительно текст, и является фактически постоянной частью формы. Обычно, они соответствуют содержанию типографского бланка. У этих ячеек включен флажок Защита и не используется формула. Другая часть ячеек используется непосредственно для ввода информации. У этих ячеек снят флажок Защита. Формула у них может использоваться для выполнения некоторых действий после ввода данных в конкретной ячейке. Третья часть ячеек используется для отображения некоторой производной информации, которая зависит от вводимых ячеек или данных информационной базы, но не редактируется пользователем (например, итоговые суммы по вводимым ячейкам). Для этих ячеек установлен флажок Защита, а в формуле записывается выражение, которое будет вычисляться после любого изменения вводимых ячеек, и результат вычисления которого, собственно, и будет отображаться в ячейке. Следует заметить, что в качестве ячеек любых из указанных типов может выступать также  рисунок типа Текст.
При настройке табличного документа в режиме ввода для ячеек может быть указан тип данных. При использовании в качестве типа ячейки строки неограниченной длины значение ячейки фактически совпадает с ее текстом и работа с ней ничем не отличается от обычного использования ячеек. При выборе любого другого типа - ввод данных в ячейку будет зависеть от типа, и выполняться аналогично вводу данных в реквизит диалога. Текст ячейки при этом будет являться лишь отображением введенного значения. Например, если выбрать тип Справочник.Валюты, то при редактировании ячейки будет выбираться валюта из справочника валют, а текст ячейки будет соответствовать стандартному представлению элемента справочника. Заметим, что использование в качестве типа данных строки неограниченной длины не позволяет устанавливать ячейке различные дополнительные свойства на закладке Данные. Для использования этих свойств, следует выбрать любой другой тип данных.
Доступ к ячейкам табличного документа в режиме ввода данных может осуществляться стандартным способом через предопределенный атрибут Таблица, доступный в контексте  формы отчета (обработки). Однако ячейки, для которых в таблице заданно имя, доступны непосредственно в контексте формы, также как  и элементы диалога формы.
При работе пользователя с табличным документом, используемым в режиме ввода данных, программа позволяет осуществлять ввод только в ячейках со снятым флажком Защита. Причем он может переходить по таким ячейкам нажатием клавиш Tab и Shift+Tab. Кроме того, после ввода значения в ячейку система может автоматически активизировать следующую ячейку, предназначенную для ввода (по строкам или столбцам). Этот режим выбирается в настройках формы. После заполнения конкретной ячейки выполняется заданная для нее формула, которая может, например, изменить значения других ячеек. После любых изменений в табличном документе автоматически
пересчитываются все ячейки с установленным флажком Защита, для которых указаны формулы.
Дадим несколько рекомендаций по использованию данного режима.
Режим ввода данных табличного документа имеет несколько ограничений по сравнению с возможностями диалога формы. Он не позволяет использовать такие элементы, как список, список для выбора, кнопка, флажок и т.д. Для организации выбора значения из списка значений следует использовать тип Строка определенной длины с включенными признаками Кнопка выбора и Запретить редактирование. При этом выбор будет осуществляться с помощью предопределенной процедуры ПриНачалеВыбораЗначения. В примере в методической конфигурации эта возможность использована при выборе рода валюты.
Для активизации пользователем выполнения некоторого действия может быть использована предопределенная процедура ПриВыбореЯчейкиТаблицы, которая будет вызываться по двойному щелчку мыши или нажатии клавиши Enter в некоторой ячейке. Это позволяет использовать определенные ячейки для активизации пользователем необходимых действий.
Одним из удобных приемов манипулирования ячейками является вызов методов устанавливающих оформление или содержимое ячеек для именованной области, включающей сразу несколько ячеек.
Автоматическое разбиение текста в ячейке табличного документа на несколько строк Для того чтобы текст ячейки в табличном документе переносился на следующую строку, нужно для ячейки установить режим Контроль-Переносить, а для строки, в которой размещается ячейка, установить высоту Авто.
Если Вы в процессе редактирования исходной таблицы измените высоту строки, то  режим автоматического разбиения строк работать не будет. В этом случае нужно будет снова установить высоту строки Авто.
Рекомендации по установке параметров табличного документа При создании отчетов или печатных форм табличных документов рекомендуется установить некоторые параметры, обеспечивающие удобную работу пользователя. При этом следует учитывать, что большая часть пользователей не в полной мере владеет всеми возможностями 1С:Предприятия и поэтому в процессе конфигурирования имеет смысл предусмотреть автоматическую установку даже тех параметров, которые пользователь может настроить самостоятельно.
Прежде всего, в большинстве случаев имеет смысл включить режим ТолькоПросмотр. Если этот режим не установлен, то при открытии табличного документа будет активизироваться панель формул и, соответственно, будет происходить смещение всех окон вниз.
Практически для всех табличных документов имеет смысл указать определенный заголовок в методе Показать, чтобы пользователь мог легко понять назначение окна в панели окон.
Рекомендуется для тех печатных форм, для которых это имеет смысл установить фиксацию шапки и боковика в параметрах метода Опции. Это обеспечит более удобный просмотр больших отчетов.
Для отчетов и печатных форм документов рекомендуется установить в методе Опции идентификатор индивидуального сохранения параметров печати. Это избавит пользователя от необходимости задавать параметры страницы перед печатью каждого документа.
Для некоторых печатных форм (обычно имеющих небольшой размер) имеет смысл задать в методе Опции идентификатор сохранения индивидуальных размеров окна. Это позволит пользователю просматривать печатную форму в удобном для него окне.
Для широких печатных форм рекомендуется принудительно установить соответствующую ориентацию бумаги с помощью метода ПараметрыСтраницы.
Для многостраничных форм с помощью методов ПовторятьПриПечатиСтроки и  ПовторятьПриПечатиСтолбцы рекомендуется обеспечить дублирование шапки и боковика на каждой странице.
Для небольших печатных документов можно рекомендовать устанавливать автоматический вывод двух экземпляров  на странице (метод ЭкземпляровНаСтранице). Часто пользователи не осведомлены о такой возможности, что приводит к излишнему расходу бумаги.
Для конфигураций, в которых предполагается работа большого количества персонала, можно рекомендовать использовать метод (Защита) для исключения возможности фальсификации путем исправления первичных документов.
Особенности установки параметров табличного документа При использовании метода ЭкземпляровНаСтранице следует учитывать, что значение данного параметра не определяет собственно количество выводимых на печать экземпляров табличного документа. То есть количество экземпляров должно быть указано независимо (без учета значения параметра Экземпляров на страницу) с помощью метода КоличествоЭкземпляров или пользователем при вызове функции печати. То есть, чтобы реально было распечатано 2 экземпляра на странице, нужно не только вызвать метод ЭкземпляровНаСтранице, но и установить количество экземпляров больше или равное двум.
Свойства табличного документа, задаваемые визуально для всего документа в целом не переносятся из исходной таблицы в формируемый табличный документ. Для установки этих свойств в формируемом табличном документе следует использовать соответствующие методы объекта Таблица. К таким свойствам относятся: показ сетки и заголовков, фиксация строк и столбцов, повторение печати на каждом листе, область печати, черно-белый режим, масштаб, режим Только просмотр, опции печати.
Кроме того, при заполнении табличного документа из исходной таблицы не переносятся имена секций и имена областей выделенных в исходной таблице.
Метод области таблицы ВысотаСтроки может использоваться только для указания новой высоты строки или для получения текущей высоты установленной явно. То есть с помощью данного метода нельзя получить высоту строки для тех строк, для которых установлена высота Авто. Для этих строк метод ВысотаСтроки будет возвращать нулевое значение.  Фактически высота для таких строк будет определяться непосредственно в процессе печати и будет зависеть от содержимого ячеек.
Особенности использования значения расшифровки ячейки Значение расшифровки ячейки табличного документа хранится в табличном документе в качестве строки. Способ хранения значений аналогичен преобразованию значения в строку с помощью функции ЗначениеВСтрокуВнутр. Особенности данного способа преобразования описаны в разделе Технологические вопросы  - Сохранение (восстановление) значений в строку. Хранение значения расшифровки в виде строки определяет ряд особенностей использования расшифровок. При сохранении табличного документа в файле (в формате MXL) значения расшифровок корректно сохраняются и потом могут использоваться также как и у сформированного табличного документа. Однако следует учитывать, что значения типа Справочник, Документ, Счет, а также таблицы значений и списки значений, содержащие значения данных типов, могут при использовании сформированного ранее табличного документа ссылаться на уже несуществующие объекты. Кроме того, расшифровки табличного документа нельзя использовать в других информационных базах, так как применяемый для расшифровок способ сохранения в строку позволяет системе интерпретировать значение только в
той информационной базе, в которой оно было помещено в строку. Для заполнения ячеек табличного документа значениями расшифровок может использоваться метод Расшифровка табличного документа. При этом следует учитывать, что присвоение значения расшифровки и обращение к расшифровке сопровождаются преобразованием значения к строке и из строки. Соответственно обращение к уже присвоенному расшифровке значению агрегатного типа может сказаться на производительности алгоритма, так как будет вызывать обращение к информационной базе. Рекомендуется все операции с запоминаемым в расшифровке значением выполнять предварительно с использованием переменных.

Особенности работы с бухгалтерскими итогами

Рассчитать;
- период обращения к итогам должен совпадать с периодом расчета временных итогов объекта с признаком   актуальности (если обращение выполняется только по начальной или конечной границе периода, то достаточно совпадения этой границы);
- область запрашиваемых данных итогов должна входить в область рассчитанных итогов актуального объекта БухгалтерскиеИтоги (во временном расчете должны участвовать те счета и виды итогов, по которым запрашиваются данные).
Оптимизация группового проведения документов выполняется следующим образом:
- в обработке выполняющей проведение документов в монопольном режиме создается объект БухгалтерскиеИтоги и ему устанавливается признак Актуальность;
- в процессе обхода документов выполняется  временный расчет этого объекта на момент каждого проводимого документа;
- при проведении документов все обращения  различных объектов типа БухгалтерскиеИтоги  к данным на момент документа автоматически используют итоги рассчитанные объектом с признаком Актуальность.
Благодаря тому, что  итоги объекта находятся в актуальном состоянии, их расчет на момент следующего документа выполняется достаточно быстро, так как обрабатываются только проводки от последнего момента, на который были рассчитаны итоги,  до требуемого. При этом не обязательно, чтобы итоги рассчитывались на каждый документ, необходимо лишь, чтобы каждая последующая граница расчета была позже предыдущей. Заметим, что для такой оптимизации не нужно вносить никаких изменений в модули документов. В типовой конфигурации 1С:Бухгалтерии 7.7 такая оптимизация реализована в обработке ОбработкаДокументов.
Кроме того, при выполнении группового проведения документов штатным режимом 1С:Предприятия, а не средствами встроенного языка, объект БухгалтерскиеИтоги  с признаком Актуальность создается системой автоматически, что позволяет оптимизировать проведение документов обращающихся к бухгалтерским итогам на момент документа.
В процессе проведения документов также возможно использование метода Актуальность для оптимизации обращения к итогам нескольких объектов типа БухгалтерскиеИтоги  с использованием другого объекта, для которого выполняется временный расчет непосредственно в модуле документа. Однако такая оптимизация может быть эффективна далеко не всегда, так как временный расчет выполняется обычно по достаточно большому объему данных и временные затраты на его выполнение могут оказаться больше чем выигрыш от оптимизации обращения к итогам другими объектами.
Основным мотивом использования метода Актуальность при проведении документа может являться необходимость обращения к итогам с учетом уже записанных проводок в процессе данного проведения. Для этого после добавления некоторой части проводок должен вызываться метод операции ЗаписатьПроводки, чтобы проводки были реально записаны и отражены в итогах объекта с признаком Актуальность.
Разумеется, использование метода Актуальность при проведении документа имеет смысл только, если для этого объекта выполняется метод Рассчитать, так как при обращении к отдельным итогам по установленному периоду кратному месяцу или при выполнении запроса будут использованы основные итоги, которые всегда находятся в актуальном состоянии и обновляются при выполнении метода ЗаписатьПроводки. Таким образом, реально использование метода Актуальность при проведении документа целесообразно главным образом при необходимости получения итогов на документ, причем с учетом уже записанных в процессе данного проведения проводок. Заметим, что такая потребность возникает достаточно редко, так как в большинстве случаев требуемый алгоритм можно реализовать и без учета в итогах уже записанных проводок, а затраты на выполнение временного расчета могут весьма существенно сказаться на производительности.
Особенности получения итогов при отключении отдельных видов учета по субконто В 1С:Предприятии 7.7 при настройке аналитического учета в плане счетов существует возможность отключения некоторых видов учета для конкретных видов субконто настроенных для счета. Например, в типовой конфигурации отключен суммовой учет по счету 10 (материалы) по субконто Места хранения.
При обращении к бухгалтерским итогам по счетам, для которых отключены отдельные виды учета, не выводятся итоги по подчиненным группировкам, если отключен учет по вышестоящим группировкам, или не выводятся итоги по всем группировкам, если отключен учет по субконто, по которым установлен отбор.
Это значит, например, что если выполнить запрос объекта БухгалтерскиеИтоги по счету 10 по субконто Места хранения на первом уровне и по субконто Материалы на втором, то итоги по субконто Материалы будут выдаваться без суммовых итогов, так как вышестоящая группировка субконто Места хранения не имеет итогов по сумме. Аналогично не будут выдаваться суммовые итоги по материалам, если в запросе установлен отбор по конкретному значению субконто Места хранения.
Если же, разворачивать итоги по Материалам, а внутри материалов по Местам хранения, то итоги по материалам будут выводиться в суммовом выражении.
               Получение итогов по пустому значению субконто В некоторых случаях необходимо получить итоги по пустому значению субконто, то есть по тем проводкам, в которых значение субконто не заполнено.
По умолчанию объект БухгалтерскиеИтоги воспринимает заданное в методе ИспользоватьСубконто конкретное значение субконто, как указание отбирать по данному значению вне зависимости от того, какое значение передано в параметре ТипФильтра. Но если в качестве конкретного значения субконто передано пустое значение, а в параметр ТипФильтра передано значение 1 (Разворачивать), то будет выполняться разворот по всем значениям данного вида субконто.
Если необходимо отобрать итоги именно по пустому значению субконто, то нужно непосредственно указывать значение параметра ТипФильтра метода ИспользоватьСубконто -  2 (Отбирать).
Использование параметра ФлагВсе при обходе результатов запроса В методах выборки итогов запроса объекта БухгалтерскиеИтоги (ВыбратьСчета, ВыбратьСубконто и др.) может использоваться параметр ФлагВсе. Он позволяет получить выборку значений группировки запроса на данном уровне включая не только те значения, по которым есть итоги по текущим значениям вышестоящих группировок, но и включая те значения, по которым есть значения данной группировки во всем запросе или в пределах одной из вышестоящих группировок.
На практике, данная возможность применяется в основном для построения отчетов, в которых  значения некоторой группировки разворачивается по горизонтали с помощью метода ПрисоединитьСекцию. Использование параметра ФлагВсе позволяет формировать такой отчет без предварительного определения полного перечня колонок, которые нужно будет выводить в каждой строке, так как выборка значений группировки будет одинакова для всех значений вышестоящей группировки, которая определяет разворот отчета по строкам.
Развернутое сальдо по счету, который является группой При получении развернутого по субконто сальдо по счету, учитываются виды субконто, которые находятся на данном счете. Если у принадлежащих счету, субсчетов есть дополнительные виды субконто, то они не оказывают влияния на результат подсчета развернутого по субконто сальдо по счету в целом.
Так в типовой конфигурации 1С:Бухгалтерии по счету 76 не задано ведение аналитического учета. В данном случае не имеет смысла развернутое по субконто сальдо для 76 счета, так как оно всегда будет равно неразвернутому сальдо, даже если на субсчетах 76 счета будут настроены одинаковые виды субконто.
По 62 счету настроены виды субконто Контрагенты и Основания. В данном случае можно получить развернутое по Контрагентам и/или Основаниям сальдо по 62 счету. Но развернутое по ВариантамРеализации сальдо получить нельзя, хотя данный вид субконто настроен у субсчета
Особенности бухгалтерского запроса по нескольким видам субконто Иногда требуется получить бухгалтерские итоги в разрезе нескольких видов субконто. Для задания видов субконто, по которым нужно получить итоги, используются методы ИспользоватьСубконто и ИспользоватьКорСубконто.
При использовании данных методов надо учитывать следующую особенность их поведения. Указанные в методе виды субконто, используется как фильтр для отбора итогов и проводок. При многократном использовании метода ИспользоватьСубконто указанные виды субконто накладывают ограничение на выборку данных соединяясь по И а не по ИЛИ. То есть если перед запросом вызвать метод ИспользоватьСубконто два раза, сначала с видом субконто МестаХранения, а потом с видом субконто Материалы, то будут отобраны итоги и проводки, в которых присутствуют оба вида субконто и МестаХранения и Материалы, а не те в которых есть МестаХранения или Материалы. Поэтому применение метода ИспользоватьСубконто не имеет смысла больше чем максимальное количество субконто определенное в конфигурации.
Если в бухгалтерском запросе нужно получить информацию по счетам с различным набором видов субконто, то в методе ИспользоватьСубконто не надо указывать вид субконто. В данном случае обращение к субконто происходит по номеру. Субконто располагаются в том порядке, в каком они определены в счете, к которому относится данный итог или проводка.

Вопросы производительности конфигураций

При конфигурировании справочников следует помнить, что существует возможность создания нескольких форм списков и использовать разные формы при вызове справочника из главного меню, при выборе в процессе заполнения документов и в процессе подбора. Скорость работы списка справочника зависит от количества информации выводимой в форме, требующей дополнительного обращения к данным:
- Периодическим реквизитам. Размещение в колонках списка большого количества периодических реквизитов замедляет просмотр списка.
- Строкам неограниченной длины. Наличие в колонках таких реквизитов так же замедляет просмотр.
- Реквизитам типа Справочник, Документ, Счет. Отображение таких реквизитов требует выборки представлений их значений из информационной базы.
- Формулам, осуществляющим выборку данных из информационной базы.
Например, обращение к текущим остаткам по товарам, особенно если используется метод регистра СводныйОстаток или выбираются данные из бухгалтерских итогов по неполному набору значений субконто.
Помещение таких данных не в табличную часть формы, а как отдельных реквизитов диалога заметно ускоряет работу, так как данные выводятся только по текущей строке, но часто целесообразно эту информацию выдавать по запросу (по нажатию кнопки).
Создание нескольких форм списков позволяет не выводить лишнюю информацию в тех режимах, в которых это не имеет большого смысла, например, можно минимизировать состав информации выводимой в форме списка справочника, используемой для выбора.
Заметим также, что для выбора значений  маленьких справочников, состоящих всего из нескольких элементов целесообразно использовать в документах и других формах режим быстрого выбора, который указывается для элемента диалога. Например, так можно выбирать валюту, склад и т.д.
Оптимизация работы документов Документы Общие реквизиты.
Возможность создания общих реквизитов предназначена для определения данных, которые используются в большинстве видов документов. Заметим, что если такой реквизит создан, то под него будет отводиться дисковое пространство в документе каждого вида. Поэтому не следует вводить общие реквизиты, если они будут реально использоваться только в документах отдельных видов.
 Общие реквизиты с признаком Отбор.
Общие реквизиты документов с признаком Отбор рекомендуется создавать только при явной необходимости просмотра журнала с отбором по данному реквизиту или быстрого получения выборок документов по значению данного реквизита средствами встроенного языка. Желательно не создавать в конфигурации большое количество общих реквизитов с признаком Отбор, так как это может  замедлить запись документов. Заметим, что при работе конфигурации с большим количеством документов следует ограничивать сервисные режимы просмотра журнала документов. Использование общих реквизитов с признаком Отбор в таких конфигурациях должно быть весьма обосновано.
 Строковые реквизиты неограниченной длины.
При создании строковых реквизитов шапки документа следует внимательно отнестись к решению: делать их неограниченной или конкретной длины. Реквизиты неограниченной длины несколько замедляют обращение к данным реквизитам (а не к документу вообще), но существенно экономят объем базы данных при частичном заполнении строк, так как записываются блоками по 80 символов. Причем пустая строка (не заполненный реквизит) не будет занимать места вообще.
 Номера документов.
Использование нумераторов в документах никак не влияет на производительность. Однако, не рекомендуется задавать в метаданных слишком длинные номера документов даже у редко встречаемых документов. Ресурсы системы, используемые для поддержки номеров документов, зависят от максимальной длины номера среди документов всех видов.
 Реквизиты типа Документ.
Если в структуре документа имеются реквизиты типа Документ, то система автоматически поддерживает механизм подчиненных документов. Для этого в информационной базе хранится список ссылок на подчиненные документы. Затраты системы на поддержание этого списка по конкретному документу зависят от количества различных значений типа Документ в реквизитах документа. Если, например, в документе будет присутствовать два реквизита типа Документ в шапке, то в список будет заноситься две записи. А если в документе будет присутствовать один реквизит типа Документ в табличной части, то в список будет занесено столько записей, сколько строк в табличной части конкретного документа, при условии, что во всех строках эти значения разные. Данный механизм в конфигурации не может быть отключен. Описанное влияние реквизитов типа Документ имеет смысл учитывать при проектировании структуры документа.
Формы ввода документов Обычно при одновременной работе с программой  нескольких пользователей основным режимом работы большинства пользователей является ввод и проведение документов. Приведем рекомендации по оптимизации работы пользователя в форме документа.
Если вас не удовлетворяет скорость работы системы при заполнении пользователем формы документа, следует проанализировать все действия пользователя в процессе заполнения формы с точки зрения доступа к информационной базе.
В шапке документа, обычно, выбираются значения общих для документа полей (склад, валюта, организация-покупатель и т.д.). Выбор  значения из списка справочника, разумеется, требует значительного количества обращений к информационной базе. Если при последовательном вводе документов часто происходит выбор одних и тех же значений из справочника, то можно предусмотреть средства, которые будут при вводе нового документа автоматически заполнять большинство реквизитов, например, значениями, выбранными при вводе предыдущего документа этим пользователем. Для этого можно использовать методы СохранитьЗначение/ВосстановитьЗначение или заносить стандартные значения в качестве реквизитов в справочник пользователей.
Еще более существенным с точки зрения доступа к данным является заполнение табличной части документа. При стандартном способе заполнения ввод каждой строки может начинаться, например, с выбора из справочника товара. Открытие списка справочника и его автоматическое позиционирование на выбранном в предыдущей строке товаре является достаточно ресурсоемкой операцией. Значительно меньше ресурсов будет тратиться при использовании режима подбора. В этом случае справочник не будет каждый раз открываться, да и заполнение документа может оказаться значительно удобнее. Заметим, что при наличии обоих режимов, если Вы хотите, чтобы менеджеры реально использовали именно подбор рекомендуется добиваться этого, не организационными методами, а средствами конфигурации, например, запретив ввод новой строки вручную для новых документов вводимых продавцами.
Разумеется, ввод товаров существенно ускоряет использование сканеров штрих-кодов. При использовании сканера вместо разворачивания спискасправочника происходит всего один поиск товара по считанному коду.
Если заполнение накладной может быть выполнено на основании счета, то это также существенно уменьшит количество обращений к информационной базе, да и упростит работу оператора.
Наиболее типичной причиной недостаточно высокой скорости работы системы при заполнении документа обычно является использование в форме большого количества вычисляемых полей диалога типа текст (элементов диалога текст, содержащих формулу), а особенно требующих обращения к данным.
Например, это могут быть поля, предназначенные для вывода текущего количества товаров на складе, текущего состояния взаиморасчетов и т.д. Важно учитывать, что их значения часто пересчитываются при вводе информации в форме документа. Для снижения влияния таких полей на скорость работы системы можно привести следующие рекомендации: Если вычисляемые элементы диалога типа Текст, предназначенные для вывода справочной информации при заполнении документа обращаются к данным информационной базы, например, получают текущие остатки товара, то рекомендуется помещать их не в табличной части, а непосредственно в диалоге. В этом случае, например, текущий остаток будет выдаваться не по каждой строке, а только по той, на которой находится курсор и обращений к данным будет значительно меньше.
Если используется вычисляемая колонка, то для нее не следует задавать идентификатор, в этом случае ее вычисления не будут производиться при любом изменении по всей табличной части, а только по видимой строке. Многие вычисляемые значения можно показывать в качестве переменной, и вычислять ее при нажатии пользователем специальной кнопки, например, Показать остаток, что значительно снизит количество лишних обращений к данным.
Следует учитывать, что вызов метода регистра СводныйОстаток реально может выполняться достаточно долго из-за того, что значение получается обходом всех существующих остатков по указанным значениям измерений. Например, по всем складам. Аналогично медленно будет выполняться обращение к бухгалтерским итогам по аналитике (СКД,СКК…) в случае указания неполного набора значений субконто, заданного для данного счета.
Не рекомендуется использовать в формулах вычисляемых полей процедуры и функции, циклически обходящие строки табличной части документа. Крайне не желательно использовать в вычисляемых элементах диалога типа Текст итоги регистров полученных вычислением временного расчета на дату документа или бухгалтерских итогов полученных запросом или временным расчетом, а также любую другую информацию, получаемую обращением к данным в большом объеме или большими вычислениями. Такую информацию лучше получать по запросу (например, по нажатию кнопки).
В формулах редактируемых реквизитов формы также не рекомендуется использовать алгоритмы с большим количеством обращений к данным или вычислениями. Например, использовать временный расчет регистров или бухгалтерских итогов.
Для получения приемлемого компромисса можно рекомендовать сначала отключить весь дополнительный сервис при вводе документа, а затем постепенно его задействовать, следя за тем, чтобы сохранялись приемлемые показатели производительности системы при многопользовательской работе.
Журналы документов Обычные журналы.
К обычному журналу прикрепляются документы различных видов в окне настройки документов. Документ может принадлежать только к одному из таких журналов. То есть все документы разделены между созданными обычными журналами. Количество таких журналов не влияет на производительность системы и размер информационной базы.
 Общие журналы.
К журналу, для которого проставлен признак Общий, будут относиться все виды документов. Фактически это аналог полного журнала, но имеющий настраиваемую форму. Количество таких журналов не влияет на производительность системы и размер информационной базы.
 Дополнительные журналы.
К дополнительному журналу будут относиться те виды документов, которые устанавливаются для него в конфигурации. Один документ может включаться в несколько дополнительных журналов. Фактически дополнительные журналы позволяют собирать документы различных видов в разных комбинациях. Наличие дополнительного журнала несколько замедляет запись документов, которые к нему относятся. То есть, вхождение одного документа в большое количество дополнительных журналов скажется на производительности системы. Просмотр такого журнала может быть несколько медленнее, чем просмотр других журналов, но не значительно. Создание дополнительных журналов рекомендуется выполняться только в случае необходимости иметь дополнительную выборку документов нескольких видов при визуальном просмотре журналов.
При конфигурировании форм журналов вполне актуальны рекомендации данные для списков справочников. Заметим, что скорость просмотра журнала Вы можете оценить сравнив ее со скоростью просмотра журнала Полный, вызываемого из меню Операции-Журналы документов-(Полный). Данный журнал не содержит никаких дополнительных данных,  и скорость его работы является максимальной при просмотре списка документов.
Включение в форму граф журнала несколько замедляет работу, если в графах выводятся значения типа Справочник, Счет, Документ или значение типа Строка неограниченной длины.
Само существование графы журнала, не использованной в конкретной форме, не влияет производительность, то есть замедляют просмотр только графы, включенные в форму списка.
Существенно может замедлить включение в виде колонок формул со сложными вычислениями. Целесообразно формулы со сложными вычислениями включать не в качестве вычисляемых колонок табличной части, а в качестве отдельных элементов диалога, чтобы вычисления выполнялись не по всем строкам, а только по текущей строке.
Проведение документа (отмена проведения) При многопользовательской работе проведение документов является обычно наиболее узким участком с точки зрения производительности системы. Это объясняется тем, что непосредственно в момент проведения блокируется возможность записи изменений в информационную базу для всех пользователей. Такая блокировка необходима для обеспечения логической целостности проведения при обращении в алгоритме проведения к любым данным информационной базы. Поэтому оптимизация процесса проведения является наиболее важной задачей при общей оптимизации конфигурации.
Не рекомендуется при проведении и отмене проведения документа (в процедурах ОбработкаПроведения и ОбработкаУдаленияПроведения) вызывать действия, ожидающие ответа пользователя (Вопрос, Предупреждение, ВвестиЗначение и т.д.). Это приводит к длительному ожиданию всеми пользователями окончания проведения документа. В крайнем случае, следует использовать функции языка, имеющие параметр Таймаут, задавая ему небольшое значение.
При конфигурировании компоненты Оперативный учет очень важно организовать работу пользователей таким образом, чтобы проведение документов в основном производилось в реальном времени, а не задним числом. Механизм регистров оптимизирован для получения текущих итогов. Алгоритмы обработки проведения документа, используя текущие итоги регистров, могут достаточно быстро определять наличие товаров на складах, средние цены товаров, остатки по партиям и т.д. При проведении документов задним числом эти данные можно получить, выполнив временный расчет на
момент документа или выполнив запрос с конечной границей указанной вкачестве текущего документа. При большом объеме операций временный расчет может выполняться достаточно долго. В связи с этим крайне не желательно частое проведение документов задним числом. Типичной ошибкой пользователей является ввод и проведение документа завтрашней датой. После этого все сегодняшние документы проводятся задним числом.
Заметим, что обращение к итогам на момент документа при его проведении может выполняться с двумя целями. Первая - это контроль правомерности совершаемой операции, например наличия товаров на складе. При проведении задним числом обычно можно проводить документ без контроля наличия товаров, опираясь на то, что отражается уже совершенная реально операция. Вторая цель - определение некоторых значений используемых при записи движений регистров, например остатков по партиям товаров для списания по методам LIFO и FIFO. В некоторых случаях, эту часть проведения также можно опускать, если используется механизм последовательностей документов и проводимый документ уже находится после границы последовательности, то есть он уже точно будет перепроводиться при восстановлении последовательности. Однако, эту часть проведения нельзя опускать для документа, который сам нарушает последовательность (отодвигает границу последовательности назад), так как при восстановлении последовательностей перепроведение будет начинаться с первого документа после границы последовательности и последний, отодвинувший ее назад документ перепроводиться не будет.
В любом случае рекомендуется ограничить права большинства пользователей на проведение задним числом, разрешив такое проведение только ответственным сотрудникам.
При использовании компоненты Бухгалтерский учет следует по возможности минимизировать применение в процедуре проведения документа обработки большого количества итогов, и, обращения к итогам на момент проведения документа.
Следует учитывать, что при выполнении запроса или временного расчета объекта БухгалтерскиеИтоги с конечной границей заданной в  качестве текущего документа программа будет обрабатывать все проводки от конца месяца до данного документа. Следовательно, для документов, обращающихся к данным бухгалтерских итогов, последовательный ввод и проведение, будет выполняться эффективнее, чем проведение документов задним числом. Метод ЗаписатьПроводки следует использовать только в том случае, если в последующем алгоритме необходимо обращение к итогам с учетом уже внесенных в операцию проводок, если такие обращения не выполняются, то метод
ЗаписатьПроводки использовать не нужно, так как проводки будут автоматически записаны при записи операции.
Разумеется, из-за особых требований  к производительности алгоритма проведения с для его оптимизации следует максимально использовать приведенные в данной рубрике рекомендации по увеличению производительности всех используемых в процессе проведения механизмов. Прежде всего, имеет смысл обратить внимание на оптимизацию работы объектов Запрос и БухгалтерскиеИтоги, возможности настройки отборов регистров и бухгалтерских данных, а также на общие рекомендации по использованию встроенного языка.
Графы отбора Определение граф отбора является одним из наиболее ответственных моментов с точки зрения производительности системы.
С одной стороны графы отбора являются мощным средством  оптимизации выборки информации по некоторым значениям. С другой стороны само поддержание графы отбора требует иногда весьма значительных ресурсов системы.
Приведем описание устройства и использования граф отбора, которое позволит оценить при разработке конфигурации целесообразность определения той или иной графы.
Графа отбора настраивается в метаданных как набор ссылок на реквизиты документов, данные регистров и бухгалтерских проводок. При записи документов, движений регистров, операций и проводок, порождаемых документов в специальном списке отмечаются факты вхождения данного документа в графы отбора по каждому значению реквизита документа или данных движений, которые включены в графу отбора.
В отличии от общих реквизитов документов, которые также позволяют организовать отбор по некоторому значению, графы отбора допускают вхождение одного документа к нескольким значениям графы отбора. Например, создана построена графа отбора Склад. Для накладной на внутреннее перемещение к графе отбора прикреплены реквизиты СкладОткуда и склад СкладКуда. Данный документ попадает в два отбора по данной графе – по обоим выбранным значениям склада. Если к графе отбора прикреплены реквизиты табличной части документа или, например, данные регистров, то
один документ может быть отнесен к достаточно большому количеству значений
отборов. Например, если к графе отбора Товары прикрепить реквизит Товар табличной части и измерение Товар регистра УчетТоваров, то документ будет отнесен к стольким значениям графы отбора, сколько различных товаров будет в табличной части документа и(или) в его движениях регистра. Каждое вхождение документа в графу отбора заносится в список отдельной строкой. Таким образом, количество вхождений  документа в различные графы отбора определяет затрачиваемые на поддержание граф отбора ресурсы.
Очевидно, что большое количество вхождений документов в графы отбора повлечет существенное увеличение объема информационной базы и увеличения времени затрачиваемого на запись и проведение документа. Еще раз заметим, что объем ресурсов определяется суммарным количеством вхождений документов в графы отбора, которое зависит от количества значений реквизитов, данных регистров и бухгалтерских операций, которые в документах определены для включения документа в графы отбора. Так, в приведенном примере, графа отбора Склад вызовет по одному вхождению на приходные и расходные накладные и два вхождения на накладную на внутреннее перемещение. Тогда, как графа отбора Товар вызовет столько вхождений, например, расходной накладной, сколько различных товаров она будет содержать, то есть это может быть несколько десятков и несколько сотен записей в списке отбора. Это означает, что при проектировании графы отбора следует также учитывать и предполагаемое среднее количество строк в основных документах. Само количество граф отбора практически не влияет на производительность системы. Так, например, можно сделать одну графу отбора: Организации или две графы отбора: Покупатели и Поставщики. При условии, что каждый реквизит документа, который был бы отнесен к графе Организации будет отнесен к одной из двух граф отбора, затраты ресурсов системы будут практически одинаковыми.
Теперь рассмотрим использование граф отбора. Можно выделить два основных назначения граф отбора:
1) Отбор документов при просмотре журнала документов.
2) Оптимизация выборки информации в отчетах, обработках и других алгоритмах.
Отбор документов при просмотре журналов весьма удобное средство, которое предоставляет пользователям возможность быстро получить, например, выборку всех документ по конкретной организации. Отбор может устанавливаться принудительно из языка, выбираться из специального диалога или выбираться с помощью закладок окна журнала. Однако заметим, что организация отборов для просмотра журналов должно  производиться весьма взвешенно, так как поддержание большого числа граф отбора, особенно с большим количеством вхождений может серьезно сказаться на производительности системы. Оптимизация выборки информации с использованием графы отборы происходит в следующих случаях:
1) Графа отбора может быть автоматически использована системой для оптимизации выполнения запроса (объект Запрос). Это происходит в случае, если указано условие запроса, определенное равенством переменной запроса конкретному значению (переменной, элементу диалога) и все данные определенные для данной переменной запроса определены также в графе отбора. Например, если запрос строится по регистру взаиморасчетов и условие ограничивает выборку данных одним значением измерения регистра (организацией) и данное измерение регистра включено в некоторую графу отбора, то при выполнении запроса будет использована графа отбора и будут обрабатываться только документы относящиеся к данной организации. Если существует более одной графы отбора которая может быть использована для оптимизации выполнения запроса, то система пытается самостоятельно выбрать графу отбора, разброс значений которой будет максимальным. Существует возможность принудительно указать запросу использование конкретной графы отбора. Она будет использована только в случае соответствия условия запроса структуре графы.
2) Графа отбора может быть автоматически использована системой для оптимизации выполнения временного расчета регистров оперативного учета в случае, если одно из измерений или один из реквизитов, для которого установлено конкретное значение  фильтра, входит в графу отбора. Также как и при оптимизации выполнения запроса, система выбирает из возможных по условию фильтра наиболее подходящую графу отбора с точки зрения разброса значений. Существует возможность указать принудительно определенную графу отбора, если она соответствует фильтру.
3) Графа отбора может быть автоматически использована системой для оптимизации выборки движений регистра оперативного учета в случае, если измерение (или реквизит) для которого установлено конкретное значение  фильтра входит в графу отбора. Система выбирает из возможных по условию наиболее подходящую графу отбора. Существует возможность указать принудительно определенную графу отбора, если она соответствует фильтру.
4) Графа отбора может быть использована для перебора документов по конкретному значению отбора из встроенного языка методом объекта типа Документ.
Заметим, что во всех перечисленных режимах оптимизируемых с помощью граф отбора ускоряется собственно перебор документов, относящихся к определенному значению графы отбора. При этом эффективность оптимизации будет зависеть от объема данных документа, которые затем будут уже последовательно отбираться. Например, если запрос или выборка движений регистров выполняются по контрагенту, по которому, как правило, на один документ приходится одно движение регистра использование графы отбора может увеличить производительность системы на данной операции в десятки и сотни раз.
Так, например, при построении отчета о продажах конкретному клиенту за год при наличии графы отбора будут перебираться только документы по данному контрагенту, а не просматриваться последовательно все документы. Так как в расходной накладной, как правило, присутствует только один клиент, то при работе организации, например с 1000 клиентами количество обрабатываемых движений регистров уменьшится в среднем в 1000 раз.
Если рассмотреть случай, когда графа отбора строится по товарам и среднее количество строк в документе достаточно большое, например 100 и разброс использования товаров достаточно маленький (в большом количестве документов продаются одни и те же товары), реально ускорение будет не очень большое. Так как при помощи графы отбора выбираться будут документы, в которых встречался такой товар, а уже внутри документа будут перебираться строки или движения регистра. При этом если товар встречается в половине документов, то использование графы отбора сократит количество анализируемых системой движений регистров только в два раза. Если разброс использования товаров достаточно большой и среднее количество строк в документах невысокое (например, 5-10) то результат оптимизации выборки информации при использовании графы отбора будет более значительным.
Таким образом, эффективность создания граф отбора для оптимизации расчетов и выборок по движениям регистров оперативного учета и данным многострочных документов должна определяться исходя из среднего количества документов, которые будут относиться к одному значению отбора.
Например, можно отметить существенное влияние наличия граф отбора на формирование таких отчетов как Карточка клиента. Такого рода отчеты формируются перебором движений регистра и параллельным временным расчетом регистров для определения текущего остатка. И то, и другое действие вызывается с установленным фильтром. Наличие графы отбора позволяет существенно ускорить построение такого отчета, особенно, если количество движений регистра в документе в среднем невелико.
Следует заметить, что в версии 7.7 существует возможность устанавливать отборы движений в свойствах измерений и реквизитов регистров. Установка этих отборов не предоставляет возможности выборки документов при визуальном просмотре, однако их использование существенно ускоряет выборки движений регистров, временные расчеты и выполнение запросов по регистру в случае, если устанавливается условие запроса или фильтр объекта Регистр по конкретному значению измерения или реквизита. Эти отборы система использует автоматически, если они установлены в метаданных. Использование для оптимизации выборки движений отборов движений обычно эффективнее использования граф отбора, так как отбираются непосредственно движения, а не документы. Кроме того, поддержание отборов в движениях регистров не столь существенно увеличивает объем базы данных, так как ведется не с помощью отдельной таблицы, а с помощью построения дополнительных индексов.
Важным аспектом применения граф отбора является использование в алгоритмах  конфигурации самого факта наличия графы отбора. В одних случаях конфигурация создается  таким образом, что ее алгоритмы не рассчитаны, на наличие графы отбора, а создание графы отбора ускоряет выполнение некоторых отчетов и обработок. Например, отчет о продажах по конкретному клиенту значительно ускорится, при создании в конфигурации графы отбора по контрагентам. В другом случае конфигурация может в определенных алгоритмах непосредственно быть ориентирована на существование определенной графы отбора. Например, при проведении документа задним числом временный расчет остатков товаров на момент документа может выполняться по каждой позиции документа отдельно исходя из того, что при наличии графы отбора по товарам расчет итогов регистра по каждому товару данного документа отдельно (с использованием фильтра) будет выполняться быстрее, чем по всем товарам вообще. Разумеется, если такой графы отбора существовать не будет, то такой алгоритм будет обходить все движения регистра столько раз, сколько товаров в данном документе. Кроме того, при большом количестве строк в документах использование графы отбора также не даст большого эффекта. Таким образом, создание в конфигурациях алгоритмов явно ориентированных на существование графы отбора требует четкого осмысления предполагаемого эффекта и возможно экспериментов на реальных данных.
Для конфигураций, разрабатываемых для предприятий с небольшим объемом операций, графы отбора часто используются для организации сервиса просмотра журналов документов. При больших объемах данных, графы отборов проектируются в основном с учетом необходимости оптимизации получения информации с некоторой выборкой на особо критичных по скорости задачах. Для организаций с большим объемам информационных баз можно рекомендовать не создавать большого количества граф отбора для организации визуального просмотра списка документов.
Причем создание граф отбора должно быть обосновано с точки зрения соотношения используемых ресурсов (объемных и временных) и получаемого эффекта. Например, создание графы отбора по клиентам и отказ от создания графы отбора по товарам можно обосновать с одной стороны, существенно меньшим средним количеством значений типа Клиент в документах (то есть такая графа отбора будет требовать не столь много ресурсов как графа отборf по товарам), а с другой стороны, целесообразностью быстрого построения отчета по конкретному клиенту. Часто, обслуживание клиентов происходит в реальном времени и требует получение истории взаиморасчетов за длительный период, тогда как получение отчетов по движению товара за длительный период как правило требуется для внутренних целей организации и может производиться с меньшей скоростью.
Следует заметить, что при работе с базами данных в формате SQL существенно меняется производительность выборок по условиям запросов и фильтрам регистров. Поэтому для этих информационных баз, как правило, отпадает необходимость в использовании граф отбора для оптимизации построения отчетов и выполнения расчетов. Кроме того, и визуальный отбор в журналах при работе с базами данных в формате SQL может быть заменен построением соответствующих отчетов. Таким, образом, в большинстве случаем при переходе на версии для SQL имеет смысл отключать графы отбора, так как их поддержание также будет требовать определенных ресурсов при записи документов, а выигрыш от их использования будет практически не существенным.
Производительность выборки документов При необходимости оптимизации выборки (перебора) документов можно учитывать следующие особенности реализации механизмов 1С:Предприятия.
Перебор документов с помощью объекта Документ выполняет последовательный обход документов за указанный интервал.
Если используется объект определенного вида, то при выборке используется индекс, отбирающий документы только этого вида. То есть такой отбор будет быстрее, чем выборка всех документов и проверка вида каждого документа в алгоритме модуля.
Если применять метод ИспользоватьЖурнал, то при выборке будет использоваться индекс, отбирающий документы определенных видов, входящих в указанный журнал.
Применение методов ВыбратьПодчиненныеДокументы, ВыбратьПоЗначению  и ВыбратьПоПоследовательности  оптимизирует выборку за счет использования индексов и специальной системной таблицы.
Применение метода ВыбратьПоНомеру также выполняется достаточно быстро, так как использует соответствующий индекс.
Применение метода УстановитьФильтр ограничивает выборку документов, но практически не ускоряет выполнение выборки, по сравнению с проверкой в алгоритме модуля.
Получение списка документов с помощью объекта Запрос с соответствующей группировкой, может выполняться несколько медленнее, при небольшом количестве документов, входящих в интервал. Кроме того, некоторое замедление будет наблюдаться, если затем обращаться к данным документа, так как при этом будет выполняться повторное считывание документа, тогда как объект типа Документ считывает часть информации документа непосредственно в процессе перебора.
При работе с базой данных в формате SQL применение запроса будет существенно эффективнее, чем перебор с помощью объекта Документ в том случае, если выполняется отбор документов по некоторому условию. Выборка документов объектом Запрос будет производиться средствами SQL-сервера. Разумеется, для этого должны быть учтены рекомендации по составлению условий запросов оптимизируемых при работе с базами данных в формате SQL.
Оптимизация работы с Константами При обращении в алгоритме модуля к константе 1С:Предприятие извлекает значение константы из информационной базы. Причем это касается и  периодических и непериодических констант. Если обращение к константе выполняется в алгоритме многократно, то использование конструкции Константа.ХХХХХ может существенно сказываться на производительности выполнения модуля. Поэтому целесообразно запомнить полученное значение в переменной и использовать в алгоритме запомненное значение.
Оптимизация работы компоненты “Бухгалтерский учет” Проектирование документов При проектировании конфигурации использующей компоненту Бухгалтерский учет, если предполагается наличие большого количества проводок в информационной базе рекомендуется организовать ввод операций таким образом, чтобы в одной операции располагалось, как правило,  несколько проводок. Определенные ресурсы системы расходуются как на запись самой операции, так и на запись каждой проводки. Организация хранения программой операций и проводок в информационной базе ориентирована на хранение в одной операции нескольких проводок. Разумеется, основным критерием для расположения проводок в операциях является целостность отражения хозяйственной операции, поэтому стремление уменьшить количество операций не должно приводить к нарушению логики отражения хозяйственной деятельности в учете.
При проектировании документов конфигураций ориентированных на большой объем данных следует рассмотреть вопрос о целесообразности записи операций по тем документам, которые не формируют бухгалтерских проводок. В типовой конфигурации 1С:Бухгалтерии 7.7 (редакции 3.1) предусмотрена возможность записи операции для всех документов, в том числе и для тех, которые никогда не формируют проводок (платежных поручений, доверенностей и т.д.). Такое решение принято для удобства просмотра бухгалтером всех документов в едином журнале операций, то есть для упрощения освоения программы и работы с небольшой информационной базой.
Сама по себе запись операций по документам, по которым не предполагается запись проводок в типовой конфигурации выполняется исключительно для включения этих документов в журнал операций. Однако запись операции влечет дополнительные затраты ресурсов системы, так как программа ведет отдельный список операций и каждый документ, записывающий операцию отмечается в этом списке. Таким образом, запись операций по большому количеству документов, не влияющих на бухгалтерские итоги, влияет и на объем информационной базы и на производительность системы. То есть возможным путем дополнительной оптимизации конфигурации может быть отключение записи операций по тем документам,  по которым не формируются проводки.
Для документов, которые относятся к оперативному учету, но формируют также проводки можно рекомендовать использовать вариант параметра Создавать операцию: Только при проведении. Это позволит исключить хранение избыточной информации по конкретным документам, которые не должны отражаться в бухгалтерском учете. При их проведении алгоритм модуля документа может не создавать операцию и не записывать проводки.
Проектирование плана счетов При проектировании плана счетов не следует устанавливать максимальное количество субконто больше, чем реально необходимо для организации аналитического учета по счетам. Установленное максимальное количество субконто влияет на общую производительность системы. Собственно количество видов субконто для конкретного счета не оказывает сильного влияния на время отражения проводки в учете, однако объем хранимых итогов зависит от количества используемых комбинаций значений субконто счетов. Кроме того, увеличение количества видов субконто указанных для конкретного счета влияет на скорость формирования отчета по отдельным значениям субконто. Так, например, если по счету товаров велся учет в разрезе номенклатуры и вводится второе субконто склады, то количество хранимых итогов несколько увеличится и скорость формирования отчета по остаткам товаров в целом (на всех складах) будет немного ниже, за  счет того, что будут суммироваться хранящиеся остатки товара на разных складах. Разумеется, замедление будет зависеть от среднего количества складов, на которых хранятся различные товары.
При проектировании аналитического учета рекомендуется придерживаться правильного использования механизма субконто. Субконто должны использоваться для учета остатков и оборотов по счетам в разрезе объектов аналитики. Не следует использовать субконто в качестве комментариев к проводкам не отражающих структуру остатков или оборотов. Для комментирования проводок рекомендуется использоваться реквизиты проводок или операций.
Заметим, что если вид субконто для конкретного счета используется для хранения остатков, то есть, не включается признак Только обороты, то суммы по счету должны и дебетоваться и кредитоваться по всем используемым объектам аналитики. Если использовать субконто по счету, например, только для отражения кредитовых проводок, а для дебетовых использовать другие значения субконто или не указывать их вовсе, то объем хранимых итогов будет расти от периода к периоду, и доступ к итогам  по аналитике будет замедляться.
Разделитель учета следует включать в конфигурации только в случае его реального использования, так как поддержание разделенного учета требует дополнительных ресурсов системы.
Введение дополнительного плана счетов практически не сказывается на производительности конфигурации.
Длина кода и длина наименования счета также практически не влияют на производительность, так как реально в проводках и итогах не хранится код счета. Однако при большом уровне вложенности счетов (субсчетов) будет несколько замедляться формирование отчетов, так как реально данные итогов хранятся по счетам используемым в проводках, а по счетам-группам данные формируются в процессе обращения к итогам.
Работа с бухгалтерскими итогами При работе с компонентой Бухгалтерский учет не рекомендуется устанавливать границу расчета бухгалтерских итогов позже, чем они реально используются при формировании отчетов и вводе операций. При записи проводок бухгалтерские итоги автоматически обновляются вплоть до последнего рассчитанного периода, поэтому время записи проводок будет зависеть от того, сколько периодов (кварталов) располагается от даты операции до последнего рассчитанного периода.
Для оптимизации получения бухгалтерских итогов в наиболее типовых ситуациях система хранит и динамически обновляет при записи проводок следующие виды итогов:
- остатки по счетам и объектам аналитики;
- обороты по счетам и объектам аналитики;
- обороты между счетами.
Причем все итоги хранятся с детализацией до месяца. То есть, отчеты, обращающиеся к указанным итогам за период, состоящий из целых месяцев, не будут обращаться к проводкам, а будут выбирать всю информацию из хранимых итоговых данных. При обращении к итогам за рваные периоды, не состоящие из целых месяцев, будет выполняться обработка проводок по неполным месяцам. Кроме того, обработка проводок будет выполняться при получении отчетов за любой период, если выполняется обращение к оборотам между счетами и субконто или между субконто.
При использовании объекта БухгалтерскиеИтоги в режиме временного расчета или запроса следует обращать внимание на возможность ограничения с помощью различных параметров объема обрабатываемых данных. Это касается и расчета только по синтетическим счетам и расчета данных по остаткам и оборотам и оборотам между счетами. В критичных по времени алгоритмах рекомендуется максимально сузить объем данных обрабатываемых этими режимами. Кроме ограничения обрабатываемых данных по отдельным видам итогов существует возможность указать системе список значений для обрабатываемых счетов и субконто. Это позволяет уменьшить объем обрабатываемой информации и соответственно увеличить производительность.
Чтобы получить при выполнении запроса или временного расчета объекта БухгалтерскиеИтоги только остатки на некоторый момент (например, на момент проводимого документа) следует указать только одну границу интервала (например, конечную). В этом случае не будут выполняться лишние действия по обработке проводок.
Заметим, что выполнение запроса и временного расчета объекта БухгалтерскиеИтоги оптимизировано для получения данных на момент последних введенных операций месяца. То есть при последовательном вводе и
проведении документов, если в процессе их проведения выполняется расчет итогов на момент документа, то получение итогов будет выполняться быстрее, чем, например, на момент документа, после которого в данном месяце следует большое количество операций.
Выполнение временного расчета система автоматически оптимизирует, если его граница указана как документ, который в данный момент является первым или последним в данном месяце.
При обращении к функциям остатков и оборотов объекта БухгалтерскиеИтоги по объектам аналитики без выполнения запроса следует учитывать следующее обстоятельство: получение итогов по счету с указанием значений всех субконто по которым ведется аналитический учет по данному счету происходит быстрее, чем в случае указания только некоторых субконто. Итоги по аналитическому учету хранятся системой с полной детализацией (хранится итог со всеми значениями субконто). Получение итогов свернутых хотя бы по одному субконто требует суммирования детальных итогов. Замедление будет зависеть от реального количества итогов по сворачиваемым субконто. Например, при обращении к функции СКД по счету, по которому ведется учет по номенклатуре и по складам, итог по определенному товару по конкретному складу будет вычисляться практически мгновенно. Получение итога по конкретному товару по всем складам будет выполняться несколько медленнее, так как будут суммироваться остатки товара на разных складах, а получение итога по складу без учета товара, очевидно, может выполняться существенно медленнее, так как будут суммироваться остатки всех товаров на данном складе. Однако описанный принцип не распространяется на получение итогов по счетам в целом (без учета аналитики вообще), так как итоги по синтетическим счетам система хранит отдельно.
Получение развернутых сальдо может потребовать достаточно продолжительного времени, при большом количестве итогов по объектам аналитики или по субсчетам.
Система бухгалтерских итогов хранит рассчитанные итоги только по счетам, не имеющим субсчетов. При получении итогов по счетам-группам выполняется суммирование данных по входящим в них субсчетам. Разумеется, данное свойство может существенно сказаться на времени обращения к итогам только при большом количестве субсчетов.
Аналогично итоги по субконто типа Справочник хранятся только по элементам. Поэтому получение итогов по группам справочника может выполняться значительное время при большом количестве элементов в группе. При получении итогов объектом БухгалтерскиеИтоги в режиме Запрос формирование итогов по счетам-группам и группам справочников не сильно замедляет выполнение операции, так как обычно извлекаются не только итоговые, но и детальные данные.
При использовании в конфигурации разделителя учета получение итогов с помощью объекта БухгалтерскиеИтоги может выполняться заметно дольше, если не указать конкретное значение разделителя учета, то есть получать итоги по всем значениям.  Система хранения бухгалтерских итогов оптимизирована для получения данных по отдельным значениям разделителя учета, так как такие обращения выполняются значительно чаще. Рекомендуется указывать объекту БухгалтерскиеИтоги конкретное значение разделителя учета во всех случаях, кроме тех, когда действительно необходимо получить данные по всем значениям разделителя учета.
При использовании объекта БухгалтерскиеИтоги, часто существует возможность получения одной и той же информации как с помощью непосредственного обращения к итогам, так и с путем выполнения запроса. Разумеется, чаще всего решение принимается, прежде всего, с точки зрения оптимизации производительности.  Обычно, если необходимо получить большое количество итогов, например остатки по всем материалам,  то выполнение запроса и обход его результатов будет эффективнее, чем обход справочника и обращение к методам получения итогов по каждому элементу справочника. Разумеется, сравнение этих двух вариантов в конкретном алгоритме следует проводить в боевых условиях, то есть в разделенном режиме (при использовании сетевой версии), на реальной нагрузке системы и на реальных объемах информации. Заметим, что если необходимо получение итогов по отдельным значениям, а не по всему списку, то при использовании запроса существует возможность с одной стороны ограничить выборку списком значений (счетов или объектов аналитики), а с другой стороны в уже сформированном запросе не перебирать все значения подряд, а выбирать итоги по отдельным значениям. При работе с версией 1С:Предприятия для SQL  использование запросов может быть еще более эффективно по сравнению с обращением к отдельным итогам в связи с тем, что большинство запросов оптимизируется средствами MS SQL Server.
В отдельных случаях использование объекта БухгалтерскиеИтоги может быть оптимизировано с помощью применения метода Акутальность. Прежде всего, он применяется в монопольном режиме для оптимизации группового перепроведения документов средствами встроенного языка. В типовой конфигурации 1С:Бухгалтерии 7.7 такая оптимизация реализована в обработке ОбработкаДокументов.
Для получения бухгалтерских данных (операций, проводок, итогов) может быть использован как специализированный объект БухгалтерскиеИтоги компоненты Бухгалтерский учет, так  и универсальный объект 1С:Предприятия Запрос, который также может оперировать бухгалтерскими объектами. С точки зрения производительности в боль инстве случаев объект БухгалтерскиеИтоги использовать целесообразнее, так как он оптимизирован для работы именно с бухгалтерскими данными. Кроме того, использование специализированного объекта проще с точки зрения определения состава информации, которую необходимо получить. Объект Запрос обладает более широкими возможностями настройки при обращении к различным данным 1С:Предприятия. Его целесообразно использовать в тех случаях, когда средства объекта БухгалтерскиеИтоги не позволяют получить информацию с необходимой выборкой или в необходимых разрезах. Обычно это необходимо тогда, когда в олучаемой информации должны быть задействованы не только чисто
бухгалтерские данные, но и другая информация. Например, с помощью объекта Запрос можно получить остатки по счету в разрезе значений реквизита справочника, выступающего в качестве субконто счета. Такая информация  может потребоваться для получения  остатков по видам основных средств, хранящихся в справочнике основных средств, в качестве реквизита.
Обращение к бухгалтерским итогам в тех конфигурациях, в которых используется разделитель учета Если в настройке планов счетов в конфигурации установлен разделитель учета, то при использовании объекта БухгалтерскиеИтоги существует возможность указывать конкретный разделитель учета (с помощью метода ИспользоватьРазделительУчета) или получать итоги по всем значениям разделителя учета. Механизм компоненты БухгалтерскийУчет оптимизирован для получения итогов по конкретным значениям разделителя учета. Обращение к итогам по всем значениям производится существенно медленнее. На практике в большинстве случаев обращение к бухгалтерским итогам выполняется именно по конкретным значениям разделителя учета. Рекомендуется во всех случаях использования объекта БухгалтерскиеИтоги устанавливать конкретное значение разделителя учета, кроме тех случаев, когда получение итогов по
всем значениям действительно необходимо.
Заметим, что часто из-за особенностей решаемой задачи в алгоритме, в котором не указан конкретный разделитель учета, данные формируются вполне правильно. Например, в информационной базе реально введено только одно значение разделителя учета. В этих случаях тот факт, что конкретный разделитель учета не задан, будет сказываться только на производительности, и может быть не обнаружен при тестировании. Таким образом, при работе с конфигурациями, в которых используется  разделитель учета, следует внимательно следить за использованием объекта БухгалтерскиеИтоги в разрабатываемых алгоритмах.
Бухгалтерские отборы При разработке конфигурации с использованием компоненты Бухгалтерский учет весьма важным моментом с точки зрения производительности является установка режимов отбора для бухгалтерский объектов. Существует несколько режимов отборов, которые можно установить в конфигурации для объектов метаданных, специфичных для компоненты Бухгалтерский учет:
· Отборы по данным операции (сумме операции, содержанию, реквизитам операции)
· Отборы по данным проводки (сумме, количеству, валютной сумме, валюте, реквизитам проводки)
· Отбор по счетам (в целом, с ограничением по уровням, по дебету/кредиту)
· Отбор по видам субконто.
Как и графы отбора документов, отборы бухгалтерский объектов могут использоваться как для ограничения визуального просмотра журнала операций и журнала проводок, так и для оптимизации получения различных итогов, а также выборки операций и проводок в различных алгоритмах. Для конфигураций, которые предполагается использовать на предприятиях с небольшим объемом проводок, можно задействовать те виды отборов, которые удобны пользователю для просмотра журналов. Однако для предприятий с большим объемом проводок рекомендуется внимательно рассмотреть целесообразность включения отборов, так как их использование может оказать существенное влияние на производительность системы.
Прежде всего, рекомендуется проанализировать те отборы, которые используются исключительно для удобного просмотра журналов. Обычно это отборы по данным операций и проводок (суммам, содержанию, дополнительным реквизитам). Можно рекомендовать отключить такие отборы, так как они несколько замедляют запись операций, а при большом объеме информации реально могут и не применяться пользователями. Разумеется, отборы по данным проводок используют больше ресурсов системы, так как самих проводок обычно существенно больше чем операций.
Так, например, отбор по сумме проводки, может использоваться только для удобства визуального просмотра, но при большом объеме проводок вероятность его реального использования невысока. Вместо отключенных отборов можно рекомендовать пользователям применять различные режимы поиска в журналах, а также различные отчеты.
Отдельно следует рассмотреть отбор по реквизиту проводки, используемым в качестве разделителя учета, так как его наличие используется системой для получения различных итогов, ограниченных разделителем учета.
Отбор по счетам играет особую роль среди бухгалтерских отборов. В отличие от отборов по данным операции и проводки, отбор по счетам требует больше ресурсов, так как одна проводка может относиться к нескольким счетам. Для поддержания отбора по счетам ведется специальная таблица вхождения проводок в отборы по конкретным счетам. В зависимости от установок отбора по счетам туда могут включаться, в том числе, и вхождения проводок в счета-группы в случае, если в проводке используется субсчет. В этом случае ресурсы системы расходуются тем больше, чем больше средний уровень вложенности счетов, используемых в проводках. Отдельный режим включает возможность использования отбора отдельно по дебету и кредиту проводки. Он также увеличивает время записи проводки. С другой стороны отбор по счетам не только обеспечивает удобный режим выборочного просмотра проводок, но и активно используется системой при получении различных данных объектом БухгалтерскиеИтоги. Например, при получении карточки счета или анализа счета по датам.
При проектировании конфигурации следует соотнести частоту формирования таких отчетов и затраты ресурсов системы (как по объему данных, так и по времени записи операции). Например, можно предложить следующее компромиссное решение. Отбор по счетам включается, но не включается отбор по дебету/кредиту. При этом отключается режим для всех и устанавливается параметр количество уровня равным 1. В этом случае доступным будет отбор проводок только по счету в целом, то есть не будет возможность просмотра проводок в дебет или кредит конкретного счета, а только всех проводок с данным счетом. Кроме того, отбор в журнале проводок можно будет установить только по счету верхнего уровня, и нельзя будет отобрать проводки по отдельному субсчету. Однако возможность отбора проводок по некоторому счету 1го уровня в большом количестве случаев будет вполне удобна. С другой стороны для большинства обращений к объекту БухгалтерскиеИтоги по конкретному счету данный отбор позволит существенно оптимизировать получение необходимых данных, даже в случае если происходит обращение к
итогам по субсчету.
Аналогично следует рассмотреть установку отборов по видам субконто. Как и отбор по счетам отбор по субконто используется не только для удобного просмотра проводок по конкретному объекту аналитики, но и используется объектом БухгалтерскиеИтоги при обращении к бухгалтерским итогам и операциям по конкретному субконто, например, для получения карточки субконто. Так как каждая проводка может включать разные объекты аналитики, то для поддержания такого отбора ведется специальный список, в котором отмечаются все вхождения проводки в отборы по тем видам субконто, в которых включен отбор в конфигурации. То есть количество записей в этом списке будет зависеть от частоты использования в проводках значений субконто тех видов,  для которых в конфигурации установлен режим отбора. При проектировании конфигурации следует соотнести необходимость быстрого получения отчетов по отдельным объектам аналитики конкретных видов с затратами ресурсов системы на поддержание отбора по субконто. При
отсутствии необходимости быстрого формирования отчетов по отдельным объектам аналитики можно рекомендовать не включать отборы по субконто. Очевидно, что не имеет смысла включать отбор по тем видам субконто, количество значений которых невелико, например, по перечислениям. Значительный эффект при построении отчета может быть получен по тем видам субконто,  которые  имеют большой разброс значений в проводках, например, по организациям-контрагентам или товарам. Рекомендуется включить отбор только для тех видов субконто, для которых это действительно необходимо и дает ощутимый результат. Если отбор по субконто не дает существенного выигрыша при работе с бухгалтерскими итогами, то при большом объеме проводок можно рекомендовать не использовать данный отбор для визуального просмотра проводок и отключить его в конфигурации. Это уменьшит время записи проводок.
Следует заметить, что при работе с базами данных в формате SQL существенно меняется производительность выборки данных объектом БухгалтерскиеИтоги и выборки проводок объектом Операция. Поэтому для этих информационных баз, часто, отпадает необходимость в использовании бухгалтерских отборов для
оптимизации построения отчетов и выполнения расчетов. Кроме того, и визуальный отбор в журналах при работе с базами данных в формате SQL может быть заменен построением соответствующих отчетов. Таким, образом, в большинстве случаев при переходе на версии для SQL имеет смысл рассмотреть возможность отключения бухгалтерских отборов, так как их поддержание также будет требовать определенных ресурсов при записи операций, а выигрыш от их использования, возможно, будет не существенным.
Использование длинных путей при записи операции При формировании проводок в процессе проведения документа в алгоритмах определяющих различные данные проводки рекомендуется не обращаться к данным субконто или счетов через атрибуты объекта, Операция, а обращаться через те переменные или реквизиты документа на основании которых эти данные заполняются. Обращение к характеристикам субконто и счетов через уже заполненные атрибуты проводки может существенно снизить производительность, так как при каждом обращении будет выполняться поиск значений типа справочник, документ или счет в информационной базе.
Оптимизация работы Регистров оперативного учета Регистры остатков С точки зрения работы конфигурации состав регистров остатков должен проектироваться таким образом, чтобы обеспечивать хранение текущих остатков материальных и денежных средств в том количестве разрезов, которое необходимо для обеспечения логики работы системы и так, чтобы структура регистров максимально отражала принятую на предприятии систему учета.
При проектировании регистров следует учитывать следующие их особенности с точки зрения хранения информации. Каждый регистр в информационной базе представлен движениями и остатками. Движения непосредственно записываются документами и используемые при этом ресурсы системы пропорциональны количеству движений и объему хранимой в них информации. Остатки регистров поддерживаются системой автоматически. Количество хранимых остатков легко определить как количество реально встречающихся в движениях сочетаний значений измерений регистров в данном периоде. Например, если регистр учитывает товары только в разрезе номенклатуры, то количество записей остатков в месяц будет равно количеству товаров с ненулевыми остатками на начало месяца и тех, по которым проходили движения в этом месяце. Если  добавить измерение Склад, то при двух складах, на которых хранятся одни и те же товары количество записей в остатках регистров возрастет примерно вдвое. Однако, если ввести измерение Партия в котором будет записываться приходный документ, то количество записей хранимых остатков заметно возрастет при большом количестве приходных документов.
При проектировании регистров остатков важно следить за их использованием по прямому назначению. Следует иметь в виду, что при открытии периода выполняется перенос из предыдущего периода только ненулевых итогов регистров остатков. Типичной ошибкой является использование регистров остатков не для хранения остатков, а для произвольной записи некоторых данных по документу. В этом случае обычно не происходит списания остатков, и остатки все время переносятся на следующий период, отчего размер информационной базы существенно растет. Регистры остатков должны использоваться только в том случае, если в них учитываются именно остатки. То есть если существуют виды документов, которые выполняют запись движений типа Приход по данному регистру, то должны существовать и виды документов, которые записывают по этому регистру движения типа Расход. Причем эти записи должны быть сбалансированы таким образом, что текущий остаток должен отражать реально существующий остаток материальных или денежных средств, например, наличие денег на расчетном счету, задолженность покупателей и т.д. При этом информация о проданных партиях, товарах, старых клиентах обнуляется соответствующими движениями документов и не хранится в последующих периодах.
При проектировании регистров следует соотносить необходимость получения некоторой отчетной информации с затратами ресурсов системы на поддержание регистров. В основном регистры остатков должны использоваться для поддержания той информации, которую собственно нельзя получить из документов, например, остатков товаров или состояния взаиморасчетов.
Решения, принимаемые при проектировании конкретной структуры регистров, обычно влияют в дальнейшем на большую часть алгоритмов конфигурации. Следует заметить, что для решения одной и той же задачи структура регистров может быть спроектирована по-разному. Причем нельзя утверждать, что в каждой ситуации существует один единственно правильный способ организации структуры регистров. Поэтому выбор структуры регистров определяется на основе опыта специалиста и тех требований, которые предъявляются к функционированию конфигурации.
Одним из важных вопросов, которые приходится решать при проектировании структуры регистров является вопрос об измерениях, которые используются не во всех движениях. Например, при создании структуры регистров для учета различных материальных ценностей можно создать один регистр с измерениями ТМЦ и Партия. В этом случае для тех видов ТМЦ, по которым не ведется партионный учет, данное измерение будет оставаться пустым. С другой стороны можно создать два отдельных регистра, в одном из которых измерение Партия будет отсутствовать. В этом случае движения по тем видам ТМЦ, по которым ведется партионный учет, будут записываться в один регистр, а по тем, по которым не ведется - в другой. Создание двух регистров в данном примере позволяет несколько снизить размер информационной базы, так как записи по видам ТМЦ без партионного учета будут короче. Однако, существенного выигрыша в быстродействии при этом не будет. Разумеется, при большом количестве неиспользуемых измерений разница в быстродействии при обращении к регистру будет более заметна. Использование одного регистра вместо двух в данном примере имеет ряд преимуществ с точки зрения технологичности написания самой конфигурации, особенно в том случае, если в зависимости от различных настроек по некоторым видам ТМЦ может включаться и отключаться ведение партионного учета.
На практике, выбор осуществляется более чем из двух вариантов. Отрицательными можно считать, как стремление поместить все возможные виды учета в один регистр, так и сделать очень большое количество регистров для различных комбинаций измерений. Разумеется, не следует объединять в один регистр данные, по которым состав используемых измерений в разных движениях вообще никогда не пересекается, например, объединять в один регистр учет взаиморасчетов и учет товаров.
Другим вопросом проектирования регистров с точки зрения производительности является введение в структуру регистров определенной избыточности для повышения эффективности обращения. Типичным примером такой избыточности является создание дублирующих регистров с уменьшенным составом измерений, которые используются для оптимизации обращения к итоговым значениям. Например, при ведении партионного учета товаров (измерения регистра Товар и Партия) может  быть создан дополнительный регистр с одним измерением Товар. При этом каждая операция по приходу или расходу товара должна отражаться в учете движениями по двум регистрам. Так как реально в остатках регистров хранятся только детальные записи, то при наличии только одного регистра обращение к остатку по товару в целом потребует от системы обхода всех остатков по данному товару по разным партиям. Наличие второго регистра позволит при обращении к итогам по товару получать его практически мгновенно. Разница в скорости будет зависеть от количества остатков по различным партиям одного и того же товара. Следует заметить, что при введении второго регистра будет оптимизироваться получение итогов по одному товару, но будет замедляться запись движений регистров, так как будет реально выполняться запись в два регистра. Таким образом, решение о создании дублирующего регистра принимается на основании анализа требований к производительности записи движений с одной стороны и конкретных запросов к итогам регистра с другой. Разумеется, приведенные выше аргументы не относятся к случаям, когда второй регистр создается не для оптимизации, а для отражения особенностей учета. Например, в одном регистре товары учитываются в количественном выражении в разрезе складов, а в другом - в суммовом выражении в разрезе партий. Данная структура обусловлена требованиями методологии учета и не связана с оптимизацией производительности. Заметим, что обычно не следует создавать дублирующие регистры для оптимизации выборки итогов с фильтрацией значений измерений в другом порядке, нежели в основном регистре. В версии 7.7 для оптимизации доступа к итогам при установленном фильтре (или условии запроса) по отдельным измерениям регистра (не слева - направо) используется признак Отбор итогов, устанавливаемый в свойствах измерения. Использование отборов рассматривается в отдельном разделе.
Следует учитывать, что приведенная аргументация справедлива в основном для конфигураций работающих с базами данных в формате DBF/CDX. При работе с базами данных в формате SQL доступ к итогам регистров существенно ускоряется и не так сильно зависит от структуры регистров.
Оборотные регистры Особо следует отметить конфигурирование оборотных регистров. В отличии, от регистров остатков оборотные регистры часто содержат информацию, которая примерно в таком же составе присутствует в документах. При этом создание оборотного регистра может быть обусловлено двумя соображениями. Во-первых, наличие оборотного регистра позволяет получить мгновенно некоторую накопленную сумму в определенном разрезе, являющуюся не состоянием наличия средств, а суммой некоторых движений за определенный период. Такая, необходимость может возникнуть, например, если при проведении документа процент скидки клиенту определяется исходя из объемов закупки данным клиентом с начала месяца, или, например, если существует необходимость в очень быстром получении отчета за некоторые периоды об объемах продажи клиентам.
Во-вторых, наличие оборотного регистра позволяет жестко регламентировать отражение, некоторых фактов хозяйственной деятельности при проведении документа. Например, факт продажи конкретному клиенту конкретного товара в оборотном регистре можно фиксировать из документов разных видов. При построении отчета о продажах можно будет получать информацию не из нескольких документов разной структуры, а из единого регистра, что избавит также от возможных расхождений в отчетах из-за изменений документов без перепроведения. При появлении нового вида документа, отражающего продажу товаров, запись данных о продажах в регистр позволит не модифицировать все существующие отчеты, а только реализовать в алгоритме проведения нового документа запись движений по данному оборотному регистру.
С другой стороны введение оборотного регистра, разумеется, требует дополнительных ресурсов. С точки зрения движений оборотный регистр полностью аналогичен регистру остатков. А в части итогов объем хранимой информации зависит от выбранного периода оборотного регистра. В периодах с дня до месяца объем информации будет пропорционален количеству данных периодов в месяце при постоянном наборе значений. Разумеется, если каждый день продавать товары разным клиентам, то объем информации при периоде день и месяц будет практически одинаковым. То есть объем хранимых записей в итогах оборотного регистра за период будет равен количеству реально встретившихся в данном периоде сочетаний значений измерений регистра. Заметим, что периоды квартал и год по используемым ресурсам несколько превосходят период месяц, так как для обеспечения возможности переноса ТА реально хранятся итоги и за каждый месяц тоже.
Таким образом, следует внимательно относиться к оценке целесообразности создания оборотных регистров, особенно с маленьким периодом хранения итогов. Часто, реально не существует необходимости в мгновенном получении итогов по оборотам, а аналогичную информацию можно получить с помощью запроса к существующим регистрам остатков или документам. Очевидно, наиболее веским аргументом для создания оборотного регистра может служить необходимость получения некоторого оборота на текущий момент при проведении документа или необходимость четко регламентировать отражение, некоторых фактов хозяйственной деятельности при проведении документов различных видов. Заметим, что при работе с базами данных в формате SQL роль оборотных регистров с точки зрения оптимизации построения отчетов существенно
снижается.
Использование реквизитов регистров Весьма полезным свойством регистров является возможность создания реквизитов. В отличие от измерений и ресурсов реквизиты регистра присутствуют только в движениях регистра и весьма незначительно снижают его производительность. Фактически, реквизит регистра позволяет записывать некоторое значение, характеризующее конкретное движение регистра. И хотя реквизиты никак не влияют на механизм получения остатков по регистру, они могут позволить решить достаточно много задач, возникающих при построении отчетов или алгоритмов обработки.
Реквизиты регистров могут использоваться для получения запросов с некоторой выборкой движений. Классический пример, это разделение движений товаров с помощью реквизита регистра на внутренние и внешние, что позволяет получить отчет о приходе/расходе товаров без учета внутренних перемещений. Другим примером, может являться получение дополнительных итогов по движениям регистров, то есть тех сумм, которые не учитываются в ресурсах, так как по ним не имеют смысла остатки.
При выполнении запроса обращение к реквизиту и несколько эффективнее, чем к данным документа и более однозначно, особенно если движения делаются документами разных видов и по строкам многострочной части. Таким образом, если в запросах при получении данных по движениям регистров возникает необходимость обращения к некоторым данным документа, записавшего движение регистра, то рекомендуется модифицировать конфигурацию таким образом, чтобы необходимые данные записывались в качестве реквизитов регистра. Например, если возникает необходимость выбирать движения регистра по определенным видам документов, то запись в реквизит регистра вида документа или некоторого кода хозяйственной операции и обращение в запросе к реквизиту регистра будет существенно эффективнее, чем обращение в запросе к методу Вид текущего документа регистра. Особенно сильно разница в производительности будет проявляться при работе с базами данных в формате SQL.
Периодичность сохранения итогов Существенным инструментом регулирования производительности регистров при проведении документов задним числом является управление периодичностью хранения итогов. Заметим, что установка периодичности выполняется не в конфигурации, а собственно в информационной базе. Это позволяет на конкретном предприятии подобрать ту периодичность, которая обеспечивает наилучший компромисс между объемом хранимой итоговой информации с одной стороны, и скоростью расчета итогов не некоторый момент времени с другой. Уменьшение периода сохранения итогов пропорционально увеличивает объем хранимой информации, но позволяет в среднем быстрее рассчитывать итоги на некоторый момент времени.
Получение итогов на некоторый момент времени обычно требуется в двух случаях.
Во-первых, при проведении документа задним числом для получения остатков на момент проведения документа. Однако, как отмечалось в разделе посвященном проведению документа, само проведение задним числом не должно проводиться часто. Работа с системой должна быть организована таким образом, чтобы проведение задним числом происходило в порядке исключения.
Во-вторых, расчет итогов на некоторый момент требуется при получении отчетов за некоторый период времени, начинающийся не с начала периода (запрос, выполняемый не с начала периода и обращающийся к ресурсам регистра, выполняет расчет итогов на момент начала запроса). Заметим, что часто отчеты, содержащие информацию об остатках, формируются за целые периоды и при этом не происходит расчет остатков на начало периода, да и построение отчета обычно не требует такой скорости, как расчет итогов при проведении документа.
Таким образом, ориентация компоненты Оперативный учет на работу с текущими итогами требует построения конфигурации с минимальным обращением к расчету итогов на произвольный момент. То есть, не всегда следует начинать борьбу за производительность с уменьшения периодичности хранения итогов. В начале целесообразнее рассмотреть случаи выполнения временных расчетов на некоторый момент времени и постараться уменьшить частоту их возникновения.
Заметим, что настройка периодичности хранения итогов используется в основном для конфигураций работающих с базами данных в формате DBF/CDX. При работе с базами данных в формате SQL процедура временного расчета существенно ускоряется и не так сильно зависит от периодичности хранения итогов.
Обращение к данным регистров Запись движений регистров по времени выполнения достаточно предсказуема.
Время, затрачиваемое системой, при записи движений пропорционально количеству записываемых движений. Оно также в определенной степени зависит от количества измерений регистра. При проведении документов задним числом, в периодах предшествующих точке актуальности дополнительное время тратится системой на поддержание итогов регистра от периода документа до периода точки актуальности.
Приведем некоторые сведения касающиеся производительности системы при получении данных регистров.
Движения регистра и итоги регистра можно получать с помощью запросов (объект Запрос) или методов объекта Регистр. Разница заключается в том, что при выполнении запроса формируется промежуточный массив информации, который затем может многократно использоваться системой. При использовании методов объекта Регистр происходит непосредственное обращение к данным движений и итогов регистра. Однако, метод ВыгрузитьИтоги  объекта Регистр также позволяет многократно обращаться к итогам полученным в виде таблицы значений.
Обращение к движениям регистра, как из запроса, так и методами объекта Регистр выполняется последовательным обходом всех движений данного регистра всех документов, которые имеют движения по данному регистру. Использование условий запроса или фильтра с точки зрения объема выбираемых данных из информационной базы может ускорить выполнение операции только при наличии соответствующих граф отбора или отборов измерений или реквизитов регистра. Оптимизация  с помощью граф отбора подробно описана в разделе Графы отбора. Оптимизация с помощью отборов измерений и описана в разделе Использование отборов регистра. Если подходящей для оптимизации графы отбора или отбора самого регистра нет, движения регистра выбираются системой последовательно. При этом использование условия запроса или фильтра уменьшает только количество выполняемых строк встроенного языка, но не количество данных выбираемых из информационной базы.
Обращение к итогам регистров (остаткам регистров остатков и итогам оборотных регистров) также может выполняться и из запроса и методами объекта Регистр. Заметим, что получение данных типа Приход, Расход регистров остатков в запросе, реально требуют обработки движений регистра, то есть время их выполнения будет зависеть от количества движений за указанный интервал. Непосредственно из хранимых итогов регистров выбираются только остатки (итоги для оборотных регистров) на текущий момент (ТА) и на границу периода выбранного в качестве периода сохранения итогов оперативного учета (например, месяц). Итоги на другие моменты времени получаются на основании обработки остатков на начало периода, и обработки движений от начала периода до выбранного момента. При выполнении запроса это происходит автоматически, а при использовании методов объекта Регистр при вызове процедур РассчитатьРегистрыНа или  РассчитатьРегистрыПо. При выборке итогов (например, текущих остатков регистра остатков) использование фильтра значительно ускоряет процесс выборки при указании нескольких значений измерений начиная с самого первого, так как реально в этом случае обходятся только остатки ограниченные указанными значениями измерений. Аналогично и при выполнении  запроса, выбирающего остатки по регистру, если в условиях указаны в качестве явного равенства значения нескольких первых измерений регистра, то выборка будет производиться существенно быстрее. То есть, при проектировании структуры регистра весьма важен порядок следования измерений. Он должен выбираться таким образом, чтобы обеспечить оптимальную выборку остатков в критичных по производительности алгоритмах.
Например, если в качестве одного из измерений будет выступать приходный документ для разделения остатков товаров по партиям, то он должен быть последним измерением, так как в момент списания товаров будут выбираться текущие остатки конкретного товара по разным партиям. Для оптимизации получения остатков (итогов) регистров с фильтрацией по отдельным измерениям используется механизм отборов, который описывается в разделе Использование отборов регистров.
Методы получения конкретного остатка (итога оборотного регистра) с указанием всех измерений выполняются практически мгновенно. Методы получения сводных остатков (итогов для оборотного регистра) реально выполняют обход всех итогов ограниченных значениями указанных измерений. Если измерения регистра Товар и Склад и выполняется метод СводныйОстаток  с указанием товара, то реально будут обрабатываться все остатки данного товара на разных складах. То есть, скорость выполнения данного метода зависит от среднего количества существующих комбинаций значений неуказанных измерений в пределах значений указанных измерений. Таким образом, использование методов получения сводных остатков (итогов) в интерактивных режимах (например, вычисляемых полях форм) нежелательно, особенно при большом разбросе значений измерений, по которым производится подсчет остатков.
Если при обращении к сводным остаткам (итогам) пропускаются значения некоторых первых измерений, а указываются значения последующих, то получение результата может выполняться достаточно медленно. В приведенном примере получение сводного остатка по складу, без указания товара реально потребует обработки всех остатков регистра данного периода.
При выполнении временного расчета (РассчитатьРегистрыНа или  РассчитатьРегистрыПо) следует учитывать то, что временный расчет, при неизменном составе объектов типа Регистр для которых он включен, может выполняться поступательно. То есть, если временный расчет выполнен на некоторую дату или документ, то следующий вызов временного расчета с датой (документом) более поздним, чем предыдущее выполнение реально будет обрабатывать только движения документов, расположенных между предыдущей
границей временного расчета и указанной в данном вызове. Разумеется, между этими вызовами не должны уничтожаться объекты типа Регистр, для которых был установлен временный расчет, не должен включаться или выключаться признак временного расчета у объектов типа Регистр. Также не должны меняться настройки фильтров участвующих во временном расчете регистров.
Аналогично при выполнении запроса, который определяет остатки регистров с разбивкой по периодам обработка движений, будет выполняться поступательно, то есть запрос будет рассчитывать итоги на границу указанного интервала, формировать нужные итоги, затем рассчитывать итоги до следующей границы интервала и т.д.
Использование отборов регистра В версии 7.7 в свойствах регистров появилась возможность устанавливать признаки отбора для измерений и реквизитов.
В отличие от отборов других объектов метаданных отборы  регистров используются только для повышения производительности обработки регистра и никак не влияют на работу пользователя с конфигурацией в интерактивных режимах.
Для измерений регистра может быть установлено два вида отборов Отбор итогов и Отбор движений. Отбор итогов позволяет оптимизировать обращение к итогам по отдельному значению измерения, у которого установлен отбор. Отбор движений позволяет оптимизировать обработку движений, выбираемых по конкретному значению измерения, для которого установлен отбор.
Для реквизитов может быть установлен только признак Отбор движений, который позволяет оптимизировать обработку движений, выбираемых по конкретному значению реквизита, для которого установлен отбор.
Установка отборов по измерениями и реквизитам влияет на производительность объектов типа Запрос и Регистр. Причем оптимизация происходит только в том случае, если при обращении указывается конкретное значение соответствующего измерения или реквизита. Система не использует отборы при выборке по группе справочника и при выборке по списку значений.
При использовании объекта Запрос оптимизация выполняется системой при обработке данных регистра, если существует условие равенства переменной запроса, относящейся к измерению или реквизиту регистра, для которого установлен признак Отбор.
Признак Отбор итогов будет оптимизировать получение функций НачОст и КонОст. Признак Отбор движений, соответственно, будет оптимизировать получение функций Приход и Расход. Если запрос выполняет получение остатков не на начало периода и не на ТА, то признаки Отбор движений будут также использоваться для оптимизации получения остатков на нужный момент.
При использовании  объекта Регистр оптимизация выполняется системой при установке в фильтре регистра значения измерения или реквизита, для которого установлен признак отбора. Причем оптимизация будет выполняться только в том случае, если в качества значения фильтра указывается конкретное значение (не группа справочника и не список значений).
Признак Отбор итогов будет оптимизировать выполнение методов ВыбратьИтоги / ПолучитьИтог, а также ВыгрузитьИтоги. Признак Отбор движений, соответственно, будет оптимизировать выполнение методов ВыбратьДвижение / ПолучитьДвижение, ВыбратьДвижениеСОстатками, а также выполнение временного расчета (выполнение функций РассчитатьРегистрыНа и РассчитатьРегистрыПо).
При работе с объектами Запрос и Регистр система автоматически использует существующие отборы регистров, если это возможно. Никаких специальных указаний для использования отборов при этом не требуется. При наличии нескольких подходящих отборов система выбирает наиболее эффективный, основываясь на количестве возможных значений тех данных, для которых установлен отбор. Например, если в запросе заданы условия по двум измерениям регистра Товар и Склад, и для обоих в настройке регистра установлен признак отбора, то будет использован отбор по тому измерению, в справочнике которого больше элементов. Вероятнее всего это будет измерение Товар.
Для оптимизации обращений к движениям регистра использование отборов регистров обычно предпочтительнее, чем применение граф отбора документов.
Во-первых, графа отбора требует больше ресурсов при записи и проведении документа, так как для нее поддерживается специальная таблица вхождения документов в отборы по конкретным значениям. При использовании отбора регистра фактически создается только дополнительный индекс и несколько расширяется структура существующей таблицы движений регистра.
Во-вторых, при использовании для оптимизации выборки движений регистров граф отбора, оптимизируется только выборка документов, в которых выполнялись движения по интересующему значению. При использовании отборов регистров выбираются непосредственно необходимые движения. Особенно ощутимо эта разница будет проявляться в том случае, если по одному документу формируется большое количество движений. Например, если нужно оптимизировать выборку движений по конкретному товару и основной объем движений записывается многострочными документами, то при использовании графы отбора будет оптимизировано получение всех документов, в которых задействован данный товар, и по каждому полученному документу будут перебираться все движения. При использовании отбора движений система сразу выберет необходимые движения по искомому товару из всех документов.
При проектировании регистров следует взвешенно относиться к включению отборов по измерениям и реквизитам. Необходимость включения тех или иных отборов рекомендуется определять исходя из потребностей в оптимизации конкретных алгоритмов конфигурации, например, алгоритмов проведения документов или часто формируемых отчетов.
Не рекомендуется включать большое количество отборов, так как это может ощутимо замедлить запись движений регистров. Следует иметь в виду, что реально в каждом обращении к регистру система использует только один отбор. Поэтому имеет смысл включать отбор по тем измерениям и реквизитам регистров, по значениям которым реально выполняется выборка в критичных по производительности алгоритмах. Причем для установки отбора целесообразно выбирать измерения и реквизиты того типа данных, который имеет большое количество значений. Очевидно, что установка отбора по складу не даст существенный эффект, так как будут отбираться, например, движения по конкретному складу из нескольких существующих складов, что увеличит производительность всего в несколько раз. Тогда, как установка отбора по товару, при наличии в справочнике нескольких сотен или тысяч товаров, соответственно даст выигрыш при выборке по конкретному товару в сотни или тысячи раз.
При установке признаков Отбор итогов для измерений регистров следует учитывать, что система оптимизирована для получения итогов по установленным значениям измерений слева - направо. То есть выборка итогов, при установленных условиях или значениях фильтра нескольких первых измерений будет выполняться оптимально без использования отборов. Поэтому установка отборов по итогам имеет смысл, если существуют критичные по производительности обращения к итогам регистра в которых выполняется выборка по конкретному значению некоторого измерения, но при этом хотя бы по одному из предыдущих измерений условие или значение фильтра не установлено. Например, если регистр имеет измерения Товар и Партия и необходимо получить все итоги по конкретной партии (по всем товарам), то установка отбора итогов по измерению Партия может дать весьма ощутимый эффект.
Заметим, что установка отборов не требует изменения алгоритмов конфигурации или перепроведения документов. Это значит, что Вы можете включить отбор, проанализировать полученный эффект в ходе реальной работы пользователей, а затем отключить отбор, если он не оказал существенного влияния на производительность. Однако в некоторых случаях для получения эффекта от включения отбора необходимо переписать алгоритмы конфигурации.
Например, если при проведении документа выполняется обращение к итогам регистра по списку значений, использование отбора не изменит производительности данного алгоритма. Если заменить обращение к итогам по списку значений на обращение по отдельным значениям, по которым установлен отбор, то такой алгоритм может оказаться эффективнее.
Заметим, что использование отборов регистров целесообразно в основном для конфигураций работающих с базами данных в формате DBF/CDX. При работе с базами данных в формате SQL доступ к движениям и итогам регистров существенно ускоряется, и применение отборов может не оказать влияния на производительность.
Использование признака Быстрая обработка движений Для регистра в целом может быть установлен признак Быстрая обработка движений. Этот признак оптимизирует обработку движений регистров при выполнении запросов обращающихся к движениям регистра, методов объекта Регистр выбирающих движения,  а также выполнение временного расчета.
При обращении запроса или объекта Регистр к движениям регистра система анализирует все документы, выбирая движения по тем документам, по которым они записывались. Установка признака Быстрая обработка движений создает дополнительный индекс и расширяет структуру регистра дополнительными полями. Это позволяет системе выбирать сами движения регистра без анализа документов.
Установка данного признака дает увеличение производительности, если только незначительная часть документов записывает движения по данному регистру.
Таким образом, этот признак следует устанавливать только для тех регистров, по которым записываются движения редко используемыми документами.
При работе с базами данных в формате SQL применение данного признака не будет оказывать существенного влияния на производительность.
Оптимизация работы запросов Основой оптимизации работы запросов является максимальное использование результатов запросов и минимальное обращение к другим данным информационной базы. Пример последовательной оптимизации запросов включен в методическую конфигурацию и описан в данной рубрике в разделе посвященном запросам.
Заметим, что правильное построение запроса особенно сильно сказывается на производительности при работе с базами данных  в формате SQL. При этом идеальным решением является,  например, заполнение отчета при котором вообще не выполняется обращений в к информационной базе, а используются только результаты сформированного запроса.
В этом разделе мы кратко перечислим основные моменты на которые следует обращать внимание при разработке и использовании запросов.
При построении отчетов по результатам запросов для вывода значений группировок являющихся справочниками имеет смысл применять метод запроса ЗначениеУпорядочивания. Он будет использовать, например,  уже полученные запросом наименования элементов, тогда как преобразование значения группировки к строке будет извлекать отдельные наименования из информационной базы.
При построении отчетов по результатам запросов для формирования отдельных секций по группам справочников следует применять не метод справочника ЭтоГруппа, а метод запроса ЭтоГруппа. Метод запроса будет использовать уже полученную запросом информацию о том является ли текущее значение группировки группой или нет, тогда как вызов метода справочника будет обращаться к информационной базе.
Например:
Неправильно:
   Если Запрос.Товар.ЭтоГруппа()=1 Тогда
        ...
Правильно:
   Если Запрос.ЭтоГруппа(Товар)=1 Тогда
        ...
Если необходимо обращаться к различной информации содержащейся в объектах, значения которых извлекаются запросом, например реквизитам элементов справочника, который является группировкой запроса, то целесообразно включать в запрос дополнительные переменные, для получения этих данных, а не обращаться через точку к значениям группировок сформированного запроса.
Данная рекомендация особенно актуальна при работе с базами данных в формате SQL.
Кроме того, если все-таки выполняется обращение к нескольким методам или атрибутам значения группировки (или другой переменной) сформированного запроса, то целесообразно не обращаться к этим данным через точку, а присвоить значение переменной запроса обычной переменной и обращаться через точку уже к ее атрибутам и методам. В этом случае обращение к данным информационной базы будет выполняться на одно значение справочника однократно. При обращении к нескольким атрибутам и методам для одного значения переменной запроса использование промежуточной переменной может дать существенное увеличение производительности.
Например:
Неправильно:
    Пока Запрос.Группировка(1) = 1 Цикл
        Сообщить(Товар+Запрос.Товар.Код + ВидТовара   =
+Запрос.Товар.ВидТовара );
    КонецЦикла;
Правильно:
    Пока Запрос.Группировка(1) = 1 Цикл
        Тов=Запрос.Товар;
        Сообщить(Товар +Тов.Код + ВидТовара = +Тов.ВидТовара);
    КонецЦикла;
В условиях запроса следует преимущественно использовать простейшие выражения сравнивающие непосредственно переменную запроса с переменной модуля или атрибутом контекста модуля. То есть желательно не использовать в условиях вызовы методов, функций, обращения через точку. Простейшие условия обрабатываются запросом наиболее эффективно.  Данная рекомендация особенно актуальна при работе с базами данных в формате SQL. В некоторых случаях выполнение данной рекомендации может потребовать расширения структуры метаданных. Например, если при построении запросов анализирующих движения регистра  требуется выбирать движения относящиеся только к расходным накладным, то рекомендуется не использовать в условии обращение типа ТекДокумент.Вид()=ВыбранныйВид, а внести в структуру регистра дополнительный реквизит в котором отмечать при проведении документа движения сделанные именно расходной накладной. Это позволит в условии запроса указать простейшее выражение сравнивающее переменную запроса (соответствующую реквизиту регистра) с переменной модуля.
В условиях запроса целесообразно использовать оператор В применяемый для определение вхождения значений переменной запроса в группу справочника  или счета, а также вхождения в список значений, который может содержать отдельные значение и группы справочников или счетов. Использование этого оператора  существенно увеличивает производительность по сравнению с вызовом в условии метода ПринадлежитГруппе. Оператор В в ряде случаев целесообразно также использовать для сравнения  переменной запроса с несколькими значениями вместо отдельных выражений объединенных оператором ИЛИ.
Повышение производительности в ряде случаев может достигаться многократным использованием результатов выполненного запроса с отбором из него необходимой информации вместо выполнения нескольких отдельных запросов. Обычным примером такого использования запросов является построение сложных
отчетов в которых при использовании данных одного запроса включаются также данные другого запроса, выбираемые по конкретным значениям группировок методом Получить.
Такой подход может также использоваться при получении итогов по всем товарам входящим в табличную часть документа. При этом вместо выполнения отдельных запросов по каждому товару может быть выполнен запрос с условием, проверяющим вхождение товара в список значений содержащий товары, используемые в документе. Использование такого решения в приведенном примере с высокой вероятностью будет целесообразно при работе с базами данных в формате SQL. При работе с базой данных в формате DBF целесообразность данного решения во многом будет зависеть от количества товаров по которым существуют итоги и количества товаров в документе.
Кроме использования метода Получить многократное использование результатов запроса может достигаться при помощи выгрузки запроса в таблицу значений (метод Выгрузить).
Использование запросов в алгоритмах расчетов Обычно, объект Запрос применяется для формирования отчетов. В то же время, достаточно часто он используется также для выборки различных итогов при выполнении расчетов в процессе проведения документов или регламентных обработок. Например, с его помощью могут выбираться текущие итоги для списания ТМЦ по средней себестоимости или по методам LIFO, FIFO. Особенно роль использования запросов в таких алгоритмах в версии 7.7 возрастает при работе с базами данных в формате SQL. Однако, действия выполняемые запросом по умолчанию ориентированы именно на формирование отчетов.
Поэтому при использовании его для различных расчетов следует отключать дополнительные действия выполняемые запросом, не используемые для расчетов. Отключение дополнительных действий может весьма существенно увеличить производительность выполнения запроса.
Обычно в расчетах имеет смысл отключить формирование итогов по группам справочников и счетов. Для этого в описании группировки используется конструкция Без Групп.
Кроме специальных случаев, когда это действительно необходимо, рекомендуется отключить упорядочивание значений группировки. Для этого в описании группировки используется конструкция Без Упорядочивания.
Достаточно часто при использовании запросов в расчетах не имеет смысла получение итогов по вышестоящим группировкам, так как обрабатываются, только итоги по наиболее полному набору значений группировок. В этом случае следует отключить формирование итогов по группировкам с помощью конструкции Без Итогов. Это имеет смысл даже если используется всего одна группировка, так как в этом случае отключается формирование итогов по запросу в целом.
Оптимизация формирования отчетов Отчеты в 1С:Предприятии формируются обычно либо путем обхода объектов определенного типа (элементов справочника, документов, операций, проводок, движений и остатков регистра, записей журнала расчетов), либо путем предварительной обработки информации при помощи специальных средств (объекта Запрос, объекта БухгалтерскиеИтоги или объекта Операция) и последующем обходе полученных промежуточных информационных массивов.
При выборе конкретного пути следует учитывать особенности работы соответствующих средств, описанные в других разделах. В этом разделе приводится ряд общих рекомендаций по проектированию алгоритмов формирования отчетов.
Прежде всего, заметим, что при проектировании конфигураций, предназначенных для эксплуатации в разделенном режиме на предприятиях с большим объемом информации, в разработке отчетов следует особое внимание уделять минимизации обращения к информационной базе, так как именно эти действия становятся наиболее критичны по времени при больших объемах данных и одновременной работе нескольких пользователей.
Заметим, что в отличие от алгоритмов выполняемых при проведении документов, отчеты, как правило, формируются вне транзакции. Это означает, что выполнение большинства операций в отчете будет происходить существенно медленнее, чем при проведении документа. Это касается версий 1С:Предприятия работающих в базой данных в формате DBF. При работе с базами данных в формате SQL выполнение операций вне транзакции и внутри транзакции не отличаются по производительности. Однако, очевидно, что при работе в архитектуре клиент-сервер количество обрабатываемой информации полученной из информационной базы также весьма существенно влияет на производительность, поэтому и при работе с базами данных в формате SQL следует оптимизировать, прежде всего, обращения к информационной базе.
Таким образом, при написании алгоритма отчета следует учитывать не столько количество выполняемых строк встроенного языка, сколько объем обращения к информационной базе. Для такой оценки следует использовать описанные в разделе, посвященном  вопросам производительности, принципы работы конкретных средств языка с точки зрения обращения к данным. Приведем несколько практических примеров.
При получении отчета об остатках товаров можно организовать обход справочника методами объекта Справочник и по каждому элементу обращаться к текущему остатку в регистре оперативного учета, выводя при этом в отчет ненулевые строки. Другим способом является выполнение запроса по регистру и обход результатов запроса. Очевидно, что соотношение производительности первого и второго варианта зависит от того, по скольким товарам из справочника в данном периоде были итоги (движения или остатки). Если в справочнике много товаров, по которым остаток стал нулевым в прошлых периодах и не выполняется движений, то получение данных с помощью запроса будет существенно быстрее. Однако при работе с базами данных в формате SQL использование запроса будет намного эффективнее обращений к итогам по отдельным товарам, так как при правильном использовании объекта Запрос будут максимально задействованы возможности SQL-сервера для получения необходимой информации.
Аналогично обстоит дело и с обращением к данным бухгалтерских итогов.
Например, крайне нежелательно организовывать получение итогов по двум субконто счета при помощи вложенных циклов,  то есть обходить, например, справочник материалов, и на каждый материал обходить справочник складов, выбирая остаток по каждой комбинации товар-склад. Значительно эффективнее будет выполнение запроса объекта БухгалтерскиеИтоги и вывод его результатов в отчет.
Наиболее важным становится правильное проектирование алгоритма при формировании сложных отчетов включающих, как итоговые данные, так и детальные операции (движения регистров, проводки, строки документов).
В случае, если отчет формируется обходом большого объема информации очень важно проектировать алгоритм отчета так, чтобы не происходило циклических обходов значительных объемов данных. Например, типичной ошибкой может быть формирование запроса по суммам движений товаров за период, и по каждому товару выполнение обхода движений регистра, с фильтрацией по текущему товару для вывода детальных движений. В этом случае происходит многократный обход всех движений регистра за интервал отчета. В некоторых случаях такой алгоритм может быть использован, например, если выборка движений использует установленный в конфигурации отбор по измерению регистра, однако, этот случай будет являться скорее исключением.
Рекомендуется строить алгоритмы отчетов таким образом, чтобы обход больших объемов данных выполнялся один раз, или, например, два раза, но в любом случае, так чтобы скорость формирования отчета зависела от объемов данных линейно, а не экспоненциально. Так в приведенном примере целесообразно сформировать один запрос, включающий детальную группировку по документам.
В некоторых случаях бывает необходимо выполнить два запроса. Отчет при этом может строиться обходом группировок одного запроса и прямым обращением к данным в другом запросе для получения дополнительной информации. Техника формирования запроса и многократного обращения к его результатам дает существенный выигрыш в производительности  при работе в разделенном режиме, по сравнению с многократным формированием запроса.
При работе с бухгалтерскими итогами также целесообразно не допускать циклической обработки объектом БухгалтерскиеИтоги данных в режимах временного расчета и запроса. Более целесообразно выполнять запрос, на основании которого в дальнейшем получать различную информацию. Разумеется, данный принцип следует использовать с учетом приведенной в разделе Работа с бухгалтерскими итогами информации описывающей оптимизацию выборки бухгалтерских данных по отборам счетов и субконто.
В некоторых случаях при формировании отчетов в качестве промежуточных массивов данных можно рекомендовать использовать объекты типа СписокЗначений и ТаблицаЗначений. Например, если в ходе выполнения отчета приходится многократно перебирать значения справочника, то его можно вначале внести в список значений, а затем обходить уже не сам справочник, а список значений. В этом случае будет уменьшено количество обращений к информационной базе.
При формировании больших отчетов не следует выводить большого количества строк в окно сообщений. Его динамическое обновление может существенно затормозить формирование отчета. Если нужно получить большого размера текстовый протокол можно рекомендовать заносить строки в объект типа Текст а в конце формирования отчета вывести его на экран методом Показать.
В принципе существует возможность значительного ускорения формирования отчета с помощью включения транзакции (это касается работы с базой данных в формате DBF). Однако следует рекомендовать пользоваться этим только в особых случаях, так как включение транзакции в отчете приостановит работу других пользователей, записывающих информацию.
Оптимизация конфигураций при работе с базами данных  в формате SQL Одним из основных принципов архитектуры 1С:Предприятия является одинаковое функционирование конфигурации при работе с базами данных в формате DBF/CDX и базами данных  в формате SQL. Это  необходимо для широкого распространения единых прикладных решений и обеспечения плавной масштабируемости. Идентичность работы конфигураций в полной мере относится к их функциональной части, но, разумеется, не относится к производительности конкретных режимов и алгоритмов.
Типовые конфигурации могут использоваться с любыми версиями 1С:Предприятия от однопользовательских до клиент-серверных. В них выбираются, обычно, алгоритмы и решения обеспечивающие приемлемые показатели при работе с обоими форматами хранения. В то же время, при внедрении или создании конфигурации, которая будет заведомо использоваться с базой данных в формате SQL имеет смысл в отдельных алгоритмах учесть особенности работы различных механизмов 1С:Предприятия в клиент-серверном варианте.
Основной выигрыш с точки зрения производительности при работе с базами данных в формате SQL  достигается за счет применения тех механизмов 1С:Предприятия, которые осуществляют значительный объем операций по выборке данных непосредственно на SQL сервере.
Так как сам алгоритм встроенного языка всегда отрабатывает на клиентском компьютере, то максимальный выигрыш достигается при использовании объектов языка, выполняющих групповую выборку данных в одном вызове метода объекта.
Список таких объектов и режимов в которых они дают серьезные преимущества приведен в документации поставляемой с версиями 1С:Предприятия для SQL в разделе Производительность системы.
Перед началом оптимизации конфигурации для работы с базой данных в формате SQL следует внимательно ознакомиться с  разделом документации Производительность системы. Далее рекомендуется выделить наиболее узкие с точки зрения производительности участки конфигурации и рассмотреть возможность замены существующих алгоритмов на алгоритмы, которые максимально используют для выборки данных вызовы методов объектов, осуществляющих групповую выборку.
Приведем пример. Обычно, одним из узких мест является проведение документов, выполняющих автоматическое списание товаров или материалов. Для автоматического списания используется обращение к текущим остаткам регистра  оперативного учета с помощью объекта Регистр или объекта Запрос. При проведении задним числом будут также рассчитываться итоги на проводимый документ (объектом Запрос при указании в качестве границы текущего документа, а объектом Регистр при выполнении временного расчета на текущий документ). Получение итогов по большому количеству товаров, а особенно с расчетом итогов на документ, может выполняться достаточно долго.
В алгоритме проведения существует возможность обрабатывать каждый товар документа отдельно или выполнить один запрос (или обращение к регистру) для получения итогов по всем товарам документа, выгруженным предварительно в список значений. В запросе будет использован оператор В, а при работе с объектом Регистр установка фильтра.
Временный расчет в любом случае имеет смысл, очевидно, выполняться по всем товарам документа, так как многократная обработка движений регистра существенно замедлит выполнение алгоритма (исключение может составлять вариант, когда для измерения регистра Товар установлен в метаданных признак отбора).
Обработка текущих  итогов по списку товаров при использовании обычных версий 1С:Предприятия будет не вполне эффективной, так как время обработки будет зависеть от общего количества итогов по товарам в информационной базе. В то же время, при использовании версий 1С:Предприятия для SQL более производительным будет вариант единовременной выборки всех итогов по товарам документа с помощью запроса с условием или метода ВыгрузитьИтоги объекта Регистр  с установкой фильтра. Это объясняется тем, что оба эти механизма будут использовать для отбора необходимой информации возможности SQL-сервера и на клиентском компьютере будет выполняться обработка только необходимой информации.
Другим примером может являться алгоритм, выполняющий выборку списка документов по некоторому признаку, например, получение реестра приходных накладных,  по выбранному складу. При работе с базой данных в формате DBF/CDX выборка может осуществляться как перебором документов объектом Документ (с поверкой реквизита в алгоритме модуля) так и  с помощью объекта Запрос с соответствующим условием. Причем скорость выполнения обоих алгоритмов будет различаться не существенно (разумеется, если не существует подходящей графы отбора). При использовании версий для SQL использование запроса будет существенно эффективнее, разумеется, если количество выбираемых документов значительно меньше их общего количества в выбранном интервале.
При работе с базой данных в формате DBF/CDX объект Запрос редко используется для выборки элементов справочника. Однако, при использовании версий для SQL применение запроса для отбора элементов справочника по некоторому критерию будет весьма эффективным.
Следует заметить, что при использовании объекта Запрос для получения существенного выигрыша в версиях для SQL следует придерживаться общих рекомендаций по оптимизации запросов, приведенных в других разделах, так как значительный выигрыш будет достигаться только в том случае, если сам запрос максимально отрабатывает непосредственно на SQL-сервере.
При обращении к бухгалтерским итогам при использовании версий для SQL часто использование метода ВыполнитьЗапрос и обращение затем к результатам запроса эффективнее, чем использование отдельных вызовов методов для обращения к остаткам и оборотам.
При обращении к итогам регистров рекомендуется использовать метод ВыгрузитьИтоги вместо методов ВыбратьИтоги и ПолучитьИтог, так как метод ВыгрузитьИтоги  выполняет получение всей необходимой информации с использованием возможностей SQLсервера.
При необходимости получения некоторой выборки бухгалтерских проводок рекомендуется использовать объект Операция в режиме ВыбратьОперацииСПроводками с максимальным указанием критериев отбора в параметрах метода и методами ИспользоватьСубконто и ИспользолватьКорСубконто. Такая выборка будет существенно эффективнее, чем фильтрация проводок проверками в алгоритме модуля.
Работа пользователей Администрирование работы пользователей Специалисту, осуществляющему администрирование 1С:Предприятия, следует обращать внимание на состав программного обеспечения, работающего на компьютерах пользователей.
Зачастую, жалобы пользователей на медленную работу 1С:Предприятия (особенно на компьютерах с невысокой производительностью и небольшим объемом оперативной памяти) объясняются тем, что параллельно с работой 1С:Предприятия запущено одна или несколько задач, сильно влияющих на производительность. Это могут быть задачи DOS или другие не 32-разрядные задачи. Заметим, что некоторые задачи, работающие в фоновом режиме и оказывающие существенное влияние на производительность могут запускаться помимо желания пользователя (например, сервисные программы MS Office, автоматически включаемые при установке в группу запуска). Другой причиной снижения производительности может быть недостаточный размер файла подкачки (Swap-файла) установленный в настройках Windows или отсутствие достаточного места на диске, необходимого для функционирования системы.
С точки зрения возможной модернизации компьютеров для повышения производительности 1С:Предприятия, наиболее целесообразным является увеличение объема оперативной памяти.
Позиционирование в журналах на вводимые документы После ококнчания ввода документа программа автоматически позиционируется на введенный документ в открытом журнале. В ряде случаев это удобно. С другой стороны, иногда удобнее, чтобы текущая позиция в журнале оставалась неизменной. Например, если необходимо скопировать или ввести на основании несколько документов подряд и требуется чтобы курсор оставался на выбранных документах-основаниях.
В этом случае можно воспользоваться  параметром Переходить в журнале на записанный документ (режим Сервис - Параметры - Журналы). Этот параметр позволяет отключить позиционирование на введенный документ.
Кроме того существует определенная особенность при использовании версий 1С:Предприятия для SQL. Она заключается в том, что при работе с журналами с большим количеством документов (в текущем интервале) позиционирование на введенный  документ занимает некоторое время.
Избежать этого можно за счет уменьшения текущего интервала или за счет отключения позиционирования в журнале на введенный документ. Разумеется, если в момент ввода документов не существует открытых окон журналов, то время на позиционирование не тратится.

Управление распределенными ИБ

    - управление регистрацией изменений объектов из встроенного языка
    - запрет миграции движений регистров и бухгалтерских операций
Подробно описание данных возможностей приведено в брошюре 1С:Предприятие 7.7. Управление распределенными ИБ. Пример использования этих возможностей приведен в методической конфигурации. Для учета товаров предназначены два регистра:
    - ТовЗап - для учета товаров в натуральном выражении
    - ТовУчет - для учета товаров в денежном выражении.
Движения по указанным регистрам могут производить следующие документы:
    - ПрихНакл - приходная накладная, приходующая поступления товаров на склады. Данный документ  производит движения по обоим упомянутым регистрам.
    - РасхНакл - расходная накладная, по которой товары списываются со складов. При этом в денежном учете товары списываются по средней цене, которая вычисляется на момент проведения документа.
    - Чек - документ, производящий списание товаров в натуральном выражении.
    - РасходПоЧекам - документ, выполняющий списание товаров в стоимостном выражении за день по выписанным чекам;
Понятно, что в случае ввода или изменения документов задним числом могут быть изменены условия, в которых производилось проведение всех последующих документов типа РасхНакл, что, в свою очередь, может привести к изменению средней цены, по которой должны списываться товары. Для поддержания корректности списания по средней цене в конфигурации предусмотрена последовательность документов - ОсновнаяПоследовательность. Так как на последовательность оказывают влияние движения регистра ТовУчет, то любой проводимый задним числом документ, совершающий движения регистра ТовУчет влияет на все последующие документы РасхНакл, производящие списание товаров по средней цене. Для восстановления последовательности документов предназначена обработка ВосстановлениеПоследовательностей.
Теперь представим себе, что поставлена задача усовершенствования конфигурации таким образом, чтобы она могла работать в распределенной ИБ. При этом, учет товаров в натуральном выражении может вестись в каждом из узлов распределенной ИБ. Учет товаров в денежном выражении имеет смысл только по всей организации в целом. Поэтому принимается решение, что денежный учет будет вестись только в центральном узле распределенной ИБ, а движения регистра ТовУчет не будут производиться документами, проводимыми в периферийных узлах. Миграция движений регистра ТовУчет также будет запрещена. Таким образом, движения регистра ТовУчет не будут появляться в периферийных узлах. Для обеспечения этого регистру ТовУчет установлен признак Запретить миграцию движений. А в модули документов РасхНакл и ПрихНакл введены операторы препятствующие созданию движений регистра ТовУчет при проведении документов в периферийных узлах распределенной ИБ (см. последовательности операторов)
Если ТекущаяИБЦентральная()=1 Тогда
        …
КонецЕсли;
Поскольку последовательность документов ОсновнаяПоследовательность предназначена для согласования данных денежного учета товаров она не имеет смысла на периферийных узлах распределенной ИБ. В силу этой особенности для данной последовательности документов установлен признак Единая последовательность в центральной ИБ.
Таким образом документы могут создавать движения регистра ТовУчет только при проведении в центральной ИБ, а последовательность документов ОсновнаяПоследовательность отслеживает правильность создания движений регистра ТовУчет документом РасхНакл в соответствии с выбранным методом списания товаров по средней цене.
Однако при выбранной стратегии поведения документы типов ПрихНакл и РасхНакл, проведенные в одной из периферийных ИБ и прибывающие оттуда в центральную ИБ не имеют движений регистра ТовУчет, хотя с точки зрения логики денежного учета должны иметь.
Для решения данной проблемы в число документов на проведение которых влияет последовательность ОсновнаяПоследовательность включаются два вида документов: РасхНакл и ПрихНакл. Включение документа РасхНакл обусловлено самой логикой указанной последовательности, ведь, в действительности, движения регистра ТовУчет, которые создает этот документ, зависят от состояния данного регистра на момент проведения документа. Документ ПрихНакл включен в последовательность исходя из того, что ОсновнаяПоследовательность в данном случае начинает использоваться и как механизм, заставляющий документы данного вида, прибывшие из периферийных ИБ перепроводиться, создавая ранее отсутствовавшие движения регистра ТовУчет. Дело в том, что для всех видов документов действует следующее правило: если в процессе обмена в распределенной ИБ в тот или иной узел загружен документ вида, входящего в последовательность и время этого документа меньше границы начала последовательности, то граница начала последовательности устанавливается на этот документ, а точнее на момент предшествующий этому документу, чтобы при восстановлении последовательностей он также был перепроведен. Таким образом документы
всех видов, входящих в последвательность после переноса их из периферийных ИБ в центральную будут перепроведены при первом же выполнении обработки ВосстановлениеПоследовательностей.
В этом случае, однако, могут выполняться лишние действия. Например, перепроведение документов вида ПрихНакл, уже проведенных в центральной ИБ является явно излишним, так как в результате перепроведения движения регистров, созданные такими документами не будут отличаться от тех, что имели место до перепроведения. В то же время эти лишние перепроведения не будут менять состояния ИБ и не смогут нарушить ее логическую целостность. Однако, заметим, что выполнение перепроведения этих документов необходимо, чтобы граница последовательности продвигалась вперед.
При перепроведении документов в рамках последовательности документов ОсновнаяПоследовательность в процессе выполнения обработки ВосстановлениеПоследовательностей могут изменяться только движения регистра ТовУчет, которые, как было отмечено выше, никогда не присутствуют в периферийных ИБ и, следовательно, по отношению к периферийным ИБ данные локументы остаются неизменными и нет необходимости передавать их изменения в процессе переноса изменений данных из центральной ИБ в периферийные. Для того, чтобы заблокировать такую массированную передачу изменений документов, в процедуру Выполнить() обработки ВосстановлениеПоследовательностей, непосредственно перед оператором, вызывающим проведение входящего в последовательность документа вставлен оператор, запрещающий регистрацию изменений документа при его проведении
// запретить регистрацию изменений документа при его проведении
Док.РегистрацияИзменений(0);
        // собственно проведение документа. так как документы проводятся
        // последовательно то граница последовательности будет перенесена на данный
        // документ
Док.Провести();
В результате выполнения данной последовательности операторов документ будет перепроведен, его изменение при этом не будет зарегистрировано и в результате, если  данный документ не будет (не был) изменен при каких-либо других обстоятельствах, то он не будет перенесен в периферийные ИБ в процессе передачи изменений данных.
Заметим, что для перепроведения документов, полученных из периферийных информационных баз для формирования движений по стоимостному учету, используется механизм последовательностей, что, разумеется, не является его прямым назначением.  В то же время, для этой цели может использоваться и реквизит документа, в котором будут отмечаться документы, которые проведены в периферийной ИБ и должны быть перепроведены в центральной. В этом случае перепроведение таких документов должно выполняться в качестве дополнительной регламентной операцией предшествующей восстановлению последовательностей.
Таким образом, в предложенной методике демонстрируется две возможности:
    1) Исключение миграции большого количества документов на периферийные ИБ при их групповом перепроведении в центральной ИБ;
    2) Ограничение области действия регистра, на котором ведется стоимостной учет, центральной информационной базой.
Использование MS Exchange для организации обмена файлами переноса данных Приведенная в данном разделе рекомендация может оказаться  полезной в случаях, если установленная компонента управления  распределенными  базами  данных использует электронную почту для организации обмена файлами переноса данных и корпоративная система обмена  сообщениями построена на базе Microsoft Exchange Server.
Проблема состоит в том, что, если Microsoft Exchange Client, установленный на одной из PC, входящих в состав периферийной  информационной базы, и работающий в режиме off-line (т.е. при отсутствии  активного соединения с сервером), не может осуществить  разрешение адреса, если адрес получателя указан в формате почты Интернет ( SMTP: ).  Соответственно, сформированное  1С:Предприятием  сообщение с  присоединенным файлом переноса данных не может быть отправлено, если адрес получателя указан в формате почты Интернет.

Вопросы архитектуры системы 1С:Предприятие

Ресурсами могут являться любые исчисляемые величины, такие как: количество товара, долг клиента, сумма наличных и т.п. Измерения Регистра остатков – это оси координат, на пересечении которых Регистр остатков хранит конкретные значения ресурсов. В качестве измерений могут выступать любые значения, характеризующие конкретные значения ресурсов, например, материал, место хранения, организация.
Приведем пример регистра остатков. Допустим, у нас есть Регистр ОстаткиТоваров, измерениями этого регистра являются: Товар, Склад, МОЛ. Регистр имеет один ресурс - Количество. Содержание данного Регистра можно представить в виде следующей таблицы, где по каждому конкретному товару на конкретном складе за конкретным МОЛ числится определенное Количество товара.
На рисунке приведена логическая схема хранения текущих остатков регистра ОстаткиТоваров.
Для каждого регистра в информационной базе система хранит остатки на некоторые моменты времени  и все движения по данному регистру.
Управление регистрами остатков осуществляется записью движений прихода и расхода в процессе проведения документа. Каждое движение содержит значения всех измерений и  тех ресурсов, которые изменяются в данном движении.Алгебраическая сумма значений ресурсов имеющихся движений приходов и расходов и определяет состояние остатков, причем эти итоги формируются отдельно по каждой используемой комбинации значений измерений. Приведем пример движений регистра и остатков, которые получаются на основании этих движений:
Состав измерений регистров определяет максимальную детализацию хранения остатков. Разумеется, с помощью запросов можно свернуть остатки, получив их с меньшей детализацией. Свертка может производиться по любой комбинации измерений. Приведем некоторые варианты свертки регистра ОстаткиТоваров.
Свертка по МОЛ.
Движения регистров, выполняемые документами по регистру остатков должны выполнять как приход, так и расход по каждому используемому сочетанию значений измерений. Это означает, что нельзя допускать ситуации, когда в конфигурации предусматривается, например, запись движений прихода по некоторому сочетанию измерений регистра остатков и не предусматривается движений расхода по данному сочетанию значений измерений. Разумеется, приходы и расходы могут выполняться совершенно разными документами и в разные моменты времени, но сам принцип регистра остатков подразумевает то, что регистр отражает некоторый баланс наличия средств которые приходуются и расходуются. Причем данное правило должно выполняться для всех ресурсов регистра. В противном случае остатки регистра будут постоянно переноситься из периода в период и его использование будет неэффективным.
Кроме измерений и ресурсов в движениях регистров могут располагаться реквизиты. Они никак не влияют на расчет остатков. Реквизиты предназначены для указания в движениях некоторой дополнительной информации о выполненном движении. Например, при расходовании товара может указываться вид продажи (наличный или безналичный). Этот признак никак не влияет на остатки товаров, но может использоваться, например, для анализа структуры продаж.
Заметим, что если некоторое числовое значение является характеристикой движения регистра, и вы хотите получать по нему отчеты  с суммами данного значения по движениям, но оно не имеет физического смысла в качестве остатка, то его следует вводить в структуру регистра в качестве реквизита, а не в качестве ресурса. Например, если при расходовании товара, мы хотим отразить сумму НДС, выделенную при продаже, но эта сумма не должна храниться в регистре в качестве остатка (так как мы не планируем вести учет остатков по НДС), то ее нужно ввести в структуру регистра в качестве реквизита.
Из описанных выше правил вытекает то, что регистр остатков фактически используется для организации некоторой замкнутой системы учета. Причем в определенной ситуации может существовать потребность в двух и более системах учета одних и тех же объектов предметной области. В этом случае создается более чем один регистр. Типичным примером использования нескольких регистров для учета одних и тех же объектов может служить учет складских запасов и резервирования товаров для тех случаев, когда резервирование выполняется не с конкретного склада, а от лица всей фирмы. При этом фактически ведется два учета - учет наличия товаров на складах и учет зарезервированных товаров по клиентам или конкретным счетам. На рисунке приведен пример такой структуры регистров.
Пример структуры регистров для учета товаров:
Регистр НаличиеТоваров
покупателя и конкретных товаров, входящих в купленные комплекты. Далее с помощью запросов мы сможем получить необходимую нам информацию о том, какой клиент, каких товаров сколько покупал за выбранный период.
Сами итоги оборотного регистра всегда хранятся и выдаются (объектом типа Регистр) с детализацией до того периода, который задается в метаданных. Однако при выполнении запроса можно получить итоги и с любой другой периодичностью. Для оборотных регистров хранение итогов позволяет системе достаточно быстро формировать запросы по данному регистру за длительный интервал в разрезе той же периодичности, что и период оборотного регистра. Например, если периодичность регистра в метаданных выбрана - месяц, то запрос будет достаточно эффективно формировать итоги за два, три месяца и т.д. Обращение к итогам, например, за неделю потребует обработки движений регистра. Однако хранение итогов с маленькой периодичностью потребует достаточно больших ресурсов с точки зрения используемого дискового пространства.
         Хронологический порядок документов и Точка Актуальности.
Для оперативного учета очень важной особенностью системы хранения документов 1С:Предприятия является то, что все документы (документы всех видов) располагаются в едином хронологическом порядке. Фактически он отражает последовательность событий хозяйственной жизни предприятия. Позиция документа в общей последовательности определяется его датой, временем, а также некоторой дополнительной величиной, которая устанавливает порядок документов с одинаковым временем в одной дате. Эта величина не регулируется пользователем, но система гарантирует ее неизменность. То есть, гарантируется, что при любых загрузках, выгрузках, перезаписях документы будут всегда находиться в одной и той же последовательности относительно друг друга, кроме случаев, когда у них редактируется дата или время. Заметим, что время документа служит в основном для упорядочивания их внутри даты и его связь с астрономическим временем весьма условна. То есть при изменении времени документа, для логики работы системы важна на сама смена значения времени, а изменение порядка документов.
Для компоненты Оперативный учет принципиальным понятием является Точка Актуальности (далее ТА). Вкратце ТА можно определить как точку на оси последовательности документов. Она может указывать на конкретный документ, или нет (например, если документ, на который она была установлена - удален), но она всегда выступает в качестве позиции на оси документов и любой документ в системе однозначно располагается либо до ТА, либо на ТА, либо после ТА. Точка актуальности является моментом, на который регистры содержат текущие значения всех ресурсов. Другими словами, если просто запросить у регистра значение какого либо ресурса, то он выдаст его именно на момент ТА. Если нам необходимо значение ресурса на прошедший момент времени, то надо либо сдвинуть в прошлое ТА (для этого используется операция Управления итогами), либо при помощи средств встроенного языка запустить временный расчет регистра.
Для регистров остатков итоги на ТА фактически отражают взаимоотношение приходов и расходов ресурса по каждому сочетанию измерений с момента начала ведения учета до момента ТА.
Для оборотных регистров итоги на ТА отражают накопленную сумму движений с ближайшего начала периода оборотного регистра до ТА. Для приведенного примера оборотного регистра итог на ТА будет означать количество проданного товара конкретному клиенту с начала месяца.
При нормальной работе Точка актуальности передвигается вперед в процессе последовательного проведения документов. Так как для регистров остатков итоги хранятся не только на текущий момент (то есть на ТА), но и на границы периодов (месяца, пятнадцати, десяти или пяти дней), то для проведения документа относящегося к следующему периоду необходимо выполнить открытие периода или перенос ТА на следующий период (эти действия однозначны). При этом система фиксирует хранимые остатки прошлого периода и инициализирует текущие остатки в новом периоде.
Компоненты Бухгалтерский учет и Оперативный учет Отличия и особенности использования. В системе программ 1С:Предприятие существует две функциональные компоненты используемые для автоматизации учета наличия и движения средств. Это компоненты Оперативный учет и Бухгалтерский учет. Достаточно часто у специалистов занимающихся созданием и внедрением прикладных решений на базе 1С:Предприятия возникают вопросы связанные с сопоставлением функциональных возможностей этих компонент, а также их позиционированием. В этом разделе мы постараемся  объяснить принципиальные различия этих двух компонент и дать рекомендации по их применению.
                        Основные принципы компонент
В начале приведем основные  принципы,  заложенные  в  эти компоненты.
Компонента Оперативный учет основана на механизме  регистров. Регистр  представляет собой многомерную систему учета наличия и движения средств. В конфигурации определяется набор независимых регистров. Каждый из них имеет собственную структуру, включающую набор измерений, образующих многомерную систему координат и набор ресурсов, определяющих состав собственно исчисляемых значений.  При помощи регистров в конфигурации организуется достаточно сложный учет по конкретным разделам  экономической    деятельности   предприятия.   Причем  структура регистров описывается в точном соответствии  с  необходимостью детализации по конкретным разделам учета .  Например, для учета товаров минимально достаточно одного  измерения  -  собственно номенклатуры товаров.  Дополнительно можно разделить учет по нескольким складам - тогда добавляется измерение склад, можно ввести  разделение  по  материально-ответственным  лицам - ввести измерение МОЛ.  Если ввести партионный учет, то  будет добавлено измерение Партия. Состав измерений будет полностью определяться потребностями данного раздела учета.  В некоторых случаях  для учета товаров может быть введено два регистра, то есть учет товаров будет вестись  в  двух  системах  координат.  Например,  в  этом может возникнуть необходимость,  если нужно вести независимый учет  резервирования  товаров.  Поясним  это подробнее.  Для  любой  единицы  учитываемой в регистре должны быть однозначно определены значения всех измерений.  Если  резервирование производится не с конкретного склада, а для фирмы в целом , то для учета резервирования следует ввести  отдельный регистр,  который будет учитывать количество зарезервированного товара в разрезе покупателей и счетов на оплату. Таким образом, товары  будут учитываться на одном регистре с точки зрения физического местоположения на  складах,  а  на  другом  с  точки зрения логического распределения по клиентам зарезервированных товаров. Состав ресурсов регистра также полностью определяется требованиями учета.  Например,  товары  могу учитываться как в количественном  выражении, так и в учетных ценах, для стоимостной оценки товарного запаса.
Важной особенностью компоненты Оперативный учет является ориентация  на  поддержку  итогов в актуальном состоянии на текущий момент времени. Компонента Оперативный учет поддерживает остатки регистров на Точку  актуальности,  которая  при повседневной работе соответствует последнему проведенному документу. При проведении документы располагаются в именно порядке проведения, а не в порядке ввода, что обеспечивает четкую последовательность отражения в учете деятельности предприятия.
Доступ к  текущим остаткам регистров осуществляется практически мгновенно.  Это позволяет  при  проведении  документов контролировать  наличие товаров на складах,  состояние взаиморасчетов и другие данные именно на момент проведения  документов. Мгновенный  доступ  к текущим итогам при проведении документов позволяет исключить одновременное  списание  со  склада одних и тех же товаров разными менеджерами.
Компонента Бухгалтерский учет обеспечивает ведение планов счетов, операций,  проводок  и бухгалтерских итогов.  Она ориентирована на  отражение  хозяйственной  жизни  предприятия именно в бухгалтерском учете.  То есть, она реализует основные принципы бухгалтерского учета.
Прежде всего, весь учет обязательно ведется в разрезе синтетических счетов .  Все остальные разрезы учета (субсчета, валютный учет,  аналитический учет) выступают, как дополнительные, и могут не использоваться. Учет может вестись в денежном и натуральном выражении. При ведении валютного учета отдельно также учитываются валютные суммы.
Вся информации о движении средств отражается в проводках.  Все проводки имеют одинаковую структуру, а состав данных в них определяется  настройками учета корреспондирующих счетов.  Так для счета может быть определено до 5  разрезов  аналитического учета.  Соответственно значения объектов аналитики в проводках будут заполнены в том объеме, который определен для конкретного  счета. Многомерность аналитики позволяет,  например,  для счета 10 (материалы) организовать учет в разрезе номенклатуры, мест хранения и материально-ответственных лиц.
Так как одним из основных принципов  бухгалтерского учета является принцип двойной записи,  проводка  имеет  дебетовую  и кредитовую часть. В некоторых случаях одна из частей может быть не заполнена,  например, при использовании забалансовых счетов.
Система хранения  бухгалтерских  итогов  ориентирована на быстрое получение итогов с детализацией  до  месяца,  то  есть данных об  остатках на начало месяца,  оборотах за месяц, остатках на конец месяца,  а также по любым периодам,  состоящим из целых месяцев.  Получение итогов может производиться за любой интервал и на любой момент времени,  но это выполняется системой за счет дополнительной обработки проводок.
              Сопоставление средств и возможностей компонент
Теперь сопоставим средства, используемые этими компонентами, и возможности, которые они предоставляют.
На первый взгляд компоненты Бухгалтерский учет и  Оперативный учет  решают практически одну и ту же задачу, но разными способами.  На самом деле  различия  между  ними  весьма существенные.
Первое отличие компонент заключается в механизме  отражения информации о движении средств. В компоненте Бухгалтерский учет основным разрезом учета являются синтетические счета, которые и  определяют бухгалтерскую модель отражения хозяйственной деятельности предприятия.  В компоненте Оперативный учет механизм регистров является более универсальным средством и не имеет предопределенных разрезов учета.
Многомерный аналитический  учет в 1С:Бухгалтерии действительно позволяет так же как и регистры оперативного учета хранить  данные  о  движении средств и получать итоги в различных разрезах.  Однако он предназначен для  детализации  итогов  по синтетическим счетам.  Тогда,  как регистры оперативного учета представляют собой самостоятельную универсальную модель многомерного учета.
Использование аналитики в бухгалтерском учете в сравнении с регистрами менее гибко и менее эффективно при  сложном учете и большом  объеме  информации.  Это определяется единообразным хранением всех проводок. Устройство регистров позволяет максимально точно отразить в них требуемую схему учета по  конкретным разделам,  что  обеспечивает наиболее эффективное хранение и использование информации. Кроме того, при использовании версий 1С:Предприятия для SQL механизм регистров более эффективно оптимизируется системой за счет того, что структура хранения информации регистров более точно соответствует типовым структурам баз данных, чем универсальные структуры используемые для хранения данных о
бухгалтерских проводках и итогах.
Механизм регистров  не  использует понятие двойной записи, так как оно предназначено именно для бухгалтерского  учета, то  есть для отражения финансового состояния предприятия в денежном выражении как с точки зрения наличия средств, так и с точки зрения источников финансирования и финансовых обязательств.
Другим различием механизмов бухгалтерского и оперативного учета в  1С:Предприятии  является распределение во времени совершения хозяйственных операций на предприятии и  отражения их в учете. Работа бухгалтерии, как правило, ведется по факту. То есть в бухгалтерию поступает информация о совершенных операциях, которая отражается в бухгалтерском учете. Причем это может производиться со значительным запозданием.  То есть  бухгалтер заносит данные о совершении хозяйственных операций,  как летописец освещает произошедшие события.  Соответственно  компонента Бухгалтерский  учет  ориентирована на ввод операций за любые даты и быстрое получение итогов с детализацией  по  месяцам  и кварталам,  что  весьма необходимо для составления отчетности.
Компонента Оперативный учет напротив предназначена для отражения  хозяйственных операций в основном непосредственно в момент их совершения, то есть в реальном времени. Понятие точки актуальности  (текущего момента) позволяет не просто отражать в учете операции в момент их совершения,  но и выполнять  различного рода контрольные действия по определению правомерности совершения операций (контроль наличия товаров, состояния взаиморасчетов).  Для  этого  в механизме регистров оптимизировано получение итогов именно на текущий момент,  то есть на  момент совершения хозяйственной операции.  Разумеется, существует возможность изменения уже введенной информации и ввода информации задним числом, но она используется в основном как исключение, для исправления ошибочно введенных ранее данных.
Важным аспектом для понимания разницы между бухгалтерским и оперативным  учетом в 1С:Предприятии является тот факт,  что устройство операций и проводок в бухгалтерском учете  ориентировано на непосредственную работу с ними конечного пользователя.  Бухгалтер понимает, как устроен учет на уровне синтетических  счетов,  аналитики,  проводок и итогов.  Он может вводить проводки вручную,  может настраивать ведение учета,  может самостоятельно интерпретировать проводки, записанные документами и
стандартные отчеты.  Таким образом бухгалтерский учет в  1С:Предпрятии  реализован  понятными бухгалтеру категориями (счет,  субсчет, аналитика, валюта,  проводка).
Регистры оперативного учета выступают в качестве внутреннего механизма,  который используется при конфигурировании  системы.  Пользователь  (продавец,  менеджер)  не посвящается в подробности реализации учета.  Он работает с документами и отчетами,  а механизм регистров,  который при этом фактически используется, обеспечивает получение необходимой информации, но скрыт в конфигурации.  При использовании механизмов  оперативного учета конечному пользователю не предоставляется универсальных
средств отражения операций  в  регистрах  и получения  отчетов.  Все предусмотренные варианты движения регистров и получения итогов описаны в конфигурации в виде документов  и  отчетов  и предназначены для вполне конкретного использования. Например, для отражения движений товаров вводится несколько видов документов  (накладных,  требований),  а  для получения итогов один или несколько отчетов (материальная  ведомость,  карточка товара  и  т.д.).  Работа  пользователя с бухгалтерским учетом предусматривает как специализированные режимы (документы,  отчеты) ориентированные  на конкретные разделы учета,  так и универсальные средства  отражения  любых  хозяйственных  операций (операции вводимые вручную,  типовые операции) и универсальные средства получения итогов по любым разделам учета (стандартные отчеты).
Заметим также,  что конфигурирование механизма  регистров обычно выполняется  специалистами по автоматизации,  тогда как конфигурирование компоненты Бухгалтерский учет  в категориях понятных бухгалтеру  позволяет выполнять настройку учета и специалисту имеющему экономическое  образование и небольшие навыки работы с компьютером.  Такое различие объясняется тем,  что сам механизм бухгалтерского учета существовал фактически как  некоторая универсальная математическая модель со времен Луки Почиоли,  еще задолго до появления компьютеров и знаком бухгалтеру, тогда как регистры оперативного учета являются специфическим механизмом 1С:Предпряития.
                 Рекомендации по использованию компонент.
Теперь постараемся подытожить приведенные отличия  компонент и дать рекомендации по их применению.
Очевидно, что компонента  Бухгалтерский  учет  идеально подходит для ведения  синтетического  учета  и аналитического бухгалтерского учета.  Мощные возможности аналитического учета позволяют  также использовать ее для ведения управленческого  складского учета, взаиморасчетов,  учета в производстве и т.д.  Все разделы поддерживаются  единым механизмом проводок,  который обеспечивает высокую наглядность отражения в учете операций для  бухгалтера.  Механизм аналитического учета целесообразно использовать в тех случаях, когда он необходим для получения  развернутых  итогов по синтетическим  счетам и для составления бухгалтерской и налоговой отчетности.
Компонента Оперативный  учет позволяет построить весьма специфичную схему учета в соответствии с  конкретным  разделом учета. Ее целесообразно использовать при сложном  управленческом учете и большом объеме хозяйственных операций.  Как правило, она применяется для автоматизации основной деятельности предприятия. Например, в торговле это учет наличия и движения товаров, учет взаиморасчетов с клиентами, а в производстве – учет материалов, выпуска готовой продукции, калькуляции затрат. Гибкая
настройка механизма  регистров  позволяет  эффективно поддерживать сложные виды учета,  например,  учет заказов,  учет товарных кредитов, учет товаров на реализации,  списание по методам LIFO/FIFO и т.д. Компоненту Оперативный  учет целесообразно также применять в тех случаях,  когда автоматизированную систему предполагается использовать в реальном времени. То есть не только для фиксации в  учете  произошедших  хозяйственных  операций,  но и для получения оперативной информации о текущем состоянии материальных и  денежных  средств, и принятия с помощью программы управленческих решений, например,   обеспечения контроля одновременного доступа к товарным запасам нескольких пользователей.
То есть механизмы компоненты Бухгалтерский учет наиболее эффективны именно как средство отражения хозяйственной деятельности в соответствии с требованиями методологии бухгалтерского учета. Средства Оперативного учета предназначены не только для отражения, но и для управления собственно совершением хозяйственных операций.
Наибольший интерес  представляет совместное использование компонент. На  практике  на предприятии с одной информационной базой могут работать  и  сотрудники  бухгалтерии,  и  менеджеры (например, отдел продаж,  коммерческий отдел). Использование в одной конфигурации компонент Оперативный учет и Бухгалтерский учет позволяет органично совместить работу различных подразделений.  Механизмами  оперативного  учета  решаются  задачи собственно управленческого учета,  составляющие основной объем хозяйственных операций на предприятии и ведущихся  в  реальном времени. Средствами оперативного учета  отслеживаются движения товаров, складские запасы, выполняется резервирование, поддерживаются взаиморасчеты с клиентами с учетом кредитов,  консигнации и других особенностей управленческого учета.  Все операции, реализуемые компонентой  Оперативный  учет  полностью описываются  в  конфигурации,  так  как  персонал, который их оформляет не должен иметь возможность отклонения  от  принятой схемы ведения бизнеса и, как правило, не осведомлен об особенностях реализации учетных регистров.
По данным управленческого учета  могут автоматически формироваться проводки для отражения определенного круга операций в бухгалтерском учете. Причем отражение в бухгалтерском учете  целесообразно выполнять с той степенью подробности, которая необходима для получения бухгалтерской и налоговой отчетности.  То  есть информация о хозяйственных операциях будет сворачиваться,  освобождаясь от деталей  несущественных  для бухгалтерского учета.  Например, очевидно, что для бухгалтерии несущественно распределение товаров по складам.  Кроме того,  и сама  детализация  по  конкретным товарам также может не отражаться в бухгалтерском учете.  Кроме отражения данных полученных на основании оперативного учета, компонента Бухгалтерский учет используется для  автоматизации  самых  разных  разделов учета  предприятия  не  имеющих большой нагрузки по количеству операций и не требующих участия программы в управлении операциями. Например, это взаиморасчеты с подотчетными лицами, учет основных средств и т.д.  Разумеется, компонента Бухгалтерский учет используется также для  определения  финансовых  результатов, составления бухгалтерской и налоговой отчетности. В отличии от оперативного учета компонента  Бухгалтерский  учет допускает  ручной ввод операций.  Это возможно благодаря тому, что бухгалтер владеет понятиями,  которыми оперирует программа (счет,  аналитика, проводка и т.д.). Возможность ручного ввода операций позволяет отражать разовые операции, не предусмотренные конфигурацией,  что зачастую проще и эффективнее, чем внесение изменений в конфигурацию.
Таким образом определяющими факторами для выбора  используемых  компонент 1С:Предприятия для автоматизации учета в конкретной организации является состав задач, круг пользователей, и режим отражения в учете хозяйственных операций. Если систему предполагается использовать только в бухгалтерии для занесения данных о хозяйственных  операциях  и  получения  внутренней  и внешней отчетности,  то достаточно применения компоненты Бухгалтерский учет.  Если  предполагается автоматизировать исключительно управленческий  учет (работу менеджеров по управлению закупками,  продажами,  складскими запасами, взаиморасчетами), то  целесообразно  использовать только компоненту Оперативный учет. Если предполагается автоматизировать оба этих направления во  взаимосвязи,  то  следует  задействовать и ту и другую компоненту в единой конфигурации.
Проведение документов При проектировании конфигурации 1С:Предприятия весьма важным моментом для понимания является процесс проведения документа.
Фактически документ в системе 1С:Предприятие являются объектом отражающим в информационной базе  некоторое событие произошедшее в хозяйственной жизни предприятия (оприходование товара, получение денег от покупателя, оформление отпуска сотруднику, переоценка валютных остатков и т.д.). Структура данных документа должна отражать различные характеристики конкретного  события. Документы, как объекты прикладной задачи, тесно связаны с различными учетными механизмами 1С:Предприятия. Причем эта связь проявляется именно в процессе проведения документа. Некоторые документы вообще могут не использовать механизм проведения. В этом случае они используются просто как средство регистрации события и печати формы первичного документа. Для таких документов, рекомендуется отключить признак проведения в свойствах документа в метаданных. Однако для большинства видов документов выполняется проведение для того, чтобы отразить событие в различных учетных механизмах 1С:Предприятия.
При проведении документа сама система только помечает его как проведенный. Собственно все действия документа при проведении описываются в конфигурации в модуле документа в процедуре ОбработкаПроведения на встроенном языке. В принципе в этой процедуре можно описать практически любые изменения в информационной базе. Однако механизм проведения документов предназначен для выполнения вполне определенных действий:
- Запись значений периодических реквизитов справочников, для которых установлена возможность изменения документами;
- Запись движений регистров оперативного учета;
- Запись данных в журнал расчетов;
- Запись бухгалтерских операций и проводок.
Заметим, что все перечисленные действия должны выполняться специальными средствами, ориентированными именно на использование  в процессе проведения документа. Например, запись значения периодического реквизита справочника должна выполняться методом  УстановитьРеквизитСправочника, а не методами объекта Периодический.
Важно понимать, что одной из главных особенностей механизма проведения документа является фиксация всех перечисленных действий и возможность их автоматического аннулирования при отмене проведения документа, при его перепроведении и при удалении документа.
То есть все перечисленные действия записываются в информационную базу с привязкой к документу. Это позволяет не только посмотреть, какой документ выполнил конкретные действия, но и произвести их аннулирование и повторное воспроизведение. Например, если документ при проведении записал бухгалтерскую операцию с проводками то при его перепроведении ранее сформированные проводки автоматически удаляются и вычитаются из бухгалтерских итогов а новые записываются и вновь отражаются в итогах. То есть это позволяет автоматически изменять влияние события отражаемого документом на различные механизмы 1С:Предприятия.
Для механизмов бухгалтерского и оперативного учета действия, выполняемые при проведении документа, не только привязываются к документу, но и используют документ в качестве момента выполнения действий. То есть и для регистров и для бухгалтерских итогов порядок следования документов определяет порядок отражения движений и проводок в учете. Соответственно итоги и оперативного и бухгалтерского учета могут быть получены на момент конкретного документа.
Рекомендуется в алгоритме проведения документа не выполнять иных изменений в информационной базе кроме тех, которые приведены выше. Это объясняется тем, что все остальные действия, выполненные в процессе проведения, не будут привязаны к документу, то есть не будут автоматически аннулироваться при отмене проведения документа или его перепроведении.
Модуль документа может содержать две предопределенные процедуры ОбработкаПроведения и ОбработкаУдаленияПроведения. В отличии от всех других предопределенных процедур 1С:Предприятия, которые в основном предназначены для специфической обработки интерактивных действий пользователя, эти две процедуры вызываются всегда при выполнении проведения и отмене проведения документа, вне зависимости от того, происходит это интерактивно или из встроенного языка.
Эти процедуры вызываются в автоматически открываемой системой транзакции вместе с собственно проведением и отменой проведения, что позволяет однозначно логически увязать действия, выполняемые в данных процедурах, с самим фактом пометки документа как проведенного и снятия этой пометки.
Следует учитывать, что если в ходе выполнения этих процедур выполняется изменение значений реквизитов документа, то по окончанию выполнения процедуры эти изменения будут записаны. Причем запись будет выполняться в той же транзакции.
Процедура ОбработкаУдаленияПроведения выполняется и в случаях удаления и  пометки на удаление документа, то есть при любых случаях, когда отменяются выполненные документом при проведении действия, кроме случая перепроведения документа, так как при проведении выполняется процедура ОбработкаПроведения.
Наличие предопределенной процедуры ОбработкаУдаленияПроведения, позволяет в отдельных случаях организовать автоматическое аннулирование некоторых дополнительных изменений в информационной базе, которые выполняются в процессе проведения. Однако организация такого алгоритма требует особой аккуратности  и хорошего понимания выполняемых действий. В общем случае, рекомендуется выполнять при проведении документа только перечисленные выше изменения в информационной базе, которые система сможет автоматически контролировать при любых действиях с документом. При использовании в процедуре проведения только  специализированных средств изменения информационной базы написания предопределенной процедуры ОбработкаУдаленияПроведения не потребуется. В то же время, она может быть создана для контроля правомерности отмены проведения документа.
Таким образом, действия, которые должны быть логически жестко увязаны с проведением документа или отменой проведения нужно размещать именно в процедурах ОбработкаПроведения и ОбработкаУдаленияПроведения модуля документа, а не в предопределенных процедурах, обрабатывающих, например, интерактивные действия пользователя в журналах документов.
В версии 7.7 введена дополнительная возможность управления процессом проведения. В метаданных свойствах документа может быть отключен автоматический режим удаления движений в процессе проведения и отмены проведения. Отключение режима автоматического удаления движений рекомендуется выполнять в специальных случаях, так как очевидно, что это потребует более сложного написания модулей. Следует заметить, что отключение автоматического режима удаления не нарушает основной концепции проведения документов. Главным отличием этого варианта является то, что появляется возможность в процессе проведения уже проведенного документа записывать движения не с чистого листа, а дописывать к созданным при прошлом проведении. А само удаление движений может быть выполнено в процессе перепроведения вызовом специального метода. При отмене проведения, разумеется, движения документа удаляются в любом случае. Разница заключается лишь в том, что при, выключенном  режиме автоматического удаления движений, движения реально удаляются системой не до выполнения предопределенной процедуры ОбработкаУдаленияПроведения, а после.
Особенности проведения документов оперативного учета Проведение документов, относящихся к оперативному учету, имеет ряд особенностей, которые необходимо учитывать, как при создании конфигурации, так и при администрировании работы пользователей. Идеология механизмов компоненты Оперативный учет предполагает преимущественно последовательный ввод и проведение документов. Проведение документов задним числом должно осуществляться как исключение и обрабатывается системой отдельно.
Рекомендуется изменение и проведение документов задним числом рассматривать в качестве исправления ошибочно введенных или не введенных данных в информационной базе.  То есть изменение и проведение документа задним числом должно производиться с целью приведения информационной базы в соответствие с реально произошедшими событиями, а не внесения произошедших позднее событий в качестве изменений в более ранние документы. Например, если выяснилось, что вчера на складе был оприходован товар, но не была введена соответствующая приходная накладная, то такой документ следует ввести задним числом, так как реально событие уже произошло. Аналогично можно исправить неверно заполненную приходную накладную, если оказалось, что на самом деле товаров было оприходовано больше, чем введено в документе . Если же сегодня осуществляется возврат товара от покупателя, проданного вчера по расходной накладной, то неверным будет исправление введенной расходной накладной (уменьшение количества отпущенного товара с учетом возврата). Заметим, что при этом остаток товаров на складе на утро текущего дня будет неверным. Правильно будет ввести текущей датой  документ, отражающий возврат товара покупателем. В этом случае порядок следования  и содержание документов в информационной базе будет соответствовать последовательности и содержанию событий хозяйственной жизни предприятия и это позволит реально восстановить картину учета на любой момент времени.
Так как запись и проведение документов может выполняться раздельно, в системе предусмотрен механизм обеспечивающий расположение документов не в порядке их записи, а в порядке проведения. Это позволяет обеспечить проведение всех документов в реальном времени, то есть с обращением в процессе проведения к текущим остаткам регистров. Ключевым моментом в этом механизме является точка актуальности (ТА), отражающая обычно позицию последнего проведенного документа, то есть последнее событие в хозяйственной жизни предприятие, зафиксированное в информационной базе.
Соответственно регистры оперативного учета отражают наличие различных средств на этот момент, или точнее по этот момент, так как движения документа стоящего на ТА включается в текущие остатки регистров.
В процессе проведения документа пользователем из формы документа система распознавая возможность появления конфликтных ситуаций, выдает пользователю сообщения-запросы, чтобы корректно разрешить возможный конфликт. Таких ситуаций может быть три:
  • дата проводимого документа меньше даты ТА (документ проводится задним числом);
  • после нового документа существуют проведенные документы (документ проводится той же датой, что и дата ТА, но время нового документа меньше времени ТА);
  • существуют  более ранние проведенные документы (новый документ проводится за ТА, но между новым документом и ТА уже есть ранее проведенные документы).
Рассмотрим подробнее эти ситуации. На приведенных ниже схемах обозначена ось времени с отметками моментов перехода на новую дату, времени Точки
Актуализации (ТА), времени ввода нового документа ( Новый документ ).
Значком Принципы организации бухгалтерских операций и проводок При освоении средств конфигурирования 1С:Предприятия одним из частых вопросов, которые требуют дополнительного разъяснения является вопрос об общих принципах организации в системе бухгалтерских операций и проводок. Часто этот вопрос возникает у тех специалистов, которые знакомы с принципами организации  регистров оперативного учета. Действительно, проводки бухгалтерского учета имеют много общего с движениями регистров. Однако, движения регистров подчиняются непосредственно документу, а для проводок существует понятие Операция, объединяющая проводки сформированные одним документом. Наличие понятия операции объясняется несколькими причинами, связанными с назначением и практикой использования компоненты Бухгалтерский учет.
Очень важным отличием механизма бухгалтерского учета от механизма оперативного учета является то, что механизм операций и проводок наряду с автоматическим формированием проводок документами рассчитан на ведение учета вручную. Это возможно благодаря тому, что сама модель бухгалтерского учета (проводки, двойная запись, счета синтетического учета, аналитика) доступна пользователю (бухгалтеру) и программа может общаться с ним именно в тех категориях, в которых и ведется учет. Для оперативного учета это не так. Пользователь не работает напрямую с регистрами, так как механизм оперативного учета не является общечеловеческим понятием, а разработан как специализированное средство 1С:Предприятия. Наличие  в метаданных понятия Операция позволяет обеспечить, для ведения ручного учета возможность удобного ввода проводок в специализированной форме, которая также как и большинство форм в 1С:Предприятии может быть изменена разработчиком конфигурации.
Заметим, что назначение регистров оперативного учета, может быть самое различное. Каждый регистр представляет собой фактически независимую учетную систему. Иногда один или два регистра  могут быть логически связаны, но в то же время могут использоваться регистры, которые предназначены для отражения некоторого факта хозяйственной жизни в совершенно разных учетных задачах поддерживаемых конфигурацией. Проводки бухгалтерского учета, как правило, относятся к одному плану счетов и являются отражением хозяйственной операции в одной учетной системе описываемой планом счетов.  Таким образом, проводки сформированные документом или введенные вручную в одной операции представляют собой обычно нечто большее, чем просто набор отдельных движений. Понятие Операция позволяет объединить все проводки формируемые документом или вводимые вручную. В отличии от движений регистров, которые с помощью соответствующего объекта встроенного языка могут только записываться и считываться по одному движению, все проводки операции считываются при обращении к операции. Затем с ними могут выполняться различные действия, например, можно изменять, добавлять и удалять проводки. Измененная операция записывается целиком.
Пожалуй, одной из самых важных задач операции является возможность вводить для операции реквизиты. Для оперативного учета практически не имели бы смысла, какие либо данные, которые относились бы ко всем документам, записывающим движения регистров. Однако для бухгалтерского учета эта задача вполне актуальна. С точки зрения бухгалтера, все операции (и введенные вручную и сформированные документами) являются равноценными записями, отражающими хозяйственную операцию в бухгалтерском учете. И у этой записи должны быть некоторые данные, характеризующие ее в целом. Наиболее яркими примерами таких данных являются штатные реквизиты операции (Содержание и Сумма операции). Когда бухгалтер работает с отчетами или журналами ему необходима информация, которая не связана с тем, как записана операция (сформирована одним из документов или введена вручную). Введение таких общих данных свойственных бухгалтерским операциям во все документы было бы весьма расточительным, так как во многих конфигурациях далеко не все документы  записывают проводки.
Другой задачей решаемой операциями является отражение всех документов, относящихся к бухгалтерскому учету в журнале операций. Эта задача тесно связана с предыдущей. Она так же помогает представить бухгалтеру все документы с точки зрения их отношения к бухгалтерскому учету. В журнал операций могут не включаться документы, не имеющие отношения к бухгалтерскому учету. При этом в журнале операций обычно не отражается специфическая информация документов, а отражается только та информация, которая единообразно представляет все документы в механизме бухгалтерского учета. Наличие в метаданных объекта Операция позволяет определить в конфигурации не только состав данных свойственных всем операциями, но и способ представления операций в журнале.
Запросы Терминология и обозначения - Запрос - объект метаданных типа Запрос;
- Текст запроса - текстовое описание запроса к ИБ на специализированном языке запросов;
- Выборка - набор данных, полученных в результате выполнения запроса;
- Группировка данных - накопление различных значений одного и того же типа данных.
- Отчёт - совокупность текста запроса, процедуры его выполнения и интерпретации выбранных данных.
Введение С чего начать Начнем с начала Для начала, прежде чем проектировать запрос, необходимо задаться вопросом: Что же я хочу в результате получить?. Да, да, именно так все и начинается, с тривиальной постановки задачи.
Постановка задачи Предположим, я хочу получить Данные об оборотах и остатках товаров на складах за какой-то период времени в виде вот такой таблицы:
Что происходит внутри Как текст запроса превращается в выборку? После того, как создан агрегатный объект типа Запрос:
Запрос = СоздатьОбъект(Запрос);
сформулирован текст запроса и присвоен переменной ТекстЗапроса , запрос запускается на выполнение:
Запрос.Выполнить(ТекстЗапроса);
Что же происходит внутри этого метода? Как же там всё устроено?
Попадая в метод Выполнить , текст запроса превращается в выборку путём следующих метаморфоз:
- проверка синтаксиса;
- создание таблицы выборки;
- накопление данных.
Проверка синтаксиса Правильность написания текста Сначала проверяется правильность написания самого текста запросов - синтаксическая проверка запроса. Может быть пропущен символ ;, может быть неверно указан путь переменной запроса, в любом случае ошибки должны быть обнаружены и исправлены.
Для выявления синтаксических ошибок на стадии разработки (ещё при работе в конфигураторе) воспользуйтесь пунктом меню Действия – Синтаксический контроль запросов... , выберите  запросы для проверки и нажмите кнопку OK.
Поскольку речь зашла о синтаксисе, обсудим его мало освещенные аспекты.
Объявление внутренних переменных запроса достаточно подробно описано в книге Описание встроенного языка. Часть 2. Но хотелось бы ещё раз обратить внимание на то, что описание переменной обуславливает характер обхода ИБ для формирования выборки. Мы можем описать переменную Товар различными способами:
       Товар = Справочник.Товар.ТекущийЭлемент;
 или
       Товар = Документ.РасходнаяНал.Товар;
или
       Товар = Регистр.ОстаткиТоваров.Товар;
 и во всех трех случаях запрос будет вести себя по-разному. В первом случае запрос пройдет по всем элементам справочника Товар и выдаст полный его перечень. Во втором случае запрос пройдет по документам типа РасходнаяНал и выберет только те товары, которые были проданы по этим документам. А в третьем случае запрос пройдет по движениям или по остаткам регистра (в зависимости от того, какие функции были применены в запросе) и соберет те товары, которые участвовали в этих движениях или присутствовали в остатках.
Если переменную описывают путем с более чем одной ссылкой на объект типа справочник, документ, план счетов и т.д., то говорят, что переменная описана ДЛИННЫМ ПУТЕМ, например
       Валюта = Регистр.ОстаткиТоваров.Товар.ВалютаРаботы;
       Адрес = Документ.РасходнаяНал.Клиент.Адрес;
Так же хотелось обратить внимание на следующие особенности синтаксиса. При работе с регистрами имеется возможность обращения не только к документу, вызвавшему движение регистра:
       Док = Регистр.ИмяРегистра.ТекущийДокумент;
 но и к общим реквизитам документов:
        Реквизит = Регистр.ИмяРегистра.ТекущийДокумент. ИмяРеквизита;
 и к самим полям документов. Но для этого необходимо указать, из каких типов документов необходимо выбирать значения:
        Поле = Регистр.ИмяРегистра.ТекущийДокумент. ИмяДокумента.ИмяПоля;
 При описании поля документа нельзя не указывать имени самого документа, даже если такое поле встречается в каждом документе конфигурации. Для решения этой проблемы нужно либо объявить поле общим реквизитом документов, либо перечислить в описании переменной все необходимые типы документов:
        Поле = Регистр.ИмяРегистра.ТекущийДокумент.
ИмяДокумента1.ИмяПоля,
Регистр.ИмяРегистра.ТекущийДокумент. ИмяДокументаN.ИмяПоля;
Для ИБ в формате .DBF не следует злоупотреблять длинными путями, так как это увеличивает время формирования выборки, ведь запросу приходится считывать не только реквизит указанного документа или регистра, но и по ссылке на объект считывать сам этот объект для извлечения данных. Что нельзя сказать о ИБ в формате SQL. Объект Запрос формирует запрос к SQL серверу, и чем больше работы будет переложено на плечи SQL сервера, тем быстрее будет формироваться выборка.
Оператор Период С задает временной интервал выборки данных. Параметрами этого предложения могут быть:
- Дата - в формате встроенного языка '64', '1995'.
 Внешняя переменная - глобальная переменная модуля отчёта или идентификатор элемента управления формы отчёта типа Дата или Документ . Если переменная - типа Документ , то интервал запроса устанавливается на дату и время указанного документа.
- Выражение встроенного языка. Задается в круглых или фигурных скобках и может иметь тип, как Дата, так и Документ, например:
Период с (ДатаС + 1) по (ПолучитьДокументТА());.
Оператор Условие Задаёт условие включения данных в выборку. Для оптимизации времени выполнения запроса следует знать, что в 1С:Предприятии версии 7.7 запрос сам выполняет, а не вызывает для этого исполнительную среду встроенного языка, условия вида:
        ЛеваяЧастьУсловия знакСравнения ПраваяЧастьУсловия
где,
        ЛеваяЧастьУсловия и ПраваяЧастьУсловия могут быть константой, переменной запроса или внешней переменной;
        знакСравнения - логический оператор (, , =, , =, =, в, in).
Ниже приведен пример запроса с элементарными условиями:
//{{Запрос(ЭлементарноеУсловие)
|Период с ДатаС по ДатаПо;
|Товар = Документ.ПриходнаяНал.Товар;
|Дата = Документ.ПриходнаяНал.ДатаДок;
|КолВо = Документ.ПриходнаяНал.Количество;
|Группировка Товар упорядочить по Товар.Наименование;
|Условие(Дата ИсключитьДату);
|Условие(Товар = ВыбранныйТовар);
|Условие(КолВо = 43);
|Условие((Дата ИсключитьДату) ИЛИ (КолВо = 43))
//}}
;
Следует обратить внимание на то, что отдельные условия в
запросе объединяются по И, то есть запросы
Условие(ВыходнойДень(Дата) = 0);
Условие(Товар в ВыбранныйТовар);
и
Условие((ВыходнойДень(Дата) = 0) И (Товар в ВыбранныйТовар)
= 1));
будут выполняться одинаково.
Если условие не подходит под определение элементарного, то оно выполняется механизмом внутреннего языка системы 1С:Предприятие.
Если существует возможность разбить сложное условие на элементарные, то так и следует поступить. Допустим, что нам необходимо применить условие вида:
//{{Запрос(ПреобразованиеУсловия_Было)
|//...
|Условие(Флаг = Перечисление.Булево.Да);
|//...
//}}
;
, то для оптимизации времени исполнения запроса следует, объявить глобальную переменную:
Перем True;
а в конце модуля определить её как
True = Перечисление.Булево.Да;
и применить эту переменную для формирования элементарного условия:
//{{Запрос(ПреобразованиеУсловия_Стало)
|//...
|Условие(Флаг = True);
|//...
//}}
;
Следует обратить особое внимание на то, что оператор принадлежности (в/in), не поддерживается внутренним языком 1С:Предприятия, поэтому оператор принадлежности должен использоваться только в элементарных условиях вычисляемых самим Запросом. И поэтому следующий пример будет выдавать ошибки при выполнении запроса:
//{{ЗАПРОС(ОшибкаОператораПринадлежности)
|//...
|Условие(Товар.Код в ВыбТовар.Код);
|//...
//}}
;
Оператор Группировка в 1С:Предприятии версии 7.5 обогатился следующими реквизитами Все  и Все ВошедшиеВЗапрос . Эти реквизиты созданы для того, чтобы давать возможность создавать табличные отчёты, разворачиваемые по горизонтали и вертикали. Для иллюстрации вышесказанного, обратимся к классике - отчёту Остатки товаров на складах.
Далее приведен текст процедуры программного модуля, реализующего формирование отчёта:
//*******************************************
// Процедура формирования отчета//
Процедура ПоСкладам()
  Перем Запрос, ТекстЗапроса, Таблица;
  //Создание объекта типа Запрос
  Запрос = СоздатьОбъект(Запрос);
  ТекстЗапроса =
  //{{ЗАПРОС(ПоСкладам)
  |Скл   = Регистр.ОстаткиТоваров.Склад;
  |Товар = Регистр.ОстаткиТоваров.Товар;
  |КолВо = Регистр.ОстаткиТоваров.ОстатокТовара;
  |Группировка Товар Упорядочить По Товар.Код;
  |Группировка Скл Упорядочить По Скл.Код Все;
  |Функция КО = КонОст(КолВо);
  |//}}ЗАПРОС
  ;
  // Если ошибка в запросе, то выход из процедуры
  Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
    Возврат;
  КонецЕсли;
  // Подготовка к заполнению отчета данными запроса
  Таблица=СоздатьОбъект(Таблица);
  Таблица.ИсходнаяТаблица(ПоСкладам);
  Таблица.ВывестиСекцию(Заголовок);
  // Формирование шапки отчета
  Таблица.ВывестиСекцию(Шапка|Боковик);
  Счётчик = 0;
  Пока Запрос.Группировка(Товар) = 1 Цикл
    Пока Запрос.Группировка(Скл) = 1 Цикл
      Таблица.ПрисоединитьСекцию(Шапка|Склад);
      Счётчик = Счётчик + 1;
    КонецЦикла;
    Если Счётчик0 Тогда
        прервать;
    КонецЕсли;
  КонецЦикла;
  Запрос.ВНачалоВыборки();
  // Процесс формирования строки отчета
  Пока Запрос.Группировка(Товар) = 1 Цикл
    Если Запрос.ЭтоГруппа(1) = 1 Тогда
      Таблица.ВывестиСекцию(Группа|Боковик);
      Для i = 1 по Счётчик Цикл
        КоличествоДляТаблицы = 0;
        Таблица.ПрисоединитьСекцию(Группа|Склад);
      КонецЦикла;
    Иначе
      Таблица.ВывестиСекцию(Товар|Боковик);
      Пока Запрос.Группировка(Скл) = 1 Цикл
        КоличествоДляТаблицы = Запрос.КО;
        Таблица.ПрисоединитьСекцию(Товар|Склад);
      КонецЦикла;
    КонецЕсли;
  КонецЦикла;
  // Вывод заполненной формы отчета
  Таблица.ТолькоПросмотр(1);
  Таблица.Опции(0,0,5,0);
  Таблица.Показать(Остатки товаров на складах,);
КонецПроцедуры
Выходная таблица отчёта имеет следующий вид:
                 Остатки товаров на складах
Оператор Функция В этом разделе хочется обратить внимание на то, что значения функций, объявленных в запросе, определены, накапливаются и сворачиваются по всем уровням группировок, начиная с самой старшей группировки - Итого и кончая самой младшей. Как иллюстрацию, приведем следующий пример:
Процедура ОстаткиТоваров()
  Перем Запрос, ТекстЗапроса, Таб;
  //Создание объекта типа Запрос
  Запрос = СоздатьОбъект(Запрос);
  ТекстЗапроса =
  //{{ЗАПРОС(ОстаткиТоваров)
  |Период с ДатаС по ДатаПо;
  |Товар = Регистр.ОстаткиТоваров.Товар;
  |Склад = Регистр.ОстаткиТоваров.Склад;
  |КолВо = Регистр.ОстаткиТоваров.ОстатокТовара;
  |Группировка Товар упорядочить по
  |            Товар.Наименование;
  |Группировка Склад упорядочить по
  |            Склад.Наименование;
  |Функция Количество = КонОст(КолВо);
  |//}}ЗАПРОС
  ;
  // Если ошибка в запросе, то выход из процедуры
  Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
    Возврат;
  КонецЕсли;
  // Подготовка к заполнению выходных форм данными
  Таб = СоздатьОбъект(Таблица);
  Таб.ИсходнаяТаблица(ОстаткиТоваров);
  // Заполнение полей Заголовок
  Таб.ВывестиСекцию(Заголовок);
  Состояние(Заполнение выходной таблицы...);
  Пока Запрос.Группировка(Товар) = 1 Цикл
    // Заполнение полей Товар
    Таб.ВывестиСекцию(Товар);
    Пока Запрос.Группировка(Склад) = 1 Цикл
      // Заполнение полей Склад
      Таб.ВывестиСекцию(Склад);
    КонецЦикла;
  КонецЦикла;
  // Заполнение полей Итого
  Таб.ВывестиСекцию(Итого);
  // Вывод заполненной формы
  Таб.Опции(1, 0, 1, 0);
  Таб.Показать(ОстаткиТоваров, );
КонецПроцедуры
В результирующей таблице мы видим, что значение функции определено для Результирующей записи - Итого, для группы справочника Товары, для элемента справочника Товары, для элемента справочника Склад. То есть, значение функции определено на всех уровнях вложенности.
Структура записи таблицы выборки Структура записи таблицы выборки следующая:
- Поля группировок . Поля группировок идут последовательно в порядке их объявления в тексте запроса, и этот порядок крайне важен. Поле группировки состоит из полей упорядочивания и поля значения. По полям упорядочивания и полям значения строятся индексы, и следует иметь в виду, что максимальная длина ключа .CDX .файла равна 240 байтам. Если вы заводите большое количество группировок или большое число полей упорядочивания – достичь этой величины не составляет труда. При превышении максимально допустимого значения механизм запросов пропорционально уменьшает длину строковых полей упорядочивания, входящих в ключ. Если же длина ключа превышает 240 байт, а возможность сократить её за счёт строковых полей отсутствует, то обработка запроса прекратится с ошибкой Длина индекса превышает максимальную длину и не может быть уменьшена.
- Поля функций накопления . Это самые обыкновенные числовые поля с максимальной длиной. Эти поля не входят в индексы.
- Поля внутренних переменных запроса , по которым не велись ни группировки, ни накопление. Такие переменные нужны для выборки данных из объектов группировки, по которым не нужно вести ни группировку, ни упорядочивание, а значение необходимо.
                     Накопление данных После того, как мы узнали, что представляет собой запись таблицы выборки, мы наконец-то можем поговорить о  том, как накапливаются данные, подчёркиваю, именно,накапливаются . Как говорилось выше, обход ИБ запросом зависит от определения путей переменных. Если переменная Товар в тексте запроса определена следующим образом:
       Период с ДатаС по ДатаПо;
       Товар = Документ.РасходнаяНал.Товар,
               Документ.РасходнаяКредит.Товар;
       Склад = Документ.РасходнаяНал.Склад,
               Документ.РасходнаяКредит. Склад;
       КолВо = Документ.РасходнаяНал.Количество,
               Документ.РасходнаяКредит. Количество
       Группировка Товар;
       Группировка Склад;
       Сумма = Функция Сумма(КолВо);
то запрос сначала обойдет все документы вида РасходнаяНал за указанный период, а затем - все документы вида РасходнаяКредит . И каждый раз запрос будет формировать запись, заполняя поля группировок, функций и внутренних переменных. После формирования записи, запрос будет добавлять её в таблицу выборки. Если полученного сочетания значений группировок нет, запрос добавляет запись в таблицу выборки:
Использование граф отбора Использование граф отбора может существенно убыстрить время формирования запроса, но для того, чтобы воспользоваться графами отбора, запрос должен удовлетворять следующим требованиям:
- в запросе должна быть объявлена переменная, пути которой включены в графу отбора;
- должно быть задано элементарное условие;
- условие должно быть со знаком сравнение =.
Товар = Регистр.ИмяРегистра.Поле;
Условие(Товар = ВыбТовар);   // (+)
Условие(Товар ВыбТовар);  // (-) не знак =
Условие((Товар) = ВыбТовар); // (-) не элементарное
                             //     условие
где ВыбТовар - внешняя переменная запроса.
У объекта метаданных типа Запрос существует метод ИспользоватьГрафуОтбора , который может управлять механизмом выборки данных с использованием графы отбора.
Параметр метода ИспользоватьГрафуОтбора может принимать следующие значения:
* - автоматический выбор графы отбора. Если в тексте запроса описаны элементарные условия со знаком равно, то запрос просматривает переменную, фигурирующую в условии, и пытается найти для неё соответствующую графу отбора, и, если такая переменная найдена, то включается механизм выборки данных с использованием графы отбора. Когда в тексте запроса объявлены несколько условий, удовлетворяющих критериям включения механизма выборки данных с использованием графы отбора, перед запросом встает задача выбора одной единственной графы отбора из списка возможных. Запрос в своих оценках выбора графы отбора ориентируется на количество элементов справочников и перечислений. Для других типов оценка не производится, и, при желании, можно задать графу отбора вручную.
имя графы отбора . Графа отбора задаётся вручную. Если она задана неверно, то тогда при выполнении запроса выведется сообщение: Нет переменной, удовлетворяющей заданной графе отбора.
- отказ от использования графы отбора.
Особенности использования запросов Метод Выполнить может быть применен к объекту Запрос неограниченное количество раз. Приведем тому пример:
Процедура Сформировать()
  Перем Запрос, ТекстЗапроса, Таб;
  Запрос = СозадтьОбъект(Запрос);
  ТекстЗапроса =
  //{{ЗАПРОС(ТекстЗапроса1)
  |...
  //}}ЗАПРОС
  ;
  Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
    Возврат;
  КонецЕсли;
  // Цикл обработки запроса
  ...
  //{{ЗАПРОС(ТекстЗапроса2)
  |...
  //}}ЗАПРОС
  ;
  Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
    Возврат;
  КонецЕсли;
  // Цикл обработки запроса
КонецПроцедуры
При повторном вызове метода Выполнить , объект Запрос инициализирует внутренние структуры, и доступ к переменным, объявленным в предыдущем запросе и выбранным данным становится, не возможен.
Особенности позиционирования . После формирования выборки, запрос позиционируется на первую запись (Итого) – в начало выборки, с которой начинается обход выбранных значений. Вернуться в начало выборки, можно двумя способами. В цикле обхода пройти всю выборку до конца;
// Формирование шапки отчета
  Таблица.ВывестиСекцию(Шапка|Боковик);
  Счётчик = 0;
  Пока Запрос.Группировка(Товар) = 1 Цикл
    Если Счётчик = 0 Тогда
      Пока Запрос.Группировка(Скл) = 1 Цикл
        Таблица.ПрисоединитьСекцию(Шапка|Склад);
        Счётчик = Счётчик + 1;
      КонецЦикла;
    КонецЕсли;
  КонецЦикла;
  // Процесс формирования строки отчета
  Пока Запрос.Группировка(Товар) = 1 Цикл
    Если Запрос.ЭтоГруппа(1) = 1 Тогда
      Таблица.ВывестиСекцию(Группа|Боковик);
      Для i = 1 по Счётчик Цикл
        КоличествоДляТаблицы = 0;
        Таблица.ПрисоединитьСекцию(Группа|Склад);
      КонецЦикла;
    Иначе
      Таблица.ВывестиСекцию(Товар|Боковик);
      Пока Запрос.Группировка(Скл) = 1 Цикл
        КоличествоДляТаблицы = Запрос.КО;
        Таблица.ПрисоединитьСекцию(Товар|Склад);
      КонецЦикла;
    КонецЕсли;
  КонецЦикла;
или воспользоваться методом Запроса - ВначалоВыборки:
Таблица.ВывестиСекцию(Шапка|Боковик);
  Счётчик = 0;
  Пока Запрос.Группировка(Товар) = 1 Цикл
    Пока Запрос.Группировка(Скл) = 1 Цикл
      Таблица.ПрисоединитьСекцию(Шапка|Склад);
      Счётчик = Счётчик + 1;
    КонецЦикла;
    Если Счётчик 0 Тогда
        прервать;
    КонецЕсли;
  КонецЦикла;
  Запрос.ВНачалоВыборки();
  // Процесс формирования строки отчета
  Пока Запрос.Группировка(Товар) = 1 Цикл
    Если Запрос.ЭтоГруппа(1) = 1 Тогда
      Таблица.ВывестиСекцию(Группа|Боковик);
      Для i = 1 по Счётчик Цикл
        КоличествоДляТаблицы = 0;
        Таблица.ПрисоединитьСекцию(Группа|Склад);
      КонецЦикла;
    Иначе
      Таблица.ВывестиСекцию(Товар|Боковик);
      Пока Запрос.Группировка(Скл) = 1 Цикл
        КоличествоДляТаблицы = Запрос.КО;
        Таблица.ПрисоединитьСекцию(Товар|Склад);
      КонецЦикла;
    КонецЕсли;
  КонецЦикла;
Метод ВначалоВыборки можно вызывать на любом уровне вложенности циклов обработки выборки, для перехода в ее начало. Количество обходов выборки ничем не ограничено.
Методы оптимизации запросов Общие положения написания запросов Примером неправильной работы с данными в 1С:Предприятиии, есть и остается избыточное обращение к базе данных, вне зависимости от того, в каком формате она хранится.
Как избежать лишних обращений к ИБ, и тем самым существенно уменьшить время формирования отчета проиллюстрируем на примере Оптимизация Отчета.
Закладка 100%
       ТекстЗапроса =
       //{{ЗАПРОС(Сформировать100)
       |Период с ВыбНачПериода по ВыбКонПериода;
       |Товар = Документ.РасхНакл.Товар;
       |Количество = Документ.РасхНакл.Количество;
       |Функция КоличествоСумма = Сумма(Количество);
       |Группировка Товар;
       |Условие(Товар в ВыбТовар);
       |Условие(Товар.ВидТовара = ВыбВидТовара);
       |//}}ЗАПРОС
       ;
При написании текста запроса необходимо учитывать, что Запрос при формировании выборки сам отрабатывает только элементарные условия , не запуская при этом исполнительную среду встроенного языка, что значительно экономит время. Если есть возможность привести условие к элементарному - это необходимо сделать.
       //{{ЗАПРОС(Сформировать15)
       |Период с ВыбНачПериода по ВыбКонПериода;
       |Товар = Документ.РасхНакл.Товар;
       |ВидТовара = Документ.РасхНакл.Товар.ВидТовара;
       |Количество = Документ.РасхНакл.Количество;
       |Функция КоличествоСумма = Сумма(Количество);
       |Группировка Товар;
       |Условие(Товар в ВыбТовар);
       |Условие(ВидТовара=ВыбВидТовара);
       |//}}ЗАПРОС
       ;
Так как выборка формируется на компьютере пользователя, то все данные, которые необходимы пользователю для построения отчета, должны быть, по возможности, получены посредством запроса. В таблице выводится значение кода товара – для этого в запросе необходимо ввести переменную КодТовара . Тогда для формирования отчета, отпадет необходимость, каждый раз обращаться к ИБ. Следует не забывать про методы Запроса - ЗначениеУпорядочивания и ЭтоГруппа , которые опять же извлекают данные из выборки, минуя ИБ, что заметно уменьшает время формирования запроса.
       //{{ЗАПРОС(Сформировать3)
       |Период с ВыбНачПериода по ВыбКонПериода;
       |Товар = Документ.РасхНакл.Товар;
       |ВидТовара = Документ.РасхНакл.Товар.ВидТовара;
       |КодТовара = Документ.РасхНакл.Товар.Код;
       |Количество = Документ.РасхНакл.Количество;
       |Функция КоличествоСумма = Сумма(Количество);
       |Группировка Товар;
       |Условие(Товар в ВыбТовар);
       |Условие(ВидТовара=ВыбВидТовара);
       |//}}ЗАПРОС
       ;
В отчете Оптимизация Отчета время выполнение самой медленной версии взято за 100%, остальные версии берутся как процент от нее. Следование правилам, дало возможность уменьшить время выполнения запроса почти на 2 порядка!
Особенности использования запросов для получения информации из справочников В случае применения объекта Запрос для выборки информации из справочников 1С:Предприятия необходимо учитывать следующую особенность. При обработке справочника объект Запрос не обрабатывает группы справочника. То есть он не использует их в качестве исходных данных для получения первичной выборки. При обработке уже полученных записей запрос добавляет группы для выбранных записей - элементов, если существует группировка по переменной запроса типа Справочник. Такой способ обработки является стандартным, и Запрос выполняет ее так же, как он это делает, например, для реквизитов документа имеющих тип Справочник. То есть, если в запросе по документам использовать группировку по реквизиту Товар документа Счет, то в полученном отчете можно получить записи и по группам товаров, вошедших в запрос. Аналогично, если в запросе по справочнику получать в качестве группировки текущий элемент, то в полученный отчет будут включены записи, соответствующие группам отобранных запросом элементов. Однако так как сами группы не обрабатываются запросом при заполнении таблицы выборки, то в отчет не попадут те группы, которые не имеют элементов, или группы, элементы которых не попали в выборку. Соответственно объект Запрос не может применяться в тех случаях, когда нужно обрабатывать собственно группы, или получать все элементы, включая группы. С другой стороны, так как в большинстве случаев должны выбираться непосредственно элементы, запрос может быть успешно применен для обработки справочника. В том числе, Запрос позволяет существенно ускорить выборку элементов по условию, при работе с базой данных в формате SQL.
При обработке с помощью запроса справочников, имеющих периодические реквизиты, следует учитывать, что значения периодических реквизитов выбираются только  на конечную границу периода запроса. То есть, с помощью запроса нет возможности получить историю периодических реквизитов, а можно получить только срез значений на определенный момент.

Технологические вопросы

Примером такой ситуации может послужить обработка, выполняющая обход и обновление некоторого реквизита большого числа элементов справочника в случае, если в процессе работы будет произведена попытка обновить реквизит заблокированный другим пользователем. Неприятны также ситуации, когда конфигурации, использующие внешние по отношению к системе 1С:Предприятие программные средства через механизмы OLE Automation не могли произвести проверку наличия установленных на компьютере пользователя необходимых программных средств. Примером для такого случая может послужить поведение отчета, выводящего результаты через OLE Automation в таблицу MS Excel, в условиях, когда MS Excel на компьютере пользователя отсутствует.
С появлением системы 1С:Предприятие 7.7 положение дел изменилось. Теперь разработчики конфигураций могут предусматривать в алгоритмах модулей реакцию на все ошибочные ситуации, которые могут возникать при выполнении модулей встроенного языка. В целом средства обработки ошибочных (исключительных) ситуаций подобны аналогичным средствам предусмотренным в современных языках программирования.
Попытка
    // Некоторые действия
Исключение
    // Обработка исключительной (ошибочной) ситуации)
КонецПопытки
Суть в следующем: если при выполнении последовательности операторов // Некоторые действия происходит ошибка, то выполнение оператора прекращается и управление передается на первый оператор последовательности // Обработка исключительной (ошибочной) ситуации). После завершения выполнения данной последовательности управление получает первый оператор, следующий за КонецПопытки. В случае, если при выполнении // Некоторые действия ошибок не произошло, то управление, минуя // Обработка исключительной (ошибочной) ситуации) также попадает на первый оператор, следующий за КонецПопытки. Конструкции Попытка…Иключение…КонецПопытки могут быть вложенными, при этом для передачи управления из более внутреннего обработчика исключительной ситуации в более внешний служит оператор ВызватьИсключение. В случае, если оператор ВызватьИсключение будет выполнен в самом внешнем обработчике ошибки, то выполнение модуля будет прекращено и сообщение об ошибке будет выдано в окно сообщений, как и в случае полного отсутствия обработчиков ошибок. Для получения текста описания ошибки внутри последовательности операторов // Обработка исключительной (ошибочной) ситуации) служит встроенная функция ОписаниеОшибки(). Более подробно о механизме обработки исключительных ситуаций можно прочитать в книге 1С:Предприятие 7.7. Описание встроенного языка. Часть 1..
В методической конфигурации приводится обработка ПересчетЦен, модуль которой содержит пример обработки ошибочной ситуации. Данная обработка изменяет значение реквизита Цена для всех элементов справочника Товары путем умножения на вводимый пользователем коэффициент. Предполагается, что справочник Товары может содержать несколько тысяч элементов. При этом значения реквизита для всех элементов должны быть изменены согласованно, не прерывая работы других пользователей. Для обеспечения согласованности изменения реквизитов всех элементов справочника все изменения выполняются в рамках одной транзакции.
Если в процессе записи какого-либо элемента справочника Товары произойдет ошибка, то управление будет передано в блок обработки исключительных ситуаций. Пользователю будет выдано сообщение об ошибке и запрос на повторение попытки записи элемента справочника. Если пользователь, выберет вариант Да, то попытка записи будет повторена, а если нет, то все сделанные изменения в справочнике будут отменены и выполнение процедуры будет прекращено.
Блокировка объектов базы данных В данном разделе рассматриваются различные стратегии и логика механизмов блокировок базы данных системы 1С:Предприятие 7.7, используемых для обеспечения многопользовательского режима работы. Как известно, все варианты системы 1С:Предприятие 7.7 способны работать с базами данных в формате .DBF/.CDX. Кроме того, имеются варианты поставки - 1С:Предприятие 7.7 для SQL, способные работать с базами данных, размещаемыми в среде серверов баз данных Microsoft SQL Server 6.5/7.0. Естественно, что для этих двух форматов баз данных используются совершенно разные механизмы доступа к данным. Но при этом логика работы с базой данных в общем остается неизменной. Соответственно, все, о чем будет рассказано в данном разделе является справедливым для обоих возможных форматов построения баз данных системы 1С:Предприятие 7.7.
Блокировки, осуществляемые в базе данных системы 1С:Предприятие 7.7 можно разделить на две группы:
  • Табличные (транзакционные) блокировки
  • Блокировки отдельных объектов базы данных
Табличные (транзакционные) блокировки , как следует из названия выполняются на уровне таблиц и служат для обеспечения взаимодействия транзакций, выполняемых несколькими экземплярами системы 1С:Предприятие в одной информационной базе. Блокировки данного вида автоматически устанавливаются и снимаются программами системы 1С:Предприятие в процессе отработки транзакций и предназначены для обеспечения неизменности считанных данных в процессе выполнения транзакции. Имеются два уровня табличных блокировок на чтение и на запись. Различаются эти два уровня тем, что на чтение одна и та же таблица может быть заблокирована более чем одним экземпляром системы 1С:Предприятие, в то время как блокировка на запись является исключительной, то есть на запись таблица может быть заблокирована только одним экземпляром системы.
Работают табличные блокировки следующим образом. Если в процессе выполнения транзакции производится чтение из какой-либо таблицы базы данных, то предпринимается попытка заблокировать данную таблицу на чтение (если она не была заблокирована ранее на чтение или на запись). Если попытка завершается успешно, то чтение завершается успешно и выполнение транзакции продолжается. При этом блокировка с таблицы не снимается до завершения выполнения транзакции. Другие же экземплярами системы 1С:Предприятие лишаются возможности выполнять операции записи в эту таблицу, так как это нарушит принцип неизменности данных, считанных в процессе выполнения транзакции.
Аналогично, если в процессе выполнения транзакции выполняется операция записи, то предпринимается попытка заблокировать таблицу, в которую выполняется запись (если, конечно, блокировка не была установлена ранее) . Если установка блокировки завершается успешно, то операция записи также успешно завершается и таблица остается заблокированной до завершения выполнения транзакции. При этом транзакции, выполняемые другими экземплярами системы 1С:Предприятие лишаются возможности производить чтение из заблокированной на запись таблицы, так как для них не может быть гарантирована неизменность считанных ими данных.
Установка табличных блокировок выполняются с таймаутом. Это означает, что в случае неудачной попытки установить блокировку таблицы сразу, попытки будут повторяться в течение некоторого интервала времени. Этот интервал может устанавливаться пользователем с помощью параметра Время ожидания захвата таблиц Базы Данных, который доступен через диалог установки параметров системы 1С:Предприятие (пункт меню Сервис/Параметры, страница диалога Общие).
Блокировки отдельных объектов базы данных предназначены для обеспечения корректного взаимодействия между несколькими экземплярами системы 1С:Предприятие при изменении таких объектов как константа, элемент справочника, документ, счет бухгалтерского учета и т. п. Блокировки отдельных объектов бывают двух видов:
  • Пессимистические
  • Оптимистические
Пессимистические блокировки предназначены для обеспечения исключительного доступа для изменения к объектам базы данных системы 1С:Предприятие. Данный вид блокировок хорошо знаком пользователям системы 1С:Предприятие. В частности пессимистическая блокировка автоматически устанавливается системой 1С:Предприятие при начале редактирования в форме или списке констант, элементов справочников, документов и т. п. Установка пессимистической блокировки не позволяет никому (кроме того, кто заблокировал объект) модифицировать заблокированный объект. Только одна пессимистическая блокировка может быть установлена для одного объекта базы данных. Это означает, что если тот или иной объект открыт для редактирования одним экземпляром системы 1С:Предприятие, то не только другой экземпляр системы 1С:Предприятия не сможет открыть для редактирования или изменить этот объект, но и никакой модуль встроенного языка в рамках того же экземпляра не сможет его модифицировать.
В более ранних чем 7.7 версиях системы 1С:Предприятие механизм пессимистических блокировок использовался только при редактировании тех или иных объектов базы данных и никак не мог быть задействован из встроенного языка. В версии 7.7 введена возможность явной блокировки объектов из встроенного языка. Данная возможность доступна только для объектов, создаваемых посредством обращения к функции СоздатьОбъект . Соответственно, таким способом могут быть заблокированы такие объекты базы данных как элементы справочника, счета бухгалтерского учета и документы. Блокировка отдельных объектов осуществляется с помощью обращения к методу Блокировка(ВклВыкл). Необязательный параметр ВклВыкл обозначает действие, которое надо выполнить: 1 -  заблокировать объект базы данных, 0 -  разблокировать. Метод возвращает значение, показывающее результат выполнения операции: 1 -  операция выполнена
успешно, 0 -  операция не выполнена. Если параметр при обращении к методу не задан, то возвращается текущий статус блокировки объекта базы данных: 1 - заблокирован, 0 -  свободен. Следует понимать, что имеется в виду статус блокировки, установленной этим же объектом типа справочник, документ или счет, а не каким-либо другим объектом или другим экземпляром системы 1С:Предприятие. Примером использования метода Блокировка может послужить следующий фрагмент модуля:
Спр = СоздатьОбъект(Справочник.Товары);
Спр.ВыбратьЭлементы();
Пока Спр.ПолучитьЭлемент() = 1 Цикл
      Пока Спр. Спр.Блокировка(1) = 0 Цикл
            Если Вопрос(Элемент справочника заблокирован! Повторить попытку?,
                  Да+Нет) = Нет Тогда
                  Возврат;
            КонецЕсли;
      КонецЦикла;
      // Модифицируем реквизиты элемента справочника
      Спр.Записать();  // Записываем измененный элемент справочника
КонецЦикла;
Следует обратить внимание, что после записи модифицированного элемента справочника не производится снятия блокировки в явном виде. В этом нет необходимости, так как блокировка автоматически снимается при переходе к следующему элементу с помощью метода ПолучитьЭлемент().
Механизм оптимистических блокировок предназначен для обеспечения непротиворечивости модификации объектов базы данных. Работают оптимистические блокировки полностью автоматически. Отличие оптимистических блокировок от пессимистических можно пояснить на примере. Предположим имеется задача модификации справочника Товары (например, пересчет цен). Для выполнения этой задачи может использоваться одна из двух имеющихся специальных обработок. Каждая из них последовательно обходит элементы справочника и модифицирует их. Однако первая, подобно тому, как это было показано в приведенном выше примере перед модификацией блокирует элемент справочника, а вторая такой блокировки не производит.
Теперь представим себе, что модификация справочника Товары производится одновременно двумя экземплярами системы 1С:Предприятие. При этом Экземпляр 1 пользуется первым вариантом обработки, а Экземпляр 2 -  вторым. При их взаимодействии может наблюдаться следующий результат, если оба экземпляра встретятся на модификации одного и того же элемента справочника:
Действия Экземпляра 1 Действия Экземпляра 2 Результат
ПолучитьЭлемент()  ОК 
ПолучитьЭлемент()  ОК 
Блокировка(1) 
Записать()       Ошибка!
Записать()     ОК 
Из приведенной таблицы видно, что Экземпляр 2 не смог произвести запись элемента справочника, заблокированного Экземпляром 1. Сработал механизм пессимистической блокировки. Аналогично, если бы оба экземпляра системы 1С:Предприятие пользовались первым вариантом обработки, то Экземпляр 2 не смог бы заблокировать элемент справочника.
А теперь представим, что оба экземпляра системы 1С:Предприятие пользуются вторым вариантом обработки. Тогда встреча на одном и том же элементе справочника может пройти следующим образом:
Действия Экземпляра 1 Действия Экземпляра 2 Результат
ПолучитьЭлемент()  ОК 
ПолучитьЭлемент()  ОК 
Записать()       Ошибка!
Записать()     ОК 
Ошибка, которая происходит при записи элемента справочника Экземпляром 2 и является следствием работы механизма оптимистических блокировок. Как было упомянуто выше, задачей механизма оптимистических блокировок является обеспечение непротиворечивости модификации объектов базы данных. В данном же случае имеет место следующее. Экземпляр 2 считал элемент справочника и приступил к его модификации. В это время Экземпляр 1 успел считать, модифицировать и записать этот же элемент справочника. Когда Экземпляр 2 приступил к выполнению операции записи, значения реквизитов элемента справочника уже отличались от тех, которые были считаны перед модификацией. И в данной ситуации запись элемента справочника может привести к некорректным результатам, так как в общем случае, модификация реквизитов может производиться исходя из их предшествующего состояния, которое оказалось изменившимся.
Таким образом, можно сформулировать различия в логике функционирования двух рассматриваемых механизмов блокировок. Логика механизма оптимистических блокировок исходит из предположения (оптимистического), что в промежутке между считыванием и записью измененного состояния объекта вероятность того, что этот же объект будет изменен кем-то другим невелика. Логика же механизма пессимистических блокировок в соответствии с их названием исходит из того, что случиться может всякое и лучше, если объект будет гарантированно защищен от посторонних изменений.
Вычисление логических выражений в операторах встроенного языка В условных операторах и операторах цикла встроенного языка системы 1С:Предприятие для определения последовательности выполняемых действий используются логические выражения. Логическим выражением может быть элементарное логическое выражение (сравнение двух значений) или более сложные конструкции полученные из элементарных логических выражений при помощи логических операций И/ИЛИ/НЕ.
  Логические выражения могут быть весьма сложными и изощренными. И здесь у разработчика конфигурации может возникнуть сложности, связанные с неправильным пониманием правил вычисления логических выражений. Рассмотрим пример.
  Предположим, имеется процедура, предназначенная для обработки некоторого реквизита справочника или документа. Тип данного реквизита не определен, а процедура может вызываться для любого значения реквизита вне зависимости от его типа. Процедура может иметь вид:
Процедура Обработать(Об)
    Если (ТипЗначенияСтр(Об) = Справочник) И (Об.Вид() = Товары) Тогда
        // Некоторые действия
    КонецЕсли;
    ...
КонецПроцедуры
Если в качестве значения параметра, передаваемого в данную процедуру, будет фигурировать элемент справочника любого вида, то процедура будет работать нормально, но если в качестве параметра будет передано значение типа Число или Дата, то выполнение процедуры будет аварийно завершено. В логическом выражении, используемом в операторе 'Если' только составляющая ТипЗначенияСтр(Об) = Справочник будет корректно функционировать независимо от типа передаваемого параметра, а составляющая Об.Вид() = Товары сможет нормально работать только в том случае, если в качестве параметра в процедуру передано значение агрегатного типа и для данного агрегатного типа определен метод Вид(). Дело в том, что при вычислении логических выражений встроенный язык системы 1С:Предприятие 7.х сначала вычисляет элементарные логические выражения (операции сравнения), а затем производит вычисление логического выражения в целом (операции И/ИЛИ/НЕ).
  Таким образом, данная процедура не сможет корректно работать с параметром заранее не определенного типа и может при выполнении вызвать ошибку, что неприемлемо. Очевидно, что для правильного функционирования процедуры при ее разработке следовало учесть порядок вычисления логических выражений, принятый во встроенном языке системы 1С:Предприятие 7.х. То есть, чтобы работоспособность процедуры сохранялась при любом значении параметра, процедура должна выглядеть как:
Процедура Обработать(Об)
    Если ТипЗначенияСтр(Об) = Справочник Тогда
        Если Об.Вид() = Товары Тогда
            // Некоторые действия
        КонецЕсли
    КонецЕсли
    ...
КонецПроцедуры
В данном случае порядок вычисления логических выражений в операторах Если выражен в явном виде и выражение Об.Вид() = Товары будет вычисляться только в том случае если условие ТипЗначенияСтр(Об) = Справочник окажется истинным и ошибки при выполнении процедуры не произойдет при любом значении параметра.
Заметим, что приведенный выше порядок вычислений не распространяется на вычисление выражений определяющих результат оператора ?. Само условие оператора ? вычисляется по общим правилам логических выражений описанным выше, но из двух выражений определяющих результат оператора ? выполняется только одно (в зависимости от результата логического выражения). То есть, в одном из выражений определяющих результат оператора ?  (не вычисляемом) ошибок времени выполнения не будет возникать вне зависимости от используемых в нем конструкций.
Особенности применения предопределенных процедур встроенного языка Во встроенном языке системы 1С:Предприятие 7.x предусмотрен ряд системных предопределенных процедур При..., таких как ПриЗаписи, ПриУдаленииДокумента, ПриУдаленииЭлемента, ПриЗаписиКонстанты, ПриОтменеПроведенияДокумента и т. п., определяемых в различных модулях конфигурации и вызываемых системой при выполнении соответствующих действий. Назначение указанных процедур состоит в том, чтобы специалист по конфигурированию мог предусмотреть необходимые проверки при интерактивном выполнении соответствующих операций, и, в случае необходимости, имел возможность запретить их выполнение.
При этом следует учитывать следующие особенности данных процедур:
1. Указанные предопределенные процедуры не связаны непосредственно с действиями, при выполнении которых они вызываются, а сам вызов производится только при интерактивном выполнении указанных действий. Например, процедура ПриУдаленииДокумента будет вызвана в том случае, когда удаление документа будет инициировано нажатием кнопки в форме журнала. В то же время вызов этой предопределенной процедуры не будет производиться, если удаление документа производится из какого-либо модуля встроенного языка (например, из некоторой обработки).
2. Вызовы указанных предопределенных процедур не объединены с выполняемым действием единой транзакцией. Это означает, что в случае интерактивного удаления документа, само удаление документа выполняется в транзакции, отдельной от действий, которые могут выполняться в процедуре ПриУдаленииДокумента. И если в процедуре ПриУдаленииДокумента действия будут выполняться в раках одной, явно определенной в процедуре транзакции, то все равно приходится говорить о двух транзакциях:
  - удаление документа;
  - действия, выполняемые в процедуре ПриУдаленииДокумента
Примером неправильного применения таких предопределенных процедур является использование предопределенных процедур группы При... для выполнения действий критичных с точки зрения поддержки целостности данных. Например, при записи документа создается, записывается и проводится ряд связанных с ним документов (процедура ПриЗаписи модуля формы документа). И эти же связанные документы удаляются при удалении ведущего документа (процедура ПриУдаленииДокумента глобального модуля).
Такую технику вряд ли следует признать правильной, в силу приведенных выше особенностей предопределенных процедур. Так как предопределенные процедуры не связаны жестко с выполняемыми действиями, то вполне вероятно, что при очередном изменении конфигурации удаление документа станет выполняться не из формы журнала, а из специально созданной обработки, что приведет к тому, что процедура ПриУдаленииДокумента в данном случае вызываться не будет и, соответственно, не будут произведены необходимые для этого случая действия. Но если возникновение ситуаций такого рода еще можно как-топредотвратить путем более тщательной проработки конфигурации, то объединить действия, выполняемые в рамках процедуры ПриУдаленииДокумента и собственно удаление документа в одну транзакцию не возможно. При этом разнесение единого по логике действия в разные транзакции может быть весьма опасно с точки зрения поддержания логической целостности данных, так как ситуация, когда одно действие выполняется, а другое по каким-либо причинам - нет, вполне вероятна, особенно в многопользовательских системах.
Заметим, что описанные выше особенности предопределенных процедур не распространяются на предопределенные процедуры ОбработкаПроведения и ОбработкаУдаленияПроведения. Эти предопределенные процедуры вызываются непосредственно в транзакции проведения (отмены проведения) и выполняемые в них алгоритмы логически связанны с самим выполняемым действием. Кроме того, в отличие от других предопределенных процедур эти предопределенные процедуры выполняются и в случае проведения (отмены проведения) средствами встроенного языка.
Сохранение (восстановление) значений в строку          В 1С:Предприятии существует несколько способов, позволяющих преобразовать значение к строковому виду и восстановить его обратно из строки.
         Заметим, что в данном случае речь идет не о преобразовании к строке значения вызовом функции Строка или аналогичном автоматическом преобразовании в выражении строкового типа. Такое преобразование используется лишь для получения визуального представления значения и кроме типов число, строка, дата, не имеет возможности обратного преобразования.
          В данном разделе описываются способы, которые ориентированы на преобразование значения в строку с целью его обратного преобразования к исходному типу. Эти возможности используются обычно для решения специальных задач, связанных с хранением значений вне информационной базы или передачи данных в другую информационную базу или программу.
          Следует учитывать, что применение таких преобразований требует хорошего понимания данного механизма и системы 1С:Предприятия в целом.
Какие значения преобразуются в строку.
         К строковому виду могут быть преобразованы значения любых типов, которые могут храниться в информационной базе, то есть тех типов, которые доступны, например, при создании реквизита документа. Это, прежде всего, базовые типы (число, строка, дата), а также типы определяемые метаданными (перечисление, счет, справочник, документ и т.д.).
Кроме того, к строке могут быть преобразованы значения типа СписокЗначений и ТаблицаЗначений, которые фактически представляют собой набор отдельных значений.
         Значения других типов используемых во встроенном языке 1С:Предприятия, но не хранящиеся в информационной базе (например, Таблица или Запрос) не могут быть преобразованы к строке.
         При сохранении в строку значений типа СписокЗначений и ТаблицаЗначений допускается вложенное преобразование значений. То есть при преобразовании списка значений  будет преобразовываться в строку все значения входящие в список, включая списки значений и таблицы значений. Разумеется, не будут преобразовываться в строку входящие в список значения, которые сами не могут быть преобразованы к строке.
         Также следует иметь в виду, что преобразуются к строке отдельные значения, а не объекты данных. То есть, можно преобразовать к строке значение реквизита элемента справочника, но нельзя преобразовать к строке весь элемент справочника целиком. Для сохранения в строке элемента справочника, необходимо сохранять отдельно все его реквизиты.
Способы преобразования к строке.
      Значения могут преобразовываться к строке в двух разных форматах - внутреннем и внешнем. Использование этих форматов существенно отличается по своему назначению и возможностям. При преобразовании к строке формат (внутренний или внешний) всегда задается явно. Он определяется именем функции или ее параметром. При обратном преобразовании (из строки) необходимо вызывать соответствующую функцию преобразования именно из того формата, в котором выполнялось сохранение значения в сроковом виде.
Внутренний формат.
Для преобразования к строковому виду (и обратно) во внутреннем формате используются следующие функции:
- ЗначениеВСтрокуВнутр / ЗначениеИзСтрокиВнутр;
- ЗначениеВФайл / ЗначениеИзФайла - параметр Формат =1;
- СохранитьЗначение / ВосстановитьЗначение.
Кроме того, во внутреннем строковом формате хранятся значения расшифровок табличного документа.
      Значение, полученное в сроковом виде во внутреннем формате, может быть преобразовано из строки к исходному типу только в той же информационной базе. Это объясняется тем, что для сохранения значения во внутреннем формате используются системные идентификаторы (не отображаемые на экране), как объектов метаданных, так и объектов данных. При попытке преобразовать значение, сохраненное во внутреннем формате, в другой конфигурации может произойти неправильное преобразование значения.
      Если объект данных в информационной базе, на который ссылалось значение, удален (например, элемент справочника), то при преобразовании значения из строки обращение к этому значению не вызовет системной ошибки, но, разумеется и не позволит получить данные удаленного объекта.
      Строки, полученные преобразованием значений к строке во внутреннем формате нельзя хранить в информационной базе. Прежде всего, это приведет к нарушению работы механизма контроля ссылочной целостности. Также, это может повлиять на работу компоненты Управление распределенными данными ИБ.  Разумеется, такое хранение значений, также не позволит системе оптимизировать обращение к данным при использовании версий 1С:Предприятия для SQL. Заметим, что хранение в информационной базе значений преобразованных в строку нарушает идеологию 1С:Предприятия и затрудняет отладку и модификацию конфигураций.
      Отдельно следует отметить возможность использования преобразования значений к строке во внутреннем формате для однозначной идентификации объектов, при переносе информации из одной информационной базы в другую. То есть, при загрузке некоторых данных из другой информационной базы строковые представления значений другой ИБ в данной ИБ не могут использоваться собственно для обратного преобразования, но могут использоваться для сопоставления двух значений той ИБ, из которой идет загрузка. Например, если загружается справочник, то ссылку на родителя загружаемого элемента можно сопоставить со ссылкой ранее загруженной группы справочника, для точной идентификации родителя. Разумеется, сопоставлять можно только строки, полученные в одной информационной базе. То есть в описанном примере строковое представление во внутреннем формате должно выгружаться и для самих групп и для родителей элементов, чтобы при загрузке их можно было сопоставить. Для сопоставления можно рекомендовать запоминать при загрузке групп строковые представления этих групп в исходной ИБ, а при загрузке элементов искать группу соответствующую загружаемому элементу по строковому представлению родителя элемента в исходной ИБ.
Внешний формат
Для преобразования к строковому виду во внешнем формате используются
следующие функции:
- ЗначениеВСтроку / ЗначениеИзСтроки;
- ЗначениеВФайл / ЗначениеИзФайла - параметр Формат =0.
В отличие от внутреннего формата, при преобразовании значения в строку во внешнем формате система использует не системные идентификаторы объектов метаданных и данных, а обычные строковые идентификаторы объектов метаданных и те значения данных, на основании которых можно однозначно идентифицировать объект. Например, для преобразования к строке во внешнем формате значения типа Справочник.Товары будет использован идентификатор справочника Товары, а также код элемента справочника. Если для кода справочника уникальность установлена в пределах группы, то будет использован полный код с учетом всех вышестоящих групп. Если справочник является подчиненным, то для идентификации значения будут использован код элемента справочника -  владельца. Разумеется, если для справочника отключен контроль уникальности кодов, то преобразование значения этого типа практически не имеет смысла. Для сохранения значения типа документ, если уникальность номеров поддерживается в пределах некоторого интервала (года, месяца), то для сохранения и восстановления значения используется также дата документа.
      Внешний формат преобразования к строке может использоваться для переноса значений между различными информационными базами. Разумеется, успех обратного преобразования зависит от того, имеются ли в той информационной базе, в которой значение преобразуется из строки объекты метаданных с соответствующими идентификаторами и объекты данных соответствующими кодами/номерами. Например, полученное нами в строковом виде значение  типа Справочник.Товары, будет правильно обратно  преобразовано, если имеется справочник, товары и элемент справочника с тем кодом, который был у элемента, на который ссылалось значение преобразованное к строке.
      При восстановлении значения из строки во внешнем формате преобразование может быть не выполнено по нескольким причинам. Например, в той конфигурации, в которой происходит преобразование из сроки, не существует объекта метаданных с идентификатором, соответствующим типу значения, сохраненного в строке. Другой причиной может быть отсутствие в информационной базе объекта данных с тем кодом (номером), который был у элемента справочника, документа или счета, на который ссылалось сохраненное в строке значение. Кроме того, преобразование может быть не выполнено из-за отличий в свойствах объектов метаданных. Например, если при сохранении в строку значения типа Справочник.Товры у справочника Товары была установлена уникальность кода в пределах подчинения, а при восстановления значения из строки уникальность кода была установлена в пределах всего справочника, то значение из строки не будет восстановлено. Однако, неудачное  преобразование из строки не вызывает системной ошибки, а приводит лишь к получению пустого значения.
      Заметим, что возможность преобразования к строке во внешнем формате может использоваться при передаче данных из одной информационной базы 1С:Предприятия в другую с помощью Ole Automation, так как непосредственно передать значение типа справочник, документ и т.п. через Ole
Automation нельзя.
      Следует учитывать, что восстановление значений типа справочник, документ или счет из строки во внешнем формате в отличие от использования внутреннего формата занимает определенное время, так как при этом выполняется обращение к информационной базе для поиска значений по сохраненному номеру (коду).
      Заметим, что преобразование к строке и обратно значений типа число, строка и дата происходит однозначно (гарантированно) в обоих форматах, так как эти значения не зависят от конфигурации. В качестве примера такого сохранения в методической конфигурации в обработке НастройкаПрописи выполняется сохранение в файле строк, используемых для вывода чисел, дат и периодов прописью.
Работа со значениями агрегатных типов во встроенном языке При работе со значениями агрегатных типов во встроенном языке системы 1С:Предприятие следует учитывать некоторые особенности, которые не всегда являются очевидными.
Каждое значение агрегатного типа в системе 1С:Предприятие включает две составляющие:
  • внутренний идентификатор объекта данных;
  • ссылка на объект доступа.
  Внутренний идентификатор объекта предназначен для максимально полной идентификации объекта, соответствующего значению агрегатного типа. А объект доступа служит для обращения к объекту данных посредством реквизитов и методов. При выполнении присваивания переменной встроенного языка значения агрегатного типа, в переменную копируется внутренний идентификатор объекта и ссылка на объект доступа, если таковой имеется. Сам объект доступа при этом не копируется! Таким образом, в результате
выполнения оператора
A = B;
при условии, что переменная B имела значение агрегатного типа и уже имела ссылку на объект доступа, переменные A и B будут ссылаться на один и тот же объект доступа.  В отличие от базовых типов (число, строка, дата), для которых при присваивании копируется само значение, при присваивании агрегатных типов копируется не объект доступа, а только ссылка на него.
  Здесь, однако, следует учитывать, что не всегда значение агрегатного типа содержит ссылку на тот или иной объект доступа. В некоторых случаях объекта доступа, соответствующего значению агрегатного типа может еще не существовать.
  Значение агрегатного типа всегда содержит ссылку на объект доступа в тех случаях, когда значение было создано с помощью функции СоздатьОбъект().   А вот у атрибутов запросов,  реквизитов справочников, документов и т. п., имеющих агрегатный тип, значения изначально не содержат ссылок на объекты доступа, пока они не будут созданы при обращении к атрибутам и методам. Соответственно и при присваивании таких значений переменным встроенного языка, переменные также не приобретают ссылок на объекты доступа, если они еще не были созданы.
  Как же тогда в таких случаях происходит обращение к атрибутам и методам? Дело в том, что значение агрегатного типа, у которого нет ссылки на объект доступа может существовать только для конкретных типов системы 1С:Предприятие - элементов справочников, документов, счетов бухгалтерского учета и т. п.. И здесь выручает внутренний идентификатор объекта, который всегда содержится в значении агрегатного типа и для указанных типов может предоставить исчерпывающую информацию, необходимую для создания объекта. А само создание объекта доступа производится при первом обращении его методу или атрибуту. Поясним вышесказанное на примере:
Тов = Док.Товар;   // Объект доступа еще не создан, при условии, что ранее не было обращений к атрибутам и методам;
Тов2 = Док.Товар;  // Аналогично
Цена = Тов.Цена;   // Для переменной Тов создается объект доступа
Цена2 = Тов2.Цена; // Для переменной Тов2 создается объект доступа. Тов и Тов2 ссылаются на разные объекты доступа
Тов3 = Тов;        // Тов и Тов3 ссылаются на один объект доступа
  При создании объекта доступа происходит считывание данных объекта информационной базы. В дальнейшем значения прочитанных реквизитов остаются неизменными, вне зависимости от изменений, производимых в информационной базе. Поэтому не следует, сохранять в переменных на продолжительный период значения, соответствующие элементам справочников, документам и т. п., в надежде, что в их реквизитах будут отображаться актуальные на текущий момент значения.
  Надо отметить, что объекты доступа продолжают существовать до тех пор, пока на них есть ссылки. Для приведенного выше примера уничтожение объектов, созданных для доступа к реквизитам элемента справочника может быть вызвано выполнением последовательности операторов:
Тов = 0;   // Удалена ссылка на объект доступа
Тов2 = 0;  // Уничтожен первый объект доступа
Тов3 = 0;  // Уничтожен второй объект доступа
В результате выполнения этих операторов ссылки на объекты доступа удаляются путем присваивания переменным других значений. Ссылки на объекты доступа были бы также уничтожены при выходе из процедуры или функции, для которой переменные Тов, Тов2 и Тов3 были локальными. Если же переменная, содержащая ссылку на объект доступа, является глобальной переменной глобального модуля, то единственный способ уничтожить ссылку на объект доступа - это присвоить переменной другое значение.
  Теперь рассмотрим случай, когда обращение к реквизиту происходит не через одну, как в рассмотренных выше примерах, а через две и более точек? Например, в случае выполнения оператора:
Цена = Док.Товар.Цена;
В этом случае, исполняющая система встроенного языка получает значение реквизита Товар документа, представленного значением переменной Док. При этом полученное значение не будет содержать ссылки на объект доступа. Затем, исполняющая система создает объект доступа, соответствующий реквизиту Товар, и, затем, с помощью созданного объекта, получает значение реквизита Цена. Затем объект доступа удаляется, так как ни одна из переменных после выполнения указанного оператора на объект не ссылается. Таким образом, при выполнении последовательности операторов
Наимен = Док.Товар.Наименование;
Цена = Док.Товар.Цена;
объект доступа, соответствующий Док.Товар будет дважды создан и дважды уничтожен. С точки зрения производительности для достижения той же цели было бы эффективнее воспользоваться последовательностью операторов:
Тов = Док.Товар;  // Присваивается реквизит документа. Объект доступа еще не создан
Наимен = Тов.Наименование; //  Для переменной Тов создается объект доступа
Цена = Тов.Цена;  // Используется созданный ранее объект доступа
При выполнении данной последовательности объект для доступа к элементу справочника создается однократно и, после выполнения указанных операторов, переменная Тов сохранит ссылку на объект доступа и он сможет быть использован в дальнейшем, до тех пор, пока переменной не будет присвоено другое значение или произойдет возврат из процедуры или функции, в которой переменная определена.
Значения типов, соответствующих объектам информационной базы во встроенном языке Для таких объектов информационной базы системы 1С:Предприятие как справочники, документы и счета бухгалтерского учета значения, представляющие  эти объекты во встроенном языке могут выступать в двух разных видах:
  - значения, полученные путем вызова системной функции СоздатьОбъект
  - значения полученные из реквизитов форм и атрибутов объектов информационной базы
  Значения, полученные при помощи вызова СоздатьОбъект() не представляют какой-то конкретный объект (элемент справочника, документ, счет бухгалтерского учета), а предназначены главным образом  для обработки групп объектов. С помощью таких значений можно получать выборки множества объектов, последовательно обходить объекты, попавшие в выборку, производить их обновление, создавать новые и удалять существующие объекты  и т. п.. Такие значения могут использоваться многократно, то есть с помощью одного значения можно получить доступ сначала к одной выборке, потом к другой и так много раз.
  Значения, содержащихся в реквизитах форм и атрибутах объектов информационной базы, являются точными значениями и представляют ровно один конкретный объект информационной базы (элемент справочника, документ, счет бухгалтерского учета). Такие значения также могут быть пустыми – не представляющими никакого объекта. С помощью таких значений можно получать доступ к атрибутам соответствующего объекта, но нельзя производить действий по созданию, удалению и изменению объекта.
  Но несмотря на такие существенные различия оба описанных варианта значений одинаковы во многих проявлениях. Рассмотрим пример:
Спр1 = СоздатьОбъект(Справочник.Товары);
Спр2 = Док.Товар;
Переменные Спр1 и Спр2 содержат значения двух описанных выше видов. Для этих переменных способ доступа к атрибутам справочника производится одним и тем же способом. Многие методы объекта типа Справочник могут применяться как к Спр1, так и Спр2. Функции ТипЗначения() и ТипЗначенияСтр(), будучи  примененными к Спр1 и Спр2 дадут одинаковые результаты. Многие методы встроенного языка также не различают какого вида значение передано им в качестве параметра: точное значение объекта или спозиционированная выборка.
И такое положение дел приводит к тому, что иногда у специалистов по конфигурированию возникают трудности с пониманием различия между приведенными видами значений. В результате при написании конфигураций возникают ситуации, когда одной и той же процедуре в качестве параметра могут передаваться значения разных видов:
1.
Спр1 = СоздатьОбъект(Справочник.Товары);
Спр1.ВыбратьЭлементы();
Пока Спр1.ПолучитьЭлемент() = 1 Цикл
    Обработать(Спр1);
КонецЦикла;
2.
Спр2 = Док.Товар;
Обработать(Спр2);
В первом случае в качестве параметра процедуре Обработать() передается выборка, спозиционированная на конкретный элемент справочника, а во втором - точное значение элемента справочника. И, если, например, в процедуре Обработать() производится только считывание реквизитов справочника, то результаты, полученные в обоих случаях будут неразличимы. Но если в процедуре Обработать() производится присвоение переданного в качестве параметра значения реквизиту формы или атрибуту объекта (например, документа), то первый вариант просто не будет работать, так как вместо точного значения элемента справочника процедура получит выборку. Для того, чтобы все работало нормально первый вариант должен выглядеть так:
Спр1 = СоздатьОбъект(Справочник.Товары);
Спр1.ВыбратьЭлементы();
Пока Спр1.ПолучитьЭлемент() = 1 Цикл
    Обработать(Спр1.ТекущийЭлемент());
КонецЦикла;
Функция ТекущийЭлемент() в качестве значения возвращает точное значение элемента справочника, на который спозиционирована выборка. А если функция ТекущийЭлемент() применяется к переменной, значением которой является уже точное значение элемента справочника, эта функция вернет само это значение. Так что равноценным вариантом решения показанной в примере проблемы было бы, если  для выполнения действий процедура Обработать() использовала бы не сам переданный параметр, а значение некоторой переменной (например, Спр), значение которое получила бы из переданного параметра (Парам) следующим способом:
Спр = Парам.ТекущийЭлемент();
Однако следует иметь в виду, что при вызове метода  ТекущийЭлемент() у переменной, значение которой получено из реквизитов форм и атрибутов объектов информационной базы, а не путем вызова функции СоздатьОбъект() будет выполняться поиск элемента справочника в информационной базе, что повлечет к дополнительным затратам времени.  Соответственно, если полученное конкретное значение предполагается просто присвоить (например, измерению регистра), а не обращаться к его атрибутам и методам, и известно, что это именно конкретное значение, а не выборка, использовать метод ТекущийЭлемент() не следует. Поэтому можно рекомендовать создавать процедуры ориентированные на получение в качестве параметра только конкретного значения, а при вызове процедуры с передачей в качестве фактического параметра выборки  вызывать метод ТекущийЭлемент().
Обработать(Спр1.ТекущийЭлемент());
Аналогичные соображения справедливы для объектов типа документ и счет бухгалтерского учета. Для документов аналогом функции ТекущийЭлемент() является функция ТекущийДокумент(), а для счетов  бухгалтерского учета - ТекущийСчет().
Выбор разрядности для данных числовых типов Выбор разрядности для данных числовых типов При описании формата числового типа данных первая цифра означает полное число знакомест в представлении числа (с учетом позиции, занимаемой десятичной точкой, но без учета позиции под знак числа), вторая цифра означает число знакомест в дробной части числа. Поэтому, если мы задали формат числа (8.2), то это означает, что число будет представляться с пятью знаками до десятичной точки и двумя знаками после (плюс один символ на десятичную точку).
При установке формата числового типа данных, разрядность должна обеспечивать возможность хранения чисел необходимой величины. Например, если у нас реквизит "Цена" имеет формат (8.2), то при записи в него значения 10000 * 26.85 мы получим переполнение числа (99999.99).
Аналогичные соображения следует учитывать при выборе формата таких данных как ресурсы регистров оперативного учета, реквизиты многострочных частей документов, для которых установлен флаг "Итог по колонке", суммы проводок и операций, и т. п.. Для указанных величин необходимо помнить, что поля, в которых хранятся значения перечисленных величин и поля, в которых размещаются итоговые значения (суммы) имеют одинаковый формат. Поэтому, для такого рода числовых величин в формате должно быть учтено не только максимальное значение отдельной величины, но и максимально возможные значения сумм. Так, например, при выборе разрядности ресурсов регистров оперативного учета следует устанавливать разрядность, которая сможет вместить максимально возможный оборот и остаток по данному ресурсу.
Перебор объектов и групповое изменение данных Весьма часто при разработке и внедрении конфигураций возникает необходимость в разработке алгоритма, который выполняет обход объектов информационной базы и вносит в них некоторые изменения. При реализации такого алгоритма в определенных случаях возникают ситуации, когда после изменения объекта не выполняется продолжение выборки следующих объектов. Это объясняется тем, что последовательная выборка и изменение объектов выполняются непосредственно в информационной базе. В основном проблемы возникают в тех случаях, когда при записи изменяются именно те данные, по которым собственно и происходит отбор объектов. В результате текущий объект не должен больше относиться к выборке и само продолжение выборки не выполняется системой. Например, в процессе перебора подчиненных документов, у найденного документа изменяется реквизит, в котором собственно записано  значение того документа, для которого выбираются подчиненные. Ситуация осложняется тем, что при использовании методов языка разработчик конфигурации не всегда может точно определить каким способом система будет выполнять перебор объектов.
Прежде всего, можно рекомендовать не выполнять изменение данных тем же объектом (переменной) которой выполняется выбора, а создать для этой цели отдельную переменную и позиционировать ее на выбранный объект информационной базы.
Чтобы однозначно избежать трудностей при разработке подобных алгоритмов имеет смысл сначала выполнить обход объектов по некоторому критерию и занести их в список значений, а затем позиционироваться на каждый объект, содержащийся в списке и выполнять необходимые изменения.
Следует заметить, что при выполнении выборки объектов информационной базы с помощью  объекта Запрос подобных проблем не возникает, так как при обходе результатов запроса используется временный массив построенный в ходе выполнения запроса.
Ошибки базы данных и их обработка Ошибки базы данных и их обработка. При работе системы 1С:Предприятие могут возникать ошибки базы данных. Эти ошибки могут иметь место как при работе с базой данных, представленной в формате DBF/CDX , так и с базой данных, хранимой в среде MS SQL Server . И, хотя характер ошибок в обоих приведенных случаях может различаться, процедура их обработки стандартизована в системе 1С:Предприятие. По последствиям ошибки базы данных разделяются на две группы
  • невосстановимые ошибки
  • восстановимые ошибки
Невосстановимые ошибки базы данных Невосстановимые ошибки базы данных являются следствием значительных нарушений в работе системы 1С:Предприятие: физического разрушения базы данных, нарушения ее структуры, серьезных рассогласований во взаимодействии программы с базой данных и т. п.. В таких случаях восстановить нормальное функционирование системы 1С:Предприятие невозможно и единственно правильной реакцией является завершение работы системы. Видимым проявлением таких ошибок в случае работы с базой данных в формате DBF/CDX является появление диалогового окна, содержащего текст, начинающийся со слов "Н евосстановимая ошибка Базы Данных”, в след за которыми приводится описание ошибки. В случае работы с базой данных, размещенной в среде MS SQL Server сначала появляется окно, в котором содержится описание ошибки SQL , а затем окно, содержащее текст "Н евосстановимая ошибка базы данных!". П осле этого в обоих случаях происходит завершение работы системы. Невосстановимые ошибки базы данных не могут быть перехвачены и обработаны из встроенного языка с помощью конструкций Попытка … Исключение … КонецПопытки .
Восстановимые ошибки базы данных Восстановимые ошибки базы данных в известном смысле ошибками не являются, а представляют собой штатные ситуации, которые так или иначе могут возникать в процессе нормальной работы системы 1С:Предприятие. К восстановимым ошибкам относятся ошибки блокировки отдельных объектов (записей) базы данных, ошибки захвата таблиц при выполнении транзакций и т. п.. Ошибками они являются в том смысле, что при этом не могут быть успешно завершены выполняемые над базой данных операции (транзакции). Но при этом не происходит каких-то фатальных нарушений в работе системы 1С:Предприятие и имеется возможность восстановления нормального функционирования. Реакция системы на восстановимые ошибки базы данных зависит от того, в какой ситуации происходит ошибка: при выполнении интерактивного действия или при выполнении модуля встроенного языка.
При выполнении интерактивной процедуры (например, при записи документа из формы при нажатии кнопки), в случае возникновения восстановимой ошибки базы данных происходит откат транзакции базы данных, а сама система 1С:Предприятие возвращается к состоянию, в котором она находилась до начала выполнения интерактивной процедуры. После этого на экран выводится диалоговое окно, содержащее вопрос: "П ри выполнении транзакции произошла ошибка! <О писание ошибки> П овторить попытку выполнить транзакцию?". В случае положительного ответа на вопрос производится повторная попытка выполнить операцию. Если повторная попытка выполнить операцию снова завершится восстановимой ошибкой, то снова будет выдан запрос на повторение операции и так далее. В случае отрицательного ответа повторная попытка выполняться не будет. В модулях встроенного языка восстановимые ошибки базы данных могут быть перехвачены и обработаны с помощью конструкции встроенного языкаПопытка … Исключение … КонецПопытки так же, как и другие ошибки встроенного языка. В случае, если обработки ошибки в модуле не предусмотрено, то будет произведен откат выполняемой в данный момент транзакции, в окно сообщений 1С:Предприятия будет выведено сообщение о произошедшей ошибке, а выполнение модуля будет прервано, как и в случае возникновения в процессе выполнения модуля любой другой ошибки. В случае работы с базой данных, размещенной в среде MS SQL Server , в окно сообщений будет выдана ошибка SQL. После возникновения восстановимой ошибки алгоритм, вызвавший ошибку, может быть вызван пользователем повторно. Если используется конструкция встроенного языка Попытка … Исключение … КонецПопытки, то повторная операции записи может быть вызвана модулем автоматически.
Использование строковых реквизитов неограниченной длины При определении структуры справочников и документов для строковых реквизитов необходимо выбрать определенную длину или указать режим Неограниченная длина (кроме реквизитов табличной части). Вариант Неограниченная длина существенно отличается по внутреннему способу хранения.
При работе с базами данных в формате DBF/CDX  реквизиты неограниченные длины хранятся в отдельной таблице блоками по 80 символов. Для пустой строки в этой таблице записи не хранятся. Разумеется, хотя само значение блока имеет длину 80 символов, дополнительные ресурсы расходуются на поддержание связи с этой таблицей. В базах данных в формате SQL  для хранения реквизитов неограниченной длины используется соответствующий тип поля таблицы, который также хранит только заполненные строки. Соответственно, если в создаваемом реквизите значения будут задаваться далеко не для всех объектов, то использование реквизита неограниченной длины может существенно уменьшить количество используемого дискового пространства.
Обращение к реквизитам неограниченной длины несколько замедляет считывание объекта, если происходит обращение к этим реквизитам. Запись объекта замедляется несколько более существенно, но только если конкретное значение изменялось. Скорость записи, разумеется, зависит от количества записываемых блоков (в базах данных DBF/CDX), то есть от длины строки.
Следует учитывать, что строковые значения реквизитов неограниченной длины записываются и возвращаются без хвостовых пробелов, тогда как обычные строковые реквизиты всегда дополняются пробелами до длины соответствующей длине реквизита в метаданных.
Особенности работы с типизированными и не типизированными колонками таблицы значений. При создании колонки таблицы значений можно указать или не указать тип значений, которые будут храниться в данной колонке. Информация в типизированных и не типизированных колонках таблицы значений хранится по-разному. В колонке с неуказанным типом значения хранится значение и его контекст, тогда как в колонке с указанным типом хранится только его значение. У каждого способа есть свои плюсы и минусы. Хранение значения и контекста позволяет увеличить производительность при частых обращениях к значениям реквизитов объектов, которые хранятся в таблице значений. Но при этом расходуется много памяти на хранение каждого объекта. Хранение только значения позволяет более компактно хранить информацию. Минусом является то, что при каждом обращении к атрибуту или методу объекта, который хранится в такой колонке, объект будет создаваться, позиционироваться на соответствующую запись и уничтожаться после использования. Чтобы избежать таких накладных расходов, перед обращением к нескольким атрибутам или методам объекта, рекомендуется поместить его значение во временную переменную и использовать ее для доступа к атрибутам и методам объекта. Данный способ позволяет компактно хранить информацию и получить хорошую производительность при работе с большим объемом информации.
Применение процедуры ПриНачалеРаботыСистемы() глобального модуля В глобальном модуле может быть определена процедура ПриНачалеРаботыСистемы(), которая вызывается на выполнение при запуске системы 1С:Предприятие. Данная процедура предназначена для того, чтобы в конфигурации можно было определить  действия, которые должны быть выполнены при начале работы системы 1С:Предприятие. Однако операторы тела глобального модуля (операторы, размещаемые в конце модуля и не входящие в какую-нибудь процедуру) также выполняются при запуске системы 1С:Предприятие. При выполнении тела глобального модуля сам глобальный модуль еще не полностью инициализирован, а если точнее, то его экспортируемые переменные, процедуры и функции на данный момент еще не доступны извне самого глобального модуля. И если в теле глобального модуля, например, с помощью функции ОткрытьФорму() запустить какую-либо обработку, то данная обработка не сможет быть выполнена, если в ней содержатся обращения к переменным, процедурам или функциям глобального модуля.
Процедура ПриНачалеРаботыСистемы() вызывается после выполнения тела глобального модуля. При вызове данной процедуры глобальный модуль уже полностью инициализирован и доступен для обращения из других модулей. Поэтому в данной процедуре можно выполнять действия запускающие другие модули, из которых осуществляется обращение к объектам глобального модуля.
Точность вычисления и представления числовых величин
Доступ во встроенном языке к метаданным В 1С:Предприятии 7.7 существует возможность обращаться к объектам метаданных средствами встроенного языка. Эта возможность используется, прежде всего, для создания универсальных алгоритмов, не зависящих от конфигурации и конкретных объектов метаданных.
Весь доступ к метаданным осуществляется через объект Метаданные и иерархию подчиненных ему объектов. Фактически объект Метаданные является корнем иерархической системы объектов, которые во многом похожи на дерево метаданных в конфигураторе.
В отличие от других средств встроенного языка доступ к метаданным не имеет подробного описания в документации. Это объясняется тем, что названия атрибутов и методов совпадают с терминами, выводимыми в текстовом представлении структуры метаданных (меню Конфигурация – Описание структуры метаданных). Соответственно для ознакомления с составом атрибутов и методов следует получить текстовое представление и определить  в нем необходимые термины. Специфические атрибуты и методы (не
отображаемые в текстовом представлении) отражены в документации и Синтакс-Помощнике.
Обращение к объектам метаданных выполняется с помощью методов вышестоящего объекта. Название метода совпадает с названием типа объекта метаданных. В качестве параметра может быть передан идентификатор искомого объекта или его номер. Если объект найден, то возвращается собственно объект метаданных. Если объект не найден то возвращается пустой объект метаданных. Для проверки того, возвращен пустой объект или нет, следует использовать метод Выбран.
Например:
      Если Метаданные.Документ(Счет).Выбран()=0 Тогда
            Сообщить(В конфигурации нет документа Счет);
      КонецЕсли
Если параметр не задан, то возвращается количество объектов метаданных данного типа.
Например:
      Сообщить(В конфигурации +Метаданные.Документ()+ документов);
Эта возможность используется для обхода всех объектов метаданных
определенного типа.
Например:
      Для Инд=1 По Метаданные.Документ() Цикл
            Сообщить(Документ +Метаданные.Документ(Инд));
      КонецЦикла;
Для доступа к объектам метаданных, которые подчинены полученным объектам, также соответственно используются методы, совпадающие с именами метаданных. Заметим, что реквизит документа также является объектом метаданных (имеет идентификатор, синоним и т.д.).
Например:
      Если
Метаданные.Документ(Счет).РеквизитШапки(Заказчик).Выбран()=0 Тогда
            Сообщить(В конфигурации нет реквизита Заказчик документа
Счет);
      КонецЕсли;
Для доступа к свойствам объектов метаданных используются атрибуты с соответствующими именами.
Например:
      Сообщить(Тип номера расходного ордера:
+Метаданные.Документ(РасходныйОрдер).ТипНомера);
Таким образом, если ознакомиться с содержимым текстового представления метаданных, то можно определить названия методов и атрибутов для доступа ко всем объектам метаданных и их свойствам.
Некоторые свойства объектов метаданных являются ссылками на другие объекты. В этом случае возвращается объект метаданных, к которому можно обращаться также как и объектам, полученным с помощью методов объекта Метаданные.
Например:
      Сообщить(Длина кода справочника владельца справочника Договора:
+Метаданные.Справочник(Договора).Владелец.ДлинаКода);
Для некоторых объектов их свойства могут содержать несколько ссылок на различные объекты метаданных. В этом случае к ним применяются методы Количество и Получить.
Например:
      Сообщить(Количество ссылок в графе Сумма журнала Общий :    
+Метаданные.Журнал(Общий).Графа(Сумма).Ссылки.Количество());
Заметим, что возвращаемые значения свойств объектов метаданных, соответствующие одному из нескольких возможных вариантов, возвращаются в строковом виде в соответствии с установленном для конфигурации языком (русским или английским). Возможные значения в английском варианте можно посмотреть, сформировав текстовое описание метаданных при установленном в конфигурации английском языке.
Следует учитывать, что механизм обращения к метаданным не связан непосредственно с данными и не позволяет получать значения, хранящиеся в информационной базе или значения агрегатных типов которые могут храниться в информационной базе. Он предназначен только для получения информации о структуре метаданных. То есть все объекты, получаемые через объект Метаданные, имеют специальный тип Метаданные. Например, используя доступ к метаданным нельзя получить значение типа Перечисление. То есть объект метаданных может сообщить свойства перечисления, но не может выдать собственно значение типа Перечисления чтобы присвоить его, например, реквизиту документа или сравнить с существующим значением. Для получения собственно значения типа Перечисление необходимо воспользоваться самим объектом Перечисление. Однако существует возможность искать значение перечисления по идентификатору, полученному из метаданных.
Например:
      Для Инд=1 По Метаданные.Перечисление(ВидыПлатежа).Значение() Цикл
            Сообщить(Перечисление.ВидыПлатежа.ЗначениеПоИдентификатору(
          
Метаданные.Перечисление(ВидыПлатежа).Значение(Инд).Идентификатор));
      КонецЦикла;
Объекты, используемые для доступа к метаданным, могут запоминаться в переменных для сокращения в дальнейшем доступа к их свойствам и подчиненным объектам.
Например:
      МДСчет= Метаданные.Документ(Счет);
      Сообщить(Тип реквизита Заказчик документа Счет:
+МДСчет.РеквизитШапки(Заказчик).Тип);
Заметим, что объекты, используемые для доступа к метаданным, не могут сравниваться между собой. Для того чтобы сравнить, например, два объекта метаданных одного и того же типа на идентичность можно сравнить их идентификаторы.
Особенности работы с реквизитами неопределенного типа В 1С:Предприятии 7.7 существует возможность создавать в объектах метаданных реквизиты неопределенного типа. Например,  эта возможность активно используется для хранения в документе значений субконто связанных с некоторым счетом, по которому должны формироваться проводки документом.
Особенность использования реквизитов неопределенного типа заключается в том, что их значения нельзя присваивать, не назначив предварительно тип. Тип  назначается с помощью метода НазначитьТип того объекта, которому принадлежит реквизит. Таким образом, реквизиты неопределенного  типа отличаются от обычных переменных  модулей, тип которых может свободно изменяться при присвоении значения.
Замечание!
В модуле формы документа (аналогично и справочника) для назначения типа реквизиту документа следует вызывать метод НазначитьТип у самого документа (то есть не через точку, а непосредственно). Вызов метода НазначитьТип для элемента управления (через объект Форма) следует применять только к реквизитам диалога формы (не являющимися реквизитами документа).
Следует учитывать, что реквизиты, имеющие неопределенный тип, не могут использоваться для хранения строк длиннее 22 символов.
Особенности написания тела модуля При разработке модулей следует учитывать, что тело модуля (часть модуля, которая располагается ниже всех процедур и функций) выполняется системой при инициализации модуля. Эта особенность определяет некоторые ограничения на использование тела модуля.
Фактически тело модуля служит только для инициализации переменных модуля объявленных в его верхней части.
Для модуля формы в теле модуля не могут выполняться некоторые методы, которые управляют элементами управления и свойствами формы. Все эти действия рекомендуется выполнять в процедуре ПриОткрытии.
Для глобального модуля в теле модуля также могут не выполняться некоторые функции встроенного языка. Например, в теле модуля не допускается открытие форм.
Для модуля документа если документ проводится из формы документа, то тело модуля будет выполнено только один раз, хотя проведение может быть выполнено несколько раз без закрытия формы. При групповом проведении тело модуля не будет выполняться перед началом проведения каждого документа (групповое проведение документов выполняется системой при переносе точки актуальности вперед и в режиме Проведение документов). Таким образом, переменные, которые должны инициализироваться при каждом проведении следует инициализировать в процедуре ОбработкаПроведения, а не в теле модуля.

Возможные ошибки при конфигурировании

В некоторых случаях пользователи меняют значение параметра Год начала рабочего столетия. Например, устанавливают в нем значение 20 В этом случае, алгоритмы, использующие константы типа Дата в которых год задан двумя цифрами или выполняющие преобразование из аналогичных строковых значений будут работать неверно.
Для обеспечения устойчивости алгоритмов к изменениям пользовательских настроек рекомендуется в константах языка типа Дата и в строковых значениях преобразуемых к типу Дата задавать год четырьмя цифрами.
Запись в качестве значений измерений регистров или субконто групп справочников При записи движений и проводок система не выполняет проверки значений типа Справочник на то является значение группой справочника или нет, так как этот контроль занял бы достаточно продолжительное время. Однако, не следует использовать группы справочников в качестве значений измерений регистров и субконто.
Во-первых, это противоречит назначению групп справочников, предусмотренному в 1С:Предприятии. Во-вторых, это в большинстве случаев приведет к неверному формированию отчетов, так как механизмы Запрос и Бухгалтерские итоги рассчитаны на то, что в качестве значений в данных фигурируют элементы, а итоги по группам справочников формируются в процессе обработки данных запроса.
Перебор проводок и запись операций При работе с объектом Операция существует возможность перебора проводок с использованием различных условий отбора. Для этого используется метод ВыбратьОперацииСПроводками. Достаточно часто эта возможность используется не только для формирования отчетов, но и для группового изменения проводок. Например, для замены значений субконто при изменении структуры учета.  Одной из типичных ошибок при использовании данного метода является попытка выполнить корректировку и запись проводок непосредственно тем же объектом (переменной), которой выполняется отбор. Это действие не может быть выполнено системой, так как при записи операции проводки фактически записываются заново, и текущая позиция в списке проводок (текущая проводка) не может быть адекватно сохранена для последующего перебора.
Таким образом, для выполнения изменения проводок не следует выполнять запись тем же объектом, который выполняет перебор. Для наиболее надежного  выполнения записи измененных операций можно рекомендовать не использовать перебор проводок, а выполнять перебор операций, и для каждой операции перебирать в цикле все проводки. В этом случае изменение проводок и запись операции не вызовет проблем.
В некоторых случаях, если требуется изменить проводки по определенному условию, можно рекомендовать для повышения производительности выполнить перебор проводок и накопить в таблице значений операции (документы) и номера проводок, которые нужно изменить. Затем можно поочередно открывать эти операции и изменять в них необходимые проводки.
Особенности работы с файлами информационной базы 1С:Предприятия При администрировании и конфигурировании 1С:Предприятия рекомендуется при выборе средств и методов решения конкретных задач жестко придерживаться документированных способов использования файлов информационной базы 1С:Предприятия. Использование файлов информационной базы не по назначению или недокументированным способом может привести к различным сбоям в работе программы и потере информации. Это утверждение является не просто предупредительной надписью, а основывается на опыте анализа различных ситуаций, в которых некорректная работа с файлами 1С:Предприятия приводила к существенным проблемам с данными и конфигурацией, вплоть до необходимости повторного ввода информации. Сказанное выше относится практически ко всем файлам, расположенным в каталоге информационной базы, а не только к файлам DBF/CDX.
Так, например, основной файл информационной базы - файл конфигурации (1CV7.MD) логически жестко связан с данными информационной базы. Перезапись и модификация этого файла может выполняться только штатными средствами 1С:Предприятия (изменением конфигурации, загрузкой измененной конфигурации, объединением конфигураций, восстановлением и загрузкой данных). Перезапись в каталог информационной базы другого (даже незначительно отличающегося) файла конфигурации может привести к существенным нарушениям в работе программы. Последствия нештатной перезаписи или изменения файла конфигурации могут проявиться не сразу, а, например, при одной из последующих модификаций конфигурации.
Файл словаря данных (1CV7.DD или 1CV7.DDS) является служебным файлом, который должен записываться только самим 1С:Предприятием. Фактически этот файл непосредственно зависит от файла конфигурации (1CV7.MD) и содержит описание структуры таблиц базы данных. Система поддерживает четкое соответствие между файлами 1CV7.MD, 1CV7.DD (1CV7.DDS) и собственно базой данных (файлами DBF/CDX или таблицами в базе данных MS SQL Server). Ручное изменение или перезапись файла словаря может быть воспринято системой как нарушение структуры данных и система может выполнить очистку таблиц базы данных.
Не менее опасной является перезапись или модификация таблиц информационной базы. Фактически информационная база 1С:Предприятия представляет собой хранилище объектов, которые размещаются в нескольких таблицах (файлах DBF/CDX или таблицах MS SQL Server). В информационной базе существует достаточно большое количество внутренних взаимосвязей и связей с файлом конфигурации. Например, изменения таблиц информационной базы, выполненные нештатным образом, могут нарушить систему внутренней идентификации объектов или систему хранения производных данных. Нарушения в работе 1С:Предприятия при этом могут проявиться через весьма значительное время и их будет трудно непосредственно отнести к выполненным ранее нештатным действиям.
При возникновении различных сбоев в информационной базе или в конфигурации (из-за ошибок аппаратного или программного обеспечения или по другим причинам) рекомендуется воспользоваться штатными средствами 1С:Предприятия (режимом Тестирование и восстановление ИБ или режимами Выгрузить данные - Загрузить данные). Если это не привело к исправлению сбойных ситуаций, то следует восстановить архивную копию информационной базы. При этом восстановление должно выполняться целиком, а при использовании версий 1С:Предприятия для SQL, должно выполняться восстановление согласованно сохраненных файлов каталога информационной базы и содержимого базы данных MS SQL Server.
Использование объекта XBase Одной из встречающихся ошибок при проектировании конфигураций 1С:Предприятия является использование не по назначению объекта XBase. Данный объект предназначен исключительно для интеграции 1С:Предприятия с другими системами и для использования внешних по отношению к информационной базе  1С:Предприятия данных, например, для загрузки стандартных классификаторов, распространяемых государственными организациями, или загрузки данных из других учетных систем.
Построение на основе использования объекта XBase алгоритмов связанных с задачами решаемыми объектами информационной базы является серьезной ошибкой проектирования, которая не будет проявляться в виде конкретных сбоев, но будет нарушать правильное функционирование различных механизмов 1С:Предприятия. Например, изменение файлов DBF с помощью объекта Xbase никак не рассматривается системой как факт изменения информационной базы. Соответственно расположение методов выполняющих запись между вызовами
процедур НачатьТранзакцию и ЗафиксироватьТранзакцию не приведет к тому, что при откате транзакции или сбое в процессе записи данных информационной базы будет отменена запись в файлы DBF. Таким образом, изменение файлов DBF нельзя выполнить согласованно с изменениями в данных информационной базы, что делает недопустимым построение на базе использования объекта XBase механизмов связанных с бизнес – логикой решаемой задачи.
Разумеется, на файлы изменяемые с помощью объекта XBase не распространяется действие таких механизмов, как контроль ссылочной целостности, управление распределенной информационной базой, тестирование информационной базы и т.д.
Повторная запись данных средствами языка при откате транзакций При построении алгоритмов модулей 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С:Предприятия использующей компоненту Оперативный учет для работников организации определенную трудность может представлять необходимость открытия в начале месяца периода оперативных итогов.
В методической конфигурации приводится пример алгоритма упрощающего выполнение этой регламентной операции. В глобальном модуле в процедуре ПриНачалеРаботыСистемы выполняется сравнение текущей даты и даты точки актуальности (ТА). Если текущая дата располагается в следующем месяце, по отношению к дате ТА, то пользователю предлагается выполнить перенос ТА.
Если программа запущена не в монопольном режиме, то предлагается завершить запуск программы и запустить ее в монопольном режиме.
Разумеется, данный прием имеет смысл использовать только при регулярной (непрерывной) работе пользователей. При выполнении отладки конфигурации или принудительном переносе ТА назад данная возможность практически не имеет смысла.
Кроме того, следует учитывать, что описанный алгоритм обеспечивает работу только при периодичности хранения оперативных итогов Месяц. При другой периодичности в алгоритме следует учесть более частую смену периода хранения оперативных итогов. Соответственно алгоритм необходимо изменять при смене периодичности хранения итогов.

Особенности работы с конфигурацией

Если в качестве приоритетной конфигурации выбрана текущая , то замещения измененных объектов не происходит, в противном случае они включаются в список замещаемых.
Суть стратегии при выборе метода объединения объектов можно свести к следующей фразе: "При выборе метода объединения объектов конфигуратор стремится к тому, чтобы в результате объединения объект содержал все, что было в нем в текущей конфигурации и все, что было в загружаемой". Слово "стремится" здесь употреблено потому, что для некоторых объектов метаданных (например, "Задача") объединение является бессмысленным, они могут только замещаться.
Следуя этому правилу можно достаточно просто представить себе, что происходит с большинством объектов метаданных при объединении. Такие свойства объекта метаданных, как "синоним", "комментарий" и др. берутся из приоритетной конфигурации, а списочные (такие, например, как список реквизитов) сливаются, то есть их список после объединения будет содержать набор реквизитов обоих конфигураций. Отдельно стоит упомянуть свойства, содержащие массив ссылок на элементы метаданных, такие, например как, список входящих в журнал документов. Подобно списочным свойствам, они сливаются, однако, при этом корректно обрабатывается ситуация, когда ссылка в результате оказывается неразрешенной. Примером может служить случай, если объединяемый (или переносимый) журнал документов содержит ссылки на документы, которые не переносятся из загружаемой конфигурации и отсутствуют в текущей. В этом случае ссылка уничтожается, о чем выдается соответствующая строка в окно сообщений.
Теперь более подробно рассмотрим случаи, когда применение сформулированного правила не дает полного представления о результате или дает неверное представление.
Регистры. Специфика этого объекта метаданных состоит в том, что для него существенным является не только состав списочных свойств - измерений, ресурсов, реквизитов, но порядок их следования в списке. Для слияния этих списков используется следующий алгоритм: сначала берутся все элементы списка из приоритетной конфигурации в порядке их следования, затем к списку добавляются не вошедшие ранее элементы из списка неприоритетной конфигурации в порядке их следования в нем.
Формы диалогов. Результирующая форма диалога имеет все слои, которые имели обе исходные формы. В качестве основы берется форма диалога приоритетной конфигурации, элементы диалога, имеющиеся только в неприоритетной конфигурации, добавляются на тот слой, который был использован для каждого конкретного элемента в неприоритетной конфигурации.
Интерес представляет также способ, которым определяются пары соответствующих друг другу элементов диалога, т.к. они не являются элементами метаданных и, соответственно, способ сравнения идентификатора в этом случае неприменим. Поиск в форме элемента диалога, соответствующего данному элементу производится следующим образом: если присутствует идентификатор элемента диалога (который не следует путать с идентификатором элемента метаданных) происходит сравнение по нему. В противном случае производится поиск элемента того же типа (текст, кнопка и т.д.), имеющий такую же формулу (не пустую) или такой же заголовок (не пустой). Заметим, что данный алгоритм обеспечивает определение пары элементов диалога, соответствующих, с точки зрения совпадения идентификаторов, реквизитам отображаемого формой объекта метаданных, так как совпадение идентификаторов реквизитов гарантирует совпадение идентификаторов соответствующих им элементов формы диалога.
Модули (тексты). За основу берется текст модуля приоритетной конфигурации. В нем в виде комментариев вставляются все отличия модуля неприоритетной конфигурации фрагменты текста. В начало каждой строки вставляемого фрагмента текста добавляется двойной слеш (два символа косой черты), что в тексте программного модуля делает эти строки закомментированными. Кроме того, для облегчения дальнейшей работы с результирующим текстом, в него вставляются специальные строчки-комментарии.
Измененные фрагменты обрамляются сверху и снизу строками " //{{MRG[ <-> ] ",
добавленные " //{{MRG[ <-- ] ",
удаленные " //{{MRG[ --> ] ".
Таблицы. Форма, получившаяся в результате объединения, будет содержать все таблицы, имевшиеся в формах объединяемых конфигураций. В случае, если в обеих формах есть одинаково названные таблицы, таблице неприоритетной конфигурации присваивается новое, уникальное в пределах результирующей формы имя.
Права и интерфейсы. Независимо от установки метода объединения ("Объединять объекты" или "Замещать объекты"), пользовательские интерфейсы всегда объединяются, а права конкретного набора прав для конкретного объекта метаданных замещаются полностью в соответствии с выбранным приоритетом конфигурации. При этом, замещение прав выполняется при условии, что в окне объединения включен признак объединения и у объекта метаданных и у набора прав. При объединении интерфейсов за основу берется интерфейс приоритетной конфигурации, и в него добавляются отсутствующие в нем элементы интерфейса из неприоритетной конфигурации.
Таким образом, режим объединения конфигураций при выборе объединения объектов полностью сохраняет функциональность объекта из приоритетной конфигурации и опционально включает в результирующий объект функциональность из неприоритетной конфигурации. Как правило, для включения опциональной функциональности требуется корректировка конфигурации вручную.
Отличия режима объединения конфигураций от загрузки измененной конфигурации В процессе работы с конфигурацией каждый вновь образующийся элемент метаданных получает уникальный в пределах данной конфигурации внутренний идентификатор, который сохраняется за ним весь цикл жизни конфигурации. Загрузка измененной конфигурации для определения пар объектов, соответствующих друг другу в текущей и загружаемой конфигурации, использует именно внутренний идентификатор, благополучно отрабатывая ситуацию, когда объект метаданных переименован. Кстати, именно поэтому так важно, чтобы загружаемая конфигурация являлась потомком текущей, так как нет никакой возможности "согласовать" словарь внутренних идентификаторов двух различных конфигураций при использовании загрузки измененной конфигурации.
Напротив, режим объединения конфигураций использует задаваемые пользователем идентификаторы объектов метаданных при определении пар соответствующих друг другу объектов. Это дает возможность объединять конфигурации, не имеющие общего родителя. Хотя следует учитывать, что объединение сильно различающихся конфигураций может потребовать существенной переработки полученной конфигурации для согласования структур данных, алгоритмов, а, зачастую, и самой концепции унаследованной от обеих конфигураций.
Однако может оказаться полезным даже из сильно отличающейся конфигурации выделить и перенести в текущую один или несколько объектов, реализующих ту или иную функцию, не поддерживаемую текущей конфигурацией. Метод объединения конфигураций дает такую возможность, благодаря реализованной выборочности переноса, чего не поддерживает загрузка измененной конфигурации.
Наконец, еще одним отличием режима объединения конфигураций является наличие метода объединения объектов, т.к. загрузка измененной конфигурации способна лишь замещать объекты.
Фактически, режим загрузки измененной конфигурации используется исключительно для обеспечения возможности изменения копии конфигурации параллельно с работой пользователей с информационной базой, и затем однозначного внесения сделанных в копии изменений в "рабочую" конфигурацию.
Из сказанного выше можно сделать вывод, что режим объединения конфигураций является по сравнению с загрузкой измененной конфигурации более развитым, дающим новые возможности способом обновления конфигураций, однако, его применение предъявляет к пользователю повышенные требования с точки зрения понимания механизма объединения.
Сравнение внешних отчетов Режим сравнения файлов Конфигуратора (меню Файл - Сравнить файлы) позволяет сравнивать любые файлы на полное совпадение, а для текстовых файлов предоставляет возможность сравнения с показом отличий в тексте.
При сравнении внешних отчетов может быть выполнено сравнение самих файлов на полное совпадение, а может быть выполнено сравнение текстов модулей с показом отличий в тексте.
Для принудительного сравнения модулей внешних отчетов следует при выборе файлов выбрать тип файла Внешний отчет (обработка)
 Контроль целостности файла конфигурации в процессе разработки и внесения изменений в конфигурацию. Аппаратные сбои некачественного компьютера во время сохранения файла конфигурации (1cv7.md) могут привести к частичному или полному его разрушению. Это подтверждает и анализ статистики обращений на линию консультаций по поводу разрушения файла конфигурации. Например, проведенное однажды исследование причин появления ошибки в файле конфигурации показало, что разрушение произошло на компьютере с неисправной оперативной памятью.
Приведенные ниже простые рекомендации помогут Вам избежать последствий аппаратных сбоев во время сохранения конфигурации:
  • проводите редактирование конфигурации и реструктуризацию    только на компьютере, в качестве которого Вы уверены;
  • постоянно имейте резервную копию информационной базы,    проверенную на отсутствие ошибок в файле конфигурации.
Для проверки отсутствия ошибок в файле конфигурации при применении версии 7.7 можно использовать встроенный в Конфигуратор режим тестирования и исправления ИБ. При этом все флажки в диалоге режима для ускорения процесса можно убрать и выбрать режим Только тестирование. В этом случае будет проверяться только файл конфигурации. Для версии 7.5 проверку можно осуществить при помощи режима Поиск во всех текстах со всеми взведенными флажками, причем какую именно строку искать - неважно, существенным является сам факт нормального завершения поиска.
После окончания проверки можно сделать новую резервную копию взамен существующей и хранить ее до следующего исправления конфигурации – это должно защитить Вас и Ваших клиентов от неприятностей, связанных с внезапной потерей работоспособности системы.
Еще одной причиной появления ошибок в файле конфигурации может быть попытка внесения изменений вручную, при помощи различных редакторов. Подобные попытки, скорее всего, приведут к тяжелым последствиям, вплоть до полной невозможности восстановить хотя бы частично файл конфигурации. Для внесения исправлений в конфигурацию пользуйтесь предназначенным для этого средством - режимом запуска Конфигуратор.
В заключение, хотелось бы отметить еще один аспект, связанный с целостностью информационной базы в целом. Файл конфигурации, а точнее состав содержащихся в нем метаданных, полностью определяет структуру таблиц информационной базы (но не наоборот). Можно сказать, что файл конфигурации является основой ИБ. Поэтому совершенно недопустима попытка копирования файла, содержащего желаемую конфигурацию, в каталог, содержащий желаемые данные, находящиеся в таблицах ИБ. Копируемый файл подразумевает некую структуру таблиц, которая практически наверняка не совпадет с реальной. Это приведет к нарушению целостности ИБ и, как следствие, к потере работоспособности, хотя и сам файл конфигурации и таблицы по отдельности могут не содержать ни единой ошибки. К сожалению, такое случается, когда разработка конфигурации идет параллельно с работой пользователей. Разработчик конфигурации приносит новый вариант и просто копирует его в каталог информационной базы, а это недопустимо по изложенным выше причинам. Для осуществления параллельной разработки реализован специальный режим Конфигуратора - Загрузка измененной конфигурации.
Размер файла внешнего отчета Данный раздел представляет интерес, прежде всего, для разработчиков, создающих внешние отчеты для массового тиражирования. В разделе приводится рекомендация, каким образом можно уменьшить размер файла внешнего отчета.
Диалоги форм внешних отчетов, как и любые другие диалоги форм, могут содержать поля ввода, имеющие не только базовый тип (строка, число, дата), но и тип любого типообразующего элемента метаданных (справочника, документа, перечисления и т.д.), из числа определенных в конфигурации, являющейся текущей во время создания этого элемента диалога. В связи с этим файл внешнего отчета содержит необходимую информацию о типообразующих элементах метаданных текущей конфигурации. Эта информация используется при загрузке формы внешнего отчета во время работы с конфигурацией, отличной от той, в которой внешний отчет создавался. Она служит для привязки типа данных, связанного с полем ввода диалога к одноименному, т.е. имеющему совпадающий идентификатор, элементу метаданных текущей конфигурации. Размер информации о типообразующих элементах метаданных конфигурации напрямую зависит от их количества в конфигурации и иногда может приводить к необоснованному увеличению размера файла внешнего отчета. Чтобы этого избежать, существует возможность создавать внешние отчеты, загрузив или
специально создав конфигурацию, имеющую лишь те типообразующие элементы метаданных, которые используются этим внешним отчетом. Причем создавать внутреннюю структуру элемента метаданных, т.е. создавать реквизиты для справочников, значения для перечислений и т.д., не является обязательным, т.к. в данном случае, значение имеет лишь идентификатор типообразующего элемента метаданных.
Например, форма диалог формы внешнего отчета имеет несколько полей ввода простых типов и одно поле ввода типа справочник Товары. Для того, чтобы внешний отчет имел минимальный размер и, в то же время, при загрузке во время работы в любой конфигурации, имеющей справочник Товары, тип данных поля ввода автоматически привязывался к данному справочнику, следует выполнить следующие действия:
  1. Создать новую информационную базу в пустом каталоге
  2. Войти в нее в режиме запуска Конфигуратор
  3. Создать новый справочник, задав ему идентификатор Товары, или скопировать из другой конфигурации.
  4. Создать новый внешний отчет и сохранить его.
Аналогично можно поступить и с уже существующим внешним отчетом, загрузив его в сокращенной (или пустой) конфигурации, формально что-то изменить, чтобы взвести флаг модифицированности, и затем сохранить.
Для внешних отчетов, не имеющих полей ввода, жестко привязанных к типу (например, тип справочник неопределенного вида не является жестко типизированным) или имеющих только поля базовых типов, рекомендуется сохранить внешний отчет, воспользовавшись запуском системы в режиме Конфигуратора в пустой конфигурации.
Размер файла конфигурации Данный раздел представляет интерес, прежде всего, для разработчиков, создающих дистрибутив тиражируемой конфигурации.
Периодически на линию консультаций поступают обращения, в которых пользователи 1С:Предприятия выражают удивление по поводу труднопрогнозируемого изменения размера файла конфигурации (1cv7.md). Можно процитировать такую, типичную выдержку из письма : После удаления из модуля достаточно большого фрагмента текста и сохранения конфигурации, мы ожидали некоторого уменьшения размера файла 1cv7.md. Однако, размер увеличился (!) на 350 байт. После этого в тот же модуль было добавлено несколько строк, но после сохранения размер файла не изменился. Тщательный просмотр текста модуля и запуск в режиме 1С:Предприятие показывают, что изменения в тексте сохранены правильно, однако такое поведение файла 1cv7.md наводит на мысли о возможных ошибках в нем. Как вы можете прокомментировать такую ситуацию?.
Такое поведение файла конфигурации является НОРМАЛЬНЫМ. Дело в том, что используемая для работы с файлом конфигурации в 1С:Предприятии технология позволяет рассматривать его, как набор фрагментов, каждый из которых хранит свою часть данных о конфигурации. Такой подход позволяет в ряде случаев сократить время на сохранение конфигурации, т.к. переписывается не весь файл целиком, а только его фрагменты, хранящие информацию о тех частях конфигурации, которые реально были изменены в процессе редактирования. Перезапись фрагмента состоит из записи обновленной информации в специально отведенное дополнительно под нее место в файле конфигурации и отметке того места, где хранилась устаревшая информация, как свободного. Таким образом, внутри файла 1cv7.md образуются пустоты, которые могут быть использованы при последующих записях информации об этой же или какой-либо другой части конфигурации, т.е. происходит фрагментация файла конфигурации.
Заметим, что, если при редактировании конфигурации были внесены изменения, которые могли потребовать реорганизацию информационной базы, то при сохранении файл конфигурации создается с нуля и в результате не является фрагментированным. Характерным признаком этого является появление сообщения о том, что при сохранении метаданных будет произведен анализ сделанных изменений и, в случае необходимости, реорганизация информационной базы.
Для того, чтобы принудительно дефрагментировать файл конфигурации, рекомендуется сделать загрузку измененной конфигурации, указав в качестве загружаемого файл конфигурации текущей информационной базы.
Использование синонимов объектов метаданных    При создании объекта метаданных  рекомендуется сразу указывать синоним.
В качестве синонима обычно используется краткое, но понятное пользователю обозначение объекта метаданных. Синоним следует задавать, если идентификатор объекта метаданных имеет большую длину или включает несколько слов. В последнем случае в синониме обычно те же слова, которые заданы в идентификаторе слитно, указываются через пробел или через точку.
   Ввод синонима сразу при создании объекта метаданных целесообразен потому, что система использует введенный синоним при автоматическом формировании различных элементов интерфейса конфигурации.
   Например, если создать новый вид документов и указать для него синоним, то при включении в меню пользовательского интерфейса команды ввода этого документа в качестве названия пункта меню будет подставлен именно синоним. А если синоним не будет указан, то в качестве названия пункта меню будет подставлен идентификатор и вероятнее всего название придется исправлять. Аналогично, если при создании реквизита документа указать синоним, то он будет использован системой при вставке реквизита в форму документа для подстановки имени реквизита шапки или заголовка колонки реквизита табличной части.
Использование шаблонов фрагментов модулей Рекомендации по использованию шаблонов фрагментов модулей При интенсивной разработке конфигураций весьма полезным инструментом является механизм шаблонов. Он позволяет создать заготовки фрагментов модулей, которые затем будут использоваться при написании алгоритмов. В этом разделе приводятся некоторые рекомендации по созданию и использованию шаблонов.
Для специалиста, работающего с несколькими конфигурациями, рекомендуется установить единый файл шаблонов для различных конфигураций. Это имя файла указывается в параметрах системы (меню Сервис - Параметры – закладка Синтакс-Помощник - поле Файл шаблонов). Если значение этого параметра установлено, то для всех конфигураций на данном компьютере будет использоваться единый набор шаблонов. В этом случае создание нового шаблона для часто используемой конструкции будет более оправдано, так как его можно будет использовать во всех конфигурациях.
При разработке шаблонов рекомендуется разбивать их на группы. Команда Новая группа вызывается из меню Действия или из контекстного меню окна редактирования списка шаблонов.
Для некоторых шаблонов имеет смысл задать строку в поле Заменять. В этом случае шаблон будет автоматически вызываться при наборе в тексте указанного слова. Однако эту установку следует использовать осмотрительно, так как если задать слово, которое часто применяется в различных конструкциях, которые не имеют отношения к данному шаблону, то автоматический вызов будет мешать набору модулей.
Из всех шаблонов можно выделить 10 шаблонов, которые будут включаться в контекстное меню при редактировании текстов модулей. Разумеется, признак Включать в меню имеет смысл устанавливать для часто используемых шаблонов. Признак Включать в меню задается только для тех шаблонов, для которых указана строка Заменять.
При создании шаблонов с переменной частью рекомендуется использовать управляющие конструкции, которые позволяют организовать ввод переменных частей шаблона при его использовании. Для вставки в шаблон управляющей конструкции следует воспользоваться контекстным меню, меню Действия или клавишами  Ctrl+Shift+C. Основная управляющая конструкция Произвольный запрос позволяет ввести строку, которая будет помещена в том месте шаблона, в котором начинается управляющая конструкция. Рекомендуется задавать в управляющей конструкции подсказку. Это облегчит использование шаблона. При использовании конструкции запроса в шаблоне существует возможность указать в тексте шаблона два и более раз одну и ту же конструкцию (с одной и той же подсказкой). В этом случае запрос будет выдан только один раз, а его результат будет помещен во все места шаблона, в которых указан данный запрос.
В большинстве шаблонов имеет смысл также разместить управляющую конструкцию Установка курсора. Она будет определять то положение, в которое будет помещен текстовый курсор после ввода шаблона. Использование этой конструкции позволит избежать дополнительных манипуляций курсором при использовании шаблона.
Весьма эффективным средством при использовании шаблонов является применение управляющих конструкций Выбор метаданного. Это позволяет создавать шаблоны, при использовании которых будут выбираться объекты метаданных и подставляться в формируемый шаблоном фрагмент модуля. Например, это позволяет сделать шаблон, выполняющий обход справочника. При использовании данного шаблона достаточно будет выбрать из списка справочников нужный вид и в модуль будет вставлен фрагмент, выполняющий обход справочника выбранного вида.
Отдельной управляющей конструкцией является Форматная строка. Она позволяет существенно упростить задание форматной строки, так как представляет все возможные варианты ее заполнения в диалоговой форме. Эту конструкцию используют в основном для создания шаблона, формирующего собственно вызов функции Формат.
При создании шаблонов следует учитывать, что управляющие конструкции позволяют вставить непосредственно вводимую или выбираемую строку, а все окружение вставляемой конструкции должно быть задано непосредственно в шаблоне. Например, если вставляется управляющая конструкция для подстановки вида документа в функцию СоздатьОбъект, то в шаблоне должно быть указано и слово Документ и точка и двойные кавычки, а вставляться будет только собственно идентификатор вида документа.
Заметим, что некоторые конструкции языка можно не выносить в шаблоны, а использовать соответствующие пункты Синтакс-Помощника. Например, из Синтакс-Помощника можно вставить практически все предопределенные процедуры. Создание аналогичных шаблонов целесообразно либо для сокращения времени поиска необходимой конструкции, либо для дополнения вставляемого фрагмента по отношению к тому, который содержится в Синтакс-Помощнике.
Расположение файла внешнего отчета При открытии в Конфигураторе внешнего отчета через список последних открытых файлов в меню Файл, иногда требуется убедиться, что для редактирования открывается именно тот файл, который необходим. Если посмотреть на заголовок окна открытого внешнего отчета, то до первого сохранения этого отчета в данном сеансе работы с ним в заголовке окна выдается  полный путь к файлу отчета (после сохранения - только имя файла).
Поиск нужного объекта в пользовательском интерфейсе Одна из задач, стоящих перед разработчиком конфигурации, - создание пользовательского интерфейса (или набора таких интерфейсов для разных категорий пользователей).
При разработке пользовательских интерфейсов для сложных конфигураций, содержащих большое число объектов, одна из типичных проблем, которую приходится решать, - определение того, включен ли уже какой-либо объект метаданных в пользовательский интерфейс, или еще нет.
Простым просмотром меню или панелей инструментов такую задачу зачастую не решить. Дадим несколько советов, которые позволят облегчить процесс поисков.
Чтобы определить, включен ли интересующий вас объект метаданных - справочник, документ, отчет, журнал документов - в какой-либо интерфейс, попробуйте создать в этом же интерфейсе команду для работы с этим объектом метаданных.
Удобно это делать в редакторе меню. Откройте любое меню верхнего уровня и дважды щелкните мышью по служебному элементу новый…. В палитре свойств заполните поле Объект, выбрав интересующий вас объект метаданных. Если для выбранного объекта метаданных существует несколько команд для работы с ним - укажите одну из них в поле Команда. Теперь нажмите кнопку Обновить.
Если указанный объект уже присутствует в меню, будет выдано сообщение Данное меню уже содержит аналогичную команду. Можно нажать кнопу Отмена, чтобы отказать от добавления нового элемента меню: мы убедились что интересующий нас объект метаданных уже присутствует в пользовательском интерфейсе.
Однако, если для объекта метаданных предусмотрены несколько вариантов заполнения поля Команда (несколько команд вызова из меню), то успешное включение объекта метаданных в меню может еще ничего не означать - возможно, что в меню уже присутствует другая команда для работы с этим же объектом метаданных.
Чтобы определить это, воспользуйтесь другим приемом.
Для пользовательского интерфейса, в котором требуется искать объект метаданных, создайте временный подчиненный интерфейс с любыми свойствами, и откройте его для редактирования. Подчиненный интерфейс содержит все команды из интерфейса родителя, отсортированные в алфавитном порядке: сначала по типам объектов метаданных, внутри типов - по идентификаторам объектов, затем - по командам для работы с объектом, а если все это одинаковое - то по параметрам команд.
Таким образом, можно легко найти и интересующий вас объект метаданных, и увидеть все команды для работы с этим объектом.
Следует напомнить, что редактировать вы все равно будете интерфейс-родитель, а подчиненный интерфейс, пока не закончена разработка, можно не удалять, а использовать для контроля.
Определение количества строк модулей в конфигурации Иногда у разработчика конфигурации или специалиста, анализирующего какую либо конфигурацию, возникает необходимость оценки размера конфигурации. В данном случае под размером подразумевается не размер файла 1cv7.md, а объем прикладного решения, которое представляет собой конфигурация. Например, это может быть необходимо для косвенной оценки сложности конфигурации или трудоемкости ее поддержки и модификации.
Наиболее очевидным показателем объема конфигурации является количество объектов метаданных, однако это не всегда позволяет оценить сложность их реализации. Во многом сложность модификации и сопровождения конфигурации зависит от объема алгоритмов написанных на встроенном языке 1С:Предприятия. Для того чтобы оценить объем алгоритмов можно воспользоваться следующей методикой.
В режиме запуска Конфигуратор следует воспользоваться режимом поиска во всех текстах (меню Конфигурация - Поиск во всех текстах). В поле Искать в следует включить только флажок Модулях, а в поле Искать: ввести символ ;. Далее следует собственно выполнить поиск. При этом будут проанализированы все модули конфигурации и подсчитано число символов ;.
Разумеется, не все строки модулей кончаются символом ;, а иногда в одной строке может быть несколько таких символов. Однако полученное число можно считать приблизительной оценкой количества строк и использовать для оценки объема конфигурации.
Следует заметить, режим поиска во всех текстах имеет ограничение по количеству отображаемых вхождений строки поиска. То есть с некоторого момента (после 32000 вхождений) найденные строки не будут отображаться, однако общее число вхождений будет подсчитано и выдано в окне результатов поиска.
Особенности работы с базовыми версиями 1С:Предприятия Среди продуктов системы программ 1С:Предприятие существуют Базовые версии:
  • 1С:Налогоплательщик 7.7
  • 1С:Аспект 7.7 Компактная торговая система
  • 1С:Бухгалтерия 7.7 (базовая версия)
  • 1С:Бухгалтерия 7.7 Базовая версия для Украины
  • 1С:Зарплата и кадры (базовая версия)
  • 1С:Платежные документы 7.7
  • 1С:Деньги 7.7
  • 1С:Воинская часть 7.7
Особенностью данных продуктов является отсутствие режима конфигурирования.
Технологически это организовано следующим образом.
В комплект поставки данных продуктов входят специальные конфигурации, в которых проставлен признак, обеспечивающий возможность работы 1С:Предприятия с этими конфигурациями в качестве Базовой версии. Данный признак проставляется фирмой 1С. Работая с такой конфигурацией 1С:Предприятие не выполняет стандартную процедуру проверки ключа аппаратной защиты. Для некоторых конфигураций вместо этого применяется защита по ключевым словам документации. При работе 1С:Предприятия в режиме базовой версии для изменение конфигураций не допускается. Исключение составляет загрузка измененной конфигурации, полученной из фирмы 1С в качестве обновления.
При использовании данных конфигураций  с обычной версией 1С:Предприятия (при установленном ключе аппаратной защиты) они могут быть изменены также, как и обычные конфигурации. Однако при записи конфигурации признак базовой конфигурации будет стерт и конфигурация не будет в дальнейшем работать с базовой версией 1С:Предприятия.
Таким образом, после покупки базовой версии пользователь в любой момент может приобрести версию 1С:Предприятия допускающую возможность конфигурирования, и начать модифицировать имеющуюся у него конфигурацию.
В качестве базовой версии 1С:Предприятия выступают программные файлы обычной несетевой версии (1cv7l.exe). Функционирование в режиме базовой версии обеспечивается при работе со специальной конфигурацией при отсутствии ключа аппаратной защиты.
С организациями, выполняющими разработку тиражных конфигураций фирма 1С может заключить специальный договор, предоставляющий возможность продажи одной из базовых версии 1С:Предприятия с конфигурацией разработанной этой организацией. Этот договор рассчитан на случаи, когда разработанная конфигурация предназначена для массового использования с базовой версией 1С:Предприятия.

Замер производительности для отладки модулей

   В некоторых случаях при разработке и отладке конфигурации возникает необходимость расследования случаев, когда модули встроенного языка ведут себя не совсем так, как задумывалось разработчиком.
   В таких случаях помощь может оказать режим Замер производительности Отладчика системы 1С:Предприятие. С помощью этого режима можно не только определить производительность отдельных фрагментов алгоритма, но и понять какие операторы модулей реально выполнялись к конкретной ситуации и какое число раз. Такая информация может быть весьма полезна и получить ее другим путем практически невозможно. Фактически, выполнив замер производительности и открыв затем модуль можно посмотреть те участки в которые попадало управление. Например, с помощью данной методики можно очень быстро ответить на вопрос, какие процедуры глобального модуля вызывались при проведении документа.
   Разумеется, исследование процесса выполнения модуля с помощью пошагового выполнения в Отладчике также может помочь понять в какие потаенные места заходил поток управления при выполнении модуля, но при этом сложно посчитать число раз, которое выполнялся каждый отдельный оператор и, кроме того, режим Замер производительности позволяет получить указанную информацию с относительно небольшими временными
затратами.
Сохранение результатов замера производительности Режим Замер производительности является одним из самых эффективных способов отладки конфигураций, работающих в реальных условиях. В некоторых случаях весьма полезной  может оказаться возможность сохранения результатов замера производительности.
Обычно сохранение результатов применяется до того, чтобы сравнить результаты работы различных вариантов алгоритма или вернуться к рассмотрению результатов позже.
Кроме того, этот режим позволяет специалисту, разрабатывающему конфигурацию, обеспечить анализ ситуаций возникающих у пользователей в его отсутствие. Администратор системы или ответственный пользователь может выполнять замер производительности и записывать его в файл (меню Файл - Сохранить) для последующего анализа разработчиком. Такая практика может применяться как для анализа случаев медленной работы отдельных алгоритмов, так и для трассировки работы модулей при анализе ошибочных ситуаций (получения списка строк в которые попадало управление).
Кроме сохранения результатов замера производительности в специальном файле с расширением pff, который открывается в режиме запуска Отладчик (меню Файл - Открыть), результаты замера могут быть записаны и в текстовом виде. Для этого следует выделить несколько строк или все строки в окне показа результатов замера и выполнить сохранение в буфере обмена Windows с помощью пункта Запомнить в меню Действия или контекстном меню. Строки замера производительности запоминаются в буфере обмена в текстовом формате и могут быть вставлены в любой текстовый файл. Это позволяет выполнять анализ результатов замера и без запуска 1С:Предприятия.
Анализ результатов замера производительности    При оптимизации конфигураций работающих в разделенном режиме на первый план выступает задача минимизации времени доступа к данным информационной базы. В этом существенную помощь оказывает использование режима Замер производительности.
   Обращение к информационной базе выполняется в алгоритмах вызовами определенных методов объектов встроенного языка 1С:Предприятия. При просмотре результатов замера для анализа времени доступа к информационной  базе рекомендуется отключать флажок Для вызовов процедур и функций включать время выполнения. Если флажок выключен, то при установленной сортировке по времени работы на первый план, как правило,  выходят строки выполняющие обращение к информационной базе. Это позволяет достаточно быстро оценить возможные пути оптимизации алгоритма, например, устранение дублирующихся обращений или применение более производительных средств.
   Использование выделения отдельных строк или групп строк в окне просмотра результатов замера позволяет просуммировать выполнение отдельных операторов, и получить наиболее точную картину соотношения влияния различных фрагментов алгоритма на общее время выполнения.
Просмотр в отладчике значений типа СписокЗначений и ТаблицаЗначений В некоторых случаях в процессе отладки необходимо просмотреть содержимое объектов типа СписокЗначений или ТаблицаЗначений. Специальных средств в Отладчике системы 1С:Предприятие для этого не существует. Разумеется, можно с помощью вызова метода ПолучитьЗначение просматривать отдельные значения, но это не всегда удобно. В качестве решения этой задачи можно использовать в Отладчике при вычислении выражения методов ВыбратьЗначение и ВыбратьСтроку. При вызове этих методов в самом отлаживаемом экземпляре 1С:Предприятия выдается диалог, содержащий соответственно список значений или таблицу значений. Разумеется, для его просмотра следует переключиться в 1С:Предприятие, а после просмотра закрыть диалог и переключиться обратно в Отладчик.

Особенности работы с базами данных в формате SQL

Проблема решается следующим образом:
1. С помощью монитора пользователей убедится, что с информационной базой никто не работает.
2. Запустить Enterprise Manager SQL Server и закрыть зависшее соединение (Kill process).
3. Средствами операционной системы убедиться,что файл в каталоге информационной базы 1Cv7.$ui никем не открыт. Если существуют пользователи открывшие этот файл, то следует выполнить отключение  доступа (Disconnect) пользователей от данного файла.
4. Запустить 1С:Предприятие.
Не очищается полностью журнал транзакций  на MS SQL Server 6.5 После операций типа пересчет ссылок, итогов и т. п., при которых происходит массированное изменение содержимого базы данных не очищается полностью журнал транзакций (transaction log) на MS SQL Server 6.5. В случае использования MS SQL Server 7.0 данная проблема отсутствует.
Для того, чтобы журнал очистился надо перед выполнением команды резервного копирования журнала транзакций DUMP TRANSACTION выполнить команду:
DBCC CHECKTABLE(SYSLOGS)
После этого  журнал будет очищен при выполнении DUMP TRANSACTION.
Особенности работы 1С:Предприятия в монопольном режиме с  MS SQL Server 7.0 Если система 1С:Предприятие для SQL используется совместно с MS SQL Server 7.0, то при работе 1С:Предприятия в монопольном режиме может наблюдаться следующий эффект:  При попытке доступа со стороны какой-либо программы к базе данных в среде MS SQL Server 7.0, с которой уже работает 1С:Предприятие, 1С:Предприятие может аварийно завершаться с сообщением об ошибке:
SQL State: 42000
Native: 924
Message: [Microsoft][ODBC SQL Server Driver][SQL Server]Database 'DB' is
already open and can only have one user at a time
или
SQL State: 42000
Message: [Microsoft][ODBC SQL Server Driver][SQL Server]SELECT permission
denied on column ...
Причина этого обусловлена особенностями поведения SQL Server 7.0.
Если какое-либо приложение установило соединение и выполняет запрос к базе данных, размещенной в среде MS SQL Server 7.0 и находящейся  в режиме single user, то попытка из другого приложения  обратиться к этой же базе данных, приводит к тому, что запрос к базе данных, выполняемый первым приложением завершается ошибкой. Поэтому, не рекомендуется совмещать во времени регламентные процедуры MS SQL Server 7.0 (например выполнение backup, проверку целостности и т. п.) и работу 1С:Предприятия в монопольном режиме (пересчет итогов, перепроведение документов и т.п.).
MS SQL Server 6.5 не имеет данной особенности.

Особенности работы с 1С:Предприятием в операционных системах Windows NT/2000

Значительная часть пользователей (особенно начинающих) не применяют на практике многие полезные возможности 1С:Предприятия из-за того, что они не знают  о них или не умеют их правильно применять. Например, бухгалтер или продавец может постоянно работать с 1С:Предприятием таким образом что нерационально настроенные размеры окон будут создавать ему массу неудобств. Очевидно, что специалист, выполняющий внедрение и администрирование системы может оказать пользователям значительную помощь, обратив их внимание на наличие той или иной возможности, упрощающей их повседневную работу.
Очевидно, что большинство приемов необходимых пользователям хорошо известно специалистам. В данном разделе мы хотим подчеркнуть важность такой просветительской работы.
Разумеется, основным источником информации при освоении 1С:Предприятия должна служить документация.
При начале работы  с системой, можно обратить внимание пользователей на рекомендации, выдаваемые системой в Советах дня. Заметим, что файл, содержащий советы дня для режима запуска 1С:Предприятие (1cv7Main.tip) может быть помещен в каталог с информационной базой и отредактирован. То есть вы можете внести в него собственные рекомендации, касающиеся не только общих возможностей системы, но и конкретной конфигурации.
Далее следует обратить внимание пользователей на все основные имеющиеся в системе приемы для получения необходимой информации:
  • меню действие и контекстное меню;
  • режим помощь;
  • встроенное описание;
  • подсказки к элементам диалога и кнопкам панели инструментов;
Заметим, что из перечисленного списка пользователи обычно забывают обращаться к меню действия. Даже опытные специалисты не всегда осведомлены обо всех системных функциях, доступных в различных режимах 1С:Предприятия.
Рекомендуется привлечь внимание пользователей к режиму Параметры. Зачастую пользователи работают достаточно продолжительное время с системой и не используют сервисные возможности, предоставляемые системой в режиме Параметры.
Многие рекомендации, которые отвечают наиболее типовым потребностям пользователей, приведены на диске ИТС в разделе Практические рекомендации по работе с 1С:Предприятием. Специалистам, работающим с пользователями, можно рекомендовать ознакомиться с содержанием этого раздела.
Выпуски 1С:Предприятия (Релизы). В течение жизненного цикла  программных продуктов системы 1С:Предприятие фирмой 1С в них вносятся различные изменения, исправляются обнаруженные недостатки и ошибки. Периодически производится очередной выпуск продуктов 1С:Предпряития. Такой выпуск называется релизом (англ. release - выпуск).
Выход очередного релиза относится ко всем компонентам системы 1С:Предприятие, а также к отдельным продуктам типа (1С:Платежные документы, 1С:Налогоплательщик). Релизы имеют единую нумерацию. Исключение составляют внешние компоненты, разрабатываемые фирмой 1С и компонента Управление распределенными информационными базами, которые имеют независимую нумерацию релизов и которые могут использоваться с различными релизами 1С:Предпряития. Однако при выходе новых релизов этих компонент их также рекомендуется обновлять. Компонента Управление распределенными информационными базами будет автоматически обновляться при установке нового релиза любого из программных продуктов системы 1С:Предприятие, однако отдельная установка этой компоненты не обновит другие компоненты системы.
Заметим, что типовые конфигурации программных продуктов системы 1С:Предприятие имеют отдельный жизненный цикл. Каждая типовая конфигурация имеет свою нумерацию релизов. Однако замена релиза типовой конфигурации не может быть выполнена повторной установкой. Она может производиться только в режиме объединения конфигурация (в режиме загрузки измененной конфигурации в базовых версиях).
Наиболее простым способом определения релиза установленного комплекта 1С:Предприятия является вызов режима О программе в меню Помощь. Номер релиза выводится в верхнем правом углу.
Программные файлы (.EXE, .DLL), входящие в состав каждого очередного релиза отличаются от аналогичных файлов предыдущих релизов. Номер релиза для системы 1С:Предприятие 7.7 обозначается как 7.NNN, где NNN - трехзначное  число. Для того, чтобы можно было отличить программные файлы, входящие в состав различных релизов, в каждый из файлов заносится метка версии, соответствующая номеру релиза.
Для того, чтобы установить номер релиза системы 1C:Предприятие 7.7 следует взглянуть на метку версии одного из перечисленных ниже файлов:
  • ACCOUNT.DLL
  • BASIC.DLL
  • BKEND.DLL
  • BLANG.DLL
  • CONFIG.DLL
  • EDITR.DLL
  • MONITOR.DLL
  • MOXEL.DLL
  • MXL2XL.DLL
  • RGPROC.DLL
  • SALARY.DLL
  • SEVEN.DLL
  • TRACER.DLL
  • TRADE.DLL
  • TXTEDT.DLL
  • USERDEF.DLL
  • V7CHART.DLL
  • 1CV7.EXE
  • 1CV7L.EXE
  • 1CV7S.EXE
Для просмотра версии программного файла следует запустить Проводник (Windows Explorer), выделить интересующий файл, нажать на нем правую кнопку мышки и в появившемся меню выбрать пункт Свойства (Properties) и переключиться на закладку Версия (Version).
Программные файлы, входящие в состав одного релиза системы 1С:Предприятие полностью соответствуют друг другу. В одной установке системы (в одном каталоге) не допускается смешивание программных файлов из разных релизов системы. Если установка какого-либо из программных продуктов системы 1С:Предприятие производится в каталог, в который уже был  установлен один из предыдущих релизов системы, все программные файлы будут обновлены до состояния соответствующего релизу устанавливаемого продукта. Обновлены будут все программные файлы, независимо от состава ранее установленных компонент и самого устанавливаемого продукта. Например, если в каком либо каталоге уже были установлены компоненты Оперативный учет и Расчет, и поверх производится установка более нового релиза компоненты Оперативный учет, то в результате каталог будет содержать обновленные версии программных файлов относящихся как к компоненте Оперативный учет так и  к компоненте Расчет.
При работе с сетевой версией системы 1С:Предприятие или версией для SQL администратору системы следует обеспечить работу всех пользователей с одним и тем же релизом 1С:Предприятия. Наиболее простой путь для достижения этого - установить систему таким образом, чтобы программные файлы находились только на сервере. Это гарантирует работу всех пользователей с одним релизом системы.
Синхронизацию релизов 1С:Предприятия следует выполнять также для различных узлов распределенной информационной базы и для специалистов выполняющих конфигурирование системы параллельно с работой пользователей с последующей загрузкой измененной конфигурации.
Состав информационной базы Состав информационной базы В данном разделе приводится перечень и описание наиболее важных для системы 1С:Предприятие файлов, размещаемых в каталоге информационной базы. Указанная информация приводится для того, чтобы дать специалистам осуществляющим конфигурирование и администрирование 1С:Предприятия лучшее представление о внутренней организации информационных массивов. Например, она может быть использована для оценки использования ресурсов теми или иными объектами информационной базы или механизмами системы.
Создавать решения построенные на манипулирование данными, хранящимися в файлах информационной базы системы 1С:Предприятия средствами не штатными для 1С:Предприятия категорически не рекомендуется . Это объясняется сложностью поддержания логической целостности объектов информационной базы и возможностью изменения структур данных в последующих версиях. А также особенностями организации таких механизмов 1С:Предприятия, как "Управление распределенными информационными базами", возможностью хранения таблиц базы данных как в файлах DBF/CDX так и в среде сервера баз данных MS SQL Server и другими подобными причинами.
Итак в каталоге информационной базы размещаются:
Файл конфигурации (1 CV7.MD) Файл словаря данных (1С V7.DD или 1 CV7.DDS в зависимости от формата хранения таблиц базы данных)
Файл списка пользователей ( USRDEF\USERS.USR)
Файлы таблиц и индексов базы данных
В файле конфигурации (1 CV7.MD ) находится конфигурация системы: метаданные, интерфейсы и права.
Имя файла словаря данных зависит от формата хранения таблиц базы данных. В случае, если для хранения таблиц базы данных используются файлы DBF/CDX , словарем данных является файл 1 CV7.DD . Если же таблицы базы данных размещаются в среде MS SQL Server , то имя файла словаря данных - 1 CV7.DDS . Словарь данных содержит описание структуры таблиц и индексов базы данных системы 1С:Предприятие. Для MS SQL Server словарь данных содержит также описание хранимых процедур.
Файл списка пользователей - USERS.USR размещается в подкаталоге USRDEF каталога информационной базы. Данный файл содержит список пользователей с указанием для каждого пользователя набора прав, интерфейса и другой информации, связанной с пользователем. В случае, если для хранения таблиц и индексов базы данных используются файлы DBF/CDX , то указанные файлы также размещаются в каталоге информационной базы. Каждой из таблиц соответствует файл . DBF . Если у таблицы имеются индексы, то к ней также относится соответствующий файл CDX . Файлы . DBF и . CDX , относящиеся к одной таблице имеют одинаковые имена. Например, таблице 1 SJOURN соответствуют файлы 1 SJOURN.DBF и 1 SJOURN.CDX.
Ниже приведен перечень таблиц, которые могут входить в базу данных системы 1С:Предприятие.
Файлы Назначение
1SUSERS Системная таблица: отслеживание числа соединений с базой данных, счетчик изменений данных пользователями.
1SSYSTEM Системная таблица: содержит общие параметры информационной базы (точку актуальности, рассчитанный период бухгалтерских итогов, периодичность оперативных итогов и т. п.).
1SCONST Содержит значения констант, периодических реквизитов справочников и бухгалтерских счетов.
1SJOURN Содержит заголовки всех документов (внутренний идентификатор, номер, дату, время, общие реквизиты, по которым установлен отбор)
1SCRDOC Содержит вхождения документов в графы отбора, списки подчиненных документов, вхождения документов в общие журналы, для которых определен состав документов.
1SDNLOCK Содержит временный список номеров документов, которые в данный момент вводятся, для автоматической нумерации документов с учетом вводимых.
1SUIDCTL Используется для дополнительного контроля уникальности внутренней идентификации объектов (документов, справочников, бухгалтерских счетов).
1SBLOB Содержит значения реквизитов справочников, документов, счетов имеющих тип "Строка неограниченной длины". Также содержит описания шаблонов типовых операций.
SC* Содержит данные справочника конкретного вида. Каждый справочник хранится в отдельном файле.
DH* Содержит данные реквизитов шапки и общих реквизитов без признака "Отбор" документа конкретного вида. Создается при наличии у документа соответствующих реквизитов.
DT* Содержит данные реквизитов табличной части документа конкретного вида. Создается при наличии у документа соответствующих реквизитов.
1SACCS Содержит список бухгалтерских счетов всех планов счетов .
1SOPER Содержит данные бухгалтерских операций (сумму, содержание, дополнительные реквизиты). Содержит одну строку на документ, по которому создана операция.
1SENTRY Содержит бухгалтерские проводки.
1SBKTTLC Содержит рассчитанные бухгалтерские итоги оборотов между синтетическими счетами.
1SBKTTL Содержит рассчитанные бухгалтерские итоги остатков и оборотов по синтетическим счетам и объектам аналитики.
1SCORENT Содержит список корректных проводок.
1SACCSEL Содержит вхождения проводок в отборы по бухгалтерским счетам.
1SSBSEL Содержит список вхождений проводок в отборы по субконто.
1STOPER Содержит список типовых операций.
RA* Содержит движения регистра конкретного вида.
RG* Содержит итоги регистра конкретного вида (остатки для регистров остатков, обороты для оборотных регистров).
CJ* Содержит данные журнала расчетов конкретного вида.
CJPROP Содержит свойства журналов расчетов (расчетный период, глубина просмотра и т.п.)
CL Содержит данные календарей всех видов.
1SUPDTS Системная таблица компоненты "Управление распределенными ИБ". Содержит таблицу регистрации изменений. Создается только для распределенных ИБ.
1SDWNLDS Системная таблица компоненты "Управление распределенными ИБ". Содержит таблицу регистрации произведенных выгрузок изменений. Создается только для распределенных ИБ.
1SDBSET Системная таблица компоненты "Управление распределенными ИБ". Содержит список информационных баз, входящих в распределенную ИБ. Создается только для распределенных ИБ.
В случае, если таблицы базы данных системы 1С:Предприятие размещаются в среде MS SQL Server , то в каталоге информационной базы появляется файл 1 CV7.DBA , содержащий ссылку на соответствующую базу данных, находящуюся на сервере баз данных. Состав таблиц, хранимых в среде сервера баз данных практически идентичен приведенному выше составу файлов в формате DBF/CDX . Исключение составляет хранение строк неограниченной длины, которое в формате MS SQL Server не выделяется в отдельную таблицу.
Нехватка места на диске при выполнении загрузки/выгрузки данных. При выполнении операций  как полной загрузки и выгрузки данных, так и загрузки/выгрузки изменений при работе с распределенной ИБ, в каталоге информационной базы создаются временные файлы. Иногда размер этих временных файлов может быть весьма значительным (особенно при полной загрузке или выгрузке).
Если при загрузке информационной базы, где таблицы представлены в формате DBF/CDX в общем понятно, что диск, на который производится загрузка информационной базы должен иметь достаточно большой размер свободного места, чтобы разместить конфигурацию и все данные, то в случае загрузки ИБ, где таблицы базы данных размещаются в MS SQL Server или в случае выгрузки данных некоторые ошибки, вызванные нехваткой свободного  места на диске могут показаться загадочными. Между тем разгадка проста.
При загрузке данных в каталоге ИБ создается каталог UZNNNNNN (N - некоторая цифра). В данный каталог помещаются файлы извлеченные из файла переноса данных: 1CV7.MD, USERS.USR, 1CVDAT(1CV7.DAT в случае системы 1С:Предприятие 7.5). Файл 1CVDAT (1CV7.DAT) содержит данные, которые впоследствии будут помещены в таблицы базы данных.
При выгрузке данных в каталоге ИБ создается файл 1CVDAT (1CV7.DAT), в который переносятся данные, размещенные в таблицах базы данных.
Размер файла 1CVDAT (1CV7.DAT) пропорционален объему данных, размещаемых в таблицах базы данных и в случае размещения таблиц базы данных в файлах DBF/CDX может быть примерно рассчитан как сумма размеров всех файлов .DBF, в которых хранятся таблицы базы данных, умноженная на 0.7.
Работа с системой 1С:Предприятие в локальных сетях Данный раздел содержит набор рекомендаций по построению локальной сети, в которой используются сетевые версии системы 1С:Предприятие, работающие с базой данных в формате DBF/CDX.
При использовании сетевых версий системы 1С:Предприятие следует учитывать тот факт, что система держит одновременно открытыми значительное число файлов информационной базы и ведет с ними интенсивную работу, что может в значительной мере загружать ресурсы сети и сервера, на котором размещаются файлы информационной базы. Таким образом характеристики сети могут оказывать ощутимое влияние на производительность системы. Поэтому к выбору файл-сервера и проектированию сети для работы с системой 1С:Предприятие следует отнестись внимательно .
Физическая структура сети Сетевые версии системы 1С:Предприятие при интенсивной работе создают в сети довольно значительный трафик и этот факт следует учитывать при проектировании физической структуры сети. Использование высокопроизводительных сетей благоприятно сказывается на производительности системы 1С:Предприятие, особенно в тех случаях, когда с системой одновременно работает большое число пользователей.
На настоящий момент наибольшее распространение получили сети Ethernet (пропускная способность 10 МБит/с) и Fast Ethernet (100 МБит/с). Ethernet и Fast Ethernet могут комбинироваться в рамках одной локальной сети для обеспечения лучших характеристик. При выборе структуры и топологии сети следует учитывать, что для компьютеров, на которых будет работать 1С:Предприятие и, что еще важнее, для сервера, на котором размещается информационная база системы 1С:Предприятие должна быть обеспечена наилучшая пропускная способность сети.
Сети с меньшей пропускной способностью использовать не рекомендуется, так как они не могут обеспечить приемлемой производительности системы.
Файл-сервер Для размещения файлов информационной базы настоятельно рекомендуется использовать выделенный файл-сервер, работающий под управлением специализированной серверной операционной системы. Использование машин, работающих под управлением Windows 95/98 (или других настольных систем) в качестве файл-серверов системы 1С:Предприятие крайне нежелательно, так как эти системы не являются специализированными серверными операционными системами и не могут обеспечить приемлемой производительности даже в том случае, когда используется в режиме выделенного сервера.
Кроме того при использовании компьютеров, работающих под управлением Windows 95/98 в качестве файл-серверов следует учитывать, что данные операционные системы не позволяют держать одновременно открытыми с других рабочих станций более чем 1024 файла. На практике это означает, что число пользователей одновременно работающих с информационной базой, размещенной на компьютере, работающем под управлением Windows 95/98 ограничено. Можно примерно оценить максимальное число одновременно работающих пользователей для данного случая. Для этого надо разделить 1024 на число файлов *. DBF, *.CDX , созданных системой 1С:Предприятие в каталоге информационной базы. А если учесть, что в случае комплексной конфигурации таких файлов насчитывается более 600, то становится понятно, что использование Windows 95/98 в качестве файл-сервера не всегда физически возможно.
В настоящее время наиболее в качестве серверных операционных систем наиболее широко используются Novell NetWare 3. x,4.x и Microsoft Windows NT.
Особенности работы с серверами Novell NetWare Общепризнанно, что наиболее эффективным файл-сервером в настоящее время является Novell NetWare. Данная система обеспечивает наилучшие характеристики при совместном доступе к файлам со стороны большого числа пользователей и может быть рекомендована как серверная платформа для размещения информационных баз системы 1С:Предприятие. Однако не во всех случаях сервер под управлением NetWare способен сразу, без дополнительных действий по настройке, выполнять функции хранилища файлов информационной базы системы 1С:Предприятие. Главным образом, это связано с тем, что во время работы система 1С:Предприятие одновременно открывает на сервере значительное число файлов. Точное значение этого числа определяется конфигурацией. На практике же оно, как правило, не бывает меньше, чем 150. Если число файлов, одновременно открываемых системой 1С:Предприятие превышает максимально допустимое, то система аварийно завершит работу, выдав сообщение об ошибке открытия файла.
Ограничения на число открываемых файлов могут находиться как на стороне сервера, так и на стороне клиентской машины. На сервере число одновременно открываемых файлов зависит от значений следующих параметров:
  • Maximum File Locks
  • Maximum Record Locks
  • Maximum File Locks рer Connection
  • Maximum Record Locks per Connection
Параметр Maximum File Locks ограничивает максимальное число файлов, одновременно открываемых на файл-сервере. Значение параметра Maximum Record Locks как правило устанавливается как значение Maximum File Locks , умноженное на число, лежащее в диапазоне 2..4. Параметр Maximum File Locks per Connection ограничивает число файлов, одновременно открываемых на файл-сервере одной клиентской рабочей станцией. Аналогично, значение параметра Maximum Record Locks per Connection как правило устанавливается как значение Maximum File Locks per Connection , умноженное на 2..5. Значения указанных параметров могут быть установлены с помощью команды SET , задаваемой с консоли файл-сервера или, в случае использования Novell NetWare 4.1 и более старших версий, с помощью утилиты Server Manager.
Если в качестве рабочих станций при работе с файл-серверами Novell NetWare используются машины, работающие под управлением Windows NT , то никаких проблем, как правило, не возникает и никаких дополнительных настроек клиентских машин не требуется. Максимальное число файлов, которые могут быть одновременно открыты на сервере с одной рабочей станции определяется исключительно настройками файл-сервера. Необходимость в дополнительной настройке клиентской части при работе с файл-серверами Novell NetWare может возникнуть при использовании в качестве рабочих станций машин, работающих под управлением Windows 95/98. В этом случае могут иметь место два варианта. Если для связи с файл-серверами Novell NetWare используется клиентская часть, поставляемая в комплекте Windows 95/98, то никаких дополнительных настроек не требуется и максимально допустимое число открытых файлов определяется только установками сервера.
Если же для связи с файл-серверами Novell NetWare используется 32- bit Novell Client , то следует использовать версии 3.00 и старше, так как в более младших версиях также имеется жесткое ограничение на число одновременно открываемых на сервере файлов, вне зависимости от установок сервера (максимальное число одновременно открытых файлов не может превышать примерно 170-180). В случае использования 32- bit Novell Client 3.00 и более старших версий данное ограничение может быть преодолено. Д ля этого в свойствах Novell NetWare Client в закладке Advanced Settings надо д ля п араметра Use Extended File Handles установить з начение On. Д ля параметра File Cache Level следует уставить значение 1. Е сли указанные значения будут установлены, то для рабочей станции, работающей под управлением Windows 95/98, максимальное число одновременно открытых файлов на сервере Novell NetWare будет определяться только установками сервера. Правда, ограничение на число снимаются только для первого запущенного приложения, пытающегося открыть большое число файлов на сервере Novell NetWare . :Для последующих приложений ограничение продолжает действовать. То есть в той ситуации, когда на рабочей станции, работающей под управлением Windows 95/98 и оснащенной 32-bit Novell Client , запущен экземпляр системы 1С:Предприятие, открывший на сервере Novell NetWare значительное число файлов (например, более 600 в случае комплексной конфигурации), то второй экземпляр 1С:Предприятия, открывающий значительное число файлов на сервере, запустить на этой же рабочей станции уже не удастся.
Особенности работы с серверами Windows NT Как файл-сервер, MS Windows NT несколько уступает Novell NetWare по производительности и надежности, но имеет и ряд преимуществ. В частности, для работы с системой 1С:Предприятие, сервер, работающий под управлением Windows NT не требует никакой специальной настройки. Ограничением может считаться лишь то, что каждой из клиентских машин позволено открыть на сервере не более 2048 файлов. Но это число достаточно велико и на практике пользователи системы 1С:Предприятие этого ограничения не видят.
Однако, при работе с системой 1С:Предприятие следует с осторожностью относиться к загрузке файл-сервера Windows NT выполнением других задач, так как это может привести к ощутимому снижению производительности сервера. Данная рекомендация весьма актуальна, так как для операционной системы Windows NT имеется развитой набор различных серверных приложений (MS SQL Server, MS Internet Information Server и т. п.) и есть соблазн по максимуму загрузить машину, работающую в качестве файл-сервера системы 1С:Предприятие еще какой-нибудь полезной работой.
На производительности сервера, работающего под управлением Windows NT может пагубно сказаться даже такая кажущаяся мелочью деталь, как Screen Saver . Некоторые из них могут расходовать значительную часть ресурсов системы на рисование на экране различных затейливых изображений. Аналогично, не рекомендуется использовать файл-сервер, с которым работает 1С:Предприятие в качестве рабочего места пользователя, а также для выполнения фоновых задач, кроме тех случаев, когда это действительно необходимо.
Выбор сетевого протокола для связи с MS SQL Server При работе с системой 1С:Предприятие для SQL следует учитывать, что сетевой протокол, используемый для связи с сервером баз данных MS SQL Server может оказывать заметное влияние на производительность системы 1С:Предприятие. При установке на рабочие станции Microsoft Data Access или клиентской части MS SQL Server, для доступа к MS SQL Server по умолчанию выбирается сетевой протокол Named Pipes. Данный протокол не требует никаких дополнительных настроек и, как показывает практика, стабильно и надежно работает в самых различных конфигурациях сетей. Но у него есть и серьезные недостатки: он может сильно загружать сеть, мешая работе других пользователей и значительно проигрывает по производительности  другим протоколам (иногда до 4-5 раз), особенно, если в качестве рабочих станций
используются компьютеры, работающие под управлением операционных систем Windows 95/
Наиболее широко  для связи с MS SQL Server используются протоколы NWLink IPX/SPX и TCP/IP. По производительности данные протоколы почти не отличаются друг от друга (TCP/IP несколько быстрее) и выбор в пользу одного из них может быть сделан, исходя из конфигурации сети. Выбор рабочего протокола осуществляется с помощью SQL Client Configuration Utility (SQL Server 6.5 ) или
Client Network Utility(SQL Server 7.0 ).
Поэтому в случае жалоб на низкую скорость работы системы 1С:Предприятие для SQL необходимо убедиться, что для связи с MS SQL Server используется протокол, обеспечивающий нормальную производительность.
Особенности установки системы 1С:Предприятие. Задачей процесса установки является сделать возможным запуск системы 1С:Предприятие на компьютере пользователя. В процессе установки 1С:Предприятия производятся следующие действия:
  • на локальном диске компьютера пользователя (или на сетевом диске, доступном с компьютера пользователя) размещаются программные файлы системы 1С:Предприятие
  • в системный каталог Windows компьютера пользователя копируются (или в случае необходимости обновляются уже находящиеся там) системные файлы, необходимые для работы системы 1С:Предприятие
  • производятся необходимые изменения в системном реестре Windows компьютера пользователя
  • на компьютере пользователя в меню операционной системы вносятся пункты для запуска программ системы 1С:Предприятие
В зависимости от комплекта поставки допускается несколько вариантов установки системы 1С:Предприятие:
  • локальная установка
  • административная установка
  • сетевая установка
Локальная установка может быть выполнена для любого комплекта поставки и является единственно возможным вариантом для однопользовательских вариантов 1С:Предприятия При выполнении локальной установки выполняются все перечисленные выше действия.
Административная установка, строго говоря, является не установкой, а подготовкой к установке. Суть ее состоит в том, что на сервере локальной сети создается каталог, в который из дистрибутива 1С:Предприятия переносятся все необходимые файлы для того, чтобы путем запуска из этого каталога программы SETUP.EXE можно было выполнить процедуры локальной или сетевой установки 1С:Предприятия. При этом не производится никаких изменений в меню, системном каталоге и реестре Windows как сервера, так и компьютера, на котором запущена программа установки.
Сетевая установка может быть выполнена только путем запуска программы SETUP.EXE из каталога, созданного в процессе административной установки. Сетевая установка отличается от локальной главным образом тем, что в процессе сетевой установки на компьютер пользователя не копируются программные файлы системы 1С:Предприятие, а пункты меню для запуска программ 1С:Предприятия настраиваются таким образом, что при запуске исполняемые файлы (.EXE, .DLL) берутся из каталога сервера локальной сети, из которого запускалась программа SETUP.EXE для выполнения сетевой установки.
Какой же из вариантов установки является предпочтительным?
(Понятно, что данный вопрос применим только к сетевым вариантам 1С:Предприятия).
Локальная установка является наиболее простым вариантом. В этом случае на каждом компьютере, на котором предполагается использовать 1С:Предприятие выполняется процедура локальной установки. В самом простом случае установка выполняется непосредственно с дистрибутивного комплекта 1С:Предприятия. Но локальная установка может быть выполнена также и из каталога на сервере, в который была предварительно произведена административная установка.
При локальной установке достигается наилучшая скорость запуска 1С:Предприятия (программные файлы загружаются с локального диска компьютера, а не с удаленного диска сервера) и несколько меньше загружается сеть. Но при этом на каждом из компьютеров пользователей расходуется дисковое пространство под одни и те же программные файлы 1С:Предприятия.
Однако, наиболее серьезным недостатком локальной установки являются сложности с администрированием, особенно в тех случаях, когда система 1С:Предприятие используется на многих компьютерах локальной сети. Дело в том, что периодически появляются обновленные выпуски (релизы) системы 1С:Предприятие, которые в случае использования локальной установки приходится устанавливать на каждый компьютер, на котором используется 1С:Предприятие (не рекомендуется использовать при работе с одной и той же информационной базой разные релизы системы 1С:Предприятие).
Поэтому, в случаях, когда в рамках одной локальной сети для работы с системой 1С:Предприятие используется значительное число компьютеров и сеть не слишком перегружена, рекомендуется использовать сетевую установку 1С:Предприятия. Как отмечалось, для того, чтобы на компьютерах пользователей выполнить сетевую установку 1С:Предприятия, надо предварительно выполнить административную установку на диск сервера. И только затем процедура сетевой установки может быть выполнена на компьютерах пользователей. Это несколько усложняет установку в целом, но позволяет воспользоваться некоторыми преимуществами, основным из которых является упрощение процедуры обновления релизов 1С:Предприятия. В данном случае обновление релиза 1С:Предприятия, в большинстве случаев, сводится к административной установке на сервер нового релиза 1С:Предприятия поверх уже установленного. Это само по себе обеспечивает то, что на компьютерах пользователей будут запускаться обновленные варианты программных файлов 1С:Предприятия (как отмечалось, в случае сетевой установки программные файлы запускаются с диска сервера).
Правда процедура сетевой установки подразумевает копирование в системный каталог Windows компьютеров пользователей некоторых входящих в комплект поставки 1С:Предприятия системных файлов, которые также могут время от времени обновляться (правда намного реже, чем программные файлы 1С:Предприятия). Поэтому, для обеспечения полной надежности и во избежание рассогласования версий системных файлов, после обновления релиза 1С:Предприятия на сервере рекомендуется повторить процедуру сетевой установки на компьютерах пользователей.
Настройка списка файлов сохранения данных При использовании режима сохранения данных система выполняет резервное архивирование файлов информационной базы. Список файлов указывается при вызове пункта меню Администрирование -  Сохранить данные…. В списке можно определять отдельные файлы и маски файлов, которые будут сохраняться. Сам список хранится в файле 1Cv7File.lst. Этот файл обычно располагается в том, каталоге, в котором находятся исполняемые файлы 1С:Предприятия. В этом случае, установленный список фактически действует на все информационные базы, с которыми работают пользователи запускающие 1С:Предприятие из данного каталога.
В некоторых случаях необходимо в определенной информационной базе сохранять не только стандартные файлы, предлагаемые к архивированию по умолчанию, но и другие файлы, относящиеся к данной информационной базе. Например, это могут быть файлы с картинками. В этом случае имеет смысл поместить файл 1Cv7File.lst в каталог информационной базы. Тогда изменения списка файлов будет сохраняться только для данной информационной базы.
Существует также возможность поместить файл 1Cv7File.lst в рабочий каталог пользователя. В этом случае он будет редактироваться и сохраняться только для определенного пользователя конкретной информационной базы.
Фактически при вызове режима Сохранить данные программа сначала ищет файл со списком сохраняемых файлов в рабочем каталоге пользователя, затем (если не нашла) в каталоге информационной базы, а затем (если файл отсутствует и в каталоге информационной базы) выполняется поиск в каталоге исполняемых файлов 1С:Предприятия. Таким образом, расположением файла 1Cv7File.lst регулируется область действия настроенного списка сохраняемых файлов.
В случае необходимости сохранения подкаталогов каталога информационной базы следует учитывать, что при восстановлении архивной копии программа создает только те подкаталоги, в которых сохранен хотя бы один файл. Таким образом, если предполагается использовать механизм сохранения для переноса информационной базы на другой компьютер вместе с подкаталогами (например, с рабочими каталогами пользователей), то необходимо настроить список файлов таким образом, чтобы в подкаталогах реально сохранялись какие-либо файлы.
Рекомендации по использованию журнала регистрации Журнал регистрации активно применяется администраторами, контролирующими текущую работу пользователей. При интенсивной работе пользователей журнал регистрации имеет достаточно большой размер. Любой отбор в журнале регистрации, система выполняет путем последовательного просмотра всех записей и поиска, удовлетворяющих условиям. Для того чтобы ускорить отбор записей или просмотр журнала можно использовать возможность просмотра не только собственно журнала регистрации, но и файлов с расширением mlg. Например, можно выполнить отбор событий журнала регистрации за интересующий Вас интервал с параметром Отобрать сразу. После этого можно сохранить полученную выборку на локальном диске в файле с расширением mlg (меню Файл-Сохранить как). Далее следует открыть этот файл (меню Файл-Открыть). Просмотр журнала регистрации сохраненного на локальном диске будет выполняться заметно быстрее, и не будет замедлять работу других пользователей в сети. Кроме того, в полученном файле, который сам может быть результатом отбора по некоторому критерию, можно устанавливать различные критерии отбора, сужая тем самым пространство поиска необходимой информации.
При анализе событий в журнале регистрации следует учитывать, что в журнал автоматически попадают только действия пользователей вызываемые из штатных интерактивных режимов.  Действия над объектами, выполняемые конфигурацией средствами встроенного языка вне форм объектов не записываются в журнал регистрации автоматически. Соответствующие записи должны быть предусмотрены в самой конфигурации.
Запуск одним пользователем 2-х экземпляров 1С:Предприятия в одной информационной базе. Сетевая версия системы 1С:Предприятие и версия 1С:Предприятия для SQL позволяют одновременно нескольким пользователям работать с одной информационной базой. При этом разные пользователи могут выполнять совершенно различные действия: вводить новые документы, получать отчеты и т. п.. А как быть, когда одному и тому же пользователю наряду с выполнением обычных действий (например, вводом новых документов) надо выполнить еще какие-либо действия? Например, запустить на выполнение длительную обработку или отчет? Напрашивается ответ, что пользователь должен запустить еще один экземпляр 1С:Предприятия. Однако, при попытке запуска еще одного экземпляра под тем же именем пользователя, на экран выводится сообщение Каталог пользователя занят! и запуск завершается неудачей.
Дело в том, что каждому запущенному экземпляру 1С:Предприятия соответствует так называемый рабочий каталог. И этот каталог может соответствовать только одному запущенному экземпляру 1С:Предприятия. Рабочий каталог для каждого пользователя задается при регистрации пользователя в Конфигураторе. При запуске 1С:Предприятия именно этот каталог и берется по умолчанию в качестве рабочего для данного пользователя. Таким образом, для того, чтобы запустить второй экземпляр 1С:Предприятия с тем же именем пользователя надо сделать так, чтобы эти экземпляры пользовались разными рабочими каталогами.
Рабочий каталог пользователя может быть задан в командной строке запуска 1С:Предприятия с помощью ключа /Uрабочий_каталог. Причем каталог может быть задан как полным путем, так и относительно каталога информационной базы. Например, командная строка:
1cv7 enterprise /d:\1cv77\db /uusr1
запускает 1С:Предприятие (в режиме 1С:Предприятие). В качестве каталога информационной базы выбирается d:\1cv77\db, а в качестве рабочего каталога - d:\1cv77\db\usr1.
Следует заметить, что при обычном запуске задавать рабочий каталог в явном виде нецелесообразно. В большинстве случаев предпочтительно, чтобы для одного и того же пользователя использовался один и тот же рабочий каталог (по умолчанию, это каталог, который задан в Конфигураторе для данного пользователя), так как в данном каталоге размещается файл 1CV7.CFG, содержащий пользовательские настройки 1С:Предприятия (интервалы журналов, содержимое табло и т. п.). А в большинстве случаев для пользователя предпочтительно, чтобы его настройки сохранялись от запуска к запуску 1С:Предприятия.
Особенности работы с 1С:Предприятием в операционных системах Windows NT/2000 При использовании 1С:Предприятия 7.х на компьютерах с операционными системами Windows NT/2000 встречаются определенные проблемы, связанные с конструктивными особенностями указанных операционных систем.
Одна из них проявляется при выполнении автоматического объединения двух конфигураций достаточно большого размера. При этом может появиться сообщение Ошибка открытия документа. Эта проблема связана с особенностями реализации подсистемы управления составными документами (OLE Compound Storage) которая используется 1С:Предприятием для работы с файлом конфигурации.  Реализация данной подсистемы в Windows NT/2000 имеет более низкое, по сравнению с Windows 95/98, ограничение на объем модифицированных в пределах одной сессии данных. Для решения данной проблемы можно рекомендовать производить объединение таких конфигураций по частям или же производить такие операции на компьютерах работающих под управлением Windows 95/
Проявлением другой проблемы является полное или частичное исчезновение программного меню при одновременной работе нескольких экземпляров системы 1С:Предприятие. При дальнейшей работе это может приводить к невозможности открытия новых окон как в программе 1С:Предприятие так и в других программах. Данная проблема проявляется только при работе с конфигурациями, содержащими значительное количество пунктов меню в пользовательском интерфейсе и связана с принципиальными ограничениями систем Windows NT/2000 на количество одновременно задействованных пунктов меню, с учетом  иерархических под-меню. При появлении вышеупомянутых проблем следует закрыть неиспользуемые экземпляры 1С:Предприятия.

Стандартные решения применяемые в типовых конфигурациях

Экспорт и импорт данных в информационную базу из файлов Обмен данными между конфигурациями через текстовый файл В последних редакциях типовых конфигураций 1С:Предприятия (1С:Бухгалтерия ред. 3.5, Торговля+Склад ред. 8.5, Зарплата+Кадры, Производство+Услуги+Бухгалтерия ред. 1.5, Комплексная конфигурация ред. 2.5) значительно расширены возможности обмена информацией между конфигурациями. В конфигурации встроены обработки для выгрузки и загрузки данных (в первую очередь, справочников и бухгалтерских проводок): одна конфигурация выгружает данные в текстовый файл, другая - загружает их.
Поддерживаются следующие направления обмена данными:
- из конфигурации Зарплата+Кадры можно выгружать проводки по начислению и выдаче заработной платы, а так же справочники Сотрудники и Подразделения в 1С:Бухгалтерию, Производство+Услуги+Бухгалтерию, Комплексную конфигурацию;
- из конфигурации Торговля+Склад можно выгружать проводки по торговым операциям в 1С:Бухгалтерию и Комплексную конфигурацию.
Загрузка проводок в 1С:Бухгалтерию из конфигураций Торговля+Склад и Зарплата+Кадры существовала и предыдущих редакциях типовых конфигураций; в последних редакциях возможности обмена значительно расширены: в частности, теперь в конфигурации Зарплата+Кадры можно формировать любые теоретически возможные проводки по начислению и выдаче заработной платы со всей необходимой для бухгалтерской конфигурации аналитикой. Пользователям Комплексной конфигурации могут оказаться полезными новые режимы загрузки данных из конфигураций Зарплата+Кадры и Торговля+Склад: теперь учет по соответствующим направлениям можно вести в отдельных конфигурациях (которые входят в комплект программного продукта 1С:Предприятие. Комплексная конфигурация), ограниченно используя Комплексную конфигурацию.
Все типовые конфигурации используют единый универсальный формат обмена данными. Формат позволяет передавать через текстовый файл константы, справочники, документы и проводки. Формат имеет следующую особенность: выгрузка данных в файл происходит в точном соответствии со структурой конфигурации, которая этот файл будет загружать. Это позволяет избежать потерь информации при выгрузке информации, поскольку точно известно, какая информация необходима загружающей конфигурации.
Другая особенность формата - это очень прозрачная структура тестового файла. Все поля в нем (содержащие значения атрибутов и реквизитов объектов) содержат идентификаторы, соответствующие идентификаторам метаданных, что позволяет легко разобраться в содержимом файла, просматривая его в любом текстовом редакторе. Кроме того, это свойство формата позволяет загружать данные в любые конфигурации 1С:Предприятия с помощью одной универсальной обработки. Она встроена в типовые конфигурации фирмы 1С, а так же размещена на диске ИТС как внешняя обработка (файл с именем Importert).
Таким образом, чтобы организовать обмен данными между двумя любыми конфигурациями (созданными партнерами фирмы 1С или пользователями), остается разработать только обработку выгрузки необходимых данных. В качестве примера можно использовать обработки выгрузки данных из типовых конфигураций 1С:Предприятия, а так же размещенную на диске ИТС обработку для выгрузки данных из любой конфигурации в другую точно такую же (файл с именем Exportert).
Формат текстового файла для загрузки данных в информационную базу
Рекомендации по идентификации объектов при обмене данными При любом обмене данными между разными информационными базами всегда существует проблема идентификации объектов, выгруженных из базы-источника, при загрузке в базу-приемник. Например, при передаче проводок из конфигурации Торговля+Склад в 1С:Бухгалтерию весьма вероятно, что многие из элементов справочника Контрагенты, выгружаемые в качестве субконто проводок, уже заведены в 1С:Бухгалтерии и не надо создавать новых элементов, а следует использовать существующие.
Механизм обмена данными позволяет применить любой способ идентификации объектов. Точнее говоря, для идентификации справочника может быть выбран любой его атрибут (код, наименование, родитель, владелец) или непериодический реквизит, или произвольный набор этих атрибутов и реквизитов. Для идентификации документа может использоваться любой его атрибут (номер, дата), реквизит шапки, общий реквизит документов, атрибут операции (сумма, содержание) или реквизит операции; можно использовать комбинацию нескольких атрибутов и реквизитов.
Например, элементы справочника Контрагенты можно идентифицировать по коду, и следить, чтобы в информационных базах, обменивающихся информацией, совпадали коды элементов, описывающих одного контрагента. Это может вызвать некоторые сложности, когда новые элементы вводятся в справочники Контрагенты в разные информационные базы независимо. Можно идентифицировать контрагентов по ИНН, но тогда необходимо всегда при вводе новых контрагентов указывать ИНН, а он может быть неизвестен.
В 1С:Бухгалтерии существует справочник Варианты реализации, который хранит комбинацию типа реализации и ставок налогов (НДС, НГСМ, НП) и используется в качестве субконто при реализации товара (и прочих активов). Элементы этого справочника при выгрузке проводок из конфигурации Торговля+Склад правильнее всего идентифицировать по значению всех четырех его реквизитов: Тип реализации, Ставка НДС, Ставка НГСМ, Ставка НП; код элементов этого справочника при идентификации никакой роли не играет.
Но, вообще говоря, исключить ошибки при идентификации объектов можно, только идентифицируя элементы справочников по коду, при включенном контроле уникальности кода. Кроме того, если серии кодов заданы в пределах подчинения, очевидно, что одного только кода в любом случае недостаточно (так как разные элементы в разных группах могут иметь одинаковый код). Вместе с кодом в идентификации элементов таких справочников должны участвовать атрибуты родитель и владелец (если справочник подчинен другому справочнику).
Аналогично, гарантировать безошибочную идентификацию документов можно, если использовать для этого номер и дату документа, при включенном контроле уникальности номера. Если периодичность номера указана по всем документам данного вида, то одного номера будет достаточно; иначе надо использовать для идентификации так же и дату документа.
Если в свойствах справочника в Конфигураторе не задан контроль уникальности кода (а у документов - контроль уникальности номера), или если код элементов (номер документа) по каким-либо причинам не используется для идентификации объектов, а используется значение какого-либо другого атрибута (или нескольких атрибутов), всегда существует вероятность того, что пользователи ввели несколько элементов с одинаковым значением этого атрибута, и идентификация таких объектов будет происходить неоднозначно.
В любом случае, пользователи обоих информационных баз, между которыми происходит обмен информацией, должны знать правила, по которым идентифицируются объекты при обмене, и соблюдать их.
Выгрузка данных в текстовый файл для загрузки в такую же конфигурацию Обработка предназначена выгрузки справочников и документов в тестовый файл в специальном формате,
для последующей загрузки в точно такую же конфигурацию. Формат файла размещен на диске ИТС.
Загрузка файла может быть осуществлена универсальной обработкой Importert.
Запуск обработки выгрузки выполняется из системы 1С:Предприятие  7.7.
Для запуска обработки откройте файл Exportert с помощью пункта Открыть из меню Файл главного меню системы 1С:Предприятие.
Порядок работы с обработкой приведен во встроенном описании.
Универсальная загрузка данных из текстового файла Обработка предназначена для загрузки в информационную базу любых данных из текстового файла, записанного в специальном формате. Формат файла размещен на диске ИТС.
Запуск обработки загрузки выполняется из системы 1С:Предприятие  7.7.
Для запуска обработки откройте файл Importert с помощью пункта Открыть из меню Файл главного меню системы 1С:Предприятие.
Порядок работы с обработкой приведен во встроенном описании.


    Бухгалтерия: Автоматизация - Система 1С