Заказы на доработку 1С (сервис удаленной работы)

Хранилище

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

Здравствуйте, гость ( Войти | Зарегистрироваться )



История благодарностей участнику Batchir ::: Спасибо сказали: 1426 раз
Дата поста: В теме: За сообщение: Спасибо сказали:
11.02.09, 21:41 Особенности работы в формах с подчиненным справочником
При работе в формах с подчиненных справочниками имеется ряд особенностей.

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

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

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

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

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

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

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

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

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

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

Вначале создадим новую форму списка регистра сведений и назовем ее "ФормаВыбора". В форме реализуем событие Выбор табличного поля отображающего список.


// Форма списка регистра сведений
Процедура РегистрСведенийСписокВыбор(Элемент, ВыбраннаяСтрока, Колонка, СтандартнаяОбработка)
ОповеститьОВыборе(ВыбраннаяСтрока);
СтандартнаяОбработка = Ложь;
КонецПроцедуры

В этом событии мы отменяем стандартное действие, предусмотренное расширением табличного поля, и вместо него вызываем метод ОповеститьОВыборе(), передавая ему в качестве параметра текущую строку. Значением текущей строки будет являться значение типа РегистрСведенийКлючЗаписи.<имя>.

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



// Создадим ключ, идентифицирующий строку в списке регистра
ДанныеКлюча = Новый Структура("Период, Валюта", Период, Валюта);
Ключ = РегистрыСведений.КурсыВалют.СоздатьКлючЗаписи(ДанныеКлюча);

// Создадим форму регистра и откроем ее
Фрм = РегистрыСведений.КурсыВалют.ПолучитьФормуСписка("ФормаВыбора");
Фрм.РежимВыбора = Истина;
Фрм.ВладелецФормы = ЭтаФорма;
Фрм.ПараметрТекущаяСтрока = Ключ;
Фрм.Открыть();

КонецПроцедуры

Процедура ОбработкаВыбора(ЗначениеВыбора, Источник)

// Обработаем значение выбора
Валюта = ЗначениеВыбора.Валюта;
Период = ЗначениеВыбора.Период;

КонецПроцедуры

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

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

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

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

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

Можно также ознакомиться со статьей "Взаимодействие форм прикладных объектов".
MATEVI, sae74,
11.02.09, 16:54 + СПС
Здравствуйте, теперь свою благодарность за помощь, за полезные статьи, за предаставленные ссылки на различные конфигурации и платформы Вы можете выражать нажатием кнпки "+ СПС".

1. Свое "Спасибо" Вы можете оставить для каждого сообщения на форуме если считаете его полезным.
2. Вы можете простмотреть полную историю благодарностей выраженных любому участнику.
3. Этой функцией могут воспользоваться только зарегистрированные пользователи.
malexmen,
10.02.09, 15:52 Новый дизайн
Цитата(TheMarshall @ 10.2.2009, 16:54) *
Неожиданно. С утра один. В обед "F5" и грузится, что-то другое. На секунду был в замешательстве.

Ну таких неожиданностей может сейчас возникать достаточно. Форум молодой и развивается в своем функционале  wink.gif
Vofka,
10.02.09, 0:03 Групповая печать документов
Пример

Предположим необходимо распечатать все выставленные покупателям налоговые накладные за период с 01.01.2006 по 31.01.2006 включительно, выписанные от имени организации ООО «Добро».

Для этого в меню "Сервис" выберем "Групповая обработка справочников и документов". На закладке Объекты отбора в поле Тип объекта выберем - Документы. Теперь необходимо указать, по каким документам будет произведен отбор. При добавлении нового элемента нажатием кнопки (или клавиша Insert) откроется окно со списком документов, в котором выберем документ "Налоговая накладная".

Теперь перейдем на закладку Отбор. Нам необходимо отобрать счета-фактуры, выставленные за период с 01.01.2006 по 31.01.2006, и исключить из списка счета-фактуры на аванс. При помощи кнопки (или клавиша Insert) в окне отбора добавляем необходимые условия отбора.

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

Далее следует выбрать Печать с предварительным просмотром или Печать без предварительного просмотра. Для печати реестра отобранных документов следует выбрать соответствующее значение - Реестр документов.

Теперь нажимаем кнопку Выполнить, на вопрос Выполнить "Печать документов"? отвечаем Да.

При этом, если выбрано значение Печать без предварительного просмотра, сразу будет запущена процедура печати документов. Если же выбрано значение Печать с предварительным просмотром, на экран будут выведены печатные формы всех отобранных счетов-фактур. В этом случае после просмотра документов необходимо запустить процедуру печати из главного меню программы (меню "Файл" - "Печать"). Если выбрано значение Реестр документов, на экран так же будет выведена печатная форма реестра со списком отобранных счетов-фактур, которую можно распечатать из главного меню программы (меню "Файл" - "Печать").
liksoft, sanek6662009@gmail.com,
09.02.09, 23:55 Групповое изменение даты документов
Пример

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

Для этого в меню «Сервис» выберем «Групповая обработка справочников и документов». На закладке «Объекты отбора» в поле «Тип объекта» выберем - «Документы». Теперь необходимо указать, по каким документам будет произведен отбор. При добавлении нового элемента нажатием кнопки (или клавиша Insert) откроется окно со списком документов, в котором выберем вид документа «Отчет производства за смену».

Теперь перейдем в поле «Отбор» в нижней части формы обработки. Нам необходимо отобрать документы с датой 22.03.2006. При помощи кнопки (или клавиша Insert) в окне отбора добавляем необходимое условие отбора: в колонке «Поле» выберем реквизит документа «Дата», в колонке «Тип сравнения» выберем «Интервал (>=, <=), в колонке «Значение» необходимо указать интервал с 22.03.2006 0:00:00 до 22.03.2006 23:59:59.

При нажатии кнопки «Отобрать» будут отобраны документы, зарегистрированные в информационной базе в интервале с начала дня 22.03.2006 до конца дня 22.03.2006. Список отобранных документов автоматически сформируется на закладке «Обработка» формы «Групповая обработка справочников и документов». Из списка действий в нижней части формы обработки выберем «Изменить: (Дата)».

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

Теперь нажимаем кнопку «Выполнить». На вопрос Выполнить «Изменить: (Дата)»? отвечаем Да. В колонке «Дата» автоматически будет изменена дата для отобранных документов вида «Отчет производства за смену».

Теперь для документов вида «Отчет производства за смену», зарегистрированных ранее датой 22.03.2006, установлена новая дата - 24.03.2006.

ВАЖНО!
После того, как установлена новая дата документов с помощью обработки «Групповая обработка справочников и документов», необходимо перепровести эти документы, т.к. при изменении даты это не произойдет автоматически. Для перепроведения отобранных документов в окне обработки (на закладке «Обработка») из списка действий необходимо выбрать значение «Изменить: (Проведение документа)», в поле правее - значение «Установить». Нажать кнопку «Выполнить».
sofjen,
09.02.09, 23:53 Ответственные лица организаций
В унифицированных формах учетной документации специально предусмотрены реквизиты для указания должностей ответственных лиц и места для их подписей. Программа может автоматически заполнять эти реквизиты при формировании печатных форм. Для этого достаточно занести информацию об ответственных лицах в регистр сведений "Ответственные лица организации" (меню "Предприятие").

Регистр сведений "Ответственные лица организации"

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

В программе предусмотрено несколько видов ответственных лиц:
  • Руководитель - используется в печатных формах, требующих подписи руководителя организации;
  • Главный бухгалтер - используется в печатных формах, требующих подписи главного бухгалтера организации;
  • Кассир - используется при формировании печатных форм кассовых документов;
  • Руководитель кадровой службы - используется в подсистеме кадрового учета.
Для каждого вида ответственных лиц нужно указать соответствующее ему в данной организации физическое лицо и должность. Например, на фирме "Добро" должность руководителя называется "Генеральный директор" и занимает ее Эргешев Шахрияр Зейналович.
Набор ответственных лиц задается отдельно для каждой организации.

Автоматическое заполнение реквизитов печатных форм

При формировании печатных форм программа автоматически заполнит соответствующие реквизиты данными ответственных лиц.
sugarbunch,
09.02.09, 23:51 Групповое изменение реквизитов табличной части документов
Рассмотрим изменение реквизитов табличной части группы документов на примере изменения реквизита «Содержание услуги, доп. сведения» табличной части «Услуги» в документах вида «Реализация товаров и услуг».

Пусть организация ООО «Добро» оказывает услуги междугородной и международной связи юридическим лицам. Бухгалтер организации оформляет операции по оказанию услуг связи документами вида «Реализация товаров и услуг». В табличной части «Услуги» документа «Реализация товаров и услуг» указывается содержание услуги, которое подставляется в печатные формы акта об оказании услуг и налоговой накладной.

В бухгалтерии организации в последний день месяца оформляются акты об оказании услуг и налоговые накладные для предоставления их клиентам. При оформлении актов и налоговых накладных за февраль 2008 года бухгалтер организации обнаружил, что формулировка содержания услуги указывается в печатных формах документов неточно. Потребовалось во всех документах «Реализация товаров и услуг» за февраль 2008 года, изменить текст содержания услуги «Послуги зв`язку» на более полный текст - «Послуги міжміського та міжнародного зв`язку».

Использование групповой обработки справочников и документов

Для группового изменения реквизитов табличных частей документов предназначена обработка «Групповая обработка справочников и документов» (меню «Сервис»). Воспользуемся этой обработкой для изменения реквизита «Содержание услуги, доп. расходы» табличной части «Услуги» документов «Реализация товаров и услуг».

Откроем форму обработки, на закладке «Объекты отбора» в поле «Тип объекта» выберем - «Документы». Поскольку содержание услуги является реквизитом табличной части документа, установим флажок «Обрабатывать табличные части». Теперь необходимо указать наименование табличной части документа, в которую будем вносить изменения. Для этого с помощью кнопки (или клавиша Insert) добавим новый элемент в пустое поле формы обработки: в открывшемся окне в списке видов документов и табличных частей документов выберем табличную часть «Услуги» документа вида «Реализация товаров и услуг».

Теперь перейдем в поле «Отбор» в нижней части формы обработки. Нам необходимо отобрать документы за февраль 2008 года, в табличной части «Услуги» которых значение реквизита «Содержание услуги, доп. сведения» - «Послуги зв`язку». При помощи кнопки (или клавиша Insert) в окне отбора добавляем необходимые условия отбора:
  • В колонке «Поле» выберем реквизит документа «Дата», в колонке «Тип сравнения» выберем «Интервал (>=, <=)», в колонке «Значение» необходимо указать интервал с 28.02.2008 0:00:00 до 28.02.2008 23:59:59.
  • В колонке «Поле» выберем реквизит табличной части «Содержание услуги, доп. сведения», в колонке «Тип сравнения» выберем «Равно», в колонке «Значение» укажем «Послуги зв`язку» (этот текст бухгалтер указывал в документах ранее).
При нажатии кнопки «Отобрать» будут отобраны документы «Реализация товаров и услуг», удовлетворяющие заданным условиям. Список отобранных документов автоматически сформируется на закладке «Обработка» формы «Групповая обработка справочников и документов».

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

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

В поле правее наберем текст, который мы хотим поместить в содержание услуги «Послуги міжміського та міжнародного зв`язку» и нажмем кнопку «Выполнить». На вопрос «Выполнить «Изменить реквизит [Содержание услуги, доп. сведения]?» отвечаем «Да». В колонке «Содержание услуги, доп. сведения» автоматически будет изменено значение реквизита «Содержание услуги, доп. сведения». Форму обработки «Групповая обработка справочников и документов» можно закрыть.

Теперь в табличной части «Услуги» документов «Реализация товаров и услуг» значение реквизита «Содержание услуги, доп. сведения» заменено значением «Послуги міжміського та міжнародного зв`язку», которое будет подставляться в необходимые бухгалтеру печатные формы, например, «Акт об оказании услуг».
OlgaD,
09.02.09, 23:21 Технология перехода с 1С:Предприятия 8.0 на 1С:Предприятие 8.1
При переходе на новую версию 1С:Предприятие 8.1 мы рекомендуем соблюдать следующую последовательность действий:

  1. Ознакомьтесь с содержимым данного файла, а также с разделом "Переход с версии 8.0 на версию 8.1" файла V8Update.htm, расположенным в каталоге установки программы.
  2. Переход на новую версию 1С:Предприятие 8.1 возможен с версий 8.0.10 и выше. Рекомендуется выполнять переход с версии 8.0.17 или более старшей, поскольку в этих версиях имеется возможность проверки и исправления неуникальных записей в режиме тестирования и исправления, препятствующих переходу к версии 8.1.
  3. В случае перехода с версии 8.0.17 (или более старшей) выполните процедуру тестирования и исправления.
  4. Перед началом конвертации обязательно сделайте резервную копию информационной базы.
  5. Убедитесь, что диске достаточно свободного места. При конвертации будет выполнена реструктуризация некоторых таблиц базы данных. Желательно чтобы свободное место составляло не менее 30-40% от размера базы данных.
  6. Выполните конвертацию информационной базы. Для этого зайдите в базу в режиме конфигуратора версии 8.1, и утвердительно ответьте на предложение о конвертации. Время, требуемое на конвертацию, в зависимости от объема базы данных, может быть достаточно большим. Спланируйте переход на новую версию с учетом того, что база некоторое время будет недоступна для работы. По результатам наших исследований, время конвертации информационной базы "1C:Предприятие 8.0. Управление производственным предприятием", объемом 85 Гб составляет в среднем 3.5 часа.
    ВАЖНО! После конвертации полученную базу уже нельзя будет использовать совместно с версией 1С:Предприятие 8.0.
  7. Сконвертируйте внешние обработки для возможности их применения с новой версией платформы.
    ВАЖНО! Учтите, что сконвертированные обработки нельзя будет использовать в версии 1С:Предприятие 8.0. Сделайте резервные копии всех конвертируемых файлов. Процедура конвертации внешних обработок проста – достаточно их открыть в 1С:Предприятие в режиме конфигуратора. Кроме того, предусмотрена возможность их групповой конвертации (подробнее см. в документации).
    В типовых конфигурациях, реализована возможность сохранения внешних обработок в составе данных информационной базы (механизм внешних печатных форм и т.п., см. справочник "Внешние обработки"). Их также следует сконвертировать, для этого следует воспользоваться прилагаемой обработкой КонвертацияВнешнихОбработок.epf. Данная обработка позволяет выгрузить сохраненные в базе данных внешние обработки в произвольный каталог, запустить в необходимом для конвертации режиме конфигуратор, после чего загрузить измененные обработки обратно в справочник.
После выполнения описанных действий база полностью готова к использованию версией 1С:Предприятие 8.1.

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

Для этого выполните следующие действия:

  1. В конфигурации информационной базы 8.0 сделайте сравнение/объединение с конфигурацией, входящей в комплект поставки новой версии платформы. В дереве результата сравнения снимите флажки со всех объектов метаданных, кроме нового плана обмена ПереходНа81, который следует "принять" без изменений. Включите в состав добавленного плана обмена все объекты конфигурации. Если используется типовая конфигурация фирмы "1С", исключите из состава обмена справочник НастройкиОбменаДанными и регистр сведений ПараметрыОбменаДанными. Добавить план обмена таким образом можно в произвольную конфигурацию, но наиболее простое применение плана обмена будет в случае использования типовых конфигураций фирмы "1С".
  2. В режиме 1С:Предпрития создайте узлы для данного плана обмена. Узел, который соответствует текущей информационной базе назовите "8.0", присвойте ему код "001". Узел будущей базы 8.1 назовите "8.1", присвойте ему код "002", кроме того, для данного узла установите флажок "Только получатель". Такая настройка позволит обеспечить миграцию данных только в одну сторону - из базы 8.0 в базу 8.1. Это может быть полезно, если базу 8.1 планируется использовать для проверки работоспособности вносимых в конфигурацию изменений, которые не попадут в базу 8.0 (при этом, при принятии решения о переводе рабочей информационной базы на версию 8.1 конвертацию придется повторить).
  3. Сбросьте регистрацию всех изменений в базе 8.0 для узла 8.1. Для этого в форме узла соответствующего узла ("8.1") нажмите кнопку "Удалить регистрацию".
  4. Сделайте резервную копию информационной базы версии 8.0. Из полученной копии восстановите базу, которая будет сконвертирована в 8.1.
  5. Выполните конвертацию базы в версию 8.1.
  6. В сконвертированной базе 8.1 внесите изменения в узлы плана обмена – необходимо поменять между собой значения реквизитов узлов плана обмена. То есть для существующего узла "8.0", являющимся главным узлом для данной базы, следует установить код "002", а наименование изменить на "8.1". Аналогично следует поступить и со вторым узлом – старое наименование "8.1" изменить на "8.0", код установить в "001". Для нового узла "8.1" установите флажок "Только получатель".
  7. Если используется типовая конфигурация фирмы "1С", с помощью реализованного во всех конфигурациях механизма "Автообмена" настройте автоматический периодический обмен для данного плана обмена (подробнее см. в документации к конфигурации). В случае произвольной конфигурации, обмен придется выполнять вручную, из формы соответствующего узла плана обмена.
  8. Поддерживайте регулярный обмен данными до момента полного перехода на работу с версией 1С:Предприятие 8.1.

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

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

Рекомендации по изменениям конфигурации.

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

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

  1. Убедитесь, что в конфигурации нет общих модулей, имена которых совпадали бы с именами свойств глобального контекста, или же с именами реквизитов объектов конфигурации. Найденные подобные модули следует переименовать (например, в типовых конфигурациях, следует переименовать такие модули как "Отчеты", "СерийныеНомера", "ОбменДанными", "СертификацияНоменклатуры" и т.п.). В противном случае конфигурация станет неработоспособной. Кроме того, ошибки могут также появиться в случае, если в текстах модулей конфигурации используются имена переменных, совпадающие с именами общих модулей. Имена таких переменных также должны быть изменены.
  2. Существующие внешние обработки, предназначенные для работы с данной конфигурацией, должны быть включены в ее состав (возможно временно).
  3. Выгрузите тексты всех модулей конфигурации на диск (меню "Конфигурация -> Выгрузить файлы конфигурации").
  4. С помощью прилагаемой обработки ЗаменаВызововМетодовОбщихМодулей.epf модифицируйте полученные тексты.
  5. Загрузите измененные тексты модулей обратно в конфигурацию (меню "Конфигурация-> Загрузить файлы конфигурации").
  6. Для каждого общего модуля в его свойствах снимите флажок "Глобальный".
  7. Создайте новый общий модуль, установите для него флажок "Глобальный", перенести в него процедуры из других общих модулей, которые назначаются в модуле приложения (внешнего соединения) как обработчики ожидания (с помощью процедуры ПодключитьОбработчикОжидания()).
  8. Проанализируйте действия выполняемые при запуске конфигурации. Исключите по возможности все действия, которые могут замедлить процедуру запуска. При запуске нужно выполнять только те действия, которые необходимы для текущего пользователя, и только если они нужны сразу и их нельзя выполнить позже.
  9. Исключите все операции, в которых выполняется обращение к большому количеству метаданных. Например, в типовых конфигурациях фирмы "1С" такой операцией является проверка границы рассчитанных итогов регистров, выполняемая в обработчике ПриНачалеРаботыСистемы(). Ее следует удалить из обработчика данного события и перенести, например, в соответствующее регламентное задание.
Другим нововведением является новая функция глобального контекста - ЗначениеЗаполнено() (подробнее по использованию данной функции см. в документации). В типовых конфигурациях фирмы "1С" ею можно заменить реализованную в общем модуле ОбщегоНазначения функцию ЗначениеНеЗаполнено(). Такие изменения также стоит сделать сразу, на этапе конвертации информационной базы на версию 8.1, поскольку они являются достаточно простыми в реализации, и при этом повышают быстродействие конфигурации. На текущий момент прямая замена всех случаев вызова функции ЗначениеНеЗаполнено() на НЕ ЗначениеЗаполнено() не возможна, поскольку в некоторых случаях функция ЗначениеНеЗаполнено() ошибочно вызывалась с параметром мутабельного типа (вызов ЗначениеЗаполнено() с таким параметром вызовет исключение).
Поэтому следует изменить текст функции ЗначениеНеЗаполнено() следующим образом:



Функция ЗначениеНеЗаполнено(Значение) Экспорт
Попытка
Возврат НЕ ЗначениеЗаполнено(Значение);
Исключение
// еcли параметр Значение мутабельного типа результатом "старой" функции всегда была бы Ложь
Возврат Ложь;
КонецПопытки;
КонецФункции // ЗначениеНеЗаполнено()
09.02.09, 22:43 Создание расписаний регламентных заданий
Расписание регламентного задания состоит из месячного, недельного и дневного расписания, а также одного или нескольких расписаний в пределах дня.

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

После того, как мы указали дату начала и окончания расписания нужно задать его периодичность, т.е. с каким периодом в днях, нужно выполнять расписание (задание периодичности в пределах дня мы рассмотрим далее). Периодичность в днях задается в диалоге редактирования расписания параметром Повторять каждые ... дней (во встроенном языке - свойство ПериодПовтораДней расписания регламентного задания). Указав значение 0, мы задаем выполнение расписания только в пределах текущего дня. Указав значение 1, мы задаем выполнение расписания - каждый день. Указав значение 2 - через день и т.д.

Далее определим недельное и месячное расписания. Недельное и месячное расписания удобно рассматривать в виде фильтра по отношению к основному расписанию, т.е. они накладывают дополнительные ограничения на выполнение основного расписания. Недельное расписание указывает, по каким дням недели (в дополнение к основному расписанию, которое, как мы помним, выполняется с заданной периодичностью) следует выполнять расписание (во встроенном языке - свойство ДниНедели расписания регламентного задания). Например, расписание:
Выполнять: c 11 июля 2007 г. каждый 2-й день, по дням недели [понедельник, среда, пятница ]; один раз в день

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

В недельном расписании также можно задать период повтора недель - Повторять каждые ... недель (во встроенном языке - свойство ПериодНедель расписания регламентного задания). Указав значение 1, мы задаем выполнение расписания каждую неделю, 2 - через неделю (значение 0 не используется). Значение периода повтора недель является дополнением к основному расписанию. Например, расписание:
Выполнять: каждый день, по дням недели [вторник ], через 1 нед.; один раз в день

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

Месячное расписание определяется аналогично недельному. Указав месяцы (во встроенном языке - свойство Месяцы расписания регламентного задания), мы задаем в дополнение к основному расписанию, по каким месяцам будет выполняться расписание. Указав выполнять в ... день месяца (во встроенном языке - свойство ДеньВМесяце расписания регламентного задания), мы задаем - по каким дням, начиная с начала (положительные значения) или с конца (отрицательные значения), будет выполняться расписание. Например, расписание:
Выполнять: каждый день, по дням недели [понедельник ], последнего числа месяца; один раз в день

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

Указав выполнять в ... день недели в месяце (во встроенном языке - свойство ДеньНеделиВМесяце расписания регламентного задания), мы задаем порядковый номер дня недели в месяце, когда нужно выполнять расписание. Положительные значения указывают порядковый номер с начала месяца, отрицательные - с конца. Следует учесть, что порядковый номер дня недели в общем случае не совпадает с порядковым номером недели в месяце. Например, расписание:
Выполнять: каждый день, по дням недели [понедельник ], 1-й день недели в месяце; один раз в день

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

Рассмотрим, как определять расписание в течение дня. Расписание в течение дня задается в дополнение к основному расписанию, т.е. планировщик заданий сначала определяет, по каким дням следует выполнять расписание. Если текущий день подходит, то планировщик определяет, как в течение дня должно выполняться расписание. Механизм расписаний позволяет задавать несколько расписаний в течение дня.

Для начала зададим время начала и время окончания расписания (во встроенном языке - свойство ВремяНачала и ВремяКонца расписания регламентного задания). Время начала определяет, с какого времени будет выполняться расписание. Если время начала не задано, то берется время начала дня (00:00). Время окончания определяет, по какое время будет выполняться расписание. Если время конца не задано, то берется время конца дня (меньше 00:00 следующего дня).

Далее нужно задать периодичность в течение дня, когда будет выполняться расписание. Параметр повторять через ... сек. (во встроенном языке - свойство ПериодПовтораВТечениеДня расписания регламентного задания) указывает, через сколько секунд после начала предыдущего запуска нужно запускать следующий (если предыдущий запуск не завершен, будет выполнено ожидание его завершения). Нулевое значение указывает на однократное в течение дня выполнение расписания. Например, расписание:
Выполнять: каждый день; каждые 120 сек.

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

Аналогичный параметр повторять с паузой ... сек. (во встроенном языке - свойство ПаузаПовтора расписания регламентного задания) задает период повтора, но только с момента завершения предыдущего запуска.

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

Следует учесть, что периоды, которые мы рассмотрели, задают минимальное время. Например, период повтора в течение дня задает минимальное время, через которое будет запущено задание. Если по каким-либо причинам, задание не может быть запущено в заданное время, запуск откладывается. Если отложенный запуск становится возможным в течение этого же дня, то при вычислении расписания используется время последнего запуска этого дня. Если запуск откладывается до следующего дня, до время последнего запуска сбрасывается, т.е. считается, что задание этим днем не выполнялось.
MATEVI,
09.02.09, 21:40 Использование объектов XDTO в web-сервисах
Механизм XDTO представляет собой гибкое средство моделирования данных, которое широко используется в технологии web-сервисов 1С:Предприятия. В этой статье мы рассмотрим, как с использованием XDTO можно задавать различные типы данных и как их применять в web-сервисах.

Центральным понятием механизма XDTO является понятие объекта переноса данных. Объект переноса данных можно представить как одиночный объект или замкнутый граф объектов, который может быть перенесен с одного компьютера на другой. Объект переноса данных характеризуется двумя основными свойствами: возможностью сериализации/десериализации в формат передачи данных (как правило, в XML) и свойством замкнутости.

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

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

Механизм XDTO позволяет определять объекты переноса данных, которые могут образовывать строгую иерархию и могут сериализоваться в XML. Эти свойства позволили использовать объекты XDTO в качестве параметров и возвращаемых значений операций web-сервисов.

Все типы данных XDTO подразделяются на типы-значения и типы-объекты. Типы-значения позволяют определять простые типы, например, строки, числа, даты, булевы значения и т.д. Типы-объекты позволяют определять сложные типы, такие как структуры и массивы. Рассмотрим более подробно, как задавать с помощью XDTO некоторые характерные типы.

Строки

Строки моделируются типами-значениями. Строковый тип имеет имя: {http://www.w3.org/2001/XMLSchema}string. В фигурных скобках здесь задается пространство имен типа. В XDTO как и в XML схеме, на которой он основан, все типы имеют пространство имен и локальное имя.

Для создания строкового значения нужно:
строковыйТип = ФабрикаXDTO.Тип("http://www.w3.org/2001/XMLSchema", "string");
значение = ФабрикаXDTO.Создать(строковыйТип, "Hello world!!!");

Строка при передаче представляется в виде текста xml тега:
<param>Hello world</param>

Следует учесть, что строки конвертируются в UTF-8 при сериализации.

Целые числа

Целые числа моделируются типами-значениями. Целочисленный тип имеет имя: {http://www.w3.org/2001/XMLSchema}int.

Для создания целочисленного значения нужно:
целыйТип = ФабрикаXDTO.Тип("http://www.w3.org/2001/XMLSchema", "int");
значение = ФабрикаXDTO.Создать(целыйТип, 10);

Число при передаче представляется в виде текста xml тега:
<param>10</param>

Дробные числа

Дробные числа моделируются типами-значениями. Дробный тип с фиксированной точкой имеет имя: {http://www.w3.org/2001/XMLSchema}decimal, дробный тип с плавающей точкой имеет имя: {http://www.w3.org/2001/XMLSchema}float, дробный тип с плавающей точкой двойной точности имеет имя: {http://www.w3.org/2001/XMLSchema}double.

Для создания дробного значения нужно:
дробныйТип = ФабрикаXDTO.Тип("http://www.w3.org/2001/XMLSchema", "decimal");
значение = ФабрикаXDTO.Создать(дробныйТип, "123.11");

Число при передаче представляется в виде текста xml тега:
<param>123.11</param>

Даты

Даты моделируются типами-значениями. Тип даты без времени имеет имя: {http://www.w3.org/2001/XMLSchema}date, тип времени без даты имеет имя: {http://www.w3.org/2001/XMLSchema}time, тип даты и времени имеет имя: {http://www.w3.org/2001/XMLSchema}dateTime.

Для создания значения даты нужно:
типДаты = ФабрикаXDTO.Тип("http://www.w3.org/2001/XMLSchema", "dateTime");
значение = ФабрикаXDTO.Создать(типДаты, "2007-11-12T12:58:00");

Число при передаче представляется в виде текста xml тега:
<param>2007-11-12T12:58:00</param>

Лексическое представление даты задается в формате:
Год-Месяц-День ВременнаяЗона

Временная зона может быть не указана.

Лексическое представление времени задается в формате:
Час:Минута:Секунда ВременнаяЗона

Временная зона может быть не указана.

Лексическое представление даты вместе со временем задается в формате:
Год-Месяц-ДеньTЧас:Минута:Секунда ВременнаяЗона

Дата от времени разделяется символом T. Временная зона может быть не указана.


Структуры

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

Например, для создания структуры Номенклатура из демо-конфигурации Web-Сервисы нужно:
структурныйТип = ФабрикаXDTO.Тип("http://www.1c.ru/demos/products", "Номенклатура");
номенклатура = ФабрикаXDTO.Создать(структурныйТип);
номенклатура.Наименование = "Ботинки женские";
номенклатура.ЗакупочнаяЦена = 1000;

Структура при передаче представляется в виде xml структуры:
<Номенклатура xmlns="http://www.1c.ru/demos/products">
<Наименование>Ботинки женские</Наименование>
<ЗакупочнаяЦена>1000</ЗакупочнаяЦена>
</Номенклатура>

Массивы

Массивы моделируются свойствами типов-объектов. Тип массива нельзя создать напрямую, но на определенном свойстве типа-объекта можно указать минимальное количество и максимальное количество элементов массива. Если оба значения равны 1, то это единичное свойство, если максимальное количество больше 1, то - множественное свойство. Свойства-массивы реализованы в XDTO через СписокXDTO.

Например, для создания массива номенклатур, определенного в свойстве Элементы структуры НоменклатураГруппа из демо-конфигурации Web-Сервисы нужно:
структурныйТип = ФабрикаXDTO.Тип("http://www.1c.ru/demos/products", "НоменклатураГруппа");
номенклатураГруппа = ФабрикаXDTO.Создать(структурныйТип);
номенклатура.Элементы.Добавить(номенклатура);

Массив при передаче представлятся в виде xml структуры:
<НоменклатураГруппа xmlns="http://www.1c.ru/demos/products">
<Элементы>
<Наименование>Ботинки женские</Наименование>
<ЗакупочнаяЦена>1000</ЗакупочнаяЦена>
</Элементы>
<Элементы>
<Наименование>Ботинки детские</Наименование>
<ЗакупочнаяЦена>500</ЗакупочнаяЦена>
</Элементы>
</НоменклатураГруппа>

Рассмотрим, как создавать типы и элементы в случае клиента web-сервиса и в случае сервера web-сервиса.

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

Каждая реализация веб-сервиса (серверная часть web-сервиса) может использовать глобальную XDTO фабрику (получаемую через свойство глобального контекста ФабрикаXDTO) для создания объектов и значений web-сервиса.
eksetro, Henkin, skillhoster, zfilin, слесарь-кодер,
09.02.09, 21:06 Права доступа в 1С:Предприятии 8
В 1С:Предприятии различают два типа прав – основные и интерактивные.

Основные (неинтерактивные) – проверяются всегда независимо от способа обращения к объектам информационной базы.

Интерактивные – проверяются при выполнении интерактивных операций (например, операция "Установить пометку удаления").

Нужно учитывать, что проверку интерактивных прав можно обойти, создав, например, при конфигурировании форму самостоятельно и заменив стандартные команды своими, а проверку неинтерактивных прав нельзя обойти ни при каких обстоятельствах. Неинтерактивными правами защищается характерная для объекта фундаментальная функциональность, за это отвечают, например, такие права, как: "Добавление", "Чтение", "Изменение", "Удаление".

Для построения защищенных прикладных решений достаточно управлять только 4-мя основными правами доступа - "Добавление", "Чтение", "Изменение" и "Удаление".

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

Пример проверки прав из языка:


Процедура КнопкаНажатие(Элемент)

Разрешено = ПравоДоступа("ИнтерактивноеУдаление", Метаданные.Документы.Документ1);
Если Не Разрешено Тогда
Предупреждение ("Удалять не разрешено");
// ... необходимые действия
КонецЕсли

// ... необходимые действия

КонецПроцедуры


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

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

Проверка основных и интерактивных прав используется расширениями формы, табличного поля и поля ввода (расширение формы определяется ее основным реквизитом, а табличного поля и поля ввода - типом редактируемых данных). Благодаря этому, если не установлено право "Просмотр", то форма списка или форма объекта не откроется, и будет выдано стандартное сообщение о нарушении прав доступа.

Рассмотрим проверку прав расширениями формы, табличного поля и поля ввода на примере документа:
  • При открытии формы документа проверяется право "Просмотр", после чего, если это форма нового объекта, то проверяется право "ИнтерактивноеДобавление", а если нет - право "Редактирование". Если выполняется запись с проведением, то проверяются права "ИнтерактивноеПроведение", "ИнтерактивнаяОтменаПроведения" или "ИнтерактивноеПроведениеНеОперативное", в зависимости от режима записи.
  • Расширение табличного поля для журнала документов при открытии формы, в которой журнал установлен основным реквизитом, проверяет, что право "Просмотр" установлено хотя бы у одного документа журнала. При проведении документов из журнала проверяются права "ИнтерактивнаяОтменаПроведения", "ИнтерактивноеПроведение" и "ИнтерактивноеПроведениеНеОперативное". При удалении документов проверяется право "ИнтерактивноеУдаление", а при установке/снятии пометки на удаление проверяются права "ИнтерактивнаяПометкаУдаления" и "ИнтерактивноеСнятиеПометкиУдаления". При добавлении нового документа, после выбора его типа, расширение табличного поля журнала документов проверяет право "ИнтерактивноеДобавление".
  • Поле ввода для документа проверяет только право "ВводПоСтроке".
Связанные права

Часть прав в системе 1С:Предприятия связаны друг с другом. Это означает, что основные права доступа, такие как "Чтение", "Изменение", "Добавление" и "Удаление" и некоторые другие могут влиять на права, отвечающие за такие операции с объектом, которые, в конечном счете, приведут к простейшим операциям. Например, нельзя разрешить право "Изменение", не выдав право "Чтение".

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

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

Ключевым является право "Чтение", при его отсутствии автоматически пропадают любые другие права на доступ к объекту.

Алфавитный список прав доступа 1С:Предприятия
Право доступа - Описание
Automation - Разрешает использование 1С:Предприятие в режиме automation.
Администрирование - Разрешает административные действия, например, ведение списка пользователей или открытие конфигурации.
АктивныеПользователи - Разрешает просмотр списка активных пользователей. Это право может использоваться при организации "гостевого входа" в прикладном решении.
ВводПоСтроке - Разрешает использование режима ввода по строке для различных объектов.
ВнешнееСоединение - Разрешает использование 1С:Предприятия через COM соединение.
Добавление - Разрешает добавление объектов данного вида. Проверяется на уровне объекта и на уровне БД.
ЖурналРегистрации - Разрешает просмотр журнала подключений и протоколов работы
Изменение - Разрешает изменение объектов данного вида. Проверяется на уровне объекта и на уровне БД.
ИнтерактивнаяОтменаПроведения - Разрешает интерактивную отмену проведения
ИнтерактивнаяПометкаУдаления - Разрешает интерактивную установку пометки удаления
ИнтерактивноеДобавление - Разрешает интерактивное добавление объектов данного вида
ИнтерактивноеОткрытиеВнешнихОбработок - Разрешает открытие внешних обработок стандартными командами меню
ИнтерактивноеПроведение - Разрешает интерактивное проведение документов данного вида
ИнтерактивноеПроведениеНеОперативное - Разрешает интерактивное проведение (стандартными командами форм) документа в неоперативном режиме
ИнтерактивноеСнятиеПометкиУдаления - Разрешает интерактивное снятие пометки на удаление
ИнтерактивноеУдаление - Разрешает интерактивное непосредственное удаление
ИнтерактивноеУдалениеПомеченных - Разрешает интерактивное удаление помеченных объектов
Использование - Разрешает использование обработки, отчета, интерфейса
МонопольныйРежим - Разрешает переключение в монопольный режим при работе в режиме 1С:Предприятия.
ОтменаПроведения - Разрешает отмену проведения документов
Проведение - Разрешает проведение документов
Просмотр - Разрешает просмотр объектов (например, в списках)
Редактирование - Разрешает редактирование объекта
Удаление - Разрешает удаление
УправлениеИтогами - Разрешает управление итогами регистра бухгалтерии и регистра накопления - установку периода, по который рассчитаны итоги, и пересчет итогов
Чтение - Разрешает чтение данных из информационной базы
emeraldik,
09.02.09, 20:53 Ограничения доступа к данным. Сведения о принципах функционирования
В этом документе представлена систематизированная информация о функционировании механизма ограничений прав доступа к данным на уровне записей.

Общие замечания

Механизм ограничений доступа к данным позволяет управлять правами доступа не только на уровне объектов метаданных, но и на уровне объектов базы данных 1С:Предприятия 8.1. Для ограничения доступа к данным могут быть использованы следующие объекты 1С:Предприятия:
  • Роли. Являются объектами метаданных. Их создание и настройка описаны в документации в разделе "Роли и права доступа" книги "1С:Предприятие 8.1 Конфигурирование и администрирование".
  • Параметры сеанса. Также являются объектами метаданных. Их создание и настройка описаны в разделе "Параметры сеанса" книги "1С:Предприятие 8.1 Конфигурирование и администрирование".
  • Привилегированные общие модули. О создании и настройке общих модулей можно прочитать в разделе "Общие модули" книги "1С:Предприятие 8.1 Конфигурирование и администрирование".
Ключевое слово "РАЗРЕШЕННЫЕ" в языке запросов. (См. раздел "Работа с запросами" книги "Описание встроенного языка. Часть 2").

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

Ограничения доступа

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

Для объектов базы данных следующих видов могут быть наложены различные ограничения на разные виды изменений (добавление, модификацию, удаление):
  • Планы обмена;
  • Справочники;
  • Документы;
  • Планы видов характеристик;
  • Планы счетов;
  • Планы видов расчета;
  • Бизнес-процессы;
  • Задачи.

Для следующих видов объектов базы данных возможно наложение ограничений на чтение не только всего объекта целиком, но и на чтение отдельных его полей:
  • Планы обмена;
  • Справочники;
  • Документы;
  • Журналы документов;
  • Планы видов характеристик;
  • Планы счетов;
  • Планы видов расчета;
  • Регистры сведений;
  • Бизнес-процессы;
  • Задачи.

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

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



ГДЕ
Наименование = "Кирпичный завод"

или

ГДЕ
Продукция.Наименование = "Кирпич красный"


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



ГДЕ
ОсновнойМенеджер.Код = "Иванов"

или

ГДЕ
ОсновнойМенеджер.ФизическоеЛицо.Наименование = "Петровский"

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



Контрагенты
ИЗ
Справочник.Контрагенты КАК Контрагенты
ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Пользователи КАК Пользователи
ПО Контрагенты.ОсновнойМенеджер.Наименование = Пользователи.Наименование
ГДЕ
Пользователи.ФизическоеЛицо.Наименование = "Петровский"


в котором используются поля элементов справочника "Пользователи", связанных с данным элементом справочника "Контрагенты" по значению полей "Наименование".
  • Вложенные запросы в качестве набора записей для связывания с основным объектом ограничения или в качестве операнда операций сравнения В или НЕ В. Во вложенных запросах могут использоваться любые средства языка запросов, кроме оператора В ИЕРАРХИИ, предложения ИТОГИ и некоторых виртуальных таблиц, в частности ОстаткиИОбороты. В следующем примере ограничения на чтение из справочника "Контрагенты" вложенный запрос используется в качестве набора записей для связывания с основным объектом ограничения:



Контрагенты
ИЗ
Справочник.Контрагенты КАК Контрагенты
ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
Пользователи.Наименование, Пользователи.ФизическоеЛицо
ИЗ
Справочник.Пользователи КАК Пользователи
ГДЕ
Пользователи.Код > "Петечкин") КАК Пользователи
ПО Контрагенты.ОсновнойМенеджер.Наименование = Пользователи.Наименование
ГДЕ
Пользователи.ФизическоеЛицо.Наименование = "Петровский"


Далее приведен пример ограничения на чтение из справочника "ПаспортныеДанныеФизЛиц", в котором вложенный запрос используется в качестве операнда операции сравнения В:



ПаспортныеДанныеФизЛиц
ГДЕ
ПаспортныеДанныеФизЛиц.ФизЛицо В (ВЫБРАТЬ РАЗЛИЧНЫЕ
Работники.ФизЛицо КАК ФизЛицо
ИЗ
РегистрСведений.Работники КАК Работники)


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



ВЫБРАТЬ Ссылка КАК Ссылка, Продукция.Наименование КАК НаименованиеПродукции
ИЗ Справочник.Контрагенты


в качестве запроса, вложенного в ограничение, следует использовать:



ВЫБРАТЬ Ссылка КАК Ссылка, Наименование КАК НаименованиеПродукции
ИЗ Справочник.Контрагенты.Продукция


  • Параметры сеанса, в том числе и в составе выражений. Например, на чтение элементов справочника "ГруппыПисемЭлектроннойПочты" может быть задано следующее ограничение доступа:

ГДЕ
Владелец.ДоступКУчетнойЗаписи.Пользователь = &ТекущийПользователь И
Владелец.ДоступКУчетнойЗаписи.Администрирование = ИСТИНА

где "ТекущийПользователь" - это параметр сеанса.


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

Действия ограничения доступа

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

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

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

В запросах способом действия ограничений доступа к данным можно управлять. Для этого в языке запросов предусмотрено ключевое слово РАЗРЕШЕННЫЕ. Если в запросе не указано "РАЗРЕШЕННЫЕ", то ограничения действуют способом "все". Если слово РАЗРЕШЕННЫЕ указано, то выбирается способ "разрешенные".

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


ВЫБРАТЬ
КонтактнаяИнформацияСрезПервых.Представление
ИЗ
РегистрСведений.КонтактнаяИнформация.СрезПоследних(, Тип = &Тип) КАК КонтактнаяИнформацияСрезПервых
ГДЕ
КонтактнаяИнформацияСрезПервых.Тип = &Тип


Механизм наложения ограничений.

Любая операция над данными, хранимыми в базе данных, в 1С:Предприятии 8.1 в конечном счете приводит к обращению к базе данных с некоторым запросом на чтение или изменение данных. В процессе исполнения запросов к базе данных внутренними механизмами 1С:Предприятия происходит наложение ограничений доступа. При этом
  • Формируется список прав (чтение, добавление, изменение, удаление), список таблиц базы данных и список полей, используемых этим запросом.
  • Из всех ролей текущего пользователя выбираются ограничения доступа к данным для всех прав, таблиц и полей, задействованных в запросе. При этом если какая-нибудь роль не содержит ограничений доступа к данным какой-нибудь таблицы или поля, то это значит, что в данной таблице доступны значения требуемых полей из любой записи. Иначе говоря, отсутствие ограничения доступа к данным означает наличие ограничения вида "ГДЕ Истина".
  • Получаются текущие значения всех параметров сеанса, участвующих в выбранных ограничениях. Причем для выборки значения параметра от текущего пользователя не требуется наличие права на получение значения этого параметра. Однако, если значение некоторого параметра сеанса не было установлено, то произойдет ошибка и запрос к базе данных выполнен не будет.
  • Ограничения, полученные из одной роли, объединяются операцией "И".
  • Ограничения, полученные из разных ролей, объединяются операцией "ИЛИ".
  • Построенные условия добавляются к SQL-запросам, с которыми 1С:Предприятие обращается к СУБД. При обращении к данным со стороны условий ограничения доступа проверка прав не выполняется (ни к объектам метаданных, ни к объектам базы данных). Причем, механизм добавления условий зависит от выбранного способа действия ограничений "все" или "разрешенные"
Способ "все"

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

Способ "разрешенные"

При наложении ограничений способом "разрешенные" к SQL-запросам добавляются такие условия, чтобы запрещенные текущему пользователю записи не оказывали влияния на результат запроса. Иначе говоря, при наложении ограничений в режиме "разрешенные" запрещенные данному пользователю записи считаются отсутствующими.

Другие объекты, связанные с ограничениями доступа к данным

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

Параметры сеанса

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

Следует разделять области применения параметров сеанса и глобальных переменных модуля приложения (модуля внешнего соединения). Среди основных отличий параметров сеанса:
  • Параметры сеанса являются объектами метаданных, что позволяет 1С:Предприятию осуществлять повышенный контроль за их использованием.
  • Параметры сеанса имеют тип, причем набор допустимых типов ограничен типами, перечисленными ниже. Их важной общей чертой является невозможность изменения внутреннего состояния для объектов этих типов.
  • примитивные типы (подробнее см. книгу «1С:Предприятие 8.1. Описание встроенного языка» глава 1 «Общее описание языка» параграф «Примитивные типы данных»;.
  • ХранилищеЗначения;
  • ОписаниеТипов;
  • ссылки на объекты базы данных;
  • УникальныйИдентификатор;
  • ФиксированныйМассив, элементами которого могут быть значения перечисленных типов, включая ФиксированныйМассив. ФиксированныйМассив не допускает никаких изменений своего содержимого и может быть сконструирован из объекта типа "Массив";
  • ВидДвиженияНакопления;
  • ВидСчета;
  • ВидДвиженияБухгалтерии.
  • Для установки или получения значения параметра сеанса текущий пользователь должен быть наделен соответствующим правом.
  • В клиент-серверном варианте 1С:Предприятия значения параметров сеанса хранятся на сервере и доступны как с сервера, так и с клиента.
  • Параметры сеанса не имеют значений по умолчанию. Попытка получить значение параметра сеанса до его установки приведет к ошибке.
  • Параметры сеанса доступны как из встроенного языка 1С:Предприятия (например: ПараметрыСеанса.ТекущийПользователь = ИмяПользователя() или Пользователь = ПараметрыСеанса.ТекущийПользователь), так и из ограничений доступа (например: Документ.Отчет.Пользователь = &ТекущийПользователь). В последнем случае для получения значения параметра сеанса наличия у текущего пользователя соответствующего права не требуется.
Привилегированные общие модули

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

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

Общие рекомендации по ограничению прав

  • Для гибкого управления доступом пользователей к данным в соответствии с функциями при установке ограничений доступа к данным, рекомендуется придерживаться следующих принципов:
  • Выберите совокупность информации (может быть зависимой от текущего пользователя), для которой целесообразна предварительная подготовка. Выбранная информация должна, с одной стороны, максимально упростить ограничения доступа к данным, а с другой стороны, не должна иметь слишком большой объем. Распределите ее по параметрам сеанса.
  • Создайте привилегированный общий модуль и установите в нем значения параметров сеанса. Это должно быть сделано до первого обращения к данным, на которые необходимо установить ограничения, за исключением обращений к данным из привилегированных модулей.
  • Задайте ограничения доступа к тем данным, для которых это оправдано (данные являются секретными или наиболее важными для сохранения целостности системы). Необходимо иметь в виду, что установка ограничения доступа может привести к замедлению любого обращения к этим данным. Излишняя сложность ограничений также может привести к замедлению.
  • При необходимости обеспечить выполнение некоторого ограниченного количества операций над данными со стороны пользователя, которому полный доступ к этим данным давать нецелесообразно, вынесите эти действия в привилегированные модули.
  • Выполняя операции с различными объектами 1С:Предприятия из встроенного языка, необходимо иметь в виду, что некоторые объекты могут выполнять обращения к некоторым полям базы данных неявно. При этом наложение ограничений доступа выполняется способом "Все", что может приводить к неожиданным сообщениям о нарушении прав доступа. Поэтому ограничивать доступ к таким полям нельзя. В частности:
  • Включение автонумерации или контроля уникальности номеров объектов таких типов, как справочники, документы, планы видов характеристик, планы счетов, планы видов расчета, бизнес-процессы, задачи приводит к неявному чтению поля "Код" (для документов, бизнес процессов и задач - "Номер") при создании нового объекта и при его записи. В справочниках и других объектах, допускающих иерархию, если в качестве серии кодов выбрано "в пределах подчинения", то будет неявно выполняться чтение полей "Код", "Родитель" и, быть может, "Это группа" (при выборе иерархии групп и элементов). При выборе в качестве серии кодов "в пределах подчинения владельцу" неявно будет выполняться чтение полей "Код" и "Владелец". При использовании автонумерации или контроля уникальности номеров не устанавливайте ограничений прав на чтение перечисленных полей. Если же на остальные поля нужны ограничения прав на чтение, то можно добавить ограничение на чтение полей "Код", "Родитель", "Владелец" вида "ГДЕ Истина". Аналогом ограничения доступа "ГДЕ Истина", разрешающего доступ ко всем записям таблицы, является пустое ограничение. Использование пустого ограничения вместо ограничения "ГДЕ Истина" приводит к незначительному упрощению запросов к СУБД со стороны 1С:Предприятия.
  • Если при записи документа, бизнес-процесса или задачи установлен режим автоматического определения времени (Первым, Последним, ТекущееИлиПервым, ТекущееИлиПоследним), то при записи соответствующего объекта будет неявно выполняться чтение поля "Дата" и поля "Ссылка". Поэтому чтение полей "Дата" и "Ссылка" должно быть разрешено. Если же установлен режим автоматического определения времени с использованием журналов, то должно быть разрешено чтение полей "Дата" и "Ссылка" любой записи из всех журналов, в которые входит документ, и полей "Дата" и "Ссылка" всех документов, которые входят в эти журналы.
andreykyiv@bigmir.net, Big Serg, Geniuse, niklain-k,
09.02.09, 20:25 Принцип сложения интерфейсов
Платформа "1С:Предприятие 8" предоставляет возможности по созданию различных командных интерфейсов. Каждый интерфейс может состоять из главного меню и нескольких панелей инструментов. Во время работы пользователя на экране могут быть видимы несколько интерфейсов.

Видимость интерфейсов

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

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

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

Свойство "Переключаемый"

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

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

Сложение интерфейсов

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

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

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

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

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

Заметим, что и значение Неопределено и значение Null имеют соответствующие типы и используются в специальных (описанных выше) случаях, а не в качестве "пустых" значений каких-либо типов. 

Для большинства типов существуют значения по умолчанию, то есть значения, устанавливаемые системой в реквизите (колонке таблицы значений и т.д.) если для него задан соответствующий тип. Например, для числа – пустым значением является 0, для строки – строка, не содержащая ни одного символа, для даты – дата начала отсчета ('00010101').
Для типов ссылок на объекты базы данных существуют значения пустых ссылок. Их можно получить у соответствующих менеджеров вызовом метода ПустаяСсылка(). Именно это значение является значением по умолчанию для соответствующих типов. Заметим, что если реквизит имеет составной тип, включающий тип ссылки на объект базы данных, то данному реквизиту можно присвоить как значение Неопределено, так и значение соответствующей пустой ссылки. Соответственно в этих двух случаях будут храниться два разных значения. Решения, какое значение присваивать зависит от прикладного смысла. Например, если реквизит может иметь значения двух ссылочных типов и, исходя из значений других реквизитов, очевидно, что в нем должно быть значение определенного (одного из этих двух) ссылочного типа, но конкретная ссылка еще не выбрана пользователем, то можно присвоить значение пустой ссылки соответствующего типа. Например, это необходимо для того, чтобы поле ввода позволило бы пользователю ввести значение необходимого типа. А если, исходя из значений других реквизитов, этот реквизит вообще не должен быть заполнен, то тогда ему нужно присвоить значение Неопределено.

В 1С:Предприятии 8 используется понятие "незаполненного значения". Оно применяется для различных сервисных возможностей. Например, у измерений регистров можно установить свойство Запрет незаполненных значений. Тогда система при записи будет автоматически проверять заполнено соответствующее измерение или нет. Так же существуют свойства АвтоОтметкаНезаполненного и свойство АвтоВыборНезаполненного. Они управляют соответственно автоматическим подчеркиванием незаполненного значения и автоматическим началом выбора незаполненного значения. 
Во всех случаях для проверки того заполнено значение или нет, используется единый принцип. Значение считается незаполненным, если оно равно значению по умолчанию для своего типа. Соответственно незаполненными значениями будет число 0, строка, не содержащая символов, пустая ссылка на элемент справочника и т.д.

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

Рекомендуется также ознакомиться с разделами:
"Особенности использования объекта "ОписаниеТипов""
"Чем отличается значение типа Неопределено и значение типа Null?"
"Как проверить дату на пустое значение? Есть ли аналог функции ПустоеЗначение()?" 
"Автовыбор в полях ввода" 
"Работа со свойствами поля ввода АвтоОтметкаНезаполненного и ОтметкаНезаполненного"
Garstag,
09.02.09, 17:15 Вывод табличного документа, размещенного в экранной форме, в отдельное окно
Если какой-нибудь отчет был выведен в элемент управления "Поле табличного документа" в экранной форме, то при необходимости его можно показать в отдельном окне или сохранить в файл без повторного формирования отчета. Для этого нужно выполнить следующий фрагмент программы:



ТД = Новый ТабличныйДокумент;
ТД.Вывести(ЭлементыФормы.ПолеТабличногоДокумента.ПолучитьОбласть());
ТД.Показать(); //для показа на экране
ТД.Записать("c:\report.htm", ТипФайлаТабличногоДокумента.HTML); //для сохранения в HTML-файл
Vladal,
09.02.09, 17:14 Особенности использования настроек печати табличного документа
Данный раздел описывает особенности работы с настройками печати табличного документа из встроенного языка 1С:Предприятие.

Работа с настройками печати

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

Пример правильной установки параметров печати:



ЭлементыФормы.ПолеТабличногоДокумента1.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт;
ЭлементыФормы.ПолеТабличногоДокумента1.ИмяПараметровПечати = "ОтчетОПродажах";


Пример неправильной установки параметров печати:



ЭлементыФормы.ПолеТабличногоДокумента1.ИмяПараметровПечати = "ОтчетОПродажах";
 // Данная настройка заменит настройки пользователя
ЭлементыФормы.ПолеТабличногоДокумента1.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт;



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

Пример:


Если ЭлементыФормы.ПолеТабличногоДокумента1.ИмяПараметровПечати = "" Тогда 
  ЭлементыФормы.ПолеТабличногоДокумента1.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт;
  ЭлементыФормы.ПолеТабличногоДокумента1.ИмяПараметровПечати = "ОтчетОПродажах";
КонецЕсли;


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

При вызове метода табличного документа Показать(), в случае если у табличного документа было установлено данное свойство, табличный документ будет показан в окне с размерами, которые он имел при закрытии в момент последнего просмотра.

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


// Создадим документ, в который будет выводиться результат отчета
ТабДок = Новый ТабличныйДокумент;
// Выведем отчет в документ
Отчет(ТабДок);
// Установить имя сохранения настроек положения окна
ТабДок.ИмяСохраненияПоложенияОкна = "РасходнаяНакладная";
// Отобразить табличный документ.
ТабДок.Показать();



В данном примере табличный документ будет открыт в окне с размерами, которые у него были перед последним закрытием окна.
Gorus,
09.02.09, 14:34 Подготовка конфигурации к работе в распределенной информационной базе
Конфигурация, разработанная для обычной информационной базы, в большинстве случаев требует адаптации для работы в распределенной информационной базе. В этом разделе мы рассмотрим основные методы адаптации конфигурации к работе в распределенной информационной базе. Описанные методы не являются исчерпывающими, ими можно ограничиться, в случае когда необходимо обеспечить простой обмен данными. Например, разделение на два офиса с полным дублированием информации в них. Если же требуется реализация специфической схемы обмена, то может потребоваться реализация сложной архитектуры распределенного решения, влекущая за собой серьезную переработку конфигурации. Например, разрабатывается схема обмена, в которой данные из организаций холдинга должны передаваться в центральную информационную базу в виде сводных данных за определенный период. В этом случае требуется реализация в конфигурации соответствующих объектов для хранения детальной и сводной информации.
Одной из особенностей работы в модели распределенной информационной базы является возможность создания в различных узлах объектов (документов, элементов справочника, видов характеристик и т.д.), обладающих одинаковыми номерами (кодами). Это может привести к возникновению в одной информационной базе объектов с одинаковыми номерами (кодами). В случае когда назначение номера (кода) выполняется системой автоматически, для подобных объектов необходимо ввести префиксацию, идентифицирующую место создание объекта. Для объектов, чьи номера (коды) устанавливаются вручную, подобной префиксации реализовывать не нужно (например: коды счетов назначаются пользователями вручную, добавление префикса для них является неправильным).
Для объектов, требующих наличия префикса в номере (коде), необходимо: 
установить тип номера (кода) в значение Строка; 
добавить в конфигурацию объект метаданных Константа, в котором будет установлено значение префикса номера (кода) однозначно идентифицирующее данный узел распределенной информационной базы(значение константы должно быть уникальным среди всех узлов распределенной информационной базы, сама константа не должна быть включена в состав плана обмена, на базе которого развернута распределенная информационная база); 
реализовать в модулях объектов предопределенные процедуры, выполняемые при установке номера (кода) - ПриУстановкеНовогоНомера (ПриУстановкеНовогоКода) - реализация должна использовать в качестве значения Префикса значение описанной ранее константы. 

Работа конфигурации в распределенной информационной базе подразумевает обмен данными между узлами распределенной информационной базы. В процессе обмена порядок следования данных в сообщениях обмена не определен. При чтении данных могут возникать ситуации, при которых считанные данные ссылаются на несуществующие (возможно еще не загруженные) данные. При записи считанных данных в информационную базу, необходимо учесть возможность наличия неразрешенных ссылок в записываемых данных. Для этого в предопределенных процедурах ПередЗаписью, ПриЗаписи и ПередУдалением необходимо учитывать свойство Загрузка: при записи данных средствами механизма распределенной информационной базы данное свойство будет установлено в значение Истина. В указанных процедурах в режиме Загрузка не следует выполнять различных проверок (например, связанных с наличием тех или иных данных, участвующих в обмене - регистратор записываемого набора записей регистра накопления может быть еще не прочитан из сообщения обмена); не рекомендуется также выполнять изменение связанных данных. В данном режиме рекомендуется дать возможность системе записать прочитанные данные. Контроль допустимости данных для данного узла распределенной информационной базы может быть осуществлен в соответствующих обработчиках, вызываемых при чтении сообщения обмена (ПриПолученииДанныхОтПодчиненного, ПриПолученииДанныхОтГлавного).

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

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

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

Выполнение этих рекомендаций позволяет просто настроить обмен данными в рамках распределенной информационной базы, дальнейшая адаптация конфигурации зависит от конкретной специфики обмена.
Advisar,
09.02.09, 14:33 Способы регистрации изменений данных в механизмах обмена данными
В платформе 1С:Предприятие 8 реализовано два механизма обмена данными: универсальный механизм обмена данными и механизм распределенной информационной базы. Оба эти механизма базируются на одних тех же технологиях. Одной из этих технологий является служба регистрации изменений данных.
Изменения данных могут регистрироваться в автоматическом режиме. Для этого необходимо при включении объекта метаданных в состав плана обмена разрешить автоматическую регистрацию: установить признак Авторегистрация в значение Разрешить.

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

Регистрация изменений всех данных для указанного узла

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

Пример. Регистрация изменения всех данных для узла Узел:



 ПланыОбменаМенеджер.ЗарегистрироватьИзменения(Узел, Неопределено);


Регистрация изменений всех данных одного типа

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

Пример: регистрация изменения всех элементов справочника Номенклатура для узла Узел:



ПланыОбменаМенеджер.ЗарегистрироватьИзменения(Узел, Метаданные.Справочники.Номенклатура);


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

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

Регистрация изменений данных объектных типов

К объектным типам относятся справочники, документы, планы счетов, планы видов характеристик, планы расчета, бизнес-процессы, задачи. Для их регистрации необходимо вызвать метод ЗарегистрироватьИзменения() менеджера планов обмена, передав ему в качестве параметра Данные либо сам объект, либо ссылку на него.

Регистрация изменений наборов записей

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

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

К таким регистрам относятся регистры накопления, регистры бухгалтерии, регистры расчета и регистры сведений со свойством РежимЗаписи, установленным в значение ПодчинениеРегистратору. Для регистрации изменений наборов записей указанных регистров необходимо вызвать метод ЗарегистрироватьИзменения() менеджера планов обмена, передав ему в качестве параметра Данные набор записей с установленным отбором, в котором в элемент отбора Регистратор установлено значение регистратора данного набора записей. При этом чтение данных набора записей перед его регистрацией не обязательно.

Регистрация изменений наборов записей независимых регистров

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

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

Пример. Регистрация всех данных регистра сведений КомплектующиеНоменклатуры, имеющего измерения Номенклатура и ХарактеристикаНоменклатуры (входящие в основной отбор), а также измерения Комплектующая и ХарактеристикаКомплектующей (не входящие в основной отбор) и являющегося непериодическим:
 


Запрос = Новый Запрос;
  Запрос.Текст =
  "ВЫБРАТЬ РАЗЛИЧНЫЕ
  | КомплектующиеНоменклатуры.Номенклатура,
  | КомплектующиеНоменклатуры.ХарактеристикаНоменклатуры
  |ИЗ
  | РегистрСведений.КомплектующиеНоменклатуры КАК КомплектующиеНоменклатуры";
  Выборка = Запрос.Выполнить().Выбрать();
  Набор = РегистрыСведений.КомплектующиеНоменклатуры.СоздатьНаборЗаписей();
  Пока Выборка.Следующий() Цикл
  Набор.Отбор.Номенклатура.Значение = Выборка.Номенклатура;
  Набор.Отбор.Номенклатура.Использование = Истина;
  Набор.Отбор.ХарактеристикаНоменклатуры.Значение = Выборка.ХарактеристикаНоменклатуры;
  Набор.Отбор.ХарактеристикаНоменклатуры.Использование = Истина;
   
  ПланыОбмена.ЗарегистрироватьИзменения(Узел, Набор);
  КонецЦикла;
AlexHummer, Rayne,
09.02.09, 14:29 Восстановление узла распределенной информационной базы из резервной копии
В случае возникновения ситуации, при которой необходимо восстановить резервную копию информационной базы, работающую в рамках распределенной информационной базы, можно воспользоваться следующими рекомендациями.

Процедура восстановления информационной базы корневого узла

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

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

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

  • Восстановление в информационной базе подчиненного узла конфигурации главного узла
    • Отключение от распределенной информационной базы - осуществляется путем установки свойству Главный узел значения Неопределено. 
      Для этого в режиме 1С:Предприятия необходимо выполнить метод менеджера планов обмена: ПланыОбмена.УстановитьГлавныйУзел(Неопределено)
    • агрузка конфигурации главного узла - для восстановления работы в распределенной информационной базе необходимо полное соответствие конфигураций главного и подчиненного узлов. Для выполнения этого условия необходимо загрузить конфигурацию (.cf), полученную из главного узла, в информационную базу подчиненного узла (режим объединения конфигураций в данном случае использовать нельзя).
  • Синхронизация номеров сообщений между главным и подчиненным узлами.
    Для правильного обмена сообщениями в распределенной информационной базе необходимо, чтобы соблюдалось условие: номер принимаемого сообщения должен быть больше номера, записанного в реквизите НомерПринятого узла, соответствующего информационной базе - источнику сообщения. 
    Номер сообщения получается путем добавления единицы к номеру последнего принятого сообщения (значение реквизита НомерОтправленного узла, соответствующего информационной базе - приемнику сообщения).
  • Подключение к распределенной информационной базе.
    Для подключения информационной базы подчиненного узла обратно в распределенную информационную базу необходимо установить свойству Главный узел прежнее значение.
  • Синхронизация данных главного и подчиненного узлов.
    Синхронизация данных может выполняться в обе стороны: от главного узла в подчиненный и от подчиненного узла в главный. В обоих случаях достаточно лишь выполнить регистрацию требуемых данных в службе регистрации изменений (для этого можно воспользоваться методом менеджера планом обмена ПланыОбмена.ЗарегистрироватьИзменения()).
После выполнения описанных действий работа распределенной информационной базы может продолжаться в обычном режиме.
Advisar,
09.02.09, 14:23 Отличия механизмов обмена данными 1С:Предприятия 8 и 1С:Предприятия 7.7
В данном разделе кратко описаны различия в механизмах распределенной информационной базы 1С:Предприятия 8 и компоненты "Управление распределенными информационными базами" 1С:Предприятия 7.7 (УРИБ). Целью раздела не является полный анализ различий двух механизмов, скорее это попытка оказать помощь разработчику, использовавшему 1С:Предприятия 7.7, при построении распределенной информационной базы 1С:Предприятия 8.
В платформе 1С:Предприятие 8 помимо механизма распределенной информационной базы также присутствует универсальный механизм обмена данными. Универсальный механизм обмена данными позволяет производить обмен не только между идентичными конфигурациями, но и конфигурациями, имеющими различную структуру, а также с другими программными системами. Универсальный механизм обмена и механизм распределенной информационной базы основываются на одних и тех же механизмах платформы 1С:Предприятие и представлены в конфигурации объектами метаданных ПланОбмена. Возможно не только одновременное использование обоих механизмом для осуществления обмена данными - для этого используется несколько объектов метаданных ПланОбмена, в которых выбирается используемых механизм и определяется основная логика обмена данными.

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

Общие принципы

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

Структура распределенной информационной базы

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

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

Передача изменений между узлами распределенной информационной базы

В компоненте УРИБ для передачи изменений между узлами распределенной информационной базы использовались файлы передачи данных, они имели закрытый формат и представляли собой ZIP-архив. В платформе 1С:Предприятие 8 для передачи изменений данных и конфигурации используются сообщения обмена - документы XML. Формат сообщения обмена открыт и описан в документации к платформе. Сообщение обмена может быть передано в узел-приемник любым способом. Для уменьшения размера файла, содержащего сообщение обмена, он может быть сжат. Платформа предоставляет возможность автоматического сжатия файла с сообщением обмена при отправке и распаковки при приеме, используя алгоритмы сжатия ZIP.

Создание узлов распределенной информационной базы

Компонента УРИБ предоставляла единственную возможность создания информационной базы периферийного узла распределенной информационной базы - выгрузка образа новой периферийной информационной базы в файл. В отличие от компоненты УРИБ в платформе версии 8 нет ограничений на способ создания информационной базы, включаемой в состав распределенной информационной базы. Основным требованием является идентичность конфигураций включаемой информационной базы и распределенной информационной базы. Для удобства создания информационной базы нового узла в платформе 1С:Предприятие 8 предусмотрена процедура создания начального образа. Начальный образ может быть создан как в виде файлового варианта информационной базы, так и в виде клиент-серверного варианта.

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

Синхронизация конфигураций

Как и для компоненты УРИБ, механизм распределенной информационной базы платформы версии 8 предполагает обязательную идентичность конфигураций при приеме изменений данных в узле распределенной информационной базы. Эта идентичность обеспечивается средствами платформы. Изменения конфигурации передаются вместе с изменениями данных от главного узла к подчиненному. Платформой обеспечивается возможность приема измененных данных только после чтения изменений конфигурации и обновления конфигурации базы данных. Также платформа контролирует невозможность приема данных от узла, для которого имеются зарегистрированные изменения конфигурации.

Свойство "Только получатель"

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

Участники обмена

Аналогично компоненте УРИБ обмен в платформе 1С:Предприятие 8 осуществляется "пообъектно". Однако в отличие от УРИБ в версии 8 движения документа (являющиеся, по сути, наборами записей различных регистров) мигрируют независимо.

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

Область миграции

Понятие "область миграции", присутствовавшее в компоненте УРИБ, отсутствует в механизме распределенной информационной базы платформы 1С:Предприятие 8. Логика обмена должна соответствовать общей прикладной логике работы конфигурации. Логика миграции данных определяется средствами встроенного языка и может реализовываться как посредством управления регистрацией изменений данных, так и фильтрацией данных при загрузке/выгрузке сообщений обмена.

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

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

Регистрация изменений

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

Обмен

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

Также стоит отметить, что все действия по формированию и приему файлов переноса данных в компоненте УРИБ выполнялись в режиме Конфигуратора (имелась также возможность выполнять эти действия в пакетном режиме). В свою очередь в платформе 1С:Предприятие 8 обмен производится в режиме 1С:Предприятие, что сильно увеличивает гибкость обмена. Например, процедуры чтения и записи сообщений обмена могут быть реализованы для работы в COM-соединении, что делает возможным их вызов из других приложений.

Разрешение коллизий

В версии платформы 1С:Предприятие 8 коллизии, возникающие при обмене данными, могут быть разрешены средствами встроенного языка не только в момент регистрации изменений или записи элементов данных (как это было возможно в УРИБ), но и на этапе выгрузки/загрузки измененных данных. Это позволяет достичь гибкости в алгоритмах разрешения коллизий.

Примеры использования различных возможностей, а также некоторые примеры реализации обмена можно найти в демонстрационной конфигурации "Обмен данными".
Advisar, aRUSt,
09.02.09, 13:30 Создание узла распределенной информационной базы
Создание нового узла распределенной информационной базы в платформе 1С:Предприятие 8 можно выполнить несколькими способами:

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

Создание начального образа

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

Интерактивное создание начального образа

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

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

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

Создание узла из конфигурации

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

  1. В информационной базе - узле распределенной информационной базы, для которой необходимо создать подчиненный узел, создаем узел плана обмена, устанавливаем его код и заполняем все необходимые для него реквизиты. В случае если узел, для которого необходимо создать информационную базу уже существует данный пункт можно пропустить.
  2. Сохраняем конфигурацию данной информационной базы в файл.
  3. Создаем пустую информационную базу там, где необходимо создание узла распределенной информационной базы.
  4. Загружаем конфигурацию, созданную в пункте 2, во вновь созданную информационную базу.
  5. Обновляем конфигурацию базы данных.
  6. В режиме 1С:Предприятия заполняем данные узла ЭтотУзел плана обмена данными, соответствующими данным узла, для которого создается узел распределенной информационной базы, в исходной информационной базе (информационной базе главного узла). Коды указанных узлов должны совпадать.
  7. Создаем узел плана обмена, который будет соответствовать информационной базе главного узла и заполняем его данными, соответствующими данным узла ЭтотУзел в исходной информационной базе. Коды указанных узлов должны совпадать.
  8. При помощи процедуры встроенного языка ПланыОбменаМенеджер.УстановитьГлавныйУзел() устанавливаем в свойство ГлавныйУзел значение ссылки на узел, созданный в пункте 7.
После выполнения пункта 8 создание узла распределенной информационной базы считается законченным. Созданная информационная база может участвовать в обмене данными в рамках распределенной информационной базы.

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

  • в информационной базе главного узла распределенной информационной базы выполнить регистрацию данных, которые необходимо передать в новый узел;
  • выполнить процедуру обмена данными между главным узлом и созданным узлом распределенной информационной базы.
Создание узла из копии информационной базы

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

  1. В оригинале информационной базы - узле распределенной информационной базы, для которой необходимо создать подчиненный узел, создаем узел плана обмена, устанавливаем его код и заполняем все необходимые для него реквизиты. В случае если узел, для которого необходимо создать информационную базу уже существует данный пункт можно пропустить.
  2. В копии информационной базы удаляем все узлы соответствующего плана обмена.
  3. Создаем новый узел плана обмена путем копирования узла ЭтотУзел.
  4. Заполняем данные узла ЭтотУзел значениями, аналогичными содержащимся в узел созданном в пункте 1. Значение кодов узлов должны совпадать.
  5. Изменяем код узла, созданного в пункте 3, на код узла ЭтотУзел информационной базы оригинала.
  6. При помощи процедуры встроенного языка ПланыОбменаМенеджер.УстановитьГлавныйУзел() устанавливаем в свойство ГлавныйУзел значение ссылки на узел, созданный в пункте 3.
После выполнения пункта 6 создание узла распределенной информационной базы считается законченным. Созданная информационная база может участвовать в обмене данными в рамках распределенной информационной базы.

Состав данных полученного узла распределенной информационной базы полностью соответствует составу данных информационной базы оригинала (никакой фильтрации данных согласно составу мигрирующих объектов и в процедуре ПриОтправкеДанныхПодчиненному() произведено не было). Состав данных, необходимый для правильной работы узла, должен быть скорректирован самостоятельно.
Advisar, Chetty, Deni82, Rayne,
09.02.09, 13:00 Управление областью миграции данных в механизмах обмена данными
Область распространения данных (миграция) между узлами в рамках механизмов обмена данными должна соответствовать общей логике функционирующей конфигурации. При управлении миграцией данных следует учитывать то, что в платформе 1С:Предприятие 8 не используется понятие "место создания". Данные могут быть созданы в любом из узлов, при этом этот факт никак не отражается в самих данных.
Определение принадлежности данных должно быть реализовано на основе прикладной логики работы конфигурации (например: склада для товара). Таким образом, физическая структура распределенной информационной базы никоим образом не должна оказывать влияние на распространение данных. Логическая привязка данных может изменяться со временем, также может меняться сама прикладная логика работы конфигурации. Независимо от этого может изменяться физическая структура распределенной информационной базе: добавляться новые узлы или удаляться существующие, может производиться слияние узлов в один.

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

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

Пример 1. Разделение одного физического узла распределенной информационной базы на два

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

Пример 2. Логическая привязка данных к узлу

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

Пример 3. Логическое перемещение данных между узлами

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

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

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

Регистрация изменений

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

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

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

Передача изменений

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

Прием изменений

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

Рассмотрим типовые случаи, возникающие при приеме сообщений обмена. Пусть имеются два узла распределенной информационной базы: Центральный узел (ЦУ) и Периферийный узел (ПУ).

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

  3. Если в ПУ производится загрузка сообщения обмена, содержащего изменения конфигурации из ЦУ, но эти изменения уже были загружены в информационную базу и конфигурация базы данных успешно обновлена, то изменения конфигурации не загружается и процесс чтения сообщения обмена продолжается.
Advisar,

22 страниц V  « < 19 20 21 22 >
RSS Текстовая версия Сейчас: 16.04.24, 23:13
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!