поиск ошибок с помощью отладчика

1. Новичок1с 4 12.07.21 06:52 Сейчас в теме
Доброго утра.

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

При добавлении пользователям прав доступа, изменении профиля групп пользователей возникает ошибка:



Переполнение стека встроенного языка на сервере.

Переполнение стека встроенного языка на сервере
{ОбщаяФорма.ПраваДоступаУпрощенно.Форма(458)}: ЗаписатьИзмененияНаСервере(Отказ);
{ОбщаяФорма.ПраваДоступаУпрощенно.Форма(437)}: ЗаписатьИзмененияЗавершение(Null, ОбработкаПродолжения);
{ОбщаяФорма.ПраваДоступаУпрощенно.Форма(327)}: ЗаписатьИзменения();

по причине:
Переполнение стека встроенного языка на сервере
по причине:

ОбщаяФорма.ПраваДоступаУпрощенно.Форма : 852 : ГруппаДоступаОбъект.Записать();
Справочник.ГруппыДоступа.МодульОбъекта : 152 : РегистрыСведений.ТаблицыГруппДоступа.ОбновитьДанныеРегистра(Ссылка);
РегистрСведений.ТаблицыГруппДоступа.МодульМенеджера : 262 : Запрос.УстановитьПараметр("ПраваРолейРасширений", УправлениеДоступомСлужебный.ПраваРолейРасширений());

ОбщийМодуль.УправлениеДоступомСлужебный.Модуль : 4584 : ОбновитьТаблицыГруппДоступаДляПодключенныхРасширений(ПраваРолейРасширений);
...


РегистрСведений.ПараметрыРаботыВерсийРасширений.МодульМенеджера : 62 : НаборЗаписей.Записать();
ОбщийМодуль.УдалениеПомеченныхОбъектовСлужебный.Модуль : 225 : ЗапретитьИспользованиеУдаляемыхОбъектов(Источник, Отказ);
ОбщийМодуль.УдалениеПомеченныхОбъектовСлужебный.Модуль : 1034 : Если ОбщегоНазначения.ЭтоКонстанта(Источник.Метаданные()) Тогда
ОбщийМодуль.ОбщегоНазначения.Модуль : 0
по причине:
Переполнение стека встроенного языка на сервере.



Я запустила отладчик
сейчас при записи возникает такая ошибка ( Принскрин в приложенном файле.)


Прошу доступно объяснить, как найти и устранить эту ошибку и как использовать отладчик в поиске (особенно интересуют общие формы и модули).
Прикрепленные файлы:
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Найденные решения
47. air_mike 25 14.07.21 18:56 Сейчас в теме +0.5 $m
(46)Похоже что у вас проблема как раз в удаленных данных. Т.к. есть ссылки на удаленные объекты(<Объект не найден> ).
Нужно строить запрос, искать эти ссылки и чистить места их упоминания.
Похоже дело в данных конфигурации бит_.
Новичок1с; +1 Ответить
39. nomad_irk 76 12.07.21 12:57 Сейчас в теме
(38)значит спускайтесь в глубь кода, ставьте точки останова на

ГруппаДоступаОбъект.Записать()

и 

УправлениеДоступомСлужебный.ЗапуститьОбновлениеДоступа();


Еще необходимо включить отладку фоновых заданий, вернее подключаться к ним для отладки.
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. nomad_irk 76 12.07.21 07:52 Сейчас в теме
(1)Нажмите F11 и провалитесь внутрь процедуры записи. Далее анализируйте код и выясняйте почему происходит рекурсия.
10. namazi74 4 12.07.21 08:46 Сейчас в теме
(1)
Прошу доступно объяснить, как найти и устранить эту ошибку и как использовать отладчик в поиске (особенно интересуют общие формы и модули).


у вас где-то зациливание само на себя. надо анализировать код и модули, на которые ссылаются
30. spacecraft 12.07.21 11:38 Сейчас в теме
(1) база клиент-серверная или файловая? Разрядность?
Это или рекурсия, или возможно, что при 32 бит стековой памяти не хватает.
31. Новичок1с 4 12.07.21 11:58 Сейчас в теме
(30)
база серверная
64 разрядная система.
1с- 32 разрядная в задач пишет.
33. spacecraft 12.07.21 12:08 Сейчас в теме
(31) ОС может и 64 бит, но главное тут разрядность 1С. Если есть возможность, то попробовать установить 64 бит и там попробовать.
Если база не очень большая, то можно выгрузить dt и загрузить в файловую 64 бит базу и в ней попробовать.
Новичок1с; +1 Ответить
3. Новичок1с 4 12.07.21 08:31 Сейчас в теме
(2)
А в замере производительности её можно отследить??
там максимальное кол 24.
starik-2005; +1 Ответить
4. nomad_irk 76 12.07.21 08:33 Сейчас в теме
(3)чисто теоретически - можно, но это нужно всю простыню проанализировать визуально, нет ли рекурсии.
35. starik-2005 3043 12.07.21 12:33 Сейчас в теме
(3)
А в замере производительности её можно отследить?
Запускаете замер, жмете кнопку, валится ошибка, останавливаете замер, смотрите, что там много-премного раз выполняется. В 1С глубина стека 1748 (если не ошибаюсь). С учетом уже использованной глубины 1700+ раз должна функция где-то вызываться...
36. Новичок1с 4 12.07.21 12:41 Сейчас в теме
(35)
останавливаете замер


отладка-запустить замер производительности.
а как его остановить потом??
есть закрыть, остановить не вижу.
40. starik-2005 3043 12.07.21 13:05 Сейчас в теме
(36)
а как его остановить потом?
Так же.
5. starjevschik 12.07.21 08:35 Сейчас в теме
я бы пошел другим путем. Берем эту процедуру, где ошибка, комментируем сначала всю. Проверяем. Работает? Убираем комментарий с первой строки (двух или десяти - ну смотря сколько строк). Проверяем. Работает? Убираем комментарии дальше. Не работает? Смотрим, что не так делает строка, на которой ошибка.
6. namazi74 4 12.07.21 08:37 Сейчас в теме
(5)
я бы пошел другим путем. Берем эту процедуру, где ошибка, комментируем сначала всю. Проверяем. Работает? Убираем комментарий с первой строки (двух или десяти - ну смотря сколько строк). Проверяем. Работает? Убираем комментарии дальше. Не работает? Смотрим, что не так делает строка, на которой ошибка.

а почему нельзя точки останова использовать?
7. starjevschik 12.07.21 08:38 Сейчас в теме
(6) можно, используйте. Но например если там подписки какие-нибудь, может быть не всегда просто понять, где именно проблема.
8. Новичок1с 4 12.07.21 08:39 Сейчас в теме
Когда я открываю через справочник-
Справочник.Профили групп доступа
я пытаюсь его записать изменить- тоже ругается

возможно в этом моменте не даёт записать и не могут попасть данные в регистр.
9. chg 12.07.21 08:44 Сейчас в теме
Текст процедуры то выложите, что там у вас.
11. Новичок1с 4 12.07.21 08:47 Сейчас в теме
(9)

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

Выложить модуль процедуры из этого справочника??
12. chg 12.07.21 08:47 Сейчас в теме
15. namazi74 4 12.07.21 09:01 Сейчас в теме
(12)
где строка 458


там уже исключение срабатывает. надо смотреть, что собирается
13. nomad_irk 76 12.07.21 08:49 Сейчас в теме
(11)В 458 строке модуля через попытку вызывается процедура, что в ней?
20. Новичок1с 4 12.07.21 09:42 Сейчас в теме
(13)
Процедура ЗаписатьИзмененияЗавершение(НовыйПарольПользователяСервиса, ОбработкаПродолжения) Экспорт
	
	Если НовыйПарольПользователяСервиса = Неопределено Тогда
		Возврат;
	КонецЕсли;
	
	Если НовыйПарольПользователяСервиса <> Null Тогда
		ПарольПользователяСервиса = НовыйПарольПользователяСервиса;
	КонецЕсли;
	
	ОчиститьСообщения();
	
	Отказ = Ложь;
	ОтказПриЗаписиИзменений = Ложь;
	Попытка
Показать

(458 строка)

ЗаписатьИзмененияНаСервере(Отказ);

	Исключение
		ИнформацияОбОшибке = ИнформацияОбОшибке();
		Если ОтказПриЗаписиИзменений Тогда
			ОбщегоНазначенияКлиент.СообщитьПользователю(
				КраткоеПредставлениеОшибки(ИнформацияОбОшибке),,,, Отказ);
		Иначе
			ВызватьИсключение;
		КонецЕсли;
	КонецПопытки;
	
	ПодключитьОбработчикОжидания("УстановитьТекущуюСтрокуЗначенияДоступаПриОшибке", Истина, 0.1);
	
	Если ОбработкаПродолжения = Неопределено Тогда
		Возврат;
	КонецЕсли;
	
	ВыполнитьОбработкуОповещения(ОбработкаПродолжения, Отказ);
	
КонецПроцедуры
Показать
22. nomad_irk 76 12.07.21 09:47 Сейчас в теме
(20)внутри процедуры ЗаписатьИзмененияНаСервере() что находится?
установить курсор на имя процедуры и нажать F12.
Новичок1с; +1 Ответить
23. Новичок1с 4 12.07.21 09:53 Сейчас в теме
(22)
&НаСервере
Процедура ЗаписатьИзмененияНаСервере(Отказ)
	
	Если Не ПроверитьЗаполнение() Тогда
		Отказ = Истина;
		Возврат;
	КонецЕсли;
	
	Пользователи.НайтиНеоднозначныхПользователейИБ(Неопределено);
	
	// Получение списка изменений.
	Запрос = Новый Запрос;
	Запрос.УстановитьПараметр("Пользователь", Параметры.Пользователь);
	Запрос.УстановитьПараметр("Профили", Профили.Выгрузить(, "Профиль, Пометка"));
	Запрос.УстановитьПараметр("ВидыДоступа", ВидыДоступа.Выгрузить(, "ГруппаДоступа, ВидДоступа, ВсеРазрешены"));
	
	ТаблицаЗначений = ЗначенияДоступа.Выгрузить(, "ГруппаДоступа, ВидДоступа, ЗначениеДоступа, ВключаяНижестоящие");
	ТаблицаЗначений.Колонки.Добавить("НомерСтроки", Новый ОписаниеТипов("Число",,,
		Новый КвалификаторыЧисла(10, 0, ДопустимыйЗнак.Неотрицательный)));
	
	ГруппаДоступаВСтроке = Неопределено;
	Для Каждого Строка Из ТаблицаЗначений Цикл
		Если ГруппаДоступаВСтроке <> Строка.ГруппаДоступа Тогда
			ГруппаДоступаВСтроке = Строка.ГруппаДоступа;
			ТекущийНомерСтроки = 1;
		КонецЕсли;
		Строка.НомерСтроки = ТекущийНомерСтроки;
		ТекущийНомерСтроки = ТекущийНомерСтроки + 1;
	КонецЦикла;
	Запрос.УстановитьПараметр("ЗначенияДоступа", ТаблицаЗначений);
	
	Запрос.Текст =
	"ВЫБРАТЬ
	|	Профили.Профиль КАК Ссылка,
	|	Профили.Пометка
	|ПОМЕСТИТЬ Профили
	|ИЗ
	|	&Профили КАК Профили
	|;
	|
	|////////////////////////////////////////////////////////////­////////////////////
	|ВЫБРАТЬ
	|	ВидыДоступа.ГруппаДоступа КАК Профиль,
	|	ВидыДоступа.ВидДоступа,
	|	ВидыДоступа.ВсеРазрешены
	|ПОМЕСТИТЬ ВидыДоступа
	|ИЗ
	|	&ВидыДоступа КАК ВидыДоступа
	|;
	|
	|////////////////////////////////////////////////////////////­////////////////////
	|ВЫБРАТЬ
	|	ЗначенияДоступа.ГруппаДоступа КАК Профиль,
	|	ЗначенияДоступа.ВидДоступа,
	|	ЗначенияДоступа.НомерСтроки,
	|	ЗначенияДоступа.ЗначениеДоступа,
	|	ЗначенияДоступа.ВключаяНижестоящие
	|ПОМЕСТИТЬ ЗначенияДоступа
	|ИЗ
	|	&ЗначенияДоступа КАК ЗначенияДоступа
	|;
	|
	|////////////////////////////////////////////////////////////­////////////////////
	|ВЫБРАТЬ РАЗЛИЧНЫЕ
	|	Профили.Ссылка,
	|	ЕСТЬNULL(ГруппыДоступа.Ссылка, НЕОПРЕДЕЛЕНО) КАК ПерсональнаяГруппаДоступа,
	|	ВЫБОР
	|		КОГДА ГруппыДоступаПользователи.Ссылка ЕСТЬ NULL 
	|			ТОГДА ЛОЖЬ
	|		ИНАЧЕ ИСТИНА
	|	КОНЕЦ КАК Пометка
	|ПОМЕСТИТЬ ТекущиеПрофили
	|ИЗ
	|	Справочник.ПрофилиГруппДоступа КАК Профили
	|		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ГруппыДоступа КАК ГруппыДоступа
	|		ПО Профили.Ссылка = ГруппыДоступа.Профиль
	|			И (НЕ(ГруппыДоступа.Пользователь <> &Пользователь
	|					И НЕ Профили.Ссылка В (ЗНАЧЕНИЕ(Справочник.ПрофилиГруппДоступа.Администратор))))
	|		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ГруппыДоступа.Пользователи КАК ГруппыДоступаПользователи
	|		ПО (ГруппыДоступа.Ссылка = ГруппыДоступаПользователи.Ссылка)
	|			И (ГруппыДоступаПользователи.Пользователь = &Пользователь)
	|ГДЕ
	|	НЕ Профили.ПометкаУдаления
	|;
	|
	|////////////////////////////////////////////////////////////­////////////////////
	|ВЫБРАТЬ
	|	Профили.Ссылка КАК Профиль,
	|	ГруппыДоступаВидыДоступа.ВидДоступа,
	|	ГруппыДоступаВидыДоступа.ВсеРазрешены
	|ПОМЕСТИТЬ ТекущиеВидыДоступа
	|ИЗ
	|	ТекущиеПрофили КАК Профили
	|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ГруппыДоступа.ВидыДоступа КАК ГруппыДоступаВидыДоступа
	|		ПО Профили.ПерсональнаяГруппаДоступа = ГруппыДоступаВидыДоступа.Ссылка
	|;
	|
	|////////////////////////////////////////////////////////////­////////////////////
	|ВЫБРАТЬ
	|	Профили.Ссылка КАК Профиль,
	|	ГруппыДоступаЗначенияДоступа.ВидДоступа,
	|	ГруппыДоступаЗначенияДоступа.НомерСтроки,
	|	ГруппыДоступаЗначенияДоступа.ЗначениеДоступа,
	|	ГруппыДоступаЗначенияДоступа.ВключаяНижестоящие
	|ПОМЕСТИТЬ ТекущиеЗначенияДоступа
	|ИЗ
	|	ТекущиеПрофили КАК Профили
	|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ГруппыДоступа.ЗначенияДоступа КАК ГруппыДоступаЗначенияДоступа
	|		ПО Профили.ПерсональнаяГруппаДоступа = ГруппыДоступаЗначенияДоступа.Ссылка
	|;
	|
	|////////////////////////////////////////////////////////////­////////////////////
	|ВЫБРАТЬ РАЗЛИЧНЫЕ
	|	ПрофилиИзмененныхГрупп.Профиль
	|ПОМЕСТИТЬ ПрофилиИзмененныхГрупп
	|ИЗ
	|	(ВЫБРАТЬ
	|		Профили.Ссылка КАК Профиль
	|	ИЗ
	|		Профили КАК Профили
	|			ВНУТРЕННЕЕ СОЕДИНЕНИЕ ТекущиеПрофили КАК ТекущиеПрофили
	|			ПО Профили.Ссылка = ТекущиеПрофили.Ссылка
	|	ГДЕ
	|		Профили.Пометка <> ТекущиеПрофили.Пометка
	|	
	|	ОБЪЕДИНИТЬ ВСЕ
	|	
	|	ВЫБРАТЬ
	|		ВидыДоступа.Профиль
	|	ИЗ
	|		ВидыДоступа КАК ВидыДоступа
	|			ЛЕВОЕ СОЕДИНЕНИЕ ТекущиеВидыДоступа КАК ТекущиеВидыДоступа
	|			ПО ВидыДоступа.Профиль = ТекущиеВидыДоступа.Профиль
	|				И ВидыДоступа.ВидДоступа = ТекущиеВидыДоступа.ВидДоступа
	|				И ВидыДоступа.ВсеРазрешены = ТекущиеВидыДоступа.ВсеРазрешены
	|	ГДЕ
	|		ТекущиеВидыДоступа.ВидДоступа ЕСТЬ NULL 
	|	
	|	ОБЪЕДИНИТЬ ВСЕ
	|	
	|	ВЫБРАТЬ
	|		ТекущиеВидыДоступа.Профиль
	|	ИЗ
	|		ТекущиеВидыДоступа КАК ТекущиеВидыДоступа
	|			ЛЕВОЕ СОЕДИНЕНИЕ ВидыДоступа КАК ВидыДоступа
	|			ПО (ВидыДоступа.Профиль = ТекущиеВидыДоступа.Профиль)
	|				И (ВидыДоступа.ВидДоступа = ТекущиеВидыДоступа.ВидДоступа)
	|				И (ВидыДоступа.ВсеРазрешены = ТекущиеВидыДоступа.ВсеРазрешены)
	|	ГДЕ
	|		ВидыДоступа.ВидДоступа ЕСТЬ NULL 
	|	
	|	ОБЪЕДИНИТЬ ВСЕ
	|	
	|	ВЫБРАТЬ
	|		ЗначенияДоступа.Профиль
	|	ИЗ
	|		ЗначенияДоступа КАК ЗначенияДоступа
	|			ЛЕВОЕ СОЕДИНЕНИЕ ТекущиеЗначенияДоступа КАК ТекущиеЗначенияДоступа
	|			ПО ЗначенияДоступа.Профиль = ТекущиеЗначенияДоступа.Профиль
	|				И ЗначенияДоступа.ВидДоступа = ТекущиеЗначенияДоступа.ВидДоступа
	|				И ЗначенияДоступа.НомерСтроки = ТекущиеЗначенияДоступа.НомерСтроки
	|				И ЗначенияДоступа.ЗначениеДоступа = ТекущиеЗначенияДоступа.ЗначениеДоступа
	|				И ЗначенияДоступа.ВключаяНижестоящие = ТекущиеЗначенияДоступа.ВключаяНижестоящие
	|	ГДЕ
	|		ТекущиеЗначенияДоступа.ВидДоступа ЕСТЬ NULL 
	|	
	|	ОБЪЕДИНИТЬ ВСЕ
	|	
	|	ВЫБРАТЬ
	|		ТекущиеЗначенияДоступа.Профиль
	|	ИЗ
	|		ТекущиеЗначенияДоступа КАК ТекущиеЗначенияДоступа
	|			ЛЕВОЕ СОЕДИНЕНИЕ ЗначенияДоступа КАК ЗначенияДоступа
	|			ПО (ЗначенияДоступа.Профиль = ТекущиеЗначенияДоступа.Профиль)
	|				И (ЗначенияДоступа.ВидДоступа = ТекущиеЗначенияДоступа.ВидДоступа)
	|				И (ЗначенияДоступа.НомерСтроки = ТекущиеЗначенияДоступа.НомерСтроки)
	|				И (ЗначенияДоступа.ЗначениеДоступа = ТекущиеЗначенияДоступа.ЗначениеДоступа)
	|				И (ЗначенияДоступа.ВключаяНижестоящие = ТекущиеЗначенияДоступа.ВключаяНижестоящие)
	|	ГДЕ
	|		ЗначенияДоступа.ВидДоступа ЕСТЬ NULL ) КАК ПрофилиИзмененныхГрупп
	|;
	|
	|////////////////////////////////////////////////////////////­////////////////////
	|ВЫБРАТЬ
	|	Профили.Ссылка КАК Профиль,
	|	СправочникПрофили.Наименование КАК ПрофильНаименование,
	|	Профили.Пометка,
	|	ТекущиеПрофили.ПерсональнаяГруппаДоступа
	|ИЗ
	|	ПрофилиИзмененныхГрупп КАК ПрофилиИзмененныхГрупп
	|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Профили КАК Профили
	|		ПО ПрофилиИзмененныхГрупп.Профиль = Профили.Ссылка
	|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ ТекущиеПрофили КАК ТекущиеПрофили
	|		ПО ПрофилиИзмененныхГрупп.Профиль = ТекущиеПрофили.Ссылка
	|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ПрофилиГруппДоступа КАК СправочникПрофили
	|		ПО (СправочникПрофили.Ссылка = ПрофилиИзмененныхГрупп.Профиль)";
	
	НачатьТранзакцию();
	Попытка
		ИзмененияГруппДоступа = Запрос.Выполнить().Выгрузить();
		
		Блокировка = Новый БлокировкаДанных;
		Для каждого Изменение Из ИзмененияГруппДоступа Цикл
			ЭлементБлокировки = Блокировка.Добавить("Справочник.ГруппыДоступа");
			Если ЗначениеЗаполнено(Изменение.ПерсональнаяГруппаДоступа) Тогда
				ЭлементБлокировки.УстановитьЗначение("Ссылка", Изменение.ПерсональнаяГруппаДоступа);
				ЗаблокироватьДанныеДляРедактирования(Изменение.ПерсональнаяГруппаДоступа);
			КонецЕсли;	
		КонецЦикла;
		Блокировка.Заблокировать();
		
		Для каждого Изменение Из ИзмененияГруппДоступа Цикл
			Если ЗначениеЗаполнено(Изменение.ПерсональнаяГруппаДоступа) Тогда
				ГруппаДоступаОбъект = Изменение.ПерсональнаяГруппаДоступа.ПолучитьОбъект();
				ГруппаДоступаОбъект.ПометкаУдаления = Ложь;
			Иначе
				// Создание персональной группы доступа.
				ГруппаДоступаОбъект = Справочники.ГруппыДоступа.СоздатьЭлемент();
				ГруппаДоступаОбъект.Родитель     = Справочники.ГруппыДоступа.РодительПерсональныхГруппДоступа();
				ГруппаДоступаОбъект.Наименование = Изменение.ПрофильНаименование;
				ГруппаДоступаОбъект.Пользователь = Параметры.Пользователь;
				ГруппаДоступаОбъект.Профиль      = Изменение.Профиль;
			КонецЕсли;
			
			Если Изменение.Профиль = Справочники.ПрофилиГруппДоступа.Администратор Тогда
				
				Если ТребуетсяСинхронизацияССервисом Тогда
					ГруппаДоступаОбъект.ДополнительныеСвойства.Вставить("ПарольПользователяСервиса", ПарольПользователяСервиса);
				КонецЕсли;
				
				Если Изменение.Пометка Тогда
					Если ГруппаДоступаОбъект.Пользователи.Найти(Параметры.Пользователь, "Пользователь") = Неопределено Тогда
						ГруппаДоступаОбъект.Пользователи.Добавить().Пользователь = Параметры.Пользователь;
					КонецЕсли;
				Иначе
					ОписаниеПользователя =  ГруппаДоступаОбъект.Пользователи.Найти(
						Параметры.Пользователь, "Пользователь");
					Если ОписаниеПользователя <> Неопределено Тогда
						ГруппаДоступаОбъект.Пользователи.Удалить(ОписаниеПользователя);
						
						Если НЕ ОбщегоНазначения.РазделениеВключено() Тогда
							// Проверка пустого списка пользователей ИБ в группе доступа Администраторы.
							ОписаниеОшибки = "";
							УправлениеДоступомСлужебный.ПроверитьНаличиеПользователяИБВГруппеДоступаАдминистраторы(
								ГруппаДоступаОбъект.Пользователи, ОписаниеОшибки);
							
							Если ЗначениеЗаполнено(ОписаниеОшибки) Тогда
								ОтказПриЗаписиИзменений = Истина;
								Отказ = Истина;
								ВызватьИсключение
									НСтр("ru = 'Профиль Администратор должен быть хотя бы у одного пользователя,
									           |которому разрешен вход в программу.'");
							КонецЕсли;
						КонецЕсли;
					КонецЕсли;
				КонецЕсли;
			Иначе
				ГруппаДоступаОбъект.Пользователи.Очистить();
				Если Изменение.Пометка Тогда
					ГруппаДоступаОбъект.Пользователи.Добавить().Пользователь = Параметры.Пользователь;
				КонецЕсли;
				
				Отбор = Новый Структура("ГруппаДоступа", Изменение.Профиль);
				ГруппаДоступаОбъект.ВидыДоступа.Загрузить(ВидыДоступа.Выгрузить(Отбор, "ВидДоступа, ВсеРазрешены"));
				ГруппаДоступаОбъект.ЗначенияДоступа.Загрузить(ЗначенияДоступа.Выгрузить(Отбор, "ВидДоступа, ЗначениеДоступа, ВключаяНижестоящие"));
			КонецЕсли;
			
			ГруппаДоступаОбъект.Записать();
			
		КонецЦикла;
		
		Для каждого Изменение Из ИзмененияГруппДоступа Цикл
			Если ЗначениеЗаполнено(Изменение.ПерсональнаяГруппаДоступа) Тогда
				РазблокироватьДанныеДляРедактирования(Изменение.ПерсональнаяГруппаДоступа);
			КонецЕсли;	
		КонецЦикла;
		
		ЗафиксироватьТранзакцию();
	Исключение
		ОтменитьТранзакцию();
		Для каждого Изменение Из ИзмененияГруппДоступа Цикл
			Если ЗначениеЗаполнено(Изменение.ПерсональнаяГруппаДоступа) Тогда
				РазблокироватьДанныеДляРедактирования(Изменение.ПерсональнаяГруппаДоступа);
			КонецЕсли;	
		КонецЦикла;
		ПарольПользователяСервиса = Неопределено;
		ВызватьИсключение;
	КонецПопытки;
	
	Модифицированность = Ложь;
	ТребуетсяСинхронизацияССервисом = Ложь;
	
	УправлениеДоступомСлужебный.ЗапуститьОбновлениеДоступа();
	
КонецПроцедуры

Показать
24. nomad_irk 76 12.07.21 10:05 Сейчас в теме
(23)Необходимо проверить, что происходит при ГруппаДоступаОбъект.Записать()
И УправлениеДоступомСлужебный.ЗапуститьОбновлениеДоступа()

Обратно - никак.
Можно пользоваться списком Процедур/Функций модуля для быстрой навигации по ним.
25. Новичок1с 4 12.07.21 10:19 Сейчас в теме
(24)
ЗапуститьОбновлениеДоступа



// Запускает обновление доступа, если оно запланировано и еще не запущено.
Процедура ЗапуститьОбновлениеДоступа() Экспорт
	
	Если Не ОграничиватьДоступНаУровнеЗаписейУниверсально(Ложь) Тогда
		Возврат;
	КонецЕсли;
	
	Если МонопольныйРежим() Тогда
		Возврат;
	КонецЕсли;
	
	ЗапуститьОбновлениеДоступаНаУровнеЗаписей();
	
КонецПроцедуры
Показать


ГруппаДоступаОбъект.Записать()



Вот по-моему в этой процедуре.
Процедура ПриКопированииПравНовомуПользователю(Источник, Приемник) Экспорт
	
	Если ТранзакцияАктивна()
	   И ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда
		
		Блокировка = Новый БлокировкаДанных;
		Блокировка.Добавить("Справочник.ГруппыДоступа");
		// АПК:1320-выкл - №499, №783.1.3 Допустимо вызывать блокировку во внешней транзакции для файловой ИБ.
		// Требуется для предотвращения взаимоблокировки: ниже запрос, который ставит неявную
		// разделяемую блокировку и далее блокировка усиливается до исключительной явным вызовом,
		// что приводит к взаимоблокировке в некоторых случаях.
		Блокировка.Заблокировать();
		// АПК:1320-вкл.
	КонецЕсли;
	
	УпрощенныйИнтерфейс = УпрощенныйИнтерфейсНастройкиПравДоступа();
	Запрос = Новый Запрос;
	Запрос.УстановитьПараметр("Пользователь", Источник);
	
	Если УпрощенныйИнтерфейс Тогда
		Запрос.Текст =
		"ВЫБРАТЬ РАЗЛИЧНЫЕ
		|	ГруппыДоступаПользователи.Ссылка.Профиль КАК Профиль
		|ИЗ
		|	Справочник.ГруппыДоступа.Пользователи КАК ГруппыДоступаПользователи
		|ГДЕ
		|	ГруппыДоступаПользователи.Пользователь = &Пользователь";
	Иначе
		Запрос.Текст =
		"ВЫБРАТЬ РАЗЛИЧНЫЕ
		|	ГруппыДоступаПользователи.Ссылка КАК ГруппаДоступа
		|ИЗ
		|	Справочник.ГруппыДоступа.Пользователи КАК ГруппыДоступаПользователи
		|ГДЕ
		|	ГруппыДоступаПользователи.Пользователь = &Пользователь";
	КонецЕсли;
	
	РезультатЗапроса = Запрос.Выполнить();
	Если РезультатЗапроса.Пустой() Тогда
		Возврат;
	КонецЕсли;
	
	Выборка = РезультатЗапроса.Выбрать();
	
	Если Не УпрощенныйИнтерфейс Тогда
		Блокировка = Новый БлокировкаДанных();
		ЭлементБлокировки = Блокировка.Добавить("Справочник.ГруппыДоступа");
		ЭлементБлокировки.ИсточникДанных = РезультатЗапроса;
	КонецЕсли;
	
	НачатьТранзакцию();
	Попытка
		Если УпрощенныйИнтерфейс Тогда
			Пока Выборка.Следующий() Цикл
				УправлениеДоступом.ВключитьПрофильПользователю(Приемник, Выборка.Профиль);
			КонецЦикла;
		Иначе
			Блокировка.Заблокировать();
			Пока Выборка.Следующий() Цикл
			
Показать


Вот на этот элемент идёт ссылка при ГруппаДоступаОбъект.Записать()
ГруппаДоступаОбъект = Выборка.ГруппаДоступа.ПолучитьОбъект(); // СправочникОбъект.ГруппыДоступа


	ГруппаДоступаОбъект = Выборка.ГруппаДоступа.ПолучитьОбъект(); // СправочникОбъект.ГруппыДоступа - 
				Если ГруппаДоступаОбъект.Пользователи.Найти(Приемник, "Пользователь") = Неопределено Тогда
					Строка = ГруппаДоступаОбъект.Пользователи.Добавить();
					Строка.Пользователь = Приемник;
					ГруппаДоступаОбъект.Записать();
				КонецЕсли;
			КонецЦикла;
		КонецЕсли;
		ЗафиксироватьТранзакцию();
	Исключение
		ОтменитьТранзакцию();
		ВызватьИсключение;
	КонецПопытки;
	
КонецПроцедуры

Показать
26. nomad_irk 76 12.07.21 10:53 Сейчас в теме
(25)
Процедура ЗапуститьОбновлениеДоступа() Экспорт
    
    Если Не ОграничиватьДоступНаУровнеЗаписейУниверсально(Ложь) Тогда
        Возврат;
    КонецЕсли;
    
    Если МонопольныйРежим() Тогда
        Возврат;
    КонецЕсли;
    
    ЗапуститьОбновлениеДоступаНаУровнеЗаписей();
    
КонецПроцедуры
Показать


Проверьте, что происходит внутри ЗапуститьОбновлениеДоступаНаУровнеЗаписей().
27. Новичок1с 4 12.07.21 10:55 Сейчас в теме
(26)
ЗапуститьОбновлениеДоступаНаУровнеЗаписей


Функция ЗапуститьОбновлениеДоступаНаУровнеЗаписей(ЭтоЗапускВручную = Ложь) Экспорт
	
	УстановитьОтключениеБезопасногоРежима(Истина);
	УстановитьПривилегированныйРежим(Истина);
	
	Если Не ОграничиватьДоступНаУровнеЗаписейУниверсально(Истина) Тогда
		ТекстОшибки =
			НСтр("ru = 'Невозможно запустить обновление доступа на уровне записей, так как
			           |константа ОграничиватьДоступНаУровнеЗаписейУниверсально выключена.'");
		ВызватьИсключение ТекстОшибки;
	КонецЕсли;
	
	Если ТранзакцияАктивна() Тогда
		ТекстОшибки =
			НСтр("ru = 'Невозможно запустить обновление доступа на уровне записей в открытой транзакции.'");
		ВызватьИсключение ТекстОшибки;
	КонецЕсли;
	
	Если Не ЭтоЗапускВручную И Не ЗапланированоОбновлениеДоступа() Тогда
		Возврат Неопределено;
	КонецЕсли;
	
	ПоследнееОбновлениеДоступа = ПоследнееОбновлениеДоступа();
	Если Не ЭтоЗапускВручную И ПоследнееОбновлениеДоступа.ОбновлениеДоступаЗапрещено Тогда
		Возврат Неопределено;
	КонецЕсли;
	
	Результат = Новый Структура("УжеВыполняется, ИдентификаторФоновогоЗадания, СвойстваСеанса, ТекстПредупреждения", Истина);
	Исполнитель = ИсполнительОбновленияДоступа(ПоследнееОбновлениеДоступа);
	
	Если Исполнитель = Неопределено Тогда
		Результат.УжеВыполняется = Ложь;
		Если ОбщегоНазначения.ИнформационнаяБазаФайловая() Тогда
			СтандартныеПодсистемыСервер.ПроверитьДинамическоеОбновлениеВерсииПрограммы();
		КонецЕсли;
		Если ЭтоЗапускВручную Тогда
			УстановитьЗапретОбновленияДоступа(Ложь);
			ПараметрыЗадания = Новый Массив;
			ПараметрыЗадания.Добавить(Истина);
		Иначе
			ПараметрыЗадания = Неопределено;
		КонецЕсли;
		ФоновоеЗадание = РасширенияКонфигурации.ВыполнитьФоновоеЗаданиеСРасширениямиБазыДанных(
			Метаданные.РегламентныеЗадания.ОбновлениеДоступаНаУровнеЗаписей.ИмяМетода, ПараметрыЗадания,,
			?(ЭтоЗапускВручную, НСтр("ru = 'Запуск вручную'"), НСтр("ru = 'Автозапуск'")) + ": "
				+ Метаданные.РегламентныеЗадания.ОбновлениеДоступаНаУровнеЗаписей.Синоним);
			
		Результат.ИдентификаторФоновогоЗадания = ФоновоеЗадание.УникальныйИдентификатор;
		
	ИначеЕсли ТипЗнч(Исполнитель) = Тип("ФоновоеЗадание")
	        И Исполнитель.УникальныйИдентификатор <> ПоследнееОбновлениеДоступа.ИдентификаторФоновогоЗадания Тогда
		
		Результат.ТекстПредупреждения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
			НСтр("ru = 'Не удалось начать обновление доступа, так как оно уже запущено %1 в %2'"),
			Формат(Исполнитель.Начало, "ДЛФ=D"),
			Формат(Исполнитель.Начало, "ДЛФ=T"));
	Иначе
		СвойстваСеанса = Новый Структура("ИмяКомпьютера, НомерСеанса, НачалоСеанса");
		Если ТипЗнч(Исполнитель) = Тип("ФоновоеЗадание") Тогда
			ЗаполнитьЗначенияСвойств(СвойстваСеанса, ПоследнееОбновлениеДоступа);
		Иначе
			ЗаполнитьЗначенияСвойств(СвойстваСеанса, Исполнитель);
		КонецЕсли;
		Результат.СвойстваСеанса = СвойстваСеанса;
		Результат.ТекстПредупреждения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
			НСтр("ru = 'Обновление доступа уже выполняется
			           |(компьютер: %1, сеанс: %2, начат: %3 в %4)'"),
			СвойстваСеанса.ИмяКомпьютера,
			СвойстваСеанса.НомерСеанса,
			Формат(СвойстваСеанса.НачалоСеанса, "ДЛФ=D"),
			Формат(СвойстваСеанса.НачалоСеанса, "ДЛФ=T"));
	КонецЕсли;
	
	Если ТипЗнч(Исполнитель) = Тип("ФоновоеЗадание") Тогда
		Результат.ИдентификаторФоновогоЗадания = Исполнитель.УникальныйИдентификатор;
	КонецЕсли;
	
	Возврат Результат;
	
КонецФункции
Показать
32. nomad_irk 76 12.07.21 12:04 Сейчас в теме +0.5 $m
(27)В общем, поставьте точку останова внутри

ЗаписатьИзмененияНаСервере(Отказ) из сообщения (23)

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

Стек вызовов открывается по нажатию конопки в конфигураторе:
Прикрепленные файлы:
Новичок1с; +1 Ответить
34. Новичок1с 4 12.07.21 12:23 Сейчас в теме
(32)
в файле то, что появилось в стеке вызовов.
Прикрепленные файлы:
37. nomad_irk 76 12.07.21 12:46 Сейчас в теме
(34)Это первая итерация, нажмите F5 для продолжения.
38. Новичок1с 4 12.07.21 12:51 Сейчас в теме
(37)
больше нет. при нажатии f5 пишет перезапустить отладчик.
39. nomad_irk 76 12.07.21 12:57 Сейчас в теме
(38)значит спускайтесь в глубь кода, ставьте точки останова на

ГруппаДоступаОбъект.Записать()

и 

УправлениеДоступомСлужебный.ЗапуститьОбновлениеДоступа();


Еще необходимо включить отладку фоновых заданий, вернее подключаться к ним для отладки.
28. Новичок1с 4 12.07.21 11:08 Сейчас в теме
(26)
ЗапуститьОбновлениеДоступаНаУровнеЗаписей();


ЗапуститьОбновлениеДоступаНаУровнеЗаписей();
Функция ЗапуститьОбновлениеДоступаНаУровнеЗаписей(ЭтоЗапускВручную = Ложь) Экспорт

Подскажите пожалуйста,
Может быть так, что при обращении к функции в скобках ничего нет, а при объявлении функции есть переменные??
29. spacecraft 12.07.21 11:19 Сейчас в теме +0.5 $m
(28)
Может быть так, что при обращении к функции в скобках ничего нет, а при объявлении функции есть переменные??

Конечно, при условии, что эти переменные объявлены со значениями по умолчанию.
В данном случае:
Функция ЗапуститьОбновлениеДоступаНаУровнеЗаписей(ЭтоЗапускВручную = Ложь) Экспорт

ЭтоЗапускВручную = Ложь означает, что если значение в переменную не передается, то она заполняется значением по умолчанию, в данном случае Ложь.
Новичок1с; +1 Ответить
14. klom 12.07.21 09:00 Сейчас в теме
Ошибка "Переполнение стека встроенного языка на сервере." как правило возникает в ситуации, когда в программном коде допущена ошибка. А точнее происходит зацикливание, когда обработчик уходит в бесконечный цикл.
Смотрите код процедуры ЗаписатьИзмененияНаСервере(Отказ)
17. Новичок1с 4 12.07.21 09:02 Сейчас в теме
(14)
ЗаписатьИзмененияНаСервере(Отказ


это в справ. профили групп доступа??
или в общих процедурах смотреть??
16. AnryMc 849 12.07.21 09:01 Сейчас в теме
Код Процедуры ЗаписатьИзмененияНаСервере в форме ПраваДоступаУпрощенно выложите здесь...
18. Новичок1с 4 12.07.21 09:19 Сейчас в теме
(16)
ЗаписатьИзмененияНаСервере

Не нахожу эту процедуру в этом модуле, также её нет и в справочнике профили групп доступа.
19. AnryMc 849 12.07.21 09:20 Сейчас в теме
(18)
ененияНаСервере

Не нахожу эту процедуру в этом модуле, также её нет и в справочнике профили групп доступа.


Контекстовое меню на ней - Перейти к определению (F-12)
21. Новичок1с 4 12.07.21 09:46 Сейчас в теме
(19)

Нашла это
&НаСервере
Процедура ЗаписатьИзмененияНаСервере(Отказ)
	
	Если Не ПроверитьЗаполнение() Тогда
		Отказ = Истина;
		Возврат;
	КонецЕсли;
	
	Пользователи.НайтиНеоднозначныхПользователейИБ(Неопределено);
	
	// Получение списка изменений.
	Запрос = Новый Запрос;
	Запрос.УстановитьПараметр("Пользователь", Параметры.Пользователь);
	Запрос.УстановитьПараметр("Профили", Профили.Выгрузить(, "Профиль, Пометка"));
	Запрос.УстановитьПараметр("ВидыДоступа", ВидыДоступа.Выгрузить(, "ГруппаДоступа, ВидДоступа, ВсеРазрешены"));
	
	ТаблицаЗначений = ЗначенияДоступа.Выгрузить(, "ГруппаДоступа, ВидДоступа, ЗначениеДоступа, ВключаяНижестоящие");
	ТаблицаЗначений.Колонки.Добавить("НомерСтроки", Новый ОписаниеТипов("Число",,,
		Новый КвалификаторыЧисла(10, 0, ДопустимыйЗнак.Неотрицательный)));
	
	ГруппаДоступаВСтроке = Неопределено;
	Для Каждого Строка Из ТаблицаЗначений Цикл
		Если ГруппаДоступаВСтроке <> Строка.ГруппаДоступа Тогда
			ГруппаДоступаВСтроке = Строка.ГруппаДоступа;
			ТекущийНомерСтроки = 1;
		КонецЕсли;
		Строка.НомерСтроки = ТекущийНомерСтроки;
		ТекущийНомерСтроки = ТекущийНомерСтроки + 1;
	КонецЦикла;
	Запрос.УстановитьПараметр("ЗначенияДоступа", ТаблицаЗначений);
	
	Запрос.Текст =
	"ВЫБРАТЬ
	|	Профили.Профиль КАК Ссылка,
	|	Профили.Пометка
	|ПОМЕСТИТЬ Профили
	|ИЗ
	|	&Профили КАК Профили
	|;
	|
	|////////////////////////////////////////////////////////////­////////////////////
	|ВЫБРАТЬ
	|	ВидыДоступа.ГруппаДоступа КАК Профиль,
	|	ВидыДоступа.ВидДоступа,
	|	ВидыДоступа.ВсеРазрешены
	|ПОМЕСТИТЬ ВидыДоступа
	|ИЗ
	|	&ВидыДоступа КАК ВидыДоступа
	|;
	|
	|////////////////////////////////////////////////////////////­////////////////////
	|ВЫБРАТЬ
	|	ЗначенияДоступа.ГруппаДоступа КАК Профиль,
	|	ЗначенияДоступа.ВидДоступа,
	|	ЗначенияДоступа.НомерСтроки,
	|	ЗначенияДоступа.ЗначениеДоступа,
	|	ЗначенияДоступа.ВключаяНижестоящие
	|ПОМЕСТИТЬ ЗначенияДоступа
	|ИЗ
	|	&ЗначенияДоступа КАК ЗначенияДоступа
	|;
	|
	|////////////////////////////////////////////////////////////­////////////////////
	|ВЫБРАТЬ РАЗЛИЧНЫЕ
	|	Профили.Ссылка,
	|	ЕСТЬNULL(ГруппыДоступа.Ссылка, НЕОПРЕДЕЛЕНО) КАК ПерсональнаяГруппаДоступа,
	|	ВЫБОР
	|		КОГДА ГруппыДоступаПользователи.Ссылка ЕСТЬ NULL 
	|			ТОГДА ЛОЖЬ
	|		ИНАЧЕ ИСТИНА
	|	КОНЕЦ КАК Пометка
	|ПОМЕСТИТЬ ТекущиеПрофили
	|ИЗ
	|	Справочник.ПрофилиГруппДоступа КАК Профили
	|		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ГруппыДоступа КАК ГруппыДоступа
	|		ПО Профили.Ссылка = ГруппыДоступа.Профиль
	|			И (НЕ(ГруппыДоступа.Пользователь <> &Пользователь
	|					И НЕ Профили.Ссылка В (ЗНАЧЕНИЕ(Справочник.ПрофилиГруппДоступа.Администратор))))
	|		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ГруппыДоступа.Пользователи КАК ГруппыДоступаПользователи
	|		ПО (ГруппыДоступа.Ссылка = ГруппыДоступаПользователи.Ссылка)
	|			И (ГруппыДоступаПользователи.Пользователь = &Пользователь)
	|ГДЕ
	|	НЕ Профили.ПометкаУдаления
	|;
	|
	|////////////////////////////////////////////////////////////­////////////////////
	|ВЫБРАТЬ
	|	Профили.Ссылка КАК Профиль,
	|	ГруппыДоступаВидыДоступа.ВидДоступа,
	|	ГруппыДоступаВидыДоступа.ВсеРазрешены
	|ПОМЕСТИТЬ ТекущиеВидыДоступа
	|ИЗ
	|	ТекущиеПрофили КАК Профили
	|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ГруппыДоступа.ВидыДоступа КАК ГруппыДоступаВидыДоступа
	|		ПО Профили.ПерсональнаяГруппаДоступа = ГруппыДоступаВидыДоступа.Ссылка
	|;
	|
	|////////////////////////////////////////////////////////////­////////////////////
	|ВЫБРАТЬ
	|	Профили.Ссылка КАК Профиль,
	|	ГруппыДоступаЗначенияДоступа.ВидДоступа,
	|	ГруппыДоступаЗначенияДоступа.НомерСтроки,
	|	ГруппыДоступаЗначенияДоступа.ЗначениеДоступа,
	|	ГруппыДоступаЗначенияДоступа.ВключаяНижестоящие
	|ПОМЕСТИТЬ ТекущиеЗначенияДоступа
	|ИЗ
	|	ТекущиеПрофили КАК Профили
	|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ГруппыДоступа.ЗначенияДоступа КАК ГруппыДоступаЗначенияДоступа
	|		ПО Профили.ПерсональнаяГруппаДоступа = ГруппыДоступаЗначенияДоступа.Ссылка
	|;
	|
	|////////////////////////////////////////////////////////////­////////////////////
	|ВЫБРАТЬ РАЗЛИЧНЫЕ
	|	ПрофилиИзмененныхГрупп.Профиль
	|ПОМЕСТИТЬ ПрофилиИзмененныхГрупп
	|ИЗ
	|	(ВЫБРАТЬ
	|		Профили.Ссылка КАК Профиль
	|	ИЗ
	|		Профили КАК Профили
	|			ВНУТРЕННЕЕ СОЕДИНЕНИЕ ТекущиеПрофили КАК ТекущиеПрофили
	|			ПО Профили.Ссылка = ТекущиеПрофили.Ссылка
	|	ГДЕ
	|		Профили.Пометка <> ТекущиеПрофили.Пометка
	|	
	|	ОБЪЕДИНИТЬ ВСЕ
	|	
	|	ВЫБРАТЬ
	|		ВидыДоступа.Профиль
	|	ИЗ
	|		ВидыДоступа КАК ВидыДоступа
	|			ЛЕВОЕ СОЕДИНЕНИЕ ТекущиеВидыДоступа КАК ТекущиеВидыДоступа
	|			ПО ВидыДоступа.Профиль = ТекущиеВидыДоступа.Профиль
	|				И ВидыДоступа.ВидДоступа = ТекущиеВидыДоступа.ВидДоступа
	|				И ВидыДоступа.ВсеРазрешены = ТекущиеВидыДоступа.ВсеРазрешены
	|	ГДЕ
	|		ТекущиеВидыДоступа.ВидДоступа ЕСТЬ NULL 
	|	
	|	ОБЪЕДИНИТЬ ВСЕ
	|	
	|	ВЫБРАТЬ
	|		ТекущиеВидыДоступа.Профиль
	|	ИЗ
	|		ТекущиеВидыДоступа КАК ТекущиеВидыДоступа
	|			ЛЕВОЕ СОЕДИНЕНИЕ ВидыДоступа КАК ВидыДоступа
	|			ПО (ВидыДоступа.Профиль = ТекущиеВидыДоступа.Профиль)
	|				И (ВидыДоступа.ВидДоступа = ТекущиеВидыДоступа.ВидДоступа)
	|				И (ВидыДоступа.ВсеРазрешены = ТекущиеВидыДоступа.ВсеРазрешены)
	|	ГДЕ
	|		ВидыДоступа.ВидДоступа ЕСТЬ NULL 
	|	
	|	ОБЪЕДИНИТЬ ВСЕ
	|	
	|	ВЫБРАТЬ
	|		ЗначенияДоступа.Профиль
	|	ИЗ
	|		ЗначенияДоступа КАК ЗначенияДоступа
	|			ЛЕВОЕ СОЕДИНЕНИЕ ТекущиеЗначенияДоступа КАК ТекущиеЗначенияДоступа
	|			ПО ЗначенияДоступа.Профиль = ТекущиеЗначенияДоступа.Профиль
	|				И ЗначенияДоступа.ВидДоступа = ТекущиеЗначенияДоступа.ВидДоступа
	|				И ЗначенияДоступа.НомерСтроки = ТекущиеЗначенияДоступа.НомерСтроки
	|				И ЗначенияДоступа.ЗначениеДоступа = ТекущиеЗначенияДоступа.ЗначениеДоступа
	|				И ЗначенияДоступа.ВключаяНижестоящие = ТекущиеЗначенияДоступа.ВключаяНижестоящие
	|	ГДЕ
	|		ТекущиеЗначенияДоступа.ВидДоступа ЕСТЬ NULL 
	|	
	|	ОБЪЕДИНИТЬ ВСЕ
	|	
	|	ВЫБРАТЬ
	|		ТекущиеЗначенияДоступа.Профиль
	|	ИЗ
	|		ТекущиеЗначенияДоступа КАК ТекущиеЗначенияДоступа
	|			ЛЕВОЕ СОЕДИНЕНИЕ ЗначенияДоступа КАК ЗначенияДоступа
	|			ПО (ЗначенияДоступа.Профиль = ТекущиеЗначенияДоступа.Профиль)
	|				И (ЗначенияДоступа.ВидДоступа = ТекущиеЗначенияДоступа.ВидДоступа)
	|				И (ЗначенияДоступа.НомерСтроки = ТекущиеЗначенияДоступа.НомерСтроки)
	|				И (ЗначенияДоступа.ЗначениеДоступа = ТекущиеЗначенияДоступа.ЗначениеДоступа)
	|				И (ЗначенияДоступа.ВключаяНижестоящие = ТекущиеЗначенияДоступа.ВключаяНижестоящие)
	|	ГДЕ
	|		ЗначенияДоступа.ВидДоступа ЕСТЬ NULL ) КАК ПрофилиИзмененныхГрупп
	|;
	|
	|////////////////////////////////////////////////////////////­////////////////////
	|ВЫБРАТЬ
	|	Профили.Ссылка КАК Профиль,
	|	СправочникПрофили.Наименование КАК ПрофильНаименование,
	|	Профили.Пометка,
	|	ТекущиеПрофили.ПерсональнаяГруппаДоступа
	|ИЗ
	|	ПрофилиИзмененныхГрупп КАК ПрофилиИзмененныхГрупп
	|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Профили КАК Профили
	|		ПО ПрофилиИзмененныхГрупп.Профиль = Профили.Ссылка
	|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ ТекущиеПрофили КАК ТекущиеПрофили
	|		ПО ПрофилиИзмененныхГрупп.Профиль = ТекущиеПрофили.Ссылка
	|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ПрофилиГруппДоступа КАК СправочникПрофили
	|		ПО (СправочникПрофили.Ссылка = ПрофилиИзмененныхГрупп.Профиль)";
	
	НачатьТранзакцию();
	Попытка
		ИзмененияГруппДоступа = Запрос.Выполнить().Выгрузить();
		
		Блокировка = Новый БлокировкаДанных;
		Для каждого Изменение Из ИзмененияГруппДоступа Цикл
			ЭлементБлокировки = Блокировка.Добавить("Справочник.ГруппыДоступа");
			Если ЗначениеЗаполнено(Изменение.ПерсональнаяГруппаДоступа) Тогда
				ЭлементБлокировки.УстановитьЗначение("Ссылка", Изменение.ПерсональнаяГруппаДоступа);
				ЗаблокироватьДанныеДляРедактирования(Изменение.ПерсональнаяГруппаДоступа);
			КонецЕсли;	
		КонецЦикла;
		Блокировка.Заблокировать();
		
		Для каждого Изменение Из ИзмененияГруппДоступа Цикл
			Если ЗначениеЗаполнено(Изменение.ПерсональнаяГруппаДоступа) Тогда
				ГруппаДоступаОбъект = Изменение.ПерсональнаяГруппаДоступа.ПолучитьОбъект();
				ГруппаДоступаОбъект.ПометкаУдаления = Ложь;
			Иначе
				// Создание персональной группы доступа.
				ГруппаДоступаОбъект = Справочники.ГруппыДоступа.СоздатьЭлемент();
				ГруппаДоступаОбъект.Родитель     = Справочники.ГруппыДоступа.РодительПерсональныхГруппДоступа();
				ГруппаДоступаОбъект.Наименование = Изменение.ПрофильНаименование;
				ГруппаДоступаОбъект.Пользователь = Параметры.Пользователь;
				ГруппаДоступаОбъект.Профиль      = Изменение.Профиль;
			КонецЕсли;
			
			Если Изменение.Профиль = Справочники.ПрофилиГруппДоступа.Администратор Тогда
				
				Если ТребуетсяСинхронизацияССервисом Тогда
					ГруппаДоступаОбъект.ДополнительныеСвойства.Вставить("ПарольПользователяСервиса", ПарольПользователяСервиса);
				КонецЕсли;
				
				Если Изменение.Пометка Тогда
					Если ГруппаДоступаОбъект.Пользователи.Найти(Параметры.Пользователь, "Пользователь") = Неопределено Тогда
						ГруппаДоступаОбъект.Пользователи.Добавить().Пользователь = Параметры.Пользователь;
					КонецЕсли;
				Иначе
					ОписаниеПользователя =  ГруппаДоступаОбъект.Пользователи.Найти(
						Параметры.Пользователь, "Пользователь");
					Если ОписаниеПользователя <> Неопределено Тогда
						ГруппаДоступаОбъект.Пользователи.Удалить(ОписаниеПользователя);
						
						Если НЕ ОбщегоНазначения.РазделениеВключено() Тогда
							// Проверка пустого списка пользователей ИБ в группе доступа Администраторы.
							ОписаниеОшибки = "";
							УправлениеДоступомСлужебный.ПроверитьНаличиеПользователяИБВГруппеДоступаАдминистраторы(
								ГруппаДоступаОбъект.Пользователи, ОписаниеОшибки);
							
							Если ЗначениеЗаполнено(ОписаниеОшибки) Тогда
								ОтказПриЗаписиИзменений = Истина;
								Отказ = Истина;
								ВызватьИсключение
									НСтр("ru = 'Профиль Администратор должен быть хотя бы у одного пользователя,
									           |которому разрешен вход в программу.'");
							КонецЕсли;
						КонецЕсли;
					КонецЕсли;
				КонецЕсли;
			Иначе
				ГруппаДоступаОбъект.Пользователи.Очистить();
				Если Изменение.Пометка Тогда
					ГруппаДоступаОбъект.Пользователи.Добавить().Пользователь = Параметры.Пользователь;
				КонецЕсли;
				
				Отбор = Новый Структура("ГруппаДоступа", Изменение.Профиль);
				ГруппаДоступаОбъект.ВидыДоступа.Загрузить(ВидыДоступа.Выгрузить(Отбор, "ВидДоступа, ВсеРазрешены"));
				ГруппаДоступаОбъект.ЗначенияДоступа.Загрузить(ЗначенияДоступа.Выгрузить(Отбор, "ВидДоступа, ЗначениеДоступа, ВключаяНижестоящие"));
			КонецЕсли;
			
			ГруппаДоступаОбъект.Записать();
			
		КонецЦикла;
		
		Для каждого Изменение Из ИзмененияГруппДоступа Цикл
			Если ЗначениеЗаполнено(Изменение.ПерсональнаяГруппаДоступа) Тогда
				РазблокироватьДанныеДляРедактирования(Изменение.ПерсональнаяГруппаДоступа);
			КонецЕсли;	
		КонецЦикла;
		
		ЗафиксироватьТранзакцию();
	Исключение
		ОтменитьТранзакцию();
		Для каждого Изменение Из ИзмененияГруппДоступа Цикл
			Если ЗначениеЗаполнено(Изменение.ПерсональнаяГруппаДоступа) Тогда
				РазблокироватьДанныеДляРедактирования(Изменение.ПерсональнаяГруппаДоступа);
			КонецЕсли;	
		КонецЦикла;
		ПарольПользователяСервиса = Неопределено;
		ВызватьИсключение;
	КонецПопытки;
	
	Модифицированность = Ложь;
	ТребуетсяСинхронизацияССервисом = Ложь;
	
	УправлениеДоступомСлужебный.ЗапуститьОбновлениеДоступа();
	
КонецПроцедуры
Показать
41. Новичок1с 4 12.07.21 16:55 Сейчас в теме
(39)
поставила точку остановки. Процедуры в стеке вызовов не меняются.
Что-то реально не понятно :(
42. Новичок1с 4 13.07.21 10:30 Сейчас в теме
Доброго утра.

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

нашла процедуру, где возникает ошибка
Справочник.ПрофилиГруппДоступа.Форма.ФормаЭлемента.Форма(436)}: Ошибка при вызове метода контекста (Записать)

При нажатии на f12 ничего не происходит.

Далее
В замер производительности (на маркете слева), нашла ссылку на эту процедуру (принскрин)


Процедура Проверить(Знач Условие, Знач Сообщение = "", Знач КонтекстПроверки = "") Экспорт
	
	Если Условие <> Истина Тогда
		
		Если ПустаяСтрока(Сообщение) Тогда
			ТекстИсключения = НСтр("ru = 'Недопустимая операция'"); // Assertion failed
		Иначе
			ТекстИсключения = Сообщение;
		КонецЕсли;
		
		Если Не ПустаяСтрока(КонтекстПроверки) Тогда
			ТекстИсключения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
				НСтр("ru = '%1 в %2'"), 
				ТекстИсключения, 
				КонтекстПроверки);
		КонецЕсли;
		
		ВызватьИсключение ТекстИсключения;
		
	КонецЕсли;
	
КонецПроцедуры

 
Показать


Видно, что эта большое количество вызовов этой процедуры.


А дальше что делать??
Прикрепленные файлы:
45. air_mike 25 14.07.21 14:27 Сейчас в теме +0.5 $m
(42) Записать(Новый Структура("ЗаписатьИЗакрыть"));
Если продолжить отладку, то это ПередЗаписью и т.д.

Ещё нужно посмотреть "не вскрыты" ли определяемые типы. Может там чего добавили?

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

ТИИ не дает ошибок?
Новичок1с; +1 Ответить
46. Новичок1с 4 14.07.21 17:42 Сейчас в теме
(45)
кстати, даёт, но и после тестирования ничего не изменилось. Хотя я ставила создать.

Проверка логической целостности. РегистрСведений.ГруппыЗначенийДоступа.Измерение.ГруппаЗначенийДоступа <Объект не найден> (201:bab62c44fd95d95b11eb7da512b4d9c0):<Объект не найден> (201:bab62c44fd95d95b11eb7da512b4d9c0):1
ОбщийРеквизит.ОбластьДанныхОсновныеДанные = 0
Неверная ссылка.


Проверка логической целостности. РегистрСведений.СведенияОПользователях.Измерение.Пользователь <Объект не найден> (201:bab62c44fd95d95b11eb7da512b4d9c0)
ОбщийРеквизит.ОбластьДанныхОсновныеДанные = 0
Неверная ссылка.


Проверка логической целостности. РегистрСведений.СоставыГруппПользователей.Измерение.Пользователь <Объект не найден> (201:bab62c44fd95d95b11eb7da512b4d9c0):<Объект не найден> (201:bab62c44fd95d95b11eb7da512b4d9c0)
ОбщийРеквизит.ОбластьДанныхОсновныеДанные = 0
Объект, на который ссылается значение, отсутствует.

Проверка логической целостности. РегистрСведений.бит_ДоступныеИнтерфейсы.Измерение.Пользователь <Объект не найден> (201:bab62c44fd95d95b11eb7da512b4d9c0)
ОбщийРеквизит.ОбластьДанныхОсновныеДанные = 0
Неверная ссылка.
47. air_mike 25 14.07.21 18:56 Сейчас в теме +0.5 $m
(46)Похоже что у вас проблема как раз в удаленных данных. Т.к. есть ссылки на удаленные объекты(<Объект не найден> ).
Нужно строить запрос, искать эти ссылки и чистить места их упоминания.
Похоже дело в данных конфигурации бит_.
Новичок1с; +1 Ответить
43. Dmitry888 41 14.07.21 10:32 Сейчас в теме
А может быть так что у пользователя какого-то в правах в разных группах доступа отражаются зеркальные права по одной группе они есть, по другой они ограничиваются и возникает такая рекурсия?
44. Новичок1с 4 14.07.21 10:46 Сейчас в теме
(43)
допустим что так.
а почему тогда и элемент справочник профили групп доступа нельзя записать??
я пробовала удалить все данные (кроме администратора) из этого справочника, у меня ошибка сохранилась.
48. Новичок1с 4 15.07.21 13:31 Сейчас в теме
Я частично нашла ошибку.

в чистой новой базе
при сохранении спр.Профили групп доступа ошибки не возникает.
Я очистила весь справочник Профили групп доступа в тестовой базе, оставила только администратора.
Но я не могу изменить доступные роли- не активна кнопка включить /исключить роли.
Также поставила базу на тестирование

Ошибка была в этом справочнике.
Сравню ещё раз файлы, которые были и которые стали после сохранения и попробую найти строчки, где конкретно была рекурсия.
Прикрепленные файлы:
49. Новичок1с 4 16.07.21 07:55 Сейчас в теме
Доброго утра.

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


Благодарю Всех за помощь и за разъяснения.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот