/// <summary>
        /// Регистрация документа.
        /// </summary>
        /// <param name="session">Текущая сессия.</param>
        /// <param name="edoc">Экземпляр документа.</param>
        /// <param name="documentRegisterId">ИД журнала регистрации.</param>
        /// <param name="regNumber">Рег. №</param>
        /// <param name="regDate">Дата регистрации.</param>
        /// <param name="logger">Логировщик.</param>
        /// <returns>Список ошибок.</returns>
        public static IEnumerable <Structures.ExceptionsStruct> RegisterDocument(Session session, Sungero.Docflow.IOfficialDocument edoc, int documentRegisterId, string regNumber, DateTime?regDate, Guid defaultRegistrationRoleGuid, NLog.Logger logger)
        {
            var exceptionList = new List <Structures.ExceptionsStruct>();

            Sungero.Docflow.IRegistrationGroup regGroup = null;
            // TODO Кэшировать.
            var documentRegister = BusinessLogic.GetDocumentRegister(session, documentRegisterId);

            if (documentRegister != null && regDate != null && !string.IsNullOrEmpty(regNumber))
            {
                edoc.RegistrationDate   = regDate;
                edoc.RegistrationNumber = regNumber;
                edoc.DocumentRegister   = documentRegister;
                edoc.RegistrationState  = Sungero.Docflow.OfficialDocument.RegistrationState.Registered;
                regGroup = documentRegister.RegistrationGroup;
            }
            else
            {
                var message = string.Format("Не удалось найти соответствующий реестр с ИД \"{0}\".", documentRegisterId);
                exceptionList.Add(new Structures.ExceptionsStruct {
                    ErrorType = Constants.ErrorTypes.Warn, Message = message
                });
                logger.Warn(message);
            }

            if (regGroup != null)
            {
                edoc.AccessRights.Grant(regGroup, DefaultAccessRightsTypes.FullAccess);
            }
            else
            {
                var message = string.Format("Не была найдена соответствующая группа регистрации. Права на документ будут выданы для роли c Guid {0}.", defaultRegistrationRoleGuid.ToString());
                exceptionList.Add(new Structures.ExceptionsStruct {
                    ErrorType = Constants.ErrorTypes.Warn, Message = message
                });
                logger.Warn(message);
                var regRole = BusinessLogic.GetRoleBySid(session, defaultRegistrationRoleGuid);
                edoc.AccessRights.Grant(regRole, DefaultAccessRightsTypes.FullAccess);
            }
            try
            {
                edoc.Save();
            }
            catch (Exception ex)
            {
                exceptionList.Add(new Structures.ExceptionsStruct {
                    ErrorType = Constants.ErrorTypes.Warn, Message = ex.Message
                });
            }
            return(exceptionList);
        }