Версия набора расширений для сеанса не найдена в параметрах сеанса 1с

Обновлено: 04.07.2024

Использование параметров сеанса

Область применения: управляемое приложение, мобильное приложение, обычное приложение.

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

  • ТекущийПроект – тип СправочникСсылка.Проекты ;
  • ОбменДаннымиВключен – тип Булево ;
  • РабочееМестоКлиента – тип СправочникСсылка.РабочиеМеста .

Параметры сеанса доступны из встроенного языка 1С:Предприятия , например:

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

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

ГДЕ Документ.Автор = &ТекущийПользователь

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

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

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

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

Установка параметров сеанса "по требованию"

2.1. Не следует производить инициализацию параметров сеанса при запуске программы, так как:

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

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

Пример установки параметров сеанса "по требованию":

Если ИменаПараметровСеанса = Неопределено Тогда
// Раздел установки параметров сеанса при начале сеанса (ИменаПараметровСеанса = Неопределено)
// Выполняется установка параметров сеанса, которые можно инициализировать
// при начале работы системы

Иначе
// Установка параметров сеанса "по требованию"

// Параметры сеанса, инициализация которых требует обращения к одним и тем же данным
// следует инициализировать сразу группой. Для того, чтобы избежать их повторной инициализации,
// имена уже установленных параметров сеанса сохраняются в массиве УстановленныеПараметры
УстановленныеПараметры = Новый Массив;
Для Каждого ИмяПараметра Из ИменаПараметровСеанса Цикл
УстановитьЗначениеПараметраСеанса(ИмяПараметра, УстановленныеПараметры);
КонецЦикла;

// Установить значения параметров сеанса и возвратить имена установленных параметров сеанса
// в параметре УстановленныеПараметры.
//
// Параметры
// ИмяПараметра - Строка - имя параметра сеанса, который требуется установить (проинициализировать).
// УстановленныеПараметры - Массив - массив, в который добавляются имена
// установленных (проинициализированных) параметров.
//
Процедура УстановитьЗначениеПараметраСеанса(Знач ИмяПараметра, УстановленныеПараметры)

// Если в данном вызове УстановкаПараметровСеанса параметр ИмяПараметра уже
// был установлен - возврат.
Если УстановленныеПараметры.Найти(ИмяПараметра) <> Неопределено Тогда
Возврат;
КонецЕсли;

Если ИмяПараметра = "ТекущийПользователь" Тогда
ПараметрыСеанса.ТекущийПользователь = <значение>;
ПараметрыСеанса.<другой параметра сеанса> = <значение>;
УстановленныеПараметры.Добавить(ИмяПараметра);
УстановленныеПараметры.Добавить("<другой параметра сеанса>");
КонецЕсли;

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

Теперь то, как оно на самом деле происходит. После запуска программы, несмотря на то, что МоёФизлицо описано в конфигураторе, чтение ПараметрыСеанса.МоёФизлицо дает ошибку. В хелпе написано что его за каким-то лядом надо инициализировать, причём ПриНачалеРаботыСистемы его инициализировать не получается, а только в модуле сеанса, который тоже непонятно зачем выдумали. Ну ОК, в модуле сеанса типа есть Процедура УстановкаПараметровСеанса(ТребуемыеПараметры), причём в хелпе написано что эта процедура вызывается один раз с ТребуемыеПараметры = Неопределено в момент старта системы, а в следующие разы оно срабатывает когда надо какой-то параметр сеанса переинициализировать (нафейхоа?) и типа их массив как раз в ТребуемыеПараметры и лежит. При этом, если поставить брейкпойнт при УстановкаПараметровСеанса, то в ПараметрыСеанса коллекция пустая, несмотря на то, что в конфигураторе их описано сто штук. И как вишенка на торте я вижу, что УстановкаПараметровСеанса вызывается много раз с ТребуемыеПараметры = Неопределено, в том числе не только при начале работы системы, а как раз перед тем, как в совершенно другом модуле совершенно другой обработки я этот параметр читаю. Получается, что если мой параметр сеанса не инициализировать, то его и прочитать не получится, а если прописать в коде инициализацию, то оно будет переинициализироваться каждый раз перед чтением. Видимо я не совсем понимаю концепцию разработчиков этого механизма, а в справке об этом не написано.

(10) Инициализируйте наконец параметр сеанса в модуле сеанса в процедуре УстановкаПараметровСеанса.
Если в ТребуемыеПараметры равно Неопределено, а параметр сеанса вам будет нужен, то инициализируйте его, несмотря на Неопределено.
(0)
>УтановкаПараметровСеанса с параметром Неопределено вызывается каким-то фоновым заданием
Как бы, у фоновых заданий свои сеансы -> в любом фоновом задании будет вызова УтановкаПараметровСеанса с Неопределено.
(10) параметр сеанса надо переинициализировать, если он изменился по бизнес-логике. Например, в параметрах сеанса хранится параметр доступа "Доступные объекты" и админ изменил права доступа. Пользователю можно перезайти в систему, а можно просто нажать кнопку "Обновить". По кнопке "Обновить" Ваш программный код заново инициализирует параметры сеанса, а потом вызовет обновление динамического списка, чтобы сработали новые RLS.
(0) Невнимательно читал. Неинициализированные параметры использовать нельзя - это защита от дурака. Но при первом обращении к неинициализированному параметру сеанса платформа дернет для программиста УстановкаПараметровСеанса с указанием, какой параметр необходимо проинициализировать. И вот если и тогда он не будет проинициализирован - тогда будет исключение.
(4) Ну, ходи из УФ за своим параметром сеанса на сервер. Сделай для этого функцию клиент-серверного общего модуля, чтобы если обращение с клиента - то ходило на сервер за ней.
В старых типовых на ОФ когда-то была подобная говносистема глобальных переменных, охватывающая и клиента и сервер. Но потом от нее отказались, слава богу. Потому что злоупотребление глобальным контекстом - это всегда костыли, чреватые боком. Да и в УФ это особо неэффективно. Да и особенно чревато в силу повсеместной асинхронности.
Если нужно банальное кэширование, то это эффективно делать "по месту". А на уровне общих модулей вообще есть готовый механизм повторного использования возвращаемых значений.
(2) Да. С параметром Неопределено вызывается один раз. Когда-то оно вообще один раз и дергалось. Но в новых версиях 1С для ускорения старта программы реализовали отложенную инициализацию. Чтобы при старте приложения можно было инициализировать необходимый минимум параметров, а остальное - при первом обращении.

(16) Могу скриншоты показать. По-видимому, (12) прав, у фонового задания свои параметры сеанса

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

(17) ИМХО, фоновые задания созданные из сеанса пользователя, используют его параметры сеанса. Иначе никакой отчет СКД при выполнении в фоне не смог бы использовать RLS, завязанные на параметры сеанса. Вот фоновые, созданные регламентными заданиями - те да.
ЗЫ. Общая практика - не хранить пароль вообще никак и никогда. Провел аутентификацию, выдал права (провел авторизацию) - дальше просто используешь эти права.
(18) Там шифровать/расшифровывать надо "на лету", соответственно солёный пароль необходим.
(19) Тогда и говорить лучше не про пароль, а про ключ шифрования. Прямая задача пароля - аутентификация. Лучше сразу не смешивать понятия - может аукнуться.
Ну а так-то - да. Пишешь ключ шифрования в параметр сеанса и потом используешь. На старте по Неопределено инициализируешь каким-то дефолтным значением, которое в бизнес-логике интерпретируешь как пустое.
Не очень понятно, на чем ты споткнулся. То, что у тебя отчет формируется в фоне с пустым ключом шифрования - это не больше чем твое предположение, насколько я понял. Ну так проверь его. По-идее, все там должно быть в порядке.

(17)
>ИМХО, фоновые задания созданные из сеанса пользователя, используют его параметры сеанса.
От "родительского" сеанса берутся только параметры сеанса со значения разделителей.

>Иначе никакой отчет СКД при выполнении в фоне не смог бы использовать RLS
Руками (а не тем, на чём сидят) сделанный RLS использует только параметры сеанса инициализируемые "по запросу" (через УстановкаПараметровСеанса) - они просто инициализируются в сеансе фонового задания так же как и в родительском (если при этом в БД что-то поменялось - значения могут и разойтись).

(0) 1. Инициализировать параметры сеанса ты можешь в любом месте программы в серверном коде
2. Читать неинициализированные параметры сеанса нельзя - вывалится исключение
3. При попытке чтения неинициализированного параметра сеанса вызывается УстановкаПараметровСеанса(<ИмяПараметра>) в модуле сеанса, с именем требуемого параметра. Здесь тебе дают последний шанс инициализировать параметр. Если ты и здесь этого не сделаешь - вывалится исключение (см. пункт 2)
4. При старте программы один раз вызывается УстановкаПараметровСеанса(Неопределено) в модуле сеанса. Здесь ты можешь провести первоначальную инициализацию параметров сеанса, например заполнить неизменяемые (например, ТекущийПользователь). А можешь ничего не делать - решать тебе
5. Параметры сеанса в клиентском приложении и в запущенном из него фоновом задании общие. В этом вся суть параметров сеанса - из-под одного сеанса может быть несколько подключение к базе

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

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


Проблема решается следующим способом.

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


2. F7 - Обновить конфигурацию базы данных



4. F7 - Обновить конфигурацию базы данных


Специальные предложения

Electronic Software Distribution

Интеграция 1С с системой Меркурий

Алкогольная декларация

Готовые переносы данных

54-ФЗ

Управление проектом на Инфостарте

Траектория обучения 1С-разработчика

А еще лучше перед обновлением платформы иметь копию расширений, вот она-то и спасет от подобного рода проблем. (1) дорабатывать все равно придется - переносить из копии расширения (корректно открывающейся только на старой версии БП) в новое расширение в обновленной БП. (1)Нет ничего не придется дорабатывать. У меня был случай 1 в 1. Просто расширение откатал в новой версии платформы КАК загрузить и поделов! А еще лучше - не пилить на расширениях сильно связанные блоки.

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

Результат - минимальный набор изменений.
3 года - ничего ни разу не слетело.

(3) Это всё классно, только обновление после этого происходит в разы медленнее, увы. (13) На днях обновлял 6 баз, из них 5 на полной поддержке. БП и ЗУП. В одной включена возможность изменения и добавлен один справочник. Больше никаких изменений, ни форм, ни ролей, ни подсистем. Обновлял параллельно. 5 типовых обновились быстрее чем одна, с возможностью изменений. :(

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

Такие конфы можно вообще автоматически обновлять. Главное настроить обновлятор)

(3) ну вот три года надо писать расширения, чтобы освоить программное изменение форм и другие фишки.. а проще и доступнее нельзя? (6) ну я не освоил программное изменение, и что? Кому как проще, тот так и делает.
Сколько времени уйдет на отладку этого программного кода? Мне проще прям на форму кнопку закинуть и повесить на нее команду.

(9) Может быть потому, что на этапе разработки вы выбираете решения "проще", потоп при обновлении получается сложнее?

ИМХО, чем меньше я буду тратить времени на очень занудную задачу обновления, тем радостнее будет мне решать сложные задачи.
А для программного изменения форм есть на ИС помогаторы, инструкции, статьи и инструменты

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

Что за флаг? Где он? Почему на скрине совсем другие стрелочки какие-то?

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


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

Просмотры 12199

Загрузки 0

Рейтинг 37

Создание 26.04.20 13:00

Обновление 26.04.20 13:00

№ Публикации 1228671

Тип файла Нет файла

Конфигурация 1С:Бухгалтерия 3.0

Операционная система Не имеет значения

Вид учета Не имеет значения

Доступ к файлу Бесплатно (free)

Код открыт Да


См. также

Несколько простых приемов для удобной работы в конфигураторе

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

12.11.2021 4594 acces969 81

Кейсы решения задач на СКД

Разработчик 1С в компании Neti Александр Крынецкий выступил на Infostart Meetup, посвященном практике работы с СКД. Александр поделился с коллегами кейсами по решению сложных задач при работе с СКД.

08.11.2021 2547 echo77 7

Как спроектировать структуру регистра сведений

«Что может быть проще?» — это первое, что приходит в голову. Но что, если это не так? В этой статье мы попробуем затронуть некоторые вопросы, которые могут возникнуть при проектировании больших регистров.

08.11.2021 3866 Neti 60

Готовые механизмы 1С: ЗУП, представления

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

03.11.2021 1558 Margo462 17

Моделирование в 1С:ERP - практика анализа движений документов

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

01.11.2021 893 pma_2015 9

Типовые операции в 1С: БГУ 2. Часть 4. Заключение

В данной статье автор расскажет, что такое типовые операции в конфигурации бухгалтерии для госсектора, установит стандарты качества написания типовых операций. Часть 4 "Заключение". Завершаем типовую операцию из ТЗ, изучаем простые условия, немного касаемся сложных условий, прикасаемся к булевой алгебре, изучаем функцию ЗНАЧЕНИЕ() и прочие прикладные функции как примеры, задаем стандарты типовой операции.

14.09.2021 461 ldmonster 8

Типовые операции в 1С: БГУ 2. Часть 3

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

10.09.2021 491 ldmonster 0

Типовые операции в 1С: БГУ 2. Часть 2

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

09.09.2021 701 ldmonster 0

Типовые операции в 1С: БГУ 2. Часть 1

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

07.09.2021 757 ldmonster 2

Новая упрощенная процедура перерасчета записей регистров расчета (пример)

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

24.03.2021 634 galexmvs 5

Динамический список и поиск. неприятностей

Страх и ненависть в поиске по динамическому списку, или "Кое-что о неоптимальном отборе".

17.03.2021 4515 Yashazz 37

Централизованное управление НСИ при внутрикорпоративном внедрении Фреш

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

19.11.2020 1659 zivan38 0

Хранилище версий объектов в условиях массовых изменений

Проблема хранения версий объектов при огромном количестве изменений.

08.11.2020 1314 Punisher_1C 4

Альтернативный способ записи в регистры

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

20.10.2020 2858 DarkAn 30

11.10.2020 14391 hpi 25

Несколько групп для одной номенклатуры в УТ 11

В статье опишу вариант доработки УТ 11 для использования нескольких групп для одной номенклатуры.

23.09.2020 1829 malikov_pro 14

16.09.2020 15387 hpi 37

Регистры бухгалтерии. Виртуальная таблица остатков

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

24.08.2020 11828 YPermitin 1

Регистры бухгалтерии. Еще одна таблица оборотов ДТ / КТ

Виртуальная таблица оборотов ДТ / КТ регистра бухгалтерии. Особенности и применение.

12.08.2020 6666 YPermitin 1

Динамический список, ключи записей. Нюансы

Заметки об особенностях динамических списков с произвольным запросом и видом ключа, отличным от "Авто"

07.08.2020 5315 Yashazz 6

Регистры бухгалтерии. Виртуальная таблица оборотов

Виртуальная таблица оборотов регистра бухгалтерии. Принцип работы, особенности и кое-что еще.

28.07.2020 9512 YPermitin 10

Установка расширений в 1С 8.3

Краткая инструкция, как подключить расширение конфигурации в 1С.

27.07.2020 19830 Mouros 11

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

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

03.04.2020 1904 gtrr34 1

Вложенные СКД

Возможности, нюансы, заметки.

26.03.2020 9674 Yashazz 19

Конвертация расширения cfe в конфигурацию сf руками

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

18.03.2020 10900 wtlz 35

Интеграция "Библиотеки интеграции МДЛП 1.1.2.7" с типовой конфигурацией

Инструкция для интеграции “Библиотеки интеграции МДЛП 1.1.2.7” в типовые конфигурации, на примере конфигурации “Управление нашей фирмой, редакция 1.6 (1.6.18.168)”.

02.03.2020 9307 RPGrigorev 3

Регистры бухгалтерии. Настройки, субконто и движения с субконто

Описание основных настроек регистров бухгалтерии, работы виртуальных таблиц "Субконто" и "Движения с субконто" и кое-что еще.

10.02.2020 24523 YPermitin 13

Обновление релиза измененной типовой конфигурации

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

29.11.2019 15418 John_d 76

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

05.10.2019 4012 malikov_pro 4

Конструирование аналитической структуры плана счетов в программе «1С:Бухгалтерия 8» с целью обеспечения достоверности финансовой отчетности

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

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

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

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

Для реализации ограничения прав доступа в прикладных решениях предназначены специальные объекты конфигурации - Роли.

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

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

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

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

Право Интерактивное удаление помеченных требует наличия основного права Удаление. Интерактивное право Редактирование требует наличия основного права Изменение. Интерактивное право Просмотр требует наличия основного права Чтение.

Кроме этого основные права Изменение и Удаление требуют наличия основного права Чтение.

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

  • чтение - получение записей или их фрагментов из таблицы базы данных;
  • добавление - добавление новых записей без изменения существующих;
  • изменение - изменение существующих записей;
  • удаление - удаление некоторых записей без внесения изменений в оставшиеся.

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


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

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

При этом в самих запросах значение параметров сеанса не устанавливается. Система точно знает, что это параметр сеанса.

Посмотрим на типы данных, которые могут принимать параметры сеансов:


Среди доступных типов мы можем видеть не только стандартные типы (ссылочные типы, примитивные типы данных), но и такие типы как "Фиксированный массив", "Фиксированная структура", "Фиксированное соответствие".

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

Важно отметить, что "Модуль сеанса" всегда исполняется в привилегированном режиме, т.е. контроля прав в этом модуле не существует.

Вообще, касательно привелегированных модулей:

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

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

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

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

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

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

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


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

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

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

Например, при создании документа, неплохо было бы знать его автора. Создаем новый параметр и задаем ему имя "ТекущийПользователь":


Заполняем свойства параметра:


Теперь нам необходимо задать параметру имя текущего пользователя. Открываем модуль сеанса:

В этой инструкции расскажу как бороться с ошибкой подобной этой: "Ошибка подключения расширения: ИмяРасширения. " для 1С:Бухгалтерии 8.3, редакция 3.0.

Прежде всего, речь идёт о расширении, которое вы (или кто-то другой) когда-то подключили к конфигурации и забыли про него.

И теперь, скорее всего после обновления базы, оно перестало работать.

Вариантов решения проблемы всего два.

Найти новую версию расширения и установить её вместо старой

Это самый правильный путь, если вам по прежнему нужны возможности, которые давало расширение.

В этом случае вам нужно связаться с его автором, получить новую версию (новый файл), а затем:

1. Зайти в базу в режиме пользователя.

2. Открыть меню "Функции для технического специалиста. " (у вас его нет?):


3. В открывшемся диалоге раскрыть пункт "Стандартные" и выбрать обработку "Управление расширениями конфигурации":

5. Выбрать новый файл, полученный от автора и загрузить его вместо старой версии.

6. После этого нажать кнопку "Перезапустить":

1С перезапустится и заработает новая версия расширения, уже без ошибок.

Отключить расширение

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

1. Зайти в базу в режиме пользователя.

2. Открыть меню "Функции для технического специалиста. " (у вас его нет?):


3. В открывшемся диалоге раскрыть пункт "Стандартные" и выбрать обработку "Управление расширениями конфигурации":

С уважением, Владимир Милькин (преподаватель школы 1С программистов и разработчик обновлятора).

Как помочь сайту: расскажите (кнопки поделиться ниже) о нём своим друзьям и коллегам. Сделайте это один раз и вы внесете существенный вклад в развитие сайта. На сайте нет рекламы, но чем больше людей им пользуются, тем больше сил у меня для его поддержки.

Читайте также: