AccountingRegisters/_ДемоОсновной/RecordSetModule



AccountingRegisters/_ДемоОсновной/Forms/ФормаСписка/Form/Module

 #Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) Если Параметры.Свойство("АвтоТест") Тогда Возврат; КонецЕсли; Параметры.Свойство("Счет", ОтборСчет); УстановитьЭлементОтбораДинамическогоСписка(Список, "Счет", ОтборСчет, ВидСравненияКомпоновкиДанных.ВИерархии); Параметры.Отбор.Свойство("Организация", ОтборОрганизация); УстановитьЭлементОтбораДинамическогоСписка(Список, "Организация", ОтборОрганизация); Параметры.Отбор.Свойство("Регистратор", ОтборРегистратор); УстановитьЭлементОтбораДинамическогоСписка(Список, "Регистратор", ОтборРегистратор); Элементы.ОтборРегистратор.ОграничениеТипа = Метаданные.РегистрыБухгалтерии._ДемоОсновной.СтандартныеРеквизиты.Регистратор.Тип; КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ФОРМЫ &НаКлиенте Процедура ОтборСчетПриИзменении(Элемент) УстановитьЭлементОтбораДинамическогоСписка(Список, "Счет", ОтборСчет, ВидСравненияКомпоновкиДанных.ВИерархии); КонецПроцедуры &НаКлиенте Процедура ОтборОрганизацияПриИзменении(Элемент) УстановитьЭлементОтбораДинамическогоСписка(Список, "Организация", ОтборОрганизация); КонецПроцедуры &НаКлиенте Процедура ОтборРегистраторПриИзменении(Элемент) УстановитьЭлементОтбораДинамическогоСписка(Список, "Регистратор", ОтборРегистратор); КонецПроцедуры #КонецОбласти #Область ОбработчикиКомандФормы &НаКлиенте Процедура ПереключитьАктивностьПроводок(Команда) ТекущиеДанные = Элементы.Список.ТекущиеДанные; Если ТекущиеДанные = Неопределено Или Не ЗначениеЗаполнено(ТекущиеДанные.Регистратор) Тогда ПоказатьПредупреждение(, НСтр("ru = 'Не выбран документ'")); Возврат; КонецЕсли; ПереключитьАктивностьПроводокСервер(ТекущиеДанные.Регистратор); КонецПроцедуры #КонецОбласти #Область СлужебныеПроцедурыИФункции &НаСервере Процедура ПереключитьАктивностьПроводокСервер(Документ) Если Не Документ.ПометкаУдаления Тогда Проводки = РегистрыБухгалтерии._ДемоОсновной.СоздатьНаборЗаписей(); Проводки.Отбор.Регистратор.Установить(Документ); Проводки.Прочитать(); Если Проводки.Количество() > 0 Тогда Проводки.УстановитьАктивность(Не Проводки[0].Активность); Проводки.Записать(); Элементы.Список.Обновить(); КонецЕсли; КонецЕсли; КонецПроцедуры &НаКлиентеНаСервереБезКонтекста Процедура УстановитьЭлементОтбораДинамическогоСписка(Знач ДинамическийСписок, Знач ИмяПоля, Знач ПравоеЗначение, Знач ВидСравнения = Неопределено) Если ВидСравнения = Неопределено Тогда ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; КонецЕсли; ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбора(ДинамическийСписок.Отбор, ИмяПоля, ПравоеЗначение, ВидСравнения, , ЗначениеЗаполнено(ПравоеЗначение), РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный); КонецПроцедуры #КонецОбласти

AccumulationRegisters/_ДемоОстаткиТоваровВМестахХранения/ManagerModule

#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ПрограммныйИнтерфейс #Область ДляВызоваИзДругихПодсистем // СтандартныеПодсистемы.УправлениеДоступом // См. УправлениеДоступомПереопределяемый.ПриЗаполненииСписковСОграничениемДоступа. Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт Ограничение.Текст = "РазрешитьЧтениеИзменение |ГДЕ | ЗначениеРазрешено(Организация) | И ЗначениеРазрешено(МестоХранения)"; КонецПроцедуры // Конец СтандартныеПодсистемы.УправлениеДоступом #КонецОбласти #КонецОбласти #КонецЕсли

AccumulationRegisters/_ДемоОстаткиТоваровВМестахХранения/RecordSetModule



BusinessProcesses/_ДемоЗаданиеСРолевойАдресацией/ManagerModule

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

BusinessProcesses/_ДемоЗаданиеСРолевойАдресацией/ObjectModule

#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ПрограммныйИнтерфейс #Область ДляВызоваИзДругихПодсистем // СтандартныеПодсистемы.УправлениеДоступом // См. УправлениеДоступом.ЗаполнитьНаборыЗначенийДоступа. Процедура ЗаполнитьНаборыЗначенийДоступа(Таблица) Экспорт // Логика ограничения для // - чтения: Автор ИЛИ Исполнитель ИЛИ Проверяющий ИЛИ (Предмет И <исполнитель/проверяющий по адресации>). // - изменения: Автор. // // Если предмет не задан (т.е. бизнес-процесс без основания), // тогда предмет не участвует в логике ограничения. // Чтение, Изменение: набор № 1. Строка = Таблица.Добавить(); Строка.НомерНабора = 1; Строка.Чтение = Истина; Строка.Изменение = Истина; Строка.ЗначениеДоступа = Автор; // Чтение: набор № 2. Строка = Таблица.Добавить(); Строка.НомерНабора = 2; Строка.Чтение = Истина; Строка.ЗначениеДоступа = Исполнитель; // Чтение: набор № 3. Строка = Таблица.Добавить(); Строка.НомерНабора = 3; Строка.Чтение = Истина; Строка.ЗначениеДоступа = Проверяющий; МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом"); Если ТипЗнч(Предмет) = Тип("СправочникСсылка.Пользователи") Тогда Строка = Таблица.Добавить(); Строка.НомерНабора = 4; Строка.Чтение = Истина; Строка.ЗначениеДоступа = ГруппаИсполнителейЗадач; Строка = Таблица.Добавить(); Строка.НомерНабора = 5; Строка.Чтение = Истина; Строка.ЗначениеДоступа = ГруппаИсполнителейЗадачПроверяющий; Строка = Таблица.Добавить(); Строка.НомерНабора = 6; Строка.ЗначениеДоступа = Предмет; ИначеЕсли ЗначениеЗаполнено(Предмет) И МодульУправлениеДоступом.ВозможноЗаполнитьНаборыЗначенийДоступа(Предмет) Тогда НаборыГруппыДоступаИсполнителей = УправлениеДоступом.ТаблицаНаборыЗначенийДоступа(); Строка = НаборыГруппыДоступаИсполнителей.Добавить(); Строка.НомерНабора = 1; Строка.Чтение = Истина; Строка.ЗначениеДоступа = ГруппаИсполнителейЗадач; Строка = НаборыГруппыДоступаИсполнителей.Добавить(); Строка.НомерНабора = 2; Строка.Чтение = Истина; Строка.ЗначениеДоступа = ГруппаИсполнителейЗадачПроверяющий; НаборыПредмета = УправлениеДоступом.ТаблицаНаборыЗначенийДоступа(); УправлениеДоступом.ЗаполнитьНаборыЗначенийДоступа(Предмет, НаборыПредмета, Ссылка); НаборыПредмета = НаборыПредмета.Скопировать(НаборыПредмета.НайтиСтроки(Новый Структура("Чтение", Истина))); // Умножение наборов предмета на наборы группы доступа исполнителей. УправлениеДоступом.ДобавитьНаборыЗначенийДоступа(НаборыПредмета, НаборыГруппыДоступаИсполнителей, Истина); // Добавление результата к таблице наборов. УправлениеДоступом.ДобавитьНаборыЗначенийДоступа(Таблица, НаборыПредмета); Иначе // Без зависимости от предмета. Строка = Таблица.Добавить(); Строка.НомерНабора = 4; Строка.Чтение = Истина; Строка.ЗначениеДоступа = ГруппаИсполнителейЗадач; Строка = Таблица.Добавить(); Строка.НомерНабора = 5; Строка.Чтение = Истина; Строка.ЗначениеДоступа = ГруппаИсполнителейЗадачПроверяющий; КонецЕсли; КонецПроцедуры // Конец СтандартныеПодсистемы.УправлениеДоступом #КонецОбласти #КонецОбласти #Область ОбработчикиСобытий Процедура ПередЗаписью(Отказ) Если ОбменДанными.Загрузка Тогда Возврат; КонецЕсли; БизнесПроцессыИЗадачиСервер.ПроверитьПраваНаИзменениеСостоянияБизнесПроцесса(ЭтотОбъект); УстановитьПривилегированныйРежим(Истина); ГруппаИсполнителейЗадач = БизнесПроцессыИЗадачиСервер.ГруппаИсполнителейЗадач( РольИсполнителя, ОсновнойОбъектАдресации, ДополнительныйОбъектАдресации); ГруппаИсполнителейЗадачПроверяющий = БизнесПроцессыИЗадачиСервер.ГруппаИсполнителейЗадач( РольПроверяющего, ОсновнойОбъектАдресацииПроверяющий, ДополнительныйОбъектАдресацииПроверяющий); УстановитьПривилегированныйРежим(Ложь); КонецПроцедуры // Конец СтандартныеПодсистемы.УправлениеДоступом Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты) МассивНепроверяемыхРеквизитов = Новый Массив(); Если РеквизитыАдресацииЗаполнены() Тогда МассивНепроверяемыхРеквизитов.Добавить("Исполнитель"); КонецЕсли; Если Не ПроверитьВыполнение Или Не РольПроверяющего.Пустая() Тогда МассивНепроверяемыхРеквизитов.Добавить("Проверяющий"); КонецЕсли; ОбщегоНазначения.УдалитьНепроверяемыеРеквизитыИзМассива(ПроверяемыеРеквизиты, МассивНепроверяемыхРеквизитов); // Внешний пользователь при добавлении задания в качестве исполнителя может указывать только роли исполнителей. Если ПользователиКлиентСервер.ЭтоСеансВнешнегоПользователя() И НедопустимыйИсполнительДляВнешнегоПользователя() Тогда Отказ = Истина; КонецЕсли; КонецПроцедуры Процедура ОбработкаЗаполнения(ДанныеЗаполнения, ТекстЗаполнения, СтандартнаяОбработка) Если ЭтоНовый() Тогда Автор = ПользователиКлиентСервер.АвторизованныйПользователь(); СрокИсполнения = ТекущаяДатаСеанса(); Состояние = Перечисления.СостоянияБизнесПроцессов.Активен; Если ТипЗнч(ДанныеЗаполнения) = Тип("СправочникСсылка.Пользователи") Тогда Исполнитель = ДанныеЗаполнения; КонецЕсли; КонецЕсли; Если ДанныеЗаполнения <> Неопределено И ТипЗнч(ДанныеЗаполнения) <> Тип("Структура") И ДанныеЗаполнения <> Задачи.ЗадачаИсполнителя.ПустаяСсылка() Тогда Предмет = ДанныеЗаполнения; КонецЕсли; Если ТипЗнч(ДанныеЗаполнения) = Тип("ДокументСсылка._ДемоСчетНаОплатуПокупателю") Тогда Если НЕ ПользователиКлиентСервер.ЭтоСеансВнешнегоПользователя() И ПравоДоступа("Чтение", Метаданные.Справочники.ВнешниеПользователи) Тогда ОбработкаЗаполненияДляВнешнегоПользователя(ДанныеЗаполнения); КонецЕсли; Проверяющий = Пользователи.АвторизованныйПользователь(); КонецЕсли; БизнесПроцессыИЗадачиСервер.ЗаполнитьГлавнуюЗадачу(ЭтотОбъект, ДанныеЗаполнения); КонецПроцедуры Процедура ПриКопировании(ОбъектКопирования) ДатаЗавершения = '00010101000000'; Состояние = Перечисления.СостоянияБизнесПроцессов.Активен; КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// // Обработчики событий элементов карты маршрута. Процедура ВыполнитьПриСозданииЗадач(ТочкаМаршрутаБизнесПроцесса, ФормируемыеЗадачи, Отказ) Если НЕ РеквизитыАдресацииЗаполнены() Тогда Отказ = Истина; Возврат; КонецЕсли; // Устанавливаем реквизиты адресации и доп. реквизиты для каждой задачи. Для каждого Задача Из ФормируемыеЗадачи Цикл Задача.Автор = Автор; Задача.Исполнитель = ?(ЗначениеЗаполнено(Исполнитель), Исполнитель, Неопределено); Задача.РольИсполнителя = ?(ЗначениеЗаполнено(РольИсполнителя), РольИсполнителя, Неопределено); Задача.ОсновнойОбъектАдресации = ОсновнойОбъектАдресации; Задача.ДополнительныйОбъектАдресации = ДополнительныйОбъектАдресации; Задача.Наименование = Наименование; Задача.СрокИсполнения = СрокИсполнения; Задача.Предмет = Предмет; Задача.Описание = Описание; КонецЦикла; КонецПроцедуры Процедура ПоручениеИсполнителюПриВыполнении(ТочкаМаршрутаБизнесПроцесса, Задача, Отказ) Если Задача.ДатаИсполнения > ТекущаяДатаСеанса() Тогда ОбщегоНазначенияКлиентСервер.СообщитьПользователю( НСтр("ru = 'Фактическая дата выполнения задачи не может быть больше текущей даты.'"), Задача, "Объект.ДатаИсполнения"); Отказ = Истина; Возврат; КонецЕсли; КонецПроцедуры Процедура ПроверитьВыполнениеПроверкаУсловия(ТочкаМаршрутаБизнесПроцесса, Результат) Результат = ПроверитьВыполнение; КонецПроцедуры Процедура ПроверитьПриСозданииВложенныхБизнесПроцессов(ТочкаМаршрутаБизнесПроцесса, ФормируемыеБизнесПроцессы, Отказ) Для Каждого БизнесПроцессПроверки Из ФормируемыеБизнесПроцессы Цикл БизнесПроцессПроверки.Исполнитель = Проверяющий; БизнесПроцессПроверки.РольИсполнителя = РольПроверяющего; БизнесПроцессПроверки.ОсновнойОбъектАдресации = ОсновнойОбъектАдресацииПроверяющий; БизнесПроцессПроверки.ДополнительныйОбъектАдресации = ДополнительныйОбъектАдресацииПроверяющий; БизнесПроцессПроверки.Наименование = НСтр("ru = 'Проверить:'") + " " + Наименование; БизнесПроцессПроверки.Автор = Автор; БизнесПроцессПроверки.СрокИсполнения = СрокПроверки; БизнесПроцессПроверки.Предмет = Предмет; БизнесПроцессПроверки.Записать(); КонецЦикла; КонецПроцедуры Процедура ЗавершениеПриЗавершении(ТочкаМаршрутаБизнесПроцесса, Отказ) ДатаЗавершения = БизнесПроцессыИЗадачиСервер.ДатаЗавершенияБизнесПроцесса(Ссылка); Записать(); КонецПроцедуры #КонецОбласти #Область СлужебныеПроцедурыИФункции Процедура ОбработкаЗаполненияДляВнешнегоПользователя(Знач ДанныеЗаполнения) Запрос = Новый Запрос("ВЫБРАТЬ РАЗРЕШЕННЫЕ | ВнешниеПользователи.Ссылка КАК Ссылка |ИЗ | Справочник.ВнешниеПользователи КАК ВнешниеПользователи |ГДЕ | ВнешниеПользователи.ОбъектАвторизации = &ОбъектАвторизации"); Запрос.УстановитьПараметр("ОбъектАвторизации", ДанныеЗаполнения.Партнер); РезультатЗапроса = Запрос.Выполнить().Выбрать(); Если РезультатЗапроса.Следующий() Тогда Исполнитель = РезультатЗапроса.Ссылка; КонецЕсли; КонецПроцедуры Функция РеквизитыАдресацииЗаполнены() Возврат ЗначениеЗаполнено(Исполнитель) Или НЕ РольИсполнителя.Пустая(); КонецФункции Функция НедопустимыйИсполнительДляВнешнегоПользователя() Если ТипЗнч(РольИсполнителя) = ТипЗнч(Справочники.РолиИсполнителей.ПустаяСсылка()) И НЕ ЗначениеЗаполнено(Исполнитель) Тогда ОбъектАвторизацииПустаяСсылка = Справочники[ПользователиКлиентСервер.ТекущийВнешнийПользователь().ОбъектАвторизации.Метаданные().Имя].ПустаяСсылка(); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | РолиИсполнителейНазначение.Ссылка |ИЗ | Справочник.РолиИсполнителей.Назначение КАК РолиИсполнителейНазначение |ГДЕ | РолиИсполнителейНазначение.ТипПользователей = &ТипПользователей | И РолиИсполнителейНазначение.Ссылка = &Ссылка"; Запрос.УстановитьПараметр("Ссылка", РольИсполнителя); Запрос.УстановитьПараметр("ТипПользователей", ОбъектАвторизацииПустаяСсылка); РезультатЗапроса = Запрос.Выполнить().Выбрать(); Если РезультатЗапроса.Следующий() Тогда Возврат Ложь; КонецЕсли; КонецЕсли; Возврат Истина; КонецФункции #КонецОбласти #КонецЕсли

BusinessProcesses/_ДемоЗаданиеСРолевойАдресацией/Forms/ФормаБизнесПроцесса/Form/Module

#Область ОписаниеПеременных &НаКлиенте Перем КонтекстВыбора; #КонецОбласти #Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) УстановитьУсловноеОформление(); Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. Возврат; КонецЕсли; УстановитьПривилегированныйРежим(Истина); АвторСтрокой = Строка(Объект.Автор); УстановитьПривилегированныйРежим(Ложь); // Для нового объекта выполняем код инициализации формы в ПриСозданииНаСервере. // Для существующего - в ПриЧтенииНаСервере. Если Объект.Ссылка.Пустая() Тогда ИнициализацияФормы(); КонецЕсли; // СтандартныеПодсистемы.ВерсионированиеОбъектов ВерсионированиеОбъектов.ПриСозданииНаСервере(ЭтотОбъект); // Конец СтандартныеПодсистемы.ВерсионированиеОбъектов // СтандартныеПодсистемы.ПодключаемыеКоманды ПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект); // Конец СтандартныеПодсистемы.ПодключаемыеКоманды КонецПроцедуры &НаСервере Процедура ПриЧтенииНаСервере(ТекущийОбъект) ИнициализацияФормы(); // СтандартныеПодсистемы.ПодключаемыеКоманды ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Объект); // Конец СтандартныеПодсистемы.ПодключаемыеКоманды // СтандартныеПодсистемы.УправлениеДоступом Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом"); МодульУправлениеДоступом.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект); КонецЕсли; // Конец СтандартныеПодсистемы.УправлениеДоступом КонецПроцедуры &НаКлиенте Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора) Если ВРег(ИсточникВыбора.ИмяФормы) = ВРег("ОбщаяФорма.ВыборРолиИсполнителя") Тогда Если ТипЗнч(ВыбранноеЗначение) = Тип("Структура") Тогда Если КонтекстВыбора = "РольНажатие" Тогда УстановитьРоль(ВыбранноеЗначение); ИначеЕсли КонтекстВыбора = "РольПроверяющегоНажатие" Тогда УстановитьРольПроверяющего(ВыбранноеЗначение); КонецЕсли; КонецЕсли; КонецЕсли; КонецПроцедуры &НаКлиенте Процедура ТипИсполнителяПриИзменении(Элемент) УстановитьРоль(Неопределено); КонецПроцедуры &НаКлиенте Процедура ПередЗаписью(Отказ, ПараметрыЗаписи) Если ТипЗнч(ТипИсполнителя) = Тип("СправочникСсылка.Пользователи") Тогда Объект.Исполнитель = ИсполнительПоНазначению; Объект.РольИсполнителя = Неопределено; КонецЕсли; КонецПроцедуры &НаСервере Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) Если ТипЗнч(ТипИсполнителя) <> Тип("СправочникСсылка.Пользователи") Тогда УстановитьИсполнителяПоДаннымФормы(); КонецЕсли; // Проверяем заполнение во всех случаях при записи, а не только при старте. Если НачальныйПризнакСтарта И ТекущийОбъект.Стартован Или (НЕ НачальныйПризнакСтарта И НЕ ТекущийОбъект.Стартован) Тогда Если Не ТекущийОбъект.ПроверитьЗаполнение() Тогда Отказ = Истина; КонецЕсли; КонецЕсли; КонецПроцедуры &НаКлиенте Процедура ПриОткрытии(Отказ) // СтандартныеПодсистемы.ПодключаемыеКоманды ПодключаемыеКомандыКлиент.НачатьОбновлениеКоманд(ЭтотОбъект); // Конец СтандартныеПодсистемы.ПодключаемыеКоманды КонецПроцедуры #КонецОбласти #Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура ГлавнаяЗадачаНажатие(Элемент, СтандартнаяОбработка) ПоказатьЗначение(,Объект.ГлавнаяЗадача); СтандартнаяОбработка = Ложь; КонецПроцедуры &НаКлиенте Процедура РольНажатие(Элемент, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; КонтекстВыбора = "РольНажатие"; ПараметрыФормы = Новый Структура; ПараметрыФормы.Вставить("РольИсполнителя", Объект.РольИсполнителя); ПараметрыФормы.Вставить("ОсновнойОбъектАдресации", Объект.ОсновнойОбъектАдресации); ПараметрыФормы.Вставить("ДополнительныйОбъектАдресации", Объект.ДополнительныйОбъектАдресации); ОткрытьФорму("ОбщаяФорма.ВыборРолиИсполнителя", ПараметрыФормы, ЭтотОбъект); КонецПроцедуры &НаКлиенте Процедура ПредметНажатие(Элемент, СтандартнаяОбработка) ПоказатьЗначение(,Объект.Предмет); СтандартнаяОбработка = Ложь; КонецПроцедуры &НаКлиенте Процедура РольПроверяющегоНажатие(Элемент, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; КонтекстВыбора = "РольПроверяющегоНажатие"; ПараметрыФормы = Новый Структура; ПараметрыФормы.Вставить("РольИсполнителя", Объект.РольПроверяющего); ПараметрыФормы.Вставить("ОсновнойОбъектАдресации", Объект.ОсновнойОбъектАдресацииПроверяющий); ПараметрыФормы.Вставить("ДополнительныйОбъектАдресации", Объект.ДополнительныйОбъектАдресацииПроверяющий); ОткрытьФорму("ОбщаяФорма.ВыборРолиИсполнителя", ПараметрыФормы, ЭтотОбъект); КонецПроцедуры &НаКлиенте Процедура ПроверяющийПриИзменении(Элемент) Если Объект.ПроверитьВыполнение И ЗначениеЗаполнено(ПроверяющийПоНазначению) Тогда Если ТипЗнч(ТипПроверяющего) = Тип("СправочникСсылка.РолиИсполнителей") Тогда Объект.РольПроверяющего = ПроверяющийПоНазначению; Объект.Проверяющий = Неопределено; Иначе Объект.Проверяющий = ПроверяющийПоНазначению; Объект.РольПроверяющего = Неопределено; КонецЕсли; КонецЕсли; КонецПроцедуры &НаКлиенте Процедура ПроверитьВыполнениеПриИзменении(Элемент) УстановитьСостояниеЭлементов(); КонецПроцедуры &НаКлиенте Процедура ИсполнительОткрытие(Элемент, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; КонецПроцедуры &НаКлиенте Процедура ИсполнительНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) Если ТипЗнч(ТипИсполнителя) = Тип("СправочникСсылка.РолиИсполнителей") Тогда Если НЕ ПользователиКлиентСервер.ЭтоСеансВнешнегоПользователя() Тогда СтандартнаяОбработка = Ложь; КонтекстВыбора = "РольНажатие"; ПараметрыФормы = Новый Структура; ПараметрыФормы.Вставить("РольИсполнителя", Объект.РольИсполнителя); ПараметрыФормы.Вставить("ОсновнойОбъектАдресации", Объект.ОсновнойОбъектАдресации); ПараметрыФормы.Вставить("ДополнительныйОбъектАдресации", Объект.ДополнительныйОбъектАдресации); ОткрытьФорму("ОбщаяФорма.ВыборРолиИсполнителя", ПараметрыФормы, ЭтотОбъект); КонецЕсли; КонецЕсли; КонецПроцедуры &НаКлиенте Процедура ПроверяющийНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) Если ТипЗнч(ТипПроверяющего) = Тип("СправочникСсылка.РолиИсполнителей") Тогда Если НЕ ПользователиКлиентСервер.ЭтоСеансВнешнегоПользователя() Тогда СтандартнаяОбработка = Ложь; КонтекстВыбора = "РольПроверяющегоНажатие"; ПараметрыФормы = Новый Структура; ПараметрыФормы.Вставить("РольИсполнителя", Объект.РольПроверяющего); ПараметрыФормы.Вставить("ОсновнойОбъектАдресации", Объект.ОсновнойОбъектАдресацииПроверяющий); ПараметрыФормы.Вставить("ДополнительныйОбъектАдресации", Объект.ДополнительныйОбъектАдресацииПроверяющий); ОткрытьФорму("ОбщаяФорма.ВыборРолиИсполнителя", ПараметрыФормы, ЭтотОбъект); КонецЕсли; КонецЕсли; КонецПроцедуры #КонецОбласти #Область ОбработчикиКомандФормы &НаКлиенте Процедура ЗаписатьИЗакрыть(Команда) ОчиститьСообщения(); Если Не ПроверитьЗаполнение() Тогда Возврат; КонецЕсли; Записать(); Закрыть(); КонецПроцедуры #КонецОбласти #Область СлужебныеПроцедурыИФункции &НаСервере Процедура УстановитьУсловноеОформление() УсловноеОформление.Элементы.Очистить(); // Элемент = УсловноеОформление.Элементы.Добавить(); ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.Исполнитель.Имя); ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ТипАдресации"); ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; ОтборЭлемента.ПравоеЗначение = 0; ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Исполнитель"); ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено; Элемент.Оформление.УстановитьЗначениеПараметра("ОтметкаНезаполненного", Истина); // Элемент = УсловноеОформление.Элементы.Добавить(); ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.Роль.Имя); ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ТипАдресации"); ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; ОтборЭлемента.ПравоеЗначение = 1; ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.РольИсполнителя"); ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено; Элемент.Оформление.УстановитьЗначениеПараметра("ОтметкаНезаполненного", Истина); // Элемент = УсловноеОформление.Элементы.Добавить(); ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.Проверяющий.Имя); ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ПроверяющийТипАдресации"); ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; ОтборЭлемента.ПравоеЗначение = 0; ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Проверяющий"); ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено; Элемент.Оформление.УстановитьЗначениеПараметра("ОтметкаНезаполненного", Истина); // Элемент = УсловноеОформление.Элементы.Добавить(); ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.РольПроверяющего.Имя); ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ПроверяющийТипАдресации"); ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; ОтборЭлемента.ПравоеЗначение = 1; ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.РольПроверяющего"); ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено; Элемент.Оформление.УстановитьЗначениеПараметра("ОтметкаНезаполненного", Истина); КонецПроцедуры &НаСервере Процедура ИнициализацияФормы() ИспользоватьДатуИВремяВСрокахЗадач = ПолучитьФункциональнуюОпцию("ИспользоватьДатуИВремяВСрокахЗадач"); Элементы.Дата.Формат = ?(ИспользоватьДатуИВремяВСрокахЗадач, "ДЛФ=DT", "ДЛФ=D"); Элементы.ГруппаСостояние.Видимость = Объект.Завершен Или Объект.Стартован; Если Объект.Завершен Тогда ДатаЗавершенияСтрокой = ?(ИспользоватьДатуИВремяВСрокахЗадач, Формат(Объект.ДатаЗавершения, "ДЛФ=DT"), Формат(Объект.ДатаЗавершения, "ДЛФ=D")); Элементы.ДекорацияТекст.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Задание выполнено %1.'"), ДатаЗавершенияСтрокой); Для каждого Элемент Из Элементы Цикл Если ТипЗнч(Элемент) <> Тип("ПолеФормы") И ТипЗнч(Элемент) <> Тип("ГруппаФормы") Тогда Продолжить; КонецЕсли; Элемент.ТолькоПросмотр = Истина; КонецЦикла; Иначе ТекстСостояния = ?(ПолучитьФункциональнуюОпцию("ИзменятьЗаданияЗаднимЧислом"), НСтр("ru = 'Изменения формулировки, важности, автора, а также перенос сроков исполнения и проверки задания |вступят в силу немедленно для ранее выданной задачи.'"), НСтр("ru = 'Изменения формулировки, важности, автора, а также перенос сроков исполнения и проверки задания |не будут отражены в ранее выданной задаче.'")); Элементы.ДекорацияТекст.Заголовок = ТекстСостояния; КонецЕсли; Элементы.ФормаСтартИЗакрыть.Видимость = Не Объект.Стартован; Элементы.ФормаСтартИЗакрыть.КнопкаПоУмолчанию = Не Объект.Стартован; Элементы.ФормаСтарт.Видимость = Не Объект.Стартован; Элементы.ФормаЗаписатьИЗакрыть.Видимость = Объект.Стартован; Элементы.ФормаЗаписатьИЗакрыть.КнопкаПоУмолчанию = Объект.Стартован; ПроверяющийТипАдресации = ?(Объект.РольПроверяющего.Пустая(), 0, 1); Элементы.Предмет.Гиперссылка = Объект.Предмет <> Неопределено И НЕ Объект.Предмет.Пустая(); ПредметСтрокой = ОбщегоНазначения.ПредметСтрокой(Объект.Предмет); НачальныйПризнакСтарта = Объект.Стартован; УстановитьСостояниеЭлементов(); Если Объект.ГлавнаяЗадача = Неопределено Или Объект.ГлавнаяЗадача.Пустая() Тогда Элементы.ГлавнаяЗадача.Гиперссылка = Ложь; ГлавнаяЗадачаСтрокой = НСтр("ru = 'не задана'"); Иначе ГлавнаяЗадачаСтрокой = Строка(Объект.ГлавнаяЗадача); КонецЕсли; Если Не ПолучитьФункциональнуюОпцию("ИспользоватьПодчиненныеБизнесПроцессы") Тогда Элементы.ГлавнаяЗадача.Видимость = Ложь; КонецЕсли; Элементы.ТипИсполнителя.СписокВыбора.Очистить(); Элементы.ТипПроверяющего.СписокВыбора.Очистить(); Элементы.ТипИсполнителя.СписокВыбора.Добавить(Справочники.РолиИсполнителей.ПустаяСсылка(), НСтр("ru = 'Роль исполнителя'")); Элементы.ТипПроверяющего.СписокВыбора.Добавить(Справочники.РолиИсполнителей.ПустаяСсылка(), НСтр("ru = 'Роль исполнителя'")); Если ПользователиКлиентСервер.ЭтоСеансВнешнегоПользователя() Тогда ОпределитьОтображениеФормыДляВнешнегоПользователя(); Иначе ОпределитьОтображениеФормыДляПользователя(); КонецЕсли; КонецПроцедуры &НаСервере Процедура ОпределитьОтображениеФормыДляПользователя() Элементы.ТипИсполнителя.СписокВыбора.Добавить(Справочники.Пользователи.ПустаяСсылка(), НСтр("ru = 'Пользователь'")); Элементы.ТипПроверяющего.СписокВыбора.Добавить(Справочники.Пользователи.ПустаяСсылка(), НСтр("ru = 'Пользователь'")); Если ПравоДоступа("Чтение", Метаданные.Справочники.ВнешниеПользователи) Тогда Для каждого ТипВнешнегоИсполнителя Из Метаданные.ОпределяемыеТипы.ВнешнийПользователь.Тип.Типы() Цикл Если Не ОбщегоНазначения.ЭтоСсылка(ТипВнешнегоИсполнителя) Тогда Продолжить; КонецЕсли; МетаданныеОбъекта = Метаданные.НайтиПоТипу(ТипВнешнегоИсполнителя); Представление = МетаданныеОбъекта.РасширенноеПредставлениеОбъекта; Значение = Справочники[МетаданныеОбъекта.Имя].ПустаяСсылка(); Если ПустаяСтрока(Представление) Тогда Представление = МетаданныеОбъекта.ПредставлениеОбъекта; Если ПустаяСтрока(Представление) Тогда Представление = МетаданныеОбъекта.Синоним; Если ПустаяСтрока(Представление) Тогда Представление = МетаданныеОбъекта.Имя; КонецЕсли; КонецЕсли; КонецЕсли; Элементы.ТипИсполнителя.СписокВыбора.Добавить(Значение, Представление); КонецЦикла; КонецЕсли; Если ЗначениеЗаполнено(Объект.Предмет) Тогда МетаданныеОбъекта = Объект.Предмет.Метаданные(); Если МетаданныеОбъекта.Реквизиты.Найти("Ответственный") <> Неопределено Тогда ТипПроверяющего = Элементы.ТипИсполнителя.СписокВыбора.НайтиПоЗначению(Справочники[Объект.Предмет.Ответственный.Метаданные().Имя].ПустаяСсылка()).Значение; КонецЕсли; КонецЕсли; Если ЗначениеЗаполнено(Объект.Исполнитель) Тогда Если ТипЗнч(Объект.Исполнитель) = Тип("СправочникСсылка.ВнешниеПользователи") Тогда ТипИсполнителя = Элементы.ТипИсполнителя.СписокВыбора.НайтиПоЗначению(Справочники[Объект.Исполнитель.ОбъектАвторизации.Метаданные().Имя].ПустаяСсылка()).Значение; ИсполнительПоНазначению = Объект.Исполнитель.ОбъектАвторизации; ИначеЕсли ТипЗнч(Объект.Исполнитель) = Тип("СправочникСсылка.Пользователи") Тогда ТипИсполнителя = Элементы.ТипИсполнителя.СписокВыбора.НайтиПоЗначению(Справочники.Пользователи.ПустаяСсылка()).Значение; ИсполнительПоНазначению = Объект.Исполнитель; КонецЕсли; Иначе ТипИсполнителя = Элементы.ТипИсполнителя.СписокВыбора.НайтиПоЗначению(Справочники.РолиИсполнителей.ПустаяСсылка()).Значение; ИсполнительПоНазначению = Объект.РольИсполнителя; КонецЕсли; Если ЗначениеЗаполнено(Объект.Проверяющий) Тогда ТипПроверяющего = Элементы.ТипПроверяющего.СписокВыбора.НайтиПоЗначению(Справочники.Пользователи.ПустаяСсылка()).Значение; ПроверяющийПоНазначению = Объект.Проверяющий; Иначе ТипПроверяющего = Элементы.ТипПроверяющего.СписокВыбора.НайтиПоЗначению(Справочники.РолиИсполнителей.ПустаяСсылка()).Значение; ПроверяющийПоНазначению = Объект.РольПроверяющего; КонецЕсли; КонецПроцедуры &НаСервере Процедура ОпределитьОтображениеФормыДляВнешнегоПользователя() Если Объект.Ссылка.Пустая()Тогда ТипИсполнителя = Справочники.РолиИсполнителей.ПустаяСсылка(); ОбъектАвторизацииПустаяСсылка = Справочники[ПользователиКлиентСервер.ТекущийВнешнийПользователь().ОбъектАвторизации.Метаданные().Имя].ПустаяСсылка(); Объект.Исполнитель = Справочники.РолиИсполнителей.ПустаяСсылка(); Запрос = Новый Запрос("ВЫБРАТЬ РАЗРЕШЕННЫЕ | РолиИсполнителейНазначение.Ссылка КАК Ссылка |ИЗ | Справочник.РолиИсполнителей.Назначение КАК РолиИсполнителейНазначение |ГДЕ | РолиИсполнителейНазначение.ТипПользователей = &ТипПользователей"); Запрос.УстановитьПараметр("ТипПользователей", ОбъектАвторизацииПустаяСсылка); ТаблицаРолей = Запрос.Выполнить().Выгрузить(); Элементы.Исполнитель.СвязьПоТипу = Новый СвязьПоТипу(); ИсполнительПоНазначению = Справочники.РолиИсполнителей.ПустаяСсылка(); Если ТаблицаРолей.Количество() = 1 Тогда ИсполнительПоНазначению = ТаблицаРолей[0].Ссылка; Объект.РольИсполнителя = ИсполнительПоНазначению; КонецЕсли; Иначе Если ЗначениеЗаполнено(Объект.РольИсполнителя) Тогда ТипИсполнителя = Объект.РольИсполнителя.Ссылка; ИсполнительПоНазначению = Объект.РольИсполнителя; Иначе ИсполнительСтрокой = Строка(Объект.Исполнитель); Элементы.ИсполнительСтрокой.Видимость = Истина; Элементы.Исполнитель.Видимость = Ложь; Элементы.Исполнитель.ТолькоПросмотр = Истина; КонецЕсли; КонецЕсли; Элементы.Автор.Видимость = Ложь; Элементы.АвторСтрокой.Видимость = Истина; Элементы.ГруппаПроверитьИсполнение.Видимость = Ложь; Элементы.ТипИсполнителя.Видимость = Ложь; Элементы.Исполнитель.ПоложениеЗаголовка = ПоложениеЗаголовкаЭлементаФормы.Авто; КонецПроцедуры &НаСервере Процедура УстановитьСостояниеЭлементов() РольСтрокой = РольСтрокой(Объект.ОсновнойОбъектАдресации, Объект.ДополнительныйОбъектАдресации); Элементы.Роль.Видимость = ?(ЗначениеЗаполнено(РольСтрокой), Истина, Ложь); РольПроверяющегоСтрокой = РольСтрокой(Объект.ОсновнойОбъектАдресацииПроверяющий, Объект.ДополнительныйОбъектАдресацииПроверяющий); Элементы.РольПроверяющего.Видимость = ?(ЗначениеЗаполнено(РольПроверяющегоСтрокой), Истина, Ложь); Элементы.ГруппаПроверка.Доступность = Объект.ПроверитьВыполнение; КонецПроцедуры &НаСервере Функция РольСтрокой(ОсновнойОбъектАдресации, ДополнительныйОбъектАдресации) Результат = ""; Если ОсновнойОбъектАдресации <> Неопределено Тогда Результат = НСтр("ru = 'Объект адресации'") + ": " + Строка(ОсновнойОбъектАдресации); Если ДополнительныйОбъектАдресации <> Неопределено Тогда Результат = Результат + " ," + Строка(ДополнительныйОбъектАдресации); КонецЕсли; КонецЕсли; Возврат Результат; КонецФункции &НаСервере Функция УстановитьИсполнителяПоДаннымФормы() Если ЗначениеЗаполнено(ИсполнительПоНазначению) Тогда Если ТипЗнч(ТипИсполнителя) = Тип("СправочникСсылка.РолиИсполнителей") Тогда Если ПользователиКлиентСервер.ЭтоСеансВнешнегоПользователя() Тогда Объект.Исполнитель = Справочники.Пользователи.ПустаяСсылка(); Объект.РольИсполнителя = ИсполнительПоНазначению; КонецЕсли; УстановитьСостояниеЭлементов(); Иначе Объект.Исполнитель = Справочники.ВнешниеПользователи.НайтиПоРеквизиту("ОбъектАвторизации", ИсполнительПоНазначению); Объект.РольИсполнителя = Неопределено; КонецЕсли; КонецЕсли; КонецФункции &НаСервере Процедура УстановитьРольПроверяющего(РольСтруктура) Объект.Проверяющий = Справочники.Пользователи.ПустаяСсылка(); Объект.РольПроверяющего = РольСтруктура.РольИсполнителя; ПроверяющийПоНазначению = РольСтруктура.РольИсполнителя; Объект.ОсновнойОбъектАдресацииПроверяющий = РольСтруктура.ОсновнойОбъектАдресации; Объект.ДополнительныйОбъектАдресацииПроверяющий = РольСтруктура.ДополнительныйОбъектАдресации; УстановитьСостояниеЭлементов(); КонецПроцедуры &НаСервере Процедура УстановитьРоль(РольСтруктура) Объект.Исполнитель = Справочники.Пользователи.ПустаяСсылка(); Если ЗначениеЗаполнено(РольСтруктура) Тогда Объект.РольИсполнителя = РольСтруктура.РольИсполнителя; ИсполнительПоНазначению = РольСтруктура.РольИсполнителя; Объект.ОсновнойОбъектАдресации = РольСтруктура.ОсновнойОбъектАдресации; Объект.ДополнительныйОбъектАдресации = РольСтруктура.ДополнительныйОбъектАдресации; Иначе Объект.РольИсполнителя = Неопределено; ИсполнительПоНазначению = Неопределено; Объект.ОсновнойОбъектАдресации = Неопределено; Объект.ДополнительныйОбъектАдресации = Неопределено; КонецЕсли; УстановитьСостояниеЭлементов(); УстановитьИсполнителяПоДаннымФормы(); КонецПроцедуры // СтандартныеПодсистемы.ПодключаемыеКоманды &НаКлиенте Процедура Подключаемый_ВыполнитьКоманду(Команда) ПодключаемыеКомандыКлиент.ВыполнитьКоманду(ЭтотОбъект, Команда, Объект); КонецПроцедуры &НаСервере Процедура Подключаемый_ВыполнитьКомандуНаСервере(Контекст, Результат) ПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, Контекст, Объект, Результат); КонецПроцедуры &НаКлиенте Процедура Подключаемый_ОбновитьКоманды() ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Объект); КонецПроцедуры // Конец СтандартныеПодсистемы.ПодключаемыеКоманды #КонецОбласти

BusinessProcesses/_ДемоЗаданиеСРолевойАдресацией/Forms/ФормаСписка/Form/Module

 #Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. Возврат; КонецЕсли; ПоИсполнителю = Пользователи.АвторизованныйПользователь(); УстановитьОтбор(); БизнесПроцессыИЗадачиСервер.УстановитьОформлениеБизнесПроцессов(Список.УсловноеОформление); // СтандартныеПодсистемы.ПодключаемыеКоманды ПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект); // Конец СтандартныеПодсистемы.ПодключаемыеКоманды Если ПользователиКлиентСервер.ЭтоСеансВнешнегоПользователя() Тогда Элементы.ПоИсполнителю.Видимость = Ложь; КонецЕсли; МожноРедактировать = ПравоДоступа("Редактирование", Метаданные.БизнесПроцессы._ДемоЗаданиеСРолевойАдресацией); Элементы.ФормаГрупповоеИзменениеОбъектов.Видимость = МожноРедактировать; Элементы.СписокКонтекстноеМенюГрупповоеИзменениеОбъектов.Видимость = МожноРедактировать; КонецПроцедуры &НаСервере Процедура ПриЗагрузкеДанныхИзНастроекНаСервере(Настройки) УстановитьОтборСписка(Настройки); КонецПроцедуры #КонецОбласти #Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура ПоИсполнителюПриИзменении(Элемент) УстановитьОтбор(); КонецПроцедуры &НаКлиенте Процедура ПоРолиИсполнителяПриИзменении(Элемент) УстановитьОтбор(); КонецПроцедуры &НаКлиенте Процедура ПоказыватьВыполненныеЗаданияПриИзменении(Элемент) УстановитьОтбор(); КонецПроцедуры #КонецОбласти #Область ОбработчикиСобытийЭлементовТаблицыФормыСписок &НаКлиенте Процедура СписокПриАктивизацииСтроки(Элемент) // СтандартныеПодсистемы.ПодключаемыеКоманды ПодключаемыеКомандыКлиент.НачатьОбновлениеКоманд(ЭтотОбъект); // Конец СтандартныеПодсистемы.ПодключаемыеКоманды КонецПроцедуры #КонецОбласти #Область ОбработчикиКомандФормы &НаКлиенте Процедура ИзменитьВыделенные(Команда) ГрупповоеИзменениеОбъектовКлиент.ИзменитьВыделенные(Элементы.Список); КонецПроцедуры &НаКлиенте Процедура Остановить(Команда) БизнесПроцессыИЗадачиКлиент.Остановить( Элементы.Список.ВыделенныеСтроки); Для каждого ВыделеннаяСтрока Из Элементы.Список.ВыделенныеСтроки Цикл ОповеститьОбИзменении(ВыделеннаяСтрока); КонецЦикла; КонецПроцедуры &НаКлиенте Процедура ПродолжитьБизнесПроцесс(Команда) БизнесПроцессыИЗадачиКлиент.СделатьАктивным( Элементы.Список.ВыделенныеСтроки); Для каждого ВыделеннаяСтрока Из Элементы.Список.ВыделенныеСтроки Цикл ОповеститьОбИзменении(ВыделеннаяСтрока); КонецЦикла; КонецПроцедуры #КонецОбласти #Область СлужебныеПроцедурыИФункции &НаСервере Процедура УстановитьОтбор() ПараметрыОтбора = Новый Соответствие(); ПараметрыОтбора.Вставить("ПоказыватьВыполненныеЗадания", ПоказыватьВыполненныеЗадания); ПараметрыОтбора.Вставить("ПоИсполнителю", ПоИсполнителю); ПараметрыОтбора.Вставить("ПоРолиИсполнителя", ПоРолиИсполнителя); УстановитьОтборСписка(ПараметрыОтбора); КонецПроцедуры &НаСервере Процедура УстановитьОтборСписка(ПараметрыОтбора) ОбщегоНазначенияКлиентСервер.УдалитьЭлементыГруппыОтбораДинамическогоСписка(Список, "Завершен"); Если НЕ ПараметрыОтбора["ПоказыватьВыполненныеЗадания"] Тогда ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( Список, "Завершен", Ложь); КонецЕсли; Если ПараметрыОтбора["ПоИсполнителю"].Пустая() Тогда Список.Параметры.УстановитьЗначениеПараметра("Исполнитель", NULL); Иначе Список.Параметры.УстановитьЗначениеПараметра("Исполнитель", ПараметрыОтбора["ПоИсполнителю"]); КонецЕсли; Если ПараметрыОтбора["ПоРолиИсполнителя"].Пустая() Тогда ОбщегоНазначенияКлиентСервер.УдалитьЭлементыГруппыОтбораДинамическогоСписка(Список, "РольИсполнителя"); Иначе ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( Список, "РольИсполнителя", ПараметрыОтбора["ПоРолиИсполнителя"]); КонецЕсли; КонецПроцедуры // СтандартныеПодсистемы.ПодключаемыеКоманды &НаКлиенте Процедура Подключаемый_ВыполнитьКоманду(Команда) ПодключаемыеКомандыКлиент.ВыполнитьКоманду(ЭтотОбъект, Команда, Элементы.Список); КонецПроцедуры &НаСервере Процедура Подключаемый_ВыполнитьКомандуНаСервере(Контекст, Результат) ПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, Контекст, Элементы.Список, Результат); КонецПроцедуры &НаКлиенте Процедура Подключаемый_ОбновитьКоманды() ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Элементы.Список); КонецПроцедуры // Конец СтандартныеПодсистемы.ПодключаемыеКоманды #КонецОбласти

BusinessProcesses/Задание/ManagerModule

#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ПрограммныйИнтерфейс #Область ДляВызоваИзДругихПодсистем // СтандартныеПодсистемы.ГрупповоеИзменениеОбъектов // Возвращает реквизиты объекта, которые разрешается редактировать // с помощью обработки группового изменения реквизитов. // // Возвращаемое значение: // Массив - список имен реквизитов объекта. Функция РеквизитыРедактируемыеВГрупповойОбработке() Экспорт Результат = Новый Массив; Результат.Добавить("Автор"); Результат.Добавить("Важность"); Результат.Добавить("Исполнитель"); Результат.Добавить("ПроверитьВыполнение"); Результат.Добавить("Проверяющий"); Результат.Добавить("СрокИсполнения"); Результат.Добавить("СрокПроверки"); Возврат Результат; КонецФункции // Конец СтандартныеПодсистемы.ГрупповоеИзменениеОбъектов // СтандартныеПодсистемы.БизнесПроцессыИЗадачи // Получить структуру с описанием формы выполнения задачи. // Вызывается при открытии формы выполнения задачи. // // Параметры: // ЗадачаСсылка - ЗадачаСсылка.ЗадачаИсполнителя - задача. // ТочкаМаршрутаБизнесПроцесса - ТочкаМаршрутаБизнесПроцессаСсылка - точка маршрута. // // Возвращаемое значение: // Структура - структуру с описанием формы выполнения задачи. // Ключ "ИмяФормы" содержит имя формы, передаваемое в метод контекста ОткрытьФорму(). // Ключ "ПараметрыФормы" содержит параметры формы. // Функция ФормаВыполненияЗадачи(ЗадачаСсылка, ТочкаМаршрутаБизнесПроцесса) Экспорт Результат = Новый Структура; Результат.Вставить("ПараметрыФормы", Новый Структура("Ключ", ЗадачаСсылка)); Результат.Вставить("ИмяФормы", "БизнесПроцесс.Задание.Форма.Действие" + ТочкаМаршрутаБизнесПроцесса.Имя); Возврат Результат; КонецФункции // Вызывается при перенаправлении задачи. // // Параметры: // ЗадачаСсылка - ЗадачаСсылка.ЗадачаИсполнителя - перенаправляемая задача. // НоваяЗадачаСсылка - ЗадачаСсылка.ЗадачаИсполнителя - задача для нового исполнителя. // Процедура ПриПеренаправленииЗадачи(ЗадачаСсылка, НоваяЗадачаСсылка) Экспорт БизнесПроцессОбъект = ЗадачаСсылка.БизнесПроцесс.ПолучитьОбъект(); ЗаблокироватьДанныеДляРедактирования(БизнесПроцессОбъект.Ссылка); БизнесПроцессОбъект.РезультатВыполнения = РезультатВыполненияПриПеренаправлении(ЗадачаСсылка) + БизнесПроцессОбъект.РезультатВыполнения; УстановитьПривилегированныйРежим(Истина); БизнесПроцессОбъект.Записать(); КонецПроцедуры // Вызывается при выполнении задачи из формы списка. // // Параметры: // ЗадачаСсылка - ЗадачаСсылка.ЗадачаИсполнителя - задача. // БизнесПроцессСсылка - БизнесПроцессСсылка - бизнес-процесс, по которому сформирована задача ЗадачаСсылка. // ТочкаМаршрутаБизнесПроцесса - ТочкаМаршрутаБизнесПроцессаСсылка - точка маршрута. // Процедура ОбработкаВыполненияПоУмолчанию(ЗадачаСсылка, БизнесПроцессСсылка, ТочкаМаршрутаБизнесПроцесса) Экспорт // Устанавливаем значения по умолчанию для пакетного выполнения задач. Если ТочкаМаршрутаБизнесПроцесса = БизнесПроцессы.Задание.ТочкиМаршрута.Выполнить Тогда УстановитьПривилегированныйРежим(Истина); ЗаданиеОбъект = БизнесПроцессСсылка.ПолучитьОбъект(); ЗаблокироватьДанныеДляРедактирования(ЗаданиеОбъект.Ссылка); ЗаданиеОбъект.Выполнено = Истина; ЗаданиеОбъект.Записать(); ИначеЕсли ТочкаМаршрутаБизнесПроцесса = БизнесПроцессы.Задание.ТочкиМаршрута.Проверить Тогда УстановитьПривилегированныйРежим(Истина); ЗаданиеОбъект = БизнесПроцессСсылка.ПолучитьОбъект(); ЗаблокироватьДанныеДляРедактирования(ЗаданиеОбъект.Ссылка); ЗаданиеОбъект.Выполнено = Истина; ЗаданиеОбъект.Подтверждено = Истина; ЗаданиеОбъект.Записать(); КонецЕсли; КонецПроцедуры // Конец СтандартныеПодсистемы.БизнесПроцессыИЗадачи // СтандартныеПодсистемы.УправлениеДоступом // См. УправлениеДоступомПереопределяемый.ПриЗаполненииСписковСОграничениемДоступа. Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт Ограничение.Текст = "ПрисоединитьДополнительныеТаблицы |ЭтотСписок КАК Задание | |ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ИсполнителиЗадач КАК ИсполнителиЗадач |ПО | ИсполнителиЗадач.РольИсполнителя = Задание.Исполнитель | И ИсполнителиЗадач.ОсновнойОбъектАдресации = Задание.ОсновнойОбъектАдресации | И ИсполнителиЗадач.ДополнительныйОбъектАдресации = Задание.ДополнительныйОбъектАдресации | |ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ИсполнителиЗадач КАК ПроверяющиеЗадач |ПО | ПроверяющиеЗадач.РольИсполнителя = Задание.Проверяющий | И ПроверяющиеЗадач.ОсновнойОбъектАдресации = Задание.ОсновнойОбъектАдресацииПроверяющий | И ПроверяющиеЗадач.ДополнительныйОбъектАдресации = Задание.ДополнительныйОбъектАдресацииПроверяющий |; |РазрешитьЧтение |ГДЕ | ЗначениеРазрешено(Автор) | ИЛИ ЗначениеРазрешено(Исполнитель КРОМЕ Справочник.РолиИсполнителей) | ИЛИ ЗначениеРазрешено(ИсполнителиЗадач.Исполнитель) | ИЛИ ЗначениеРазрешено(Проверяющий КРОМЕ Справочник.РолиИсполнителей) | ИЛИ ЗначениеРазрешено(ПроверяющиеЗадач.Исполнитель) |; |РазрешитьИзменениеЕслиРазрешеноЧтение |ГДЕ | ЗначениеРазрешено(Автор)"; КонецПроцедуры // Конец СтандартныеПодсистемы.УправлениеДоступом #КонецОбласти #КонецОбласти #КонецЕсли #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область СлужебныеПроцедурыИФункции //////////////////////////////////////////////////////////////////////////////// // Обработчики обновления // Регистрирует на плане обмена ОбновлениеИнформационнойБазы объекты, // которые необходимо обновить на новую версию. // Процедура ЗарегистрироватьДанныеКОбработкеДляПереходаНаНовуюВерсию(Параметры) Экспорт Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ТаблицаСНаборамиЗначенийДоступа.Ссылка |ИЗ | %1 КАК ТаблицаСНаборамиЗначенийДоступа |УПОРЯДОЧИТЬ ПО | ТаблицаСНаборамиЗначенийДоступа.Дата УБЫВ"; Запрос.Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Запрос.Текст, Метаданные.БизнесПроцессы.Задание.ПолноеИмя()); МассивСсылок = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"); ОбновлениеИнформационнойБазы.ОтметитьКОбработке(Параметры, МассивСсылок); КонецПроцедуры Процедура ОбработатьДанныеДляПереходаНаНовуюВерсию(Параметры) Экспорт БизнесПроцесс = Метаданные.БизнесПроцессы.Задание; ИмяПроцедуры = "БизнесПроцессы.Задание.ОбработатьДанныеДляПереходаНаНовуюВерсию"; ПроблемныхОбъектов = 0; ОбъектовОбработано = 0; Задание = ОбновлениеИнформационнойБазы.ВыбратьСсылкиДляОбработки(Параметры.Очередь, "БизнесПроцесс.Задание"); Пока Задание.Следующий() Цикл Попытка ОбновитьНаборыЗначенийДоступаЗадания(Параметры, Задание.Ссылка); ОбъектовОбработано = ОбъектовОбработано + 1; Исключение // Если не удалось обработать задание, повторяем попытку снова. ПроблемныхОбъектов = ПроблемныхОбъектов + 1; ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Не удалось обновить права доступа для ""%1"" в обработчике ""%2"" по причине: |%3'"), Задание.Ссылка, ИмяПроцедуры, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); ЗаписьЖурналаРегистрации(ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Предупреждение, БизнесПроцесс, Задание.Ссылка, ТекстСообщения); КонецПопытки; КонецЦикла; Параметры.ОбработкаЗавершена = ОбновлениеИнформационнойБазы.ОбработкаДанныхЗавершена(Параметры.Очередь, "БизнесПроцесс.Задание"); Если ОбъектовОбработано = 0 И ПроблемныхОбъектов <> 0 Тогда ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Процедуре ""%1"" не удалось обновить права доступа для некоторых объектов (пропущены): %2'"), ИмяПроцедуры, ПроблемныхОбъектов); ВызватьИсключение ТекстСообщения; КонецЕсли; ЗаписьЖурналаРегистрации(ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Информация, БизнесПроцесс,, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Процедура ""%1"" обновила права доступа для очередной порции объектов: %2'"), ИмяПроцедуры, ОбъектовОбработано)); КонецПроцедуры Процедура ОбновитьНаборыЗначенийДоступаЗадания(Параметры, ЗаданиеСсылка) МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом"); НачатьТранзакцию(); Попытка // Блокируем объект от изменения другими сеансами. Блокировка = Новый БлокировкаДанных; ЭлементБлокировки = Блокировка.Добавить("БизнесПроцесс.Задание"); ЭлементБлокировки.УстановитьЗначение("Ссылка", ЗаданиеСсылка); Блокировка.Заблокировать(); ЗаданиеОбъект = ЗаданиеСсылка.ПолучитьОбъект(); Если ЗаданиеОбъект = Неопределено Или ЗаданиеОбъект.ГруппаИсполнителейЗадач <> Справочники.ГруппыИсполнителейЗадач.ПустаяСсылка() Тогда ОтменитьТранзакцию(); ОбновлениеИнформационнойБазы.ОтметитьВыполнениеОбработки(ЗаданиеСсылка); Возврат; КонецЕсли; ЗаданиеОбъект.ГруппаИсполнителейЗадач = ?(ТипЗнч(ЗаданиеОбъект.Исполнитель) = Тип("СправочникСсылка.РолиИсполнителей"), БизнесПроцессыИЗадачиСервер.ГруппаИсполнителейЗадач(ЗаданиеОбъект.Исполнитель, ЗаданиеОбъект.ОсновнойОбъектАдресации, ЗаданиеОбъект.ДополнительныйОбъектАдресации), ЗаданиеОбъект.Исполнитель); ЗаданиеОбъект.ГруппаИсполнителейЗадачПроверяющий = ?(ТипЗнч(ЗаданиеОбъект.Проверяющий) = Тип("СправочникСсылка.РолиИсполнителей"), БизнесПроцессыИЗадачиСервер.ГруппаИсполнителейЗадач(ЗаданиеОбъект.Проверяющий, ЗаданиеОбъект.ОсновнойОбъектАдресацииПроверяющий, ЗаданиеОбъект.ДополнительныйОбъектАдресацииПроверяющий), ЗаданиеОбъект.Проверяющий); МодульУправлениеДоступом.ОбновитьНаборыЗначенийДоступа(ЗаданиеОбъект); Если ЗаданиеОбъект.Модифицированность() Тогда ОбновлениеИнформационнойБазы.ЗаписатьДанные(ЗаданиеОбъект); Иначе ОбновлениеИнформационнойБазы.ОтметитьВыполнениеОбработки(ЗаданиеСсылка); КонецЕсли; ЗафиксироватьТранзакцию(); Исключение ОтменитьТранзакцию(); ВызватьИсключение; КонецПопытки; КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// // Прочие // Устанавливает состояние элементов формы задачи. Процедура УстановитьСостояниеЭлементовФормыЗадачи(Форма) Экспорт Если Форма.Элементы.Найти("РезультатВыполнения") <> Неопределено И Форма.Элементы.Найти("ИсторияВыполнения") <> Неопределено Тогда Форма.Элементы.ИсторияВыполнения.Картинка = ОбщегоНазначенияКлиентСервер.КартинкаКомментария(Форма.ЗаданиеРезультатВыполнения); КонецЕсли; Форма.Элементы.Предмет.Гиперссылка = Форма.Объект.Предмет <> Неопределено И НЕ Форма.Объект.Предмет.Пустая(); Форма.ПредметСтрокой = ОбщегоНазначения.ПредметСтрокой(Форма.Объект.Предмет); КонецПроцедуры Функция РезультатВыполненияПриПеренаправлении(Знач ЗадачаСсылка) СтрокаФормат = "%1, %2 " + НСтр("ru = 'перенаправил(а) задачу'") + ": |%3 |"; Комментарий = СокрЛП(ЗадачаСсылка.РезультатВыполнения); Комментарий = ?(ПустаяСтрока(Комментарий), "", Комментарий + Символы.ПС); Результат = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаФормат, ЗадачаСсылка.ДатаИсполнения, ЗадачаСсылка.Исполнитель, Комментарий); Возврат Результат; КонецФункции #КонецОбласти #КонецЕсли

BusinessProcesses/Задание/ObjectModule

#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ПрограммныйИнтерфейс #Область ДляВызоваИзДругихПодсистем // СтандартныеПодсистемы.УправлениеДоступом // См. УправлениеДоступом.ЗаполнитьНаборыЗначенийДоступа. Процедура ЗаполнитьНаборыЗначенийДоступа(Таблица) Экспорт БизнесПроцессыИЗадачиПереопределяемый.ПриЗаполненииНаборовЗначенийДоступа(ЭтотОбъект, Таблица); Если Таблица.Количество() > 0 Тогда Возврат; КонецЕсли; ЗаполнитьНаборыЗначенийДоступаПоУмолчанию(Таблица); КонецПроцедуры // Конец СтандартныеПодсистемы.УправлениеДоступом #КонецОбласти #КонецОбласти #Область ОбработчикиСобытий //////////////////////////////////////////////////////////////////////////////// // Обработчики событий бизнес-процесса. Процедура ПередЗаписью(Отказ) Если ОбменДанными.Загрузка Тогда Возврат; КонецЕсли; Если Автор <> Неопределено И Не Автор.Пустая() Тогда АвторСтрокой = Строка(Автор); КонецЕсли; БизнесПроцессыИЗадачиСервер.ПроверитьПраваНаИзменениеСостоянияБизнесПроцесса(ЭтотОбъект); Если ЗначениеЗаполнено(ГлавнаяЗадача) И ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ГлавнаяЗадача, "БизнесПроцесс") = Ссылка Тогда ВызватьИсключение НСтр("ru = 'Собственная задача бизнес-процесса не может быть указана как главная задача.'"); КонецЕсли; УстановитьПривилегированныйРежим(Истина); ГруппаИсполнителейЗадач = ?(ТипЗнч(Исполнитель) = Тип("СправочникСсылка.РолиИсполнителей"), БизнесПроцессыИЗадачиСервер.ГруппаИсполнителейЗадач(Исполнитель, ОсновнойОбъектАдресации, ДополнительныйОбъектАдресации), Исполнитель); ГруппаИсполнителейЗадачПроверяющий = ?(ТипЗнч(Проверяющий) = Тип("СправочникСсылка.РолиИсполнителей"), БизнесПроцессыИЗадачиСервер.ГруппаИсполнителейЗадач(Проверяющий, ОсновнойОбъектАдресацииПроверяющий, ДополнительныйОбъектАдресацииПроверяющий), Проверяющий); УстановитьПривилегированныйРежим(Ложь); Если НЕ ЭтоНовый() И ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Ссылка, "Предмет") <> Предмет Тогда ИзменитьПредметЗадач(); КонецЕсли; КонецПроцедуры Процедура ОбработкаЗаполнения(ДанныеЗаполнения, ТекстЗаполнения, СтандартнаяОбработка) Если ЭтоНовый() Тогда Автор = Пользователи.АвторизованныйПользователь(); Важность = Перечисления.ВариантыВажностиЗадачи.Обычная; НаПроверке = Истина; Проверяющий = Пользователи.АвторизованныйПользователь(); Состояние = Перечисления.СостоянияБизнесПроцессов.Активен; Если ТипЗнч(ДанныеЗаполнения) = Тип("СправочникСсылка.Пользователи") Тогда Исполнитель = ДанныеЗаполнения; Иначе // Для возможности автоподбора в незаполненном поле Исполнитель. Исполнитель = Справочники.Пользователи.ПустаяСсылка(); КонецЕсли; КонецЕсли; Если ДанныеЗаполнения <> Неопределено И ТипЗнч(ДанныеЗаполнения) <> Тип("Структура") И ДанныеЗаполнения <> Задачи.ЗадачаИсполнителя.ПустаяСсылка() Тогда Если ТипЗнч(ДанныеЗаполнения) <> Тип("ЗадачаСсылка.ЗадачаИсполнителя") Тогда Предмет = ДанныеЗаполнения; Иначе Предмет = ДанныеЗаполнения.Предмет; КонецЕсли; КонецЕсли; БизнесПроцессыИЗадачиСервер.ЗаполнитьГлавнуюЗадачу(ЭтотОбъект, ДанныеЗаполнения); КонецПроцедуры Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты) МассивНепроверяемыхРеквизитов = Новый Массив(); Если Не НаПроверке Тогда МассивНепроверяемыхРеквизитов.Добавить("Проверяющий"); КонецЕсли; ОбщегоНазначения.УдалитьНепроверяемыеРеквизитыИзМассива(ПроверяемыеРеквизиты, МассивНепроверяемыхРеквизитов); КонецПроцедуры Процедура ПриКопировании(ОбъектКопирования) НомерИтерации = 0; Выполнено = Ложь; Подтверждено = Ложь; РезультатВыполнения = ""; ДатаЗавершения = '00010101000000'; Состояние = Перечисления.СостоянияБизнесПроцессов.Активен; КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// // Обработчики событий элементов карты маршрута. Процедура ВыполнитьПриСозданииЗадач(ТочкаМаршрутаБизнесПроцесса, ФормируемыеЗадачи, Отказ) НомерИтерации = НомерИтерации + 1; Записать(); // Устанавливаем реквизиты адресации и доп. реквизиты для каждой задачи. Для каждого Задача Из ФормируемыеЗадачи Цикл Задача.Автор = Автор; Задача.АвторСтрокой = Строка(Автор); Если ТипЗнч(Исполнитель) = Тип("СправочникСсылка.РолиИсполнителей") Тогда Задача.РольИсполнителя = Исполнитель; Задача.ОсновнойОбъектАдресации = ОсновнойОбъектАдресации; Задача.ДополнительныйОбъектАдресации = ДополнительныйОбъектАдресации; Задача.Исполнитель = Неопределено; Иначе Задача.Исполнитель = Исполнитель; КонецЕсли; Задача.Наименование = НаименованиеЗадачиДляВыполнения(); Задача.СрокИсполнения = СрокИсполненияЗадачиДляВыполнения(); Задача.Важность = Важность; Задача.Предмет = Предмет; КонецЦикла; КонецПроцедуры Процедура ВыполнитьПередСозданиемЗадач(ТочкаМаршрутаБизнесПроцесса, ФормируемыеЗадачи, СтандартнаяОбработка) Если Предмет = Неопределено Или Предмет.Пустая() Тогда Возврат; КонецЕсли; КонецПроцедуры Процедура ВыполнитьПриВыполнении(ТочкаМаршрутаБизнесПроцесса, Задача, Отказ) РезультатВыполнения = РезультатВыполненияТочкиВыполнить(Задача) + РезультатВыполнения; Записать(); КонецПроцедуры Процедура ПроверитьПриСозданииЗадач(ТочкаМаршрутаБизнесПроцесса, ФормируемыеЗадачи, Отказ) Если Проверяющий.Пустая() Тогда Отказ = Истина; Возврат; КонецЕсли; // Устанавливаем реквизиты адресации и доп. реквизиты для каждой задачи. Для каждого Задача Из ФормируемыеЗадачи Цикл Задача.Автор = Автор; Если ТипЗнч(Проверяющий) = Тип("СправочникСсылка.РолиИсполнителей") Тогда Задача.РольИсполнителя = Проверяющий; Задача.ОсновнойОбъектАдресации = ОсновнойОбъектАдресацииПроверяющий; Задача.ДополнительныйОбъектАдресации = ДополнительныйОбъектАдресацииПроверяющий; Иначе Задача.Исполнитель = Проверяющий; КонецЕсли; Задача.Наименование = НаименованиеЗадачиДляПроверки(); Задача.СрокИсполнения = СрокИсполненияЗадачиДляПроверки(); Задача.Важность = Важность; Задача.Предмет = Предмет; КонецЦикла; КонецПроцедуры Процедура ПроверитьПриВыполнении(ТочкаМаршрутаБизнесПроцесса, Задача, Отказ) РезультатВыполнения = РезультатВыполненияТочкиПроверить(Задача) + РезультатВыполнения; Записать(); КонецПроцедуры Процедура НужнаПроверкаПроверкаУсловия(ТочкаМаршрутаБизнесПроцесса, Результат) Результат = НаПроверке; КонецПроцедуры Процедура ВернутьИсполнителюПроверкаУсловия(ТочкаМаршрутаБизнесПроцесса, Результат) Результат = НЕ Подтверждено; КонецПроцедуры Процедура ЗавершениеПриЗавершении(ТочкаМаршрутаБизнесПроцесса, Отказ) ДатаЗавершения = БизнесПроцессыИЗадачиСервер.ДатаЗавершенияБизнесПроцесса(Ссылка); Записать(); КонецПроцедуры #КонецОбласти #Область СлужебныеПроцедурыИФункции // Актуализирует значения реквизит невыполненных задач // согласно реквизитам бизнес-процесса Задание: // Важность, СрокИсполнения, Наименование и Автор. // Процедура ИзменитьРеквизитыНевыполненныхЗадач() Экспорт НачатьТранзакцию(); Попытка Блокировка = Новый БлокировкаДанных; ЭлементБлокировки = Блокировка.Добавить("Задача.ЗадачаИсполнителя"); ЭлементБлокировки.УстановитьЗначение("БизнесПроцесс", Ссылка); Блокировка.Заблокировать(); Запрос = Новый Запрос( "ВЫБРАТЬ | Задачи.Ссылка КАК Ссылка |ИЗ | Задача.ЗадачаИсполнителя КАК Задачи |ГДЕ | Задачи.БизнесПроцесс = &БизнесПроцесс | И Задачи.ПометкаУдаления = ЛОЖЬ | И Задачи.Выполнена = ЛОЖЬ"); Запрос.УстановитьПараметр("БизнесПроцесс", Ссылка); ВыборкаДетальныеЗаписи = Запрос.Выполнить().Выбрать(); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл ЗадачаОбъект = ВыборкаДетальныеЗаписи.Ссылка.ПолучитьОбъект(); ЗадачаОбъект.Важность = Важность; ЗадачаОбъект.СрокИсполнения = ?(ЗадачаОбъект.ТочкаМаршрута = БизнесПроцессы.Задание.ТочкиМаршрута.Выполнить, СрокИсполненияЗадачиДляВыполнения(), СрокИсполненияЗадачиДляПроверки()); ЗадачаОбъект.Наименование = ?(ЗадачаОбъект.ТочкаМаршрута = БизнесПроцессы.Задание.ТочкиМаршрута.Выполнить, НаименованиеЗадачиДляВыполнения(), НаименованиеЗадачиДляПроверки()); ЗадачаОбъект.Автор = Автор; // Не выполняем предварительную блокировку данных для редактирования, т.к. // Это изменение имеет более высокий приоритет над открытыми формами задач. ЗадачаОбъект.Записать(); КонецЦикла; ЗафиксироватьТранзакцию(); Исключение ОтменитьТранзакцию(); ВызватьИсключение; КонецПопытки; КонецПроцедуры Процедура ИзменитьПредметЗадач() УстановитьПривилегированныйРежим(Истина); НачатьТранзакцию(); Попытка Блокировка = Новый БлокировкаДанных; ЭлементБлокировки = Блокировка.Добавить("Задача.ЗадачаИсполнителя"); ЭлементБлокировки.УстановитьЗначение("БизнесПроцесс", Ссылка); Блокировка.Заблокировать(); Запрос = Новый Запрос( "ВЫБРАТЬ | Задачи.Ссылка КАК Ссылка |ИЗ | Задача.ЗадачаИсполнителя КАК Задачи |ГДЕ | Задачи.БизнесПроцесс = &БизнесПроцесс"); Запрос.УстановитьПараметр("БизнесПроцесс", Ссылка); ВыборкаДетальныеЗаписи = Запрос.Выполнить().Выбрать(); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл ЗадачаОбъект = ВыборкаДетальныеЗаписи.Ссылка.ПолучитьОбъект(); ЗадачаОбъект.Предмет = Предмет; // Не выполняем предварительную блокировку данных для редактирования, т.к. // Это изменение имеет более высокий приоритет над открытыми формами задач. ЗадачаОбъект.Записать(); КонецЦикла; ЗафиксироватьТранзакцию(); Исключение ОтменитьТранзакцию(); ВызватьИсключение; КонецПопытки; КонецПроцедуры Функция НаименованиеЗадачиДляВыполнения() Возврат Наименование; КонецФункции Функция СрокИсполненияЗадачиДляВыполнения() Возврат СрокИсполнения; КонецФункции Функция НаименованиеЗадачиДляПроверки() Возврат БизнесПроцессы.Задание.ТочкиМаршрута.Проверить.НаименованиеЗадачи + ": " + Наименование; КонецФункции Функция СрокИсполненияЗадачиДляПроверки() Возврат СрокПроверки; КонецФункции Функция РезультатВыполненияТочкиВыполнить(Знач ЗадачаСсылка) СтрокаФормат = ?(Выполнено, "%1, %2 " + НСтр("ru = 'выполнил(а) задачу'") + ": |%3 |", "%1, %2 " + НСтр("ru = 'отклонил(а) задачу'") + ": |%3 |"); ЗадачаДанные = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ЗадачаСсылка, "РезультатВыполнения,ДатаИсполнения,Исполнитель"); Комментарий = СокрЛП(ЗадачаДанные.РезультатВыполнения); Комментарий = ?(ПустаяСтрока(Комментарий), "", Комментарий + Символы.ПС); Результат = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаФормат, ЗадачаДанные.ДатаИсполнения, ЗадачаДанные.Исполнитель, Комментарий); Возврат Результат; КонецФункции Функция РезультатВыполненияТочкиПроверить(Знач ЗадачаСсылка) Если НЕ Подтверждено Тогда СтрокаФормат = "%1, %2 " + НСтр("ru = 'вернул(а) задачу на доработку'") + ": |%3 |"; Иначе СтрокаФормат = ?(Выполнено, "%1, %2 " + НСтр("ru = 'подтвердил(а) выполнение задачи'") + ": |%3 |", "%1, %2 " + НСтр("ru = 'подтвердил(а) отмену задачи'") + ": |%3 |"); КонецЕсли; ЗадачаДанные = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ЗадачаСсылка, "РезультатВыполнения,ДатаИсполнения,Исполнитель"); Комментарий = СокрЛП(ЗадачаДанные.РезультатВыполнения); Комментарий = ?(ПустаяСтрока(Комментарий), "", Комментарий + Символы.ПС); Результат = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаФормат, ЗадачаДанные.ДатаИсполнения, ЗадачаДанные.Исполнитель, Комментарий); Возврат Результат; КонецФункции Процедура ЗаполнитьНаборыЗначенийДоступаПоУмолчанию(Таблица) // Логика ограничения по умолчанию для // - чтения: Автор ИЛИ Исполнитель (с учетом адресации) ИЛИ Проверяющий (с учетом адресации) // - изменения: Автор. // Если предмет не задан (т.е. бизнес-процесс без основания), тогда предмет не участвует в логике ограничения. // Чтение, Изменение: набор № 1. Строка = Таблица.Добавить(); Строка.НомерНабора = 1; Строка.Чтение = Истина; Строка.Изменение = Истина; Строка.ЗначениеДоступа = Автор; // Чтение: набор № 2. Строка = Таблица.Добавить(); Строка.НомерНабора = 2; Строка.Чтение = Истина; Строка.ЗначениеДоступа = ГруппаИсполнителейЗадач; // Чтение: набор № 3. Строка = Таблица.Добавить(); Строка.НомерНабора = 3; Строка.Чтение = Истина; Строка.ЗначениеДоступа = ГруппаИсполнителейЗадачПроверяющий; КонецПроцедуры #КонецОбласти #КонецЕсли

BusinessProcesses/Задание/Forms/ДействиеВыполнить/Form/Module

 #Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. Возврат; КонецЕсли; // Для нового объекта выполняем код инициализации формы в ПриСозданииНаСервере. // Для существующего - в ПриЧтенииНаСервере. Если Объект.Ссылка.Пустая() Тогда ИнициализацияФормы(); КонецЕсли; ТекущийПользователь = Пользователи.ТекущийПользователь(); КонецПроцедуры &НаКлиенте Процедура ПриОткрытии(Отказ) БизнесПроцессыИЗадачиКлиент.ОбновитьДоступностьКомандПринятияКИсполнению(ЭтотОбъект); КонецПроцедуры &НаСервере Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) ВыполнитьЗадачу = Ложь; Если НЕ (ПараметрыЗаписи.Свойство("ВыполнитьЗадачу", ВыполнитьЗадачу) И ВыполнитьЗадачу) Тогда Возврат; КонецЕсли; Если НЕ ЗаданиеВыполнено И НЕ ЗначениеЗаполнено(ТекущийОбъект.РезультатВыполнения) Тогда ОбщегоНазначенияКлиентСервер.СообщитьПользователю( НСтр("ru = 'Укажите причину, по которой задача отклоняется.'"),, "Объект.РезультатВыполнения",, Отказ); Возврат; КонецЕсли; // Запись объекта бизнес-процесса. ЗаписатьРеквизитыБизнесПроцесса(ТекущийОбъект); КонецПроцедуры &НаКлиенте Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) БизнесПроцессыИЗадачиКлиент.ФормаЗадачиОбработкаОповещения(ЭтотОбъект, ИмяСобытия, Параметр, Источник); Если ИмяСобытия = "Запись_Задание" Тогда Если (Источник = Объект.БизнесПроцесс ИЛИ (ТипЗнч(Источник) = Тип("Массив") И Источник.Найти(Объект.БизнесПроцесс) <> Неопределено)) Тогда Прочитать(); КонецЕсли; КонецЕсли; КонецПроцедуры &НаСервере Процедура ПриЧтенииНаСервере(ТекущийОбъект) ИнициализацияФормы(); // СтандартныеПодсистемы.УправлениеДоступом Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом"); МодульУправлениеДоступом.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект); КонецЕсли; // Конец СтандартныеПодсистемы.УправлениеДоступом КонецПроцедуры #КонецОбласти #Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура СрокНачалаИсполненияПриИзменении(Элемент) Если Объект.ДатаНачала = НачалоДня(Объект.ДатаНачала) Тогда Объект.ДатаНачала = КонецДня(Объект.ДатаНачала); КонецЕсли; КонецПроцедуры &НаКлиенте Процедура ДатаИсполненияПриИзменении(Элемент) Если Объект.ДатаИсполнения = НачалоДня(Объект.ДатаИсполнения) Тогда Объект.ДатаИсполнения = КонецДня(Объект.ДатаИсполнения); КонецЕсли; КонецПроцедуры &НаКлиенте Процедура ЗаписатьИЗакрытьВыполнить() БизнесПроцессыИЗадачиКлиент.ЗаписатьИЗакрытьВыполнить(ЭтотОбъект); КонецПроцедуры &НаКлиенте Процедура ПредметНажатие(Элемент, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; ПоказатьЗначение(,Объект.Предмет); КонецПроцедуры #КонецОбласти #Область ОбработчикиКомандФормы &НаКлиенте Процедура ВыполненоВыполнить(Команда) ЗаданиеВыполнено = Истина; БизнесПроцессыИЗадачиКлиент.ЗаписатьИЗакрытьВыполнить(ЭтотОбъект, Истина); КонецПроцедуры &НаКлиенте Процедура Отменено(Команда) ЗаданиеВыполнено = Ложь; БизнесПроцессыИЗадачиКлиент.ЗаписатьИЗакрытьВыполнить(ЭтотОбъект, Истина); КонецПроцедуры &НаКлиенте Процедура Дополнительно(Команда) БизнесПроцессыИЗадачиКлиент.ОткрытьДопИнформациюОЗадаче(Объект.Ссылка); КонецПроцедуры &НаКлиенте Процедура ПринятьКИсполнению(Команда) БизнесПроцессыИЗадачиКлиент.ПринятьЗадачуКИсполнению(ЭтотОбъект, ТекущийПользователь); КонецПроцедуры &НаКлиенте Процедура ОтменитьПринятиеКИсполнению(Команда) БизнесПроцессыИЗадачиКлиент.ОтменитьПринятиеЗадачиКИсполнению(ЭтотОбъект); КонецПроцедуры &НаКлиенте Процедура ИзменитьЗадание(Команда) Записать(); ПоказатьЗначение(,Объект.БизнесПроцесс); КонецПроцедуры #КонецОбласти #Область СлужебныеПроцедурыИФункции &НаСервере Процедура ИнициализацияФормы() НачальныйПризнакВыполнения = Объект.Выполнена; ПрочитатьРеквизитыБизнесПроцесса(); УстановитьСостояниеЭлементов(); ИспользоватьДатуИВремяВСрокахЗадач = ПолучитьФункциональнуюОпцию("ИспользоватьДатуИВремяВСрокахЗадач"); Элементы.СрокНачалаИсполненияВремя.Видимость = ИспользоватьДатуИВремяВСрокахЗадач; Элементы.ДатаИсполненияВремя.Видимость = ИспользоватьДатуИВремяВСрокахЗадач; БизнесПроцессыИЗадачиСервер.УстановитьФорматДаты(Элементы.СрокИсполнения); БизнесПроцессыИЗадачиСервер.УстановитьФорматДаты(Элементы.Дата); БизнесПроцессыИЗадачиСервер.ФормаЗадачиПриСозданииНаСервере(ЭтотОбъект, Объект, Элементы.ГруппаСостояние, Элементы.ДатаИсполнения); Элементы.ОписаниеРезультата.ТолькоПросмотр = Объект.Выполнена; Элементы.ИзменитьЗадание.Видимость = (Объект.Автор = Пользователи.ТекущийПользователь()); Исполнитель = ?(ЗначениеЗаполнено(Объект.Исполнитель), Объект.Исполнитель, Объект.РольИсполнителя); Если ПравоДоступа("Изменение", Метаданные.БизнесПроцессы.Задание) Тогда Элементы.Выполнено.Доступность = Истина; Элементы.Отклонено.Доступность = Истина; Иначе Элементы.Выполнено.Доступность = Ложь; Элементы.Отклонено.Доступность = Ложь; КонецЕсли; КонецПроцедуры &НаСервере Процедура ПрочитатьРеквизитыБизнесПроцесса() ЗадачаОбъект = РеквизитФормыВЗначение("Объект"); УстановитьПривилегированныйРежим(Истина); ЗаданиеОбъект = ЗадачаОбъект.БизнесПроцесс.ПолучитьОбъект(); ЗаданиеВыполнено = ЗаданиеОбъект.Выполнено; ЗаданиеРезультатВыполнения = ЗаданиеОбъект.РезультатВыполнения; ЗаданиеСодержание = ЗаданиеОбъект.Содержание; КонецПроцедуры &НаСервере Процедура ЗаписатьРеквизитыБизнесПроцесса(ЗадачаОбъект) УстановитьПривилегированныйРежим(Истина); ЗаданиеОбъект = ЗадачаОбъект.БизнесПроцесс.ПолучитьОбъект(); ЗаблокироватьДанныеДляРедактирования(ЗаданиеОбъект.Ссылка); ЗаданиеОбъект.Выполнено = ЗаданиеВыполнено; ЗаданиеОбъект.Записать(); КонецПроцедуры &НаСервере Процедура УстановитьСостояниеЭлементов() БизнесПроцессы.Задание.УстановитьСостояниеЭлементовФормыЗадачи(ЭтотОбъект); КонецПроцедуры #КонецОбласти

BusinessProcesses/Задание/Forms/ДействиеПроверить/Form/Module

 #Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. Возврат; КонецЕсли; // Для нового объекта выполняем код инициализации формы в ПриСозданииНаСервере. // Для существующего - в ПриЧтенииНаСервере. Если Объект.Ссылка.Пустая() Тогда ИнициализацияФормы(); КонецЕсли; ТекущийПользователь = Пользователи.ТекущийПользователь(); КонецПроцедуры &НаКлиенте Процедура ПриОткрытии(Отказ) БизнесПроцессыИЗадачиКлиент.ОбновитьДоступностьКомандПринятияКИсполнению(ЭтотОбъект); КонецПроцедуры &НаСервере Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) ВыполнитьЗадачу = Ложь; Если НЕ (ПараметрыЗаписи.Свойство("ВыполнитьЗадачу", ВыполнитьЗадачу) И ВыполнитьЗадачу) Тогда Возврат; КонецЕсли; Если НЕ ЗаданиеВыполнено И НЕ ЗаданиеПодтверждено И НЕ ЗначениеЗаполнено(ТекущийОбъект.РезультатВыполнения) Тогда ОбщегоНазначенияКлиентСервер.СообщитьПользователю( НСтр("ru = 'Укажите причину, по которой задача возвращается на доработку.'"),, "Объект.РезультатВыполнения",, Отказ); Возврат; ИначеЕсли НЕ ЗаданиеВыполнено И ЗаданиеПодтверждено И НЕ ЗначениеЗаполнено(ТекущийОбъект.РезультатВыполнения) Тогда ОбщегоНазначенияКлиентСервер.СообщитьПользователю( НСтр("ru = 'Укажите причину, по которой задача отменяется.'"),, "Объект.РезультатВыполнения",, Отказ); Возврат; КонецЕсли; ЗаписатьРеквизитыБизнесПроцесса(ТекущийОбъект); КонецПроцедуры &НаСервере Процедура ПриЧтенииНаСервере(ТекущийОбъект) ИнициализацияФормы(); // СтандартныеПодсистемы.УправлениеДоступом Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом"); МодульУправлениеДоступом.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект); КонецЕсли; // Конец СтандартныеПодсистемы.УправлениеДоступом КонецПроцедуры &НаКлиенте Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) БизнесПроцессыИЗадачиКлиент.ФормаЗадачиОбработкаОповещения(ЭтотОбъект, ИмяСобытия, Параметр, Источник); Если ИмяСобытия = "Запись_Задание" Тогда Если (Источник = ЗаданиеСсылка ИЛИ (ТипЗнч(Источник) = Тип("Массив") И Источник.Найти(ЗаданиеСсылка) <> Неопределено)) Тогда Прочитать(); КонецЕсли; КонецЕсли; КонецПроцедуры #КонецОбласти #Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура СрокНачалаИсполненияПриИзменении(Элемент) Если Объект.ДатаНачала = НачалоДня(Объект.ДатаНачала) Тогда Объект.ДатаНачала = КонецДня(Объект.ДатаНачала); КонецЕсли; КонецПроцедуры &НаКлиенте Процедура ПредметНажатие(Элемент, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; ПоказатьЗначение(,Объект.Предмет); КонецПроцедуры #КонецОбласти #Область ОбработчикиКомандФормы &НаКлиенте Процедура ЗаписатьИЗакрытьВыполнить(Команда) БизнесПроцессыИЗадачиКлиент.ЗаписатьИЗакрытьВыполнить(ЭтотОбъект); КонецПроцедуры &НаКлиенте Процедура Выполнено(Команда) ЗаданиеПодтверждено = Истина; ЗаданиеВыполнено = Истина; БизнесПроцессыИЗадачиКлиент.ЗаписатьИЗакрытьВыполнить(ЭтотОбъект, Истина); КонецПроцедуры &НаКлиенте Процедура Возвращено(Команда) ЗаданиеПодтверждено = Ложь; ЗаданиеВыполнено = Ложь; БизнесПроцессыИЗадачиКлиент.ЗаписатьИЗакрытьВыполнить(ЭтотОбъект, Истина); КонецПроцедуры &НаКлиенте Процедура Отменено(Команда) ЗаданиеПодтверждено = Истина; ЗаданиеВыполнено = Ложь; БизнесПроцессыИЗадачиКлиент.ЗаписатьИЗакрытьВыполнить(ЭтотОбъект, Истина); КонецПроцедуры &НаКлиенте Процедура ИзменитьЗаданиеВыполнить(Команда) Записать(); ПоказатьЗначение(,ЗаданиеСсылка); КонецПроцедуры &НаКлиенте Процедура Дополнительно(Команда) БизнесПроцессыИЗадачиКлиент.ОткрытьДопИнформациюОЗадаче(Объект.Ссылка); КонецПроцедуры &НаКлиенте Процедура ПринятьКИсполнению(Команда) БизнесПроцессыИЗадачиКлиент.ПринятьЗадачуКИсполнению(ЭтотОбъект, ТекущийПользователь); КонецПроцедуры &НаКлиенте Процедура ОтменитьПринятиеКИсполнению(Команда) БизнесПроцессыИЗадачиКлиент.ОтменитьПринятиеЗадачиКИсполнению(ЭтотОбъект); КонецПроцедуры #КонецОбласти #Область СлужебныеПроцедурыИФункции &НаСервере Процедура ИнициализацияФормы() НачальныйПризнакВыполнения = Объект.Выполнена; ПрочитатьРеквизитыБизнесПроцесса(); УстановитьСостояниеЭлементов(); ИспользоватьДатуИВремяВСрокахЗадач = ПолучитьФункциональнуюОпцию("ИспользоватьДатуИВремяВСрокахЗадач"); Элементы.СрокНачалаИсполненияВремя.Видимость = ИспользоватьДатуИВремяВСрокахЗадач; Элементы.ДатаИсполненияВремя.Видимость = ИспользоватьДатуИВремяВСрокахЗадач; БизнесПроцессыИЗадачиСервер.УстановитьФорматДаты(Элементы.СрокИсполнения); БизнесПроцессыИЗадачиСервер.УстановитьФорматДаты(Элементы.Дата); БизнесПроцессыИЗадачиСервер.ФормаЗадачиПриСозданииНаСервере(ЭтотОбъект, Объект, Элементы.ГруппаСостояние, Элементы.ДатаИсполнения); Элементы.ОписаниеРезультата.ТолькоПросмотр = Объект.Выполнена; Исполнитель = ?(ЗначениеЗаполнено(Объект.Исполнитель), Объект.Исполнитель, Объект.РольИсполнителя); Если ПравоДоступа("Изменение", Метаданные.БизнесПроцессы.Задание) Тогда Элементы.Выполнено.Доступность = Истина; Элементы.Отменено.Доступность = Истина; Элементы.Возвращено.Доступность = Истина; Иначе Элементы.Выполнено.Доступность = Ложь; Элементы.Отменено.Доступность = Ложь; Элементы.Возвращено.Доступность = Ложь; КонецЕсли; КонецПроцедуры &НаСервере Процедура ПрочитатьРеквизитыБизнесПроцесса() ЗадачаОбъект = РеквизитФормыВЗначение("Объект"); УстановитьПривилегированныйРежим(Истина); ЗаданиеОбъект = ЗадачаОбъект.БизнесПроцесс.ПолучитьОбъект(); ЗаданиеВыполнено = ЗаданиеОбъект.Выполнено; ЗаданиеСсылка = ЗаданиеОбъект.Ссылка; ЗаданиеПодтверждено = ЗаданиеОбъект.Подтверждено; ЗаданиеРезультатВыполнения = ЗаданиеОбъект.РезультатВыполнения; ЗаданиеСодержание = ЗаданиеОбъект.Содержание; КонецПроцедуры &НаСервере Процедура ЗаписатьРеквизитыБизнесПроцесса(ЗадачаОбъект) УстановитьПривилегированныйРежим(Истина); ЗаданиеОбъект = ЗадачаОбъект.БизнесПроцесс.ПолучитьОбъект(); ЗаблокироватьДанныеДляРедактирования(ЗаданиеОбъект.Ссылка); ЗаданиеОбъект.Выполнено = ЗаданиеВыполнено; ЗаданиеОбъект.Подтверждено = ЗаданиеПодтверждено; ЗаданиеОбъект.Записать(); КонецПроцедуры &НаСервере Процедура УстановитьСостояниеЭлементов() БизнесПроцессы.Задание.УстановитьСостояниеЭлементовФормыЗадачи(ЭтотОбъект); КонецПроцедуры #КонецОбласти

BusinessProcesses/Задание/Forms/ФормаБизнесПроцесса/Form/Module

#Область ОписаниеПеременных &НаКлиенте Перем ОткрытаФормаВыбораИсполнителя; // Признак того, что исполнитель выбирается из формы, а не быстрым вводом. &НаКлиенте Перем ОткрытаФормаВыбораПроверяющего; // Признак того, что проверяющий выбирается из формы, а не быстрым вводом. &НаКлиенте Перем КонтекстВыбора; #КонецОбласти #Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) УстановитьУсловноеОформление(); Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. Возврат; КонецЕсли; // Для нового объекта выполняем код инициализации формы в ПриСозданииНаСервере. // Для существующего - в ПриЧтенииНаСервере. Если Объект.Ссылка.Пустая() Тогда ИнициализацияФормы(); КонецЕсли; КонецПроцедуры &НаКлиенте Процедура ПриОткрытии(Отказ) ОбновитьДоступностьКомандОстановки(); КонецПроцедуры &НаСервере Процедура ПриЧтенииНаСервере(ТекущийОбъект) ИнициализацияФормы(); // СтандартныеПодсистемы.УправлениеДоступом Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом"); МодульУправлениеДоступом.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект); КонецЕсли; // Конец СтандартныеПодсистемы.УправлениеДоступом КонецПроцедуры &НаКлиенте Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора) Если ВРег(ИсточникВыбора.ИмяФормы) = ВРег("ОбщаяФорма.ВыборРолиИсполнителя") Тогда Если КонтекстВыбора = "ИсполнительПриИзменении" Тогда Если ТипЗнч(ВыбранноеЗначение) = Тип("Структура") Тогда Объект.Исполнитель = ВыбранноеЗначение.РольИсполнителя; КонецЕсли; УстановитьДоступностьПроверяющего(ЭтотОбъект); ИначеЕсли КонтекстВыбора = "ПроверяющийПриИзменении" Тогда Если ТипЗнч(ВыбранноеЗначение) = Тип("Структура") Тогда Объект.Проверяющий = ВыбранноеЗначение.РольИсполнителя; КонецЕсли; КонецЕсли; КонецЕсли; КонецПроцедуры &НаКлиенте Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) Если ИмяСобытия = "ИзмененаНастройкаОтложенногоСтарта" Тогда Отложен = (Параметр.Отложен И Параметр.Состояние = ПредопределенноеЗначение("Перечисление.СостоянияПроцессовДляЗапуска.ГотовКСтарту")); ДатаОтложенногоСтарта = Параметр.ДатаОтложенногоСтарта; УстановитьСвойстваЭлементовФормы(ЭтотОбъект); КонецЕсли; КонецПроцедуры &НаСервере Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) ПроверитьДатуЗавершенияОтложенногоПроцесса(ТекущийОбъект, Отказ); КонецПроцедуры &НаСервере Процедура ПриЗаписиНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) ИзменятьЗаданияЗаднимЧислом = ПолучитьФункциональнуюОпцию("ИзменятьЗаданияЗаднимЧислом"); Если НачальныйПризнакСтарта И ИзменятьЗаданияЗаднимЧислом Тогда УстановитьПривилегированныйРежим(Истина); ТекущийОбъект.ИзменитьРеквизитыНевыполненныхЗадач(); КонецЕсли; КонецПроцедуры &НаКлиенте Процедура ПослеЗаписи(ПараметрыЗаписи) Оповестить("Запись_Задание", ПараметрыЗаписи, Объект.Ссылка); Оповестить("Запись_ЗадачаИсполнителя", ПараметрыЗаписи, Неопределено); Если ПараметрыЗаписи.Свойство("Старт") И ПараметрыЗаписи.Старт Тогда ПодключитьОбработчикОжидания("ОбновитьФорму", 0.2, Истина); КонецЕсли; КонецПроцедуры &НаКлиенте Процедура ОбновитьФорму() УстановитьСвойстваЭлементовФормы(ЭтотОбъект); ОбновитьДоступностьКомандОстановки(); КонецПроцедуры #КонецОбласти #Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура НаПроверкеПриИзменении(Элемент) УстановитьДоступностьПроверяющего(ЭтотОбъект); КонецПроцедуры &НаКлиенте Процедура ПредметНажатие(Элемент, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; ПоказатьЗначение(,Объект.Предмет); КонецПроцедуры &НаКлиенте Процедура ГлавнаяЗадачаНажатие(Элемент, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; ПоказатьЗначение(,Объект.ГлавнаяЗадача); КонецПроцедуры &НаКлиенте Процедура ИнфоНадписьЗаголовокОбработкаНавигационнойСсылки(Элемент, НавигационнаяСсылкаФорматированнойСтроки, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; ОткрытьНастройкуОтложенногоСтарта(); КонецПроцедуры &НаКлиенте Процедура ИсполнительНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; БизнесПроцессыИЗадачиКлиент.ВыбратьИсполнителя(Элемент, Объект.Исполнитель); КонецПроцедуры &НаКлиенте Процедура ИсполнительПриИзменении(Элемент) Если ОткрытаФормаВыбораИсполнителя = Истина Тогда Возврат; КонецЕсли; ОсновнойОбъектАдресации = Неопределено; ДополнительныйОбъектАдресации = Неопределено; Если ТипЗнч(Объект.Исполнитель) = Тип("СправочникСсылка.РолиИсполнителей") И ЗначениеЗаполнено(Объект.Исполнитель) Тогда Если ИспользуетсяСОбъектамиАдресации(Объект.Исполнитель) Тогда КонтекстВыбора = "ИсполнительПриИзменении"; ПараметрыФормы = Новый Структура; ПараметрыФормы.Вставить("РольИсполнителя", Объект.Исполнитель); ПараметрыФормы.Вставить("ОсновнойОбъектАдресации", ОсновнойОбъектАдресации); ПараметрыФормы.Вставить("ДополнительныйОбъектАдресации", ДополнительныйОбъектАдресации); ОткрытьФорму("ОбщаяФорма.ВыборРолиИсполнителя", ПараметрыФормы, ЭтотОбъект); Возврат; КонецЕсли; КонецЕсли; УстановитьДоступностьПроверяющего(ЭтотОбъект); КонецПроцедуры &НаКлиенте Процедура ИсполнительОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) ОткрытаФормаВыбораИсполнителя = ТипЗнч(ВыбранноеЗначение) = Тип("Структура"); Если ОткрытаФормаВыбораИсполнителя Тогда СтандартнаяОбработка = Ложь; Объект.Исполнитель = ВыбранноеЗначение.РольИсполнителя; Объект.ОсновнойОбъектАдресации = ВыбранноеЗначение.ОсновнойОбъектАдресации; Объект.ДополнительныйОбъектАдресации = ВыбранноеЗначение.ДополнительныйОбъектАдресации; Модифицированность = Истина; КонецЕсли; КонецПроцедуры &НаКлиенте Процедура ИсполнительАвтоПодбор(Элемент, Текст, ДанныеВыбора, Ожидание, СтандартнаяОбработка) Если ЗначениеЗаполнено(Текст) Тогда СтандартнаяОбработка = Ложь; ДанныеВыбора = БизнесПроцессыИЗадачиВызовСервера.СформироватьДанныеВыбораИсполнителя(Текст); КонецЕсли; КонецПроцедуры &НаКлиенте Процедура ИсполнительОкончаниеВводаТекста(Элемент, Текст, ДанныеВыбора, СтандартнаяОбработка) Если ЗначениеЗаполнено(Текст) Тогда СтандартнаяОбработка = Ложь; ДанныеВыбора = БизнесПроцессыИЗадачиВызовСервера.СформироватьДанныеВыбораИсполнителя(Текст); КонецЕсли; КонецПроцедуры &НаКлиенте Процедура ПроверяющийНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; БизнесПроцессыИЗадачиКлиент.ВыбратьИсполнителя(Элемент, Объект.Проверяющий); КонецПроцедуры &НаКлиенте Процедура ПроверяющийПриИзменении(Элемент) Если ОткрытаФормаВыбораПроверяющего = Истина Тогда Возврат; КонецЕсли; ОсновнойОбъектАдресации = Неопределено; ДополнительныйОбъектАдресации = Неопределено; Если ТипЗнч(Объект.Проверяющий) = Тип("СправочникСсылка.РолиИсполнителей") И ЗначениеЗаполнено(Объект.Проверяющий) Тогда Если ИспользуетсяСОбъектамиАдресации(Объект.Проверяющий) Тогда КонтекстВыбора = "ПроверяющийПриИзменении"; ПараметрыФормы = Новый Структура; ПараметрыФормы.Вставить("РольИсполнителя", Объект.Проверяющий); ПараметрыФормы.Вставить("ОсновнойОбъектАдресации", ОсновнойОбъектАдресации); ПараметрыФормы.Вставить("ДополнительныйОбъектАдресации", ДополнительныйОбъектАдресации); ОткрытьФорму("ОбщаяФорма.ВыборРолиИсполнителя", ПараметрыФормы, ЭтотОбъект); КонецЕсли; КонецЕсли; КонецПроцедуры &НаКлиенте Процедура ПроверяющийОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) ОткрытаФормаВыбораПроверяющего = ТипЗнч(ВыбранноеЗначение) = Тип("Структура"); Если ОткрытаФормаВыбораПроверяющего Тогда СтандартнаяОбработка = Ложь; Объект.Проверяющий = ВыбранноеЗначение.РольИсполнителя; Объект.ОсновнойОбъектАдресацииПроверяющий = ВыбранноеЗначение.ОсновнойОбъектАдресации; Объект.ДополнительныйОбъектАдресацииПроверяющий = ВыбранноеЗначение.ДополнительныйОбъектАдресации; Модифицированность = Истина; КонецЕсли; КонецПроцедуры &НаКлиенте Процедура ПроверяющийАвтоПодбор(Элемент, Текст, ДанныеВыбора, Ожидание, СтандартнаяОбработка) Если ЗначениеЗаполнено(Текст) Тогда СтандартнаяОбработка = Ложь; ДанныеВыбора = БизнесПроцессыИЗадачиВызовСервера.СформироватьДанныеВыбораИсполнителя(Текст); КонецЕсли; КонецПроцедуры &НаКлиенте Процедура ПроверяющийОкончаниеВводаТекста(Элемент, Текст, ДанныеВыбора, СтандартнаяОбработка) Если ЗначениеЗаполнено(Текст) Тогда СтандартнаяОбработка = Ложь; ДанныеВыбора = БизнесПроцессыИЗадачиВызовСервера.СформироватьДанныеВыбораИсполнителя(Текст); КонецЕсли; КонецПроцедуры &НаКлиенте Процедура СрокИсполненияПриИзменении(Элемент) Если Объект.СрокИсполнения = НачалоДня(Объект.СрокИсполнения) Тогда Объект.СрокИсполнения = КонецДня(Объект.СрокИсполнения); КонецЕсли; КонецПроцедуры &НаКлиенте Процедура СрокПроверкиПриИзменении(Элемент) Если Объект.СрокПроверки = НачалоДня(Объект.СрокПроверки) Тогда Объект.СрокПроверки = КонецДня(Объект.СрокПроверки); КонецЕсли; КонецПроцедуры #КонецОбласти #Область ОбработчикиКомандФормы &НаКлиенте Процедура ЗаписатьИЗакрыть(Команда) ОчиститьСообщения(); Если Не ПроверитьЗаполнение() Тогда Возврат; КонецЕсли; Записать(); Закрыть(); КонецПроцедуры &НаКлиенте Процедура Остановить(Команда) БизнесПроцессыИЗадачиКлиент.ОстановитьБизнесПроцессИзФормыОбъекта(ЭтотОбъект); ОбновитьДоступностьКомандОстановки(); КонецПроцедуры &НаКлиенте Процедура ПродолжитьБизнесПроцесс(Команда) БизнесПроцессыИЗадачиКлиент.ПродолжитьБизнесПроцессИзФормыОбъекта(ЭтотОбъект); ОбновитьДоступностьКомандОстановки(); КонецПроцедуры &НаКлиенте Процедура НастроитьОтложенныйСтарт(Команда) ОткрытьНастройкуОтложенногоСтарта(); КонецПроцедуры #КонецОбласти #Область СлужебныеПроцедурыИФункции &НаСервере Процедура УстановитьУсловноеОформление() УсловноеОформление.Элементы.Очистить(); // Элемент = УсловноеОформление.Элементы.Добавить(); ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.Проверяющий.Имя); ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.НаПроверке"); ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; ОтборЭлемента.ПравоеЗначение = Истина; ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Проверяющий"); ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.НеЗаполнено; Элемент.Оформление.УстановитьЗначениеПараметра("ОтметкаНезаполненного", Истина); // Элемент = УсловноеОформление.Элементы.Добавить(); ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.Проверяющий.Имя); ГруппаОтбора1 = Элемент.Отбор.Элементы.Добавить(Тип("ГруппаЭлементовОтбораКомпоновкиДанных")); ГруппаОтбора1.ТипГруппы = ТипГруппыЭлементовОтбораКомпоновкиДанных.ГруппаИли; ОтборЭлемента = ГруппаОтбора1.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.НаПроверке"); ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; ОтборЭлемента.ПравоеЗначение = Ложь; ОтборЭлемента = ГруппаОтбора1.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Проверяющий"); ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Заполнено; Элемент.Оформление.УстановитьЗначениеПараметра("ОтметкаНезаполненного", Ложь); КонецПроцедуры &НаСервере Процедура ИнициализацияФормы() НачальныйПризнакСтарта = Объект.Стартован; УстановитьРеквизитыОтложенногоСтарта(); ИспользоватьДатуИВремяВСрокахЗадач = ПолучитьФункциональнуюОпцию("ИспользоватьДатуИВремяВСрокахЗадач"); ИзменятьЗаданияЗаднимЧислом = ПолучитьФункциональнуюОпцию("ИзменятьЗаданияЗаднимЧислом"); ИспользоватьПодчиненныеБизнесПроцессы = ПолучитьФункциональнуюОпцию("ИспользоватьПодчиненныеБизнесПроцессы"); ПредметСтрокой = ОбщегоНазначения.ПредметСтрокой(Объект.Предмет); Если Объект.ГлавнаяЗадача = Неопределено Или Объект.ГлавнаяЗадача.Пустая() Тогда ГлавнаяЗадачаСтрокой = НСтр("ru = 'не задана'"); Иначе ГлавнаяЗадачаСтрокой = Строка(Объект.ГлавнаяЗадача); КонецЕсли; УстановитьСвойстваЭлементовФормы(ЭтотОбъект); КонецПроцедуры &НаКлиенте Процедура ОбновитьДоступностьКомандОстановки() Если Объект.Завершен Тогда Элементы.ФормаОстановить.Видимость = Ложь; Элементы.ФормаПродолжить.Видимость = Ложь; Возврат; КонецЕсли; Если Объект.Состояние = ПредопределенноеЗначение("Перечисление.СостоянияБизнесПроцессов.Остановлен") Тогда Элементы.ФормаОстановить.Видимость = Ложь; Элементы.ФормаПродолжить.Видимость = Истина; Иначе Элементы.ФормаОстановить.Видимость = Объект.Стартован; Элементы.ФормаПродолжить.Видимость = Ложь; КонецЕсли; КонецПроцедуры &НаКлиентеНаСервереБезКонтекста Процедура УстановитьДоступностьПроверяющего(Форма) ДоступностьПоля = Форма.Объект.НаПроверке; Форма.Элементы.ГруппаПроверяющий.Доступность = ДоступностьПоля; КонецПроцедуры &НаСервереБезКонтекста Функция ИспользуетсяСОбъектамиАдресации(ПроверяемыйОбъект) Возврат ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ПроверяемыйОбъект, "ИспользуетсяСОбъектамиАдресации"); КонецФункции &НаКлиентеНаСервереБезКонтекста Процедура УстановитьСвойстваЭлементовФормы(Форма) Если Форма.ТолькоПросмотр Тогда Форма.Элементы.ФормаОстановить.Видимость = Ложь; Форма.Элементы.ФормаЗаписатьИЗакрыть.Видимость = Ложь; Форма.Элементы.ФормаНастроитьОтложенныйСтарт.Видимость = Ложь; Форма.Элементы.ФормаЗаписать.Видимость = Ложь; Форма.Элементы.ФормаПродолжить.Видимость = Ложь; Иначе ОбъектСтартован = ОбъектСтартован(Форма); Форма.Элементы.СрокИсполненияВремя.Видимость = Форма.ИспользоватьДатуИВремяВСрокахЗадач; Форма.Элементы.СрокПроверкиВремя.Видимость = Форма.ИспользоватьДатуИВремяВСрокахЗадач; Форма.Элементы.Дата.Формат = ?(Форма.ИспользоватьДатуИВремяВСрокахЗадач, "ДЛФ=DT", "ДЛФ=D"); Форма.Элементы.Предмет.Гиперссылка = Форма.Объект.Предмет <> Неопределено И НЕ Форма.Объект.Предмет.Пустая(); Форма.Элементы.ФормаСтартИЗакрыть.Видимость = Не ОбъектСтартован; Форма.Элементы.ФормаСтартИЗакрыть.КнопкаПоУмолчанию = Не ОбъектСтартован; Форма.Элементы.ФормаСтарт.Видимость = Не ОбъектСтартован; Форма.Элементы.ФормаНастроитьОтложенныйСтарт.Видимость = Не ОбъектСтартован; Форма.Элементы.ФормаЗаписатьИЗакрыть.Видимость = ?(Форма.Объект.Завершен, Ложь, ОбъектСтартован); Форма.Элементы.ФормаЗаписать.Видимость = НЕ Форма.Объект.Завершен; Форма.Элементы.ФормаЗаписатьИЗакрыть.КнопкаПоУмолчанию = ОбъектСтартован; Форма.Элементы.ФормаНастроитьОтложенныйСтарт.Доступность = Не Форма.Объект.Стартован; Если Форма.Объект.ГлавнаяЗадача = Неопределено Или Форма.Объект.ГлавнаяЗадача.Пустая() Тогда Форма.Элементы.ГлавнаяЗадача.Гиперссылка = Ложь; КонецЕсли; Если Не Форма.ИспользоватьПодчиненныеБизнесПроцессы Тогда Форма.Элементы.ГлавнаяЗадача.Видимость = Ложь; КонецЕсли; КонецЕсли; УстановитьСвойстваГруппеСостояний(Форма); УстановитьДоступностьПроверяющего(Форма); КонецПроцедуры &НаКлиентеНаСервереБезКонтекста Процедура УстановитьСвойстваГруппеСостояний(Форма) ОтображатьГруппу = Форма.Объект.Завершен Или ОбъектСтартован(Форма); Форма.Элементы.ГруппаСостояние.Видимость = ОтображатьГруппу; Если НЕ ОтображатьГруппу Тогда Возврат; КонецЕсли; МассивСтрок = Новый Массив; Высота = 1; Если Форма.Объект.Завершен Тогда ДатаЗавершенияСтрокой = ?(Форма.ИспользоватьДатуИВремяВСрокахЗадач, Формат(Форма.Объект.ДатаЗавершения, "ДЛФ=DT"), Формат(Форма.Объект.ДатаЗавершения, "ДЛФ=D")); СтрокаТекста = ?(Форма.Объект.Выполнено, НСтр("ru = 'Задание выполнено %1.'"), НСтр("ru = 'Задание отменено %1.'")); ТекстСостояния = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаТекста, ДатаЗавершенияСтрокой); МассивСтрок.Добавить(ТекстСостояния); Для каждого Элемент Из Форма.Элементы Цикл Если ТипЗнч(Элемент) <> Тип("ПолеФормы") И ТипЗнч(Элемент) <> Тип("ГруппаФормы") Тогда Продолжить; КонецЕсли; Элемент.ТолькоПросмотр = Истина; КонецЦикла; ИначеЕсли Форма.Объект.Стартован Тогда ТекстСостояния = ?(Форма.ИзменятьЗаданияЗаднимЧислом, НСтр("ru = 'Изменения формулировки, важности, автора, а также перенос сроков исполнения и проверки задания вступят в силу немедленно для ранее выданной задачи.'"), НСтр("ru = 'Изменения формулировки, важности, автора, а также перенос сроков исполнения и проверки задания не будут отражены в ранее выданной задаче.'")); МассивСтрок.Добавить(ТекстСостояния); Высота = 2; ИначеЕсли Форма.Отложен Тогда ДатаОтложенногоСтартаСтрокой = ?(Форма.ИспользоватьДатуИВремяВСрокахЗадач, Формат(Форма.ДатаОтложенногоСтарта, "ДЛФ=DT"), Формат(Форма.ДатаОтложенногоСтарта, "ДЛФ=D")); ТекстСостояния = НСтр("ru = 'Задание будет запущено'") + " "; МассивСтрок.Добавить(ТекстСостояния); МассивСтрок.Добавить(Новый ФорматированнаяСтрока(ДатаОтложенногоСтартаСтрокой,,,, "ОткрытьНастройкуОтложенногоСтарта")); КонецЕсли; Форма.ИнфоНадписьЗаголовок = Новый ФорматированнаяСтрока(МассивСтрок); Форма.Элементы.ИнфоНадписьЗаголовок.МаксимальнаяВысота = Высота; КонецПроцедуры &НаСервере Процедура ПроверитьДатуЗавершенияОтложенногоПроцесса(ПроверяемыйОбъект, Отказ) Если Не ЗначениеЗаполнено(ПроверяемыйОбъект.СрокИсполнения) Тогда Возврат; КонецЕсли; ДатаОтложенногоСтарта = БизнесПроцессыИЗадачиСервер.ДатаОтложенногоСтартаПроцесса(ПроверяемыйОбъект.Ссылка); Если ПроверяемыйОбъект.СрокИсполнения < ДатаОтложенногоСтарта Тогда ОбщегоНазначенияКлиентСервер.СообщитьПользователю( НСтр("ru = 'Срок исполнения задания не может быть меньше даты отложенного старта.'"),, "СрокИсполнения", "Объект.СрокИсполнения"); КонецЕсли; КонецПроцедуры &НаКлиенте Процедура ОткрытьНастройкуОтложенногоСтарта() Если КлючевыеРеквизитыФормыЗаполнены() Тогда БизнесПроцессыИЗадачиКлиент.НастроитьОтложенныйСтарт(Объект.Ссылка, Объект.СрокИсполнения); КонецЕсли; КонецПроцедуры &НаКлиенте Функция КлючевыеРеквизитыФормыЗаполнены() Если Объект.Стартован Тогда Возврат Истина; КонецЕсли; ОчиститьСообщения(); РеквизитыФормыЗаполнены = Истина; Если НЕ ЗначениеЗаполнено(Объект.Исполнитель) Тогда ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Поле ""Исполнитель"" не заполнено.'"),, "Исполнитель", "Объект.Исполнитель"); РеквизитыФормыЗаполнены = Ложь; КонецЕсли; Если НЕ ЗначениеЗаполнено(Объект.Наименование) Тогда ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Поле ""Задание"" не заполнено.'"),, "Исполнитель", "Объект.Наименование"); РеквизитыФормыЗаполнены = Ложь; КонецЕсли; Если НЕ ЗначениеЗаполнено(Объект.СрокИсполнения) Тогда ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru = 'Поле ""Срок"" исполнения не заполнено.'"),, "СрокИсполнения", "Объект.СрокИсполнения"); РеквизитыФормыЗаполнены = Ложь; КонецЕсли; Возврат РеквизитыФормыЗаполнены; КонецФункции &НаКлиентеНаСервереБезКонтекста Функция ОбъектСтартован(Форма) Возврат Форма.Объект.Стартован ИЛИ Форма.Отложен; КонецФункции &НаСервере Процедура УстановитьРеквизитыОтложенногоСтарта() ДатаОтложенногоСтарта = БизнесПроцессыИЗадачиСервер.ДатаОтложенногоСтартаПроцесса(Объект.Ссылка); Отложен = (ДатаОтложенногоСтарта <> '00010101'); КонецПроцедуры #КонецОбласти

BusinessProcesses/Задание/Forms/ФормаСписка/Form/Module

 #Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. Возврат; КонецЕсли; ПоАвтору = Пользователи.ТекущийПользователь(); ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( Список, "ЗадачаИсточник", Задачи.ЗадачаИсполнителя.ПустаяСсылка()); УстановитьОтбор(); ИспользоватьДатуИВремяВСрокахЗадач = ПолучитьФункциональнуюОпцию("ИспользоватьДатуИВремяВСрокахЗадач"); Элементы.СрокИсполнения.Формат = ?(ИспользоватьДатуИВремяВСрокахЗадач, "ДЛФ=DT", "ДЛФ=D"); Элементы.СрокПроверки.Формат = ?(ИспользоватьДатуИВремяВСрокахЗадач, "ДЛФ=DT", "ДЛФ=D"); БизнесПроцессыИЗадачиСервер.УстановитьОформлениеБизнесПроцессов(Список.УсловноеОформление); Элементы.ФормаОстановить.Видимость = ПравоДоступа("Изменение", Метаданные.БизнесПроцессы.Задание); КонецПроцедуры &НаСервере Процедура ПриЗагрузкеДанныхИзНастроекНаСервере(Настройки) УстановитьОтборСписка(Настройки); КонецПроцедуры #КонецОбласти #Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура ПоАвторуПриИзменении(Элемент) УстановитьОтбор(); КонецПроцедуры &НаКлиенте Процедура ПоИсполнителюПриИзменении(Элемент) УстановитьОтбор(); КонецПроцедуры &НаКлиенте Процедура ПоПроверяющемуПриИзменении(Элемент) УстановитьОтбор(); КонецПроцедуры &НаКлиенте Процедура ПоказыватьЗавершенныеЗаданияПриИзменении(Элемент) УстановитьОтбор(); Элементы.Список.Обновить(); КонецПроцедуры &НаКлиенте Процедура ПоказыватьОстановленныеПриИзменении(Элемент) УстановитьОтбор(); Элементы.Список.Обновить(); КонецПроцедуры #КонецОбласти #Область ОбработчикиКомандФормы &НаКлиенте Процедура Остановить(Команда) БизнесПроцессыИЗадачиКлиент.Остановить(Элементы.Список.ВыделенныеСтроки); КонецПроцедуры &НаКлиенте Процедура ПродолжитьБизнесПроцесс(Команда) БизнесПроцессыИЗадачиКлиент.СделатьАктивным(Элементы.Список.ВыделенныеСтроки); КонецПроцедуры #КонецОбласти #Область СлужебныеПроцедурыИФункции &НаСервере Процедура УстановитьОтбор() ПараметрыОтбора = Новый Соответствие(); ПараметрыОтбора.Вставить("ПоказыватьЗавершенныеЗадания", ПоказыватьЗавершенныеЗадания); ПараметрыОтбора.Вставить("ПоказыватьОстановленные", ПоказыватьОстановленные); ПараметрыОтбора.Вставить("ПоАвтору", ПоАвтору); ПараметрыОтбора.Вставить("ПоИсполнителю", ПоИсполнителю); ПараметрыОтбора.Вставить("ПоПроверяющему", ПоПроверяющему); УстановитьОтборСписка(ПараметрыОтбора); КонецПроцедуры &НаСервере Процедура УстановитьОтборСписка(ПараметрыОтбора) ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(Список, "Завершен", Ложь,,, Не ПараметрыОтбора["ПоказыватьЗавершенныеЗадания"]); ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(Список, "Остановлен", Ложь,,, Не ПараметрыОтбора["ПоказыватьОстановленные"]); ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(Список, "Автор", ПараметрыОтбора["ПоАвтору"],,, Не ПараметрыОтбора["ПоАвтору"].Пустая()); ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(Список, "Исполнитель", ПараметрыОтбора["ПоИсполнителю"],,, Не ПараметрыОтбора["ПоИсполнителю"].Пустая()); ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(Список, "Проверяющий", ПараметрыОтбора["ПоПроверяющему"],,, Не ПараметрыОтбора["ПоПроверяющему"].Пустая()); КонецПроцедуры #КонецОбласти

CalculationRegisters/_ДемоОсновныеНачисления/Forms/ФактическийПериодДействия/Form/Module

 #Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) Параметры.Отбор.Свойство("ФизическоеЛицо", ОтборФизическоеЛицо); УстановитьЭлементОтбораДинамическогоСписка(Список, "ФизическоеЛицо", ОтборФизическоеЛицо); Параметры.Отбор.Свойство("Организация", ОтборОрганизация); УстановитьЭлементОтбораДинамическогоСписка(Список, "Организация", ОтборОрганизация); КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// // ОБРАБОТЧИКИ СОБЫТИЙ ЭЛЕМЕНТОВ ФОРМЫ &НаКлиенте Процедура ОтборФизическоеЛицоПриИзменении(Элемент) УстановитьЭлементОтбораДинамическогоСписка(Список, "ФизическоеЛицо", ОтборФизическоеЛицо); КонецПроцедуры &НаКлиенте Процедура ОтборОрганизацияПриИзменении(Элемент) УстановитьЭлементОтбораДинамическогоСписка(Список, "Организация", ОтборОрганизация); КонецПроцедуры #КонецОбласти #Область СлужебныеПроцедурыИФункции &НаКлиентеНаСервереБезКонтекста Процедура УстановитьЭлементОтбораДинамическогоСписка(Знач ДинамическийСписок, Знач ИмяПоля, Знач ПравоеЗначение, Знач ВидСравнения = Неопределено) Если ВидСравнения = Неопределено Тогда ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; КонецЕсли; ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбора(ДинамическийСписок.Отбор, ИмяПоля, ПравоеЗначение, ВидСравнения, , ЗначениеЗаполнено(ПравоеЗначение), РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный); КонецПроцедуры #КонецОбласти

CalculationRegisters/_ДемоОсновныеНачисления/Forms/ФормаСписка/Form/Module

 #Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) Если Параметры.Свойство("АвтоТест") Тогда Возврат; КонецЕсли; УстановитьУсловноеОформление(); Параметры.Отбор.Свойство("Организация", ОтборОрганизация); УстановитьЭлементОтбораДинамическогоСписка(Список, "Организация", ОтборОрганизация); Параметры.Отбор.Свойство("Регистратор", ОтборРегистратор); УстановитьЭлементОтбораДинамическогоСписка(Список, "Регистратор", ОтборРегистратор); КонецПроцедуры #КонецОбласти #Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура ОтборОрганизацияПриИзменении(Элемент) УстановитьЭлементОтбораДинамическогоСписка(Список, "Организация", ОтборОрганизация); КонецПроцедуры &НаКлиенте Процедура ОтборРегистраторПриИзменении(Элемент) УстановитьЭлементОтбораДинамическогоСписка(Список, "Регистратор", ОтборРегистратор); КонецПроцедуры #КонецОбласти #Область ОбработчикиКомандФормы &НаКлиенте Процедура ПереключитьАктивностьДвижений(Команда) ТекущиеДанные = Элементы.Список.ТекущиеДанные; Если ТекущиеДанные = Неопределено Или Не ЗначениеЗаполнено(ТекущиеДанные.Регистратор) Тогда ПоказатьПредупреждение(, НСтр("ru = 'Не выбран документ'")); Возврат; КонецЕсли; ПереключитьАктивностьДвиженийСервер(ТекущиеДанные.Регистратор); КонецПроцедуры #КонецОбласти #Область СлужебныеПроцедурыИФункции &НаСервере Процедура УстановитьУсловноеОформление() Список.УсловноеОформление.Элементы.Очистить(); Элемент = Список.УсловноеОформление.Элементы.Добавить(); ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Сторно"); ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; ОтборЭлемента.ПравоеЗначение = Истина; Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ЦветОтрицательногоЧисла); КонецПроцедуры &НаСервере Процедура ПереключитьАктивностьДвиженийСервер(Документ) Если Не Документ.ПометкаУдаления Тогда Движения = РегистрыРасчета._ДемоОсновныеНачисления.СоздатьНаборЗаписей(); Движения.Отбор.Регистратор.Установить(Документ); Движения.Прочитать(); Если Движения.Количество() > 0 Тогда Движения.УстановитьАктивность(Не Движения[0].Активность); Движения.Записать(); Элементы.Список.Обновить(); КонецЕсли; КонецЕсли; КонецПроцедуры &НаКлиентеНаСервереБезКонтекста Процедура УстановитьЭлементОтбораДинамическогоСписка(Знач ДинамическийСписок, Знач ИмяПоля, Знач ПравоеЗначение, Знач ВидСравнения = Неопределено) Если ВидСравнения = Неопределено Тогда ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; КонецЕсли; ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбора(ДинамическийСписок.Отбор, ИмяПоля, ПравоеЗначение, ВидСравнения, , ЗначениеЗаполнено(ПравоеЗначение), РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный); КонецПроцедуры #КонецОбласти

Catalogs/_ДемоБанковскиеСчета/Commands/_ДемоБанковскиеСчета/CommandModule

#Область ОбработчикиСобытий &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) Отбор = Новый Структура("Владелец", ПараметрКоманды); ПараметрыФормы = Новый Структура("Отбор, РежимОткрытияИзФормы", Отбор, Истина); ОткрытьФорму("Справочник._ДемоБанковскиеСчета.ФормаСписка", ПараметрыФормы, ПараметрыВыполненияКоманды.Источник, ПараметрыВыполненияКоманды.Уникальность, ПараметрыВыполненияКоманды.Окно); КонецПроцедуры #КонецОбласти

Catalogs/_ДемоБанковскиеСчета/ManagerModule

 #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ПрограммныйИнтерфейс #Область ДляВызоваИзДругихПодсистем // СтандартныеПодсистемы.УправлениеДоступом // См. УправлениеДоступомПереопределяемый.ПриЗаполненииСписковСОграничениемДоступа. Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт Ограничение.Текст = "РазрешитьЧтениеИзменение |ГДЕ | ЗначениеРазрешено(ВЫРАЗИТЬ(Владелец КАК Справочник._ДемоОрганизации)) | ИЛИ ЗначениеРазрешено(ВЫРАЗИТЬ(Владелец КАК Справочник._ДемоКонтрагенты).Партнер)"; Ограничение.ТекстДляВнешнихПользователей = "ПрисоединитьДополнительныеТаблицы |ЭтотСписок КАК _ДемоБанковскиеСчета | |ЛЕВОЕ СОЕДИНЕНИЕ Справочник._ДемоКонтрагенты КАК _ДемоКонтрагенты | ПО _ДемоКонтрагенты.Ссылка = _ДемоБанковскиеСчета.Владелец | |ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВнешниеПользователи КАК ВнешниеПользователиПартнеры | ПО ВнешниеПользователиПартнеры.ОбъектАвторизации = _ДемоКонтрагенты.Партнер | |ЛЕВОЕ СОЕДИНЕНИЕ Справочник._ДемоКонтактныеЛицаПартнеров КАК _ДемоКонтактныеЛицаПартнеров | ПО _ДемоКонтактныеЛицаПартнеров.Владелец = _ДемоКонтрагенты.Партнер | |ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВнешниеПользователи КАК ВнешниеПользователиКонтактныеЛица | ПО ВнешниеПользователиКонтактныеЛица.ОбъектАвторизации = _ДемоКонтактныеЛицаПартнеров.Ссылка |; |РазрешитьЧтениеИзменение |ГДЕ | ЗначениеРазрешено(Владелец ТОЛЬКО Справочник._ДемоОрганизации) | ИЛИ ЗначениеРазрешено(ВнешниеПользователиПартнеры.Ссылка) | ИЛИ ЗначениеРазрешено(ВнешниеПользователиКонтактныеЛица.Ссылка)"; КонецПроцедуры // Конец СтандартныеПодсистемы.УправлениеДоступом #КонецОбласти #КонецОбласти #КонецЕсли

Catalogs/_ДемоБанковскиеСчета/ObjectModule



Catalogs/_ДемоБанковскиеСчета/Forms/РеквизитыБанка/Form/Module

 #Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. Возврат; КонецЕсли; РучноеИзменение = Ложь; ВКлассификаторе = Ложь; БИК = ""; КоррСчет = ""; Наименование = ""; Город = ""; Адрес = ""; Телефоны = ""; Регион = ""; КодРегиона = ""; Если Не Параметры.Свойство("РучноеИзменение") Тогда Отказ = Истина; Возврат; КонецЕсли; РучноеИзменение = Параметры.РучноеИзменение; РеквизитВладельца = Параметры.Реквизит; Если Параметры.ЗначенияПолей.Свойство("БИК") Тогда БИК = Параметры.ЗначенияПолей.БИК; КонецЕсли; Если Параметры.ЗначенияПолей.Свойство("КоррСчет") Тогда КоррСчет = Параметры.ЗначенияПолей.КоррСчет; КонецЕсли; Если ПустаяСтрока(РучноеИзменение) Тогда РучноеИзменение = Ложь; КонецЕсли; ДеятельностьБанкаПрекращена = Ложь; Если РучноеИзменение Тогда БИК = Параметры.ЗначенияПолей.БИК; КоррСчет = Параметры.ЗначенияПолей.КоррСчет; Наименование = Параметры.ЗначенияПолей.Наименование; Город = Параметры.ЗначенияПолей.Город; Адрес = Параметры.ЗначенияПолей.Адрес; Телефоны = Параметры.ЗначенияПолей.Телефоны; Иначе Банк = Параметры.Банк; Если ТипЗнч(Банк) = Тип("СправочникСсылка.КлассификаторБанков") Тогда БИК = Банк.Код; КоррСчет = Банк.КоррСчет; Наименование = Банк.Наименование; Город = Банк.Город; Адрес = Банк.Адрес; Телефоны = Банк.Телефоны; Регион = Банк.Родитель; ВКлассификаторе = Истина; ДеятельностьБанкаПрекращена = Банк.ДеятельностьПрекращена; КонецЕсли; КонецЕсли; Элементы.НадписьДеятельностьБанкаПрекращена.Видимость = ДеятельностьБанкаПрекращена; КлючСохраненияПоложенияОкна = "ДеятельностьБанкаПрекращена=" + Строка(ДеятельностьБанкаПрекращена); ТолькоПросмотр = Не РучноеИзменение И ВКлассификаторе; БылиНажатыКнопкиЗакрытия = Ложь; КонецПроцедуры &НаКлиенте Процедура ПередЗакрытием(Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка) Оповещение = Новый ОписаниеОповещения("ВыбратьИЗакрыть", ЭтотОбъект); ОбщегоНазначенияКлиент.ПоказатьПодтверждениеЗакрытияФормы(Оповещение, Отказ, ЗавершениеРаботы); КонецПроцедуры #КонецОбласти #Область ОбработчикиКомандФормы &НаКлиенте Процедура КомандаОК(Команда) ВыбратьИЗакрыть(); КонецПроцедуры &НаКлиенте Процедура КомандаОтмена(Команда) Модифицированность = Ложь; Закрыть(); КонецПроцедуры #КонецОбласти #Область СлужебныеПроцедурыИФункции &НаКлиенте Процедура ВыбратьИЗакрыть(Результат = Неопределено, ДополнительныеПараметры = Неопределено) Экспорт Модифицированность = Ложь; ОповеститьОВыборе(ПолучитьЗначенияПараметров()); КонецПроцедуры &НаКлиенте Функция ПолучитьЗначенияПараметров() Результат = Новый Структура; Результат.Вставить("Реквизит", РеквизитВладельца); Если РучноеИзменение Тогда Результат.Вставить("РучноеИзменение", РучноеИзменение); ЗначенияПолей = Новый Структура; ЗначенияПолей.Вставить("БИК", БИК); ЗначенияПолей.Вставить("Наименование", Наименование); ЗначенияПолей.Вставить("КоррСчет", КоррСчет); ЗначенияПолей.Вставить("Город", Город); ЗначенияПолей.Вставить("Адрес", Адрес); ЗначенияПолей.Вставить("Телефоны", Телефоны); ЗначенияПолей.Вставить("РучноеИзменение", РучноеИзменение); Результат.Вставить("ЗначенияПолей", ЗначенияПолей); Иначе Если ВКлассификаторе Тогда Результат.Вставить("РучноеИзменение", РучноеИзменение); Результат.Вставить("Банк", Банк); Иначе Результат.Вставить("РучноеИзменение", Истина); ЗначенияПолей = Новый Структура; ЗначенияПолей.Вставить("БИК", БИК); ЗначенияПолей.Вставить("Наименование", Наименование); ЗначенияПолей.Вставить("КоррСчет", КоррСчет); ЗначенияПолей.Вставить("Город", Город); ЗначенияПолей.Вставить("Адрес", Адрес); ЗначенияПолей.Вставить("Телефоны", Телефоны); ЗначенияПолей.Вставить("РучноеИзменение", РучноеИзменение); Результат.Вставить("ЗначенияПолей", ЗначенияПолей); КонецЕсли; КонецЕсли; Возврат Результат; КонецФункции #КонецОбласти

Catalogs/_ДемоБанковскиеСчета/Forms/ФормаВыбора/Form/Module

 #Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) УстановитьУсловноеОформление(); Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. Возврат; КонецЕсли; ПереключитьВидимостьСчетовВНедействующихБанках(Ложь); КонецПроцедуры #КонецОбласти #Область ОбработчикиКомандФормы &НаКлиенте Процедура ПоказыватьСчетаВНедействующихБанках(Команда) ПереключитьВидимостьСчетовВНедействующихБанках(Не Элементы.ФормаПоказыватьСчетаВНедействующихБанках.Пометка); КонецПроцедуры #КонецОбласти #Область СлужебныеПроцедурыИФункции &НаСервере Процедура ПереключитьВидимостьСчетовВНедействующихБанках(Видимость) Элементы.ФормаПоказыватьСчетаВНедействующихБанках.Пометка = Видимость; ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( Список, "ДеятельностьБанкаПрекращена", Ложь, , , Не Видимость); КонецПроцедуры &НаСервере Процедура УстановитьУсловноеОформление() Список.УсловноеОформление.Элементы.Очистить(); Элемент = Список.УсловноеОформление.Элементы.Добавить(); ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ДеятельностьБанкаПрекращена"); ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; ОтборЭлемента.ПравоеЗначение = Истина; Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ТекстЗапрещеннойЯчейкиЦвет); КонецПроцедуры #КонецОбласти

Catalogs/_ДемоБанковскиеСчета/Forms/ФормаСписка/Form/Module

 #Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) УстановитьУсловноеОформление(); Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. Возврат; КонецЕсли; Если Параметры.РежимОткрытияИзФормы Тогда Элементы.Владелец.Видимость = Ложь; КонецЕсли; ПереключитьВидимостьСчетовВНедействующихБанках(Ложь); КонецПроцедуры #КонецОбласти #Область ОбработчикиКомандФормы &НаКлиенте Процедура ПоказыватьСчетаВНедействующихБанках(Команда) ПереключитьВидимостьСчетовВНедействующихБанках(Не Элементы.ФормаПоказыватьСчетаВНедействующихБанках.Пометка); КонецПроцедуры #КонецОбласти #Область СлужебныеПроцедурыИФункции &НаСервере Процедура ПереключитьВидимостьСчетовВНедействующихБанках(Видимость) Элементы.ФормаПоказыватьСчетаВНедействующихБанках.Пометка = Видимость; ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( Список, "ДеятельностьБанкаПрекращена", Ложь, , , Не Видимость); КонецПроцедуры &НаСервере Процедура УстановитьУсловноеОформление() Список.УсловноеОформление.Элементы.Очистить(); Элемент = Список.УсловноеОформление.Элементы.Добавить(); ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ДеятельностьБанкаПрекращена"); ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; ОтборЭлемента.ПравоеЗначение = Истина; Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ТекстЗапрещеннойЯчейкиЦвет); КонецПроцедуры #КонецОбласти

Catalogs/_ДемоБанковскиеСчета/Forms/ФормаЭлемента/Form/Module

#Область ОписаниеПеременных &НаКлиенте Перем ИмяРедактируемогоРеквизита; #КонецОбласти #Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. Возврат; КонецЕсли; Если Объект.РучноеИзменениеРеквизитовБанка Тогда БИКБанка = Объект.БИКБанка; НаименованиеБанка = Объект.НаименованиеБанка; КоррСчетБанка = Объект.КоррСчетБанка; ГородБанка = Объект.ГородБанка; СВИФТБИК = Объект.СВИФТБИК; Иначе Если НЕ Объект.Банк.Пустая() Тогда ЗаполнитьРеквизитыБанкаПоБанку(Объект.Банк, "Банк", Ложь); КонецЕсли; КонецЕсли; Если ЗначениеЗаполнено(Объект.Ссылка) Тогда Если (ЗначениеЗаполнено(Объект.БИКБанкаДляРасчетов)) Или (ЗначениеЗаполнено(Объект.БанкДляРасчетов)) Или ЗначениеЗаполнено(Объект.СВИФТБИКДляРасчетов) Тогда ИспользуетсяБанкДляРасчетов = Истина; Иначе ИспользуетсяБанкДляРасчетов = Ложь; КонецЕсли; КонецЕсли; Если Объект.РучноеИзменениеРеквизитовБанкаДляРасчетов Тогда БИКБанкаДляРасчетов = Объект.БИКБанкаДляРасчетов; НаименованиеБанкаДляРасчетов = Объект.НаименованиеБанкаДляРасчетов; КоррСчетБанкаДляРасчетов = Объект.КоррСчетБанкаДляРасчетов; ГородБанкаДляРасчетов = Объект.ГородБанкаДляРасчетов; СВИФТБИКДляРасчетов = Объект.СВИФТБИКДляРасчетов; Иначе Если НЕ Объект.БанкДляРасчетов.Пустая() Тогда ЗаполнитьРеквизитыБанкаПоБанку(Объект.БанкДляРасчетов, "БанкДляРасчетов", Ложь); КонецЕсли; КонецЕсли; НациональнаяВалюта = Справочники.Валюты.НайтиПоКоду("643"); СпособУказанияРеквизитовБанка = ?(Объект.РучноеИзменениеРеквизитовБанка, "Вручную", "ИзКлассификатора"); СпособУказанияРеквизитовБанкаРасчетов = ?(Объект.РучноеИзменениеРеквизитовБанкаДляРасчетов, "Вручную", "ИзКлассификатора"); МестоОткрытия = ?(Объект.Зарубежный, "ЗаРубежом", "РФ"); ОбновитьТекстПоясненияНедействительностиБанка(); УправлениеЭлементамиФормы(ЭтотОбъект); КонецПроцедуры &НаКлиенте Процедура ОбработкаВыбора(РезультатВыбора, ИсточникВыбора) Если ВРег(ИсточникВыбора.ИмяФормы) = ВРег("Справочник._ДемоБанковскиеСчета.Форма.РеквизитыБанка") Тогда Если Не ПустаяСтрока(РезультатВыбора) Тогда Если РезультатВыбора.Реквизит = "БИКБанка" Тогда Объект.РучноеИзменениеРеквизитовБанка = РезультатВыбора.РучноеИзменение; Если РезультатВыбора.РучноеИзменение Тогда Объект.Банк = ""; Объект.БИКБанка = РезультатВыбора.ЗначенияПолей.БИК; Объект.НаименованиеБанка = РезультатВыбора.ЗначенияПолей.Наименование; Объект.КоррСчетБанка = РезультатВыбора.ЗначенияПолей.КоррСчет; Объект.ГородБанка = РезультатВыбора.ЗначенияПолей.Город; Объект.АдресБанка = РезультатВыбора.ЗначенияПолей.Адрес; Объект.ТелефоныБанка = РезультатВыбора.ЗначенияПолей.Телефоны; БИКБанка = РезультатВыбора.ЗначенияПолей.БИК; КоррСчетБанка = РезультатВыбора.ЗначенияПолей.КоррСчет; НаименованиеБанка = РезультатВыбора.ЗначенияПолей.Наименование; ГородБанка = РезультатВыбора.ЗначенияПолей.Город; Иначе Объект.Банк = РезультатВыбора.Банк; Объект.БИКБанка = ""; Объект.НаименованиеБанка = ""; Объект.КоррСчетБанка = ""; Объект.ГородБанка = ""; Объект.АдресБанка = ""; Объект.ТелефоныБанка = ""; ЗаполнитьРеквизитыБанкаПоБанку(Объект.Банк, "Банк", Ложь); КонецЕсли; ИначеЕсли РезультатВыбора.Реквизит = "БИКБанкаДляРасчетов" Тогда Объект.РучноеИзменениеРеквизитовБанкаДляРасчетов = РезультатВыбора.РучноеИзменение; Если РезультатВыбора.РучноеИзменение Тогда Объект.БанкДляРасчетов = ""; Объект.БИКБанкаДляРасчетов = РезультатВыбора.ЗначенияПолей.БИК; Объект.НаименованиеБанкаДляРасчетов = РезультатВыбора.ЗначенияПолей.Наименование; Объект.КоррСчетБанкаДляРасчетов = РезультатВыбора.ЗначенияПолей.КоррСчет; Объект.ГородБанкаДляРасчетов = РезультатВыбора.ЗначенияПолей.Город; Объект.АдресБанкаДляРасчетов = РезультатВыбора.ЗначенияПолей.Адрес; Объект.ТелефоныБанкаДляРасчетов = РезультатВыбора.ЗначенияПолей.Телефоны; БИКБанкаДляРасчетов = РезультатВыбора.ЗначенияПолей.БИК; КоррСчетБанкаДляРасчетов = РезультатВыбора.ЗначенияПолей.КоррСчет; НаименованиеБанкаДляРасчетов = РезультатВыбора.ЗначенияПолей.Наименование; ГородБанкаДляРасчетов = РезультатВыбора.ЗначенияПолей.Город; Иначе Объект.БанкДляРасчетов = РезультатВыбора.Банк; Объект.БИКБанкаДляРасчетов = ""; Объект.НаименованиеБанкаДляРасчетов = ""; Объект.КоррСчетБанкаДляРасчетов = ""; Объект.ГородБанкаДляРасчетов = ""; Объект.АдресБанкаДляРасчетов = ""; Объект.ТелефоныБанкаДляРасчетов = ""; ЗаполнитьРеквизитыБанкаПоБанку(Объект.БанкДляРасчетов, "БанкДляРасчетов", Ложь); КонецЕсли; КонецЕсли; КонецЕсли; ИначеЕсли ВРег(ИсточникВыбора.ИмяФормы) = ВРег("Справочник.КлассификаторБанков.Форма.ФормаВыбора") Тогда Если ТипЗнч(РезультатВыбора) = Тип("СправочникСсылка.КлассификаторБанков") Тогда Если ИмяРедактируемогоРеквизита = "БИКБанка" Тогда Объект.Банк = РезультатВыбора; Объект.БИКБанка = ""; Объект.НаименованиеБанка = ""; Объект.КоррСчетБанка = ""; Объект.ГородБанка = ""; Объект.АдресБанка = ""; Объект.ТелефоныБанка = ""; ЗаполнитьРеквизитыБанкаПоБанку(РезультатВыбора, "Банк", Ложь); ИначеЕсли ИмяРедактируемогоРеквизита = "БИКБанкаДляРасчетов" Тогда Объект.БанкДляРасчетов = РезультатВыбора; Объект.БИКБанкаДляРасчетов = ""; Объект.НаименованиеБанкаДляРасчетов = ""; Объект.КоррСчетБанкаДляРасчетов = ""; Объект.ГородБанкаДляРасчетов = ""; Объект.АдресБанкаДляРасчетов = ""; Объект.ТелефоныБанкаДляРасчетов = ""; ЗаполнитьРеквизитыБанкаПоБанку(РезультатВыбора, "БанкДляРасчетов", Ложь); КонецЕсли; КонецЕсли; КонецЕсли; Если Окно <> Неопределено Тогда Окно.Активизировать(); КонецЕсли; ОбновитьТекстПоясненияНедействительностиБанка(); УправлениеЭлементамиФормы(ЭтотОбъект); КонецПроцедуры &НаКлиенте Процедура ПередЗаписью(Отказ, ПараметрыЗаписи) Если Объект.РучноеИзменениеРеквизитовБанка Тогда Объект.БИКБанка = БИКБанка; Объект.КоррСчетБанка = КоррСчетБанка; Объект.НаименованиеБанка = НаименованиеБанка; Объект.ГородБанка = ГородБанка; Объект.СВИФТБИК = СВИФТБИК; Иначе Объект.БИКБанка = ""; Объект.КоррСчетБанка = ""; Объект.НаименованиеБанка = ""; Объект.ГородБанка = ""; Объект.СВИФТБИК = ""; КонецЕсли; Если ИспользуетсяБанкДляРасчетов И Объект.РучноеИзменениеРеквизитовБанкаДляРасчетов Тогда Объект.БИКБанкаДляРасчетов = БИКБанкаДляРасчетов; Объект.КоррСчетБанкаДляРасчетов = КоррСчетБанкаДляРасчетов; Объект.НаименованиеБанкаДляРасчетов = НаименованиеБанкаДляРасчетов; Объект.ГородБанкаДляРасчетов = ГородБанкаДляРасчетов; Объект.СВИФТБИКДляРасчетов = СВИФТБИКДляРасчетов; Иначе Объект.БИКБанкаДляРасчетов = ""; Объект.КоррСчетБанкаДляРасчетов = ""; Объект.НаименованиеБанкаДляРасчетов = ""; Объект.ГородБанкаДляРасчетов = ""; Объект.СВИФТБИКДляРасчетов = ""; КонецЕсли; Объект.Зарубежный = МестоОткрытия = "ЗаРубежом"; КонецПроцедуры &НаСервере Процедура ПриЧтенииНаСервере(ТекущийОбъект) // СтандартныеПодсистемы.УправлениеДоступом Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом"); МодульУправлениеДоступом.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект); КонецЕсли; // Конец СтандартныеПодсистемы.УправлениеДоступом КонецПроцедуры #КонецОбласти #Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура ИспользуетсяБанкДляРасчетовПриИзменении(Элемент) УправлениеЭлементамиФормы(ЭтотОбъект); КонецПроцедуры &НаКлиенте Процедура ВладелецПриИзменении(Элемент) УправлениеЭлементамиФормы(ЭтотОбъект); КонецПроцедуры &НаКлиенте Процедура БИКБанкаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) ИмяРедактируемогоРеквизита = "БИКБанка"; РеквизитБанкаПриВыборе("БИКБанка", ЭтотОбъект); КонецПроцедуры &НаКлиенте Процедура БИКБанкаОткрытие(Элемент, СтандартнаяОбработка) ИмяРедактируемогоРеквизита = "БИКБанка"; СтандартнаяОбработка = Ложь; РеквизитБанкаОткрытие("БИКБанка"); КонецПроцедуры &НаКлиенте Процедура БИКБанкаДляРасчетовНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) ИмяРедактируемогоРеквизита = "БИКБанкаДляРасчетов"; РеквизитБанкаПриВыборе("БИКБанкаДляРасчетов", ЭтотОбъект); КонецПроцедуры &НаКлиенте Процедура БИКБанкаДляРасчетовОткрытие(Элемент, СтандартнаяОбработка) ИмяРедактируемогоРеквизита = "БИКБанкаДляРасчетов"; СтандартнаяОбработка = Ложь; РеквизитБанкаОткрытие("БИКБанкаДляРасчетов"); КонецПроцедуры &НаКлиенте Процедура МестоОткрытияПриИзменении(Элемент) УправлениеЭлементамиФормы(ЭтотОбъект); КонецПроцедуры &НаКлиенте Процедура ВалютаПриИзменении(Элемент) УправлениеЭлементамиФормы(ЭтотОбъект); КонецПроцедуры &НаКлиенте Процедура СпособУказанияРеквизитовБанкаРасчетовПриИзменении(Элемент) Объект.РучноеИзменениеРеквизитовБанкаДляРасчетов = СпособУказанияРеквизитовБанкаРасчетов = "Вручную"; Если СпособУказанияРеквизитовБанкаРасчетов = "ИзКлассификатора" Тогда ЗаполнитьРеквизитыБанкаПоБИК(БИКБанкаДляРасчетов, "БанкДляРасчетов", Истина); КонецЕсли; УправлениеЭлементамиФормы(ЭтотОбъект); КонецПроцедуры &НаКлиенте Процедура СпособУказанияРеквизитовБанкаПриИзменении(Элемент) Объект.РучноеИзменениеРеквизитовБанка = СпособУказанияРеквизитовБанка = "Вручную"; Если СпособУказанияРеквизитовБанка = "ИзКлассификатора" Тогда ЗаполнитьРеквизитыБанкаПоБИК(БИКБанка, "Банк", Истина); КонецЕсли; УправлениеЭлементамиФормы(ЭтотОбъект); КонецПроцедуры #КонецОбласти #Область СлужебныеПроцедурыИФункции &НаСервере Функция ЗаполнитьРеквизитыБанкаПоБИК(БИК, ТипБанка, ПеренестиЗначенияРеквизитов = Ложь) НашлиПоБИК = Ложь; ЗаписьОБанке = ""; Если ТипБанка = "Банк" Тогда БИКБанка = ""; КоррСчетБанка = ""; НаименованиеБанка = ""; ГородБанка = ""; РаботаСБанками.ПолучитьДанныеКлассификатора(БИК,,ЗаписьОБанке); Если НЕ ПустаяСтрока(ЗаписьОБанке) Тогда БИКБанка = ЗаписьОБанке.Код; КоррСчетБанка = ЗаписьОБанке.КоррСчет; НаименованиеБанка = ЗаписьОБанке.Наименование; ГородБанка = ЗаписьОБанке.Город; НашлиПоБИК = Истина; СВИФТБИК = ЗаписьОБанке.СВИФТБИК; Если ПеренестиЗначенияРеквизитов Тогда Объект.БИКБанка = ""; Объект.НаименованиеБанка = ""; Объект.КоррСчетБанка = ""; Объект.ГородБанка = ""; Объект.АдресБанка = ""; Объект.ТелефоныБанка = ""; Объект.Банк = ЗаписьОБанке; КонецЕсли; КонецЕсли; ДеятельностьБанкаПрекращена = Не Объект.РучноеИзменениеРеквизитовБанка И ДеятельностьБанкаПрекращена(БИКБанка); ИначеЕсли ТипБанка = "БанкДляРасчетов" Тогда БИКБанкаДляРасчетов = ""; КоррСчетБанкаДляРасчетов = ""; НаименованиеБанкаДляРасчетов = ""; ГородБанкаДляРасчетов = ""; РаботаСБанками.ПолучитьДанныеКлассификатора(БИК,,ЗаписьОБанке); Если НЕ ПустаяСтрока(ЗаписьОБанке) Тогда БИКБанкаДляРасчетов = ЗаписьОБанке.Код; КоррСчетБанкаДляРасчетов = ЗаписьОБанке.КоррСчет; НаименованиеБанкаДляРасчетов = ЗаписьОБанке.Наименование; ГородБанкаДляРасчетов = ЗаписьОБанке.Город; СВИФТБИКДляРасчетов = ЗаписьОБанке.СВИФТБИК; НашлиПоБИК = Истина; Если ПеренестиЗначенияРеквизитов Тогда Объект.БИКБанкаДляРасчетов = ""; Объект.НаименованиеБанкаДляРасчетов = ""; Объект.КоррСчетБанкаДляРасчетов = ""; Объект.ГородБанкаДляРасчетов = ""; Объект.АдресБанкаДляРасчетов = ""; Объект.ТелефоныБанкаДляРасчетов = ""; Объект.БанкДляРасчетов = ЗаписьОБанке; КонецЕсли; КонецЕсли; ДеятельностьБанкаНепрямыхРасчетовПрекращена = Не Объект.РучноеИзменениеРеквизитовБанкаДляРасчетов И ДеятельностьБанкаПрекращена(БИКБанкаДляРасчетов); КонецЕсли; ОбновитьТекстПоясненияНедействительностиБанка(); Возврат НашлиПоБИК; КонецФункции &НаСервере Функция ЗаполнитьРеквизитыБанкаПоБанку(Банк, ТипБанка, ПеренестиЗначенияРеквизитов = Ложь) Если ТипБанка = "Банк" Тогда БИКБанка = Банк.Код; КоррСчетБанка = Банк.КоррСчет; НаименованиеБанка = Банк.Наименование; ГородБанка = Банк.Город; СВИФТБИК = Банк.СВИФТБИК; Если ПеренестиЗначенияРеквизитов Тогда Объект.БИКБанка = Банк.Код; Объект.НаименованиеБанка = Банк.Наименование; Объект.КоррСчетБанка = Банк.КоррСчет; Объект.ГородБанка = Банк.Город; Объект.АдресБанка = Банк.Адрес; Объект.ТелефоныБанка = Банк.Телефоны; Объект.Банк = ""; Объект.СВИФТБИК = Банк.СВИФТБИК; КонецЕсли; ДеятельностьБанкаПрекращена = Не Объект.РучноеИзменениеРеквизитовБанка И ДеятельностьБанкаПрекращена(БИКБанка); ИначеЕсли ТипБанка = "БанкДляРасчетов" Тогда БИКБанкаДляРасчетов = Банк.Код; КоррСчетБанкаДляРасчетов = Банк.КоррСчет; НаименованиеБанкаДляРасчетов = Банк.Наименование; ГородБанкаДляРасчетов = Банк.Город; СВИФТБИКДляРасчетов = Банк.СВИФТБИК; Если ПеренестиЗначенияРеквизитов Тогда Объект.БИКБанкаДляРасчетов = Банк.Код; Объект.НаименованиеБанкаДляРасчетов = Банк.Наименование; Объект.КоррСчетБанкаДляРасчетов = Банк.КоррСчет; Объект.ГородБанкаДляРасчетов = Банк.Город; Объект.АдресБанкаДляРасчетов = Банк.Адрес; Объект.ТелефоныБанкаДляРасчетов = Банк.Телефоны; Объект.БанкДляРасчетов = ""; Объект.СВИФТБИКДляРасчетов = Банк.СВИФТБИКДляРасчетов; КонецЕсли; ДеятельностьБанкаНепрямыхРасчетовПрекращена = Не Объект.РучноеИзменениеРеквизитовБанкаДляРасчетов И ДеятельностьБанкаПрекращена(БИКБанкаДляРасчетов); КонецЕсли; КонецФункции &НаКлиентеНаСервереБезКонтекста Процедура УправлениеЭлементамиФормы(Форма) ЭтоСчетОрганизации = (ТипЗнч(Форма.Объект.Владелец) = Тип("СправочникСсылка._ДемоОрганизации")); Форма.Элементы.СтраницаНастройкаПечати.Видимость = ЭтоСчетОрганизации; Форма.Элементы.СведенияОСчете.ОтображениеСтраниц = ?(ЭтоСчетОрганизации, ОтображениеСтраницФормы.ЗакладкиСверху, ОтображениеСтраницФормы.Нет); Форма.Элементы.ГруппаБанкДляРасчетов.Доступность = Форма.ИспользуетсяБанкДляРасчетов; Форма.Элементы.СпособУказанияРеквизитовБанка.Доступность = Форма.МестоОткрытия = "РФ"; Если Форма.МестоОткрытия = "ЗаРубежом" Тогда Форма.СпособУказанияРеквизитовБанка = "Вручную"; Форма.Объект.РучноеИзменениеРеквизитовБанка = Истина; КонецЕсли; Форма.Элементы.РеквизитыБанка.Доступность = Форма.СпособУказанияРеквизитовБанка = "Вручную"; Форма.Элементы.РеквизитыБанкаРасчетов.Доступность = Форма.СпособУказанияРеквизитовБанкаРасчетов = "Вручную"; Форма.Элементы.СпособУказанияРеквизитовБанкаРасчетов.Доступность = Форма.Объект.Валюта = Форма.НациональнаяВалюта; Если Форма.Объект.Валюта <> Форма.НациональнаяВалюта Тогда Форма.СпособУказанияРеквизитовБанкаРасчетов = "Вручную"; КонецЕсли; Форма.Элементы.НаименованиеБанка.Доступность = Форма.Объект.РучноеИзменениеРеквизитовБанка; Форма.Элементы.ГородБанка.Доступность = Форма.Объект.РучноеИзменениеРеквизитовБанка; Форма.Элементы.КоррСчетБанка.Доступность = Форма.Объект.РучноеИзменениеРеквизитовБанка; Форма.Элементы.НаименованиеБанкаДляРасчетов.Доступность = Форма.Объект.РучноеИзменениеРеквизитовБанкаДляРасчетов; Форма.Элементы.ГородБанкаДляРасчетов.Доступность = Форма.Объект.РучноеИзменениеРеквизитовБанкаДляРасчетов; Форма.Элементы.КоррСчетБанкаДляРасчетов.Доступность = Форма.Объект.РучноеИзменениеРеквизитовБанкаДляРасчетов; Форма.Элементы.СостояниеБанка.ТекущаяСтраница = ?(Форма.ДеятельностьБанкаПрекращена, Форма.Элементы.БанкЗакрыт, Форма.Элементы.БанкРаботает); Форма.Элементы.СостояниеБанкаНепрямыхРасчетов.ТекущаяСтраница = ?(Форма.ДеятельностьБанкаНепрямыхРасчетовПрекращена, Форма.Элементы.БанкНепрямыхРасчетовЗакрыт, Форма.Элементы.БанкНепрямыхРасчетовРаботает); Если Форма.МестоОткрытия = "РФ" Тогда Форма.Элементы.КодыБанка.ТекущаяСтраница = Форма.Элементы.КодыБанкаРоссийскогоСчета; Иначе Форма.Элементы.КодыБанка.ТекущаяСтраница = Форма.Элементы.КодыБанкаЗарубежногоСчета; КонецЕсли; Если Форма.Объект.Валюта = Форма.НациональнаяВалюта Тогда Форма.Элементы.КодыБанкаРасчетов.ТекущаяСтраница = Форма.Элементы.КодыБанкаРасчетовРублевогоСчета; Иначе Форма.Элементы.КодыБанкаРасчетов.ТекущаяСтраница = Форма.Элементы.КодыБанкаРасчетовВалютногоСчета; КонецЕсли; КонецПроцедуры &НаКлиенте Процедура РеквизитБанкаПриВыборе(ИмяЭлемента, Форма) Если ИмяЭлемента = "БИКБанка" Тогда Если Не Объект.РучноеИзменениеРеквизитовБанка Тогда СтруктураПараметров = Новый Структура; СтруктураПараметров.Вставить("Реквизит", ИмяЭлемента); ОткрытьФорму("Справочник.КлассификаторБанков.Форма.ФормаВыбора", СтруктураПараметров, Форма); КонецЕсли; ИначеЕсли ИмяЭлемента = "БИКБанкаДляРасчетов" Тогда Если Не Объект.РучноеИзменениеРеквизитовБанкаДляРасчетов Тогда СтруктураПараметров = Новый Структура; СтруктураПараметров.Вставить("Реквизит", ИмяЭлемента); ОткрытьФорму("Справочник.КлассификаторБанков.Форма.ФормаВыбора", СтруктураПараметров, Форма); КонецЕсли; КонецЕсли; КонецПроцедуры &НаКлиенте Процедура РеквизитБанкаОткрытие(ИмяЭлемента) СтруктураПараметров = Новый Структура; СтруктураПараметров.Вставить("Реквизит", ИмяЭлемента); ЗначенияПараметров = Новый Структура; Если ИмяЭлемента = "БИКБанка" Тогда СтруктураПараметров.Вставить("РучноеИзменение", Объект.РучноеИзменениеРеквизитовБанка); Если Объект.РучноеИзменениеРеквизитовБанка Тогда ЗначенияПараметров.Вставить("БИК", БИКБанка); ЗначенияПараметров.Вставить("Наименование", НаименованиеБанка); ЗначенияПараметров.Вставить("КоррСчет", КоррСчетБанка); ЗначенияПараметров.Вставить("Город", ГородБанка); ЗначенияПараметров.Вставить("Адрес", Объект.АдресБанка); ЗначенияПараметров.Вставить("Телефоны", Объект.ТелефоныБанка); Иначе СтруктураПараметров.Вставить("Банк", Объект.Банк); КонецЕсли; ИначеЕсли ИмяЭлемента = "БИКБанкаДляРасчетов" Тогда СтруктураПараметров.Вставить("РучноеИзменение", Объект.РучноеИзменениеРеквизитовБанкаДляРасчетов); Если Объект.РучноеИзменениеРеквизитовБанкаДляРасчетов Тогда ЗначенияПараметров.Вставить("БИК", БИКБанкаДляРасчетов); ЗначенияПараметров.Вставить("Наименование", НаименованиеБанкаДляРасчетов); ЗначенияПараметров.Вставить("КоррСчет", КоррСчетБанкаДляРасчетов); ЗначенияПараметров.Вставить("Город", ГородБанкаДляРасчетов); ЗначенияПараметров.Вставить("Адрес", Объект.АдресБанкаДляРасчетов); ЗначенияПараметров.Вставить("Телефоны", Объект.ТелефоныБанкаДляРасчетов); Иначе СтруктураПараметров.Вставить("Банк", Объект.БанкДляРасчетов); КонецЕсли; КонецЕсли; СтруктураПараметров.Вставить("ЗначенияПолей", ЗначенияПараметров); ОткрытьФорму("Справочник._ДемоБанковскиеСчета.Форма.РеквизитыБанка",СтруктураПараметров, ЭтотОбъект); КонецПроцедуры &НаКлиенте Процедура РеквизитБанкаПриИзменении(Элемент) ТипБанка = "Банк"; РучноеИзменениеРеквизитовБанка = Объект.РучноеИзменениеРеквизитовБанка; ИмяРедактируемогоРеквизита = "БИКБанка"; Если СтрНачинаетсяС(Элемент.Имя, "БИКБанкаДляРасчетов") Тогда ТипБанка = "БанкДляРасчетов"; РучноеИзменениеРеквизитовБанка = Объект.РучноеИзменениеРеквизитовБанкаДляРасчетов; ИмяРедактируемогоРеквизита = "БИКБанкаДляРасчетов"; КонецЕсли; Если РучноеИзменениеРеквизитовБанка Тогда Возврат; КонецЕсли; Если ЗаполнитьРеквизитыБанкаПоБИК(ЭтотОбъект[ИмяРедактируемогоРеквизита], ТипБанка, Истина) Тогда УправлениеЭлементамиФормы(ЭтотОбъект); Возврат; КонецЕсли; СписокВариантовОтветовНаВопрос = Новый СписокЗначений; СписокВариантовОтветовНаВопрос.Добавить("ВыбратьИзСписка", НСтр("ru = 'Выбрать из списка'")); СписокВариантовОтветовНаВопрос.Добавить("ПродолжитьВвод", НСтр("ru = 'Продолжить ввод'")); СписокВариантовОтветовНаВопрос.Добавить("ОтменитьВвод", НСтр("ru = 'Отменить ввод'")); ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Банк с БИК %1 не найден в классификаторе банков.'"), ЭтотОбъект[ИмяРедактируемогоРеквизита]); ОписаниеОповещения = Новый ОписаниеОповещения("РеквизитБанкаПриИзмененииЗавершение", ЭтотОбъект, Элемент); ПоказатьВопрос(ОписаниеОповещения, ТекстВопроса, СписокВариантовОтветовНаВопрос, 0, , НСтр("ru = 'Выбор банка из классификатора'")); КонецПроцедуры &НаКлиенте Процедура РеквизитБанкаПриИзмененииЗавершение(РезультатВопроса, Элемент) Экспорт ИмяРедактируемогоРеквизита = "БИКБанка"; Если СтрНачинаетсяС(Элемент.Имя, "БИКБанкаДляРасчетов") Тогда ИмяРедактируемогоРеквизита = "БИКБанкаДляРасчетов"; КонецЕсли; Если РезультатВопроса = "ОтменитьВвод" Тогда ЭтотОбъект[ИмяРедактируемогоРеквизита] = ""; ИначеЕсли РезультатВопроса = "ПродолжитьВвод" Тогда Если ИмяРедактируемогоРеквизита = "БИКБанка" Тогда Объект.РучноеИзменениеРеквизитовБанка = Истина; ИначеЕсли ИмяРедактируемогоРеквизита = "БИКБанкаДляРасчетов" Тогда Объект.РучноеИзменениеРеквизитовБанкаДляРасчетов = Истина; КонецЕсли; Объект[ИмяРедактируемогоРеквизита] = ЭтотОбъект[ИмяРедактируемогоРеквизита]; ИначеЕсли РезультатВопроса = "ВыбратьИзСписка" Тогда СтруктураПараметров = Новый Структура; СтруктураПараметров.Вставить("Реквизит", ИмяРедактируемогоРеквизита); ОткрытьФорму("Справочник.КлассификаторБанков.Форма.ФормаВыбора", СтруктураПараметров, ЭтотОбъект); КонецЕсли; УправлениеЭлементамиФормы(ЭтотОбъект); КонецПроцедуры &НаСервереБезКонтекста Функция ДеятельностьБанкаПрекращена(БИК) Результат = Ложь; ТекстЗапроса = "ВЫБРАТЬ | КлассификаторБанков.ДеятельностьПрекращена |ИЗ | Справочник.КлассификаторБанков КАК КлассификаторБанков |ГДЕ | КлассификаторБанков.Код = &БИК | И КлассификаторБанков.ЭтоГруппа = ЛОЖЬ"; Запрос = Новый Запрос; Запрос.Текст = ТекстЗапроса; Запрос.УстановитьПараметр("БИК", БИК); Выборка = Запрос.Выполнить().Выбрать(); Если Выборка.Следующий() Тогда Результат = Выборка.ДеятельностьПрекращена; КонецЕсли; Возврат Результат; КонецФункции &НаСервере Процедура ОбновитьТекстПоясненияНедействительностиБанка() Элементы.НадписьДеятельностьБанкаПрекращена.Заголовок = РаботаСБанками.ПояснениеНедействительногоБанка(Объект.Банк); Элементы.НадписьДеятельностьБанкаРасчетовПрекращена.Заголовок =РаботаСБанками.ПояснениеНедействительногоБанка(Объект.БанкДляРасчетов); КонецПроцедуры #КонецОбласти

Catalogs/_ДемоВидыНоменклатуры/ManagerModule

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

Catalogs/_ДемоВидыНоменклатуры/ObjectModule

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

Catalogs/_ДемоВидыНоменклатуры/Forms/ФормаЭлемента/Form/Module

 #Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. Возврат; КонецЕсли; // СтандартныеПодсистемы.УправлениеДоступом УправлениеДоступом.ПриСозданииФормыЗначенияДоступа(ЭтотОбъект); // Конец СтандартныеПодсистемы.УправлениеДоступом КонецПроцедуры &НаСервере Процедура ПриЧтенииНаСервере(ТекущийОбъект) // СтандартныеПодсистемы.УправлениеДоступом Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом"); МодульУправлениеДоступом.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект); КонецЕсли; // Конец СтандартныеПодсистемы.УправлениеДоступом КонецПроцедуры #КонецОбласти

Catalogs/_ДемоГруппыДоступаНоменклатуры/ManagerModule



Catalogs/_ДемоГруппыДоступаНоменклатуры/ObjectModule

#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ОбработчикиСобытий Процедура ПередЗаписью(Отказ) Если ОбменДанными.Загрузка Тогда Возврат; КонецЕсли; Если ЭтоГруппа Тогда Возврат; КонецЕсли; Если ЗначениеЗаполнено(Ссылка) Тогда ГруппаДоступа = Ссылка; Иначе СсылкаНового = ПолучитьСсылкуНового(); Если Не ЗначениеЗаполнено(СсылкаНового) Тогда СсылкаНового = Справочники._ДемоГруппыДоступаНоменклатуры.ПолучитьСсылку(); УстановитьСсылкуНового(СсылкаНового); КонецЕсли; ГруппаДоступа = СсылкаНового; КонецЕсли; КонецПроцедуры #КонецОбласти #КонецЕсли

Catalogs/_ДемоГруппыДоступаПартнеров/ManagerModule

#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ПрограммныйИнтерфейс #Область ДляВызоваИзДругихПодсистем // СтандартныеПодсистемы.УправлениеДоступом // См. УправлениеДоступомПереопределяемый.ПриЗаполненииСписковСОграничениемДоступа. Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт Ограничение.Текст = "РазрешитьЧтениеИзменение |ГДЕ | ЭтоГруппа ИЛИ | ЗначениеРазрешено(Ссылка)"; КонецПроцедуры // Конец СтандартныеПодсистемы.УправлениеДоступом #КонецОбласти #КонецОбласти #КонецЕсли

Catalogs/_ДемоГруппыДоступаПартнеров/ObjectModule

#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ОбработчикиСобытий Процедура ПередЗаписью(Отказ) Если ОбменДанными.Загрузка Тогда Возврат; КонецЕсли; Если ЭтоГруппа Тогда Возврат; КонецЕсли; Если ЗначениеЗаполнено(Ссылка) Тогда ГруппаДоступа = Ссылка; Иначе СсылкаНового = ПолучитьСсылкуНового(); Если Не ЗначениеЗаполнено(СсылкаНового) Тогда СсылкаНового = Справочники._ДемоГруппыДоступаПартнеров.ПолучитьСсылку(); УстановитьСсылкуНового(СсылкаНового); КонецЕсли; ГруппаДоступа = СсылкаНового; КонецЕсли; КонецПроцедуры #КонецОбласти #КонецЕсли

Catalogs/_ДемоГруппыДоступаПартнеров/Forms/ФормаЭлемента/Form/Module

 #Область ОбработчикиСобытийФормы &НаСервере Процедура ПриЧтенииНаСервере(ТекущийОбъект) // СтандартныеПодсистемы.УправлениеДоступом Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом"); МодульУправлениеДоступом.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект); КонецЕсли; // Конец СтандартныеПодсистемы.УправлениеДоступом КонецПроцедуры #КонецОбласти

Catalogs/_ДемоДоговорыКонтрагентов/Commands/_ДемоДоговорыКонтрагентов/CommandModule

#Область ОбработчикиСобытий &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) Отбор = Новый Структура("Владелец", ПараметрКоманды); ПараметрыФормы = Новый Структура("Отбор", Отбор); ОткрытьФорму("Справочник._ДемоДоговорыКонтрагентов.ФормаСписка", ПараметрыФормы, ПараметрыВыполненияКоманды.Источник, ПараметрыВыполненияКоманды.Уникальность, ПараметрыВыполненияКоманды.Окно); КонецПроцедуры #КонецОбласти

Catalogs/_ДемоДоговорыКонтрагентов/ManagerModule

#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ПрограммныйИнтерфейс #Область ДляВызоваИзДругихПодсистем // СтандартныеПодсистемы.УправлениеДоступом // См. УправлениеДоступомПереопределяемый.ПриЗаполненииСписковСОграничениемДоступа. Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт Ограничение.Текст = "РазрешитьЧтениеИзменение |ГДЕ | ЗначениеРазрешено(Организация) | И ЗначениеРазрешено(Партнер)"; КонецПроцедуры // Конец СтандартныеПодсистемы.УправлениеДоступом #КонецОбласти #КонецОбласти #КонецЕсли

Catalogs/_ДемоДоговорыКонтрагентов/Forms/ФормаСписка/Form/Module

#Область ОбработчикиКомандФормы &НаКлиенте Процедура ЗаменитьВоВсехМестахИспользования(Команда) МассивСсылок = Элементы.Список.ВыделенныеСтроки; Если МассивСсылок.Количество() = 0 Тогда ПоказатьПредупреждение(, НСтр("ru = 'Выберите договор'")); Возврат; КонецЕсли; ПоискИУдалениеДублейКлиент.ЗаменитьВыделенные(МассивСсылок); КонецПроцедуры #КонецОбласти

Catalogs/_ДемоДоговорыКонтрагентов/Forms/ФормаЭлемента/Form/Module

 #Область ОбработчикиСобытийФормы &НаСервере Процедура ПриЧтенииНаСервере(ТекущийОбъект) // СтандартныеПодсистемы.УправлениеДоступом Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом"); МодульУправлениеДоступом.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект); КонецЕсли; // Конец СтандартныеПодсистемы.УправлениеДоступом КонецПроцедуры #КонецОбласти

Catalogs/_ДемоКассы/ManagerModule

#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ПрограммныйИнтерфейс #Область ДляВызоваИзДругихПодсистем // СтандартныеПодсистемы.УправлениеДоступом // См. УправлениеДоступомПереопределяемый.ПриЗаполненииСписковСОграничениемДоступа. Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт Ограничение.Текст = "РазрешитьЧтение |ГДЕ | ИСТИНА |; |РазрешитьИзменениеЕслиРазрешеноЧтение |ГДЕ | ЗначениеРазрешено(Владелец)"; КонецПроцедуры // Конец СтандартныеПодсистемы.УправлениеДоступом #КонецОбласти #КонецОбласти #КонецЕсли

Catalogs/_ДемоКассыККМ/ManagerModule

#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ПрограммныйИнтерфейс #Область ДляВызоваИзДругихПодсистем // СтандартныеПодсистемы.ЗапретРедактированияРеквизитовОбъектов // См. ЗапретРедактированияРеквизитовОбъектовПереопределяемый.ПриОпределенииОбъектовСЗаблокированнымиРеквизитами. Функция ПолучитьБлокируемыеРеквизитыОбъекта() Экспорт Результат = Новый Массив; Результат.Добавить("Владелец"); Результат.Добавить("ПриниматьВыручкуОбщейСуммой; ПриниматьВыручкуОбщейСуммойПереключатель"); Возврат Результат; КонецФункции // Конец СтандартныеПодсистемы.ЗапретРедактированияРеквизитовОбъектов // СтандартныеПодсистемы.УправлениеДоступом // См. УправлениеДоступомПереопределяемый.ПриЗаполненииСписковСОграничениемДоступа. Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт Ограничение.Текст = "РазрешитьЧтение |ГДЕ | ИСТИНА |; |РазрешитьИзменениеЕслиРазрешеноЧтение |ГДЕ | ЗначениеРазрешено(Владелец)"; КонецПроцедуры // Конец СтандартныеПодсистемы.УправлениеДоступом #КонецОбласти #КонецОбласти #КонецЕсли

Catalogs/_ДемоКассыККМ/Forms/ФормаЭлемента/Form/Module

 #Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) // СтандартныеПодсистемы.ЗапретРедактированияРеквизитовОбъектов ЗапретРедактированияРеквизитовОбъектов.ЗаблокироватьРеквизиты(ЭтотОбъект); // Конец СтандартныеПодсистемы.ЗапретРедактированияРеквизитовОбъектов КонецПроцедуры &НаСервере Процедура ПриЧтенииНаСервере(ТекущийОбъект) Если Объект.ПриниматьВыручкуОбщейСуммой Тогда ПриниматьВыручкуОбщейСуммойПереключатель = "ОбщейСуммой"; Иначе ПриниматьВыручкуОбщейСуммойПереключатель = "Отдельно"; КонецЕсли; // СтандартныеПодсистемы.УправлениеДоступом Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом"); МодульУправлениеДоступом.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект); КонецЕсли; // Конец СтандартныеПодсистемы.УправлениеДоступом КонецПроцедуры &НаСервере Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) Если ПриниматьВыручкуОбщейСуммойПереключатель = "ОбщейСуммой" Тогда ТекущийОбъект.ПриниматьВыручкуОбщейСуммой = Истина; Иначе ТекущийОбъект.ПриниматьВыручкуОбщейСуммой = Ложь; КонецЕсли; КонецПроцедуры &НаСервере Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи) // СтандартныеПодсистемы.ЗапретРедактированияРеквизитовОбъектов ЗапретРедактированияРеквизитовОбъектов.ЗаблокироватьРеквизиты(ЭтотОбъект); // Конец СтандартныеПодсистемы.ЗапретРедактированияРеквизитовОбъектов КонецПроцедуры #КонецОбласти #Область ОбработчикиКомандФормы // СтандартныеПодсистемы.ЗапретРедактированияРеквизитовОбъектов &НаКлиенте Процедура Подключаемый_РазрешитьРедактированиеРеквизитовОбъекта(Команда) ЗапретРедактированияРеквизитовОбъектовКлиент.РазрешитьРедактированиеРеквизитовОбъекта(ЭтотОбъект); КонецПроцедуры // Конец СтандартныеПодсистемы.ЗапретРедактированияРеквизитовОбъектов #КонецОбласти

Catalogs/_ДемоКонтактныеЛицаПартнеров/ManagerModule

#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ПрограммныйИнтерфейс #Область ДляВызоваИзДругихПодсистем // СтандартныеПодсистемы.ГрупповоеИзменениеОбъектов // Возвращает реквизиты объекта, которые не рекомендуется редактировать // с помощью обработки группового изменения реквизитов. // // Возвращаемое значение: // Массив - список имен реквизитов объекта. Функция РеквизитыНеРедактируемыеВГрупповойОбработке() Экспорт Результат = Новый Массив; Результат.Добавить("КонтактнаяИнформация.*"); Возврат Результат; КонецФункции // Конец СтандартныеПодсистемы.ГрупповоеИзменениеОбъектов // СтандартныеПодсистемы.Печать // Заполняет список команд печати. // // Параметры: // КомандыПечати - ТаблицаЗначений - состав полей см. в функции УправлениеПечатью.СоздатьКоллекциюКомандПечати. // Процедура ДобавитьКомандыПечати(КомандыПечати) Экспорт КонецПроцедуры // Конец СтандартныеПодсистемы.Печать // СтандартныеПодсистемы.ШаблоныСообщений // Вызывается при подготовке шаблонов сообщений и позволяет переопределить список реквизитов и вложений. // // Параметры: // Реквизиты - ДеревоЗначений - список реквизитов шаблона. // ** Имя - Строка - Уникальное имя общего реквизита. // ** Представление - Строка - Представление общего реквизита. // ** Тип - Тип - Тип реквизита. По умолчанию строка. // ** Формат - Строка - Формат вывода значения для чисел, дат, строк и булевых значений. // Вложения - ТаблицаЗначений - печатные формы и вложения // ** Имя - Строка - Уникальное имя вложения. // ** Представление - Строка - Представление варианта. // ** ТипФайла - Строка - Тип вложения, который соответствует расширению файла: "pdf", "png", "jpg", mxl" // и др. // ДополнительныеПараметры - Структура - дополнительные сведения о шаблоне сообщений. // Процедура ПриПодготовкеШаблонаСообщения(Реквизиты, Вложения, ДополнительныеПараметры) Экспорт КонецПроцедуры // Вызывается в момент создания сообщений по шаблону для заполнения значений реквизитов и вложений. // // Параметры: // Сообщение - Структура - структура с ключами: // * ЗначенияРеквизитов - Соответствие - список используемых в шаблоне реквизитов. // ** Ключ - Строка - имя реквизита в шаблоне; // ** Значение - Строка - значение заполнения в шаблоне. // * ЗначенияОбщихРеквизитов - Соответствие - список используемых в шаблоне общих реквизитов. // ** Ключ - Строка - имя реквизита в шаблоне; // ** Значение - Строка - значение заполнения в шаблоне. // * Вложения - Соответствие - значения реквизитов // ** Ключ - Строка - имя вложения в шаблоне; // ** Значение - ДвоичныеДанные, Строка - двоичные данные или адрес во временном хранилище вложения. // ПредметСообщения - ЛюбаяСсылка - ссылка на объект являющийся источником данных. // ДополнительныеПараметры - Структура - Дополнительная информация о шаблоне сообщения. // Процедура ПриФормированииСообщения(Сообщение, ПредметСообщения, ДополнительныеПараметры) Экспорт КонецПроцедуры // Заполняет список получателей SMS при отправке сообщения сформированного по шаблону. // // Параметры: // ПолучателиSMS - ТаблицаЗначений - список получается SMS. // * НомерТелефона - Строка - номер телефона, куда будет отправлено сообщение SMS. // * Представление - Строка - представление получателя сообщения SMS. // * Контакт - Произвольный - контакт, которому принадлежит номер телефона. // ПредметСообщения - ЛюбаяСсылка, Структура - ссылка на объект являющийся источником данных, либо структура, // если шаблон содержит произвольные параметры: // * Предмет - ЛюбаяСсылка - ссылка на объект являющийся источником данных // * ПроизвольныеПараметры - Соответствие - заполненный список произвольных параметров. // Процедура ПриЗаполненииТелефоновПолучателейВСообщении(ПолучателиSMS, ПредметСообщения) Экспорт КонецПроцедуры // Заполняет список получателей письма при отправки сообщения сформированного по шаблону. // // Параметры: // ПолучателиПисьма - ТаблицаЗначений - список получается письма. // * Адрес - Строка - адрес электронной почты получателя. // * Представление - Строка - представление получается письма. // * Контакт - Произвольный - контакт, которому принадлежит адрес электронной почты. // ПредметСообщения - ЛюбаяСсылка, Структура - ссылка на объект являющийся источником данных, либо структура, // если шаблон содержит произвольные параметры: // * Предмет - ЛюбаяСсылка - ссылка на объект являющийся источником данных // * ПроизвольныеПараметры - Соответствие - заполненный список произвольных параметров. // Процедура ПриЗаполненииПочтыПолучателейВСообщении(ПолучателиПисьма, ПредметСообщения) Экспорт КонецПроцедуры // Конец СтандартныеПодсистемы.ШаблоныСообщений // СтандартныеПодсистемы.УправлениеДоступом // См. УправлениеДоступомПереопределяемый.ПриЗаполненииСписковСОграничениемДоступа. Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт Ограничение.Текст = "РазрешитьЧтениеИзменение |ГДЕ | ЗначениеРазрешено(Владелец)"; Ограничение.ТекстДляВнешнихПользователей = "ПрисоединитьДополнительныеТаблицы |ЭтотСписок КАК _ДемоКонтактныеЛицаПартнеров | |ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВнешниеПользователи КАК ВнешниеПользователиПартнеры | ПО ВнешниеПользователиПартнеры.ОбъектАвторизации = _ДемоКонтактныеЛицаПартнеров.Владелец | |ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВнешниеПользователи КАК ВнешниеПользователиКонтактныеЛица | ПО ВнешниеПользователиКонтактныеЛица.ОбъектАвторизации = _ДемоКонтактныеЛицаПартнеров.Ссылка |; |РазрешитьЧтениеИзменение |ГДЕ | ЗначениеРазрешено(ВнешниеПользователиПартнеры.Ссылка) | ИЛИ ЗначениеРазрешено(ВнешниеПользователиКонтактныеЛица.Ссылка)"; КонецПроцедуры // Конец СтандартныеПодсистемы.УправлениеДоступом #КонецОбласти #КонецОбласти #КонецЕсли

Catalogs/_ДемоКонтактныеЛицаПартнеров/ObjectModule

#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ОбработчикиСобытий // Процедура ОбработкаЗаполнения(ДанныеЗаполнения, ТекстЗаполнения, СтандартнаяОбработка) // Если нам не передали значение для заполнения владельца-партнера, то пытаемся // установить его сами. ИскатьПартнера = ДанныеЗаполнения=Неопределено; Если Не ИскатьПартнера И ДанныеЗаполнения.Свойство("Владелец") Тогда АнализДанных = Новый Структура("Владелец"); ЗаполнитьЗначенияСвойств(АнализДанных, ДанныеЗаполнения, "Владелец"); ИскатьПартнера = Не ЗначениеЗаполнено(АнализДанных.Владелец); КонецЕсли; Если ИскатьПартнера Тогда Запрос = Новый Запрос(" |ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 2 | Партнеры.Ссылка КАК Ссылка |ИЗ | Справочник._ДемоПартнеры КАК Партнеры |ГДЕ | НЕ Партнеры.ПометкаУдаления |"); Партнеры = Запрос.Выполнить().Выгрузить(); // Можем устанавливать, только если доступен один из всех. Если Партнеры.Количество()=1 Тогда Владелец = Партнеры[0].Ссылка; КонецЕсли; КонецЕсли; КонецПроцедуры #КонецОбласти #КонецЕсли

Catalogs/_ДемоКонтактныеЛицаПартнеров/Forms/ФормаВыбора/Form/Module

#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. Возврат; КонецЕсли; ОпределитьОтображениеСпискаКонтактныхЛиц(Параметры.ТолькоСВнешнимДоступом); КонецПроцедуры #КонецОбласти #Область СлужебныеПроцедурыИФункции &НаСервере Процедура ОпределитьОтображениеСпискаКонтактныхЛиц(ТолькоСВнешнимДоступом) ПодтекстЗапросаВыбрать = ""; ПодтекстЗапросаИз = ""; ПодтекстЗапросаГде = ""; // Проверка на подсистему Если ПравоДоступа("Чтение", Метаданные.Справочники.ВнешниеПользователи) Тогда ПодтекстЗапросаВыбрать = "ВЫРАЗИТЬ((ВЫРАЗИТЬ(НЕ ВнешниеПользователи.Ссылка ЕСТЬ NULL КАК БУЛЕВО) | И НЕ ВнешниеПользователи.Недействителен И НЕ ВнешниеПользователи.ПометкаУдаления) КАК БУЛЕВО) Как ВнешнийДоступ,"; ПодтекстЗапросаИз = " ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВнешниеПользователи КАК ВнешниеПользователи | ПО Справочник_ДемоКонтактныеЛицаПартнеров.Ссылка = ВнешниеПользователи.ОбъектАвторизации"; Элементы.ВнешнийДоступ.Видимость = Истина; Если ТолькоСВнешнимДоступом Тогда ПодтекстЗапросаГде = " ГДЕ ВЫРАЗИТЬ(НЕ ВнешниеПользователи.Ссылка ЕСТЬ NULL КАК БУЛЕВО) | И НЕ ВнешниеПользователи.Недействителен И НЕ ВнешниеПользователи.ПометкаУдаления = ИСТИНА"; КонецЕсли; КонецЕсли; ШаблонЗапроса = "ВЫБРАТЬ РАЗРЕШЕННЫЕ %1 | Справочник_ДемоКонтактныеЛицаПартнеров.Ссылка, | Справочник_ДемоКонтактныеЛицаПартнеров.Наименование | ИЗ Справочник._ДемоКонтактныеЛицаПартнеров КАК Справочник_ДемоКонтактныеЛицаПартнеров %2 %3"; ТекстЗапроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонЗапроса, ПодтекстЗапросаВыбрать, ПодтекстЗапросаИз, ПодтекстЗапросаГде); СвойстваСписка = ОбщегоНазначения.СтруктураСвойствДинамическогоСписка(); СвойстваСписка.ОсновнаяТаблица = "Справочник._ДемоКонтактныеЛицаПартнеров"; СвойстваСписка.ДинамическоеСчитываниеДанных = Истина; СвойстваСписка.ТекстЗапроса = ТекстЗапроса; ОбщегоНазначения.УстановитьСвойстваДинамическогоСписка(Элементы.Список, СвойстваСписка); КонецПроцедуры #КонецОбласти

Catalogs/_ДемоКонтактныеЛицаПартнеров/Forms/ФормаСписка/Form/Module

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

Catalogs/_ДемоКонтактныеЛицаПартнеров/Forms/ФормаЭлемента/Form/Module

#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. Возврат; КонецЕсли; // СтандартныеПодсистемы.КонтактнаяИнформация УправлениеКонтактнойИнформацией.ПриСозданииНаСервере(ЭтотОбъект, Объект.Ссылка,, ПоложениеЗаголовкаЭлементаФормы.Лево); УправлениеКонтактнойИнформацией.ПриСозданииНаСервере(ЭтотОбъект, ФизическоеЛицо, "ГруппаКонтактнаяИнформацияФизическогоЛица", ПоложениеЗаголовкаЭлементаФормы.Верх); // Конец СтандартныеПодсистемы.КонтактнаяИнформация // Учесть возможность создания из взаимодействия. Взаимодействия.ПодготовитьОповещения(ЭтотОбъект,Параметры,Ложь); // СтандартныеПодсистемы.ПодключаемыеКоманды ПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект); // Конец СтандартныеПодсистемы.ПодключаемыеКоманды КонецПроцедуры &НаСервере Процедура ПриЧтенииНаСервере(ТекущийОбъект) // СтандартныеПодсистемы.КонтактнаяИнформация Если ЗначениеЗаполнено(ТекущийОбъект.ФизическоеЛицо) Тогда ЗначениеВРеквизитФормы(ТекущийОбъект.ФизическоеЛицо.ПолучитьОбъект(), "ФизическоеЛицо"); КонецЕсли; УправлениеКонтактнойИнформацией.ПриЧтенииНаСервере(ЭтотОбъект, ФизическоеЛицо, "ГруппаКонтактнаяИнформацияФизическогоЛица"); УправлениеКонтактнойИнформацией.ПриЧтенииНаСервере(ЭтотОбъект, Объект); // Конец СтандартныеПодсистемы.КонтактнаяИнформация // СтандартныеПодсистемы.ПодключаемыеКоманды ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Объект); // Конец СтандартныеПодсистемы.ПодключаемыеКоманды // СтандартныеПодсистемы.УправлениеДоступом Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом"); МодульУправлениеДоступом.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект); КонецЕсли; // Конец СтандартныеПодсистемы.УправлениеДоступом КонецПроцедуры &НаСервере Процедура ОбработкаПроверкиЗаполненияНаСервере(Отказ, ПроверяемыеРеквизиты) // СтандартныеПодсистемы.КонтактнаяИнформация ФизическоеЛицоОбъект = РеквизитФормыВЗначение("ФизическоеЛицо"); УправлениеКонтактнойИнформацией.ПередЗаписьюНаСервере(ЭтотОбъект, ФизическоеЛицоОбъект, Отказ); Если НЕ Отказ Тогда УправлениеКонтактнойИнформацией.ОбработкаПроверкиЗаполненияНаСервере(ЭтотОбъект, Объект, Отказ); КонецЕсли; // Конец СтандартныеПодсистемы.КонтактнаяИнформация КонецПроцедуры &НаСервере Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) // СтандартныеПодсистемы.КонтактнаяИнформация УправлениеКонтактнойИнформацией.ПередЗаписьюНаСервере(ЭтотОбъект, ТекущийОбъект); УправлениеКонтактнойИнформацией.ПередЗаписьюНаСервере(ЭтотОбъект, ЭтотОбъект.ФизическоеЛицо); // Конец СтандартныеПодсистемы.КонтактнаяИнформация КонецПроцедуры &НаСервере Процедура ПриЗаписиНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) ФизическоеЛицоОбъект = РеквизитФормыВЗначение("ФизическоеЛицо"); ФизическоеЛицоОбъект.Записать(); ЗначениеВРеквизитФормы(ФизическоеЛицоОбъект, "ФизическоеЛицо"); КонецПроцедуры &НаКлиенте Процедура ПослеЗаписи(ПараметрыЗаписи) ВзаимодействияКлиент.КонтактПослеЗаписи(ЭтотОбъект,Объект,ПараметрыЗаписи,"_ДемоКонтактныеЛицаПартнеров"); КонецПроцедуры &НаКлиенте Процедура ПриОткрытии(Отказ) ПодключитьОбработчикОжидания("ПроверитьНеобходимостьБлокировкиФизическогоЛица", 1, Ложь); // СтандартныеПодсистемы.ПодключаемыеКоманды ПодключаемыеКомандыКлиент.НачатьОбновлениеКоманд(ЭтотОбъект); // Конец СтандартныеПодсистемы.ПодключаемыеКоманды КонецПроцедуры &НаКлиенте Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) Если ИмяСобытия = "Запись__ДемоФизическиеЛица" И Источник = Объект.ФизическоеЛицо Тогда ПрочитатьКонтактнуюИнформациюФизическогоЛица(); КонецЕсли; КонецПроцедуры #КонецОбласти #Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура ФизическоеЛицоПриИзменении(Элемент) Если ПустаяСтрока(Объект.Наименование) Тогда Объект.Наименование = ФизическоеЛицо.Наименование; КонецЕсли; ИзменитьДанныеФизическогоЛица(); КонецПроцедуры // СтандартныеПодсистемы.КонтактнаяИнформация &НаКлиенте Процедура Подключаемый_КонтактнаяИнформацияПриИзменении(Элемент) УправлениеКонтактнойИнформациейКлиент.ПриИзменении(ЭтотОбъект, Элемент); КонецПроцедуры &НаКлиенте Процедура Подключаемый_КонтактнаяИнформацияНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) УправлениеКонтактнойИнформациейКлиент.НачалоВыбора(ЭтотОбъект, Элемент, , СтандартнаяОбработка); КонецПроцедуры &НаКлиенте Процедура Подключаемый_КонтактнаяИнформацияПриНажатии(Элемент, СтандартнаяОбработка) УправлениеКонтактнойИнформациейКлиент.НачалоВыбора(ЭтотОбъект, Элемент, , СтандартнаяОбработка); КонецПроцедуры &НаКлиенте Процедура Подключаемый_КонтактнаяИнформацияОчистка(Элемент, СтандартнаяОбработка) УправлениеКонтактнойИнформациейКлиент.Очистка(ЭтотОбъект, Элемент.Имя); КонецПроцедуры &НаКлиенте Процедура Подключаемый_КонтактнаяИнформацияВыполнитьКоманду(Команда) УправлениеКонтактнойИнформациейКлиент.ВыполнитьКоманду(ЭтотОбъект, Команда.Имя); КонецПроцедуры &НаКлиенте Процедура Подключаемый_КонтактнаяИнформацияАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка) УправлениеКонтактнойИнформациейКлиент.АвтоПодбор(Текст, ДанныеВыбора, СтандартнаяОбработка); КонецПроцедуры &НаКлиенте Процедура Подключаемый_КонтактнаяИнформацияОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) УправлениеКонтактнойИнформациейКлиент.ОбработкаВыбора(ЭтотОбъект, ВыбранноеЗначение, Элемент.Имя, СтандартнаяОбработка); КонецПроцедуры &НаСервере Процедура Подключаемый_ОбновитьКонтактнуюИнформацию(Результат) УправлениеКонтактнойИнформацией.ОбновитьКонтактнуюИнформацию(ЭтотОбъект, Объект, Результат); КонецПроцедуры // Конец СтандартныеПодсистемы.КонтактнаяИнформация #КонецОбласти #Область ОбработчикиКомандФормы // СтандартныеПодсистемы.ПодключаемыеКоманды &НаКлиенте Процедура Подключаемый_ВыполнитьКоманду(Команда) ПодключаемыеКомандыКлиент.ВыполнитьКоманду(ЭтотОбъект, Команда, Объект); КонецПроцедуры &НаСервере Процедура Подключаемый_ВыполнитьКомандуНаСервере(Контекст, Результат) ПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, Контекст, Объект, Результат); КонецПроцедуры &НаКлиенте Процедура Подключаемый_ОбновитьКоманды() ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Объект); КонецПроцедуры // Конец СтандартныеПодсистемы.ПодключаемыеКоманды #КонецОбласти #Область СлужебныеПроцедурыИФункции &НаКлиенте Процедура ПроверитьНеобходимостьБлокировкиФизическогоЛица() Если Модифицированность И НЕ ФизическоеЛицо.Ссылка.Пустая() Тогда Если ЗаблокироватьФизическоеЛицоПриРедактированииНаСервере(ФизическоеЛицо.Ссылка, ЭтотОбъект.УникальныйИдентификатор) Тогда ОтключитьОбработчикОжидания("ПроверитьНеобходимостьБлокировкиФизическогоЛица"); Иначе Прочитать(); ВызватьИсключение НСтр("ru = 'Данные контактного лица не могут быть записаны, т.к. личные данные физического лица не доступны для изменения. |Возможно, эти данные физического лица редактируются другим пользователем.'"); КонецЕсли; КонецЕсли; КонецПроцедуры &НаСервере Процедура ИзменитьДанныеФизическогоЛица() Если ФизическоеЛицо.Ссылка.Пустая() Тогда ПрочитатьКонтактнуюИнформациюФизическогоЛица(); Возврат; КонецЕсли; Если ЗаблокироватьФизическоеЛицоПриРедактированииНаСервере(Объект.ФизическоеЛицо, ЭтотОбъект.УникальныйИдентификатор) Тогда РазблокироватьФизическоеЛицоПриРедактированииНаСервере(ФизическоеЛицо.Ссылка, ЭтотОбъект.УникальныйИдентификатор); ПрочитатьКонтактнуюИнформациюФизическогоЛица(); Иначе Объект.ФизическоеЛицо = ФизическоеЛицо.Ссылка; ВызватьИсключение НСтр("ru = 'Данные контактного лица не могут быть записаны, т.к. личные данные физического лица не доступны для изменения. |Возможно, эти данные физического лица редактируются другим пользователем.'"); КонецЕсли; КонецПроцедуры &НаСервереБезКонтекста Функция ЗаблокироватьФизическоеЛицоПриРедактированииНаСервере(ФизическоеЛицо, ФормаУникальныйИдентификатор) Попытка ЗаблокироватьДанныеДляРедактирования(ФизическоеЛицо, ФизическоеЛицо.ВерсияДанных, ФормаУникальныйИдентификатор); Исключение Возврат Ложь; КонецПопытки; Возврат Истина; КонецФункции &НаСервереБезКонтекста Функция РазблокироватьФизическоеЛицоПриРедактированииНаСервере(ФизическоеЛицоСсылка, ФормаУникальныйИдентификатор) Попытка РазблокироватьДанныеДляРедактирования(ФизическоеЛицоСсылка, ФормаУникальныйИдентификатор); Исключение Возврат Ложь; КонецПопытки; Возврат Истина; КонецФункции &НаСервере Процедура ПрочитатьКонтактнуюИнформациюФизическогоЛица() ЗначениеВРеквизитФормы(Объект.ФизическоеЛицо.ПолучитьОбъект(), "ФизическоеЛицо"); // СтандартныеПодсистемы.КонтактнаяИнформация УправлениеКонтактнойИнформацией.ПриЧтенииНаСервере(ЭтотОбъект, ФизическоеЛицо.Ссылка, "ГруппаКонтактнаяИнформацияФизическогоЛица"); // Конец СтандартныеПодсистемы.КонтактнаяИнформация КонецПроцедуры #КонецОбласти

Catalogs/_ДемоКонтрагенты/Commands/_ДемоНапомнитьЧерез10Минут/CommandModule

#Область ОбработчикиСобытий &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) ТекстНапоминания = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '""%1"" требует внимания'"), ПараметрКоманды); НапоминанияПользователяКлиент.НапомнитьВУказанноеВремя(ТекстНапоминания, ОбщегоНазначенияКлиент.ДатаСеанса() + 10*60, ПараметрКоманды); ПоказатьОповещениеПользователя(НСтр("ru = 'Создано напоминание:'"), , ТекстНапоминания, БиблиотекаКартинок.Информация32); КонецПроцедуры #КонецОбласти

Catalogs/_ДемоКонтрагенты/ManagerModule

#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ПрограммныйИнтерфейс #Область ДляВызоваИзДругихПодсистем // СтандартныеПодсистемы.ШаблоныСообщений // Вызывается при подготовке шаблонов сообщений и позволяет переопределить список реквизитов и вложений. // // Параметры: // Реквизиты - ДеревоЗначений - список реквизитов шаблона. // ** Имя - Строка - Уникальное имя общего реквизита. // ** Представление - Строка - Представление общего реквизита. // ** Тип - Тип - Тип реквизита. По умолчанию строка. // ** Формат - Строка - Формат вывода значения для чисел, дат, строк и булевых значений. // Вложения - ТаблицаЗначений - печатные формы и вложения // ** Имя - Строка - Уникальное имя вложения. // ** Представление - Строка - Представление варианта. // ** ТипФайла - Строка - Тип вложения, который соответствует расширению файла: "pdf", "png", "jpg", mxl" // и др. // ДополнительныеПараметры - Структура - дополнительные сведения о шаблоне сообщений. // Процедура ПриПодготовкеШаблонаСообщения(Реквизиты, Вложения, ДополнительныеПараметры) Экспорт // Определение реквизита состояние контрагента. НовыйРеквизит = Реквизиты.Добавить(); НовыйРеквизит.Имя = "СостояниеКонтрагента"; НовыйРеквизит.Представление = НСтр("ru = 'Состояние контрагента'"); НовыйРеквизит.Тип = Новый ОписаниеТипов("Строка"); ШаблоныСообщений.РазвернутьРеквизит("Партнер", Реквизиты, "", "ГруппаДоступа"); КонецПроцедуры // Вызывается в момент создания сообщений по шаблону для заполнения значений реквизитов и вложений. // // Параметры: // Сообщение - Структура - структура с ключами: // * ЗначенияРеквизитов - Соответствие - список используемых в шаблоне реквизитов. // ** Ключ - Строка - имя реквизита в шаблоне; // ** Значение - Строка - значение заполнения в шаблоне. // * ЗначенияОбщихРеквизитов - Соответствие - список используемых в шаблоне общих реквизитов. // ** Ключ - Строка - имя реквизита в шаблоне; // ** Значение - Строка - значение заполнения в шаблоне. // * Вложения - Соответствие - значения реквизитов // ** Ключ - Строка - имя вложения в шаблоне; // ** Значение - ДвоичныеДанные, Строка - двоичные данные или адрес во временном хранилище вложения. // ПредметСообщения - ЛюбаяСсылка - ссылка на объект являющийся источником данных. // ДополнительныеПараметры - Структура - Дополнительная информация о шаблоне сообщения. // Процедура ПриФормированииСообщения(Сообщение, ПредметСообщения, ДополнительныеПараметры) Экспорт КонецПроцедуры // Заполняет список получателей SMS при отправке сообщения сформированного по шаблону. // // Параметры: // ПолучателиSMS - ТаблицаЗначений - список получается SMS. // * НомерТелефона - Строка - номер телефона, куда будет отправлено сообщение SMS. // * Представление - Строка - представление получателя сообщения SMS. // * Контакт - Произвольный - контакт, которому принадлежит номер телефона. // ПредметСообщения - ЛюбаяСсылка, Структура - ссылка на объект являющийся источником данных, либо структура, // если шаблон содержит произвольные параметры: // * Предмет - ЛюбаяСсылка - ссылка на объект являющийся источником данных // * ПроизвольныеПараметры - Соответствие - заполненный список произвольных параметров. // Процедура ПриЗаполненииТелефоновПолучателейВСообщении(ПолучателиSMS, ПредметСообщения) Экспорт КонецПроцедуры // Заполняет список получателей письма при отправки сообщения сформированного по шаблону. // // Параметры: // ПолучателиПисьма - ТаблицаЗначений - список получается письма. // * Адрес - Строка - адрес электронной почты получателя. // * Представление - Строка - представление получается письма. // * Контакт - Произвольный - контакт, которому принадлежит адрес электронной почты. // ПредметСообщения - ЛюбаяСсылка, Структура - ссылка на объект являющийся источником данных, либо структура, // если шаблон содержит произвольные параметры: // * Предмет - ЛюбаяСсылка - ссылка на объект являющийся источником данных // * ПроизвольныеПараметры - Соответствие - заполненный список произвольных параметров. // Процедура ПриЗаполненииПочтыПолучателейВСообщении(ПолучателиПисьма, ПредметСообщения) Экспорт КонецПроцедуры // Конец СтандартныеПодсистемы.ШаблоныСообщений // СтандартныеПодсистемы.ГрупповоеИзменениеОбъектов // Возвращает реквизиты объекта, которые не рекомендуется редактировать // с помощью обработки группового изменения реквизитов. // // Возвращаемое значение: // Массив - список имен реквизитов объекта. Функция РеквизитыНеРедактируемыеВГрупповойОбработке() Экспорт Результат = Новый Массив; Результат.Добавить("ИНН"); Результат.Добавить("КодПоОКПО"); Результат.Добавить("КПП"); Результат.Добавить("КонтактнаяИнформация.*"); Возврат Результат; КонецФункции // Конец СтандартныеПодсистемы.ГрупповоеИзменениеОбъектов // СтандартныеПодсистемы.ВариантыОтчетов // Определяет список команд отчетов. // // Параметры: // КомандыОтчетов - ТаблицаЗначений - Таблица с командами отчетов. Для изменения. // См. описание 1 параметра процедуры ВариантыОтчетовПереопределяемый.ПередДобавлениемКомандОтчетов(). // Параметры - Структура - Вспомогательные параметры. Для чтения. // См. описание 2 параметра процедуры ВариантыОтчетовПереопределяемый.ПередДобавлениемКомандОтчетов(). // Процедура ДобавитьКомандыОтчетов(КомандыОтчетов, Параметры) Экспорт КонецПроцедуры // Конец СтандартныеПодсистемы.ВариантыОтчетов // СтандартныеПодсистемы.Печать // Заполняет список команд печати. // // Параметры: // КомандыПечати - ТаблицаЗначений - состав полей см. в функции УправлениеПечатью.СоздатьКоллекциюКомандПечати. // Процедура ДобавитьКомандыПечати(КомандыПечати) Экспорт КонецПроцедуры // Конец СтандартныеПодсистемы.Печать // СтандартныеПодсистемы.ЗаполнениеОбъектов // Определяет список команд заполнения. // // Параметры: // КомандыЗаполнения - ТаблицаЗначений - Таблица с командами заполнения. Для изменения. // См. описание 1 параметра процедуры ЗаполнениеОбъектовПереопределяемый.ПередДобавлениемКомандЗаполнения(). // Параметры - Структура - Вспомогательные параметры. Для чтения. // См. описание 2 параметра процедуры ЗаполнениеОбъектовПереопределяемый.ПередДобавлениемКомандЗаполнения(). // Процедура ДобавитьКомандыЗаполнения(КомандыЗаполнения, Параметры) Экспорт КонецПроцедуры // Конец СтандартныеПодсистемы.ЗаполнениеОбъектов // СтандартныеПодсистемы.ВерсионированиеОбъектов // Определяет настройки объекта для подсистемы ВерсионированиеОбъектов. // // Параметры: // Настройки - Структура - настройки подсистемы. Процедура ПриОпределенииНастроекВерсионированияОбъектов(Настройки) Экспорт Настройки.ПриПолученииСлужебныхРеквизитов = Истина; КонецПроцедуры // Ограничивает видимость реквизитов объекта в отчете по версии. // // Параметры: // Реквизиты - Массив - список имен реквизитов объекта. Процедура ПриПолученииСлужебныхРеквизитов(Реквизиты) Экспорт Реквизиты.Добавить("ЭтоИностранныйКонтрагент"); КонецПроцедуры // Конец СтандартныеПодсистемы.ВерсионированиеОбъектов // СтандартныеПодсистемы.ПодключаемыеКоманды // Определяет список подключаемых команд для вывода в подменю "ПодменюДемоКоманд" у произвольных объектов конфигурации. // Подробнее см. ПодключаемыеКомандыПереопределяемый.ПриОпределенииВидовПодключаемыхКоманд. // // Параметры: // ДемоКоманды - ТаблицаЗначений - добавить в таблицу собственные подключаемые команды. Состав колонок см. в описании // параметра Команды процедуры ПодключаемыеКомандыПереопределяемый.ПриОпределенииКомандПодключенныхКОбъекту. // Параметры - Структура - вспомогательные входные параметры, необходимые для формирования команд. // См. описание параметра НастройкиФормы процедуры ПодключаемыеКомандыПереопределяемый.ПриОпределенииКомандПодключенныхКОбъекту. // Процедура ДобавитьДемоКоманды(ДемоКоманды, Параметры) Экспорт КонецПроцедуры // Конец СтандартныеПодсистемы.ПодключаемыеКоманды // СтандартныеПодсистемы.УправлениеДоступом // См. УправлениеДоступомПереопределяемый.ПриЗаполненииСписковСОграничениемДоступа. Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт Ограничение.Текст = "РазрешитьЧтениеИзменение |ГДЕ | ЭтоГруппа | ИЛИ ЗначениеРазрешено(Партнер)"; Ограничение.ТекстДляВнешнихПользователей = "ПрисоединитьДополнительныеТаблицы |ЭтотСписок КАК _ДемоКонтрагенты | |ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВнешниеПользователи КАК ВнешниеПользователиПартнеры | ПО ВнешниеПользователиПартнеры.ОбъектАвторизации = _ДемоКонтрагенты.Партнер | |ЛЕВОЕ СОЕДИНЕНИЕ Справочник._ДемоКонтактныеЛицаПартнеров КАК _ДемоКонтактныеЛицаПартнеров | ПО _ДемоКонтактныеЛицаПартнеров.Владелец = _ДемоКонтрагенты.Партнер | |ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВнешниеПользователи КАК ВнешниеПользователиКонтактныеЛица | ПО ВнешниеПользователиКонтактныеЛица.ОбъектАвторизации = _ДемоКонтактныеЛицаПартнеров.Ссылка |; |РазрешитьЧтениеИзменение |ГДЕ | ЭтоГруппа | ИЛИ ЗначениеРазрешено(ВнешниеПользователиПартнеры.Ссылка) | ИЛИ ЗначениеРазрешено(ВнешниеПользователиКонтактныеЛица.Ссылка)"; КонецПроцедуры // Конец СтандартныеПодсистемы.УправлениеДоступом #КонецОбласти #КонецОбласти #КонецЕсли

Catalogs/_ДемоКонтрагенты/ObjectModule

#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ОбработчикиСобытий Процедура ПередЗаписью(Отказ) Если ОбменДанными.Загрузка Тогда Возврат; КонецЕсли; ОбновлениеИнформационнойБазы.ПроверитьОбъектОбработан("Справочник._ДемоКонтрагенты"); КонецПроцедуры #КонецОбласти #КонецЕсли

Catalogs/_ДемоКонтрагенты/Forms/ФормаВыбора/Form/Module

#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. Возврат; КонецЕсли; Если Параметры.ВыборГруппИЭлементов = ИспользованиеГруппИЭлементов.Группы Тогда Элементы.Список.Отображение = ОтображениеТаблицы.Дерево; Элементы.Список.РазрешитьВыборКорня = Истина; ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(Список, "ЭтоГруппа", Истина, ВидСравненияКомпоновкиДанных.Равно); КонецЕсли; Список.Параметры.УстановитьЗначениеПараметра("Пользователь", Пользователи.АвторизованныйПользователь()); // СтандартныеПодсистемы.КонтрольВеденияУчета КонтрольВеденияУчета.ПриСозданииНаСервереФормыСписка(ЭтотОбъект, "Список"); // Конец СтандартныеПодсистемы.КонтрольВеденияУчета КонецПроцедуры #КонецОбласти #Область ОбработчикиСобытийЭлементовТаблицыФормыСписок &НаСервереБезКонтекста Процедура СписокПриПолученииДанныхНаСервере(ИмяЭлемента, Настройки, Строки) // СтандартныеПодсистемы.КонтрольВеденияУчета КонтрольВеденияУчета.ПриПолученииДанныхНаСервере(Настройки, Строки); // Конец СтандартныеПодсистемы.КонтрольВеденияУчета КонецПроцедуры // СтандартныеПодсистемы.КонтрольВеденияУчета &НаКлиенте Процедура Подключаемый_Выбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) КонтрольВеденияУчетаКлиент.ОткрытьОтчетПоПроблемамИзСписка(ЭтотОбъект, "Список", Поле, СтандартнаяОбработка); КонецПроцедуры // Конец СтандартныеПодсистемы.КонтрольВеденияУчета #КонецОбласти

Catalogs/_ДемоКонтрагенты/Forms/ФормаГруппы/Form/Module

 #Область ОбработчикиСобытийФормы &НаСервере Процедура ПриЧтенииНаСервере(ТекущийОбъект) // СтандартныеПодсистемы.УправлениеДоступом Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом"); МодульУправлениеДоступом.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект); КонецЕсли; // Конец СтандартныеПодсистемы.УправлениеДоступом КонецПроцедуры #КонецОбласти

Catalogs/_ДемоКонтрагенты/Forms/ФормаСписка/Form/Module

 #Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. Возврат; КонецЕсли; Список.Параметры.УстановитьЗначениеПараметра("Пользователь", Пользователи.АвторизованныйПользователь()); // СтандартныеПодсистемы.ПодключаемыеКоманды ПараметрыРазмещения = ПодключаемыеКоманды.ПараметрыРазмещения(); ПараметрыРазмещения.КоманднаяПанель = Элементы.КоманднаяПанель; ПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект, ПараметрыРазмещения); // Конец СтандартныеПодсистемы.ПодключаемыеКоманды // СтандартныеПодсистемы.ГрупповоеИзменениеОбъектов МожноРедактировать = ПравоДоступа("Редактирование", Метаданные.Справочники._ДемоНоменклатура); Элементы.ФормаИзменитьВыделенные.Видимость = МожноРедактировать; Элементы.СписокКонтекстноеМенюИзменитьВыделенные.Видимость = МожноРедактировать; // Конец СтандартныеПодсистемы.ГрупповоеИзменениеОбъектов // СтандартныеПодсистемы.КонтрольВеденияУчета КонтрольВеденияУчета.ПриСозданииНаСервереФормыСписка(ЭтотОбъект, "Список"); // Конец СтандартныеПодсистемы.КонтрольВеденияУчета КонецПроцедуры #КонецОбласти #Область ОбработчикиСобытийЭлементовТаблицыФормыСписок &НаКлиенте Процедура СписокПриАктивизацииСтроки(Элемент) // СтандартныеПодсистемы.ПодключаемыеКоманды ПодключаемыеКомандыКлиент.НачатьОбновлениеКоманд(ЭтотОбъект); // Конец СтандартныеПодсистемы.ПодключаемыеКоманды КонецПроцедуры &НаСервереБезКонтекста Процедура СписокПриПолученииДанныхНаСервере(ИмяЭлемента, Настройки, Строки) // СтандартныеПодсистемы.КонтрольВеденияУчета КонтрольВеденияУчета.ПриПолученииДанныхНаСервере(Настройки, Строки); // Конец СтандартныеПодсистемы.КонтрольВеденияУчета КонецПроцедуры #КонецОбласти #Область ОбработчикиКомандФормы // СтандартныеПодсистемы.ГрупповоеИзменениеОбъектов &НаКлиенте Процедура ИзменитьВыделенные(Команда) ГрупповоеИзменениеОбъектовКлиент.ИзменитьВыделенные(Элементы.Список); КонецПроцедуры // Конец СтандартныеПодсистемы.ГрупповоеИзменениеОбъектов // СтандартныеПодсистемы.КонтрольВеденияУчета &НаКлиенте Процедура Подключаемый_Выбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) Экспорт КонтрольВеденияУчетаКлиент.ОткрытьОтчетПоПроблемамИзСписка(ЭтотОбъект, "Список", Поле, СтандартнаяОбработка); КонецПроцедуры // Конец СтандартныеПодсистемы.КонтрольВеденияУчета // СтандартныеПодсистемы.ПодключаемыеКоманды &НаКлиенте Процедура Подключаемый_ВыполнитьКоманду(Команда) ПодключаемыеКомандыКлиент.ВыполнитьКоманду(ЭтотОбъект, Команда, Элементы.Список); КонецПроцедуры &НаСервере Процедура Подключаемый_ВыполнитьКомандуНаСервере(Контекст, Результат) ПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, Контекст, Элементы.Список, Результат); КонецПроцедуры &НаКлиенте Процедура Подключаемый_ОбновитьКоманды() ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Элементы.Список); КонецПроцедуры // Конец СтандартныеПодсистемы.ПодключаемыеКоманды #КонецОбласти

Catalogs/_ДемоКонтрагенты/Forms/ФормаЭлемента/Form/Module

 #Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. Возврат; КонецЕсли; ОбновлениеИнформационнойБазы.ПроверитьОбъектОбработан("Справочник._ДемоКонтрагенты", ЭтотОбъект); // СтандартныеПодсистемы.ВерсионированиеОбъектов ВерсионированиеОбъектов.ПриСозданииНаСервере(ЭтотОбъект); // Конец СтандартныеПодсистемы.ВерсионированиеОбъектов // СтандартныеПодсистемы.Свойства СправочникНаборы = Справочники.НаборыДополнительныхРеквизитовИСведений; ГруппыДляРазмещения = Новый СписокЗначений; ГруппыДляРазмещения.Добавить(СправочникНаборы.Справочник_ДемоКонтрагенты_Основное, Элементы.ГруппаОсновное.Имя); ГруппыДляРазмещения.Добавить("ВсеОстальные", Элементы.ГруппаПрочее.Имя); ДополнительныеПараметры = Новый Структура; ДополнительныеПараметры.Вставить("ИмяЭлементаДляРазмещения", ГруппыДляРазмещения); ДополнительныеПараметры.Вставить("ОтложеннаяИнициализация", Истина); УправлениеСвойствами.ПриСозданииНаСервере(ЭтотОбъект, ДополнительныеПараметры); // Конец СтандартныеПодсистемы.Свойства // СтандартныеПодсистемы.КонтактнаяИнформация ИсключаемыеВиды = Новый Массив; ИсключаемыеВиды.Добавить(Справочники.ВидыКонтактнойИнформации._ДемоАдресКонтрагента); ИсключаемыеВиды.Добавить(Справочники.ВидыКонтактнойИнформации._ДемоEmailКонтрагента); ИсключаемыеВиды.Добавить(Справочники.ВидыКонтактнойИнформации._ДемоSkypeКонтрагенты); УправлениеКонтактнойИнформацией.ПриСозданииНаСервере(ЭтотОбъект, Объект, "ГруппаКонтактнаяИнформация",, ИсключаемыеВиды, Истина); // Конец СтандартныеПодсистемы.КонтактнаяИнформация // СтандартныеПодсистемы.ПодключаемыеКоманды ПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект); // Конец СтандартныеПодсистемы.ПодключаемыеКоманды КонецПроцедуры &НаКлиенте Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) // СтандартныеПодсистемы.Свойства Если УправлениеСвойствамиКлиент.ОбрабатыватьОповещения(ЭтотОбъект, ИмяСобытия, Параметр) Тогда ОбновитьЭлементыДополнительныхРеквизитов(); УправлениеСвойствамиКлиент.ПослеЗагрузкиДополнительныхРеквизитов(ЭтотОбъект); КонецЕсли; // Конец СтандартныеПодсистемы.Свойства КонецПроцедуры &НаСервере Процедура ПриЧтенииНаСервере(ТекущийОбъект) // СтандартныеПодсистемы.Свойства УправлениеСвойствами.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект); // Конец СтандартныеПодсистемы.Свойства // СтандартныеПодсистемы.КонтактнаяИнформация УправлениеКонтактнойИнформацией.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект); // Конец СтандартныеПодсистемы.КонтактнаяИнформация // СтандартныеПодсистемы.ПодключаемыеКоманды ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Объект); // Конец СтандартныеПодсистемы.ПодключаемыеКоманды // СтандартныеПодсистемы.КонтрольВеденияУчета КонтрольВеденияУчета.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект); // Конец СтандартныеПодсистемы.КонтрольВеденияУчета // СтандартныеПодсистемы.УправлениеДоступом Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом"); МодульУправлениеДоступом.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект); КонецЕсли; // Конец СтандартныеПодсистемы.УправлениеДоступом КонецПроцедуры &НаСервере Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) // СтандартныеПодсистемы.Свойства УправлениеСвойствами.ПередЗаписьюНаСервере(ЭтотОбъект, ТекущийОбъект); // Конец СтандартныеПодсистемы.Свойства // СтандартныеПодсистемы.КонтактнаяИнформация УправлениеКонтактнойИнформацией.ПередЗаписьюНаСервере(ЭтотОбъект, ТекущийОбъект); // Конец СтандартныеПодсистемы.КонтактнаяИнформация КонецПроцедуры &НаКлиенте Процедура ПослеЗаписи(ПараметрыЗаписи) Оповестить("Запись__ДемоКонтрагенты", Новый Структура, Объект.Ссылка); КонецПроцедуры &НаСервере Процедура ОбработкаПроверкиЗаполненияНаСервере(Отказ, ПроверяемыеРеквизиты) // СтандартныеПодсистемы.Свойства УправлениеСвойствами.ОбработкаПроверкиЗаполнения(ЭтотОбъект, Отказ, ПроверяемыеРеквизиты); // Конец СтандартныеПодсистемы.Свойства // СтандартныеПодсистемы.КонтактнаяИнформация УправлениеКонтактнойИнформацией.ОбработкаПроверкиЗаполненияНаСервере(ЭтотОбъект, Объект, Отказ); // Конец СтандартныеПодсистемы.КонтактнаяИнформация КонецПроцедуры &НаКлиенте Процедура ПриОткрытии(Отказ) // СтандартныеПодсистемы.Свойства УправлениеСвойствамиКлиент.ПослеЗагрузкиДополнительныхРеквизитов(ЭтотОбъект); // Конец СтандартныеПодсистемы.Свойства // СтандартныеПодсистемы.ПодключаемыеКоманды ПодключаемыеКомандыКлиент.НачатьОбновлениеКоманд(ЭтотОбъект); // Конец СтандартныеПодсистемы.ПодключаемыеКоманды КонецПроцедуры #КонецОбласти #Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура СтраницыПриСменеСтраницы(Элемент, ТекущаяСтраница) // СтандартныеПодсистемы.Свойства Если ЭтотОбъект.ПараметрыСвойств.Свойство(ТекущаяСтраница.Имя) И Не ЭтотОбъект.ПараметрыСвойств.ВыполненаОтложеннаяИнициализация Тогда СвойстваВыполнитьОтложеннуюИнициализацию(); УправлениеСвойствамиКлиент.ПослеЗагрузкиДополнительныхРеквизитов(ЭтотОбъект); КонецЕсли; // Конец СтандартныеПодсистемы.Свойства // СтандартныеПодсистемы.КонтактнаяИнформация Если ЭтотОбъект.ПараметрыКонтактнойИнформации.Свойство(ТекущаяСтраница.Имя) И НЕ ЭтотОбъект.ПараметрыКонтактнойИнформации[ТекущаяСтраница.Имя].ВыполненаОтложеннаяИнициализация Тогда КонтактнаяИнформацияПриСменеСтраницы(); КонецЕсли; // Конец СтандартныеПодсистемы.КонтактнаяИнформация КонецПроцедуры &НаКлиенте Процедура ВидКонтрагентаПриИзменении(Элемент) ЭтоЮридическоеЛицо = Объект.ВидКонтрагента = ПредопределенноеЗначение("Перечисление._ДемоЮридическоеФизическоеЛицо.ЮридическоеЛицо"); Если НЕ ЭтоЮридическоеЛицо Тогда Объект.КПП = ""; КонецЕсли; КонецПроцедуры // СтандартныеПодсистемы.КонтактнаяИнформация &НаКлиенте Процедура СтранаРегистрацииОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) УправлениеКонтактнойИнформациейКлиент.СтранаМираОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка); КонецПроцедуры // Конец СтандартныеПодсистемы.КонтактнаяИнформация #КонецОбласти #Область ОбработчикиКомандФормы // СтандартныеПодсистемы.Свойства &НаКлиенте Процедура Подключаемый_СвойстваВыполнитьКоманду(ЭлементИлиКоманда, НавигационнаяСсылка = Неопределено, СтандартнаяОбработка = Неопределено) УправлениеСвойствамиКлиент.ВыполнитьКоманду(ЭтотОбъект, ЭлементИлиКоманда, СтандартнаяОбработка); КонецПроцедуры // Конец СтандартныеПодсистемы.Свойства #КонецОбласти #Область СлужебныеПроцедурыИФункции // СтандартныеПодсистемы.Свойства &НаСервере Процедура СвойстваВыполнитьОтложеннуюИнициализацию() УправлениеСвойствами.ЗаполнитьДополнительныеРеквизитыВФорме(ЭтотОбъект); КонецПроцедуры &НаКлиенте Процедура ОбновитьЗависимостиДополнительныхРеквизитов() УправлениеСвойствамиКлиент.ОбновитьЗависимостиДополнительныхРеквизитов(ЭтотОбъект); КонецПроцедуры &НаКлиенте Процедура Подключаемый_ПриИзмененииДополнительногоРеквизита(Элемент) УправлениеСвойствамиКлиент.ОбновитьЗависимостиДополнительныхРеквизитов(ЭтотОбъект); КонецПроцедуры &НаСервере Процедура ОбновитьЭлементыДополнительныхРеквизитов() УправлениеСвойствами.ОбновитьЭлементыДополнительныхРеквизитов(ЭтотОбъект); КонецПроцедуры // Конец СтандартныеПодсистемы.Свойства // СтандартныеПодсистемы.КонтактнаяИнформация &НаКлиенте Процедура Подключаемый_КонтактнаяИнформацияПриИзменении(Элемент) УправлениеКонтактнойИнформациейКлиент.ПриИзменении(ЭтотОбъект, Элемент); КонецПроцедуры &НаКлиенте Процедура Подключаемый_КонтактнаяИнформацияНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) ПараметрыОткрытия = Новый Структура("Страна", Объект.СтранаРегистрации); УправлениеКонтактнойИнформациейКлиент.НачалоВыбора(ЭтотОбъект, Элемент, , СтандартнаяОбработка, ПараметрыОткрытия); КонецПроцедуры &НаКлиенте Процедура Подключаемый_КонтактнаяИнформацияПриНажатии(Элемент, СтандартнаяОбработка) УправлениеКонтактнойИнформациейКлиент.НачалоВыбора(ЭтотОбъект, Элемент,, СтандартнаяОбработка); КонецПроцедуры &НаКлиенте Процедура Подключаемый_КонтактнаяИнформацияОчистка(Элемент, СтандартнаяОбработка) УправлениеКонтактнойИнформациейКлиент.Очистка(ЭтотОбъект, Элемент.Имя); КонецПроцедуры &НаКлиенте Процедура Подключаемый_КонтактнаяИнформацияВыполнитьКоманду(Команда) УправлениеКонтактнойИнформациейКлиент.ВыполнитьКоманду(ЭтотОбъект, Команда.Имя); КонецПроцедуры &НаКлиенте Процедура Подключаемый_КонтактнаяИнформацияАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка) УправлениеКонтактнойИнформациейКлиент.АвтоПодбор(Текст, ДанныеВыбора, СтандартнаяОбработка); КонецПроцедуры &НаКлиенте Процедура Подключаемый_КонтактнаяИнформацияОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) УправлениеКонтактнойИнформациейКлиент.ОбработкаВыбора(ЭтотОбъект, ВыбранноеЗначение, Элемент.Имя, СтандартнаяОбработка); КонецПроцедуры &НаСервере Процедура Подключаемый_ОбновитьКонтактнуюИнформацию(Результат) УправлениеКонтактнойИнформацией.ОбновитьКонтактнуюИнформацию(ЭтотОбъект, Объект, Результат); КонецПроцедуры &НаСервере Процедура КонтактнаяИнформацияПриСменеСтраницы() УправлениеКонтактнойИнформацией.ВыполнитьОтложеннуюИнициализацию(ЭтотОбъект, Объект); КонецПроцедуры // Конец СтандартныеПодсистемы.КонтактнаяИнформация // СтандартныеПодсистемы.ПодключаемыеКоманды &НаКлиенте Процедура Подключаемый_ВыполнитьКоманду(Команда) ПодключаемыеКомандыКлиент.ВыполнитьКоманду(ЭтотОбъект, Команда, Объект); КонецПроцедуры &НаСервере Процедура Подключаемый_ВыполнитьКомандуНаСервере(Контекст, Результат) ПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, Контекст, Объект, Результат); КонецПроцедуры &НаКлиенте Процедура Подключаемый_ОбновитьКоманды() ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Объект); КонецПроцедуры // Конец СтандартныеПодсистемы.ПодключаемыеКоманды // СтандартныеПодсистемы.КонтрольВеденияУчета &НаКлиенте Процедура Подключаемый_ОткрытьОтчетПоПроблемам(ЭлементИлиКоманда, НавигационнаяСсылка, СтандартнаяОбработка) КонтрольВеденияУчетаКлиент.ОткрытьОтчетПоПроблемамОбъекта(ЭтотОбъект, Объект.Ссылка, СтандартнаяОбработка); КонецПроцедуры // Конец СтандартныеПодсистемы.КонтрольВеденияУчета #КонецОбласти

Catalogs/_ДемоМестаХранения/ManagerModule

#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ПрограммныйИнтерфейс #Область ДляВызоваИзДругихПодсистем // СтандартныеПодсистемы.ВариантыОтчетов // Определяет список команд отчетов. // // Параметры: // КомандыОтчетов - ТаблицаЗначений - Таблица с командами отчетов. Для изменения. // См. описание 1 параметра процедуры ВариантыОтчетовПереопределяемый.ПередДобавлениемКомандОтчетов(). // Параметры - Структура - Вспомогательные параметры. Для чтения. // См. описание 2 параметра процедуры ВариантыОтчетовПереопределяемый.ПередДобавлениемКомандОтчетов(). // Процедура ДобавитьКомандыОтчетов(КомандыОтчетов, Параметры) Экспорт КонецПроцедуры // Конец СтандартныеПодсистемы.ВариантыОтчетов // СтандартныеПодсистемы.УправлениеДоступом // См. УправлениеДоступомПереопределяемый.ПриЗаполненииСписковСОграничениемДоступа. Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт Ограничение.Текст = "РазрешитьЧтениеИзменение |ГДЕ | ЗначениеРазрешено(Ссылка)"; КонецПроцедуры // Конец СтандартныеПодсистемы.УправлениеДоступом #КонецОбласти #КонецОбласти #КонецЕсли

Catalogs/_ДемоМестаХранения/Forms/ФормаВыбораГруппы/Form/Module

#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. Возврат; КонецЕсли; // Отбор только групп. ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( Список, "ЭтоГруппа", Истина, , , Истина); КонецПроцедуры #КонецОбласти

Catalogs/_ДемоМестаХранения/Forms/ФормаГруппы/Form/Module

 #Область ОбработчикиСобытийФормы &НаСервере Процедура ПриЧтенииНаСервере(ТекущийОбъект) // СтандартныеПодсистемы.УправлениеДоступом Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом"); МодульУправлениеДоступом.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект); КонецЕсли; // Конец СтандартныеПодсистемы.УправлениеДоступом КонецПроцедуры #КонецОбласти

Catalogs/_ДемоМестаХранения/Forms/ФормаСписка/Form/Module

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

Catalogs/_ДемоМестаХранения/Forms/ФормаЭлемента/Form/Module

#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. Возврат; КонецЕсли; // СтандартныеПодсистемы.ПодключаемыеКоманды ПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект); // Конец СтандартныеПодсистемы.ПодключаемыеКоманды КонецПроцедуры &НаСервере Процедура ПриЧтенииНаСервере(ТекущийОбъект) // СтандартныеПодсистемы.ПодключаемыеКоманды ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Объект); // Конец СтандартныеПодсистемы.ПодключаемыеКоманды // СтандартныеПодсистемы.УправлениеДоступом Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом"); МодульУправлениеДоступом.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект); КонецЕсли; // Конец СтандартныеПодсистемы.УправлениеДоступом КонецПроцедуры &НаКлиенте Процедура ПриОткрытии(Отказ) // СтандартныеПодсистемы.ПодключаемыеКоманды ПодключаемыеКомандыКлиент.НачатьОбновлениеКоманд(ЭтотОбъект); // Конец СтандартныеПодсистемы.ПодключаемыеКоманды КонецПроцедуры #КонецОбласти #Область СлужебныеПроцедурыИФункции // СтандартныеПодсистемы.ПодключаемыеКоманды &НаКлиенте Процедура Подключаемый_ВыполнитьКоманду(Команда) ПодключаемыеКомандыКлиент.ВыполнитьКоманду(ЭтотОбъект, Команда, Объект); КонецПроцедуры &НаСервере Процедура Подключаемый_ВыполнитьКомандуНаСервере(Контекст, Результат) ПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, Контекст, Объект, Результат); КонецПроцедуры &НаКлиенте Процедура Подключаемый_ОбновитьКоманды() ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Объект); КонецПроцедуры // Конец СтандартныеПодсистемы.ПодключаемыеКоманды #КонецОбласти

Catalogs/_ДемоНоменклатура/ManagerModule

#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ПрограммныйИнтерфейс #Область ДляВызоваИзДругихПодсистем // СтандартныеПодсистемы.ЗагрузкаДанныхИзФайла // Устанавливает параметры загрузки данных из файла. // // Параметры: // Параметры - Структура - Список параметров. Поля: // * Заголовок - Строка - Заголовок окна. // * ОбязательныеКолонки - Массив - Список имен колонок обязательных для заполнения. // * ТипДанныхКолонки - Соответствие, Ключ - Имя колонки, Значение - Описание типа данных. // Процедура ОпределитьПараметрыЗагрузкиДанныхИзФайла(Параметры) Экспорт Параметры.Заголовок = НСтр("ru = 'Демо: Номенклатура'"); ОписаниеТипаШтрихкод = Новый ОписаниеТипов("Строка",, Новый КвалификаторыСтроки(13)); ОписаниеТипаНаименование = Новый ОписаниеТипов("Строка",, Новый КвалификаторыСтроки(100)); Параметры.ТипДанныхКолонки.Вставить("Штрихкод", ОписаниеТипаШтрихкод); Параметры.ТипДанныхКолонки.Вставить("Наименование", ОписаниеТипаНаименование); КонецПроцедуры // Производит сопоставление загружаемых данных с данными в ИБ. // // Параметры: // ЗагружаемыеДанные - ТаблицаЗначений - таблица значений с загружаемыми данными: // * СопоставленныйОбъект - СправочникСсылка - Ссылка на сопоставленный объект. Заполняется внутри процедуры // * <другие колонки> - Произвольный - Состав колонок соответствует макету "ЗагрузкаИзФайла". // Процедура СопоставитьЗагружаемыеДанныеИзФайла(ЗагружаемыеДанные) Экспорт Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ДанныеДляСопоставления.Штрихкод КАК Штрихкод, | ДанныеДляСопоставления.Наименование КАК Наименование, | ДанныеДляСопоставления.Идентификатор КАК Идентификатор |ПОМЕСТИТЬ ДанныеДляСопоставления |ИЗ | &ДанныеДляСопоставления КАК ДанныеДляСопоставления | |ИНДЕКСИРОВАТЬ ПО | ДанныеДляСопоставления.Штрихкод, | ДанныеДляСопоставления.Наименование, | ДанныеДляСопоставления.Идентификатор |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | _ДемоНоменклатура.Ссылка КАК Ссылка, | _ДемоНоменклатура.Штрихкод КАК Штрихкод, | ДанныеДляСопоставления.Идентификатор КАК Идентификатор |ПОМЕСТИТЬ СопоставленнаяНоменклатураПоШтрихкоду |ИЗ | ДанныеДляСопоставления КАК ДанныеДляСопоставления | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник._ДемоНоменклатура КАК _ДемоНоменклатура | ПО (_ДемоНоменклатура.Штрихкод = ДанныеДляСопоставления.Штрихкод) | И (_ДемоНоменклатура.Штрихкод <> """") | И (_ДемоНоменклатура.ПометкаУдаления = ЛОЖЬ) |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ДанныеДляСопоставления.Наименование КАК Наименование, | ДанныеДляСопоставления.Идентификатор КАК Идентификатор |ПОМЕСТИТЬ ДанныеДляСопоставленияПоНаименованию |ИЗ | ДанныеДляСопоставления КАК ДанныеДляСопоставления | ВНУТРЕННЕЕ СОЕДИНЕНИЕ СопоставленнаяНоменклатураПоШтрихкоду КАК СопоставленнаяНоменклатураПоШтрихкоду | ПО ДанныеДляСопоставления.Штрихкод = СопоставленнаяНоменклатураПоШтрихкоду.Штрихкод |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | _ДемоНоменклатура.Ссылка КАК Номенклатура, | ДанныеДляСопоставленияПоНаименованию.Идентификатор КАК Идентификатор |ИЗ | ДанныеДляСопоставленияПоНаименованию КАК ДанныеДляСопоставленияПоНаименованию | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник._ДемоНоменклатура КАК _ДемоНоменклатура | ПО (_ДемоНоменклатура.Наименование = ДанныеДляСопоставленияПоНаименованию.Наименование) | И (_ДемоНоменклатура.ПометкаУдаления = ЛОЖЬ) | |ОБЪЕДИНИТЬ ВСЕ | |ВЫБРАТЬ | СопоставленнаяНоменклатураПоШтрихкоду.Ссылка, | СопоставленнаяНоменклатураПоШтрихкоду.Идентификатор |ИЗ | СопоставленнаяНоменклатураПоШтрихкоду КАК СопоставленнаяНоменклатураПоШтрихкоду"; Запрос.УстановитьПараметр("ДанныеДляСопоставления", ЗагружаемыеДанные); РезультатЗапроса = Запрос.Выполнить().Выбрать(); Пока РезультатЗапроса.Следующий() Цикл Фильтр = Новый Структура("Идентификатор", РезультатЗапроса.Идентификатор); Строки = ЗагружаемыеДанные.НайтиСтроки(Фильтр); Для Каждого Строка Из Строки Цикл Строка.ОбъектСопоставления = РезультатЗапроса.Номенклатура; КонецЦикла; КонецЦикла; КонецПроцедуры // Загрузка данных из файла. // // Параметры: // ЗагружаемыеДанные -ТаблицаЗначений - ТаблицаЗначений с колонками: // * СопоставленныйОбъект - СправочникСсылка - Ссылка на сопоставленный объект. // * РезультатСопоставленияСтроки - Строка - Статус загрузки, возможны варианты: Создан, Обновлен, Пропущен. // * ОписаниеОшибки - Строка - расшифровка ошибки загрузки данных. // * Идентификатор - Число - Уникальный номер строки // <другие колонки> - Произвольный - Строки за загружаемого файла в соответствие с макетом. // ПараметрыЗагрузки - Структура - Параметры загрузки. // * СоздаватьНовые - Булево - Требуется ли создавать новые элементы справочника. // * ОбновлятьСуществующие - Булево - Требуется ли обновлять элементы справочника. // Отказ - Булево - Отмена загрузки. // Процедура ЗагрузитьИзФайла(ЗагружаемыеДанные, ПараметрыЗагрузки, Отказ) Экспорт Для каждого СтрокаТаблицы Из ЗагружаемыеДанные Цикл ОбъектСопоставленияЗаполнен = ЗначениеЗаполнено(СтрокаТаблицы.ОбъектСопоставления); Если (ОбъектСопоставленияЗаполнен И ПараметрыЗагрузки.ОбновлятьСуществующие = 0) ИЛИ (НЕ ОбъектСопоставленияЗаполнен И ПараметрыЗагрузки.СоздаватьНовые = 0) Тогда СтрокаТаблицы.РезультатСопоставленияСтроки = "Пропущен"; Продолжить; КонецЕсли; НачатьТранзакцию(); Попытка Если ОбъектСопоставленияЗаполнен Тогда Блокировка = Новый БлокировкаДанных; ЭлементБлокировки = Блокировка.Добавить("Справочник._ДемоНоменклатура"); ЭлементБлокировки.УстановитьЗначение("Ссылка", СтрокаТаблицы.ОбъектСопоставления); ЭлементСправочника = СтрокаТаблицы.ОбъектСопоставления.ПолучитьОбъект(); Если ЭлементСправочника = Неопределено Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Номенклатура с артикулом %1 не существует.'"), СтрокаТаблицы.Артикул); КонецЕсли; СтрокаТаблицы.РезультатСопоставленияСтроки = "Обновлен"; Иначе ЭлементСправочника = СоздатьЭлемент(); СтрокаТаблицы.РезультатСопоставленияСтроки = "Создан"; КонецЕсли; ЭлементСправочника.Наименование = СтрокаТаблицы.Наименование; ЭлементСправочника.Штрихкод = СтрокаТаблицы.Штрихкод; Если ЗначениеЗаполнено(СтрокаТаблицы.Страна) Тогда ЭлементСправочника.СтранаПроисхождения = Справочники.СтраныМира.НайтиПоНаименованию(СтрокаТаблицы.Страна); КонецЕсли; Если ЗначениеЗаполнено(СтрокаТаблицы.Родитель) Тогда Родитель = НайтиПоНаименованию(СтрокаТаблицы.Родитель, Истина); Если Родитель = Неопределено ИЛИ НЕ Родитель.ЭтоГруппа ИЛИ Родитель.Пустая() Тогда Родитель = СоздатьГруппу(); Родитель.Наименование = СтрокаТаблицы.Родитель; Родитель.Записать(); КонецЕсли; ЭлементСправочника.Родитель = Родитель.Ссылка; КонецЕсли; ВидНоменклатуры = Справочники._ДемоВидыНоменклатуры.НайтиПоНаименованию(СтрокаТаблицы.ВидНоменклатуры, Истина); Если ВидНоменклатуры = Неопределено ИЛИ ВидНоменклатуры.Пустая() Тогда ВидНоменклатуры = Справочники._ДемоВидыНоменклатуры.СоздатьЭлемент(); ВидНоменклатуры.Наименование = СтрокаТаблицы.ВидНоменклатуры; ВидНоменклатуры.Записать(); КонецЕсли; ЭлементСправочника.ВидНоменклатуры = ВидНоменклатуры.Ссылка; Если НЕ ЭлементСправочника.ПроверитьЗаполнение() Тогда СтрокаТаблицы.РезультатСопоставленияСтроки = "Пропущен"; СообщенияПользователю = ПолучитьСообщенияПользователю(Истина); Если СообщенияПользователю.Количество()>0 Тогда ТекстСообщений = ""; Для каждого СообщениеПользователю Из СообщенияПользователю Цикл ТекстСообщений = ТекстСообщений + СообщениеПользователю.Текст + Символы.ПС; КонецЦикла; СтрокаТаблицы.ОписаниеОшибки = ТекстСообщений; КонецЕсли; ОтменитьТранзакцию(); Иначе ЭлементСправочника.Записать(); СтрокаТаблицы.ОбъектСопоставления = ЭлементСправочника.Ссылка; ЗафиксироватьТранзакцию(); КонецЕсли; Исключение ОтменитьТранзакцию(); Причина = КраткоеПредставлениеОшибки(ИнформацияОбОшибке()); СтрокаТаблицы.РезультатСопоставленияСтроки = "Пропущен"; СтрокаТаблицы.ОписаниеОшибки = НСтр("ru = 'Невозможна запись из-за некорректности данных'"); КонецПопытки; КонецЦикла; КонецПроцедуры // Производит сопоставление данных, загружаемых в табличную часть Аналоги, // с данными в ИБ, и заполняет параметры АдресТаблицыСопоставления и СписокНеоднозначностей. // // Параметры: // АдресЗагружаемыхДанных - Строка - Адрес временного хранилища с таблицей значений, в которой // находятся загруженные данные из файла. Состав колонок: // * Идентификатор - Число - Порядковый номер строки; // * остальные колонки соответствуют колонкам макета ЗагрузкаИзФайла. // АдресТаблицыСопоставления - Строка - Адрес временного хранилища с пустой таблицей значений, // являющейся копией табличной части документа, // которую необходимо заполнить из таблицы АдресЗагружаемыхДанных. // СписокНеоднозначностей - ТаблицаЗначений - Список неоднозначных значений, для которых в ИБ имеется несколько // подходящих вариантов. // * Колонка - Строка - Имя колонки, в которой была обнаружена неоднозначность; // * Идентификатор - Число - Идентификатор строки, в которой была обнаружена неоднозначность. // ПолноеИмяТабличнойЧасти - Строка - Полное имя табличной части, в которую загружаются данные. // ДополнительныеПараметры - ЛюбойТип - Любые дополнительные сведения. // Процедура СопоставитьЗагружаемыеДанные(АдресЗагружаемыхДанных, АдресТаблицыСопоставления, СписокНеоднозначностей, ПолноеИмяТабличнойЧасти, ДополнительныеПараметры) Экспорт Аналоги = ПолучитьИзВременногоХранилища(АдресТаблицыСопоставления); ЗагружаемыеДанные = ПолучитьИзВременногоХранилища(АдресЗагружаемыхДанных); // совместимость номенклатуры СовместимостьНоменклатуры = Новый Соответствие; Для каждого Значение Из Метаданные.Перечисления._ДемоСовместимостьНоменклатуры.ЗначенияПеречисления Цикл Имя = ВРег(Значение.Представление()); СовместимостьНоменклатуры.Вставить(Имя, Перечисления._ДемоСовместимостьНоменклатуры[Значение.Имя]); КонецЦикла; МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; ВидНоменклатуры = ДополнительныеПараметры.ВидНоменклатуры; Для каждого СтрокаТаблицы Из ЗагружаемыеДанные Цикл Аналог = Аналоги.Добавить(); Аналог.Идентификатор = СтрокаТаблицы.Идентификатор; Аналог.Аналог = НайтиПоНаименованию(СтрокаТаблицы.Наименование); Аналог.Совместимость = СовместимостьНоменклатуры.Получить(ВРег(СтрокаТаблицы.Совместимость)); КонецЦикла; ПоместитьВоВременноеХранилище(Аналоги, АдресТаблицыСопоставления); КонецПроцедуры // Конец СтандартныеПодсистемы.ЗагрузкаДанныхИзФайла // СтандартныеПодсистемы.ГрупповоеИзменениеОбъектов // Возвращает реквизиты объекта, которые не рекомендуется редактировать // с помощью обработки группового изменения реквизитов. // // Возвращаемое значение: // Массив - список имен реквизитов объекта. Функция РеквизитыНеРедактируемыеВГрупповойОбработке() Экспорт НеРедактируемыеРеквизиты = Новый Массив; НеРедактируемыеРеквизиты.Добавить("СкрытыйРеквизит"); Возврат НеРедактируемыеРеквизиты; КонецФункции // Конец СтандартныеПодсистемы.ГрупповоеИзменениеОбъектов // СтандартныеПодсистемы.ЗапретРедактированияРеквизитовОбъектов // См. ЗапретРедактированияРеквизитовОбъектовПереопределяемый.ПриОпределенииОбъектовСЗаблокированнымиРеквизитами. Функция ПолучитьБлокируемыеРеквизитыОбъекта() Экспорт БлокируемыеРеквизиты = Новый Массив; БлокируемыеРеквизиты.Добавить("Код"); БлокируемыеРеквизиты.Добавить("ВидНоменклатуры"); Возврат БлокируемыеРеквизиты; КонецФункции // Конец СтандартныеПодсистемы.ЗапретРедактированияРеквизитовОбъектов // СтандартныеПодсистемы.ПоискИУдалениеДублей // Анализирует пары ссылок справочника на возможность замены одной на другую // во всех местах использования с прикладной точки зрения. // Проверки на запрет замены групп и ссылок разных типов производятся автоматически при начале замены. // // Параметры: // ПарыЗамен - Соответствие - Ключ - что будет заменено, значение - на что будет заменено. // Параметры - Структура - Набор флагов, описывающих действие с заменяемыми элементами. // Содержит необязательные реквизиты: // * СпособУдаления - Строка, может принимать значения: // "Непосредственно" - Если после замены ссылка нигде не используется, // то она будет удалена непосредственно // "Пометка" - Если после замены ссылка не используется, то // она будет помечена на удаление. // Любые другие значения говорят о том, что заменяемая ссылка не будет изменена. // // Возвращаемое значение: // Соответствие - Ключ - исходная ссылка, значение - строка - описание, почему замена недопустима. // Если все замены допустимы, то возвращается пустое соответствие; // Функция ВозможностьЗаменыЭлементов(Знач ПарыЗамен, Знач Параметры = Неопределено) Экспорт СпособУдаления = ""; Если Параметры <> Неопределено Тогда Параметры.Свойство("СпособУдаления", СпособУдаления); КонецЕсли; // В качестве примера: запрещено заменять номенклатуру с кодом 000000001. ЗапрещеннаяСсылка = НайтиПоКоду("000000001"); Результат = Новый Соответствие; Для Каждого КлючЗначение Из ПарыЗамен Цикл ТекущаяСсылка = КлючЗначение.Ключ; ЦелеваяСсылка = КлючЗначение.Значение; Если ТекущаяСсылка = ЦелеваяСсылка Тогда Продолжить; ИначеЕсли ТекущаяСсылка = ЗапрещеннаяСсылка Тогда Ошибка = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Номенклатуру ""%1"" с кодом 000000001 заменять запрещено.'"), ТекущаяСсылка); Результат.Вставить(ТекущаяСсылка, Ошибка); Продолжить; КонецЕсли; // Разрешаем заменять одну ссылку номенклатуры на другую только если они одного вида // или вид номенклатуры не заполнен. ТекущийВид = ТекущаяСсылка.ВидНоменклатуры; ЦелевойВид = ЦелеваяСсылка.ВидНоменклатуры; МожноЗаменять = ТекущийВид.Пустая() Или ЦелевойВид.Пустая() Или ТекущийВид = ЦелевойВид; Если МожноЗаменять Тогда // Проверим по флагам, возможно объект нельзя будет удалять, так как он нам важен. Если СпособУдаления = "Непосредственно" И ТекущаяСсылка = ЗапрещеннаяСсылка Тогда Ошибка = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Номенклатуру ""%1"" с кодом 000000001 запрещено удалять безвозвратно.'"), ТекущаяСсылка); Результат.Вставить(ТекущаяСсылка, Ошибка); КонецЕсли; Иначе Ошибка = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'У элемента ""%1"" вид номенклатуры ""%2"", а у ""%3"" - ""%4""'"), ТекущаяСсылка, ТекущийВид, ЦелеваяСсылка, ЦелевойВид); Результат.Вставить(ТекущаяСсылка, Ошибка); КонецЕсли; КонецЦикла; Возврат Результат; КонецФункции // Вызывается для определения прикладных параметров поиска дублей. // // Параметры: // // ПараметрыПоиска - Структура - Предлагаемые параметры поиска. Содержит поля: // // * ПравилаПоиска - ТаблицаЗначений - Предлагаемые правила сравнения для объектов. // Может быть изменена для установки новых вариантов. Содержит колонки. // ** Реквизит - Строка - Имя реквизита для сравнения. // ** Правило - Строка - Правило сравнения: "Равно" - сравнение по равенству, "Подобно" -подобие строк, // "" - пустая строка - не сравнивать. // // * КомпоновщикОтбора - КомпоновщикНастроекКомпоновкиДанных - Инициализированный компоновщик для // предварительного отбора. Может быть изменен, например, для // усиления отборов. // // * ОграниченияСравнения - Массив - Предназначен для заполнения описания прикладных правил-ограничений. // Должен быть дополнен структурами с полями: // ** Представление - Строка - Описание правила-ограничения для пользователя. // ** ДополнительныеПоля - Строка - Список дополнительных реквизитов запятую, необходимых для // дополнительного анализа. // // * КоличествоЭлементовДляСравнения - Число - Количество кандидатов в дубли, передаваемых одним вызовом // обработчику. // // ДополнительныеПараметры - Произвольный - Значение, переданное при вызове программного интерфейса // ОбщегоНазначения.НайтиДублиЭлементов. // При вызове пользователем из обработки "ПоискИЗаменаДублей" равно Неопределено. // Процедура ПараметрыПоискаДублей(ПараметрыПоиска, ДополнительныеПараметры = Неопределено) Экспорт ОграниченияСравнения = ПараметрыПоиска.ОграниченияСравнения; ПравилаПоиска = ПараметрыПоиска.ПравилаПоиска; КомпоновщикОтбора = ПараметрыПоиска.КомпоновщикОтбора; // Общие ограничения для всех случаев. // Общие ограничения Ограничение = Новый Структура; Ограничение.Вставить("Представление", НСтр("ru = 'Вид номенклатуры у сравниваемых элементов одинаков.'")); Ограничение.Вставить("ДополнительныеПоля", "ВидНоменклатуры"); ОграниченияСравнения.Добавить(Ограничение); // Размер таблицы для передачи в обработчик. ПараметрыПоиска.КоличествоЭлементовДляСравнения = 100; // Анализ режима работы - варианта вызова. Если ДополнительныеПараметры = Неопределено Тогда // Внешний вызов из обработки, больше ничего делать не надо, но можно отредактировать параметры пользователя. Возврат; КонецЕсли; // Вызов из программного интерфейса. ЭлементыОтбора = КомпоновщикОтбора.Настройки.Отбор.Элементы; ЭлементыОтбора.Очистить(); ПравилаПоиска.Очистить(); Если ДополнительныеПараметры.Режим = "КонтрольПоНаименованию" Тогда // Ищем среди неудаленных таких же по равенству Наименования и ВидаНоменклатуры. // Фиксируем условия отбора Отбор = ЭлементыОтбора.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); Отбор.Использование = Истина; Отбор.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ПометкаУдаления"); Отбор.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; Отбор.ПравоеЗначение = Ложь; СтрокаПравила = ПравилаПоиска.Добавить(); СтрокаПравила.Реквизит = "Наименование"; СтрокаПравила.Правило = "Равно"; СтрокаПравила = ПравилаПоиска.Добавить(); СтрокаПравила.Реквизит = "ВидНоменклатуры"; СтрокаПравила.Правило = "Равно"; ИначеЕсли ДополнительныеПараметры.Режим = "ПоискПохожихПоНаименованию" Тогда // Ищем все похожие по наименованию. СтрокаПравила = ПравилаПоиска.Добавить(); СтрокаПравила.Реквизит = "Наименование"; СтрокаПравила.Правило = "Подобно"; КонецЕсли; КонецПроцедуры // Вызывается для определения дублей по прикладным правилам. // // Параметры: // // ТаблицаКандидатов - ТаблицаЗначений - Описывает кандидатов в дубли. Содержит колонки: // - Ссылка1 - ЛюбаяСсылка - Ссылка на элемент первого кандидата. // - Ссылка2 - ЛюбаяСсылка - Ссылка на элемент второго кандидата. // - ЭтоДубли - Булево - Флаг того, что кандидаты действительно являются дублями. По умолчанию содержит // значение Ложь, может быть изменено на Истина, если кандидаты - действительно // дубли. // - Поля1 - Структура - Содержит поля Код, Наименование и дополнительные поля первого кандидата, // указанные в ПараметрыПоискаДублей. // - Поля2 - Структура - Содержит поля Код, Наименование и дополнительные поля второго кандидата, // указанные в ПараметрыПоискаДублей. // // ДополнительныеПараметры - Произвольный - Значение, переданное при вызове программного интерфейса // ОбщегоНазначения.НайтиДублиЭлементов. // При вызове пользователем из обработки "ПоискИЗаменаДублей" равно Неопределено. // Процедура ПриПоискеДублей(ТаблицаКандидатов, ДополнительныеПараметры = Неопределено) Экспорт Если ДополнительныеПараметры = Неопределено Тогда // Общие проверки Для Каждого Вариант Из ТаблицаКандидатов Цикл Если Вариант.Поля1.ВидНоменклатуры = Вариант.Поля2.ВидНоменклатуры Тогда Вариант.ЭтоДубли = Истина; КонецЕсли; КонецЦикла; ИначеЕсли ДополнительныеПараметры.Режим = "КонтрольПоНаименованию" Тогда // Исключим себя самого Для Каждого Вариант Из ТаблицаКандидатов Цикл Если Вариант.Ссылка1 <> ДополнительныеПараметры.Ссылка Или Вариант.Ссылка2 <> ДополнительныеПараметры.Ссылка Тогда Вариант.ЭтоДубли = Истина; КонецЕсли; КонецЦикла; ИначеЕсли ДополнительныеПараметры.Режим = "ПоискПохожихПоНаименованию" Тогда // Общие проверки Для Каждого Вариант Из ТаблицаКандидатов Цикл Если Вариант.Поля1.ВидНоменклатуры = Вариант.Поля2.ВидНоменклатуры Тогда Вариант.ЭтоДубли = Истина; КонецЕсли; КонецЦикла; КонецЕсли; КонецПроцедуры // Конец СтандартныеПодсистемы.ПоискИУдалениеДублей // СтандартныеПодсистемы.УправлениеДоступом // См. УправлениеДоступомПереопределяемый.ПриЗаполненииСписковСОграничениемДоступа. Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт Ограничение.Текст = "РазрешитьЧтение |ГДЕ | ИСТИНА |; |РазрешитьИзменениеЕслиРазрешеноЧтение |ГДЕ | ЭтоГруппа | ИЛИ ЗначениеРазрешено(Ссылка)"; КонецПроцедуры // Конец СтандартныеПодсистемы.УправлениеДоступом #КонецОбласти #КонецОбласти #КонецЕсли

Catalogs/_ДемоНоменклатура/ObjectModule

#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ПрограммныйИнтерфейс #Область ДляВызоваИзДругихПодсистем // СтандартныеПодсистемы.УправлениеДоступом // См. УправлениеДоступом.ЗаполнитьНаборыЗначенийДоступа. Процедура ЗаполнитьНаборыЗначенийДоступа(Таблица) Экспорт // Логика ограничения: // Чтения: Без ограничения. // Изменения: Без ограничения. // Чтение, Добавление, Изменение: набор №0. Строка = Таблица.Добавить(); Строка.ЗначениеДоступа = Перечисления.ДополнительныеЗначенияДоступа.ДоступРазрешен; КонецПроцедуры // Конец СтандартныеПодсистемы.УправлениеДоступом #КонецОбласти #КонецОбласти #Область ОбработчикиСобытий // Для внутреннего использования. // Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты) // Проверка на наличие дублей по наименованию и виду номенклатуры. ДополнительныеПараметры = Новый Структура; ДополнительныеПараметры.Вставить("Режим", "КонтрольПоНаименованию"); ДополнительныеПараметры.Вставить("Ссылка", Ссылка); Дубли = ПоискИУдалениеДублей.НайтиДублиЭлемента("Справочник._ДемоНоменклатура", ЭтотОбъект, ДополнительныеПараметры); Если Дубли.Количество() > 0 Тогда Ошибка = НСтр("ru = 'Номенклатура с таким наименованием и видом уже существует.'"); ОбщегоНазначенияКлиентСервер.СообщитьПользователю(Ошибка, , "Объект.Наименование", , Отказ); КонецЕсли; КонецПроцедуры #КонецОбласти #КонецЕсли

Catalogs/_ДемоНоменклатура/Forms/ФормаСписка/Form/Module

 #Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) МожноРедактировать = ПравоДоступа("Редактирование", Метаданные.Справочники._ДемоНоменклатура); // СтандартныеПодсистемы.ГрупповоеИзменениеОбъектов Элементы.ФормаИзменитьВыделенные.Видимость = МожноРедактировать; Элементы.СписокКонтекстноеМенюИзменитьВыделенные.Видимость = МожноРедактировать; // Конец СтандартныеПодсистемы.ГрупповоеИзменениеОбъектов // СтандартныеПодсистемы.ПоискИУдалениеДублей Элементы.ФормаОбъединитьВыделенные.Видимость = МожноРедактировать; Элементы.СписокКонтекстноеМенюОбъединитьВыделенные.Видимость = МожноРедактировать; Элементы.ФормаЗаменитьИУдалить.Видимость = МожноРедактировать; Элементы.СписокКонтекстноеМенюЗаменитьИУдалить.Видимость = МожноРедактировать; Элементы.ФормаПоказатьМестаИспользования.Видимость = МожноРедактировать; // Конец СтандартныеПодсистемы.ПоискИУдалениеДублей // СтандартныеПодсистемы.КонтрольВеденияУчета КонтрольВеденияУчета.ПриСозданииНаСервереФормыСписка(ЭтотОбъект, "Список"); // Конец СтандартныеПодсистемы.КонтрольВеденияУчета КонецПроцедуры #КонецОбласти #Область ОбработчикиСобытийЭлементовТаблицыФормыСписок &НаКлиенте Процедура СписокВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) // СтандартныеПодсистемы.ОценкаПроизводительности КлючеваяОперация = "_ДемоОткрытиеФормыЭлемента"; ОценкаПроизводительностиКлиент.НачатьЗамерВремени(Истина, КлючеваяОперация); КлючеваяОперация = "_ДемоОткрытиеФормыЭлементаТехнологическая"; Для Индекс = СтрДлина(КлючеваяОперация) По 998 Цикл КлючеваяОперация = КлючеваяОперация + "_"; КонецЦикла; КлючеваяОперация = КлючеваяОперация + "☺"; ОценкаПроизводительностиКлиент.НачатьЗамерВремениТехнологический(Истина, КлючеваяОперация); КлючеваяОперация = "_ДемоОткрытиеФормыЭлементаПроизвольныйКомментарий"; УИДЗамераСКомментарием = ОценкаПроизводительностиКлиент.НачатьЗамерВремени(Истина, КлючеваяОперация); Комментарий = НСтр("ru = 'Демо: Произвольный комментарий'"); ОценкаПроизводительностиКлиент.УстановитьКомментарийЗамера(УИДЗамераСКомментарием, Комментарий); // Конец СтандартныеПодсистемы.ОценкаПроизводительности КонецПроцедуры &НаСервереБезКонтекста Процедура СписокПриПолученииДанныхНаСервере(ИмяЭлемента, Настройки, Строки) // СтандартныеПодсистемы.КонтрольВеденияУчета КонтрольВеденияУчета.ПриПолученииДанныхНаСервере(Настройки, Строки); // Конец СтандартныеПодсистемы.КонтрольВеденияУчета КонецПроцедуры #КонецОбласти #Область ОбработчикиКомандФормы // СтандартныеПодсистемы.ГрупповоеИзменениеОбъектов &НаКлиенте Процедура ИзменитьВыделенные(Команда) ГрупповоеИзменениеОбъектовКлиент.ИзменитьВыделенные(Элементы.Список); КонецПроцедуры // Конец СтандартныеПодсистемы.ГрупповоеИзменениеОбъектов // СтандартныеПодсистемы.КонтрольВеденияУчета &НаКлиенте Процедура Подключаемый_Выбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) Экспорт КонтрольВеденияУчетаКлиент.ОткрытьОтчетПоПроблемамИзСписка(ЭтотОбъект, "Список", Поле, СтандартнаяОбработка); КонецПроцедуры // Конец СтандартныеПодсистемы.КонтрольВеденияУчета // СтандартныеПодсистемы.ПоискИУдалениеДублей &НаКлиенте Процедура ОбъединитьВыделенные(Команда) ПоискИУдалениеДублейКлиент.ОбъединитьВыделенные(Элементы.Список); КонецПроцедуры &НаКлиенте Процедура ПоказатьМестаИспользования(Команда) ПоискИУдалениеДублейКлиент.ПоказатьМестаИспользования(Элементы.Список); КонецПроцедуры &НаКлиенте Процедура ЗаменитьИУдалить(Команда) // СтандартныеПодсистемы.ОценкаПроизводительности ЦентрМониторингаКлиент.ЗаписатьОперациюБизнесСтатистики("_ДемоИнформацияКлиента._ДемоНоменклатура.ЗаменитьИУдалить.Нажатие", 1); // Конец СтандартныеПодсистемы.ОценкаПроизводительности ПоискИУдалениеДублейКлиент.ЗаменитьВыделенные(Элементы.Список); КонецПроцедуры // Конец СтандартныеПодсистемы.ПоискИУдалениеДублей #КонецОбласти

Catalogs/_ДемоНоменклатура/Forms/ФормаЭлемента/Form/Module

 #Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. Возврат; КонецЕсли; // Установка значения реквизита АдресКартинки. Если Не ЗначениеЗаполнено(Объект.Ссылка) Тогда Если Не Объект.ФайлКартинки.Пустая() Тогда АдресКартинки = ПолучитьНавигационнуюСсылкуКартинки(Объект.ФайлКартинки, УникальныйИдентификатор) Иначе АдресКартинки = ""; КонецЕсли; КонецЕсли; // СтандартныеПодсистемы.ЗапретРедактированияРеквизитовОбъектов ЗапретРедактированияРеквизитовОбъектов.ЗаблокироватьРеквизиты(ЭтотОбъект); // Конец СтандартныеПодсистемы.ЗапретРедактированияРеквизитовОбъектов // СтандартныеПодсистемы.Свойства ДополнительныеПараметры = Новый Структура; ДополнительныеПараметры.Вставить("ИмяЭлементаДляРазмещения", "ГруппаДополнительныеРеквизиты"); УправлениеСвойствами.ПриСозданииНаСервере(ЭтотОбъект, ДополнительныеПараметры); // Конец СтандартныеПодсистемы.Свойства // СтандартныеПодсистемы.УправлениеДоступом УправлениеДоступом.ПриСозданииФормыЗначенияДоступа(ЭтотОбъект); // Конец СтандартныеПодсистемы.УправлениеДоступом // СтандартныеПодсистемы.ЦентрМониторинга // Подсчитываем количество созданий формы, стандартный разделитель ".". Комментарий = Строка(ПолучитьСкоростьКлиентскогоСоединения()); ЦентрМониторинга.ЗаписатьОперациюБизнесСтатистики("Справочник._ДемоНоменклатура.ПриСозданииНаСервере", 1, Комментарий); // Подсчитываем количество созданий формы с картинкой и без, не стандартный разделитель ";". Если ЗначениеЗаполнено(АдресКартинки) Тогда ПараметрБизнесСтатистики = "ЕстьКартинка"; Иначе ПараметрБизнесСтатистики = "НетКартинки"; КонецЕсли; ИмяОперации = "Справочник;_ДемоНоменклатура;ПриСозданииНаСервере;" + ПараметрБизнесСтатистики; ЦентрМониторинга.ЗаписатьОперациюБизнесСтатистики(ИмяОперации, 1, Комментарий,";"); // Конец СтандартныеПодсистемы.ЦентрМониторинга // СтандартныеПодсистемы.СклонениеПредставленийОбъектов СклонениеПредставленийОбъектов.ПриСозданииНаСервере(ЭтотОбъект, Объект.Наименование); // Конец СтандартныеПодсистемы.СклонениеПредставленийОбъектов КонецПроцедуры &НаКлиенте Процедура ПриОткрытии(Отказ) // СтандартныеПодсистемы.ОценкаПроизводительности УникальныйИдентификаторЗамера = ОценкаПроизводительностиКлиент.НачатьЗамерВремени(Ложь, "_ДемоПриОткрытииРучнойЗамер"); ОценкаПроизводительностиКлиент.ЗавершитьЗамерВремени(УникальныйИдентификаторЗамера); // Конец СтандартныеПодсистемы.ОценкаПроизводительности // СтандартныеПодсистемы.Свойства УправлениеСвойствамиКлиент.ПослеЗагрузкиДополнительныхРеквизитов(ЭтотОбъект); // Конец СтандартныеПодсистемы.Свойства КонецПроцедуры &НаКлиенте Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) // СтандартныеПодсистемы.Свойства Если УправлениеСвойствамиКлиент.ОбрабатыватьОповещения(ЭтотОбъект, ИмяСобытия, Параметр) Тогда ОбновитьЭлементыДополнительныхРеквизитов(); УправлениеСвойствамиКлиент.ПослеЗагрузкиДополнительныхРеквизитов(ЭтотОбъект); КонецЕсли; // Конец СтандартныеПодсистемы.Свойства КонецПроцедуры &НаСервере Процедура ПриЧтенииНаСервере(ТекущийОбъект) Если Не ТекущийОбъект.ФайлКартинки.Пустая() Тогда АдресКартинки = ПолучитьНавигационнуюСсылкуКартинки(ТекущийОбъект.ФайлКартинки, УникальныйИдентификатор) Иначе АдресКартинки = ""; КонецЕсли; ЗаписанныйВидНоменклатуры = ТекущийОбъект.ВидНоменклатуры; // СтандартныеПодсистемы.Свойства УправлениеСвойствами.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект); // Конец СтандартныеПодсистемы.Свойства // СтандартныеПодсистемы.КонтрольВеденияУчета КонтрольВеденияУчета.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект); // Конец СтандартныеПодсистемы.КонтрольВеденияУчета // СтандартныеПодсистемы.УправлениеДоступом Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом"); МодульУправлениеДоступом.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект); КонецЕсли; // Конец СтандартныеПодсистемы.УправлениеДоступом КонецПроцедуры &НаСервере Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) // СтандартныеПодсистемы.Свойства УправлениеСвойствами.ПередЗаписьюНаСервере(ЭтотОбъект, ТекущийОбъект); // Конец СтандартныеПодсистемы.Свойства КонецПроцедуры &НаСервере Процедура ПриЗаписиНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) ЗаписанныйВидНоменклатуры = ТекущийОбъект.ВидНоменклатуры; // СтандартныеПодсистемы.РаботаСФайлами РаботаСФайлами.ПриЗаписиНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи, Параметры); // Конец СтандартныеПодсистемы.РаботаСФайлами // СтандартныеПодсистемы.СклонениеПредставленийОбъектов СклонениеПредставленийОбъектов.ПриЗаписиНаСервере(ЭтотОбъект, Объект.Наименование, ТекущийОбъект.Ссылка); // Конец СтандартныеПодсистемы.СклонениеПредставленийОбъектов КонецПроцедуры &НаСервере Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи) // СтандартныеПодсистемы.ЗапретРедактированияРеквизитовОбъектов ЗапретРедактированияРеквизитовОбъектов.ЗаблокироватьРеквизиты(ЭтотОбъект); // Конец СтандартныеПодсистемы.ЗапретРедактированияРеквизитовОбъектов КонецПроцедуры &НаСервере Процедура ОбработкаПроверкиЗаполненияНаСервере(Отказ, ПроверяемыеРеквизиты) // СтандартныеПодсистемы.Свойства УправлениеСвойствами.ОбработкаПроверкиЗаполнения(ЭтотОбъект, Отказ, ПроверяемыеРеквизиты); // Конец СтандартныеПодсистемы.Свойства КонецПроцедуры #КонецОбласти #Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура ВидНоменклатурыПриИзменении(Элемент) // СтандартныеПодсистемы.Свойства ОбновитьЭлементыДополнительныхРеквизитов(); // Конец СтандартныеПодсистемы.Свойства КонецПроцедуры &НаКлиенте Процедура ФайлКартинкиНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; // СтандартныеПодсистемы.РаботаСФайлами РаботаСФайламиКлиент.ОткрытьФормуВыбораФайлов(Объект.Ссылка, Элементы.ФайлКартинки); // Конец СтандартныеПодсистемы.РаботаСФайлами КонецПроцедуры &НаКлиенте Процедура ФайлКартинкиПриИзменении(Элемент) Если Не Объект.ФайлКартинки.Пустая() Тогда АдресКартинки = ПолучитьНавигационнуюСсылкуКартинки(Объект.ФайлКартинки, УникальныйИдентификатор) Иначе АдресКартинки = ""; КонецЕсли; КонецПроцедуры &НаКлиенте Процедура АдресКартинкиНажатие(Элемент, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; // СтандартныеПодсистемы.РаботаСФайлами РаботаСФайламиКлиент.ОткрытьФормуФайла(Объект.Ссылка, Элементы.ФайлКартинки); // Конец СтандартныеПодсистемы.РаботаСФайлами КонецПроцедуры &НаКлиенте Процедура СтранаПроисхожденияОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) // СтандартныеПодсистемы.КонтактнаяИнформация УправлениеКонтактнойИнформациейКлиент.СтранаМираОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка); // Конец СтандартныеПодсистемы.КонтактнаяИнформация КонецПроцедуры &НаКлиенте Процедура НаименованиеПриИзменении(Элемент) // СтандартныеПодсистемы.СклонениеПредставленийОбъектов СклонениеПредставленийОбъектовКлиент.ПриИзмененииПредставления(ЭтотОбъект); // Конец СтандартныеПодсистемы.СклонениеПредставленийОбъектов КонецПроцедуры #КонецОбласти #Область ОбработчикиКомандФормы // СтандартныеПодсистемы.Свойства &НаКлиенте Процедура Подключаемый_СвойстваВыполнитьКоманду(ЭлементИлиКоманда, НавигационнаяСсылка = Неопределено, СтандартнаяОбработка = Неопределено) УправлениеСвойствамиКлиент.ВыполнитьКоманду(ЭтотОбъект, ЭлементИлиКоманда, СтандартнаяОбработка); КонецПроцедуры // Конец СтандартныеПодсистемы.Свойства // СтандартныеПодсистемы.СклонениеПредставленийОбъектов &НаКлиенте Процедура Склонения(Команда) СклонениеПредставленийОбъектовКлиент.ОбработатьКомандуСклонения(ЭтотОбъект, Объект.Наименование); КонецПроцедуры // Конец СтандартныеПодсистемы.СклонениеПредставленийОбъектов // СтандартныеПодсистемы.ЗагрузкаДанныхИзФайла &НаКлиенте Процедура ЗагрузкаИзФайла(Команда) ПараметрыЗагрузки = ЗагрузкаДанныхИзФайлаКлиент.ПараметрыЗагрузкиДанных(); ПараметрыЗагрузки.ПолноеИмяТабличнойЧасти = "_ДемоНоменклатура.Аналоги"; ПараметрыЗагрузки.Заголовок = НСтр("ru = 'Загрузка списка аналогов из файла'"); // Описание колонок для макета загрузки комплектации. ПараметрыЗагрузки.КолонкиМакета = ОписаниеКолонокМакетаДляЗагрузкиАналогов(); ПараметрыЗагрузки.ДополнительныеПараметры = Новый Структура("ВидНоменклатуры", Объект.ВидНоменклатуры); Оповещение = Новый ОписаниеОповещения("ЗагрузитьАналогиИзФайлаЗавершение", ЭтотОбъект); ЗагрузкаДанныхИзФайлаКлиент.ПоказатьФормуЗагрузки(ПараметрыЗагрузки, Оповещение); КонецПроцедуры // Конец СтандартныеПодсистемы.ЗагрузкаДанныхИзФайла #КонецОбласти #Область СлужебныеПроцедурыИФункции &НаСервереБезКонтекста Функция ПолучитьНавигационнуюСсылкуКартинки(ФайлКартинки, ИдентификаторФормы) Попытка Возврат РаботаСФайлами.ДанныеФайла(ФайлКартинки, ИдентификаторФормы).СсылкаНаДвоичныеДанныеФайла; Исключение Возврат Неопределено; КонецПопытки; КонецФункции // СтандартныеПодсистемы.Свойства &НаКлиенте Процедура ОбновитьЗависимостиДополнительныхРеквизитов() УправлениеСвойствамиКлиент.ОбновитьЗависимостиДополнительныхРеквизитов(ЭтотОбъект); КонецПроцедуры &НаКлиенте Процедура Подключаемый_ПриИзмененииДополнительногоРеквизита(Элемент) УправлениеСвойствамиКлиент.ОбновитьЗависимостиДополнительныхРеквизитов(ЭтотОбъект); КонецПроцедуры &НаСервере Процедура ОбновитьЭлементыДополнительныхРеквизитов() УправлениеСвойствами.ОбновитьЭлементыДополнительныхРеквизитов(ЭтотОбъект,, ЗаписанныйВидНоменклатуры <> Объект.ВидНоменклатуры); КонецПроцедуры // Конец СтандартныеПодсистемы.Свойства // СтандартныеПодсистемы.ЗагрузкаДанныхИзФайла &НаСервере Функция ОписаниеКолонокМакетаДляЗагрузкиАналогов(); КолонкиМакета = ЗагрузкаДанныхИзФайла.СформироватьОписаниеКолонок(Объект.Аналоги); ЗагрузкаДанныхИзФайлаКлиентСервер.УдалитьКолонкуМакета("Аналог", КолонкиМакета); Если Объект.ВидНоменклатуры.Наименование = "Услуга" Тогда // У услуг нет штрихкода Колонка = ЗагрузкаДанныхИзФайлаКлиентСервер.ОписаниеКолонкиМакета("ШтрихкодАртикул", ОбщегоНазначения.ОписаниеТипаСтрока(20), НСтр("ru = 'Артикул'")); Иначе Колонка = ЗагрузкаДанныхИзФайлаКлиентСервер.ОписаниеКолонкиМакета("ШтрихкодАртикул", ОбщегоНазначения.ОписаниеТипаСтрока(20), НСтр("ru = 'Штрихкод и Артикул'")); КонецЕсли; Колонка.ОбязательнаДляЗаполнения = Истина; Колонка.Позиция = 1; Колонка.Группа = "Номенклатура"; Колонка.Родитель = "Аналог"; КолонкиМакета.Добавить(Колонка); Колонка = ЗагрузкаДанныхИзФайлаКлиентСервер.ОписаниеКолонкиМакета("Наименование", ОбщегоНазначения.ОписаниеТипаСтрока(100)); Колонка.Группа = "Номенклатура"; Колонка.Родитель = "Аналог"; Колонка.Позиция = 2; КолонкиМакета.Добавить(Колонка); Колонка = ЗагрузкаДанныхИзФайлаКлиентСервер.КолонкаМакета("Совместимость", КолонкиМакета); Колонка.Позиция = 3; Возврат КолонкиМакета; КонецФункции &НаКлиенте Процедура ЗагрузитьАналогиИзФайлаЗавершение(АдресЗагруженныхДанных, ДополнительныеПараметры) Экспорт Если АдресЗагруженныхДанных = Неопределено Тогда Возврат; КонецЕсли; ЗагрузитьАналогиИзФайлаНаСервере(АдресЗагруженныхДанных); КонецПроцедуры &НаСервере Процедура ЗагрузитьАналогиИзФайлаНаСервере(АдресЗагруженныхДанных) ЗагруженныеДанные = ПолучитьИзВременногоХранилища(АдресЗагруженныхДанных); ТоварыДобавлены = Ложь; Для каждого СтрокаТаблицы Из ЗагруженныеДанные Цикл Если Не ЗначениеЗаполнено(СтрокаТаблицы.Аналог) Тогда Продолжить; КонецЕсли; НоваяСтрокаТовары = Объект.Аналоги.Добавить(); ЗаполнитьЗначенияСвойств(НоваяСтрокаТовары, СтрокаТаблицы); ТоварыДобавлены = Истина; КонецЦикла; Если ТоварыДобавлены Тогда Модифицированность = Истина; КонецЕсли; КонецПроцедуры // Конец СтандартныеПодсистемы.ЗагрузкаДанныхИзФайла // СтандартныеПодсистемы.ЗапретРедактированияРеквизитовОбъектов &НаКлиенте Процедура Подключаемый_РазрешитьРедактированиеРеквизитовОбъекта(Команда) ЗапретРедактированияРеквизитовОбъектовКлиент.РазрешитьРедактированиеРеквизитовОбъекта(ЭтотОбъект); КонецПроцедуры // Конец СтандартныеПодсистемы.ЗапретРедактированияРеквизитовОбъектов // СтандартныеПодсистемы.СклонениеПредставленийОбъектов &НаКлиенте Процедура Подключаемый_ПросклонятьПредставлениеПоВсемПадежам() СклонениеПредставленийОбъектовКлиент.ПросклонятьПредставлениеПоВсемПадежам(ЭтотОбъект, Объект.Наименование); КонецПроцедуры // Конец СтандартныеПодсистемы.СклонениеПредставленийОбъектов // СтандартныеПодсистемы.КонтрольВеденияУчета &НаКлиенте Процедура Подключаемый_ОткрытьОтчетПоПроблемам(ЭлементИлиКоманда, НавигационнаяСсылка, СтандартнаяОбработка) КонтрольВеденияУчетаКлиент.ОткрытьОтчетПоПроблемамОбъекта(ЭтотОбъект, Объект.Ссылка, СтандартнаяОбработка); КонецПроцедуры // Конец СтандартныеПодсистемы.КонтрольВеденияУчета #КонецОбласти

Catalogs/_ДемоНоменклатураПрисоединенныеФайлы/ManagerModule

#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ПрограммныйИнтерфейс #Область ДляВызоваИзДругихПодсистем // СтандартныеПодсистемы.ГрупповоеИзменениеОбъектов // Возвращает реквизиты объекта, которые разрешается редактировать // с помощью обработки группового изменения реквизитов. // // Возвращаемое значение: // Массив - список имен реквизитов объекта. Функция РеквизитыРедактируемыеВГрупповойОбработке() Экспорт Возврат РаботаСФайлами.РеквизитыРедактируемыеВГрупповойОбработке(); КонецФункции // Конец СтандартныеПодсистемы.ГрупповоеИзменениеОбъектов // СтандартныеПодсистемы.УправлениеДоступом // См. УправлениеДоступомПереопределяемый.ПриЗаполненииСписковСОграничениемДоступа. Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт Ограничение.Текст = "РазрешитьЧтение |ГДЕ | ЧтениеОбъектаРазрешено(ВладелецФайла) |; |РазрешитьИзменениеЕслиРазрешеноЧтение |ГДЕ | ИзменениеОбъектаРазрешено(ВладелецФайла)"; КонецПроцедуры // Конец СтандартныеПодсистемы.УправлениеДоступом #КонецОбласти #КонецОбласти #КонецЕсли

Catalogs/_ДемоНоменклатураПрисоединенныеФайлы/ObjectModule



Catalogs/_ДемоОрганизации/ManagerModule

#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ПрограммныйИнтерфейс //////////////////////////////////////////////////////////////////////////////// // Использование нескольких организаций. // Возвращает организацию по умолчанию. // Если в ИБ есть только одна организация, которая не помечена на удаление и не является предопределенной, // то будет возвращена ссылка на нее, иначе будет возвращена пустая ссылка. // // Возвращаемое значение: // СправочникСсылка.Организации - ссылка на организацию. // Функция ОрганизацияПоУмолчанию() Экспорт Организация = ПустаяСсылка(); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 2 | Организации.Ссылка КАК Организация |ИЗ | Справочник._ДемоОрганизации КАК Организации |ГДЕ | НЕ Организации.ПометкаУдаления | И НЕ Организации.Предопределенный"; Выборка = Запрос.Выполнить().Выбрать(); Если Выборка.Следующий() И Выборка.Количество() = 1 Тогда Организация = Выборка.Организация; КонецЕсли; Возврат Организация; КонецФункции // Возвращает количество элементов справочника Организации. // Не учитывает предопределенные и помеченные на удаление элементы. // // Возвращаемое значение: // Число - количество организаций. // Функция КоличествоОрганизаций() Экспорт УстановитьПривилегированныйРежим(Истина); Количество = 0; Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | КОЛИЧЕСТВО(*) КАК Количество |ИЗ | Справочник._ДемоОрганизации КАК Организации |ГДЕ | НЕ Организации.Предопределенный | И НЕ Организации.ПометкаУдаления"; Выборка = Запрос.Выполнить().Выбрать(); Если Выборка.Следующий() Тогда Количество = Выборка.Количество; КонецЕсли; УстановитьПривилегированныйРежим(Ложь); Возврат Количество; КонецФункции #Область ДляВызоваИзДругихПодсистем // СтандартныеПодсистемы.ГрупповоеИзменениеОбъектов // Возвращает реквизиты объекта, которые не рекомендуется редактировать // с помощью обработки группового изменения реквизитов. // // Возвращаемое значение: // Массив - список имен реквизитов объекта. Функция РеквизитыНеРедактируемыеВГрупповойОбработке() Экспорт Результат = Новый Массив; Результат.Добавить("Префикс"); Результат.Добавить("КонтактнаяИнформация.*"); Возврат Результат КонецФункции // Конец СтандартныеПодсистемы.ГрупповоеИзменениеОбъектов // СтандартныеПодсистемы.ВариантыОтчетов // Определяет список команд отчетов. // // Параметры: // КомандыОтчетов - ТаблицаЗначений - Таблица с командами отчетов. Для изменения. // См. описание 1 параметра процедуры ВариантыОтчетовПереопределяемый.ПередДобавлениемКомандОтчетов(). // Параметры - Структура - Вспомогательные параметры. Для чтения. // См. описание 2 параметра процедуры ВариантыОтчетовПереопределяемый.ПередДобавлениемКомандОтчетов(). // Процедура ДобавитьКомандыОтчетов(КомандыОтчетов, Параметры) Экспорт КонецПроцедуры // Конец СтандартныеПодсистемы.ВариантыОтчетов // СтандартныеПодсистемы.Печать // Заполняет список команд печати. // // Параметры: // КомандыПечати - ТаблицаЗначений - состав полей см. в функции УправлениеПечатью.СоздатьКоллекциюКомандПечати. // Процедура ДобавитьКомандыПечати(КомандыПечати) Экспорт КонецПроцедуры // Конец СтандартныеПодсистемы.Печать // СтандартныеПодсистемы.ЗаполнениеОбъектов // Определяет список команд заполнения. // // Параметры: // КомандыЗаполнения - ТаблицаЗначений - Таблица с командами заполнения. Для изменения. // См. описание 1 параметра процедуры ЗаполнениеОбъектовПереопределяемый.ПередДобавлениемКомандЗаполнения(). // Параметры - Структура - Вспомогательные параметры. Для чтения. // См. описание 2 параметра процедуры ЗаполнениеОбъектовПереопределяемый.ПередДобавлениемКомандЗаполнения(). // Процедура ДобавитьКомандыЗаполнения(КомандыЗаполнения, Параметры) Экспорт КонецПроцедуры // Конец СтандартныеПодсистемы.ЗаполнениеОбъектов // СтандартныеПодсистемы.ШаблоныСообщений // Вызывается при подготовке шаблонов сообщений и позволяет переопределить список реквизитов и вложений. // // Параметры: // Реквизиты - ДеревоЗначений - список реквизитов шаблона. // ** Имя - Строка - Уникальное имя общего реквизита. // ** Представление - Строка - Представление общего реквизита. // ** Тип - Тип - Тип реквизита. По умолчанию строка. // ** Формат - Строка - Формат вывода значения для чисел, дат, строк и булевых значений. // Вложения - ТаблицаЗначений - печатные формы и вложения // ** Имя - Строка - Уникальное имя вложения. // ** Представление - Строка - Представление варианта. // ** ТипФайла - Строка - Тип вложения, который соответствует расширению файла: "pdf", "png", "jpg", mxl" // и др. // ДополнительныеПараметры - Структура - дополнительные сведения о шаблоне сообщений. // Процедура ПриПодготовкеШаблонаСообщения(Реквизиты, Вложения, ДополнительныеПараметры) Экспорт Если ТипЗнч(ДополнительныеПараметры.ВладелецШаблона) = Тип("СправочникСсылка._ДемоПодразделения") Тогда МассивТипов = Новый Массив; МассивТипов.Добавить(Тип("СправочникСсылка._ДемоПроекты")); ДопустимыеТипы = Новый ОписаниеТипов(МассивТипов); Описание = Новый Структура("ОписаниеТипа, Представление", ДопустимыеТипы, НСтр("ru='Демо: Проект'")); ДополнительныеПараметры.Параметры.Вставить("_ДемоПроекты", Описание); КонецЕсли; КонецПроцедуры // Вызывается в момент создания сообщений по шаблону для заполнения значений реквизитов и вложений. // // Параметры: // Сообщение - Структура - структура с ключами: // * ЗначенияРеквизитов - Соответствие - список используемых в шаблоне реквизитов. // ** Ключ - Строка - имя реквизита в шаблоне; // ** Значение - Строка - значение заполнения в шаблоне. // * ЗначенияОбщихРеквизитов - Соответствие - список используемых в шаблоне общих реквизитов. // ** Ключ - Строка - имя реквизита в шаблоне; // ** Значение - Строка - значение заполнения в шаблоне. // * Вложения - Соответствие - значения реквизитов // ** Ключ - Строка - имя вложения в шаблоне; // ** Значение - ДвоичныеДанные, Строка - двоичные данные или адрес во временном хранилище вложения. // ПредметСообщения - ЛюбаяСсылка - ссылка на объект являющийся источником данных. // ДополнительныеПараметры - Структура - Дополнительная информация о шаблоне сообщения. // Процедура ПриФормированииСообщения(Сообщение, ПредметСообщения, ДополнительныеПараметры) Экспорт Если ТипЗнч(ДополнительныеПараметры.ВладелецШаблона) = Тип("СправочникСсылка._ДемоПодразделения") Тогда Проект = Сообщение.ДополнительныеПараметры.ПроизвольныеПараметры["_ДемоПроекты"]; Если Проект <> Неопределено Тогда ЗначенияРеквизитов = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Сообщение.ДополнительныеПараметры.ПараметрыСообщения.Проект, ОбщегоНазначенияКлиентСервер.СкопироватьСтруктуру(Проект), Истина); Для каждого Реквизит Из ЗначенияРеквизитов Цикл Проект[Реквизит.Ключ] = Реквизит.Значение; КонецЦикла; КонецЕсли; Если ДополнительныеПараметры.ПараметрыСообщения.Свойство("РегламентПроекта") Тогда ДанныеФайлы = РаботаСФайлами.ДанныеФайла(ДополнительныеПараметры.ПараметрыСообщения.РегламентПроекта, ДополнительныеПараметры.ПараметрыСообщения.УникальныйИдентификатор); Сообщение.Вложения.Вставить(ДанныеФайлы.ИмяФайла, ДанныеФайлы.СсылкаНаДвоичныеДанныеФайла); КонецЕсли; КонецЕсли; КонецПроцедуры // Заполняет список получателей SMS при отправке сообщения сформированного по шаблону. // // Параметры: // ПолучателиSMS - ТаблицаЗначений - список получается SMS. // * НомерТелефона - Строка - номер телефона, куда будет отправлено сообщение SMS. // * Представление - Строка - представление получателя сообщения SMS. // * Контакт - Произвольный - контакт, которому принадлежит номер телефона. // ПредметСообщения - ЛюбаяСсылка, Структура - ссылка на объект являющийся источником данных, либо структура, // если шаблон содержит произвольные параметры: // * Предмет - ЛюбаяСсылка - ссылка на объект являющийся источником данных // * ПроизвольныеПараметры - Соответствие - заполненный список произвольных параметров. // Процедура ПриЗаполненииТелефоновПолучателейВСообщении(ПолучателиSMS, ПредметСообщения) Экспорт КонецПроцедуры // Заполняет список получателей письма при отправки сообщения сформированного по шаблону. // // Параметры: // ПолучателиПисьма - ТаблицаЗначений - список получается письма. // * Адрес - Строка - адрес электронной почты получателя. // * Представление - Строка - представление получается письма. // * Контакт - Произвольный - контакт, которому принадлежит адрес электронной почты. // ПредметСообщения - ЛюбаяСсылка, Структура - ссылка на объект являющийся источником данных, либо структура, // если шаблон содержит произвольные параметры: // * Предмет - ЛюбаяСсылка - ссылка на объект являющийся источником данных // * ПроизвольныеПараметры - Соответствие - заполненный список произвольных параметров. // Процедура ПриЗаполненииПочтыПолучателейВСообщении(ПолучателиПисьма, ПредметСообщения) Экспорт КонецПроцедуры // Конец СтандартныеПодсистемы.ШаблоныСообщений // СтандартныеПодсистемы.УправлениеДоступом // См. УправлениеДоступомПереопределяемый.ПриЗаполненииСписковСОграничениемДоступа. Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт Ограничение.Текст = "РазрешитьЧтениеИзменение |ГДЕ | ЗначениеРазрешено(Ссылка)"; Ограничение.ТекстДляВнешнихПользователей = Ограничение.Текст; КонецПроцедуры // Конец СтандартныеПодсистемы.УправлениеДоступом #КонецОбласти #КонецОбласти #КонецЕсли

Catalogs/_ДемоОрганизации/ObjectModule

#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ОбработчикиСобытий Процедура ПриЗаписи(Отказ) Если ОбменДанными.Загрузка Тогда Возврат; КонецЕсли; Если Не ЭтоГруппа И Не Константы._ДемоИспользоватьНесколькоОрганизаций.Получить() И Справочники._ДемоОрганизации.КоличествоОрганизаций() > 1 Тогда УстановитьПривилегированныйРежим(Истина); Константы._ДемоИспользоватьНесколькоОрганизаций.Установить(Истина); УстановитьПривилегированныйРежим(Ложь); КонецЕсли; КонецПроцедуры #КонецОбласти #КонецЕсли

Catalogs/_ДемоОрганизации/Forms/ФормаЭлемента/Form/Module

 #Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. Возврат; КонецЕсли; Если Не ПользователиКлиентСервер.ЭтоСеансВнешнегоПользователя() Тогда // СтандартныеПодсистемы.ПодключаемыеКоманды ПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект); // Конец СтандартныеПодсистемы.ПодключаемыеКоманды Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонтактнаяИнформация") Тогда МодульУправлениеКонтактнойИнформацией = ОбщегоНазначения.ОбщийМодуль("УправлениеКонтактнойИнформацией"); ДополнительныеПараметрыКонтактнойИнформации = МодульУправлениеКонтактнойИнформацией.ПараметрыКонтактнойИнформации(); ДополнительныеПараметрыКонтактнойИнформации.ТипПомещения = "Офис"; МодульУправлениеКонтактнойИнформацией.ПриСозданииНаСервере(ЭтотОбъект, Объект, ДополнительныеПараметрыКонтактнойИнформации); КонецЕсли; Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ПодключаемыеКоманды") Тогда МодульУправлениеПечатью = ОбщегоНазначения.ОбщийМодуль("УправлениеПечатью"); КонецЕсли; Иначе Элементы.Страницы.Видимость = Ложь; КонецЕсли; ВидОрганизации = ?(ЗначениеЗаполнено(Объект.ИндивидуальныйПредприниматель), 1, 0); КонецПроцедуры &НаСервере Процедура ПриЧтенииНаСервере(ТекущийОбъект) Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонтактнаяИнформация") Тогда МодульУправлениеКонтактнойИнформацией = ОбщегоНазначения.ОбщийМодуль("УправлениеКонтактнойИнформацией"); МодульУправлениеКонтактнойИнформацией.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект); КонецЕсли; // СтандартныеПодсистемы.ПодключаемыеКоманды ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Объект); // Конец СтандартныеПодсистемы.ПодключаемыеКоманды // СтандартныеПодсистемы.УправлениеДоступом Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом"); МодульУправлениеДоступом.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект); КонецЕсли; // Конец СтандартныеПодсистемы.УправлениеДоступом КонецПроцедуры &НаСервере Процедура ОбработкаПроверкиЗаполненияНаСервере(Отказ, ПроверяемыеРеквизиты) Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонтактнаяИнформация") Тогда МодульУправлениеКонтактнойИнформацией = ОбщегоНазначения.ОбщийМодуль("УправлениеКонтактнойИнформацией"); МодульУправлениеКонтактнойИнформацией.ОбработкаПроверкиЗаполненияНаСервере(ЭтотОбъект, Объект, Отказ); КонецЕсли; КонецПроцедуры &НаСервере Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонтактнаяИнформация") Тогда МодульУправлениеКонтактнойИнформацией = ОбщегоНазначения.ОбщийМодуль("УправлениеКонтактнойИнформацией"); МодульУправлениеКонтактнойИнформацией.ПередЗаписьюНаСервере(ЭтотОбъект, ТекущийОбъект); КонецЕсли; ОбновитьИнтерфейс = ТекущийОбъект.ЭтоНовый() И НЕ ПолучитьФункциональнуюОпцию("_ДемоИспользоватьНесколькоОрганизаций"); КонецПроцедуры &НаКлиенте Процедура ПослеЗаписи(ПараметрыЗаписи) Если ОбновитьИнтерфейс Тогда ОбновитьИнтерфейс(); КонецЕсли; Оповестить("Запись_Организация", Новый Структура, Объект.Ссылка); КонецПроцедуры &НаКлиенте Процедура ПриОткрытии(Отказ) // СтандартныеПодсистемы.ПодключаемыеКоманды ПодключаемыеКомандыКлиент.НачатьОбновлениеКоманд(ЭтотОбъект); // Конец СтандартныеПодсистемы.ПодключаемыеКоманды ОпределитьДоступностьПоляИндивидуальныйПредприниматель(Ложь); КонецПроцедуры #КонецОбласти #Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура ПрефиксПриИзменении(Элемент) Если СтрНайти(Объект.Префикс, "-") > 0 Тогда ПоказатьПредупреждение(Неопределено, НСтр("ru = 'Нельзя в префиксе организации использовать символ ""-"".'")); Объект.Префикс = СтрЗаменить(Объект.Префикс, "-", ""); КонецЕсли; КонецПроцедуры &НаКлиенте Процедура ВидОрганизацииЮридическоеЛицоПриИзменении(Элемент) ОпределитьДоступностьПоляИндивидуальныйПредприниматель(); КонецПроцедуры &НаКлиенте Процедура КПППриИзменении(Элемент) КПППриИзмененииНаСервере(); КонецПроцедуры &НаКлиенте Процедура СтранаРегистрацииОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) УправлениеКонтактнойИнформациейКлиент.СтранаМираОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка); КонецПроцедуры #КонецОбласти #Область СлужебныеПроцедурыИФункции &НаКлиенте Процедура ОпределитьДоступностьПоляИндивидуальныйПредприниматель(УстановитьЗначение = Истина) Элементы.ИндивидуальныйПредприниматель.Доступность = (ВидОрганизации = 1); Если УстановитьЗначение Тогда Если ВидОрганизации = 0 Тогда Объект.ИндивидуальныйПредприниматель = Неопределено; КонецЕсли; КонецЕсли; КонецПроцедуры // СтандартныеПодсистемы.ПодключаемыеКоманды &НаКлиенте Процедура Подключаемый_ВыполнитьКоманду(Команда) ПодключаемыеКомандыКлиент.ВыполнитьКоманду(ЭтотОбъект, Команда, Объект); КонецПроцедуры &НаСервере Процедура Подключаемый_ВыполнитьКомандуНаСервере(Контекст, Результат) ПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, Контекст, Объект, Результат); КонецПроцедуры &НаКлиенте Процедура Подключаемый_ОбновитьКоманды() ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Объект); КонецПроцедуры // Конец СтандартныеПодсистемы.ПодключаемыеКоманды //////////////////////////////////////////////////////////////////////////////// // ПРОЦЕДУРЫ ПОДСИСТЕМЫ "КОНТАКТНАЯ ИНФОРМАЦИЯ" &НаКлиенте Процедура Подключаемый_КонтактнаяИнформацияПриИзменении(Элемент) Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.КонтактнаяИнформация") Тогда МодульУправлениеКонтактнойИнформациейКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("УправлениеКонтактнойИнформациейКлиент"); МодульУправлениеКонтактнойИнформациейКлиент.ПриИзменении(ЭтотОбъект, Элемент); КонецЕсли; КонецПроцедуры &НаКлиенте Процедура Подключаемый_КонтактнаяИнформацияНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.КонтактнаяИнформация") Тогда ПараметрыОткрытия = Новый Структура; Отбор = Новый Структура("ИмяРеквизита", Элемент.Имя); Строки = ЭтотОбъект.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.НайтиСтроки(Отбор); ДанныеСтроки = ?(Строки.Количество() = 0, Неопределено, Строки[0]); Если ДанныеСтроки <> Неопределено И (ДанныеСтроки.Вид = ПредопределенноеЗначение("Справочник.ВидыКонтактнойИнформации._ДемоМеждународныйАдресОрганизации") ИЛИ ДанныеСтроки.Вид = ПредопределенноеЗначение("Справочник.ВидыКонтактнойИнформации._ДемоПочтовыйАдресОрганизации")) Тогда ПараметрыОткрытия.Вставить("Страна", Объект.СтранаРегистрации); КонецЕсли; МодульУправлениеКонтактнойИнформациейКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("УправлениеКонтактнойИнформациейКлиент"); МодульУправлениеКонтактнойИнформациейКлиент.НачалоВыбора(ЭтотОбъект, Элемент,, СтандартнаяОбработка, ПараметрыОткрытия); КонецЕсли; КонецПроцедуры &НаКлиенте Процедура Подключаемый_КонтактнаяИнформацияПриНажатии(Элемент, СтандартнаяОбработка) Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.КонтактнаяИнформация") Тогда МодульУправлениеКонтактнойИнформациейКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("УправлениеКонтактнойИнформациейКлиент"); МодульУправлениеКонтактнойИнформациейКлиент.НачалоВыбора(ЭтотОбъект, Элемент,, СтандартнаяОбработка); КонецЕсли; КонецПроцедуры &НаКлиенте Процедура Подключаемый_КонтактнаяИнформацияОчистка(Элемент, СтандартнаяОбработка) Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.КонтактнаяИнформация") Тогда МодульУправлениеКонтактнойИнформациейКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("УправлениеКонтактнойИнформациейКлиент"); МодульУправлениеКонтактнойИнформациейКлиент.Очистка(ЭтотОбъект, Элемент.Имя); КонецЕсли; КонецПроцедуры &НаКлиенте Процедура Подключаемый_КонтактнаяИнформацияВыполнитьКоманду(Команда) Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.КонтактнаяИнформация") Тогда МодульУправлениеКонтактнойИнформациейКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("УправлениеКонтактнойИнформациейКлиент"); МодульУправлениеКонтактнойИнформациейКлиент.ВыполнитьКоманду(ЭтотОбъект, Команда.Имя); КонецЕсли; КонецПроцедуры &НаКлиенте Процедура Подключаемый_КонтактнаяИнформацияАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка) Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.КонтактнаяИнформация") Тогда МодульУправлениеКонтактнойИнформациейКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("УправлениеКонтактнойИнформациейКлиент"); МодульУправлениеКонтактнойИнформациейКлиент.АвтоПодбор(Текст, ДанныеВыбора, СтандартнаяОбработка); КонецЕсли; КонецПроцедуры &НаКлиенте Процедура Подключаемый_КонтактнаяИнформацияОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.КонтактнаяИнформация") Тогда МодульУправлениеКонтактнойИнформациейКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("УправлениеКонтактнойИнформациейКлиент"); МодульУправлениеКонтактнойИнформациейКлиент.ОбработкаВыбора(ЭтотОбъект, ВыбранноеЗначение, Элемент.Имя, СтандартнаяОбработка); КонецЕсли; КонецПроцедуры &НаСервере Процедура Подключаемый_ОбновитьКонтактнуюИнформацию(Результат) Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КонтактнаяИнформация") Тогда МодульУправлениеКонтактнойИнформацией = ОбщегоНазначения.ОбщийМодуль("УправлениеКонтактнойИнформацией"); МодульУправлениеКонтактнойИнформацией.ОбновитьКонтактнуюИнформацию(ЭтотОбъект, Объект, Результат); КонецЕсли; КонецПроцедуры &НаСервере Процедура КПППриИзмененииНаСервере() Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.КалендарныеГрафики") Тогда МодульКалендарныеГрафики = ОбщегоНазначения.ОбщийМодуль("КалендарныеГрафики"); МодульКалендарныеГрафики.ЗаполнитьПроизводственныйКалендарьВФорме(ЭтотОбъект, "Объект.ПроизводственныйКалендарь", Объект.КПП); КонецЕсли; КонецПроцедуры #КонецОбласти

Catalogs/_ДемоПартнеры/ManagerModule

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

Catalogs/_ДемоПартнеры/ObjectModule

#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ПрограммныйИнтерфейс #Область ДляВызоваИзДругихПодсистем // СтандартныеПодсистемы.УправлениеДоступом // См. УправлениеДоступом.ЗаполнитьНаборыЗначенийДоступа. Процедура ЗаполнитьНаборыЗначенийДоступа(Таблица) Экспорт // Логика ограничения: // Чтения, Изменение: объект разрешен по виду доступа ГруппыПартнеров. Строка = Таблица.Добавить(); Строка.ЗначениеДоступа = Ссылка; КонецПроцедуры // Конец СтандартныеПодсистемы.УправлениеДоступом #КонецОбласти #КонецОбласти #КонецЕсли

Catalogs/_ДемоПартнеры/Forms/ФормаВыбора/Form/Module

#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. Возврат; КонецЕсли; ОпределитьОтображениеСпискаПартнеров(Параметры.ТолькоСВнешнимДоступом); КонецПроцедуры #КонецОбласти #Область СлужебныеПроцедурыИФункции &НаСервере Процедура ОпределитьОтображениеСпискаПартнеров(ТолькоСВнешнимДоступом) ПодтекстЗапросаВыбрать = ""; ПодтекстЗапросаИз = ""; ПодтекстЗапросаГде = ""; // Проверка на подсистему Если ПравоДоступа("Чтение", Метаданные.Справочники.ВнешниеПользователи) И ПолучитьФункциональнуюОпцию("ИспользоватьВнешнихПользователей") Тогда ПодтекстЗапросаВыбрать = "ВЫРАЗИТЬ((ВЫРАЗИТЬ(НЕ ВнешниеПользователи.Ссылка ЕСТЬ NULL КАК БУЛЕВО) | И НЕ ВнешниеПользователи.Недействителен И НЕ ВнешниеПользователи.ПометкаУдаления) КАК БУЛЕВО) Как ВнешнийДоступ,"; ПодтекстЗапросаИз = " ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВнешниеПользователи КАК ВнешниеПользователи | ПО (Справочник_ДемоПартнеры.Ссылка = ВнешниеПользователи.ОбъектАвторизации)"; Элементы.ВнешнийДоступ.Видимость = Истина; Если ТолькоСВнешнимДоступом Тогда ПодтекстЗапросаГде = " ГДЕ ВЫРАЗИТЬ(НЕ ВнешниеПользователи.Ссылка ЕСТЬ NULL КАК БУЛЕВО) | И НЕ ВнешниеПользователи.Недействителен И НЕ ВнешниеПользователи.ПометкаУдаления = ИСТИНА"; КонецЕсли; КонецЕсли; ШаблонЗапроса = "ВЫБРАТЬ РАЗРЕШЕННЫЕ %1 | Справочник_ДемоПартнеры.Ссылка КАК Ссылка, | Справочник_ДемоПартнеры.Код КАК Код, | Справочник_ДемоПартнеры.Наименование КАК Наименование | ИЗ Справочник._ДемоПартнеры КАК Справочник_ДемоПартнеры %2 %3 "; ТекстЗапроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонЗапроса, ПодтекстЗапросаВыбрать, ПодтекстЗапросаИз, ПодтекстЗапросаГде); СвойстваСписка = ОбщегоНазначения.СтруктураСвойствДинамическогоСписка(); СвойстваСписка.ОсновнаяТаблица = "Справочник._ДемоПартнеры"; СвойстваСписка.ДинамическоеСчитываниеДанных = Истина; СвойстваСписка.ТекстЗапроса = ТекстЗапроса; ОбщегоНазначения.УстановитьСвойстваДинамическогоСписка(Элементы.Список, СвойстваСписка); КонецПроцедуры #КонецОбласти

Catalogs/_ДемоПартнеры/Forms/ФормаСписка/Form/Module

 #Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. Возврат; КонецЕсли; ВнешниеПользователи.НастроитьОтображениеСпискаВнешнихПользователей(ЭтотОбъект); // СтандартныеПодсистемы.Свойства ДополнительныеПараметры = Новый Структура; ДополнительныеПараметры.Вставить("ИмяЭлементаКоманднойПанели", "КоманднаяПанель"); ДополнительныеПараметры.Вставить("ИмяЭлементаДляРазмещения", "ГруппаДополнительныеРеквизиты"); ДополнительныеПараметры.Вставить("ПроизвольныйОбъект", Истина); УправлениеСвойствами.ПриСозданииНаСервере(ЭтотОбъект, ДополнительныеПараметры); // Конец СтандартныеПодсистемы.Свойства // СтандартныеПодсистемы.ПодключаемыеКоманды ПараметрыРазмещения = ПодключаемыеКоманды.ПараметрыРазмещения(); ПараметрыРазмещения.КоманднаяПанель = Элементы.КоманднаяПанель; ПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект, ПараметрыРазмещения); // Конец СтандартныеПодсистемы.ПодключаемыеКоманды КонецПроцедуры &НаКлиенте Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) // СтандартныеПодсистемы.Свойства Если УправлениеСвойствамиКлиент.ОбрабатыватьОповещения(ЭтотОбъект, ИмяСобытия, Параметр) Тогда ПодключитьОбработчикОжидания("СписокПослеАктивизацииСтроки", 0.1, Истина); КонецЕсли; Если ИмяСобытия = "Запись__ДемоПартнеры" И Элементы.Список.ТекущаяСтрока = Источник Тогда ПодключитьОбработчикОжидания("СписокПослеАктивизацииСтроки", 0.1, Истина); КонецЕсли; // Конец СтандартныеПодсистемы.Свойства КонецПроцедуры #КонецОбласти #Область ОбработчикиСобытийЭлементовТаблицыФормыСписок &НаКлиенте Процедура СписокПриАктивизацииСтроки(Элемент) Если СсылкаНаОбъект <> Элементы.Список.ТекущаяСтрока Тогда СсылкаНаОбъект = Элементы.Список.ТекущаяСтрока; ПодключитьОбработчикОжидания("СписокПослеАктивизацииСтроки", 0.1, Истина); КонецЕсли; // СтандартныеПодсистемы.ПодключаемыеКоманды ПодключаемыеКомандыКлиент.НачатьОбновлениеКоманд(ЭтотОбъект); // Конец СтандартныеПодсистемы.ПодключаемыеКоманды КонецПроцедуры #КонецОбласти #Область ОбработчикиКомандФормы // СтандартныеПодсистемы.Свойства &НаКлиенте Процедура Подключаемый_СвойстваВыполнитьКоманду(ЭлементИлиКоманда, НавигационнаяСсылка = Неопределено, СтандартнаяОбработка = Неопределено) УправлениеСвойствамиКлиент.ВыполнитьКоманду(ЭтотОбъект, ЭлементИлиКоманда, СтандартнаяОбработка); КонецПроцедуры // Конец СтандартныеПодсистемы.Свойства // СтандартныеПодсистемы.ПодключаемыеКоманды &НаКлиенте Процедура Подключаемый_ВыполнитьКоманду(Команда) ПодключаемыеКомандыКлиент.ВыполнитьКоманду(ЭтотОбъект, Команда, Элементы.Список); КонецПроцедуры &НаСервере Процедура Подключаемый_ВыполнитьКомандуНаСервере(Контекст, Результат) ПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, Контекст, Элементы.Список, Результат); КонецПроцедуры &НаКлиенте Процедура Подключаемый_ОбновитьКоманды() ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Элементы.Список); КонецПроцедуры // Конец СтандартныеПодсистемы.ПодключаемыеКоманды #КонецОбласти #Область СлужебныеПроцедурыИФункции // СтандартныеПодсистемы.Свойства &НаКлиенте Процедура СписокПослеАктивизацииСтроки() ЗаполнитьДополнительныеРеквизитыВФорме(); КонецПроцедуры &НаСервере Процедура ЗаполнитьДополнительныеРеквизитыВФорме() Если ЗначениеЗаполнено(СсылкаНаОбъект) Тогда УправлениеСвойствами.ЗаполнитьДополнительныеРеквизитыВФорме( ЭтотОбъект, СсылкаНаОбъект.ПолучитьОбъект(), Истина); Иначе УправлениеСвойствами.УдалитьСтарыеРеквизитыИЭлементы(ЭтотОбъект); КонецЕсли; КонецПроцедуры // Конец СтандартныеПодсистемы.Свойства #КонецОбласти

Catalogs/_ДемоПартнеры/Forms/ФормаЭлемента/Form/Module

 #Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. Возврат; КонецЕсли; // СтандартныеПодсистемы.Свойства ДополнительныеПараметры = Новый Структура; ДополнительныеПараметры.Вставить("ИмяЭлементаДляРазмещения", "ГруппаДополнительныеРеквизиты"); УправлениеСвойствами.ПриСозданииНаСервере(ЭтотОбъект, ДополнительныеПараметры); // Конец СтандартныеПодсистемы.Свойства // СтандартныеПодсистемы.КонтактнаяИнформация УправлениеКонтактнойИнформацией.ПриСозданииНаСервере(ЭтотОбъект, Объект, "ГруппаКонтактнаяИнформация"); // Конец СтандартныеПодсистемы.КонтактнаяИнформация // Учесть возможность создания из взаимодействия. Взаимодействия.ПодготовитьОповещения(ЭтотОбъект,Параметры,Ложь); // СтандартныеПодсистемы.ПодключаемыеКоманды ПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект); // Конец СтандартныеПодсистемы.ПодключаемыеКоманды // СтандартныеПодсистемы.УправлениеДоступом УправлениеДоступом.ПриСозданииФормыЗначенияДоступа(ЭтотОбъект); // Конец СтандартныеПодсистемы.УправлениеДоступом КонецПроцедуры &НаКлиенте Процедура ПриОткрытии(Отказ) // СтандартныеПодсистемы.Свойства УправлениеСвойствамиКлиент.ПослеЗагрузкиДополнительныхРеквизитов(ЭтотОбъект); // Конец СтандартныеПодсистемы.Свойства // СтандартныеПодсистемы.ПодключаемыеКоманды ПодключаемыеКомандыКлиент.НачатьОбновлениеКоманд(ЭтотОбъект); // Конец СтандартныеПодсистемы.ПодключаемыеКоманды КонецПроцедуры &НаКлиенте Процедура ПередЗакрытием(Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка) РаботаСФайламиКлиент.ПоказатьПодтверждениеЗакрытияФормыСФайлами(ЭтотОбъект, Отказ, ЗавершениеРаботы, Объект.Ссылка); КонецПроцедуры &НаКлиенте Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) // СтандартныеПодсистемы.Свойства Если УправлениеСвойствамиКлиент.ОбрабатыватьОповещения(ЭтотОбъект, ИмяСобытия, Параметр) Тогда ОбновитьЭлементыДополнительныхРеквизитов(); УправлениеСвойствамиКлиент.ПослеЗагрузкиДополнительныхРеквизитов(ЭтотОбъект); КонецЕсли; // Конец СтандартныеПодсистемы.Свойства КонецПроцедуры &НаСервере Процедура ПриЧтенииНаСервере(ТекущийОбъект) // СтандартныеПодсистемы.Свойства УправлениеСвойствами.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект); // Конец СтандартныеПодсистемы.Свойства // СтандартныеПодсистемы.КонтактнаяИнформация УправлениеКонтактнойИнформацией.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект); // Конец СтандартныеПодсистемы.КонтактнаяИнформация // СтандартныеПодсистемы.ПодключаемыеКоманды ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Объект); // Конец СтандартныеПодсистемы.ПодключаемыеКоманды // СтандартныеПодсистемы.УправлениеДоступом Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом"); МодульУправлениеДоступом.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект); КонецЕсли; // Конец СтандартныеПодсистемы.УправлениеДоступом КонецПроцедуры &НаСервере Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект) // СтандартныеПодсистемы.Свойства УправлениеСвойствами.ПередЗаписьюНаСервере(ЭтотОбъект, ТекущийОбъект); // Конец СтандартныеПодсистемы.Свойства // СтандартныеПодсистемы.КонтактнаяИнформация УправлениеКонтактнойИнформацией.ПередЗаписьюНаСервере(ЭтотОбъект, ТекущийОбъект); // Конец СтандартныеПодсистемы.КонтактнаяИнформация КонецПроцедуры &НаКлиенте Процедура ПослеЗаписи(ПараметрыЗаписи) ВзаимодействияКлиент.КонтактПослеЗаписи(ЭтотОбъект,Объект,ПараметрыЗаписи,"_ДемоПартнеры"); Оповестить("Запись__ДемоПартнеры", Новый Структура, Объект.Ссылка); КонецПроцедуры &НаСервере Процедура ОбработкаПроверкиЗаполненияНаСервере(Отказ, ПроверяемыеРеквизиты) // СтандартныеПодсистемы.Свойства УправлениеСвойствами.ОбработкаПроверкиЗаполнения(ЭтотОбъект, Отказ, ПроверяемыеРеквизиты); // Конец СтандартныеПодсистемы.Свойства // СтандартныеПодсистемы.КонтактнаяИнформация УправлениеКонтактнойИнформацией.ОбработкаПроверкиЗаполненияНаСервере(ЭтотОбъект, Объект, Отказ); // Конец СтандартныеПодсистемы.КонтактнаяИнформация КонецПроцедуры #КонецОбласти #Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура КлиентПриИзменении(Элемент) // СтандартныеПодсистемы.Свойства ОбновитьЭлементыДополнительныхРеквизитов(); // Конец СтандартныеПодсистемы.Свойства КонецПроцедуры &НаКлиенте Процедура ПоставщикПриИзменении(Элемент) // СтандартныеПодсистемы.Свойства ОбновитьЭлементыДополнительныхРеквизитов(); // Конец СтандартныеПодсистемы.Свойства КонецПроцедуры &НаКлиенте Процедура КонкурентПриИзменении(Элемент) // СтандартныеПодсистемы.Свойства ОбновитьЭлементыДополнительныхРеквизитов(); // Конец СтандартныеПодсистемы.Свойства КонецПроцедуры &НаКлиенте Процедура ПрочиеОтношенияПриИзменении(Элемент) // СтандартныеПодсистемы.Свойства ОбновитьЭлементыДополнительныхРеквизитов(); // Конец СтандартныеПодсистемы.Свойства КонецПроцедуры #КонецОбласти #Область ОбработчикиКомандФормы // СтандартныеПодсистемы.Свойства &НаКлиенте Процедура Подключаемый_СвойстваВыполнитьКоманду(ЭлементИлиКоманда, НавигационнаяСсылка = Неопределено, СтандартнаяОбработка = Неопределено) УправлениеСвойствамиКлиент.ВыполнитьКоманду(ЭтотОбъект, ЭлементИлиКоманда, СтандартнаяОбработка); КонецПроцедуры // Конец СтандартныеПодсистемы.Свойства // СтандартныеПодсистемы.ПодключаемыеКоманды &НаКлиенте Процедура Подключаемый_ВыполнитьКоманду(Команда) ПодключаемыеКомандыКлиент.ВыполнитьКоманду(ЭтотОбъект, Команда, Объект); КонецПроцедуры &НаСервере Процедура Подключаемый_ВыполнитьКомандуНаСервере(Контекст, Результат) ПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, Контекст, Объект, Результат); КонецПроцедуры &НаКлиенте Процедура Подключаемый_ОбновитьКоманды() ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Объект); КонецПроцедуры // Конец СтандартныеПодсистемы.ПодключаемыеКоманды #КонецОбласти #Область СлужебныеПроцедурыИФункции // СтандартныеПодсистемы.Свойства &НаКлиенте Процедура ОбновитьЗависимостиДополнительныхРеквизитов() УправлениеСвойствамиКлиент.ОбновитьЗависимостиДополнительныхРеквизитов(ЭтотОбъект); КонецПроцедуры &НаКлиенте Процедура Подключаемый_ПриИзмененииДополнительногоРеквизита(Элемент) УправлениеСвойствамиКлиент.ОбновитьЗависимостиДополнительныхРеквизитов(ЭтотОбъект); КонецПроцедуры &НаСервере Процедура ОбновитьЭлементыДополнительныхРеквизитов() УправлениеСвойствами.ОбновитьЭлементыДополнительныхРеквизитов(ЭтотОбъект); КонецПроцедуры // Конец СтандартныеПодсистемы.Свойства // СтандартныеПодсистемы.КонтактнаяИнформация &НаКлиенте Процедура Подключаемый_КонтактнаяИнформацияПриИзменении(Элемент) УправлениеКонтактнойИнформациейКлиент.ПриИзменении(ЭтотОбъект, Элемент); КонецПроцедуры &НаКлиенте Процедура Подключаемый_КонтактнаяИнформацияНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) УправлениеКонтактнойИнформациейКлиент.НачалоВыбора(ЭтотОбъект, Элемент,, СтандартнаяОбработка); КонецПроцедуры &НаКлиенте Процедура Подключаемый_КонтактнаяИнформацияПриНажатии(Элемент, СтандартнаяОбработка) УправлениеКонтактнойИнформациейКлиент.НачалоВыбора(ЭтотОбъект, Элемент,, СтандартнаяОбработка); КонецПроцедуры &НаКлиенте Процедура Подключаемый_КонтактнаяИнформацияОчистка(Элемент, СтандартнаяОбработка) УправлениеКонтактнойИнформациейКлиент.Очистка(ЭтотОбъект, Элемент.Имя); КонецПроцедуры &НаКлиенте Процедура Подключаемый_КонтактнаяИнформацияВыполнитьКоманду(Команда) УправлениеКонтактнойИнформациейКлиент.ВыполнитьКоманду(ЭтотОбъект, Команда.Имя); КонецПроцедуры &НаКлиенте Процедура Подключаемый_КонтактнаяИнформацияАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка) УправлениеКонтактнойИнформациейКлиент.АвтоПодбор(Текст, ДанныеВыбора, СтандартнаяОбработка); КонецПроцедуры &НаКлиенте Процедура Подключаемый_КонтактнаяИнформацияОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) УправлениеКонтактнойИнформациейКлиент.ОбработкаВыбора(ЭтотОбъект, ВыбранноеЗначение, Элемент.Имя, СтандартнаяОбработка); КонецПроцедуры &НаСервере Процедура Подключаемый_ОбновитьКонтактнуюИнформацию(Результат ) УправлениеКонтактнойИнформацией.ОбновитьКонтактнуюИнформацию(ЭтотОбъект, Объект, Результат); КонецПроцедуры // Конец СтандартныеПодсистемы.КонтактнаяИнформация #КонецОбласти

Catalogs/_ДемоПодразделения/ObjectModule

#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ПрограммныйИнтерфейс #Область ДляВызоваИзДругихПодсистем // СтандартныеПодсистемы.УправлениеДоступом // См. УправлениеДоступом.ЗаполнитьНаборыЗначенийДоступа. Процедура ЗаполнитьНаборыЗначенийДоступа(Таблица) Экспорт // Логика ограничения: // Чтения: Без ограничения. // Изменения: Без ограничения. // Чтение, Добавление, Изменение: набор №0. Строка = Таблица.Добавить(); Строка.ЗначениеДоступа = Перечисления.ДополнительныеЗначенияДоступа.ДоступРазрешен; КонецПроцедуры // Конец СтандартныеПодсистемы.УправлениеДоступом #КонецОбласти #КонецОбласти #КонецЕсли

Catalogs/_ДемоПроекты/Commands/СделатьОсновным/CommandModule

#Область ОбработчикиСобытий &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) Если ПараметрКоманды = Неопределено Тогда Возврат; КонецЕсли; ОповещениеОЗакрытии = Новый ОписаниеОповещения("СделатьОсновнымЗавершение", ЭтотОбъект, ПараметрКоманды); ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Отметить проект %1 как основной? |Основной проект подсвечивается жирным шрифтом и выводится в заголовке программы.'"), Строка(ПараметрКоманды)); ПоказатьВопрос(ОповещениеОЗакрытии, ТекстВопроса, РежимДиалогаВопрос.ДаНет); КонецПроцедуры #КонецОбласти #Область СлужебныеПроцедурыИФункции &НаКлиенте Процедура СделатьОсновнымЗавершение(Результат, Проект) Если Результат <> КодВозвратаДиалога.Да Тогда Возврат; КонецЕсли; УстановитьОсновнойПроект(Проект); Оповестить("Запись__ДемоПроект", Новый Структура, Проект); ОбновитьПовторноИспользуемыеЗначения(); СтандартныеПодсистемыКлиент.УстановитьРасширенныйЗаголовокПриложения(); КонецПроцедуры &НаСервере Процедура УстановитьОсновнойПроект(Проект) Справочники._ДемоПроекты.УстановитьОсновнойПроект(Проект); КонецПроцедуры #КонецОбласти

Catalogs/_ДемоПроекты/ManagerModule

#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ПрограммныйИнтерфейс #Область ДляВызоваИзДругихПодсистем // СтандартныеПодсистемы.УправлениеДоступом // См. УправлениеДоступомПереопределяемый.ПриЗаполненииСписковСОграничениемДоступа. Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт Ограничение.Текст = "РазрешитьЧтение |ГДЕ | ЗначениеРазрешено(Организация) |; |РазрешитьИзменениеЕслиРазрешеноЧтение |ГДЕ | ЗначениеРазрешено(Ответственный, ПустаяСсылка КАК ИСТИНА)"; КонецПроцедуры // Конец СтандартныеПодсистемы.УправлениеДоступом #КонецОбласти #КонецОбласти #Область СлужебныеПроцедурыИФункции // Устанавливает проект Проект в качестве основного для текущего пользователя. // Основной проект подсвечивается жирным шрифтом в списках проектов, а также выводится в заголовке программы. // // Параметры: // Проект - СправочникСсылка._ДемоПроекты - проект, который нужно установить в качестве основного. // Процедура УстановитьОсновнойПроект(Проект) Экспорт ОбщегоНазначенияКлиентСервер.ПроверитьПараметр("Справочники._ДемоПроекты.УстановитьОсновнойПроект", "Проект", Проект, Тип("СправочникСсылка._ДемоПроекты")); ОбщегоНазначения.ХранилищеОбщихНастроекСохранить("_ДемоПроекты", "ОсновнойПроект", Проект); ПараметрыСеанса._ДемоТекущийПроект = Проект; КонецПроцедуры // Возвращает основной проект для текущего пользователя. // // Возвращаемое значение: // СправочникСсылка._ДемоПроекты - основной проект или пустая ссылка, если основной проект не задан. // Функция ОсновнойПроект() Экспорт Возврат ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("_ДемоПроекты", "ОсновнойПроект", ПустаяСсылка()); КонецФункции // См. ОбщегоНазначенияПереопределяемый.ПриДобавленииОбработчиковУстановкиПараметровСеанса. Процедура УстановкаПараметровСеанса(ИмяПараметра, УстановленныеПараметры) Экспорт Если ИмяПараметра = "_ДемоТекущийПроект" Тогда ПараметрыСеанса._ДемоТекущийПроект = ОсновнойПроект(); УстановленныеПараметры.Добавить("_ДемоТекущийПроект"); КонецЕсли; КонецПроцедуры #КонецОбласти #КонецЕсли

Catalogs/_ДемоПроекты/ObjectModule

#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ПрограммныйИнтерфейс #Область ДляВызоваИзДругихПодсистем // СтандартныеПодсистемы.УправлениеДоступом // См. УправлениеДоступом.ЗаполнитьНаборыЗначенийДоступа. Процедура ЗаполнитьНаборыЗначенийДоступа(Таблица) Экспорт // Логика ограничения: // Чтения: Организация // Изменения: Организация И Ответственный (если ответственный заполнен). Если Не ЗначениеЗаполнено(Ответственный) Тогда // Чтение, Изменение. Строка = Таблица.Добавить(); Строка.ЗначениеДоступа = Организация; Иначе // Чтение: набор №1. Строка = Таблица.Добавить(); Строка.НомерНабора = 1; Строка.Чтение = Истина; Строка.ЗначениеДоступа = Организация; // Добавление, Изменение: набор №2. Строка = Таблица.Добавить(); Строка.НомерНабора = 2; Строка.Изменение = Истина; Строка.ЗначениеДоступа = Организация; Строка = Таблица.Добавить(); Строка.НомерНабора = 2; Строка.ЗначениеДоступа = Ответственный; КонецЕсли; КонецПроцедуры // Конец СтандартныеПодсистемы.УправлениеДоступом #КонецОбласти #КонецОбласти #КонецЕсли

Catalogs/_ДемоПроекты/Forms/ФормаСписка/Form/Module

#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. Возврат; КонецЕсли; ОсновнойПроект = Справочники._ДемоПроекты.ОсновнойПроект(); УстановитьУсловноеОформление(); // СтандартныеПодсистемы.ПодключаемыеКоманды ПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект); // Конец СтандартныеПодсистемы.ПодключаемыеКоманды КонецПроцедуры &НаКлиенте Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) Если ИмяСобытия = "Запись__ДемоПроект" Тогда ОбновитьСписок(); КонецЕсли; КонецПроцедуры #КонецОбласти #Область ОбработчикиКомандФормы // СтандартныеПодсистемы.ПодключаемыеКоманды &НаКлиенте Процедура Подключаемый_ВыполнитьКоманду(Команда) ПодключаемыеКомандыКлиент.ВыполнитьКоманду(ЭтотОбъект, Команда, Элементы.Список); КонецПроцедуры &НаСервере Процедура Подключаемый_ВыполнитьКомандуНаСервере(Контекст, Результат) ПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, Контекст, Элементы.Список, Результат); КонецПроцедуры &НаКлиенте Процедура Подключаемый_ОбновитьКоманды() ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Элементы.Список); КонецПроцедуры // Конец СтандартныеПодсистемы.ПодключаемыеКоманды #КонецОбласти #Область СлужебныеПроцедурыИФункции &НаСервере Процедура ОбновитьСписок() ОсновнойПроект = Справочники._ДемоПроекты.ОсновнойПроект(); УстановитьУсловноеОформление(); КонецПроцедуры &НаСервере Процедура УстановитьУсловноеОформление() УсловноеОформление.Элементы.Очистить(); УсловноеОформлениеСписка = Список.КомпоновщикНастроек.Настройки.УсловноеОформление; УсловноеОформлениеСписка.Элементы.Очистить(); // Установка оформления для основного проекта. ЭлементУсловногоОформления = УсловноеОформлениеСписка.Элементы.Добавить(); ЭлементУсловногоОформления.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный; ЭлементОтбораДанных = ЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); ЭлементОтбораДанных.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Ссылка"); ЭлементОтбораДанных.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; ЭлементОтбораДанных.ПравоеЗначение = ОсновнойПроект; ЭлементОтбораДанных.Использование = Истина; ЭлементЦветаОформления = ЭлементУсловногоОформления.Оформление.Элементы.Найти("Шрифт"); ЭлементЦветаОформления.Значение = Метаданные.ЭлементыСтиля._ДемоОсновнойПроектШрифт.Значение; ЭлементЦветаОформления.Использование = Истина; КонецПроцедуры #КонецОбласти

Catalogs/_ДемоПроекты/Forms/ФормаЭлемента/Form/Module

#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриЗаписиНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) // СтандартныеПодсистемы.РаботаСФайлами РаботаСФайлами.ПриЗаписиНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи, Параметры); // Конец СтандартныеПодсистемы.РаботаСФайлами КонецПроцедуры &НаСервере Процедура ПриЧтенииНаСервере(ТекущийОбъект) // СтандартныеПодсистемы.УправлениеДоступом Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом"); МодульУправлениеДоступом.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект); КонецЕсли; // Конец СтандартныеПодсистемы.УправлениеДоступом КонецПроцедуры #КонецОбласти #Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура РегламентПроектаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) РаботаСФайламиКлиент.ОткрытьФормуВыбораФайлов(Объект.Ссылка, Элемент, СтандартнаяОбработка); КонецПроцедуры &НаКлиенте Процедура РегламентПроектаОткрытие(Элемент, СтандартнаяОбработка) РаботаСФайламиКлиент.ОткрытьФормуФайла(Объект.РегламентПроекта, СтандартнаяОбработка); КонецПроцедуры #КонецОбласти #Область ОбработчикиКомандФормы &НаКлиенте Процедура НаписатьПисьмо(Команда) ПараметрыСообщения = Новый Структура(); Если ЗначениеЗаполнено(Объект.РегламентПроекта) Тогда ПараметрыСообщения.Вставить("РегламентПроекта", Объект.РегламентПроекта); КонецЕсли; ПараметрыСообщения.Вставить("УникальныйИдентификатор", УникальныйИдентификатор); ПараметрыСообщения.Вставить("Проект", Объект.Ссылка); Оповещение = Новый ОписаниеОповещения("ПослеОтправкиСообщения", ЭтотОбъект); ШаблоныСообщенийКлиент.СформироватьСообщение(Объект.Организация, "Письмо", Оповещение, Объект.Подразделение, ПараметрыСообщения); КонецПроцедуры #КонецОбласти #Область СлужебныеПроцедурыИФункции &НаКлиенте Процедура ПослеОтправкиСообщения(Результат, ДополнительныеПараметры) Экспорт Если Результат <> Истина Тогда ПоказатьПредупреждение(, НСтр("ru='Не удалось отправить сформированное письмо. Подробнее см. в журнале регистрации.'")); КонецЕсли; КонецПроцедуры #КонецОбласти

Catalogs/_ДемоПроектыПрисоединенныеФайлы/ManagerModule

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

Catalogs/_ДемоПроектыПрисоединенныеФайлы/ObjectModule



Catalogs/_ДемоСчетНаОплатуПокупателюПрисоединенныеФайлы/ManagerModule

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

Catalogs/_ДемоСчетНаОплатуПокупателюПрисоединенныеФайлы/ObjectModule



Catalogs/_ДемоФизическиеЛица/Commands/_ДемоНапомнитьОДнеРожденияЗа3Дня/CommandModule

#Область ОбработчикиСобытий &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) ТекстНапоминания = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'День рождения сотрудника: %1'"), Строка(ПараметрКоманды)); НапоминанияПользователяКлиент.НапомнитьОЕжегодномСобытииПредмета( ТекстНапоминания, 60*60*24*3, ПараметрКоманды, "ДатаРождения"); ПоказатьОповещениеПользователя(НСтр("ru = 'Создано напоминание:'"), , ТекстНапоминания, БиблиотекаКартинок.Информация32); КонецПроцедуры #КонецОбласти

Catalogs/_ДемоФизическиеЛица/Commands/_ДемоПровестиИнтервью/CommandModule

#Область ОбработчикиСобытий &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) Если Не ИспользованиеВозможно() Тогда ТекстПредупреждения = НСтр("ru = 'Форма недоступна, не включена подсистема ""Анкетирование"".'"); ПоказатьПредупреждение(, ТекстПредупреждения); Возврат; КонецЕсли; АнкетированиеКлиент.НачатьИнтервью(ПараметрКоманды); КонецПроцедуры #КонецОбласти #Область СлужебныеПроцедурыИФункции &НаСервере Функция ИспользованиеВозможно() Возврат ПолучитьФункциональнуюОпцию("ИспользоватьАнкетирование"); КонецФункции #КонецОбласти

Catalogs/_ДемоФизическиеЛица/ManagerModule

#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ПрограммныйИнтерфейс #Область ДляВызоваИзДругихПодсистем // СтандартныеПодсистемы.Печать // Заполняет список команд печати. // // Параметры: // КомандыПечати - ТаблицаЗначений - состав полей см. в функции УправлениеПечатью.СоздатьКоллекциюКомандПечати. // Процедура ДобавитьКомандыПечати(КомандыПечати) Экспорт ЗащитаПерсональныхДанных.ДобавитьКомандуПечатиСогласияНаОбработкуПерсональныхДанных(КомандыПечати); КонецПроцедуры // Конец СтандартныеПодсистемы.Печать // СтандартныеПодсистемы.ВерсионированиеОбъектов // Определяет настройки объекта для подсистемы ВерсионированиеОбъектов. // // Параметры: // Настройки - Структура - настройки подсистемы. Процедура ПриОпределенииНастроекВерсионированияОбъектов(Настройки) Экспорт КонецПроцедуры // Конец СтандартныеПодсистемы.ВерсионированиеОбъектов // СтандартныеПодсистемы.ШаблоныСообщений // Вызывается при подготовке шаблонов сообщений и позволяет переопределить список реквизитов и вложений. // // Параметры: // Реквизиты - ДеревоЗначений - список реквизитов шаблона. // ** Имя - Строка - Уникальное имя общего реквизита. // ** Представление - Строка - Представление общего реквизита. // ** Тип - Тип - Тип реквизита. По умолчанию строка. // ** Формат - Строка - Формат вывода значения для чисел, дат, строк и булевых значений. // Вложения - ТаблицаЗначений - печатные формы и вложения // ** Имя - Строка - Уникальное имя вложения. // ** Представление - Строка - Представление варианта. // ** ТипФайла - Строка - Тип вложения, который соответствует расширению файла: "pdf", "png", "jpg", mxl" // и др. // ДополнительныеПараметры - Структура - дополнительные сведения о шаблоне сообщений. // Процедура ПриПодготовкеШаблонаСообщения(Реквизиты, Вложения, ДополнительныеПараметры) Экспорт КонецПроцедуры // Вызывается в момент создания сообщений по шаблону для заполнения значений реквизитов и вложений. // // Параметры: // Сообщение - Структура - структура с ключами: // * ЗначенияРеквизитов - Соответствие - список используемых в шаблоне реквизитов. // ** Ключ - Строка - имя реквизита в шаблоне; // ** Значение - Строка - значение заполнения в шаблоне. // * ЗначенияОбщихРеквизитов - Соответствие - список используемых в шаблоне общих реквизитов. // ** Ключ - Строка - имя реквизита в шаблоне; // ** Значение - Строка - значение заполнения в шаблоне. // * Вложения - Соответствие - значения реквизитов // ** Ключ - Строка - имя вложения в шаблоне; // ** Значение - ДвоичныеДанные, Строка - двоичные данные или адрес во временном хранилище вложения. // ПредметСообщения - ЛюбаяСсылка - ссылка на объект являющийся источником данных. // ДополнительныеПараметры - Структура - Дополнительная информация о шаблоне сообщения. // Процедура ПриФормированииСообщения(Сообщение, ПредметСообщения, ДополнительныеПараметры) Экспорт КонецПроцедуры // Заполняет список получателей SMS при отправке сообщения сформированного по шаблону. // // Параметры: // ПолучателиSMS - ТаблицаЗначений - список получается SMS. // * НомерТелефона - Строка - номер телефона, куда будет отправлено сообщение SMS. // * Представление - Строка - представление получателя сообщения SMS. // * Контакт - Произвольный - контакт, которому принадлежит номер телефона. // ПредметСообщения - ЛюбаяСсылка, Структура - ссылка на объект являющийся источником данных, либо структура, // если шаблон содержит произвольные параметры: // * Предмет - ЛюбаяСсылка - ссылка на объект являющийся источником данных // * ПроизвольныеПараметры - Соответствие - заполненный список произвольных параметров. // Процедура ПриЗаполненииТелефоновПолучателейВСообщении(ПолучателиSMS, ПредметСообщения) Экспорт КонецПроцедуры // Заполняет список получателей письма при отправки сообщения сформированного по шаблону. // // Параметры: // ПолучателиПисьма - ТаблицаЗначений - список получается письма. // * Адрес - Строка - адрес электронной почты получателя. // * Представление - Строка - представление получается письма. // * Контакт - Произвольный - контакт, которому принадлежит адрес электронной почты. // ПредметСообщения - ЛюбаяСсылка, Структура - ссылка на объект являющийся источником данных, либо структура, // если шаблон содержит произвольные параметры: // * Предмет - ЛюбаяСсылка - ссылка на объект являющийся источником данных // * ПроизвольныеПараметры - Соответствие - заполненный список произвольных параметров. // Процедура ПриЗаполненииПочтыПолучателейВСообщении(ПолучателиПисьма, ПредметСообщения) Экспорт КонецПроцедуры // Конец СтандартныеПодсистемы.ШаблоныСообщений #КонецОбласти #КонецОбласти #КонецЕсли

Catalogs/_ДемоФизическиеЛица/Forms/ФормаГруппы/Form/Module

 #Область ОбработчикиСобытийФормы &НаКлиенте Процедура ПослеЗаписи(ПараметрыЗаписи) Оповестить("Запись_ФизическиеЛица", ПараметрыЗаписи, Объект.Ссылка); КонецПроцедуры #КонецОбласти

Catalogs/_ДемоФизическиеЛица/Forms/ФормаСписка/Form/Module

 #Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. Возврат; КонецЕсли; // СтандартныеПодсистемы.ПодключаемыеКоманды ПараметрыРазмещения = ПодключаемыеКоманды.ПараметрыРазмещения(); ПараметрыРазмещения.КоманднаяПанель = Элементы.КоманднаяПанель; ПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект, ПараметрыРазмещения); // Конец СтандартныеПодсистемы.ПодключаемыеКоманды // СтандартныеПодсистемы.ЗащитаПерсональныхДанных ЗащитаПерсональныхДанных.ПриСозданииНаСервереФормыСписка(ЭтотОбъект, Элементы.Список); // Конец СтандартныеПодсистемы.ЗащитаПерсональныхДанных КонецПроцедуры &НаКлиенте Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) // СтандартныеПодсистемы.ЗащитаПерсональныхДанных ЗащитаПерсональныхДанныхКлиент.ОбработкаОповещенияФормыСписка(Элементы.Список, ИмяСобытия); // Конец СтандартныеПодсистемы.ЗащитаПерсональныхДанных КонецПроцедуры #КонецОбласти #Область ОбработчикиСобытийЭлементовТаблицыФормыСписок &НаКлиенте Процедура СписокПриАктивизацииСтроки(Элемент) // СтандартныеПодсистемы.ПодключаемыеКоманды ПодключаемыеКомандыКлиент.НачатьОбновлениеКоманд(ЭтотОбъект); // Конец СтандартныеПодсистемы.ПодключаемыеКоманды КонецПроцедуры &НаСервереБезКонтекста Процедура СписокПриПолученииДанныхНаСервере(ИмяЭлемента, Настройки, Строки) // СтандартныеПодсистемы.ЗащитаПерсональныхДанных ЗащитаПерсональныхДанных.ПриПолученииДанныхНаСервере(Настройки, Строки); // Конец СтандартныеПодсистемы.ЗащитаПерсональныхДанных КонецПроцедуры #КонецОбласти #Область ОбработчикиКомандФормы // СтандартныеПодсистемы.ПоискИУдалениеДублей &НаКлиенте Процедура ОбъединитьВыделенные(Команда) ПоискИУдалениеДублейКлиент.ОбъединитьВыделенные(Элементы.Список); КонецПроцедуры &НаКлиенте Процедура ПоказатьМестаИспользования(Команда) ПоискИУдалениеДублейКлиент.ПоказатьМестаИспользования(Элементы.Список); КонецПроцедуры // Конец СтандартныеПодсистемы.ПоискИУдалениеДублей // СтандартныеПодсистемы.ПодключаемыеКоманды &НаКлиенте Процедура Подключаемый_ВыполнитьКоманду(Команда) ПодключаемыеКомандыКлиент.ВыполнитьКоманду(ЭтотОбъект, Команда, Элементы.Список); КонецПроцедуры &НаСервере Процедура Подключаемый_ВыполнитьКомандуНаСервере(Контекст, Результат) ПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, Контекст, Элементы.Список, Результат); КонецПроцедуры &НаКлиенте Процедура Подключаемый_ОбновитьКоманды() ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Элементы.Список); КонецПроцедуры // Конец СтандартныеПодсистемы.ПодключаемыеКоманды // СтандартныеПодсистемы.ЗащитаПерсональныхДанных &НаКлиенте Процедура Подключаемый_ПоказыватьСоСкрытымиПДн(Команда) ЗащитаПерсональныхДанныхКлиент.ПоказыватьСоСкрытымиПДн(ЭтотОбъект, Список); КонецПроцедуры // Конец СтандартныеПодсистемы.ЗащитаПерсональныхДанных #КонецОбласти

Catalogs/_ДемоФизическиеЛица/Forms/ФормаЭлемента/Form/Module

 #Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. Возврат; КонецЕсли; // СтандартныеПодсистемы.ВерсионированиеОбъектов ВерсионированиеОбъектов.ПриСозданииНаСервере(ЭтотОбъект); // Конец СтандартныеПодсистемы.ВерсионированиеОбъектов // СтандартныеПодсистемы.КонтактнаяИнформация УправлениеКонтактнойИнформацией.ПриСозданииНаСервере(ЭтотОбъект, Объект, "ГруппаКонтактнаяИнформация", ПоложениеЗаголовкаЭлементаФормы.Лево); // Конец СтандартныеПодсистемы.КонтактнаяИнформация // СтандартныеПодсистемы.ПодключаемыеКоманды ПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект); // Конец СтандартныеПодсистемы.ПодключаемыеКоманды // СтандартныеПодсистемы.СклонениеПредставленийОбъектов СклонениеПредставленийОбъектов.ПриСозданииНаСервере(ЭтотОбъект, Объект.Наименование); // Конец СтандартныеПодсистемы.СклонениеПредставленийОбъектов КонецПроцедуры &НаСервере Процедура ПриЧтенииНаСервере(ТекущийОбъект) // СтандартныеПодсистемы.КонтактнаяИнформация УправлениеКонтактнойИнформацией.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект); // Конец СтандартныеПодсистемы.КонтактнаяИнформация // СтандартныеПодсистемы.ПодключаемыеКоманды ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Объект); // Конец СтандартныеПодсистемы.ПодключаемыеКоманды КонецПроцедуры &НаСервере Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) // СтандартныеПодсистемы.КонтактнаяИнформация УправлениеКонтактнойИнформацией.ПередЗаписьюНаСервере(ЭтотОбъект, ТекущийОбъект); // Конец СтандартныеПодсистемы.КонтактнаяИнформация КонецПроцедуры &НаСервере Процедура ПриЗаписиНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) // СтандартныеПодсистемы.СклонениеПредставленийОбъектов СклонениеПредставленийОбъектов.ПриЗаписиНаСервере(ЭтотОбъект, Объект.Наименование, ТекущийОбъект.Ссылка, Истина, ?(ЗначениеЗаполнено(Объект.Пол), ?(Объект.Пол = Перечисления._ДемоПолФизическогоЛица.Мужской, 1, 2), Неопределено)); // Конец СтандартныеПодсистемы.СклонениеПредставленийОбъектов КонецПроцедуры &НаКлиенте Процедура ПослеЗаписи(ПараметрыЗаписи) Оповестить("Запись__ДемоФизическиеЛица", Новый Структура, Объект.Ссылка); КонецПроцедуры &НаСервере Процедура ОбработкаПроверкиЗаполненияНаСервере(Отказ, ПроверяемыеРеквизиты) // СтандартныеПодсистемы.КонтактнаяИнформация УправлениеКонтактнойИнформацией.ОбработкаПроверкиЗаполненияНаСервере(ЭтотОбъект, Объект, Отказ); // Конец СтандартныеПодсистемы.КонтактнаяИнформация КонецПроцедуры &НаКлиенте Процедура ПриОткрытии(Отказ) // СтандартныеПодсистемы.ПодключаемыеКоманды ПодключаемыеКомандыКлиент.НачатьОбновлениеКоманд(ЭтотОбъект); // Конец СтандартныеПодсистемы.ПодключаемыеКоманды КонецПроцедуры &НаКлиенте Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) // СтандартныеПодсистемы.ЗащитаПерсональныхДанных ЗащитаПерсональныхДанныхКлиент.ОбработкаОповещенияФормы(ЭтотОбъект, ИмяСобытия); // Конец СтандартныеПодсистемы.ЗащитаПерсональныхДанных КонецПроцедуры #КонецОбласти #Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура НаименованиеПриИзменении(Элемент) // СтандартныеПодсистемы.СклонениеПредставленийОбъектов СклонениеПредставленийОбъектовКлиент.ПриИзмененииПредставления(ЭтотОбъект); // Конец СтандартныеПодсистемы.СклонениеПредставленийОбъектов КонецПроцедуры #КонецОбласти #Область ОбработчикиКомандФормы // СтандартныеПодсистемы.КонтактнаяИнформация &НаКлиенте Процедура Подключаемый_КонтактнаяИнформацияПриИзменении(Элемент) УправлениеКонтактнойИнформациейКлиент.ПриИзменении(ЭтотОбъект, Элемент); КонецПроцедуры &НаКлиенте Процедура Подключаемый_КонтактнаяИнформацияНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) УправлениеКонтактнойИнформациейКлиент.НачалоВыбора(ЭтотОбъект, Элемент,, СтандартнаяОбработка); КонецПроцедуры &НаКлиенте Процедура Подключаемый_КонтактнаяИнформацияПриНажатии(Элемент, СтандартнаяОбработка) УправлениеКонтактнойИнформациейКлиент.НачалоВыбора(ЭтотОбъект, Элемент,, СтандартнаяОбработка); КонецПроцедуры &НаКлиенте Процедура Подключаемый_КонтактнаяИнформацияОчистка(Элемент, СтандартнаяОбработка) УправлениеКонтактнойИнформациейКлиент.Очистка(ЭтотОбъект, Элемент.Имя); КонецПроцедуры &НаКлиенте Процедура Подключаемый_КонтактнаяИнформацияВыполнитьКоманду(Команда) УправлениеКонтактнойИнформациейКлиент.ВыполнитьКоманду(ЭтотОбъект, Команда.Имя); КонецПроцедуры &НаКлиенте Процедура Подключаемый_КонтактнаяИнформацияАвтоПодбор(Элемент, Текст, ДанныеВыбора, ПараметрыПолученияДанных, Ожидание, СтандартнаяОбработка) УправлениеКонтактнойИнформациейКлиент.АвтоПодбор(Текст, ДанныеВыбора, СтандартнаяОбработка); КонецПроцедуры &НаКлиенте Процедура Подключаемый_КонтактнаяИнформацияОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) УправлениеКонтактнойИнформациейКлиент.ОбработкаВыбора(ЭтотОбъект, ВыбранноеЗначение, Элемент.Имя, СтандартнаяОбработка); КонецПроцедуры &НаСервере Процедура Подключаемый_ОбновитьКонтактнуюИнформацию(Результат) УправлениеКонтактнойИнформацией.ОбновитьКонтактнуюИнформацию(ЭтотОбъект, Объект, Результат); КонецПроцедуры // Конец СтандартныеПодсистемы.КонтактнаяИнформация // СтандартныеПодсистемы.ПодключаемыеКоманды &НаКлиенте Процедура Подключаемый_ВыполнитьКоманду(Команда) ПодключаемыеКомандыКлиент.ВыполнитьКоманду(ЭтотОбъект, Команда, Объект); КонецПроцедуры &НаСервере Процедура Подключаемый_ВыполнитьКомандуНаСервере(Контекст, Результат) ПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, Контекст, Объект, Результат); КонецПроцедуры &НаКлиенте Процедура Подключаемый_ОбновитьКоманды() ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Объект); КонецПроцедуры // Конец СтандартныеПодсистемы.ПодключаемыеКоманды // СтандартныеПодсистемы.СклонениеПредставленийОбъектов &НаКлиенте Процедура Склонения(Команда) СклонениеПредставленийОбъектовКлиент.ОбработатьКомандуСклонения(ЭтотОбъект, Объект.Наименование, Истина, ?(ЗначениеЗаполнено(Объект.Пол), ?(Объект.Пол = ПредопределенноеЗначение("Перечисление._ДемоПолФизическогоЛица.Мужской"), 1, 2), Неопределено)); КонецПроцедуры // Конец СтандартныеПодсистемы.СклонениеПредставленийОбъектов #КонецОбласти #Область СлужебныеПроцедурыИФункции // СтандартныеПодсистемы.СклонениеПредставленийОбъектов &НаКлиенте Процедура Подключаемый_ПросклонятьПредставлениеПоВсемПадежам() СклонениеПредставленийОбъектовКлиент.ПросклонятьПредставлениеПоВсемПадежам(ЭтотОбъект, Объект.Наименование, Истина, ?(ЗначениеЗаполнено(Объект.Пол), ?(Объект.Пол = ПредопределенноеЗначение("Перечисление._ДемоПолФизическогоЛица.Мужской"), 1, 2), Неопределено)); КонецПроцедуры // Конец СтандартныеПодсистемы.СклонениеПредставленийОбъектов #КонецОбласти

Catalogs/Валюты/ManagerModule

#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ПрограммныйИнтерфейс #Область ДляВызоваИзДругихПодсистем // СтандартныеПодсистемы.ГрупповоеИзменениеОбъектов // Возвращает реквизиты объекта, которые разрешается редактировать // с помощью обработки группового изменения реквизитов. // // Возвращаемое значение: // Массив - список имен реквизитов объекта. Функция РеквизитыРедактируемыеВГрупповойОбработке() Экспорт Результат = Новый Массив; Результат.Добавить("СпособУстановкиКурса"); Результат.Добавить("Наценка"); Результат.Добавить("ОсновнаяВалюта"); Результат.Добавить("ФормулаРасчетаКурса"); Возврат Результат; КонецФункции // Конец СтандартныеПодсистемы.ГрупповоеИзменениеОбъектов #КонецОбласти #КонецОбласти #КонецЕсли

Catalogs/Валюты/ObjectModule

#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ОбработчикиСобытий Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты) Если СпособУстановкиКурса = Перечисления.СпособыУстановкиКурсаВалюты.РасчетПоФормуле Тогда ТекстЗапроса = "ВЫБРАТЬ | Валюты.Наименование КАК СимвольныйКод |ИЗ | Справочник.Валюты КАК Валюты |ГДЕ | Валюты.СпособУстановкиКурса = ЗНАЧЕНИЕ(Перечисление.СпособыУстановкиКурсаВалюты.НаценкаНаКурсДругойВалюты) | |ОБЪЕДИНИТЬ ВСЕ | |ВЫБРАТЬ | Валюты.Наименование |ИЗ | Справочник.Валюты КАК Валюты |ГДЕ | Валюты.СпособУстановкиКурса = ЗНАЧЕНИЕ(Перечисление.СпособыУстановкиКурсаВалюты.РасчетПоФормуле)"; Запрос = Новый Запрос(ТекстЗапроса); ЗависимыеВалюты = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("СимвольныйКод"); Для Каждого Валюта Из ЗависимыеВалюты Цикл Если СтрНайти(ФормулаРасчетаКурса, Валюта) > 0 Тогда Отказ = Истина; КонецЕсли; КонецЦикла; КонецЕсли; Если ЗначениеЗаполнено(ОсновнаяВалюта.ОсновнаяВалюта) Тогда Отказ = Истина; КонецЕсли; Если Отказ Тогда ОбщегоНазначенияКлиентСервер.СообщитьПользователю( НСтр("ru = 'Курс валюты можно связать только с курсом независимой валюты.'")); КонецЕсли; Если СпособУстановкиКурса <> Перечисления.СпособыУстановкиКурсаВалюты.НаценкаНаКурсДругойВалюты Тогда ИсключаемыеРеквизиты = Новый Массив; ИсключаемыеРеквизиты.Добавить("ОсновнаяВалюта"); ИсключаемыеРеквизиты.Добавить("Наценка"); ОбщегоНазначения.УдалитьНепроверяемыеРеквизитыИзМассива(ПроверяемыеРеквизиты, ИсключаемыеРеквизиты); КонецЕсли; Если СпособУстановкиКурса <> Перечисления.СпособыУстановкиКурсаВалюты.РасчетПоФормуле Тогда ИсключаемыеРеквизиты = Новый Массив; ИсключаемыеРеквизиты.Добавить("ФормулаРасчетаКурса"); ОбщегоНазначения.УдалитьНепроверяемыеРеквизитыИзМассива(ПроверяемыеРеквизиты, ИсключаемыеРеквизиты); КонецЕсли; Если Не ЭтоНовый() И СпособУстановкиКурса = Перечисления.СпособыУстановкиКурсаВалюты.НаценкаНаКурсДругойВалюты И РаботаСКурсамиВалют.СписокЗависимыхВалют(Ссылка).Количество() > 0 Тогда ОбщегоНазначенияКлиентСервер.СообщитьПользователю( НСтр("ru = 'Валюта не может быть подчиненной, так как она является основной для других валют.'")); Отказ = Истина; КонецЕсли; КонецПроцедуры Процедура ПриЗаписи(Отказ) Если ОбменДанными.Загрузка Тогда Возврат; КонецЕсли; Если ДополнительныеСвойства.Свойство("ОбновитьКурсы") Тогда ПараметрыВалюты = Новый Структура; ПараметрыВалюты.Вставить("ОсновнаяВалюта"); ПараметрыВалюты.Вставить("Ссылка"); ПараметрыВалюты.Вставить("Наценка"); ПараметрыВалюты.Вставить("ДополнительныеСвойства"); ПараметрыВалюты.Вставить("ФормулаРасчетаКурса"); ЗаполнитьЗначенияСвойств(ПараметрыВалюты, ЭтотОбъект); ПараметрыЗадания = Новый Структура; ПараметрыЗадания.Вставить("ПодчиненнаяВалюта", ПараметрыВалюты); ПараметрыЗадания.Вставить("СпособУстановкиКурса", СпособУстановкиКурса); ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(Новый УникальныйИдентификатор()); ПараметрыВыполнения.ОжидатьЗавершение = 0; ПараметрыВыполнения.ЗапуститьНеВФоне = ОбновлениеИнформационнойБазы.НеобходимоОбновлениеИнформационнойБазы(); Результат = ДлительныеОперации.ВыполнитьВФоне("РаботаСКурсамиВалют.ОбновитьКурсВалюты", ПараметрыЗадания, ПараметрыВыполнения); Если Результат.Статус = "Ошибка" Тогда ВызватьИсключение Результат.КраткоеПредставлениеОшибки; КонецЕсли; Если ОбщегоНазначения.РазделениеВключено() И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса.ВалютыВМоделиСервиса") Тогда МодульКурсыВалютСлужебныйВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("КурсыВалютСлужебныйВМоделиСервиса"); МодульКурсыВалютСлужебныйВМоделиСервиса.ЗапланироватьКопированиеКурсовВалюты(ЭтотОбъект); КонецЕсли; КонецЕсли; РаботаСКурсамиВалют.ПроверитьКорректностьКурсаНа01_01_1980(Ссылка); КонецПроцедуры Процедура ПередЗаписью(Отказ) Если ОбменДанными.Загрузка Тогда Возврат; КонецЕсли; Если ЭтоНовый() Тогда Если СпособУстановкиКурса = Перечисления.СпособыУстановкиКурсаВалюты.НаценкаНаКурсДругойВалюты Или СпособУстановкиКурса = Перечисления.СпособыУстановкиКурсаВалюты.РасчетПоФормуле Тогда ДополнительныеСвойства.Вставить("ОбновитьКурсы"); КонецЕсли; ДополнительныеСвойства.Вставить("ЭтоНовый"); Иначе ПредыдущиеЗначения = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Ссылка, "Код,СпособУстановкиКурса,ОсновнаяВалюта,Наценка,ФормулаРасчетаКурса"); Если (ПредыдущиеЗначения.СпособУстановкиКурса <> СпособУстановкиКурса) Или (СпособУстановкиКурса = Перечисления.СпособыУстановкиКурсаВалюты.ЗагрузкаИзИнтернета И ПредыдущиеЗначения.Код <> Код) Или (СпособУстановкиКурса = Перечисления.СпособыУстановкиКурсаВалюты.НаценкаНаКурсДругойВалюты И (ПредыдущиеЗначения.ОсновнаяВалюта <> ОсновнаяВалюта Или ПредыдущиеЗначения.Наценка <> Наценка)) Или (СпособУстановкиКурса = Перечисления.СпособыУстановкиКурсаВалюты.РасчетПоФормуле И ПредыдущиеЗначения.ФормулаРасчетаКурса <> ФормулаРасчетаКурса) Тогда ДополнительныеСвойства.Вставить("ОбновитьКурсы"); КонецЕсли; КонецЕсли; Если СпособУстановкиКурса <> Перечисления.СпособыУстановкиКурсаВалюты.НаценкаНаКурсДругойВалюты Тогда ОсновнаяВалюта = Справочники.Валюты.ПустаяСсылка(); Наценка = 0; КонецЕсли; Если СпособУстановкиКурса <> Перечисления.СпособыУстановкиКурсаВалюты.РасчетПоФормуле Тогда ФормулаРасчетаКурса = ""; КонецЕсли; КонецПроцедуры #КонецОбласти #КонецЕсли

Catalogs/Валюты/Forms/ФормаСписка/Form/Module

 #Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. Возврат; КонецЕсли; Элементы.Валюты.РежимВыбора = Параметры.РежимВыбора; ДатаКурса = НачалоДня(ТекущаяДатаСеанса()); Список.КомпоновщикНастроек.Настройки.ДополнительныеСвойства.Вставить("ДатаКурса", ДатаКурса); ИзменяемыеПоля = Новый Массив; ИзменяемыеПоля.Добавить("Курс"); ИзменяемыеПоля.Добавить("Кратность"); Список.УстановитьОграниченияИспользованияВГруппировке(ИзменяемыеПоля); Список.УстановитьОграниченияИспользованияВПорядке(ИзменяемыеПоля); Список.УстановитьОграниченияИспользованияВОтборе(ИзменяемыеПоля); ДоступноИзменениеВалют = ПравоДоступа("Изменение", Метаданные.РегистрыСведений.КурсыВалют); ДоступнаЗагрузкаКурсов = Метаданные.Обработки.Найти("ЗагрузкаКурсовВалют") <> Неопределено И ДоступноИзменениеВалют; Элементы.ФормаПодборИзКлассификатора.Видимость = ДоступнаЗагрузкаКурсов; Элементы.ФормаЗагрузитьКурсыВалют.Видимость = ДоступнаЗагрузкаКурсов; Если Не ДоступнаЗагрузкаКурсов Тогда Если ДоступноИзменениеВалют Тогда Элементы.СоздатьВалюту.Заголовок = НСтр("ru = 'Создать'"); КонецЕсли; Элементы.Создать.Вид = ВидГруппыФормы.ГруппаКнопок; КонецЕсли; КонецПроцедуры &НаКлиенте Процедура ОбработкаВыбора(РезультатВыбора, ИсточникВыбора) Элементы.Валюты.Обновить(); Элементы.Валюты.ТекущаяСтрока = РезультатВыбора; КонецПроцедуры &НаКлиенте Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) Если ИмяСобытия = "Запись_КурсыВалют" Или ИмяСобытия = "Запись_ЗагрузкаКурсовВалют" Тогда Элементы.Валюты.Обновить(); КонецЕсли; КонецПроцедуры #КонецОбласти #Область ОбработчикиСобытийЭлементовТаблицыФормыВалюты &НаСервереБезКонтекста Процедура ВалютыПриПолученииДанныхНаСервере(ИмяЭлемента, Настройки, Строки) Перем ДатаКурса; Если Не Настройки.ДополнительныеСвойства.Свойство("ДатаКурса", ДатаКурса) Тогда Возврат; КонецЕсли; Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | КурсыВалют.Валюта КАК Валюта, | КурсыВалют.Курс КАК Курс, | КурсыВалют.Кратность КАК Кратность |ИЗ | РегистрСведений.КурсыВалют.СрезПоследних(&КонецПериода, Валюта В (&Валюты)) КАК КурсыВалют"; Запрос.УстановитьПараметр("Валюты", Строки.ПолучитьКлючи()); Запрос.УстановитьПараметр("КонецПериода", ДатаКурса); Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл СтрокаСписка = Строки[Выборка.Валюта]; СтрокаСписка.Данные["Курс"] = Выборка.Курс; Если Выборка.Кратность <> 1 Тогда Пояснение = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'руб. за %1 %2'"), Выборка.Кратность, СтрокаСписка.Данные["Наименование"]); СтрокаСписка.Данные["Кратность"] = Пояснение; КонецЕсли; КонецЦикла; КонецПроцедуры #КонецОбласти #Область ОбработчикиКомандФормы &НаКлиенте Процедура ПодборИзКлассификатора(Команда) ИмяФормыПодбора = "Обработка.ЗагрузкаКурсовВалют.Форма.ПодборВалютИзКлассификатора"; ОткрытьФорму(ИмяФормыПодбора, , ЭтотОбъект); КонецПроцедуры &НаКлиенте Процедура ЗагрузитьКурсыВалют(Команда) ИмяФормыЗагрузки = "Обработка.ЗагрузкаКурсовВалют.Форма"; ПараметрыФормы = Новый Структура("ОткрытиеИзСписка"); ОткрытьФорму(ИмяФормыЗагрузки, ПараметрыФормы); КонецПроцедуры #КонецОбласти

Catalogs/Валюты/Forms/ФормаЭлемента/Form/Module

 #Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. Возврат; КонецЕсли; Если Объект.Ссылка.Пустая() Тогда Если Параметры.Свойство("КодВалюты") Тогда Объект.Код = Параметры.КодВалюты; КонецЕсли; Если Параметры.Свойство("НаименованиеКраткое") Тогда Объект.Наименование = Параметры.НаименованиеКраткое; КонецЕсли; Если Параметры.Свойство("НаименованиеПолное") Тогда Объект.НаименованиеПолное = Параметры.НаименованиеПолное; КонецЕсли; Если Параметры.Свойство("Загружается") И Параметры.Загружается Тогда Объект.СпособУстановкиКурса = Перечисления.СпособыУстановкиКурсаВалюты.ЗагрузкаИзИнтернета; Иначе Объект.СпособУстановкиКурса = Перечисления.СпособыУстановкиКурсаВалюты.РучнойВвод; КонецЕсли; Если Параметры.Свойство("ПараметрыПрописи") Тогда Объект.ПараметрыПрописи = Параметры.ПараметрыПрописи; КонецЕсли; КонецЕсли; ЕстьФормаПрописей = Метаданные.Обработки.Найти("ЗагрузкаКурсовВалют") <> Неопределено; УстановитьДоступностьЭлементов(ЭтотОбъект); КонецПроцедуры #КонецОбласти #Область ОбработчикиСобытийЭлементовШапкиФормы //////////////////////////////////////////////////////////////////////////////// // Страница "Основные сведения". &НаКлиенте Процедура ОсновнаяВалютаНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; ПодготовитьДанныеВыбораПодчиненнойВалюты(ДанныеВыбора, Объект.Ссылка); КонецПроцедуры &НаКлиенте Процедура КурсВалютыПриИзменении(Элемент) УстановитьДоступностьЭлементов(ЭтотОбъект); КонецПроцедуры &НаКлиенте Процедура ПараметрыПрописиВалютыНажатие(Элемент) ОписаниеОповещения = Новый ОписаниеОповещения("ПриИзмененииПараметровПрописиВалюты", ЭтотОбъект); Если ЕстьФормаПрописей Тогда ПараметрыОткрытия = Новый Структура; ПараметрыОткрытия.Вставить("ТолькоПросмотр", ТолькоПросмотр); ПараметрыОткрытия.Вставить("ПараметрыПрописи", Объект.ПараметрыПрописи); ИмяФормыРедактированияПрописей = "Обработка.ЗагрузкаКурсовВалют.Форма.ПараметрыПрописиВалюты"; ОткрытьФорму(ИмяФормыРедактированияПрописей, ПараметрыОткрытия, ЭтотОбъект, , , , ОписаниеОповещения); Иначе ПоказатьВводСтроки(ОписаниеОповещения, Объект.ПараметрыПрописи, НСтр("ru = 'Параметры прописи валюты'")); КонецЕсли; КонецПроцедуры #КонецОбласти #Область СлужебныеПроцедурыИФункции &НаСервереБезКонтекста Процедура ПодготовитьДанныеВыбораПодчиненнойВалюты(ДанныеВыбора, Ссылка) // Подготавливает список выбора для подчиненной валюты таким образом, // чтобы в список не попала сама подчиненная валюта. ДанныеВыбора = Новый СписокЗначений; Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Валюты.Ссылка КАК Ссылка, | Валюты.НаименованиеПолное КАК НаименованиеПолное, | Валюты.Наименование КАК Наименование |ИЗ | Справочник.Валюты КАК Валюты |ГДЕ | Валюты.Ссылка <> &Ссылка | И Валюты.ОсновнаяВалюта = ЗНАЧЕНИЕ(Справочник.Валюты.ПустаяСсылка) | |УПОРЯДОЧИТЬ ПО | Валюты.НаименованиеПолное"; Запрос.Параметры.Вставить("Ссылка", Ссылка); Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл ДанныеВыбора.Добавить(Выборка.Ссылка, Выборка.НаименованиеПолное + " (" + Выборка.Наименование + ")"); КонецЦикла; КонецПроцедуры &НаКлиентеНаСервереБезКонтекста Процедура УстановитьДоступностьЭлементов(Форма) Элементы = Форма.Элементы; Объект = Форма.Объект; Элементы.ГруппаНаценкаНаКурсДругойВалюты.Доступность = Объект.СпособУстановкиКурса = ПредопределенноеЗначение("Перечисление.СпособыУстановкиКурсаВалюты.НаценкаНаКурсДругойВалюты"); Элементы.ФормулаРасчетаКурса.Доступность = Объект.СпособУстановкиКурса = ПредопределенноеЗначение("Перечисление.СпособыУстановкиКурсаВалюты.РасчетПоФормуле"); КонецПроцедуры &НаКлиенте Процедура ПриИзмененииПараметровПрописиВалюты(Результат, ДополнительныеПараметры) Экспорт Если Результат = Неопределено Тогда Возврат; КонецЕсли; Объект.ПараметрыПрописи = Результат; Модифицированность = Истина; КонецПроцедуры #КонецОбласти

Catalogs/ВариантыОтветовАнкет/ManagerModule

#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ПрограммныйИнтерфейс #Область ДляВызоваИзДругихПодсистем // СтандартныеПодсистемы.ГрупповоеИзменениеОбъектов // Возвращает реквизиты объекта, которые разрешается редактировать // с помощью обработки группового изменения реквизитов. // // Возвращаемое значение: // Массив - список имен реквизитов объекта. Функция РеквизитыРедактируемыеВГрупповойОбработке() Экспорт Результат = Новый Массив; Результат.Добавить("ТребуетОткрытогоОтвета"); Возврат Результат; КонецФункции // Конец СтандартныеПодсистемы.ГрупповоеИзменениеОбъектов #КонецОбласти #КонецОбласти #КонецЕсли

Catalogs/ВариантыОтветовАнкет/ObjectModule



Catalogs/ВариантыОтветовАнкет/Forms/ФормаВыбора/Form/Module

 #Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. Возврат; КонецЕсли; КонецПроцедуры #КонецОбласти

Catalogs/ВариантыОтветовАнкет/Forms/ФормаСписка/Form/Module

 #Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. Возврат; КонецЕсли; Если НЕ ПользователиКлиентСервер.ЭтоСеансВнешнегоПользователя() Тогда ОбщегоНазначенияКлиентСервер.СообщитьПользователю( НСтр("ru = 'Варианты ответов анкет используются только внешними пользователями.'"),,,,Отказ); КонецЕсли; КонецПроцедуры #КонецОбласти

Catalogs/ВариантыОтветовАнкет/Forms/ФормаЭлемента/Form/Module

 #Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. Возврат; КонецЕсли; Если Параметры.Свойство("Владелец") И ТипЗнч(Параметры.Владелец) = Тип("ПланВидовХарактеристикСсылка.ВопросыДляАнкетирования") И НЕ Параметры.Владелец.Пустая() Тогда Объект.Владелец = Параметры.Владелец; Иначе ТекстСообщения = НСтр("ru = 'Данная форма предназначена для открытия только из формы элемента плана вида характеристик ""Вопросы для анкетирования""'"); ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения); Отказ = Истина; Возврат; КонецЕсли; Если Параметры.Свойство("ТипОтвета") Тогда Элементы.ТребуетОткрытогоОтвета.Видимость = (Параметры.ТипОтвета = Перечисления.ТипыОтветовНаВопрос.НесколькоВариантовИз); Иначе Элементы.ТребуетОткрытогоОтвета.Видимость = (Объект.Владелец.ТипОтвета = Перечисления.ТипыОтветовНаВопрос.НесколькоВариантовИз); КонецЕсли; Если Параметры.Свойство("Наименование") Тогда Объект.Наименование = Параметры.Наименование; КонецЕсли; КонецПроцедуры #КонецОбласти

Catalogs/ВариантыОтчетов/Commands/Изменить/CommandModule

 #Область ОбработчикиСобытий &НаКлиенте Процедура ОбработкаКоманды(Вариант, ПараметрыВыполненияКоманды) ВариантыОтчетовКлиент.ПоказатьНастройкиОтчета(Вариант); КонецПроцедуры #КонецОбласти

Catalogs/ВариантыОтчетов/Commands/Открыть/CommandModule

#Область ОбработчикиСобытий &НаКлиенте Процедура ОбработкаКоманды(СсылкаВарианта, ПараметрыВыполненияКоманды) Вариант = СсылкаВарианта; Форма = ПараметрыВыполненияКоманды.Источник; Если ТипЗнч(Форма) = Тип("УправляемаяФорма") Тогда Если Форма.ИмяФормы = "Справочник.ВариантыОтчетов.Форма.ФормаСписка" Тогда Вариант = Форма.Элементы.Список.ТекущиеДанные; ИначеЕсли Форма.ИмяФормы = "Справочник.ВариантыОтчетов.Форма.ФормаЭлемента" Тогда Вариант = Форма.Объект; КонецЕсли; Иначе Форма = Неопределено; КонецЕсли; ВариантыОтчетовКлиент.ОткрытьФормуОтчета(Форма, Вариант); КонецПроцедуры #КонецОбласти

Catalogs/ВариантыОтчетов/Commands/РазместитьВРазделах/CommandModule

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

Catalogs/ВариантыОтчетов/Commands/СброситьНастройкиПользователей/CommandModule

 #Область ОбработчикиСобытий &НаКлиенте Процедура ОбработкаКоманды(Варианты, ПараметрыВыполненияКоманды) ВариантыОтчетовКлиент.ОткрытьДиалогСбросаНастроекПользователей(Варианты, ПараметрыВыполненияКоманды.Источник); КонецПроцедуры #КонецОбласти

Catalogs/ВариантыОтчетов/Commands/СброситьНастройкиРазмещения/CommandModule

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

Catalogs/ВариантыОтчетов/ManagerModule

#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ПрограммныйИнтерфейс #Область ДляВызоваИзДругихПодсистем // СтандартныеПодсистемы.ГрупповоеИзменениеОбъектов // Возвращает реквизиты объекта, которые разрешается редактировать // с помощью обработки группового изменения реквизитов. // // Возвращаемое значение: // Массив - список имен реквизитов объекта. Функция РеквизитыРедактируемыеВГрупповойОбработке() Экспорт Результат = Новый Массив; Результат.Добавить("Описание"); Результат.Добавить("Автор"); Результат.Добавить("ТолькоДляАвтора"); Возврат Результат; КонецФункции // Конец СтандартныеПодсистемы.ГрупповоеИзменениеОбъектов // СтандартныеПодсистемы.УправлениеДоступом // См. УправлениеДоступомПереопределяемый.ПриЗаполненииСписковСОграничениемДоступа. Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт Ограничение.Текст = "РазрешитьЧтение |ГДЕ | Пользовательский = ЛОЖЬ | ИЛИ ТолькоДляАвтора = ЛОЖЬ | ИЛИ ЭтоАвторизованныйПользователь(Автор) |; |РазрешитьИзменениеЕслиРазрешеноЧтение |ГДЕ | ЭтоАвторизованныйПользователь(Автор)"; Ограничение.ТекстДляВнешнихПользователей = Ограничение.Текст; КонецПроцедуры // Конец СтандартныеПодсистемы.УправлениеДоступом #КонецОбласти #КонецОбласти #КонецЕсли #Область ОбработчикиСобытий Процедура ОбработкаПолученияФормы(ВидФормы, Параметры, ВыбраннаяФорма, ДополнительнаяИнформация, СтандартнаяОбработка) #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда // Переопределение для целей избранного - вместо карточки с настройками размещения отчета будет открываться его // основная форма. Если ВидФормы = "ФормаОбъекта" Тогда СсылкаВарианта = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Параметры, "Ключ"); Если Не ЗначениеЗаполнено(СсылкаВарианта) Тогда ВызватьИсключение НСтр("ru = 'Новый вариант отчета можно создать только из формы отчета'"); КонецЕсли; ПоказатьКарточку = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(Параметры, "ПоказатьКарточку"); Если ПоказатьКарточку = Истина Тогда Возврат; КонецЕсли; ПараметрыОткрытия = ВариантыОтчетов.ПараметрыОткрытия(СсылкаВарианта); ВариантыОтчетовКлиентСервер.ДополнитьСтруктуруКлючом(ПараметрыОткрытия, "ВыполнятьЗамеры", Ложь); Если ПараметрыОткрытия.ТипОтчета = "Внутренний" Или ПараметрыОткрытия.ТипОтчета = "Расширение" Тогда Вид = "Отчет"; ИначеЕсли ПараметрыОткрытия.ТипОтчета = "Дополнительный" Тогда Вид = "ВнешнийОтчет"; Если Не ПараметрыОткрытия.Свойство("Подключен") Тогда ВариантыОтчетов.ПриПодключенииОтчета(ПараметрыОткрытия); КонецЕсли; Если Не ПараметрыОткрытия.Подключен Тогда ВызватьИсключение НСтр("ru = 'Вариант внешнего отчета можно открыть только из формы отчета.'"); КонецЕсли; Иначе ВызватьИсключение НСтр("ru = 'Вариант внешнего отчета можно открыть только из формы отчета.'"); КонецЕсли; ПолноеИмяОтчета = Вид + "." + ПараметрыОткрытия.ИмяОтчета; КлючУникальности = ОтчетыКлиентСервер.КлючУникальности(ПолноеИмяОтчета, ПараметрыОткрытия.КлючВарианта); ПараметрыОткрытия.Вставить("КлючПараметровПечати", КлючУникальности); ПараметрыОткрытия.Вставить("КлючСохраненияПоложенияОкна", КлючУникальности); СтандартнаяОбработка = Ложь; Если ПараметрыОткрытия.ТипОтчета = "Дополнительный" Тогда // Для платформы. ВыбраннаяФорма = "Справочник.ВариантыОтчетов.Форма.ФормаЭлемента"; Параметры.Вставить("ПараметрыОткрытияФормыОтчета", ПараметрыОткрытия); Возврат; КонецЕсли; ВыбраннаяФорма = ПолноеИмяОтчета + ".Форма"; ОбщегоНазначенияКлиентСервер.ДополнитьСтруктуру(Параметры, ПараметрыОткрытия); КонецЕсли; #КонецЕсли КонецПроцедуры #КонецОбласти #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область СлужебныйПрограммныйИнтерфейс //////////////////////////////////////////////////////////////////////////////// // Обработчики обновления. // Регистрирует данные к обновлению в плане обмена ОбновлениеИнформационнойБазы // см. Стандарты и методики разработки прикладных решений: Параллельный режим отложенного обновления. // // Параметры: // Параметры - Структура - см. ОбновлениеИнформационнойБазы.ОсновныеПараметрыОтметкиКОбработке. // Процедура ЗарегистрироватьДанныеКОбработкеДляПереходаНаНовуюВерсию(Параметры) Экспорт Запрос = Новый Запрос(" |ВЫБРАТЬ | Варианты.Ссылка |ИЗ | Справочник.ВариантыОтчетов КАК Варианты |ГДЕ | Варианты.Отчет = &УниверсальныйОтчет | И Варианты.Пользовательский |"); УниверсальныйОтчет = ОбщегоНазначения.ИдентификаторОбъектаМетаданных(Метаданные.Отчеты.УниверсальныйОтчет); Запрос.УстановитьПараметр("УниверсальныйОтчет", УниверсальныйОтчет); Ссылки = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"); ОбновлениеИнформационнойБазы.ОтметитьКОбработке(Параметры, Ссылки); КонецПроцедуры // Обрабатывает данные, зарегистрированные в плане обмена ОбновлениеИнформационнойБазы // см. Стандарты и методики разработки прикладных решений: Параллельный режим отложенного обновления. // // Параметры: // Параметры - Структура - см. ОбновлениеИнформационнойБазы.ОсновныеПараметрыОтметкиКОбработке. // Процедура ОбработатьДанныеДляПереходаНаНовуюВерсию(Параметры) Экспорт ОбъектМетаданных = Метаданные.Справочники.ВариантыОтчетов; ПолноеИмяОбъекта = ОбъектМетаданных.ПолноеИмя(); Обработано = 0; Отказано = 0; Вариант = ОбновлениеИнформационнойБазы.ВыбратьСсылкиДляОбработки(Параметры.Очередь, ПолноеИмяОбъекта); Пока Вариант.Следующий() Цикл Попытка Отчеты.УниверсальныйОтчет.УстановитьИсточникДанныхВарианта(Вариант.Ссылка); Обработано = Обработано + 1; Исключение // Если не удалось обработать вариант отчета, повторяем попытку снова. Отказано = Отказано + 1; ШаблонКомментария = НСтр("ru = 'Не удалось установить источник данных варианта отчета %1. |Возможно он поврежден и не подлежит восстановлению. | |Техническая информация о проблеме: %2'"); Комментарий = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( ШаблонКомментария, Вариант.Ссылка, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); ЗаписьЖурналаРегистрации( ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Предупреждение, ОбъектМетаданных, Вариант.Ссылка, Комментарий); КонецПопытки; КонецЦикла; Параметры.ОбработкаЗавершена = ОбновлениеИнформационнойБазы.ОбработкаДанныхЗавершена(Параметры.Очередь, ПолноеИмяОбъекта); Если Обработано = 0 И Отказано <> 0 Тогда ШаблонСообщения = НСтр("ru = 'Процедуре УстановитьИсточникДанныхВарианта не удалось обработать некоторые варианты отчетов: %1'"); ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонСообщения, Отказано); ВызватьИсключение ТекстСообщения; Иначе ШаблонКомментария = НСтр("ru = 'Процедура УстановитьИсточникДанныхВарианта обработала очередной пакет вариантов отчетов: %1'"); Комментарий = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ШаблонКомментария, Обработано); ЗаписьЖурналаРегистрации( ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Информация, ОбъектМетаданных,, Комментарий); КонецЕсли; КонецПроцедуры #КонецОбласти #КонецЕсли

Catalogs/ВариантыОтчетов/ObjectModule

#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ОбработчикиСобытий Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты) ИсключаемыеРеквизиты = Новый Массив; Если Не Пользовательский Тогда ИсключаемыеРеквизиты.Добавить("Автор"); КонецЕсли; ОбщегоНазначения.УдалитьНепроверяемыеРеквизитыИзМассива(ПроверяемыеРеквизиты, ИсключаемыеРеквизиты); Если Наименование <> "" И ВариантыОтчетов.НаименованиеЗанято(Отчет, Ссылка, Наименование) Тогда Отказ = Истина; ОбщегоНазначенияКлиентСервер.СообщитьПользователю( СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '""%1"" занято, необходимо указать другое наименование.'"), Наименование), , "Наименование"); КонецЕсли; КонецПроцедуры Процедура ПередЗаписью(Отказ) Если ДополнительныеСвойства.Свойство("ЗаполнениеПредопределенных") Тогда ПроверитьЗаполнениеПредопределенного(Отказ); КонецЕсли; Если ОбменДанными.Загрузка Тогда Возврат; КонецЕсли; ОбновлениеИнформационнойБазы.ПроверитьОбъектОбработан(ЭтотОбъект); ПользователемИзмененаПометкаУдаления = ( Не ЭтоНовый() И ПометкаУдаления <> Ссылка.ПометкаУдаления И Не ДополнительныеСвойства.Свойство("ЗаполнениеПредопределенных")); Если Не Пользовательский И ПользователемИзмененаПометкаУдаления Тогда Если ПометкаУдаления Тогда ТекстОшибки = НСтр("ru = 'Пометка на удаление предопределенного варианта отчета запрещена.'"); Иначе ТекстОшибки = НСтр("ru = 'Снятие пометки удаления предопределенного варианта отчета запрещена.'"); КонецЕсли; ВызватьИсключение ТекстОшибки; КонецЕсли; Если Не ПометкаУдаления И ПользователемИзмененаПометкаУдаления Тогда НаименованиеЗанято = ВариантыОтчетов.НаименованиеЗанято(Отчет, Ссылка, Наименование); КлючВариантаЗанят = ВариантыОтчетов.КлючВариантаЗанят(Отчет, Ссылка, КлючВарианта); Если НаименованиеЗанято ИЛИ КлючВариантаЗанят Тогда ТекстОшибки = НСтр("ru = 'Ошибка снятия пометки удаления варианта отчета:'"); Если НаименованиеЗанято Тогда ТекстОшибки = ТекстОшибки + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Наименование ""%1"" уже занято другим вариантом этого отчета.'"), Наименование); Иначе ТекстОшибки = ТекстОшибки + СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Ключ варианта ""%1"" уже занят другим вариантом этого отчета.'"), КлючВарианта); КонецЕсли; ТекстОшибки = ТекстОшибки + НСтр("ru = 'Перед снятием пометки удаления варианта отчета |необходимо установить пометку удаления конфликтующего варианта отчета.'"); ВызватьИсключение ТекстОшибки; КонецЕсли; КонецЕсли; Если ПользователемИзмененаПометкаУдаления Тогда Если Пользовательский Тогда ИнтерактивнаяПометкаУдаления = ПометкаУдаления; Иначе ИнтерактивнаяПометкаУдаления = Ложь; КонецЕсли; КонецЕсли; // Удаление из табличной части подсистем, помеченных на удаление. МассивУдаляемыхСтрок = Новый Массив; Для Каждого СтрокаРазмещения Из Размещение Цикл Если СтрокаРазмещения.Подсистема.ПометкаУдаления = Истина Тогда МассивУдаляемыхСтрок.Добавить(СтрокаРазмещения); КонецЕсли; КонецЦикла; Для Каждого СтрокаРазмещения Из МассивУдаляемыхСтрок Цикл Размещение.Удалить(СтрокаРазмещения); КонецЦикла; // Заполнение реквизитов "НаименованияПолей" и "НаименованияПараметровИОтборов". ПроиндексироватьНастройки(); КонецПроцедуры #КонецОбласти #Область СлужебныеПроцедурыИФункции Процедура ПроиндексироватьНастройки() Дополнительный = (ТипОтчета = Перечисления.ТипыОтчетов.Дополнительный); Если Не Пользовательский И Не Дополнительный Тогда // Для предопределенных вариантов отчетов данные хранятся в неразделенном справочнике. НаименованияПолей = ""; НаименованияПараметровИОтборов = ""; Возврат; КонецЕсли; Если Дополнительный И БезопасныйРежим() = Ложь Тогда Возврат; // Оставить текущие настройки. КонецЕсли; Попытка ВариантыОтчетов.ПроиндексироватьСодержимоеСхемы(ЭтотОбъект); Исключение ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Не удалось проиндексировать схему варианта ""%1"" отчета ""%2"":'"), КлючВарианта, Строка(Отчет)); ТекстОшибки = ТекстОшибки + Символы.ПС + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); ВариантыОтчетов.ЗаписатьВЖурнал(УровеньЖурналаРегистрации.Ошибка, ТекстОшибки, Ссылка); КонецПопытки; КонецПроцедуры // Заполняет родителя варианта отчета, основываясь на ссылке отчета и предопределенных настройках. Процедура ЗаполнитьРодителя() Экспорт ТекстЗапроса = "ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 1 | Предопределенные.Ссылка КАК ПредопределенныйВариант |ПОМЕСТИТЬ втПредопределенные |ИЗ | Справочник.ПредопределенныеВариантыОтчетов КАК Предопределенные |ГДЕ | Предопределенные.Отчет = &Отчет | И Предопределенные.ПометкаУдаления = ЛОЖЬ | И Предопределенные.ГруппироватьПоОтчету | |УПОРЯДОЧИТЬ ПО | Предопределенные.Включен УБЫВ |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 1 | ВариантыОтчетов.Ссылка |ИЗ | втПредопределенные КАК втПредопределенные | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ВариантыОтчетов КАК ВариантыОтчетов | ПО втПредопределенные.ПредопределенныйВариант = ВариантыОтчетов.ПредопределенныйВариант |ГДЕ | ВариантыОтчетов.ПометкаУдаления = ЛОЖЬ"; Если ТипОтчета = Перечисления.ТипыОтчетов.Расширение Тогда ТекстЗапроса = СтрЗаменить(ТекстЗапроса, ".ПредопределенныеВариантыОтчетов", ".ПредопределенныеВариантыОтчетовРасширений"); КонецЕсли; Запрос = Новый Запрос; Запрос.УстановитьПараметр("Отчет", Отчет); Запрос.Текст = ТекстЗапроса; Выборка = Запрос.Выполнить().Выбрать(); Если Выборка.Следующий() Тогда Родитель = Выборка.Ссылка; КонецЕсли; КонецПроцедуры // Базовые проверки корректности данных предопределенных вариантов отчетов. Процедура ПроверитьЗаполнениеПредопределенного(Отказ) Если ПометкаУдаления Или Не Предопределенный Тогда Возврат; ИначеЕсли Не ЗначениеЗаполнено(Отчет) Тогда ТекстОшибки = НеЗаполненоПоле("Отчет"); ИначеЕсли Не ЗначениеЗаполнено(ТипОтчета) Тогда ТекстОшибки = НеЗаполненоПоле("ТипОтчета"); ИначеЕсли ТипОтчета <> ВариантыОтчетовКлиентСервер.ТипОтчета(Отчет) Тогда ТекстОшибки = НСтр("ru = 'Противоречивые значения полей ""%1"" и ""%2""'"); ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстОшибки, "ТипОтчета", "Отчет"); ИначеЕсли Не ЗначениеЗаполнено(ПредопределенныйВариант) И (ТипОтчета = Перечисления.ТипыОтчетов.Внутренний Или ТипОтчета = Перечисления.ТипыОтчетов.Расширение) Тогда ТекстОшибки = НеЗаполненоПоле("ПредопределенныйВариант"); Иначе Возврат; КонецЕсли; ВызватьИсключение ТекстОшибки; КонецПроцедуры Функция НеЗаполненоПоле(ИмяПоля) Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Не заполнено поле ""%1""'"), ИмяПоля); КонецФункции #КонецОбласти #КонецЕсли

Catalogs/ВариантыОтчетов/Forms/РазмещениеВРазделах/Form/Module

#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) УстановитьУсловноеОформление(); Если Параметры.Свойство("АвтоТест") Тогда Возврат; КонецЕсли; СмешаннаяВажность = НСтр("ru = 'Различная'"); // Контроль количества вариантов осуществляется до открытия формы. ИзменяемыеВарианты.ЗагрузитьЗначения(Параметры.Варианты); КоличествоВариантов = ИзменяемыеВарианты.Количество(); ЗаполнитьРазделы(); КонецПроцедуры &НаКлиенте Процедура ПриОткрытии(Отказ) Если СообщенияОбОшибках <> Неопределено Тогда Отказ = Истина; ОчиститьСообщения(); СтандартныеПодсистемыКлиент.ПоказатьВопросПользователю(Неопределено, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = '%1 |Подробности: |%2'"), СообщенияОбОшибках.Текст, СообщенияОбОшибках.Подробно), РежимДиалогаВопрос.ОК); КонецЕсли; КонецПроцедуры #КонецОбласти #Область ОбработчикиСобытийЭлементовТаблицыФормыДеревоПодсистем &НаКлиенте Процедура ДеревоПодсистемИспользованиеПриИзменении(Элемент) ВариантыОтчетовКлиент.ДеревоПодсистемИспользованиеПриИзменении(ЭтотОбъект, Элемент); КонецПроцедуры &НаКлиенте Процедура ДеревоПодсистемВажностьПриИзменении(Элемент) ВариантыОтчетовКлиент.ДеревоПодсистемВажностьПриИзменении(ЭтотОбъект, Элемент); КонецПроцедуры #КонецОбласти #Область ОбработчикиКомандФормы &НаКлиенте Процедура Разместить(Команда) ЗаписатьНаСервере(); ТекстОповещения = НСтр("ru = 'Изменены настройки вариантов отчетов (%1 шт.).'"); ТекстОповещения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстОповещения, Формат(ИзменяемыеВарианты.Количество(), "ЧН=0; ЧГ=0")); ПоказатьОповещениеПользователя(, , ТекстОповещения); ВариантыОтчетовКлиент.ОбновитьОткрытыеФормы(); Закрыть(); КонецПроцедуры &НаКлиенте Процедура СнятьФлажки(Команда) СнятьФлажкиРазделов(); Элементы.ДеревоПодсистем.Развернуть(ДеревоПодсистем.ПолучитьЭлементы()[0].ПолучитьИдентификатор(), Истина); КонецПроцедуры #КонецОбласти #Область СлужебныеПроцедурыИФункции &НаСервере Процедура УстановитьУсловноеОформление() УсловноеОформление.Элементы.Очистить(); Элемент = УсловноеОформление.Элементы.Добавить(); ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.ДеревоПодсистемВажность.Имя); ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ДеревоПодсистем.Важность"); ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; ОтборЭлемента.ПравоеЗначение = Новый ПолеКомпоновкиДанных("СмешаннаяВажность"); Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ЗаблокированныйРеквизитЦвет); ВариантыОтчетов.УстановитьУсловноеОформлениеДереваПодсистем(ЭтотОбъект); КонецПроцедуры &НаСервере Процедура СнятьФлажкиРазделов() ДеревоПриемник = РеквизитФормыВЗначение("ДеревоПодсистем", Тип("ДеревоЗначений")); Найденные = ДеревоПриемник.Строки.НайтиСтроки(Новый Структура("Использование", 1), Истина); Для Каждого СтрокаДерева Из Найденные Цикл СтрокаДерева.Использование = 0; СтрокаДерева.Модифицированность = Истина; КонецЦикла; Найденные = ДеревоПриемник.Строки.НайтиСтроки(Новый Структура("Использование", 2), Истина); Для Каждого СтрокаДерева Из Найденные Цикл СтрокаДерева.Использование = 0; СтрокаДерева.Модифицированность = Истина; КонецЦикла; ЗначениеВРеквизитФормы(ДеревоПриемник, "ДеревоПодсистем"); КонецПроцедуры &НаСервере Процедура ЗаполнитьРазделы() ТекстЗапроса = "ВЫБРАТЬ РАЗРЕШЕННЫЕ | ВариантыОтчетов.Ссылка, | ВариантыОтчетов.ПредопределенныйВариант, | ВЫБОР | КОГДА ВариантыОтчетов.ПометкаУдаления | ТОГДА 1 | КОГДА &ПолныеПраваНаВарианты = ЛОЖЬ | И ВариантыОтчетов.Автор <> &ТекущийПользователь | ТОГДА 2 | КОГДА НЕ ВариантыОтчетов.Отчет В (&ОтчетыПользователя) | ТОГДА 3 | КОГДА ВариантыОтчетов.Ссылка В (&ОтключенныеВариантыПрограммы) | ТОГДА 4 | ИНАЧЕ 0 | КОНЕЦ КАК Причина |ПОМЕСТИТЬ втВарианты |ИЗ | Справочник.ВариантыОтчетов КАК ВариантыОтчетов |ГДЕ | ВариантыОтчетов.Ссылка В(&МассивВариантов) |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | втВарианты.Ссылка КАК Ссылка, | РазмещениеКонфигурации.Подсистема КАК Подсистема, | РазмещениеКонфигурации.Важный КАК Важный, | РазмещениеКонфигурации.СмТакже КАК СмТакже |ПОМЕСТИТЬ втОбщие |ИЗ | втВарианты КАК втВарианты | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ПредопределенныеВариантыОтчетов.Размещение КАК РазмещениеКонфигурации | ПО (втВарианты.Причина = 0) | И втВарианты.ПредопределенныйВариант = РазмещениеКонфигурации.Ссылка | |ОБЪЕДИНИТЬ ВСЕ | |ВЫБРАТЬ | втВарианты.Ссылка, | РазмещениеРасширений.Подсистема, | РазмещениеРасширений.Важный, | РазмещениеРасширений.СмТакже |ИЗ | втВарианты КАК втВарианты | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ПредопределенныеВариантыОтчетовРасширений.Размещение КАК РазмещениеРасширений | ПО (втВарианты.Причина = 0) | И втВарианты.ПредопределенныйВариант = РазмещениеРасширений.Ссылка |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ВариантыОтчетовРазмещение.Ссылка КАК Ссылка, | ВариантыОтчетовРазмещение.Использование КАК Использование, | ВариантыОтчетовРазмещение.Подсистема КАК Подсистема, | ВариантыОтчетовРазмещение.Важный КАК Важный, | ВариантыОтчетовРазмещение.СмТакже КАК СмТакже |ПОМЕСТИТЬ втРазделенные |ИЗ | втВарианты КАК втВарианты | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ВариантыОтчетов.Размещение КАК ВариантыОтчетовРазмещение | ПО (втВарианты.Причина = 0) | И втВарианты.Ссылка = ВариантыОтчетовРазмещение.Ссылка |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ РАЗЛИЧНЫЕ | втВарианты.Ссылка, | втВарианты.Причина КАК Причина |ИЗ | втВарианты КАК втВарианты |ГДЕ | втВарианты.Причина <> 0 | |УПОРЯДОЧИТЬ ПО | Причина |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ЕСТЬNULL(НастройкиРазделенных.Подсистема, НастройкиОбщих.Подсистема) КАК Ссылка, | СУММА(1) КАК Количество, | ВЫБОР | КОГДА ЕСТЬNULL(НастройкиРазделенных.Важный, НастройкиОбщих.Важный) = ИСТИНА | ТОГДА &ПредставлениеВажный | КОГДА ЕСТЬNULL(НастройкиРазделенных.СмТакже, НастройкиОбщих.СмТакже) = ИСТИНА | ТОГДА &ПредставлениеСмТакже | ИНАЧЕ """" | КОНЕЦ КАК Важность |ИЗ | втОбщие КАК НастройкиОбщих | ПОЛНОЕ СОЕДИНЕНИЕ втРазделенные КАК НастройкиРазделенных | ПО НастройкиОбщих.Ссылка = НастройкиРазделенных.Ссылка | И НастройкиОбщих.Подсистема = НастройкиРазделенных.Подсистема |ГДЕ | (НастройкиРазделенных.Использование = ИСТИНА | ИЛИ НастройкиРазделенных.Использование ЕСТЬ NULL ) | |СГРУППИРОВАТЬ ПО | ЕСТЬNULL(НастройкиРазделенных.Подсистема, НастройкиОбщих.Подсистема), | ВЫБОР | КОГДА ЕСТЬNULL(НастройкиРазделенных.Важный, НастройкиОбщих.Важный) = ИСТИНА | ТОГДА &ПредставлениеВажный | КОГДА ЕСТЬNULL(НастройкиРазделенных.СмТакже, НастройкиОбщих.СмТакже) = ИСТИНА | ТОГДА &ПредставлениеСмТакже | ИНАЧЕ """" | КОНЕЦ"; Запрос = Новый Запрос; Запрос.УстановитьПараметр("ПолныеПраваНаВарианты", ВариантыОтчетов.ПолныеПраваНаВарианты()); Запрос.УстановитьПараметр("ТекущийПользователь", Пользователи.АвторизованныйПользователь()); Запрос.УстановитьПараметр("МассивВариантов", ИзменяемыеВарианты.ВыгрузитьЗначения()); Запрос.УстановитьПараметр("ОтчетыПользователя", ВариантыОтчетов.ОтчетыТекущегоПользователя()); Запрос.УстановитьПараметр("ОтключенныеВариантыПрограммы", ВариантыОтчетовПовтИсп.ОтключенныеВариантыПрограммы()); Запрос.УстановитьПараметр("ПредставлениеВажный", ВариантыОтчетовКлиентСервер.ПредставлениеВажный()); Запрос.УстановитьПараметр("ПредставлениеСмТакже", ВариантыОтчетовКлиентСервер.ПредставлениеСмТакже()); Запрос.Текст = ТекстЗапроса; ВременныеТаблицы = Запрос.ВыполнитьПакет(); ОтфильтрованныеВарианты = ВременныеТаблицы[3].Выгрузить(); КоличествоОшибок = ОтфильтрованныеВарианты.Количество(); Если КоличествоОшибок > 0 Тогда СообщенияОбОшибках = Новый Структура("Текст, Подробно"); ТекущаяПричина = 0; СообщенияОбОшибках.Подробно = ""; Для Каждого СтрокаТаблицы Из ОтфильтрованныеВарианты Цикл Если ТекущаяПричина <> СтрокаТаблицы.Причина Тогда ТекущаяПричина = СтрокаТаблицы.Причина; СообщенияОбОшибках.Подробно = СообщенияОбОшибках.Подробно + Символы.ПС + Символы.ПС; Если ТекущаяПричина = 1 Тогда СообщенияОбОшибках.Подробно = СообщенияОбОшибках.Подробно + НСтр("ru = 'Помеченные на удаление:'"); ИначеЕсли ТекущаяПричина = 2 Тогда СообщенияОбОшибках.Подробно = СообщенияОбОшибках.Подробно + НСтр("ru = 'Недостаточно прав для изменения:'"); ИначеЕсли ТекущаяПричина = 3 Тогда СообщенияОбОшибках.Подробно = СообщенияОбОшибках.Подробно + НСтр("ru = 'Отчет отключен или недоступен по правам:'"); ИначеЕсли ТекущаяПричина = 4 Тогда СообщенияОбОшибках.Подробно = СообщенияОбОшибках.Подробно + НСтр("ru = 'Вариант отчета отключен по функциональной опции:'"); КонецЕсли; КонецЕсли; СообщенияОбОшибках.Подробно = СокрЛ(СообщенияОбОшибках.Подробно) + Символы.ПС + " - " + Строка(СтрокаТаблицы.Ссылка); ИзменяемыеВарианты.Удалить(ИзменяемыеВарианты.НайтиПоЗначению(СтрокаТаблицы.Ссылка)); КонецЦикла; КоличествоВариантов = ИзменяемыеВарианты.Количество(); Если КоличествоВариантов = 0 Тогда СообщенияОбОшибках.Текст = НСтр("ru = 'Недостаточно прав для размещения в разделах выбранных вариантов отчетов.'"); Иначе СообщенияОбОшибках.Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Недостаточно прав для размещения в разделах некоторых вариантов отчетов (%1).'"), Формат(КоличествоОшибок, "ЧГ=")); КонецЕсли; СообщенияОбОшибках = Новый ФиксированнаяСтруктура(СообщенияОбОшибках); КонецЕсли; ВхожденияПодсистем = ВременныеТаблицы[4].Выгрузить(); ДеревоИсточник = ВариантыОтчетовПовтИсп.ПодсистемыТекущегоПользователя(); ДеревоПриемник = РеквизитФормыВЗначение("ДеревоПодсистем", Тип("ДеревоЗначений")); ДеревоПриемник.Строки.Очистить(); ДобавитьПодсистемыВДерево(ДеревоПриемник, ДеревоИсточник, ВхожденияПодсистем); ЗначениеВРеквизитФормы(ДеревоПриемник, "ДеревоПодсистем"); КонецПроцедуры &НаСервере Процедура ЗаписатьНаСервере() ДеревоПриемник = РеквизитФормыВЗначение("ДеревоПодсистем", Тип("ДеревоЗначений")); ИзмененныеРазделы = ДеревоПриемник.Строки.НайтиСтроки(Новый Структура("Модифицированность", Истина), Истина); НачатьТранзакцию(); Попытка Блокировка = Новый БлокировкаДанных; Для Каждого ВариантОтчета Из ИзменяемыеВарианты Цикл ЭлементБлокировки = Блокировка.Добавить(Метаданные.Справочники.ВариантыОтчетов.ПолноеИмя()); ЭлементБлокировки.УстановитьЗначение("Ссылка", ВариантОтчета.Значение); КонецЦикла; Блокировка.Заблокировать(); Для Каждого ВариантОтчета Из ИзменяемыеВарианты Цикл ВариантОбъект = ВариантОтчета.Значение.ПолучитьОбъект(); ВариантыОтчетов.ДеревоПодсистемЗаписать(ВариантОбъект, ИзмененныеРазделы); ВариантОбъект.Записать(); КонецЦикла; ЗафиксироватьТранзакцию(); Исключение ОтменитьТранзакцию(); ВызватьИсключение; КонецПопытки; КонецПроцедуры &НаСервере Процедура ДобавитьПодсистемыВДерево(ПриемникРодитель, ИсточникРодитель, ВхожденияПодсистем) Для Каждого Источник Из ИсточникРодитель.Строки Цикл Приемник = ПриемникРодитель.Строки.Добавить(); ЗаполнитьЗначенияСвойств(Приемник, Источник); ВхожденияЭтойПодсистемы = ВхожденияПодсистем.Скопировать(Новый Структура("Ссылка", Приемник.Ссылка)); Если ВхожденияЭтойПодсистемы.Количество() = 1 Тогда Приемник.Важность = ВхожденияЭтойПодсистемы[0].Важность; ИначеЕсли ВхожденияЭтойПодсистемы.Количество() = 0 Тогда Приемник.Важность = ""; Иначе Приемник.Важность = СмешаннаяВажность; // Так же используется для условного оформления. КонецЕсли; ВхожденияВариантов = ВхожденияЭтойПодсистемы.Итог("Количество"); Если ВхожденияВариантов = КоличествоВариантов Тогда Приемник.Использование = 1; ИначеЕсли ВхожденияВариантов = 0 Тогда Приемник.Использование = 0; Иначе Приемник.Использование = 2; КонецЕсли; // Рекурсия ДобавитьПодсистемыВДерево(Приемник, Источник, ВхожденияПодсистем); КонецЦикла; КонецПроцедуры #КонецОбласти

Catalogs/ВариантыОтчетов/Forms/СбросНастроекРазмещения/Form/Module

 #Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) Если Параметры.Свойство("АвтоТест") Тогда Возврат; КонецЕсли; Если Не Параметры.Свойство("Варианты") Или ТипЗнч(Параметры.Варианты) <> Тип("Массив") Тогда ТекстОшибки = НСтр("ru = 'Не указаны варианты отчетов.'"); Возврат; КонецЕсли; ИзменяемыеВарианты.ЗагрузитьЗначения(Параметры.Варианты); Отфильтровать(); КонецПроцедуры &НаКлиенте Процедура ПриОткрытии(Отказ) Если Не ПустаяСтрока(ТекстОшибки) Тогда Отказ = Истина; ПоказатьПредупреждение(, ТекстОшибки); КонецЕсли; КонецПроцедуры #КонецОбласти #Область ОбработчикиКомандФормы &НаКлиенте Процедура КомандаСбросить(Команда) КоличествоВыбранныхВариантов = ИзменяемыеВарианты.Количество(); Если КоличествоВыбранныхВариантов = 0 Тогда ПоказатьПредупреждение(, НСтр("ru = 'Не указаны варианты отчетов.'")); Возврат; КонецЕсли; КоличествоВариантов = СброситьНастройкиРазмещенияСервер(ИзменяемыеВарианты); Если КоличествоВариантов = 1 И КоличествоВыбранныхВариантов = 1 Тогда СсылкаВарианта = ИзменяемыеВарианты[0].Значение; ОповещениеЗаголовок = НСтр("ru = 'Сброшены настройки размещения варианта отчета'"); ОповещениеСсылка = ПолучитьНавигационнуюСсылку(СсылкаВарианта); ОповещениеТекст = Строка(СсылкаВарианта); ПоказатьОповещениеПользователя(ОповещениеЗаголовок, ОповещениеСсылка, ОповещениеТекст); Иначе ОповещениеТекст = НСтр("ru = 'Сброшены настройки размещения |вариантов отчетов (%1 шт.).'"); ОповещениеТекст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ОповещениеТекст, Формат(КоличествоВариантов, "ЧН=0; ЧГ=0")); ПоказатьОповещениеПользователя(, , ОповещениеТекст); КонецЕсли; ВариантыОтчетовКлиент.ОбновитьОткрытыеФормы(); Закрыть(); КонецПроцедуры #КонецОбласти #Область СлужебныеПроцедурыИФункции //////////////////////////////////////////////////////////////////////////////// // Вызов сервера &НаСервереБезКонтекста Функция СброситьНастройкиРазмещенияСервер(Знач ИзменяемыеВарианты) КоличествоВариантов = 0; НачатьТранзакцию(); Попытка Блокировка = Новый БлокировкаДанных; Для Каждого ЭлементСписка Из ИзменяемыеВарианты Цикл ЭлементБлокировки = Блокировка.Добавить(Метаданные.Справочники.ВариантыОтчетов.ПолноеИмя()); ЭлементБлокировки.УстановитьЗначение("Ссылка", ЭлементСписка.Значение); КонецЦикла; Блокировка.Заблокировать(); Для Каждого ЭлементСписка Из ИзменяемыеВарианты Цикл ВариантОбъект = ЭлементСписка.Значение.ПолучитьОбъект(); Если ВариантыОтчетов.СброситьНастройкиВариантаОтчета(ВариантОбъект) Тогда ВариантОбъект.Записать(); КоличествоВариантов = КоличествоВариантов + 1; КонецЕсли; КонецЦикла; ЗафиксироватьТранзакцию(); Исключение ОтменитьТранзакцию(); ВызватьИсключение; КонецПопытки; Возврат КоличествоВариантов; КонецФункции //////////////////////////////////////////////////////////////////////////////// // Сервер &НаСервере Процедура Отфильтровать() КоличествоДоФильтрации = ИзменяемыеВарианты.Количество(); Запрос = Новый Запрос; Запрос.УстановитьПараметр("МассивВариантов", ИзменяемыеВарианты.ВыгрузитьЗначения()); Запрос.УстановитьПараметр("ТипВнутренний", Перечисления.ТипыОтчетов.Внутренний); Запрос.УстановитьПараметр("ТипРасширение", Перечисления.ТипыОтчетов.Расширение); Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ | ВариантыОтчетовРазмещение.Ссылка |ИЗ | Справочник.ВариантыОтчетов КАК ВариантыОтчетовРазмещение |ГДЕ | ВариантыОтчетовРазмещение.Ссылка В(&МассивВариантов) | И ВариантыОтчетовРазмещение.Пользовательский = ЛОЖЬ | И ВариантыОтчетовРазмещение.ТипОтчета В (&ТипВнутренний, &ТипРасширение) | И ВариантыОтчетовРазмещение.ПометкаУдаления = ЛОЖЬ"; МассивВариантов = Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"); ИзменяемыеВарианты.ЗагрузитьЗначения(МассивВариантов); КоличествоПослеФильтрации = ИзменяемыеВарианты.Количество(); Если КоличествоДоФильтрации <> КоличествоПослеФильтрации Тогда Если КоличествоПослеФильтрации = 0 Тогда ТекстОшибки = НСтр("ru = 'Сброс настроек размещения выбранных вариантов отчетов не требуется по одной или нескольким причинам: |- Выбраны пользовательские варианты отчетов. |- Выбраны помеченные на удаление варианты отчетов. |- Выбраны варианты дополнительных или внешних отчетов.'"); Возврат; КонецЕсли; КонецЕсли; КонецПроцедуры #КонецОбласти

Catalogs/ВариантыОтчетов/Forms/СбросПользовательскихНастроек/Form/Module

 #Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) Если Параметры.Свойство("АвтоТест") Тогда Возврат; КонецЕсли; Если Не Параметры.Свойство("Варианты") Или ТипЗнч(Параметры.Варианты) <> Тип("Массив") Тогда ТекстОшибки = НСтр("ru = 'Не указаны варианты отчетов.'"); Возврат; КонецЕсли; Если Не ЕстьПользовательскиеНастройки(Параметры.Варианты) Тогда ТекстОшибки = НСтр("ru = 'Пользовательские настройки выбранных вариантов отчетов (%1 шт) не заданы или уже сброшены.'"); ТекстОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстОшибки, Формат(Параметры.Варианты.Количество(), "ЧН=0; ЧГ=0")); Возврат; КонецЕсли; ИзменяемыеВарианты.ЗагрузитьЗначения(Параметры.Варианты); КонецПроцедуры &НаКлиенте Процедура ПриОткрытии(Отказ) Если Не ПустаяСтрока(ТекстОшибки) Тогда Отказ = Истина; ПоказатьПредупреждение(, ТекстОшибки); КонецЕсли; КонецПроцедуры #КонецОбласти #Область ОбработчикиКомандФормы &НаКлиенте Процедура КомандаСбросить(Команда) КоличествоВариантов = ИзменяемыеВарианты.Количество(); Если КоличествоВариантов = 0 Тогда ПоказатьПредупреждение(, НСтр("ru = 'Не указаны варианты отчетов.'")); Возврат; КонецЕсли; СброситьНастройкиПользователейСервер(ИзменяемыеВарианты); Если КоличествоВариантов = 1 Тогда СсылкаВарианта = ИзменяемыеВарианты[0].Значение; ОповещениеЗаголовок = НСтр("ru = 'Сброшены пользовательские настройки варианта отчета'"); ОповещениеСсылка = ПолучитьНавигационнуюСсылку(СсылкаВарианта); ОповещениеТекст = Строка(СсылкаВарианта); ПоказатьОповещениеПользователя(ОповещениеЗаголовок, ОповещениеСсылка, ОповещениеТекст); Иначе ОповещениеТекст = НСтр("ru = 'Сброшены пользовательские настройки |вариантов отчетов (%1 шт.).'"); ОповещениеТекст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ОповещениеТекст, Формат(КоличествоВариантов, "ЧН=0; ЧГ=0")); ПоказатьОповещениеПользователя(, , ОповещениеТекст); КонецЕсли; Закрыть(); КонецПроцедуры #КонецОбласти #Область СлужебныеПроцедурыИФункции //////////////////////////////////////////////////////////////////////////////// // Вызов сервера &НаСервереБезКонтекста Процедура СброситьНастройкиПользователейСервер(Знач ИзменяемыеВарианты) НачатьТранзакцию(); Попытка Блокировка = Новый БлокировкаДанных; Для Каждого ЭлементСписка Из ИзменяемыеВарианты Цикл ЭлементБлокировки = Блокировка.Добавить(Метаданные.Справочники.ВариантыОтчетов.ПолноеИмя()); ЭлементБлокировки.УстановитьЗначение("Ссылка", ЭлементСписка.Значение); КонецЦикла; Блокировка.Заблокировать(); РегистрыСведений.НастройкиВариантовОтчетов.СброситьНастройки(ИзменяемыеВарианты.ВыгрузитьЗначения()); ЗафиксироватьТранзакцию(); Исключение ОтменитьТранзакцию(); ВызватьИсключение; КонецПопытки; КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// // Сервер &НаСервере Функция ЕстьПользовательскиеНастройки(МассивВариантов) Запрос = Новый Запрос; Запрос.УстановитьПараметр("МассивВариантов", МассивВариантов); Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1 | ИСТИНА КАК ЕстьПользовательскиеНастройки |ИЗ | РегистрСведений.НастройкиВариантовОтчетов КАК Настройки |ГДЕ | Настройки.Вариант В(&МассивВариантов)"; ЕстьПользовательскиеНастройки = НЕ Запрос.Выполнить().Пустой(); Возврат ЕстьПользовательскиеНастройки; КонецФункции #КонецОбласти

Catalogs/ВариантыОтчетов/Forms/ФормаСписка/Form/Module

#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) УстановитьУсловноеОформление(); Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. Возврат; КонецЕсли; ПараметрыКлиента = ВариантыОтчетов.ПараметрыКлиента(); ВключаяПодчиненные = Истина; ДеревоЗначений = ВариантыОтчетовПовтИсп.ПодсистемыТекущегоПользователя().Скопировать(); ДеревоПодсистемЗаполнитьПолноеПредставление(ДеревоЗначений.Строки); ЗначениеВРеквизитФормы(ДеревоЗначений, "ДеревоПодсистем"); ДеревоПодсистемТекущаяСтрока = -1; Элементы.ДеревоПодсистем.ТекущаяСтрока = 0; Если Параметры.РежимВыбора = Истина Тогда РежимРаботыФормы = "Выбор"; РежимОткрытияОкна = РежимОткрытияОкнаФормы.БлокироватьОкноВладельца; Элементы.Список.Отображение = ОтображениеТаблицы.Список; ИначеЕсли Параметры.Свойство("РазделСсылка") Или Параметры.Свойство("РазделСсылка") Тогда РежимРаботыФормы = "ВсеОтчетыРаздела"; МассивОбхода = Новый Массив; МассивОбхода.Добавить(ДеревоПодсистем.ПолучитьЭлементы()[0]); Пока МассивОбхода.Количество() > 0 Цикл СтрокиРодителя = МассивОбхода[0].ПолучитьЭлементы(); МассивОбхода.Удалить(0); Для Каждого СтрокаДерева Из СтрокиРодителя Цикл Если СтрокаДерева.Ссылка = Параметры.РазделСсылка Тогда Элементы.ДеревоПодсистем.ТекущаяСтрока = СтрокаДерева.ПолучитьИдентификатор(); МассивОбхода.Очистить(); Прервать; Иначе МассивОбхода.Добавить(СтрокаДерева); КонецЕсли; КонецЦикла; КонецЦикла; Иначе РежимРаботыФормы = "Список"; ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы( Элементы, "Изменить", "Отображение", ОтображениеКнопки.КартинкаИТекст); ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы( Элементы, "РазместитьВРазделах", "ТолькоВоВсехДействиях", Ложь); КонецЕсли; ГлобальныеНастройки = ВариантыОтчетов.ГлобальныеНастройки(); Элементы.СтрокаПоиска.ПодсказкаВвода = ГлобальныеНастройки.Поиск.ПодсказкаВвода; КлючСохраненияПоложенияОкна = РежимРаботыФормы; КлючНазначенияИспользования = РежимРаботыФормы; УстановитьСвойствоСпискаПоПараметруФормы("РежимВыбора"); УстановитьСвойствоСпискаПоПараметруФормы("ВыборГруппИЭлементов"); УстановитьСвойствоСпискаПоПараметруФормы("МножественныйВыбор"); УстановитьСвойствоСпискаПоПараметруФормы("ТекущаяСтрока"); Если Параметры.РежимВыбора Тогда ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы( Элементы, "ВЫБРАТЬ", "КнопкаПоУмолчанию", Истина); Иначе ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы( Элементы, "ВЫБРАТЬ", "Видимость", Ложь); КонецЕсли; ПолныеПраваНаВарианты = ВариантыОтчетов.ПолныеПраваНаВарианты(); Если Не ПолныеПраваНаВарианты Тогда ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы( Элементы, "ОтборТипОтчета", "Видимость", Ложь); КонецЕсли; СписокВыбора = Элементы.ОтборТипОтчета.СписокВыбора; СписокВыбора.Добавить(1, НСтр("ru = 'Все, кроме внешних'")); СписокВыбора.Добавить(Перечисления.ТипыОтчетов.Внутренний, НСтр("ru = 'Внутренние'")); СписокВыбора.Добавить(Перечисления.ТипыОтчетов.Расширение, НСтр("ru = 'Расширения'")); СписокВыбора.Добавить(Перечисления.ТипыОтчетов.Дополнительный, НСтр("ru = 'Дополнительные'")); СписокВыбора.Добавить(Перечисления.ТипыОтчетов.Внешний, НСтр("ru = 'Внешние'")); Параметры.Свойство("СтрокаПоиска", СтрокаПоиска); Если Параметры.Отбор.Свойство("ТипОтчета", ОтборТипОтчета) Тогда Параметры.Отбор.Удалить("ТипОтчета"); КонецЕсли; Если Параметры.Свойство("ТолькоВарианты") Тогда Если Параметры.ТолькоВарианты Тогда ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( Список, "КлючВарианта", "", ВидСравненияКомпоновкиДанных.НеРавно, , , РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Обычный); КонецЕсли; КонецЕсли; ПерсональныеНастройкиСписка = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить( ВариантыОтчетовКлиентСервер.ПолноеИмяПодсистемы(), "Справочник.ВариантыОтчетов.ФормаСписка"); Если ПерсональныеНастройкиСписка <> Неопределено Тогда Элементы.СтрокаПоиска.СписокВыбора.ЗагрузитьЗначения(ПерсональныеНастройкиСписка.СтрокаПоискаСписокВыбора); КонецЕсли; Список.Параметры.УстановитьЗначениеПараметра("ТипВнутренний", Перечисления.ТипыОтчетов.Внутренний); Список.Параметры.УстановитьЗначениеПараметра("ТипРасширение", Перечисления.ТипыОтчетов.Расширение); Список.Параметры.УстановитьЗначениеПараметра("ТипДополнительный", Перечисления.ТипыОтчетов.Дополнительный); Список.Параметры.УстановитьЗначениеПараметра("ДоступныеОтчеты", ВариантыОтчетов.ОтчетыТекущегоПользователя()); Список.Параметры.УстановитьЗначениеПараметра("ОтключенныеВариантыПрограммы", Новый Массив(ВариантыОтчетовПовтИсп.ОтключенныеВариантыПрограммы())); ТекущийЭлемент = Элементы.Список; ВариантыОтчетов.ДополнитьОтборыИзСтруктуры(Список.КомпоновщикНастроек.Настройки.Отбор, Параметры.Отбор); Параметры.Отбор.Очистить(); ОбновитьСодержимоеСписка("ПриСозданииНаСервере"); КонецПроцедуры &НаКлиенте Процедура ПриОткрытии(Отказ) Если РежимРаботыФормы = "ВсеОтчетыРаздела" ИЛИ РежимРаботыФормы = "Выбор" Тогда Элементы.ДеревоПодсистем.Развернуть(ДеревоПодсистемТекущаяСтрока, Истина); КонецЕсли; КонецПроцедуры &НаКлиенте Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) Если ИмяСобытия = ВариантыОтчетовКлиентСервер.ИмяСобытияИзменениеВарианта() Или ИмяСобытия = "Запись_НаборКонстант" Тогда ДеревоПодсистемТекущаяСтрока = -1; ПодключитьОбработчикОжидания("ДеревоПодсистемОбработчикАктивизацииСтроки", 0.1, Истина); КонецЕсли; КонецПроцедуры #КонецОбласти #Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура ОтборТипОтчетаПриИзменении(Элемент) ОбновитьСодержимоеСписка(); КонецПроцедуры &НаКлиенте Процедура ОтборТипОтчетаОчистка(Элемент, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; ОтборТипОтчета = Неопределено; ОбновитьСодержимоеСписка(); КонецПроцедуры &НаКлиенте Процедура СтрокаПоискаПриИзменении(Элемент) ОбновитьСодержимоеСпискаКлиент("СтрокаПоискаПриИзменении"); КонецПроцедуры &НаКлиенте Процедура ВключаяПодчиненныеПриИзменении(Элемент) ДеревоПодсистемТекущаяСтрока = -1; ПодключитьОбработчикОжидания("ДеревоПодсистемОбработчикАктивизацииСтроки", 0.1, Истина); КонецПроцедуры #КонецОбласти #Область ОбработчикиСобытийЭлементовТаблицыФормыДеревоПодсистем &НаКлиенте Процедура ДеревоПодсистемПередНачаломИзменения(Элемент, Отказ) Отказ = Истина; КонецПроцедуры &НаКлиенте Процедура ДеревоПодсистемПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа) Отказ = Истина; КонецПроцедуры &НаКлиенте Процедура ДеревоПодсистемПередУдалением(Элемент, Отказ) Отказ = Истина; КонецПроцедуры &НаКлиенте Процедура ДеревоПодсистемПриАктивизацииСтроки(Элемент) ПодключитьОбработчикОжидания("ДеревоПодсистемОбработчикАктивизацииСтроки", 0.1, Истина); КонецПроцедуры &НаКлиенте Процедура ДеревоПодсистемПеретаскивание(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Строка, Поле) СтандартнаяОбработка = Ложь; Если Строка = Неопределено Тогда Возврат; КонецЕсли; ПараметрыРазмещения = Новый Структура("Варианты, Действие, Приемник, Источник"); //МассивВариантов, Всего, Представление ПараметрыРазмещения.Варианты = Новый Структура("Массив, Всего, Представление"); ПараметрыРазмещения.Варианты.Массив = ПараметрыПеретаскивания.Значение; ПараметрыРазмещения.Варианты.Всего = ПараметрыПеретаскивания.Значение.Количество(); Если ПараметрыРазмещения.Варианты.Всего = 0 Тогда Возврат; КонецЕсли; СтрокаПриемник = ДеревоПодсистем.НайтиПоИдентификатору(Строка); Если СтрокаПриемник = Неопределено ИЛИ СтрокаПриемник.Приоритет = "" Тогда Возврат; КонецЕсли; ПараметрыРазмещения.Приемник = Новый Структура("Ссылка, ПолноеПредставление, Идентификатор"); ЗаполнитьЗначенияСвойств(ПараметрыРазмещения.Приемник, СтрокаПриемник); ПараметрыРазмещения.Приемник.Идентификатор = СтрокаПриемник.ПолучитьИдентификатор(); СтрокаИсточник = Элементы.ДеревоПодсистем.ТекущиеДанные; ПараметрыРазмещения.Источник = Новый Структура("Ссылка, ПолноеПредставление, Идентификатор"); Если СтрокаИсточник = Неопределено ИЛИ СтрокаИсточник.Приоритет = "" Тогда ПараметрыРазмещения.Действие = "Копирование"; Иначе ЗаполнитьЗначенияСвойств(ПараметрыРазмещения.Источник, СтрокаИсточник); ПараметрыРазмещения.Источник.Идентификатор = СтрокаИсточник.ПолучитьИдентификатор(); Если ПараметрыПеретаскивания.Действие = ДействиеПеретаскивания.Копирование Тогда ПараметрыРазмещения.Действие = "Копирование"; Иначе ПараметрыРазмещения.Действие = "Перемещение"; КонецЕсли; КонецЕсли; Если ПараметрыРазмещения.Источник.Ссылка = ПараметрыРазмещения.Приемник.Ссылка Тогда ПоказатьПредупреждение(, НСтр("ru = 'Выбранные варианты отчетов уже в данном разделе.'")); Возврат; КонецЕсли; Если ПараметрыРазмещения.Варианты.Всего = 1 Тогда Если ПараметрыРазмещения.Действие = "Копирование" Тогда ШаблонВопроса = НСтр("ru = 'Разместить ""%1"" в ""%4""?'"); Иначе ШаблонВопроса = НСтр("ru = 'Переместить ""%1"" из ""%3"" в ""%4""?'"); КонецЕсли; ПараметрыРазмещения.Варианты.Представление = Строка(ПараметрыРазмещения.Варианты.Массив[0]); Иначе ПараметрыРазмещения.Варианты.Представление = ""; Для Каждого ВариантСсылка Из ПараметрыРазмещения.Варианты.Массив Цикл ПараметрыРазмещения.Варианты.Представление = ПараметрыРазмещения.Варианты.Представление + ?(ПараметрыРазмещения.Варианты.Представление = "", "", ", ") + Строка(ВариантСсылка); Если СтрДлина(ПараметрыРазмещения.Варианты.Представление) > 23 Тогда ПараметрыРазмещения.Варианты.Представление = Лев(ПараметрыРазмещения.Варианты.Представление, 20) + "..."; Прервать; КонецЕсли; КонецЦикла; Если ПараметрыРазмещения.Действие = "Копирование" Тогда ШаблонВопроса = НСтр("ru = 'Разместить варианты отчетов ""%1"" (%2 шт.) в ""%4""?'"); Иначе ШаблонВопроса = НСтр("ru = 'Переместить варианты отчетов ""%1"" (%2 шт.) из ""%3"" в ""%4""?'"); КонецЕсли; КонецЕсли; ТекстВопроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( ШаблонВопроса, ПараметрыРазмещения.Варианты.Представление, Формат(ПараметрыРазмещения.Варианты.Всего, "ЧГ=0"), ПараметрыРазмещения.Источник.ПолноеПредставление, ПараметрыРазмещения.Приемник.ПолноеПредставление); Обработчик = Новый ОписаниеОповещения("ДеревоПодсистемПеретаскиваниеЗавершение", ЭтотОбъект, ПараметрыРазмещения); ПоказатьВопрос(Обработчик, ТекстВопроса, РежимДиалогаВопрос.ДаНет, 60, КодВозвратаДиалога.Да); КонецПроцедуры #КонецОбласти #Область ОбработчикиСобытийЭлементовТаблицыФормыСписок &НаКлиенте Процедура СписокПередНачаломИзменения(Элемент, Отказ) Отказ = Истина; ВариантыОтчетовКлиент.ПоказатьНастройкиОтчета(Элементы.Список.ТекущаяСтрока); КонецПроцедуры &НаКлиенте Процедура СписокВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) Если РежимРаботыФормы = "ВсеОтчетыРаздела" Тогда СтандартнаяОбработка = Ложь; ВариантыОтчетовКлиент.ОткрытьФормуОтчета(ЭтотОбъект, Элементы.Список.ТекущиеДанные); ИначеЕсли РежимРаботыФормы = "Список" Тогда СтандартнаяОбработка = Ложь; ВариантыОтчетовКлиент.ПоказатьНастройкиОтчета(ВыбраннаяСтрока); КонецЕсли; КонецПроцедуры #КонецОбласти #Область ОбработчикиКомандФормы &НаКлиенте Процедура ВыполнитьПоиск(Команда) ОбновитьСодержимоеСпискаКлиент("ВыполнитьПоиск"); КонецПроцедуры &НаКлиенте Процедура Изменить(Команда) ВариантыОтчетовКлиент.ПоказатьНастройкиОтчета(Элементы.Список.ТекущаяСтрока); КонецПроцедуры #КонецОбласти #Область СлужебныеПроцедурыИФункции &НаСервере Процедура ДеревоПодсистемЗаполнитьПолноеПредставление(НаборСтрок, ПредставлениеРодителя = "") Для Каждого СтрокаДерева Из НаборСтрок Цикл Если ПустаяСтрока(СтрокаДерева.Имя) Тогда СтрокаДерева.ПолноеПредставление = ""; ИначеЕсли ПустаяСтрока(ПредставлениеРодителя) Тогда СтрокаДерева.ПолноеПредставление = СтрокаДерева.Представление; Иначе СтрокаДерева.ПолноеПредставление = ПредставлениеРодителя + "." + СтрокаДерева.Представление; КонецЕсли; ДеревоПодсистемЗаполнитьПолноеПредставление(СтрокаДерева.Строки, СтрокаДерева.ПолноеПредставление); КонецЦикла; КонецПроцедуры &НаСервере Процедура УстановитьУсловноеОформление() УсловноеОформление.Элементы.Очистить(); Элемент = УсловноеОформление.Элементы.Добавить(); ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.Описание.Имя); ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Список.Описание"); ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Заполнено; Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", ЦветаСтиля.ПоясняющийТекст); КонецПроцедуры &НаКлиенте Процедура ДеревоПодсистемПеретаскиваниеЗавершение(Ответ, ПараметрыРазмещения) Экспорт Если Ответ <> КодВозвратаДиалога.Да Тогда Возврат; КонецЕсли; РезультатВыполнения = РазместитьВариантыВПодсистеме(ПараметрыРазмещения); ВариантыОтчетовКлиент.ОбновитьОткрытыеФормы(); Если ПараметрыРазмещения.Варианты.Всего = РезультатВыполнения.Размещено Тогда Если ПараметрыРазмещения.Варианты.Всего = 1 Тогда Если ПараметрыРазмещения.Действие = "Перемещение" Тогда Шаблон = НСтр("ru = 'Успешно перемещен в ""%1"".'"); Иначе Шаблон = НСтр("ru = 'Успешно размещен в ""%1"".'"); КонецЕсли; Текст = ПараметрыРазмещения.Варианты.Представление; Ссылка = ПолучитьНавигационнуюСсылку(ПараметрыРазмещения.Варианты.Массив[0]); Иначе Если ПараметрыРазмещения.Действие = "Перемещение" Тогда Шаблон = НСтр("ru = 'Успешно перемещены в ""%1"".'"); Иначе Шаблон = НСтр("ru = 'Успешно размещены в ""%1"".'"); КонецЕсли; Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Варианты отчетов (%1).'"), Формат(ПараметрыРазмещения.Варианты.Всего, "ЧН=0; ЧГ=0")); Ссылка = Неопределено; КонецЕсли; Шаблон = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Шаблон, ПараметрыРазмещения.Приемник.ПолноеПредставление); ПоказатьОповещениеПользователя(Шаблон, Ссылка, Текст); Иначе ТекстОшибок = ""; Если Не ПустаяСтрока(РезультатВыполнения.НеМогутРазмещаться) Тогда ТекстОшибок = ?(ТекстОшибок = "", "", ТекстОшибок + Символы.ПС + Символы.ПС) + НСтр("ru = 'Не могут размещаться в командном интерфейсе:'") + Символы.ПС + РезультатВыполнения.НеМогутРазмещаться; КонецЕсли; Если Не ПустаяСтрока(РезультатВыполнения.УжеРазмещены) Тогда ТекстОшибок = ?(ТекстОшибок = "", "", ТекстОшибок + Символы.ПС + Символы.ПС) + НСтр("ru = 'Уже размещены в этом разделе:'") + Символы.ПС + РезультатВыполнения.УжеРазмещены; КонецЕсли; Если ПараметрыРазмещения.Действие = "Перемещение" Тогда Шаблон = НСтр("ru = 'Перемещено вариантов отчетов: %1 из %2. |Подробности: |%3'"); Иначе Шаблон = НСтр("ru = 'Размещено вариантов отчетов: %1 из %2. |Подробности: |%3'"); КонецЕсли; СтандартныеПодсистемыКлиент.ПоказатьВопросПользователю(Неопределено, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(Шаблон, РезультатВыполнения.Размещено, ПараметрыРазмещения.Варианты.Всего, ТекстОшибок), РежимДиалогаВопрос.ОК); КонецЕсли; КонецПроцедуры &НаСервере Процедура УстановитьСвойствоСпискаПоПараметруФормы(Ключ) Если Параметры.Свойство(Ключ) И ЗначениеЗаполнено(Параметры[Ключ]) Тогда Элементы.Список[Ключ] = Параметры[Ключ]; КонецЕсли; КонецПроцедуры &НаСервере Процедура ОбновитьСодержимоеСписка(Знач Событие = "") ИзменилисьПерсональныеНастройки = Ложь; Если ЗначениеЗаполнено(СтрокаПоиска) Тогда СписокВыбора = Элементы.СтрокаПоиска.СписокВыбора; ЭлементСписка = СписокВыбора.НайтиПоЗначению(СтрокаПоиска); Если ЭлементСписка = Неопределено Тогда СписокВыбора.Вставить(0, СтрокаПоиска); ИзменилисьПерсональныеНастройки = Истина; Если СписокВыбора.Количество() > 10 Тогда СписокВыбора.Удалить(10); КонецЕсли; Иначе Индекс = СписокВыбора.Индекс(ЭлементСписка); Если Индекс <> 0 Тогда СписокВыбора.Сдвинуть(Индекс, -Индекс); ИзменилисьПерсональныеНастройки = Истина; КонецЕсли; КонецЕсли; ТекущийЭлемент = Элементы.СтрокаПоиска; КонецЕсли; Если Событие = "СтрокаПоискаПриИзменении" И ИзменилисьПерсональныеНастройки Тогда ПерсональныеНастройкиСписка = Новый Структура("СтрокаПоискаСписокВыбора"); ПерсональныеНастройкиСписка.СтрокаПоискаСписокВыбора = Элементы.СтрокаПоиска.СписокВыбора.ВыгрузитьЗначения(); ОбщегоНазначения.ХранилищеОбщихНастроекСохранить( ВариантыОтчетовКлиентСервер.ПолноеИмяПодсистемы(), "Справочник.ВариантыОтчетов.ФормаСписка", ПерсональныеНастройкиСписка); КонецЕсли; ДеревоПодсистемТекущаяСтрока = Элементы.ДеревоПодсистем.ТекущаяСтрока; СтрокаДерева = ДеревоПодсистем.НайтиПоИдентификатору(ДеревоПодсистемТекущаяСтрока); Если СтрокаДерева = Неопределено Тогда Возврат; КонецЕсли; ВсеПодсистемы = Не ЗначениеЗаполнено(СтрокаДерева.ПолноеИмя); ПараметрыПоиска = Новый Структура; ПараметрыПоиска.Вставить("ПометкаУдаления", Ложь); Если ЗначениеЗаполнено(СтрокаПоиска) Тогда ПараметрыПоиска.Вставить("СтрокаПоиска", СтрокаПоиска); Элементы.Список.НачальноеОтображениеДерева = НачальноеОтображениеДерева.РаскрыватьВсеУровни; Иначе Элементы.Список.НачальноеОтображениеДерева = НачальноеОтображениеДерева.НеРаскрывать; КонецЕсли; ПараметрыПоиска.Вставить("ЖесткийОтборПоПодсистемам", Не ВсеПодсистемы); Если Не ВсеПодсистемы Или ЗначениеЗаполнено(СтрокаПоиска) Тогда МассивПодсистем = Новый Массив; Если Не ВсеПодсистемы Тогда МассивПодсистем.Добавить(СтрокаДерева.Ссылка); КонецЕсли; Если ВсеПодсистемы Или ВключаяПодчиненные Тогда ДобавитьРекурсивно(МассивПодсистем, СтрокаДерева.ПолучитьЭлементы()); КонецЕсли; ПараметрыПоиска.Вставить("Подсистемы", МассивПодсистем); КонецЕсли; Если ЗначениеЗаполнено(ОтборТипОтчета) Тогда МассивТиповОтчетов = Новый Массив; Если ОтборТипОтчета = 1 Тогда МассивТиповОтчетов.Добавить(Перечисления.ТипыОтчетов.Внутренний); МассивТиповОтчетов.Добавить(Перечисления.ТипыОтчетов.Расширение); МассивТиповОтчетов.Добавить(Перечисления.ТипыОтчетов.Дополнительный); Иначе МассивТиповОтчетов.Добавить(ОтборТипОтчета); КонецЕсли; ПараметрыПоиска.Вставить("ТипыОтчетов", МассивТиповОтчетов); КонецЕсли; РезультатПоиска = ВариантыОтчетов.НайтиСсылки(ПараметрыПоиска); ВариантыПользователя = ?(РезультатПоиска = Неопределено, Новый Массив, РезультатПоиска.Ссылки); Список.Параметры.УстановитьЗначениеПараметра("ЕстьОтборПоВариантам", РезультатПоиска <> Неопределено); Список.Параметры.УстановитьЗначениеПараметра("ВариантыПользователя", ВариантыПользователя); КонецПроцедуры &НаКлиенте Процедура ДеревоПодсистемОбработчикАктивизацииСтроки() Если ДеревоПодсистемТекущаяСтрока <> Элементы.ДеревоПодсистем.ТекущаяСтрока Тогда ОбновитьСодержимоеСписка(); КонецЕсли; КонецПроцедуры &НаСервере Процедура ДобавитьРекурсивно(МассивПодсистем, КоллекцияСтрокДерева) Для Каждого СтрокаДерева Из КоллекцияСтрокДерева Цикл МассивПодсистем.Добавить(СтрокаДерева.Ссылка); ДобавитьРекурсивно(МассивПодсистем, СтрокаДерева.ПолучитьЭлементы()); КонецЦикла; КонецПроцедуры &НаСервере Процедура ДеревоПодсистемЗаписатьСвойствоВМассив(МассивСтрокДерева, ИмяСвойства, МассивСсылок) Для Каждого СтрокаДерева Из МассивСтрокДерева Цикл МассивСсылок.Добавить(СтрокаДерева[ИмяСвойства]); ДеревоПодсистемЗаписатьСвойствоВМассив(СтрокаДерева.ПолучитьЭлементы(), ИмяСвойства, МассивСсылок); КонецЦикла; КонецПроцедуры &НаСервере Функция РазместитьВариантыВПодсистеме(ПараметрыРазмещения) ИсключаемыеПодсистемы = Новый Массив; Если ПараметрыРазмещения.Действие = "Перемещение" Тогда СтрокаИсточник = ДеревоПодсистем.НайтиПоИдентификатору(ПараметрыРазмещения.Источник.Идентификатор); ИсключаемыеПодсистемы.Добавить(СтрокаИсточник.Ссылка); ДеревоПодсистемЗаписатьСвойствоВМассив(СтрокаИсточник.ПолучитьЭлементы(), "Ссылка", ИсключаемыеПодсистемы); КонецЕсли; Размещено = 0; УжеРазмещены = ""; НеМогутРазмещаться = ""; НачатьТранзакцию(); Попытка Для Каждого ВариантСсылка Из ПараметрыРазмещения.Варианты.Массив Цикл Если ВариантСсылка.ТипОтчета = Перечисления.ТипыОтчетов.Внешний Тогда НеМогутРазмещаться = ?(НеМогутРазмещаться = "", "", НеМогутРазмещаться + Символы.ПС) + " " + Строка(ВариантСсылка) + " (" + НСтр("ru = 'внешний'") + ")"; Продолжить; ИначеЕсли ВариантСсылка.ПометкаУдаления Тогда НеМогутРазмещаться = ?(НеМогутРазмещаться = "", "", НеМогутРазмещаться + Символы.ПС) + " " + Строка(ВариантСсылка) + " (" + НСтр("ru = 'помечен на удаление'") + ")"; Продолжить; КонецЕсли; ЕстьИзменения = Ложь; ВариантОбъект = ВариантСсылка.ПолучитьОбъект(); СтрокаПриемник = ВариантОбъект.Размещение.Найти(ПараметрыРазмещения.Приемник.Ссылка, "Подсистема"); Если СтрокаПриемник = Неопределено Тогда СтрокаПриемник = ВариантОбъект.Размещение.Добавить(); СтрокаПриемник.Подсистема = ПараметрыРазмещения.Приемник.Ссылка; КонецЕсли; // Удаление строки из исходной подсистемы. // Важно помнить что исключение предопределенного варианта из подсистемы выполняется путем выключения флажка // подсистемы. Если ПараметрыРазмещения.Действие = "Перемещение" Тогда Для Каждого ИсключаемаяПодсистема Из ИсключаемыеПодсистемы Цикл СтрокаИсточник = ВариантОбъект.Размещение.Найти(ИсключаемаяПодсистема, "Подсистема"); Если СтрокаИсточник <> Неопределено Тогда Если СтрокаИсточник.Использование Тогда СтрокаИсточник.Использование = Ложь; Если Не ЕстьИзменения Тогда ЗаполнитьЗначенияСвойств(СтрокаПриемник, СтрокаИсточник, "Важный, СмТакже"); ЕстьИзменения = Истина; КонецЕсли; КонецЕсли; СтрокаИсточник.Важный = Ложь; СтрокаИсточник.СмТакже = Ложь; ИначеЕсли Не ВариантОбъект.Пользовательский Тогда СтрокаИсточник = ВариантОбъект.Размещение.Добавить(); СтрокаИсточник.Подсистема = ИсключаемаяПодсистема; ЕстьИзменения = Истина; КонецЕсли; КонецЦикла; КонецЕсли; // Регистрация строки в подсистеме-приемнике. Если Не СтрокаПриемник.Использование Тогда ЕстьИзменения = Истина; СтрокаПриемник.Использование = Истина; КонецЕсли; Если ЕстьИзменения Тогда Размещено = Размещено + 1; ВариантОбъект.Записать(); Иначе УжеРазмещены = ?(УжеРазмещены = "", "", УжеРазмещены + Символы.ПС) + " " + Строка(ВариантСсылка); КонецЕсли; КонецЦикла; ЗафиксироватьТранзакцию(); Исключение ОтменитьТранзакцию(); ВызватьИсключение; КонецПопытки; Если ПараметрыРазмещения.Действие = "Перемещение" И Размещено > 0 Тогда Элементы.ДеревоПодсистем.ТекущаяСтрока = ПараметрыРазмещения.Приемник.Идентификатор; ОбновитьСодержимоеСписка(); КонецЕсли; Возврат Новый Структура("Размещено,УжеРазмещены,НеМогутРазмещаться", Размещено, УжеРазмещены, НеМогутРазмещаться); КонецФункции &НаКлиенте Процедура ОбновитьСодержимоеСпискаКлиент(Событие) Замер = НачатьЗамер(Событие); ОбновитьСодержимоеСписка(Событие); ЗакончитьЗамер(Замер); КонецПроцедуры &НаКлиенте Функция НачатьЗамер(Событие) Если Не ПараметрыКлиента.ВыполнятьЗамеры Тогда Возврат Неопределено; КонецЕсли; Если ЗначениеЗаполнено(СтрокаПоиска) И (Событие = "СтрокаПоискаПриИзменении" Или Событие = "ВыполнитьПоиск") Тогда Имя = "СписокОтчетов.Поиск"; Иначе Возврат Неопределено; КонецЕсли; Комментарий = ПараметрыКлиента.ПрефиксЗамеров; Если ЗначениеЗаполнено(СтрокаПоиска) Тогда Комментарий = Комментарий + "; " + НСтр("ru = 'Поиск:'") + " " + Строка(СтрокаПоиска) + "; " + НСтр("ru = 'Включая подчиненные:'") + " " + Строка(ВключаяПодчиненные); Иначе Комментарий = Комментарий + "; " + НСтр("ru = 'Без поиска'"); КонецЕсли; Замер = Новый Структура("МодульОценкаПроизводительностиКлиент, Идентификатор"); Замер.МодульОценкаПроизводительностиКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ОценкаПроизводительностиКлиент"); Замер.Идентификатор = Замер.МодульОценкаПроизводительностиКлиент.НачатьЗамерВремени(Ложь, Имя); Замер.МодульОценкаПроизводительностиКлиент.УстановитьКомментарийЗамера(Замер.Идентификатор, Комментарий); Возврат Замер; КонецФункции &НаКлиенте Процедура ЗакончитьЗамер(Замер) Если Замер <> Неопределено Тогда Замер.МодульОценкаПроизводительностиКлиент.ЗавершитьЗамерВремени(Замер.Идентификатор); КонецЕсли; КонецПроцедуры #КонецОбласти

Catalogs/ВариантыОтчетов/Forms/ФормаЭлемента/Form/Module

#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) УстановитьУсловноеОформление(); Если Параметры.Свойство("АвтоТест") Тогда Возврат; КонецЕсли; Если Параметры.Свойство("ПараметрыОткрытияФормыОтчета", ПараметрыОткрытияФормыОтчета) Тогда Возврат; КонецЕсли; ОбновлениеИнформационнойБазы.ПроверитьОбъектОбработан(Объект, ЭтотОбъект); Доступен = ?(Объект.ТолькоДляАвтора, "1", "2"); // Чтение свойств предопределенного; // Заполнение реквизитов, связанных с предопределенным объектом при открытии. ПрочитатьСвойстваПредопределенного(Истина); ПолныеПраваНаВарианты = ВариантыОтчетов.ПолныеПраваНаВарианты(); ПравоНаЭтотВариант = ПолныеПраваНаВарианты Или Объект.Автор = Пользователи.АвторизованныйПользователь(); Если Не ПравоНаЭтотВариант Тогда ТолькоПросмотр = Истина; Элементы.ДеревоПодсистем.ТолькоПросмотр = Истина; КонецЕсли; Если Объект.ПометкаУдаления Тогда Элементы.ДеревоПодсистем.ТолькоПросмотр = Истина; КонецЕсли; Если Не Объект.Пользовательский Тогда Элементы.Наименование.ТолькоПросмотр = Истина; Элементы.Доступен.ТолькоПросмотр = Истина; Элементы.Автор.ТолькоПросмотр = Истина; Элементы.Автор.АвтоОтметкаНезаполненного = Ложь; КонецЕсли; ЭтоВнешний = (Объект.ТипОтчета = Перечисления.ТипыОтчетов.Внешний); Если ЭтоВнешний Тогда Элементы.ДеревоПодсистем.ТолькоПросмотр = Истина; КонецЕсли; Элементы.Доступен.ТолькоПросмотр = Не ПолныеПраваНаВарианты; Элементы.Автор.ТолькоПросмотр = Не ПолныеПраваНаВарианты; Элементы.ВидимостьПоУмолчанию.ТолькоПросмотр = Не ПолныеПраваНаВарианты; Элементы.ТехническаяИнформация.Видимость = ПолныеПраваНаВарианты; // Заполнение имени отчета для команды "Просмотр". Если Объект.ТипОтчета = Перечисления.ТипыОтчетов.Внутренний Или Объект.ТипОтчета = Перечисления.ТипыОтчетов.Расширение Тогда ИмяОтчета = Объект.Отчет.Имя; ИначеЕсли Объект.ТипОтчета = Перечисления.ТипыОтчетов.Дополнительный Тогда ИмяОтчета = Объект.Отчет.ИмяОбъекта; Иначе ИмяОтчета = Объект.Отчет; КонецЕсли; ПерезаполнитьДерево(Ложь); КонецПроцедуры &НаКлиенте Процедура ПриОткрытии(Отказ) Если ПараметрыОткрытияФормыОтчета <> Неопределено Тогда Отказ = Истина; ВариантыОтчетовКлиент.ОткрытьФормуОтчета(Неопределено, ПараметрыОткрытияФормыОтчета); КонецЕсли; КонецПроцедуры &НаКлиенте Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) Если Источник <> ЭтотОбъект И (ИмяСобытия = ВариантыОтчетовКлиентСервер.ИмяСобытияИзменениеВарианта() Или ИмяСобытия = "Запись_НаборКонстант") Тогда ПерезаполнитьДерево(Истина); Элементы.ДеревоПодсистем.Развернуть(ДеревоПодсистем.ПолучитьЭлементы()[0].ПолучитьИдентификатор(), Истина); КонецЕсли; КонецПроцедуры &НаСервере Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) // Запись свойств, связанных с предопределенным вариантом отчета. Если ТипЗнч(СвойстваПредопределенного) = Тип("ФиксированнаяСтруктура") Тогда ТекущийОбъект.ВидимостьПоУмолчаниюПереопределена = Объект.ВидимостьПоУмолчанию <> СвойстваПредопределенного.ВидимостьПоУмолчанию; Если Не ПустаяСтрока(Объект.Описание) И НРег(СокрЛП(Объект.Описание)) = НРег(СокрЛП(СвойстваПредопределенного.Описание)) Тогда ТекущийОбъект.Описание = ""; КонецЕсли; КонецЕсли; // Запись дерева подсистем. ДеревоПриемник = РеквизитФормыВЗначение("ДеревоПодсистем", Тип("ДеревоЗначений")); Если ТекущийОбъект.ЭтоНовый() Тогда ИзмененныеРазделы = ДеревоПриемник.Строки.НайтиСтроки(Новый Структура("Использование", 1), Истина); Иначе ИзмененныеРазделы = ДеревоПриемник.Строки.НайтиСтроки(Новый Структура("Модифицированность", Истина), Истина); КонецЕсли; ВариантыОтчетов.ДеревоПодсистемЗаписать(ТекущийОбъект, ИзмененныеРазделы); КонецПроцедуры &НаСервере Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи) ПерезаполнитьДерево(Ложь); ПрочитатьСвойстваПредопределенного(Ложь); КонецПроцедуры &НаКлиенте Процедура ПослеЗаписи(ПараметрыЗаписи) ПараметрОповещения = Новый Структура("Ссылка, Наименование, Автор, Описание"); ЗаполнитьЗначенияСвойств(ПараметрОповещения, Объект); Оповестить(ВариантыОтчетовКлиентСервер.ИмяСобытияИзменениеВарианта(), ПараметрОповещения, ЭтотОбъект); СтандартныеПодсистемыКлиент.РазвернутьУзлыДерева(ЭтотОбъект, "ДеревоПодсистем", "*", Истина); КонецПроцедуры &НаСервере Процедура ПриЧтенииНаСервере(ТекущийОбъект) // СтандартныеПодсистемы.УправлениеДоступом Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом"); МодульУправлениеДоступом.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект); КонецЕсли; // Конец СтандартныеПодсистемы.УправлениеДоступом КонецПроцедуры #КонецОбласти #Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура ОписаниеНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; ВариантыОтчетовКлиент.РедактироватьМногострочныйТекст(ЭтотОбъект, Элемент.ТекстРедактирования, Объект, "Описание", НСтр("ru = 'Описание'")); КонецПроцедуры &НаКлиенте Процедура ДоступенПриИзменении(Элемент) Объект.ТолькоДляАвтора = (ЭтотОбъект.Доступен = "1"); КонецПроцедуры #КонецОбласти #Область ОбработчикиСобытийЭлементовТаблицыФормыДеревоПодсистем &НаКлиенте Процедура ДеревоПодсистемИспользованиеПриИзменении(Элемент) ВариантыОтчетовКлиент.ДеревоПодсистемИспользованиеПриИзменении(ЭтотОбъект, Элемент); КонецПроцедуры &НаКлиенте Процедура ДеревоПодсистемВажностьПриИзменении(Элемент) ВариантыОтчетовКлиент.ДеревоПодсистемВажностьПриИзменении(ЭтотОбъект, Элемент); КонецПроцедуры #КонецОбласти #Область СлужебныеПроцедурыИФункции &НаСервере Процедура УстановитьУсловноеОформление() УсловноеОформление.Элементы.Очистить(); ВариантыОтчетов.УстановитьУсловноеОформлениеДереваПодсистем(ЭтотОбъект); КонецПроцедуры &НаСервере Функция ПерезаполнитьДерево(Прочитать) ВыделенныеСтроки = ОтчетыСервер.ЗапомнитьВыделенныеСтроки(ЭтотОбъект, "ДеревоПодсистем", "Ссылка"); Если Прочитать Тогда ЭтотОбъект.Прочитать(); КонецЕсли; ДеревоПриемник = ВариантыОтчетов.ДеревоПодсистемСформировать(ЭтотОбъект, Объект); ЗначениеВРеквизитФормы(ДеревоПриемник, "ДеревоПодсистем"); ОтчетыСервер.ВосстановитьВыделенныеСтроки(ЭтотОбъект, "ДеревоПодсистем", ВыделенныеСтроки); Возврат Истина; КонецФункции &НаСервере Процедура ПрочитатьСвойстваПредопределенного(ПервоеЧтение) Если ПервоеЧтение Тогда Если Не Объект.Пользовательский И (Объект.ТипОтчета = Перечисления.ТипыОтчетов.Внутренний Или Объект.ТипОтчета = Перечисления.ТипыОтчетов.Расширение) И ЗначениеЗаполнено(Объект.ПредопределенныйВариант) Тогда // Чтение настроек предопределенного. Сведения = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Объект.ПредопределенныйВариант, "ВидимостьПоУмолчанию, Описание"); СвойстваПредопределенного = Новый ФиксированнаяСтруктура(Сведения); Иначе Возврат; // Не предопределенный. КонецЕсли; Иначе Если ТипЗнч(СвойстваПредопределенного) <> Тип("ФиксированнаяСтруктура") Тогда Возврат; // Не предопределенный. КонецЕсли; КонецЕсли; Если Объект.ВидимостьПоУмолчаниюПереопределена = Ложь Тогда Объект.ВидимостьПоУмолчанию = СвойстваПредопределенного.ВидимостьПоУмолчанию; КонецЕсли; Если ПустаяСтрока(Объект.Описание) Тогда Объект.Описание = СвойстваПредопределенного.Описание; КонецЕсли; КонецПроцедуры #КонецОбласти

Catalogs/ВерсииРасширений/ManagerModule

#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область СлужебныйПрограммныйИнтерфейс // См. ОбщегоНазначенияПереопределяемый.ПриДобавленииОбработчиковУстановкиПараметровСеанса. Процедура УстановкаПараметровСеанса(ИменаПараметровСеанса, УстановленныеПараметры) Экспорт Если ИменаПараметровСеанса = Неопределено Или ИменаПараметровСеанса.Найти("УстановленныеРасширения") <> Неопределено Тогда ПараметрыСеанса.УстановленныеРасширения = УстановленныеРасширения(); УстановленныеПараметры.Добавить("УстановленныеРасширения"); КонецЕсли; Если ИменаПараметровСеанса = Неопределено Или ИменаПараметровСеанса.Найти("ПодключенныеРасширения") <> Неопределено Тогда Расширения = РасширенияКонфигурации.Получить(, ИсточникРасширенийКонфигурации.СеансАктивные); ПараметрыСеанса.ПодключенныеРасширения = КонтрольныеСуммыРасширений(Расширения); УстановленныеПараметры.Добавить("ПодключенныеРасширения"); КонецЕсли; Если ИменаПараметровСеанса <> Неопределено И ИменаПараметровСеанса.Найти("ВерсияРасширений") <> Неопределено Тогда ПараметрыСеанса.ВерсияРасширений = ВерсияРасширений(); УстановленныеПараметры.Добавить("ВерсияРасширений"); КонецЕсли; Если ИменаПараметровСеанса = Неопределено И ТекущийРежимЗапуска() <> Неопределено Тогда ЗарегистрироватьИспользованиеВерсииРасширений(); КонецЕсли; КонецПроцедуры // Возвращает отдельные контрольные суммы для основных расширений и // исправлений для установки параметра сеанса УстановленныеРасширения и // дальнейшей проверки изменений. // // Вызывается при запуске для установки параметра сеанса УстановленныеРасширения, // который требуется для анализа наличия расширений и контроля динамического обновления, // а также из формы установки расширений конфигурации в режиме 1С:Предприятия. // // Для сеанса запущенного без разделителей возвращается только состав неразделенных (общих) // расширений, независимо от установленных разделителей. // // Возвращаемое значение: // ФиксированнаяСтруктура - со свойствами: // * Основные - Строка - контрольная сумма всех расширений, кроме исправительных расширений. // * Исправления - Строка - контрольная сумма всех исправительных расширений. // Функция УстановленныеРасширения() Экспорт Если ОбщегоНазначения.РазделениеВключено() И ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.РаботаВМоделиСервиса") Тогда МодульРаботаВМоделиСервиса = ОбщегоНазначения.ОбщийМодуль("РаботаВМоделиСервиса"); Неразделенные = МодульРаботаВМоделиСервиса.СеансЗапущенБезРазделителей(); Иначе Неразделенные = Ложь; КонецЕсли; Расширения = РасширенияКонфигурации.Получить(); Основные = Новый Массив; Исправления = Новый Массив; Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ОбновлениеКонфигурации") Тогда МодульОбновлениеКонфигурации = ОбщегоНазначения.ОбщийМодуль("ОбновлениеКонфигурации"); Для Каждого Расширение Из Расширения Цикл Если Неразделенные И Расширение.ОбластьДействия = ОбластьДействияРасширенияКонфигурации.РазделениеДанных Тогда Продолжить; КонецЕсли; Если МодульОбновлениеКонфигурации.ЭтоИсправление(Расширение) Тогда Исправления.Добавить(Расширение); Иначе Основные.Добавить(Расширение); КонецЕсли; КонецЦикла; Иначе Основные = Расширения; КонецЕсли; УстановленныеРасширения = Новый Структура; УстановленныеРасширения.Вставить("Основные", КонтрольныеСуммыРасширений(Основные)); УстановленныеРасширения.Вставить("Исправления", КонтрольныеСуммыРасширений(Исправления)); Возврат Новый ФиксированнаяСтруктура(УстановленныеРасширения); КонецФункции // Возвращает признак изменения состава расширений после запуска сеанса. Функция РасширенияИзмененыДинамически() Экспорт УстановитьПривилегированныйРежим(Истина); УстановленныеРасширения = УстановленныеРасширения(); Возврат ПараметрыСеанса.УстановленныеРасширения.Основные <> УстановленныеРасширения.Основные Или ПараметрыСеанса.УстановленныеРасширения.Исправления <> УстановленныеРасширения.Исправления; КонецФункции // Добавляет сведения, что сеанс начал использование версии метаданных. Процедура ЗарегистрироватьИспользованиеВерсииРасширений() Экспорт Если Не ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда Возврат; КонецЕсли; ВерсияРасширений = ПараметрыСеанса.ВерсияРасширений; Если Не ЗначениеЗаполнено(ВерсияРасширений) Тогда Возврат; КонецЕсли; Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 2 | ИСТИНА КАК ЗначениеИстина |ИЗ | Справочник.ВерсииРасширений КАК ВерсииРасширений"; // Если справочник изменяется в другом сеансе, тогда нужно дождаться окончания изменений. Блокировка = Новый БлокировкаДанных; ЭлементБлокировки = Блокировка.Добавить("Справочник.ВерсииРасширений"); ЭлементБлокировки.Режим = РежимБлокировкиДанных.Разделяемый; НачатьТранзакцию(); Попытка Блокировка.Заблокировать(); РезультатыЗапроса = Запрос.ВыполнитьПакет(); ЗафиксироватьТранзакцию(); Исключение ОтменитьТранзакцию(); ВызватьИсключение; КонецПопытки; Если РезультатыЗапроса[0].Выбрать().Количество() < 2 Тогда ОбновитьПоследнююВерсиюРасширений(ВерсияРасширений); Возврат; КонецЕсли; ТекущийСеанс = ПолучитьТекущийСеансИнформационнойБазы(); НачалоСеанса = ТекущийСеанс.НачалоСеанса; НомерСеанса = ТекущийСеанс.НомерСеанса; НаборЗаписей = РегистрыСведений.СеансыВерсийРасширений.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.НомерСеанса.Установить(НомерСеанса); НаборЗаписей.Отбор.НачалоСеанса.Установить(НачалоСеанса); НаборЗаписей.Отбор.ВерсияРасширений.Установить(ВерсияРасширений); НоваяЗапись = НаборЗаписей.Добавить(); НоваяЗапись.НомерСеанса = НомерСеанса; НоваяЗапись.НачалоСеанса = НачалоСеанса; НоваяЗапись.ВерсияРасширений = ВерсияРасширений; НаборЗаписей.ОбменДанными.Загрузка = Истина; НаборЗаписей.Записать(); ОбновитьПоследнююВерсиюРасширений(ВерсияРасширений); КонецПроцедуры Функция ПоследняяВерсияРасширений() Экспорт ИмяПараметра = "СтандартныеПодсистемы.БазоваяФункциональность.ПоследняяВерсияРасширений"; ХранимыеСвойства = СтандартныеПодсистемыСервер.ПараметрРаботыРасширения(ИмяПараметра, Истина); Если ХранимыеСвойства = Неопределено Или ТипЗнч(ХранимыеСвойства) <> Тип("Структура") Или Не ХранимыеСвойства.Свойство("ВерсияРасширений") Или Не ХранимыеСвойства.Свойство("ДатаОбновления") Тогда ХранимыеСвойства = Новый Структура("ВерсияРасширений, ДатаОбновления", , '00010101'); КонецЕсли; Возврат ХранимыеСвойства; КонецФункции // Удаляет устаревшие версии метаданных. Процедура УдалитьУстаревшиеВерсииПараметров() Экспорт Запрос = Новый Запрос; Запрос.УстановитьПараметр("ТекущаяВерсияРасширений", ПараметрыСеанса.ВерсияРасширений); Запрос.Текст = "ВЫБРАТЬ | ВерсииРасширений.Ссылка КАК ВерсияРасширений, | СеансыВерсийРасширений.НомерСеанса КАК НомерСеанса, | СеансыВерсийРасширений.НачалоСеанса КАК НачалоСеанса |ИЗ | Справочник.ВерсииРасширений КАК ВерсииРасширений | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СеансыВерсийРасширений КАК СеансыВерсийРасширений | ПО (СеансыВерсийРасширений.ВерсияРасширений = ВерсииРасширений.Ссылка) |ГДЕ | ВерсииРасширений.Ссылка <> &ТекущаяВерсияРасширений |ИТОГИ ПО | ВерсияРасширений |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ ПЕРВЫЕ 1 | ВерсииРасширений.Ссылка КАК ВерсияРасширений, | ВерсииРасширений.ПоследняяДатаДобавленияВторойВерсии |ИЗ | Справочник.ВерсииРасширений КАК ВерсииРасширений |ГДЕ | ВерсииРасширений.ПоследняяДатаДобавленияВторойВерсии <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0) |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ ПЕРВЫЕ 1 | ВерсииРасширений.Ссылка КАК ВерсияРасширений, | ВерсииРасширений.ДатаПервогоВходаПослеУдаленияВсехРасширений |ИЗ | Справочник.ВерсииРасширений КАК ВерсииРасширений |ГДЕ | ВерсииРасширений.ДатаПервогоВходаПослеУдаленияВсехРасширений <> ДАТАВРЕМЯ(1, 1, 1, 0, 0, 0)"; // Если справочник ВерсииРасширений или регистр сведений СеансыВерсийРасширений изменяются в другом сеансе, // тогда нужно дождаться окончания изменений. Блокировка = Новый БлокировкаДанных; ЭлементБлокировки = Блокировка.Добавить("Справочник.ВерсииРасширений"); ЭлементБлокировки.Режим = РежимБлокировкиДанных.Разделяемый; ЭлементБлокировки = Блокировка.Добавить("РегистрСведений.СеансыВерсийРасширений"); ЭлементБлокировки.Режим = РежимБлокировкиДанных.Разделяемый; НачатьТранзакцию(); Попытка Блокировка.Заблокировать(); РезультатыЗапроса = Запрос.ВыполнитьПакет(); ЗафиксироватьТранзакцию(); Исключение ОтменитьТранзакцию(); ВызватьИсключение; КонецПопытки; Выгрузка = РезультатыЗапроса[0].Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам); МассивСеансов = ПолучитьСеансыИнформационнойБазы(); // Версия, которая была первой при очередном добавлении второй версии // (в самом начале или после удаления устаревших версий) может // использоваться сеансами, которые были открыты до этого события. ВерсияИспользуемаяВНезарегистрированныхСеансах = Неопределено; ДатаОкончанияСеансовИспользующихРасширенияБезРегистрации = '00010101'; Если ЗначениеЗаполнено(ПараметрыСеанса.УстановленныеРасширения.Основные) Или ЗначениеЗаполнено(ПараметрыСеанса.УстановленныеРасширения.Исправления) Тогда Если Не РезультатыЗапроса[1].Пустой() Тогда Свойства = РезультатыЗапроса[1].Выгрузить()[0]; ДатаОкончанияСеансовИспользующихРасширенияБезРегистрации = Свойства.ПоследняяДатаДобавленияВторойВерсии; ПерваяВерсия = Свойства.ВерсияРасширений; КонецЕсли; Иначе Если Не РезультатыЗапроса[2].Пустой() Тогда Свойства = РезультатыЗапроса[2].Выгрузить()[0]; ДатаОкончанияСеансовИспользующихРасширенияБезРегистрации = Свойства.ДатаПервогоВходаПослеУдаленияВсехРасширений; ПерваяВерсия = Свойства.ВерсияРасширений; КонецЕсли; КонецЕсли; ПроверяемыеПриложения = Новый Соответствие; ПроверяемыеПриложения.Вставить("1CV8", Истина); ПроверяемыеПриложения.Вставить("1CV8C", Истина); ПроверяемыеПриложения.Вставить("WebClient", Истина); ПроверяемыеПриложения.Вставить("COMConnection", Истина); ПроверяемыеПриложения.Вставить("WSConnection", Истина); ПроверяемыеПриложения.Вставить("BackgroundJob", Истина); ПроверяемыеПриложения.Вставить("SystemBackgroundJob", Истина); Сеансы = Новый Соответствие; Для Каждого Сеанс Из МассивСеансов Цикл Если ПроверяемыеПриложения.Получить(Сеанс.ИмяПриложения) = Неопределено Тогда Продолжить; КонецЕсли; Сеансы.Вставить(Сеанс.НомерСеанса, Сеанс.НачалоСеанса); Если Сеанс.НачалоСеанса < ДатаОкончанияСеансовИспользующихРасширенияБезРегистрации Тогда ВерсияИспользуемаяВНезарегистрированныхСеансах = ПерваяВерсия; КонецЕсли; КонецЦикла; // Удаление устаревших версий метаданных. ВерсииУдалялись = Ложь; Для Каждого ОписаниеВерсии Из Выгрузка.Строки Цикл ВерсияИспользуется = Ложь; Для Каждого Строка Из ОписаниеВерсии.Строки Цикл Если СеансСуществует(Строка, Сеансы) Тогда ВерсияИспользуется = Истина; Прервать; КонецЕсли; КонецЦикла; ТекущаяВерсия = ОписаниеВерсии.ВерсияРасширений; Если ВерсияИспользуется Или ТекущаяВерсия = ВерсияИспользуемаяВНезарегистрированныхСеансах Тогда Продолжить; КонецЕсли; Объект = ТекущаяВерсия.ПолучитьОбъект(); Объект.Удалить(); ВерсииУдалялись = Истина; КонецЦикла; // Отключение регламентного задания, если осталась только одна версия расширений. // Достаточно полной разделяемой блокировки справочника ВерсииРасширений и // регистра сведений СеансыВерсийРасширений (исключительную ставить избыточно и // крайне плохо, так как это задержит вход в другие сеансы). // Взаимоблокировки исключены использованием разделяемых блокировок на всю таблицу в целом, // что допустимо и необходимо для механизма регистрации использования версий. Блокировка = Новый БлокировкаДанных; ЭлементБлокировки = Блокировка.Добавить("Справочник.ВерсииРасширений"); ЭлементБлокировки.Режим = РежимБлокировкиДанных.Разделяемый; Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 2 | ВерсииРасширений.Ссылка КАК Ссылка, | ВерсииРасширений.ДатаПервогоВходаПослеУдаленияВсехРасширений |ИЗ | Справочник.ВерсииРасширений КАК ВерсииРасширений"; НачатьТранзакцию(); Попытка Блокировка.Заблокировать(); Выгрузка = Запрос.Выполнить().Выгрузить(); Если Выгрузка.Количество() < 2 Тогда Если Выгрузка.Количество() = 0 Тогда ВключитьЗаданиеУдалениеУстаревшихПараметровРаботыВерсийРасширений(Ложь); Иначе // Удаление всех регистраций использования метаданных. ВсеЗаписи = РегистрыСведений.СеансыВерсийРасширений.СоздатьНаборЗаписей(); ВсеЗаписи.Записать(); Если ЗначениеЗаполнено(ПараметрыСеанса.УстановленныеРасширения.Основные) Или ЗначениеЗаполнено(ПараметрыСеанса.УстановленныеРасширения.Исправления) Тогда ВключитьЗаданиеУдалениеУстаревшихПараметровРаботыВерсийРасширений(Ложь); КонецЕсли; Если ВерсииУдалялись И ЗначениеЗаполнено(Выгрузка[0].ДатаПервогоВходаПослеУдаленияВсехРасширений) Тогда Объект = Выгрузка[0].Ссылка.ПолучитьОбъект(); Объект.ДатаПервогоВходаПослеУдаленияВсехРасширений = Неопределено; Объект.Записать(); КонецЕсли; КонецЕсли; Иначе // Удаление устаревших регистраций использования метаданных. ВсеЗаписи = РегистрыСведений.СеансыВерсийРасширений.СоздатьНаборЗаписей(); ВсеЗаписи.Прочитать(); Для Каждого Строка Из ВсеЗаписи Цикл Если СеансСуществует(Строка, Сеансы) Тогда Продолжить; КонецЕсли; НаборЗаписей = РегистрыСведений.СеансыВерсийРасширений.СоздатьНаборЗаписей(); НаборЗаписей.Отбор.НомерСеанса.Установить(Строка.НомерСеанса); НаборЗаписей.Отбор.НачалоСеанса.Установить(Строка.НачалоСеанса); НаборЗаписей.Отбор.ВерсияРасширений.Установить(Строка.ВерсияРасширений); НаборЗаписей.Записать(); КонецЦикла; КонецЕсли; ЗафиксироватьТранзакцию(); Исключение ОтменитьТранзакцию(); ВызватьИсключение; КонецПопытки; КонецПроцедуры // Вызывается из формы Расширения. Процедура ПриУдаленииВсехРасширений() Экспорт ЗарегистрироватьПервыйВходПослеУдаленияВсехРасширений(); ВключитьЗаданиеУдалениеУстаревшихПараметровРаботыВерсийРасширений(Истина); КонецПроцедуры // Включает/Отключает регламентное задание УдалениеУстаревшихПараметровРаботыВерсийРасширений. Процедура ВключитьЗаданиеУдалениеУстаревшихПараметровРаботыВерсийРасширений(Включить) Экспорт РегламентныеЗаданияСервер.УстановитьИспользованиеПредопределенногоРегламентногоЗадания( Метаданные.РегламентныеЗадания.УдалениеУстаревшихПараметровРаботыВерсийРасширений, Включить); КонецПроцедуры #КонецОбласти #Область СлужебныеПроцедурыИФункции // Возвращает контрольные суммы указанных расширений. // // Параметры: // Расширения - Массив - получить контрольные суммы указанных расширений. // // Возвращаемое значение: // Строка - строки вида "<Имя расширения> (<Версия расширения>) <Контрольная сумма>". // Функция КонтрольныеСуммыРасширений(Расширения) Список = Новый СписокЗначений; Для Каждого Расширение Из Расширения Цикл КонтрольнаяСумма = Base64Строка(Расширение.ХешСумма); Список.Добавить(Расширение.Имя + " (" + Расширение.Версия + ") " + КонтрольнаяСумма); КонецЦикла; Если Список.Количество() <> 0 Тогда Список.Добавить("#" + Метаданные.Имя + " (" + Метаданные.Версия + ")"); КонецЕсли; КонтрольныеСуммы = ""; Для Каждого Элемент Из Список Цикл КонтрольныеСуммы = КонтрольныеСуммы + Символы.ПС + Элемент.Значение; КонецЦикла; Возврат СокрЛ(КонтрольныеСуммы); КонецФункции // Возвращает текущую версию расширений. // Для поиска версии используется описание подключенных расширений. // Функция ВерсияРасширений() Если Не ОбщегоНазначения.ДоступноИспользованиеРазделенныхДанных() Тогда Возврат ПустаяСсылка(); КонецЕсли; Если Не ЗначениеЗаполнено(ПараметрыСеанса.УстановленныеРасширения.Основные) И Не ЗначениеЗаполнено(ПараметрыСеанса.УстановленныеРасширения.Исправления) Тогда ЗарегистрироватьПервыйВходПослеУдаленияВсехРасширений(); КонецЕсли; ОписаниеРасширений = ПараметрыСеанса.ПодключенныеРасширения; Если Не ЗначениеЗаполнено(ОписаниеРасширений) Тогда Возврат ПустаяСсылка(); КонецЕсли; Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ВерсииРасширений.Ссылка КАК Ссылка, | ВерсииРасширений.ОписаниеМетаданных КАК ОписаниеРасширений |ИЗ | Справочник.ВерсииРасширений КАК ВерсииРасширений"; // Если справочник изменяется в другом сеансе, тогда нужно дождаться окончания изменений. Блокировка = Новый БлокировкаДанных; ЭлементБлокировки = Блокировка.Добавить("Справочник.ВерсииРасширений"); ЭлементБлокировки.Режим = РежимБлокировкиДанных.Разделяемый; НачатьТранзакцию(); Попытка Блокировка.Заблокировать(); Выборка = Запрос.Выполнить().Выбрать(); ЗафиксироватьТранзакцию(); Исключение ОтменитьТранзакцию(); ВызватьИсключение; КонецПопытки; Если ВерсияНайдена(Выборка, ОписаниеРасширений) Тогда ВерсияРасширений = Выборка.Ссылка; Иначе // Создание новой версии расширений. Блокировка = Новый БлокировкаДанных; ЭлементБлокировки = Блокировка.Добавить("Справочник.ВерсииРасширений"); НачатьТранзакцию(); Попытка // Повторная проверка, что версия еще не создана, // что маловероятно, но возможно между транзакциями. // Сразу исключительная блокировка недопустима, так как это // замедлит вход пользователей в другие сеансы. Выборка = Запрос.Выполнить().Выбрать(); Если ВерсияНайдена(Выборка, ОписаниеРасширений) Тогда ВерсияРасширений = Выборка.Ссылка; Иначе Блокировка.Заблокировать(); Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ВерсииРасширений.Ссылка КАК Ссылка |ИЗ | Справочник.ВерсииРасширений КАК ВерсииРасширений"; Выборка = Запрос.Выполнить().Выбрать(); Если Выборка.Следующий() И Выборка.Количество() = 1 Тогда Объект = Выборка.Ссылка.ПолучитьОбъект(); // Тут должна быть именно ТекущаяДата(), так как // именно она устанавливается в поле НачалоСеанса. Объект.ПоследняяДатаДобавленияВторойВерсии = ТекущаяДата(); Объект.ОбменДанными.Загрузка = Истина; Объект.Записать(); ВключитьЗаданиеУдалениеУстаревшихПараметровРаботыВерсийРасширений(Истина); КонецЕсли; Объект = СоздатьЭлемент(); Объект.ОписаниеМетаданных = ОписаниеРасширений; Объект.ОбменДанными.Загрузка = Истина; Объект.Записать(); ВерсияРасширений = Объект.Ссылка; КонецЕсли; ЗафиксироватьТранзакцию(); Исключение ОтменитьТранзакцию(); ВызватьИсключение; КонецПопытки; КонецЕсли; Возврат ВерсияРасширений; КонецФункции // Для функции ВерсияРасширений. Функция ВерсияНайдена(Выборка, ОписаниеРасширений) Пока Выборка.Следующий() Цикл Если Выборка.ОписаниеРасширений = ОписаниеРасширений Тогда Возврат Истина; КонецЕсли; КонецЦикла; Возврат Ложь; КонецФункции // Для процедуры УдалитьУстаревшиеВерсииПараметров. Функция СеансСуществует(ОписаниеСеанса, СуществующиеСеансы) НачалоСеанса = СуществующиеСеансы[ОписаниеСеанса.НомерСеанса]; Возврат НачалоСеанса <> Неопределено И НачалоСеанса > (ОписаниеСеанса.НачалоСеанса - 30) И (ОписаниеСеанса.НачалоСеанса + 30) > НачалоСеанса; КонецФункции // Для функции ВерсияРасширений и процедуры ПриУдаленииВсехРасширений. Процедура ЗарегистрироватьПервыйВходПослеУдаленияВсехРасширений() Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 2 | ВерсииРасширений.Ссылка КАК Ссылка, | ВерсииРасширений.ДатаПервогоВходаПослеУдаленияВсехРасширений |ИЗ | Справочник.ВерсииРасширений КАК ВерсииРасширений"; Выгрузка = Запрос.Выполнить().Выгрузить(); Если Выгрузка.Количество() = 1 И Не ЗначениеЗаполнено(Выгрузка[0].ДатаПервогоВходаПослеУдаленияВсехРасширений) Тогда Объект = Выгрузка[0].Ссылка.ПолучитьОбъект(); // Тут должна быть именно ТекущаяДата(), так как // именно она устанавливается в поле НачалоСеанса. Объект.ДатаПервогоВходаПослеУдаленияВсехРасширений = ТекущаяДата(); Объект.Записать(); КонецЕсли; КонецПроцедуры // Для процедуры ЗарегистрироватьИспользованиеВерсииРасширений. Процедура ОбновитьПоследнююВерсиюРасширений(ВерсияРасширений) Если КонфигурацияБазыДанныхИзмененаДинамически() Тогда Возврат; КонецЕсли; ХранимыеСвойства = ПоследняяВерсияРасширений(); Если ХранимыеСвойства.ВерсияРасширений = ВерсияРасширений Тогда Возврат; КонецЕсли; ХранимыеСвойства.ВерсияРасширений = ВерсияРасширений; ХранимыеСвойства.ДатаОбновления = ТекущаяДатаСеанса(); ИмяПараметра = "СтандартныеПодсистемы.БазоваяФункциональность.ПоследняяВерсияРасширений"; СтандартныеПодсистемыСервер.УстановитьПараметрРаботыРасширения(ИмяПараметра, ХранимыеСвойства, Истина); Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда МодульУправлениеДоступомСлужебный = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступомСлужебный"); МодульУправлениеДоступомСлужебный.УстановитьОбновлениеДоступа(Истина); КонецЕсли; КонецПроцедуры #КонецОбласти #КонецЕсли

Catalogs/ВерсииРасширений/ObjectModule

 #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ОписаниеПеременных Перем НовыйОбъект; #КонецОбласти #Область ОбработчикиСобытий Процедура ПередЗаписью(Отказ) Если ОбменДанными.Загрузка Тогда Возврат; КонецЕсли; НовыйОбъект = ЭтоНовый(); КонецПроцедуры Процедура ПриЗаписи(Отказ) Если ОбменДанными.Загрузка Тогда Возврат; КонецЕсли; Если НовыйОбъект Тогда Справочники.ВерсииРасширений.ВключитьЗаданиеУдалениеУстаревшихПараметровРаботыВерсийРасширений(Истина); КонецЕсли; КонецПроцедуры #КонецОбласти #КонецЕсли

Catalogs/ВерсииРасширений/Forms/ФормаСписка/Form/Module

 #Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) ТолькоПросмотр = Истина; КонецПроцедуры #КонецОбласти #Область ОбработчикиКомандФормы &НаКлиенте Процедура ВключитьВозможностьРедактирования(Команда) ТолькоПросмотр = Ложь; Элементы.ФормаВключитьВозможностьРедактирования.Доступность = Ложь; КонецПроцедуры #КонецОбласти

Catalogs/ВерсииРасширений/Forms/ФормаЭлемента/Form/Module

 #Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) ТолькоПросмотр = Истина; КонецПроцедуры #КонецОбласти #Область ОбработчикиКомандФормы &НаКлиенте Процедура ВключитьВозможностьРедактирования(Команда) ТолькоПросмотр = Ложь; Элементы.ФормаВключитьВозможностьРедактирования.Доступность = Ложь; КонецПроцедуры #КонецОбласти

Catalogs/ВерсииФайлов/ManagerModule

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

Catalogs/ВерсииФайлов/ObjectModule

#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ОбработчикиСобытий Процедура ПередЗаписью(Отказ) Если ОбменДанными.Загрузка Тогда Возврат; КонецЕсли; Если ДополнительныеСвойства.Свойство("КонвертацияФайлов") Тогда Возврат; КонецЕсли; Если ДополнительныеСвойства.Свойство("РазмещениеФайловВТомах") Тогда Возврат; КонецЕсли; Если ЭтоНовый() Тогда РодительскаяВерсия = Владелец.ТекущаяВерсия; КонецЕсли; Если Не ЭтоНовый() Тогда УстановленаПометкаУдаления = ПометкаУдаления И Не ПометкаУдаленияВИБ(); КонецЕсли; // Выполним установку индекса пиктограммы при записи объекта. ИндексКартинки = РаботаСФайламиСлужебныйКлиентСервер.ПолучитьИндексПиктограммыФайла(Расширение); Если СтатусИзвлеченияТекста.Пустая() Тогда СтатусИзвлеченияТекста = Перечисления.СтатусыИзвлеченияТекстаФайлов.НеИзвлечен; КонецЕсли; Если ТипЗнч(Владелец) = Тип("СправочникСсылка.Файлы") Тогда Наименование = СокрЛП(ПолноеНаименование); КонецЕсли; Если Владелец.ТекущаяВерсия = Ссылка Тогда Если ПометкаУдаления = Истина И Владелец.ПометкаУдаления <> Истина Тогда ВызватьИсключение НСтр("ru = 'Активную версию нельзя удалить.'"); КонецЕсли; ИначеЕсли РодительскаяВерсия.Пустая() Тогда Если ПометкаУдаления = Истина И Владелец.ПометкаУдаления <> Истина Тогда ВызватьИсключение НСтр("ru = 'Первую версию нельзя удалить.'"); КонецЕсли; ИначеЕсли ПометкаУдаления = Истина И Владелец.ПометкаУдаления <> Истина Тогда // Очищаем у версий, дочерних к помеченной, ссылку на родительскую - // переставляем на родительскую версию удаляемой версии. Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ВерсииФайлов.Ссылка КАК Ссылка |ИЗ | Справочник." + Метаданные.НайтиПоТипу(ТипЗнч(Ссылка)).Имя + " КАК ВерсииФайлов |ГДЕ | ВерсииФайлов.РодительскаяВерсия = &РодительскаяВерсия"; Запрос.УстановитьПараметр("РодительскаяВерсия", Ссылка); Результат = Запрос.Выполнить(); НачатьТранзакцию(); Попытка Если Не Результат.Пустой() Тогда Выборка = Результат.Выбрать(); Выборка.Следующий(); БлокировкаДанных = Новый БлокировкаДанных; ЭлементБлокировкиДанных = БлокировкаДанных.Добавить(Метаданные.НайтиПоТипу(ТипЗнч(Выборка.Ссылка)).ПолноеИмя()); ЭлементБлокировкиДанных.УстановитьЗначение("Ссылка", Выборка.Ссылка); БлокировкаДанных.Заблокировать(); Объект = Выборка.Ссылка.ПолучитьОбъект(); ЗаблокироватьДанныеДляРедактирования(Объект.Ссылка); Объект.РодительскаяВерсия = РодительскаяВерсия; Объект.Записать(); КонецЕсли; ЗафиксироватьТранзакцию(); Исключение ОтменитьТранзакцию(); ВызватьИсключение; КонецПопытки; КонецЕсли; КонецПроцедуры Процедура ПередУдалением(Отказ) Если ТипХраненияФайла = Перечисления.ТипыХраненияФайлов.ВТомахНаДиске Тогда Если НЕ Том.Пустая() И ОбщегоНазначения.СсылкаСуществует(Том) Тогда ПолныйПуть = РаботаСФайламиСлужебный.ПолныйПутьТома(Том) + ПутьКФайлу; Попытка Файл = Новый Файл(ПолныйПуть); Файл.УстановитьТолькоЧтение(Ложь); УдалитьФайлы(ПолныйПуть); ПутьСПодкаталогом = Файл.Путь; МассивФайловВКаталоге = НайтиФайлы(ПутьСПодкаталогом, "*.*"); Если МассивФайловВКаталоге.Количество() = 0 Тогда УдалитьФайлы(ПутьСПодкаталогом); КонецЕсли; Исключение ЗаписьЖурналаРегистрации(НСтр("ru = 'Файлы.Ошибка удаления файла.'", ОбщегоНазначенияКлиентСервер.КодОсновногоЯзыка()), УровеньЖурналаРегистрации.Ошибка,, Файл, ОписаниеОшибки()); КонецПопытки; КонецЕсли; КонецЕсли; // Проверку ОбменДанными.Загрузка следует выполнять начиная с этой строки. // Сначала требуется физически удалить файл, а потом уже сведения о нем в информационной базе. // Иначе данные о расположении файла будут недоступны. Если ОбменДанными.Загрузка Тогда Возврат; КонецЕсли; КонецПроцедуры #КонецОбласти #Область СлужебныеПроцедурыИФункции // Возвращает текущее значение пометки удаления в информационной базе. Функция ПометкаУдаленияВИБ() УстановитьПривилегированныйРежим(Истина); ИмяСправочникаВерсийФайлов = Метаданные.НайтиПоТипу(ТипЗнч(Ссылка)).Имя; Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ВерсииФайлов.ПометкаУдаления |ИЗ | Справочник." + ИмяСправочникаВерсийФайлов + " КАК ВерсииФайлов |ГДЕ | ВерсииФайлов.Ссылка = &Ссылка"; Запрос.УстановитьПараметр("Ссылка", Ссылка); Результат = Запрос.Выполнить(); Если Не Результат.Пустой() Тогда Выборка = Результат.Выбрать(); Выборка.Следующий(); Возврат Выборка.ПометкаУдаления; КонецЕсли; Возврат Неопределено; КонецФункции #КонецОбласти #КонецЕсли

Catalogs/ВерсииФайлов/Forms/ФормаВыбора/Form/Module

#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. Возврат; КонецЕсли; Если Параметры.Отбор.Свойство("Владелец") Тогда Элементы.СписокВладелец.Видимость = Ложь; КонецЕсли; // Оформление помеченных на удаление. ЭлементУсловногоОформления = Список.УсловноеОформление.Элементы.Добавить(); ЭлементЦветаОформления = ЭлементУсловногоОформления.Оформление.Элементы.Найти("TextColor"); ЭлементЦветаОформления.Значение = Метаданные.ЭлементыСтиля.ТекстЗапрещеннойЯчейкиЦвет.Значение; ЭлементЦветаОформления.Использование = Истина; ЭлементОтбораДанных = ЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); ЭлементОтбораДанных.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ПометкаУдаления"); ЭлементОтбораДанных.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; ЭлементОтбораДанных.ПравоеЗначение = Истина; ЭлементОтбораДанных.Использование = Истина; КонецПроцедуры #КонецОбласти

Catalogs/ВерсииФайлов/Forms/ФормаСписка/Form/Module

 #Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. Возврат; КонецЕсли; // Оформление помеченных на удаление. ЭлементУсловногоОформления = Список.УсловноеОформление.Элементы.Добавить(); ЭлементЦветаОформления = ЭлементУсловногоОформления.Оформление.Элементы.Найти("TextColor"); ЭлементЦветаОформления.Значение = Метаданные.ЭлементыСтиля.ТекстЗапрещеннойЯчейкиЦвет.Значение; ЭлементЦветаОформления.Использование = Истина; ЭлементОтбораДанных = ЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); ЭлементОтбораДанных.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ПометкаУдаления"); ЭлементОтбораДанных.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; ЭлементОтбораДанных.ПравоеЗначение = Истина; ЭлементОтбораДанных.Использование = Истина; КонецПроцедуры &НаКлиенте Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник) Если ИмяСобытия = "Запись_Файл" И Параметр.Свойство("Событие") И ( Параметр.Событие = "ЗаконченоРедактирование" ИЛИ Параметр.Событие = "ВерсияСохранена") Тогда Элементы.Список.Обновить(); КонецЕсли; КонецПроцедуры #КонецОбласти #Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура СписокВыбор(Элемент, ВыбраннаяСтрока, Поле, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; ДанныеФайла = РаботаСФайламиСлужебныйВызовСервера.ДанныеФайлаДляОткрытия(ВладелецФайла(ВыбраннаяСтрока), ВыбраннаяСтрока, УникальныйИдентификатор); РаботаСФайламиСлужебныйКлиент.ОткрытьВерсиюФайла(Неопределено, ДанныеФайла, УникальныйИдентификатор); КонецПроцедуры &НаКлиенте Процедура СписокПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа) Отказ = Истина; КонецПроцедуры &НаКлиенте Процедура СписокПередУдалением(Элемент, Отказ) ДанныеФайла = РаботаСФайламиСлужебныйВызовСервера.ДанныеФайла(Элементы.Список.ТекущаяСтрока); Если ДанныеФайла.ТекущаяВерсия = Элементы.Список.ТекущаяСтрока Тогда ПоказатьПредупреждение(, НСтр("ru = 'Активную версию нельзя удалить.'")); Отказ = Истина; КонецЕсли; КонецПроцедуры &НаКлиенте Процедура СписокПередНачаломИзменения(Элемент, Отказ) Отказ = Истина; ОткрытьКарточкуФайла(); КонецПроцедуры #КонецОбласти #Область СлужебныеПроцедурыИФункции &НаКлиенте Процедура ОткрытьКарточкуФайла() ТекущиеДанные = Элементы.Список.ТекущиеДанные; Если ТекущиеДанные <> Неопределено Тогда Версия = ТекущиеДанные.Ссылка; ПараметрыОткрытияФормы = Новый Структура("Ключ", Версия); ОткрытьФорму("Обработка.РаботаСФайлами.Форма.ВерсияПрисоединенногоФайла", ПараметрыОткрытияФормы); КонецЕсли; КонецПроцедуры &НаСервереБезКонтекста Функция ВладелецФайла(ВыбраннаяСтрока) Возврат ВыбраннаяСтрока.Владелец; КонецФункции #КонецОбласти

Catalogs/ВидыКонтактнойИнформации/ManagerModule

#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ПрограммныйИнтерфейс #Область ДляВызоваИзДругихПодсистем // СтандартныеПодсистемы.ГрупповоеИзменениеОбъектов // Возвращает реквизиты объекта, которые не рекомендуется редактировать // с помощью обработки группового изменения реквизитов. // // Возвращаемое значение: // Массив - список имен реквизитов объекта. Функция РеквизитыНеРедактируемыеВГрупповойОбработке() Экспорт Результат = Новый Массив; Результат.Добавить("*"); Возврат Результат; КонецФункции // Конец СтандартныеПодсистемы.ГрупповоеИзменениеОбъектов // СтандартныеПодсистемы.ЗапретРедактированияРеквизитовОбъектов // См. ЗапретРедактированияРеквизитовОбъектовПереопределяемый.ПриОпределенииОбъектовСЗаблокированнымиРеквизитами. Функция ПолучитьБлокируемыеРеквизитыОбъекта() Экспорт БлокируемыеРеквизиты = Новый Массив; БлокируемыеРеквизиты.Добавить("Тип;Тип"); БлокируемыеРеквизиты.Добавить("Родитель"); Возврат БлокируемыеРеквизиты; КонецФункции // Конец СтандартныеПодсистемы.ЗапретРедактированияРеквизитовОбъектов #КонецОбласти #КонецОбласти #Область ОбработчикиОбновления // Регистрирует к обработке виды контактной информации другое у которых необходимо заполнить поле ВидПоляДругое. // Процедура ЗаполнитьВидыКонтактнойИнформацииСПолемДругоеКОбработке(Параметры) Экспорт Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ВидыКонтактнойИнформации.Ссылка, | ВидыКонтактнойИнформации.УдалитьМногострочноеПоле |ИЗ | Справочник.ВидыКонтактнойИнформации КАК ВидыКонтактнойИнформации |ГДЕ | ВидыКонтактнойИнформации.Тип = &Тип"; Запрос.УстановитьПараметр("Тип", Перечисления.ТипыКонтактнойИнформации.Другое); РезультатЗапроса = Запрос.Выполнить().Выгрузить(); ОбновлениеИнформационнойБазы.ОтметитьКОбработке(Параметры, РезультатЗапроса.ВыгрузитьКолонку("Ссылка")); КонецПроцедуры Процедура ЗаполнитьВидыКонтактнойИнформации(Параметры) Экспорт ВидКонтактнойИнформацииСсылка = ОбновлениеИнформационнойБазы.ВыбратьСсылкиДляОбработки(Параметры.Очередь, "Справочник.ВидыКонтактнойИнформации"); ПроблемныхОбъектов = 0; ОбъектовОбработано = 0; Пока ВидКонтактнойИнформацииСсылка.Следующий() Цикл Попытка ВидКонтактнойИнформации = ВидКонтактнойИнформацииСсылка.Ссылка.ПолучитьОбъект(); Если ВидКонтактнойИнформации.УдалитьМногострочноеПоле Тогда ВидКонтактнойИнформации.ВидПоляДругое = "МногострочноеШирокое"; Иначе ВидКонтактнойИнформации.ВидПоляДругое = "ОднострочноеШирокое"; КонецЕсли; ОбновлениеИнформационнойБазы.ЗаписатьДанные(ВидКонтактнойИнформации); ОбъектовОбработано = ОбъектовОбработано + 1; Исключение // Если не удалось обработать какой-либо вид контактной информации, повторяем попытку снова. ПроблемныхОбъектов = ПроблемныхОбъектов + 1; ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Не удалось обработать вид контактной информации: %1 по причине: %2'"), ВидКонтактнойИнформацииСсылка.Ссылка, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); ЗаписьЖурналаРегистрации(ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Предупреждение, Метаданные.Справочники.ВидыКонтактнойИнформации, ВидКонтактнойИнформацииСсылка.Ссылка, ТекстСообщения); КонецПопытки; КонецЦикла; Параметры.ОбработкаЗавершена = ОбновлениеИнформационнойБазы.ОбработкаДанныхЗавершена(Параметры.Очередь, "Справочник.ВидыКонтактнойИнформации"); Если ОбъектовОбработано = 0 И ПроблемныхОбъектов <> 0 Тогда ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Процедуре ЗаполнитьВидыКонтактнойИнформации не удалось обработать некоторые виды контактной информации (пропущены): %1'"), ПроблемныхОбъектов); ВызватьИсключение ТекстСообщения; Иначе ЗаписьЖурналаРегистрации(ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Информация, Метаданные.Справочники.ВидыКонтактнойИнформации,, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Процедура ЗаполнитьВидыКонтактнойИнформации обработала очередную порцию видов контактной информации: %1'"), ОбъектовОбработано)); КонецЕсли; КонецПроцедуры #КонецОбласти #КонецЕсли

Catalogs/ВидыКонтактнойИнформации/ObjectModule

#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ОбработчикиСобытий Процедура ПередЗаписью(Отказ) Если ОбменДанными.Загрузка Тогда Возврат; КонецЕсли; Если НЕ ЭтоГруппа Тогда Результат = УправлениеКонтактнойИнформациейСлужебный.ПроверитьПараметрыВидаКонтактнойИнформации(ЭтотОбъект); Если Результат.ЕстьОшибки Тогда Отказ = Истина; ВызватьИсключение Результат.ТекстОшибки; КонецЕсли; КонецЕсли; КонецПроцедуры Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты) Если ЭтоГруппа Тогда НепроверяемыеРеквизиты = Новый Массив; НепроверяемыеРеквизиты.Добавить("Родитель"); ОбщегоНазначения.УдалитьНепроверяемыеРеквизитыИзМассива(ПроверяемыеРеквизиты, НепроверяемыеРеквизиты); КонецЕсли; КонецПроцедуры #КонецОбласти #КонецЕсли

Catalogs/ВидыКонтактнойИнформации/Forms/ФормаВыбораГруппы/Form/Module

 #Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) Если Параметры.Свойство("АвтоТест") Тогда Возврат; КонецЕсли; ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка(Список, "ЭтоГруппа", Истина); КонецПроцедуры #КонецОбласти

Catalogs/ВидыКонтактнойИнформации/Forms/ФормаСписка/Form/Module

 #Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) Если Параметры.Свойство("АвтоТест") Тогда Возврат; КонецЕсли; УстановитьУсловноеОформление(); // СтандартныеПодсистемы.ПодключаемыеКоманды ПодключаемыеКоманды.ПриСозданииНаСервере(ЭтотОбъект); // Конец СтандартныеПодсистемы.ПодключаемыеКоманды Если ОбщегоНазначенияКлиентСервер.ЭтоМобильныйКлиент() Тогда ПоложениеКоманднойПанели = ПоложениеКоманднойПанелиФормы.Авто; Для каждого ЭлементФормы Из Элементы.КоманднаяПанель.ПодчиненныеЭлементы Цикл Элементы.Переместить(ЭлементФормы, Элементы.ФормаКоманднаяПанель); КонецЦикла; ОбщегоНазначенияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "КоманднаяПанель", "Видимость", Ложь); КонецЕсли; КонецПроцедуры #КонецОбласти #Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура СписокПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа) // Проверим, выполняется ли копирование группы. Если Копирование И Группа Тогда Отказ = Истина; ПоказатьПредупреждение(, НСтр("ru='Добавление новых групп в справочнике запрещено.'")); КонецЕсли; КонецПроцедуры #КонецОбласти #Область ОбработчикиКомандФормы // СтандартныеПодсистемы.ПодключаемыеКоманды &НаКлиенте Процедура Подключаемый_ВыполнитьКоманду(Команда) ПодключаемыеКомандыКлиент.ВыполнитьКоманду(ЭтотОбъект, Команда, Элементы.Список); КонецПроцедуры &НаСервере Процедура Подключаемый_ВыполнитьКомандуНаСервере(Контекст, Результат) ПодключаемыеКоманды.ВыполнитьКоманду(ЭтотОбъект, Контекст, Элементы.Список, Результат); КонецПроцедуры &НаКлиенте Процедура Подключаемый_ОбновитьКоманды() ПодключаемыеКомандыКлиентСервер.ОбновитьКоманды(ЭтотОбъект, Элементы.Список); КонецПроцедуры // Конец СтандартныеПодсистемы.ПодключаемыеКоманды #КонецОбласти #Область СлужебныеПроцедурыИФункции &НаСервере Процедура УстановитьУсловноеОформление() Элемент = Список.УсловноеОформление.Элементы.Добавить(); ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Используется"); ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; ОтборЭлемента.ПравоеЗначение = Ложь; Элемент.Оформление.УстановитьЗначениеПараметра("Видимость", Ложь); КонецПроцедуры #КонецОбласти

Catalogs/ВидыКонтактнойИнформации/Forms/ФормаЭлемента/Form/Module

#Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. Возврат; КонецЕсли; Если Объект.Предопределенный Или Объект.ЗапретитьРедактированиеПользователем Тогда Элементы.Наименование.ТолькоПросмотр = Истина; Элементы.Родитель.ТолькоПросмотр = Истина; Элементы.Тип.ТолькоПросмотр = Истина; Элементы.ГруппаТипОбщиеДляВсех.ТолькоПросмотр = Объект.ЗапретитьРедактированиеПользователем; Иначе // Обработчик подсистемы запрета редактирования реквизитов объектов. Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЗапретРедактированияРеквизитовОбъектов") Тогда МодульЗапретРедактированияРеквизитовОбъектов = ОбщегоНазначения.ОбщийМодуль("ЗапретРедактированияРеквизитовОбъектов"); МодульЗапретРедактированияРеквизитовОбъектов.ЗаблокироватьРеквизиты(ЭтотОбъект,, НСтр("ru = 'Разрешить редактирование типа и группы'")); Иначе Элементы.Родитель.ТолькоПросмотр = Истина; Элементы.Тип.ТолькоПросмотр = Истина; КонецЕсли; КонецЕсли; СсылкаРодителя = Объект.Родитель; Элементы.ХранитьИсториюИзменений.Доступность = Объект.РедактированиеТолькоВДиалоге; Элементы.РазрешитьВводНесколькихЗначений.Доступность = НЕ Объект.ХранитьИсториюИзменений; Если Не Объект.МожноИзменятьСпособРедактирования Тогда Элементы.РедактированиеТолькоВДиалоге.Доступность = Ложь; Элементы.РазрешитьВводНесколькихЗначений.Доступность = Ложь; Элементы.ГруппаНаименованиеНастройкиПоТипам.Доступность = Ложь; Элементы.ХранитьИсториюИзменений.Доступность = Ложь; КонецЕсли; Элементы.ГруппаХранитьИсториюИзменений.Видимость = Ложь; Если Объект.Тип = Перечисления.ТипыКонтактнойИнформации.Адрес ИЛИ НЕ СсылкаРодителя.Пустая() ИЛИ СсылкаРодителя.Уровень() = 0 Тогда ТабличнаяЧасть = Неопределено; Если СтрНачинаетсяС(СсылкаРодителя.ИмяПредопределенныхДанных, "Справочник") Тогда ИмяОбъекта = Сред(СсылкаРодителя.ИмяПредопределенныхДанных, 11); Если Метаданные.Справочники.Найти(ИмяОбъекта) <> Неопределено Тогда ТабличнаяЧасть = Метаданные.Справочники[ИмяОбъекта].ТабличныеЧасти.Найти("КонтактнаяИнформация"); КонецЕсли; ИначеЕсли СтрНачинаетсяС(СсылкаРодителя.ИмяПредопределенныхДанных, "Документ") Тогда ИмяОбъекта = Сред(СсылкаРодителя.ИмяПредопределенныхДанных, 9); Если Метаданные.Документы.Найти(ИмяОбъекта) <> Неопределено Тогда ТабличнаяЧасть = Метаданные.Документы[ИмяОбъекта].ТабличныеЧасти.Найти("КонтактнаяИнформация"); КонецЕсли; КонецЕсли; Если ТабличнаяЧасть <> Неопределено Тогда Если ТабличнаяЧасть.Реквизиты.Найти("ДействуетС") <> Неопределено Тогда Элементы.ГруппаХранитьИсториюИзменений.Видимость = Истина; КонецЕсли; КонецЕсли; КонецЕсли; ДоступныДополнительныеНастройкиАдреса = (Метаданные.Обработки.Найти("РасширенныйВводКонтактнойИнформации") <> Неопределено И Метаданные.Обработки["РасширенныйВводКонтактнойИнформации"].Формы.Найти("НастройкиАдреса") <> Неопределено); КонецПроцедуры &НаКлиенте Процедура ПриОткрытии(Отказ) ИзменитьОтображениеПриИзмененииТипа(); КонецПроцедуры &НаСервере Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) Если Не ТекущийОбъект.ПроверитьЗаполнение() Тогда Отказ = Истина; КонецЕсли; КонецПроцедуры &НаСервере Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи) Если Не ТекущийОбъект.Предопределенный Тогда // Обработчик подсистемы запрета редактирования реквизитов объектов. Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.ЗапретРедактированияРеквизитовОбъектов") Тогда МодульЗапретРедактированияРеквизитовОбъектов = ОбщегоНазначения.ОбщийМодуль("ЗапретРедактированияРеквизитовОбъектов"); МодульЗапретРедактированияРеквизитовОбъектов.ЗаблокироватьРеквизиты(ЭтотОбъект); КонецЕсли; КонецЕсли; КонецПроцедуры &НаСервере Процедура ОбработкаПроверкиЗаполненияНаСервере(Отказ, ПроверяемыеРеквизиты) ПроверяемыеРеквизиты.Очистить(); КонецПроцедуры #КонецОбласти #Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура ТипПриИзменении(Элемент) ИзменитьРеквизитыПриИзмененииТипа(); ИзменитьОтображениеПриИзмененииТипа(); КонецПроцедуры &НаКлиенте Процедура ТипОчистка(Элемент, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; КонецПроцедуры &НаКлиенте Процедура РедактированиеТолькоВДиалогеПриИзменении(Элемент) Если Объект.РедактированиеТолькоВДиалоге Тогда Элементы.ХранитьИсториюИзменений.Доступность = Истина; Иначе Элементы.ХранитьИсториюИзменений.Доступность = Ложь; Объект.ХранитьИсториюИзменений = Ложь; КонецЕсли; Элементы.РазрешитьВводНесколькихЗначений.Доступность = НЕ Объект.ХранитьИсториюИзменений; КонецПроцедуры &НаКлиенте Процедура ХранитьИсториюИзмененийПриИзменении(Элемент) Если Объект.ХранитьИсториюИзменений Тогда Объект.РазрешитьВводНесколькихЗначений = Ложь; КонецЕсли; Элементы.РазрешитьВводНесколькихЗначений.Доступность = Не Объект.ХранитьИсториюИзменений; КонецПроцедуры &НаКлиенте Процедура РазрешитьВводНесколькихЗначенийПриИзменении(Элемент) Если Объект.РазрешитьВводНесколькихЗначений Тогда Объект.ХранитьИсториюИзменений = Ложь; КонецЕсли; КонецПроцедуры &НаКлиенте Процедура РодительОчистка(Элемент, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; КонецПроцедуры &НаКлиенте Процедура МеждународныйФорматАдресаПриИзменении(Элемент) ИзменитьОтображениеПриИзмененииТипа(); КонецПроцедуры #КонецОбласти #Область ОбработчикиКомандФормы &НаКлиенте Процедура Подключаемый_РазрешитьРедактированиеРеквизитовОбъекта(Команда) Если Не Объект.Предопределенный Тогда Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("СтандартныеПодсистемы.ЗапретРедактированияРеквизитовОбъектов") Тогда МодульЗапретРедактированияРеквизитовОбъектовКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ЗапретРедактированияРеквизитовОбъектовКлиент"); МодульЗапретРедактированияРеквизитовОбъектовКлиент.РазрешитьРедактированиеРеквизитовОбъекта(ЭтотОбъект); КонецЕсли; КонецЕсли; КонецПроцедуры &НаКлиенте Процедура ДополнительныеНастройкиАдреса(Команда) ОповещениеОЗакрытие = Новый ОписаниеОповещения("ПослеЗакрытияФормыНастроекАдреса", ЭтотОбъект); ПараметрыФормы = Новый Структура("Объект", Объект); ИмяФормыНастройкиАдреса = "Обработка.РасширенныйВводКонтактнойИнформации.Форма.НастройкиАдреса"; ОткрытьФорму(ИмяФормыНастройкиАдреса, ПараметрыФормы,,,,, ОповещениеОЗакрытие); КонецПроцедуры #КонецОбласти #Область СлужебныеПроцедурыИФункции &НаКлиенте Процедура ИзменитьОтображениеПриИзмененииТипа() Если Объект.Тип = ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.Адрес") Тогда Элементы.Проверки.ТекущаяСтраница = Элементы.Проверки.ПодчиненныеЭлементы.Адрес; Элементы.РедактированиеТолькоВДиалоге.Доступность = Объект.МожноИзменятьСпособРедактирования; Элементы.ДополнительныеНастройкиАдреса.Видимость = ДоступныДополнительныеНастройкиАдреса; Элементы.ДополнительныеНастройкиАдреса.Доступность = Не Объект.МеждународныйФорматАдреса; Иначе Элементы.ДополнительныеНастройкиАдреса.Видимость = Ложь; Если Объект.Тип = ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.АдресЭлектроннойПочты") Тогда Элементы.Проверки.ТекущаяСтраница = Элементы.Проверки.ПодчиненныеЭлементы.АдресЭлектроннойПочты; Элементы.РедактированиеТолькоВДиалоге.Доступность = Ложь; ИначеЕсли Объект.Тип = ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.Skype") Тогда Элементы.Проверки.ТекущаяСтраница = Элементы.Проверки.ПодчиненныеЭлементы.Skype; Элементы.РедактированиеТолькоВДиалоге.Доступность = Ложь; Элементы.РазрешитьВводНесколькихЗначений.Доступность = Истина; ИначеЕсли Объект.Тип = ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.Телефон") Или Объект.Тип = ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.Факс") Тогда Элементы.Проверки.ТекущаяСтраница = Элементы.Проверки.ПодчиненныеЭлементы.Телефон; Элементы.РедактированиеТолькоВДиалоге.Доступность = Объект.МожноИзменятьСпособРедактирования; ИначеЕсли Объект.Тип = ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.Другое") Тогда Элементы.Проверки.ТекущаяСтраница = Элементы.Проверки.ПодчиненныеЭлементы.Другое; Элементы.РедактированиеТолькоВДиалоге.Доступность = Ложь; Иначе Элементы.Проверки.ТекущаяСтраница = Элементы.Проверки.ПодчиненныеЭлементы.Прочие; Элементы.РедактированиеТолькоВДиалоге.Доступность = Ложь; КонецЕсли; КонецЕсли; КонецПроцедуры &НаКлиенте Процедура ИзменитьРеквизитыПриИзмененииТипа() Если Объект.Тип = ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.Адрес") Тогда Элементы.ХранитьИсториюИзменений.Доступность = Истина; Иначе Объект.ХранитьИсториюИзменений = Ложь; Элементы.ХранитьИсториюИзменений.Доступность = Ложь; Если Объект.Тип = ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.АдресЭлектроннойПочты") Тогда Объект.РедактированиеТолькоВДиалоге = Ложь; ИначеЕсли Объект.Тип = ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.Телефон") Или Объект.Тип = ПредопределенноеЗначение("Перечисление.ТипыКонтактнойИнформации.Факс") Тогда // Нет изменений Иначе Объект.РедактированиеТолькоВДиалоге = Ложь; КонецЕсли; КонецЕсли; КонецПроцедуры &НаКлиенте Процедура ПослеЗакрытияФормыНастроекАдреса(Результат, ДополнительныеПараметры) Экспорт Если ТипЗнч(Результат) = Тип("Структура") Тогда ЗаполнитьЗначенияСвойств(Объект, Результат); КонецЕсли; КонецПроцедуры #КонецОбласти

Catalogs/ВидыПроверок/ManagerModule

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

Catalogs/ВидыПроверок/ObjectModule



Catalogs/ВидыПроверок/Forms/ФормаЭлемента/Form/Module

 #Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. Возврат; КонецЕсли; КонецПроцедуры &НаКлиенте Процедура ПриОткрытии(Отказ) ОбновитьСчетчикиСтрокТаблиц(); КонецПроцедуры #КонецОбласти #Область ОбработчикиСобытийЭлементовТаблицыФормыДополнительныеСвойства &НаКлиенте Процедура СвойстваОбъектаПриИзменении(Элемент) ОбновитьСчетчикиСтрокТаблиц(); КонецПроцедуры #КонецОбласти #Область СлужебныеПроцедурыИФункции &НаКлиенте Процедура ОбновитьСчетчикиСтрокТаблиц() УстановитьЗаголовокСтраницы(Элементы.СтраницаДополнительныеСвойства, Объект.СвойстваОбъекта, НСтр("ru = 'Дополнительные свойства'")); КонецПроцедуры &НаКлиенте Процедура УстановитьЗаголовокСтраницы(ЭлементСтраница, РеквизитТабличнаяЧасть, ЗаголовокПоУмолчанию) ЗаголовокСтраницы = ЗаголовокПоУмолчанию; Если РеквизитТабличнаяЧасть.Количество() > 0 Тогда ЗаголовокСтраницы = ЗаголовокПоУмолчанию + " (" + РеквизитТабличнаяЧасть.Количество() + ")"; КонецЕсли; ЭлементСтраница.Заголовок = ЗаголовокСтраницы; КонецПроцедуры #КонецОбласти

Catalogs/ВнешниеКомпоненты/ManagerModule

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

Catalogs/ВнешниеКомпоненты/ObjectModule

#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ОбработчикиСобытий Процедура ПередЗаписью(Отказ) Если ОбменДанными.Загрузка Тогда Возврат; КонецЕсли; // Связь реквизитов с пометкой удаления. Если ПометкаУдаления Тогда Использование = Перечисления.ВариантыИспользованияВнешнихКомпонент.Отключена; КонецЕсли; // Связь реквизитов с вариантом использования. Если Использование = Перечисления.ВариантыИспользованияВнешнихКомпонент.Отключена Тогда ОбновлятьСПортала1СИТС = Ложь; КонецЕсли; // Не должно быть несколько компонент с одним идентификатором, с одновременно включенными ОбновлятьСПортала1СИТС. Если Не ЭтоКомпонентаПоследнейВерсии() Тогда ОбновлятьСПортала1СИТС = Ложь; КонецЕсли; // Контроль уникальности идентификатора и версии компоненты. Если Не ЭтоУникальнаяКомпонента() Тогда ВызватьИсключение СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Внешняя компонента со значениями Идентификатор ""%1"" и версия ""%2"" уже загружена в программу.'"), Идентификатор, Версия); КонецЕсли; // Помещение двоичных данных компоненты ДвоичныеДанныеКомпоненты = Неопределено; Если ДополнительныеСвойства.Свойство("ДвоичныеДанныеКомпоненты", ДвоичныеДанныеКомпоненты) Тогда ХранилищеКомпоненты = Новый ХранилищеЗначения(ДвоичныеДанныеКомпоненты); КонецЕсли; КонецПроцедуры Процедура ПриЗаписи(Отказ) Если ОбменДанными.Загрузка Тогда Возврат; КонецЕсли; // Если была загружается компонента новой версии, а у одной из старых есть признак ОбновлятьСПортала1СИТС // то при перезаписи компонент младших версий признак будет сброшен. Если ЭтоКомпонентаПоследнейВерсии() Тогда ПерезаписатьКомпонентыМладшихВерсий(); КонецЕсли; КонецПроцедуры #КонецОбласти #Область СлужебныеПроцедурыИФункции Функция ЭтоКомпонентаПоследнейВерсии() Экспорт Запрос = Новый Запрос; Запрос.УстановитьПараметр("Идентификатор", Идентификатор); Запрос.Текст = "ВЫБРАТЬ | МАКСИМУМ(ВнешниеКомпоненты.ДатаВерсии) КАК ДатаВерсии |ИЗ | Справочник.ВнешниеКомпоненты КАК ВнешниеКомпоненты |ГДЕ | ВнешниеКомпоненты.Идентификатор = &Идентификатор"; Результат = Запрос.Выполнить(); Выборка = Результат.Выбрать(); Выборка.Следующий(); Возврат (Выборка.ДатаВерсии = Null) Или (Выборка.ДатаВерсии <= ДатаВерсии) КонецФункции Функция ЭтоУникальнаяКомпонента() Запрос = Новый Запрос; Запрос.УстановитьПараметр("Идентификатор", Идентификатор); Запрос.УстановитьПараметр("Версия", Версия); Запрос.УстановитьПараметр("Ссылка", Ссылка); Запрос.Текст = "ВЫБРАТЬ ПЕРВЫЕ 1 | 1 |ИЗ | Справочник.ВнешниеКомпоненты КАК ВнешниеКомпоненты |ГДЕ | ВнешниеКомпоненты.Идентификатор = &Идентификатор | И ВнешниеКомпоненты.Версия = &Версия | И ВнешниеКомпоненты.Использование = ЗНАЧЕНИЕ(Перечисление.ВариантыИспользованияВнешнихКомпонент.Используется) | И ВнешниеКомпоненты.Ссылка <> &Ссылка"; Результат = Запрос.Выполнить(); Возврат Результат.Пустой(); КонецФункции Процедура ПерезаписатьКомпонентыМладшихВерсий() Запрос = Новый Запрос; Запрос.УстановитьПараметр("Идентификатор", Идентификатор); Запрос.УстановитьПараметр("Ссылка", Ссылка); Запрос.Текст = "ВЫБРАТЬ | ВнешниеКомпоненты.Ссылка КАК Ссылка |ИЗ | Справочник.ВнешниеКомпоненты КАК ВнешниеКомпоненты |ГДЕ | ВнешниеКомпоненты.Идентификатор = &Идентификатор | И ВнешниеКомпоненты.Использование = ЗНАЧЕНИЕ(Перечисление.ВариантыИспользованияВнешнихКомпонент.Используется) | И ВнешниеКомпоненты.Ссылка <> &Ссылка"; Результат = Запрос.Выполнить(); Выборка = Результат.Выбрать(); Пока Выборка.Следующий() Цикл Объект = Выборка.Ссылка.ПолучитьОбъект(); Объект.Записать(); КонецЦикла; КонецПроцедуры #КонецОбласти #КонецЕсли

Catalogs/ВнешниеКомпоненты/Forms/ОбновлениеКомпонентСПортала1СИТС/Form/Module

 #Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. Возврат; КонецЕсли; Если ТипЗнч(Параметры.МассивСсылок) <> Тип("Массив") Или Параметры.МассивСсылок.Количество() = 0 Тогда ВызватьИсключение НСтр("ru = 'Должна быть хоть одна ссылка указана.'"); КонецЕсли; ДанныеАутентификацииПорталаСохранены = ДанныеАутентификацииПорталаСохранены(); ДоступнаЗагрузкаСПортала = ВнешниеКомпонентыСлужебный.ДоступнаЗагрузкаСПортала(); ТекстПояснения = ""; ПредложитьОбновление = Ложь; Для Каждого Ссылка Из Параметры.МассивСсылок Цикл Реквизиты = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(Ссылка, "Идентификатор, Версия, ОбновлятьСПортала1СИТС"); ТекстПояснения = ТекстПояснения + ВнешниеКомпонентыСлужебный.ПредставлениеКомпоненты(Реквизиты.Идентификатор, Реквизиты. Версия) + ?(Реквизиты.ОбновлятьСПортала1СИТС, "", " - " + НСтр("ru = 'обновление отключено'") + ".") + Символы.ПС; ПредложитьОбновление = ПредложитьОбновление Или Реквизиты.ОбновлятьСПортала1СИТС; Если Реквизиты.ОбновлятьСПортала1СИТС Тогда МассивСсылок.Добавить(Ссылка); КонецЕсли; КонецЦикла; Если ПредложитьОбновление Тогда Элементы.ДекорацияПояснение.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = '%1 |Проверить обновление компоненты?'"), ТекстПояснения); Элементы.ПодключитьИнтернетПоддержку.Видимость = Не ДанныеАутентификацииПорталаСохранены; Элементы.Закрыть.Видимость = Ложь; Иначе Элементы.ДекорацияПояснение.Заголовок = ТекстПояснения; Элементы.ПодключитьИнтернетПоддержку.Видимость = Ложь; Элементы.Загрузить.Видимость = Ложь; Элементы.Отмена.Видимость = Ложь; Элементы.Закрыть.Видимость = Истина; КонецЕсли; КонецПроцедуры &НаКлиенте Процедура ПриОткрытии(Отказ) Если Не ДоступнаЗагрузкаСПортала Тогда Отказ = Истина; КонецЕсли; КонецПроцедуры #КонецОбласти #Область ОбработчикиКомандФормы &НаКлиенте Процедура ПодключитьИнтернетПоддержку(Команда = Неопределено) Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("ИнтернетПоддержкаПользователей") Тогда МодульИнтернетПоддержкаПользователейКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ИнтернетПоддержкаПользователейКлиент"); Оповещение = Новый ОписаниеОповещения("ПослеПодключенияИнтернетПоддержки", ЭтотОбъект); МодульИнтернетПоддержкаПользователейКлиент.ПодключитьИнтернетПоддержкуПользователей(Оповещение, ЭтотОбъект); КонецЕсли; КонецПроцедуры &НаКлиенте Процедура Загрузить(Команда) Если Не ДанныеАутентификацииПорталаСохранены Тогда ПодключитьИнтернетПоддержку(); Возврат; КонецЕсли; Элементы.Загрузить.Доступность = Ложь; Элементы.Страницы.ТекущаяСтраница = Элементы.ДлительнаяОперация; ДлительнаяОперация = НачатьОбновлениеКомпонентСПортала(); Если ДлительнаяОперация = Неопределено Тогда КраткоеПредставлениеОшибки = НСтр("ru = 'Не удалось создать фоновое задание обновления компоненты.'"); Элементы.Страницы.ТекущаяСтраница = Элементы.Ошибка; КонецЕсли; ПараметрыОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект); ПараметрыОжидания.ФормаВладелец = ЭтотОбъект; ПараметрыОжидания.ВыводитьОкноОжидания = Ложь; Оповещение = Новый ОписаниеОповещения("ПослеОбновленияКомпонентСПортала", ЭтотОбъект); ДлительныеОперацииКлиент.ОжидатьЗавершение(ДлительнаяОперация, Оповещение, ПараметрыОжидания); КонецПроцедуры #КонецОбласти #Область СлужебныеПроцедурыИФункции &НаКлиенте Процедура ПослеПодключенияИнтернетПоддержки(Результат, Параметр) Экспорт Если ТипЗнч(Результат) = Тип("Структура") Тогда Элементы.ПодключитьИнтернетПоддержку.Видимость = Ложь; ДанныеАутентификацииПорталаСохранены = Истина; КонецЕсли; КонецПроцедуры &НаСервереБезКонтекста Функция ДанныеАутентификацииПорталаСохранены() Если ОбщегоНазначения.ПодсистемаСуществует("ИнтернетПоддержкаПользователей") Тогда МодульИнтернетПоддержкаПользователей = ОбщегоНазначения.ОбщийМодуль("ИнтернетПоддержкаПользователей"); Возврат МодульИнтернетПоддержкаПользователей.ЗаполненыДанныеАутентификацииПользователяИнтернетПоддержки(); КонецЕсли; Возврат Ложь; КонецФункции &НаСервере Функция НачатьОбновлениеКомпонентСПортала() Если Не ВнешниеКомпонентыСлужебный.ДоступнаЗагрузкаСПортала() Тогда Возврат Неопределено; КонецЕсли; ПараметрыПроцедуры = Новый Структура; ПараметрыПроцедуры.Вставить("МассивСсылок", МассивСсылок.ВыгрузитьЗначения()); ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор); ПараметрыВыполнения.НаименованиеФоновогоЗадания = НСтр("ru = 'Обновление внешней компоненты.'"); Возврат ДлительныеОперации.ВыполнитьВФоне("ВнешниеКомпонентыСлужебный.ОбновитьКомпонентыСПортала", ПараметрыПроцедуры, ПараметрыВыполнения); КонецФункции &НаКлиенте Процедура ПослеОбновленияКомпонентСПортала(Результат, ДополнительныеПараметры) Экспорт // Ответ: // - Структура - Выполнено - результат в структуре. // - Неопределено - Отменено пользователем. Если Результат = Неопределено Тогда Возврат; КонецЕсли; Если Результат.Статус = "Ошибка" Тогда КраткоеПредставлениеОшибки = Результат.КраткоеПредставлениеОшибки; Элементы.Страницы.ТекущаяСтраница = Элементы.Ошибка; КонецЕсли; Если Результат.Статус = "Выполнено" Тогда РезультатВыполнения = ПолучитьИзВременногоХранилища(Результат.АдресРезультата); Элементы.Страницы.ТекущаяСтраница = Элементы.Выполнено; Элементы.Загрузить.Видимость = Ложь; Элементы.Отмена.Видимость = Ложь; Элементы.Закрыть.Видимость = Истина; КонецЕсли; КонецПроцедуры #КонецОбласти

Catalogs/ВнешниеКомпоненты/Forms/ПоискКомпонентыНаПортале1СИТС/Form/Module

 #Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. Возврат; КонецЕсли; Если Не ПустаяСтрока(Параметры.ТекстПояснения) Тогда Элементы.ДекорацияПояснение.Заголовок = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = '%1 | |Компонента не загружена в программу. |Загрузить?'"), Параметры.ТекстПояснения); КонецЕсли; ДанныеАутентификацииПорталаСохранены = ДанныеАутентификацииПорталаСохранены(); ДоступнаЗагрузкаСПортала = ВнешниеКомпонентыСлужебный.ДоступнаЗагрузкаСПортала(); Элементы.ПодключитьИнтернетПоддержку.Видимость = Не ДанныеАутентификацииПорталаСохранены; КонецПроцедуры &НаКлиенте Процедура ПриОткрытии(Отказ) Если Не ДоступнаЗагрузкаСПортала Тогда Отказ = Истина; КонецЕсли; КонецПроцедуры #КонецОбласти #Область ОбработчикиКомандФормы &НаКлиенте Процедура ПодключитьИнтернетПоддержку(Команда = Неопределено) Если ОбщегоНазначенияКлиент.ПодсистемаСуществует("ИнтернетПоддержкаПользователей") Тогда МодульИнтернетПоддержкаПользователейКлиент = ОбщегоНазначенияКлиент.ОбщийМодуль("ИнтернетПоддержкаПользователейКлиент"); Оповещение = Новый ОписаниеОповещения("ПослеПодключенияИнтернетПоддержки", ЭтотОбъект); МодульИнтернетПоддержкаПользователейКлиент.ПодключитьИнтернетПоддержкуПользователей(Оповещение, ЭтотОбъект); КонецЕсли; КонецПроцедуры &НаКлиенте Процедура Загрузить(Команда) Если Не ДанныеАутентификацииПорталаСохранены Тогда ПодключитьИнтернетПоддержку(); Возврат; КонецЕсли; Элементы.Загрузить.Доступность = Ложь; Элементы.Страницы.ТекущаяСтраница = Элементы.ДлительнаяОперация; ДлительнаяОперация = НачатьПолучениеКомпонентыСПортала(Параметры.Идентификатор, Параметры.Версия); Если ДлительнаяОперация = Неопределено Тогда КраткоеПредставлениеОшибки = НСтр("ru = 'Не удалось создать фоновое задание обновления компоненты.'"); Элементы.Страницы.ТекущаяСтраница = Элементы.Ошибка; КонецЕсли; ПараметрыОжидания = ДлительныеОперацииКлиент.ПараметрыОжидания(ЭтотОбъект); ПараметрыОжидания.ФормаВладелец = ЭтотОбъект; ПараметрыОжидания.ВыводитьОкноОжидания = Ложь; Оповещение = Новый ОписаниеОповещения("ПослеПолученияКомпонентыСПортала", ЭтотОбъект); ДлительныеОперацииКлиент.ОжидатьЗавершение(ДлительнаяОперация, Оповещение, ПараметрыОжидания); КонецПроцедуры #КонецОбласти #Область СлужебныеПроцедурыИФункции &НаКлиенте Процедура ПослеПодключенияИнтернетПоддержки(Результат, Параметр) Экспорт Если ТипЗнч(Результат) = Тип("Структура") Тогда Элементы.ПодключитьИнтернетПоддержку.Видимость = Ложь; ДанныеАутентификацииПорталаСохранены = Истина; КонецЕсли; КонецПроцедуры &НаСервереБезКонтекста Функция ДанныеАутентификацииПорталаСохранены() Если ОбщегоНазначения.ПодсистемаСуществует("ИнтернетПоддержкаПользователей") Тогда МодульИнтернетПоддержкаПользователей = ОбщегоНазначения.ОбщийМодуль("ИнтернетПоддержкаПользователей"); Возврат МодульИнтернетПоддержкаПользователей.ЗаполненыДанныеАутентификацииПользователяИнтернетПоддержки(); КонецЕсли; Возврат Ложь; КонецФункции &НаСервере Функция НачатьПолучениеКомпонентыСПортала(Идентификатор, Версия) Если Не ВнешниеКомпонентыСлужебный.ДоступнаЗагрузкаСПортала() Тогда Возврат Неопределено; КонецЕсли; ПараметрыПроцедуры = Новый Структура; ПараметрыПроцедуры.Вставить("Идентификатор", Идентификатор); ПараметрыПроцедуры.Вставить("Версия", Версия); ПараметрыВыполнения = ДлительныеОперации.ПараметрыВыполненияВФоне(УникальныйИдентификатор); ПараметрыВыполнения.НаименованиеФоновогоЗадания = НСтр("ru = 'Получение внешней компоненты.'"); Возврат ДлительныеОперации.ВыполнитьВФоне("ВнешниеКомпонентыСлужебный.НоваяКомпонентаСПортала", ПараметрыПроцедуры, ПараметрыВыполнения); КонецФункции &НаКлиенте Процедура ПослеПолученияКомпонентыСПортала(Результат, ДополнительныеПараметры) Экспорт // Ответ: // - Структура - Выполнено - результат в структуре. // - Неопределено - Отменено пользователем. Если Результат = Неопределено Тогда Возврат; КонецЕсли; Если Результат.Статус = "Ошибка" Тогда КраткоеПредставлениеОшибки = Результат.КраткоеПредставлениеОшибки; Элементы.Страницы.ТекущаяСтраница = Элементы.Ошибка; КонецЕсли; Если Результат.Статус = "Выполнено" Тогда Закрыть(Истина); КонецЕсли; КонецПроцедуры #КонецОбласти

Catalogs/ВнешниеКомпоненты/Forms/ФормаСписка/Form/Module

 #Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) УстановитьУсловноеОформление(); Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. Возврат; КонецЕсли; Если Не ВнешниеКомпонентыСлужебный.ДоступнаЗагрузкаСПортала() Тогда Элементы.ОбновлятьСПортала1СИТС.Видимость = Ложь; Элементы.ОбновитьСПортала1СИТС.Видимость = Ложь; КонецЕсли; КонецПроцедуры &НаСервере Процедура ПриЗагрузкеДанныхИзНастроекНаСервере(Настройки) УстановитьОтбор(); КонецПроцедуры #КонецОбласти #Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура ИспользованиеОтборПриИзменении(Элемент) УстановитьОтбор(); КонецПроцедуры #КонецОбласти #Область ОбработчикиСобытийЭлементовТаблицыФормыСписок &НаКлиенте Процедура СписокПередНачаломДобавления(Элемент, Отказ, Копирование, Родитель, Группа, Параметр) Если Копирование Тогда Отказ = Истина; КонецЕсли; КонецПроцедуры #КонецОбласти #Область ОбработчикиКомандФормы &НаКлиенте Процедура ОбновитьСПортала(Команда) МассивСсылок = Элементы.Список.ВыделенныеСтроки; Если МассивСсылок.Количество() = 0 Тогда Возврат; КонецЕсли; Оповещение = Новый ОписаниеОповещения("ПослеОбновленияКомпонентыСПортала", ЭтотОбъект); ВнешниеКомпонентыСлужебныйКлиент.ОбновитьКомпонентыСПортала(Оповещение, МассивСсылок); КонецПроцедуры &НаКлиенте Процедура ОбновитьИзФайла(Команда) ДанныеСтроки = Элементы.Список.ТекущиеДанные; Если ДанныеСтроки = Неопределено Тогда Возврат; КонецЕсли; ПараметрыФормы = Новый Структура; ПараметрыФормы.Вставить("Ключ", ДанныеСтроки.Ссылка); ПараметрыФормы.Вставить("ПоказатьДиалогЗагрузкиИзФайлаПриОткрытии", Истина); ОткрытьФорму("Справочник.ВнешниеКомпоненты.ФормаОбъекта", ПараметрыФормы); КонецПроцедуры &НаКлиенте Процедура СохранитьКак(Команда) ДанныеСтроки = Элементы.Список.ТекущиеДанные; Если ДанныеСтроки = Неопределено Тогда Возврат; КонецЕсли; ВнешниеКомпонентыСлужебныйКлиент.СохранитьКомпонентуВФайл(ДанныеСтроки.Ссылка); КонецПроцедуры #КонецОбласти #Область СлужебныеПроцедурыИФункции &НаКлиенте Процедура ПослеОбновленияКомпонентыСПортала(Результат, ДополнительныеПараметры) Экспорт Элементы.Список.Обновить(); КонецПроцедуры ///////////////////////////////////////////////////////// // Представление данных на форме. &НаСервере Процедура УстановитьОтбор() ПараметрыОтбора = Новый Соответствие(); ПараметрыОтбора.Вставить("ИспользованиеОтбор", ИспользованиеОтбор); УстановитьОтборСписка(Список, ПараметрыОтбора); КонецПроцедуры &НаСервереБезКонтекста Процедура УстановитьОтборСписка(Список, ПараметрыОтбора) Если ПараметрыОтбора["ИспользованиеОтбор"] = 0 Тогда ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( Список, "Использование",,,, Ложь); ИначеЕсли ПараметрыОтбора["ИспользованиеОтбор"] = 1 Тогда ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( Список, "Использование", Перечисления.ВариантыИспользованияВнешнихКомпонент.Используется,,, Истина); ИначеЕсли ПараметрыОтбора["ИспользованиеОтбор"] = 2 Тогда ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( Список, "Использование", Перечисления.ВариантыИспользованияВнешнихКомпонент.Отключена,,, Истина); КонецЕсли; КонецПроцедуры &НаСервере Процедура УстановитьУсловноеОформление() Список.УсловноеОформление.Элементы.Очистить(); ЭлементУсловногоОформления = Список.УсловноеОформление.Элементы.Добавить(); ОтборЭлемента = ЭлементУсловногоОформления.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Использование"); ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; ОтборЭлемента.ПравоеЗначение = Перечисления.ВариантыИспользованияВнешнихКомпонент.Отключена; ЭлементУсловногоОформления.Оформление.УстановитьЗначениеПараметра( "TextColor", Метаданные.ЭлементыСтиля.ТекстЗапрещеннойЯчейкиЦвет.Значение); КонецПроцедуры #КонецОбласти

Catalogs/ВнешниеКомпоненты/Forms/ФормаЭлемента/Form/Module

 #Область ОписаниеПеременных &НаКлиенте Перем ДополнительнаяИнформация; #КонецОбласти #Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) Если Параметры.Свойство("АвтоТест") Тогда Возврат; КонецЕсли; ЭтоНовый = Объект.Ссылка.Пустая(); Если ЭтоНовый Тогда Параметры.ПоказатьДиалогЗагрузкиИзФайлаПриОткрытии = Истина; КонецЕсли; УстановитьВидимостьДоступность(); Если Не ВнешниеКомпонентыСлужебный.ДоступнаЗагрузкаСПортала() Тогда Элементы.ОбновлятьСПортала1СИТС.Видимость = Ложь; Элементы.ОбновитьСПортала1СИТС.Видимость = Ложь; КонецЕсли; КонецПроцедуры &НаКлиенте Процедура ПриОткрытии(Отказ) Если Параметры.ПоказатьДиалогЗагрузкиИзФайлаПриОткрытии Тогда ПодключитьОбработчикОжидания("ЗагрузитьКомпонентуИзФайла", 0.1, Истина); КонецЕсли КонецПроцедуры &НаСервере Процедура ПриЧтенииНаСервере(ТекущийОбъект) // Если вызвана команда "Перечитать" необходимо удалить буфер данных компоненты Если ЭтоАдресВременногоХранилища(АдресДвоичныхДанныхКомпоненты) Тогда УдалитьИзВременногоХранилища(АдресДвоичныхДанныхКомпоненты); КонецЕсли; АдресДвоичныхДанныхКомпоненты = Неопределено; УстановитьВидимостьДоступность(); КонецПроцедуры &НаСервере Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) // Если есть двоичные данные компоненты, которые надо сохранить, то помещаем их в ДополнительныеСвойства. Если ЭтоАдресВременногоХранилища(АдресДвоичныхДанныхКомпоненты) Тогда ДвоичныеДанныеКомпоненты = ПолучитьИзВременногоХранилища(АдресДвоичныхДанныхКомпоненты); ТекущийОбъект.ДополнительныеСвойства.Вставить("ДвоичныеДанныеКомпоненты", ДвоичныеДанныеКомпоненты); КонецЕсли; КонецПроцедуры &НаСервере Процедура ПриЗаписиНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) Записана = Истина; // Факт записи свидетельствует положительный результат при закрытии отдельно от записи. Параметры.ПоказатьДиалогЗагрузкиИзФайлаПриОткрытии = Ложь; // Избежание закрытия формы при ошибке. КонецПроцедуры &НаСервере Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи) УстановитьВидимостьДоступность(); КонецПроцедуры &НаКлиенте Процедура ПередЗакрытием(Отказ, ЗавершениеРаботы, ТекстПредупреждения, СтандартнаяОбработка) Если ЗавершениеРаботы Тогда Возврат; КонецЕсли; СтандартнаяОбработка = Ложь; ПараметрЗакрытия = ВнешниеКомпонентыСлужебныйКлиент.РезультатЗагрузкиКомпоненты(); ПараметрЗакрытия.Загружена = Записана; ПараметрЗакрытия.Идентификатор = Объект.Идентификатор; ПараметрЗакрытия.Версия = Объект.Версия; ПараметрЗакрытия.Наименование = Объект.Наименование; ПараметрЗакрытия.ДополнительнаяИнформация = ДополнительнаяИнформация; Закрыть(ПараметрЗакрытия); КонецПроцедуры #КонецОбласти #Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура ИспользованиеПриИзменении(Элемент) УстановитьВидимостьДоступность(); КонецПроцедуры &НаКлиенте Процедура ОбновлятьСПортала1СИТСПриИзменении(Элемент) УстановитьВидимостьДоступность(); КонецПроцедуры #КонецОбласти #Область ОбработчикиКомандФормы &НаКлиенте Процедура ОбновитьСПортала(Команда) Если Модифицированность Тогда Оповещение = Новый ОписаниеОповещения("ПослеЗакрытияВопросаЗаписатьОбъект", ЭтотОбъект); ПоказатьВопрос(Оповещение, НСтр("ru = 'Для проверки обновления необходимо записать объект. Записать?'"), РежимДиалогаВопрос.ДаНет); Иначе НачатьОбновлениеКомпонентыСПортала(); КонецЕсли; КонецПроцедуры &НаКлиенте Процедура ОбновитьИзФайла(Команда) ОчиститьСообщения(); ЗагрузитьКомпонентуИзФайла(); КонецПроцедуры &НаКлиенте Процедура СохранитьКак(Команда) Если ЭтоАдресВременногоХранилища(АдресДвоичныхДанныхКомпоненты) Тогда ПоказатьПредупреждение(, НСтр("ru = 'Перед сохранение компоненты в файл элемент справочника нужно записать.'")); Иначе ОчиститьСообщения(); ВнешниеКомпонентыСлужебныйКлиент.СохранитьКомпонентуВФайл(Объект.Ссылка); КонецЕсли; КонецПроцедуры &НаКлиенте Процедура ПоддерживаемыеКлиентскиеПриложения(Команда) Реквизиты = Новый Структура; Реквизиты.Вставить("Windows_x86"); Реквизиты.Вставить("Windows_x86_64"); Реквизиты.Вставить("Linux_x86"); Реквизиты.Вставить("Linux_x86_64"); Реквизиты.Вставить("Windows_x86_Firefox"); Реквизиты.Вставить("Linux_x86_Firefox"); Реквизиты.Вставить("Linux_x86_64_Firefox"); Реквизиты.Вставить("Windows_x86_MSIE"); Реквизиты.Вставить("Windows_x86_64_MSIE"); Реквизиты.Вставить("Windows_x86_Chrome"); Реквизиты.Вставить("Linux_x86_Chrome"); Реквизиты.Вставить("Linux_x86_64_Chrome"); Реквизиты.Вставить("MacOS_x86_64_Safari"); ЗаполнитьЗначенияСвойств(Реквизиты, Объект); ПараметрыФормы = Новый Структура; ПараметрыФормы.Вставить("ПоддерживаемыеКлиенты", Реквизиты); ОткрытьФорму("ОбщаяФорма.ПоддерживаемыеКлиентскиеПриложения", ПараметрыФормы); КонецПроцедуры #КонецОбласти #Область СлужебныеПроцедурыИФункции #Область КлиентскаяЛогика // Строит диалог загрузки компоненты из файла. &НаКлиенте Процедура ЗагрузитьКомпонентуИзФайла() Оповещение = Новый ОписаниеОповещения("ЗагрузитьКомпонентуПослеПредупрежденияБезопасности", ЭтотОбъект); ПараметрыФормы = Новый Структура("Ключ", "ПередДобавлениемВнешнейКомпоненты"); ОткрытьФорму("ОбщаяФорма.ПредупреждениеБезопасности", ПараметрыФормы,,,,, Оповещение); КонецПроцедуры // Продолжение процедуры ЗагрузитьКомпонентуИзФайла. &НаКлиенте Процедура ЗагрузитьКомпонентуПослеПредупрежденияБезопасности(Ответ, Контекст) Экспорт // Ответ: // - "Продолжить" - Загрузить. // - КодВозвратаДиалога.Отмена - Отклонить. // - Неопределено - Закрыто окно. Если Ответ <> "Продолжить" Тогда ЗагрузитьКомпонентуПриОтображенииОшибки(); Возврат; КонецЕсли; ПараметрыДиалога = Новый Структура; ПараметрыДиалога.Вставить("Режим", РежимДиалогаВыбораФайла.Открытие); ПараметрыДиалога.Вставить("Заголовок", НСтр("ru = 'Выберите файл внешней компоненты'")); ПараметрыДиалога.Вставить("Фильтр", НСтр("ru = 'Внешняя компонента (*.zip)|*.zip|Все файлы(*.*)|*.*'")); Оповещение = Новый ОписаниеОповещения("ЗагрузитьКомпонентуПослеПомещенияФайла", ЭтотОбъект, Контекст); СтандартныеПодсистемыКлиент.ПоказатьПомещениеФайла(Оповещение, УникальныйИдентификатор, Объект.ИмяФайла, ПараметрыДиалога); КонецПроцедуры // Продолжение процедуры ЗагрузитьКомпонентуИзФайла. &НаКлиенте Процедура ЗагрузитьКомпонентуПослеПомещенияФайла(ПомещенныеФайлы, Контекст) Экспорт Если ПомещенныеФайлы = Неопределено Или ПомещенныеФайлы.Количество() = 0 Тогда ЗагрузитьКомпонентуПриОтображенииОшибки(НСтр("ru = 'Файл не удалось загрузить на сервер.'")); Возврат; КонецЕсли; ОписаниеФайла = ПомещенныеФайлы[0]; ПараметрыЗагрузки = Новый Структура; ПараметрыЗагрузки.Вставить("АдресХранилищаФайла", ОписаниеФайла.Хранение); ПараметрыЗагрузки.Вставить("ИмяФайла", ТолькоИмяФайла(ОписаниеФайла.Имя)); Результат = ЗагрузитьКомпонентуИзФайлаНаСервере(ПараметрыЗагрузки); Если Результат.Загружена И ЭтоАдресВременногоХранилища(АдресДвоичныхДанныхКомпоненты)Тогда ДополнительнаяИнформация = Результат.ДополнительнаяИнформация; Иначе ЗагрузитьКомпонентуПриОтображенииОшибки(Результат.ОписаниеОшибки); КонецЕсли; КонецПроцедуры // Продолжение процедуры ЗагрузитьКомпонентуИзФайла. &НаКлиенте Процедура ЗагрузитьКомпонентуПриОтображенииОшибки(ОписаниеОшибки = "") Если ПустаяСтрока(ОписаниеОшибки) Тогда ЗагрузитьКомпонентуПослеОтображенияОшибки(Неопределено); Иначе Оповещение = Новый ОписаниеОповещения("ЗагрузитьКомпонентуПослеОтображенияОшибки", ЭтотОбъект); СтрокаСПредупреждением = Новый ФорматированнаяСтрока( СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = '%1 |Необходимо указать zip-архив с внешней компонентой. |Подробнее:'"), ОписаниеОшибки), Новый ФорматированнаяСтрока("http://its.1c.ru/db/metodtorg/content/3221/hdoc",,,, "http://its.1c.ru/db/metodtorg/content/3221/hdoc"), "."); ПоказатьПредупреждение(Оповещение, СтрокаСПредупреждением); КонецЕсли; КонецПроцедуры // Продолжение процедуры ЗагрузитьКомпонентуИзФайла. &НаКлиенте Процедура ЗагрузитьКомпонентуПослеОтображенияОшибки(ДополнительныеПараметры) Экспорт // Открыта через программный интерфейс. Если Параметры.ПоказатьДиалогЗагрузкиИзФайлаПриОткрытии Тогда Закрыть(); КонецЕсли; КонецПроцедуры &НаКлиенте Процедура ПослеЗакрытияВопросаЗаписатьОбъект(РезультатВопроса, Контекст) Экспорт Если РезультатВопроса = КодВозвратаДиалога.Да Тогда Записать(); НачатьОбновлениеКомпонентыСПортала(); КонецЕсли; КонецПроцедуры &НаКлиенте Процедура НачатьОбновлениеКомпонентыСПортала() ЭтоНовый = Объект.Ссылка.Пустая(); Если ЭтоНовый Тогда Возврат; КонецЕсли; МассивСсылок = Новый Массив; МассивСсылок.Добавить(Объект.Ссылка); Оповещение = Новый ОписаниеОповещения("ПослеОбновленияКомпонентыСПортала", ЭтотОбъект); ВнешниеКомпонентыСлужебныйКлиент.ОбновитьКомпонентыСПортала(Оповещение, МассивСсылок); КонецПроцедуры &НаКлиенте Процедура ПослеОбновленияКомпонентыСПортала(Результат, ДополнительныеПараметры) Экспорт ОбновитьКарточкуПослеОбновленияКомпонентыСПортала(); КонецПроцедуры #КонецОбласти #Область СервернаяЛогика // Серверная логика процедуры ЗагрузитьКомпонентуИзФайла. &НаСервере Функция ЗагрузитьКомпонентуИзФайлаНаСервере(ПараметрыЗагрузки) Если Не Пользователи.ЭтоПолноправныйПользователь(,, Ложь) Тогда ВызватьИсключение НСтр("ru = 'Недостаточно прав для совершения операции.'"); КонецЕсли; ОбъектСправочника = РеквизитФормыВЗначение("Объект"); Информация = ВнешниеКомпонентыСлужебный.ИнформацияОКомпонентеИзФайла(ПараметрыЗагрузки.АдресХранилищаФайла,, Параметры.ПараметрыПоискаДополнительнойИнформации); Результат = РезультатЗагрузкиКомпоненты(); Если Не Информация.Разобрано Тогда Результат.ОписаниеОшибки = Информация.ОписаниеОшибки; Возврат Результат; КонецЕсли; Если ЗначениеЗаполнено(ОбъектСправочника.Идентификатор) И ЗначениеЗаполнено(Информация.Реквизиты.Идентификатор) Тогда Если ОбъектСправочника.Идентификатор <> Информация.Реквизиты.Идентификатор Тогда Результат.ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru='Текущий идентификатор %1 отличается от загружаемого %2 |Обновление невозможно.'"), ОбъектСправочника.Идентификатор, Информация.Реквизиты.Идентификатор); Возврат Результат; КонецЕсли; КонецЕсли; ЗаполнитьЗначенияСвойств(ОбъектСправочника, Информация.Реквизиты,, "Идентификатор"); // По данным манифеста. Если Не ЗначениеЗаполнено(ОбъектСправочника.Идентификатор) Тогда ОбъектСправочника.Идентификатор = Информация.Реквизиты.Идентификатор; КонецЕсли; ОбъектСправочника.ИмяФайла = ПараметрыЗагрузки.ИмяФайла; // Установка имени файла. АдресДвоичныхДанныхКомпоненты = ПоместитьВоВременноеХранилище(Информация.ДвоичныеДанные, УникальныйИдентификатор); ОбъектСправочника.ОписаниеОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Загружена из файла %1. %2.'"), ОбъектСправочника.ИмяФайла, ТекущаяДатаСеанса()); ЗначениеВРеквизитФормы(ОбъектСправочника, "Объект"); Модифицированность = Истина; УстановитьВидимостьДоступность(); Результат.Загружена = Истина; Результат.ДополнительнаяИнформация = Информация.ДополнительнаяИнформация; Возврат Результат; КонецФункции &НаКлиентеНаСервереБезКонтекста Функция РезультатЗагрузкиКомпоненты() Результат = Новый Структура; Результат.Вставить("Загружена", Ложь); Результат.Вставить("ОписаниеОшибки", ""); Результат.Вставить("ДополнительнаяИнформация", Новый Соответствие); Возврат Результат; КонецФункции // Серверная логика обновления компоненты с сайта. &НаСервере Процедура ОбновитьКарточкуПослеОбновленияКомпонентыСПортала() ЭтотОбъект.Прочитать(); Модифицированность = Ложь; УстановитьВидимостьДоступность(); КонецПроцедуры #КонецОбласти #Область Представление &НаСервере Процедура УстановитьВидимостьДоступность() СправочникОбъект = РеквизитФормыВЗначение("Объект"); ЭтоНовый = Объект.Ссылка.Пустая(); Элементы.Информация.Видимость = Не ЭтоНовый И ЗначениеЗаполнено(Объект.ОписаниеОшибки); // Параметры отображения предупреждений при редактировании ОтображатьПредупреждение = ОтображениеПредупрежденияПриРедактировании.Отображать; НеОтображатьПредупреждение = ОтображениеПредупрежденияПриРедактировании.НеОтображать; Если ЗначениеЗаполнено(Объект.Наименование) Тогда Элементы.Наименование.ОтображениеПредупрежденияПриРедактировании = ОтображатьПредупреждение; Иначе Элементы.Наименование.ОтображениеПредупрежденияПриРедактировании = НеОтображатьПредупреждение; КонецЕсли; Если ЗначениеЗаполнено(Объект.Идентификатор) Тогда Элементы.Идентификатор.ОтображениеПредупрежденияПриРедактировании = ОтображатьПредупреждение; Иначе Элементы.Идентификатор.ОтображениеПредупрежденияПриРедактировании = НеОтображатьПредупреждение; КонецЕсли; Если ЗначениеЗаполнено(Объект.Версия) Тогда Элементы.Версия.ОтображениеПредупрежденияПриРедактировании = ОтображатьПредупреждение; Иначе Элементы.Версия.ОтображениеПредупрежденияПриРедактировании = НеОтображатьПредупреждение; КонецЕсли; // Доступность кнопки Сохранить в файл Элементы.ФормаСохранитьКак.Доступность = Не ЭтоНовый; Элементы.ОбновитьСПортала1СИТС.Доступность = Не ЭтоНовый; // Зависимость использования и автоматического обновления. КомпонентаОтключена = (Объект.Использование = Перечисления.ВариантыИспользованияВнешнихКомпонент.Отключена); Элементы.ОбновлятьСПортала1СИТС.Доступность = Не КомпонентаОтключена И СправочникОбъект.ЭтоКомпонентаПоследнейВерсии(); Элементы.ОбновитьСПортала1СИТС.Доступность = Объект.ОбновлятьСПортала1СИТС; КонецПроцедуры #КонецОбласти #Область Прочее &НаКлиенте Функция ТолькоИмяФайла(ВыбранноеИмяФайла) // Использовать критично на клиенте, т.к. ПолучитьРазделительПути() на сервере может быть другим. МассивПодстрок = СтрРазделить(ВыбранноеИмяФайла, ПолучитьРазделительПути(), Ложь); Возврат МассивПодстрок.Получить(МассивПодстрок.ВГраница()); КонецФункции #КонецОбласти #КонецОбласти

Catalogs/ВнешниеПользователи/Commands/ВнешнийДоступ/CommandModule

#Область ОбработчикиСобытий &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) ПараметрыФормы = Новый Структура; ПараметрыФормы.Вставить("ОбъектАвторизации", ПараметрКоманды); Попытка ОткрытьФорму( "Справочник.ВнешниеПользователи.ФормаОбъекта", ПараметрыФормы, ПараметрыВыполненияКоманды.Источник, ПараметрыВыполненияКоманды.Уникальность, ПараметрыВыполненияКоманды.Окно); Исключение ИнформацияОбОшибке = ИнформацияОбОшибке(); Если СтрНайти(ПодробноеПредставлениеОшибки(ИнформацияОбОшибке), "ВызватьИсключение" + " " + "ОписаниеОшибкиКакПредупреждения") > 0 Тогда ПоказатьПредупреждение(, КраткоеПредставлениеОшибки(ИнформацияОбОшибке)); Иначе ВызватьИсключение; КонецЕсли; КонецПопытки; КонецПроцедуры #КонецОбласти

Catalogs/ВнешниеПользователи/ManagerModule

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

Catalogs/ВнешниеПользователи/ObjectModule

#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ОписаниеПеременных Перем ПараметрыОбработкиПользователяИБ; // Параметры, заполняемые при обработке пользователя ИБ. // Используются в обработчике события ПриЗаписи. Перем ЭтоНовый; // Показывает, что был записан новый объект. // Используются в обработчике события ПриЗаписи. Перем СтарыйОбъектАвторизации; // Значений объекта авторизации до изменения. // Используются в обработчике события ПриЗаписи. #КонецОбласти // *Область ПрограммныйИнтерфейс. // // Программный интерфейс объекта реализован через ДополнительныеСвойства: // // ОписаниеПользователяИБ - Структура, как и в модуле объекта справочника Пользователи. // // *КонецОбласти #Область ОбработчикиСобытий Процедура ПередЗаписью(Отказ) Если ОбменДанными.Загрузка Тогда Возврат; КонецЕсли; ЭтоНовый = ЭтоНовый(); Если НЕ ЗначениеЗаполнено(ОбъектАвторизации) Тогда ВызватьИсключение НСтр("ru = 'У внешнего пользователя не задан объект авторизации.'"); Иначе ТекстОшибки = ""; Если ПользователиСлужебный.ОбъектАвторизацииИспользуется( ОбъектАвторизации, Ссылка, , , ТекстОшибки) Тогда ВызватьИсключение ТекстОшибки; КонецЕсли; КонецЕсли; // Проверка, что объект авторизации не изменен. Если ЭтоНовый Тогда СтарыйОбъектАвторизации = NULL; Иначе СтарыйОбъектАвторизации = ОбщегоНазначения.ЗначениеРеквизитаОбъекта( Ссылка, "ОбъектАвторизации"); Если ЗначениеЗаполнено(СтарыйОбъектАвторизации) И СтарыйОбъектАвторизации <> ОбъектАвторизации Тогда ВызватьИсключение НСтр("ru = 'Невозможно изменить ранее указанный объект авторизации.'"); КонецЕсли; КонецЕсли; ПользователиСлужебный.НачатьОбработкуПользователяИБ(ЭтотОбъект, ПараметрыОбработкиПользователяИБ); КонецПроцедуры Процедура ПриЗаписи(Отказ) Если ОбменДанными.Загрузка Тогда Возврат; КонецЕсли; // Обновление состава группы нового внешнего пользователя (если задана). Если ДополнительныеСвойства.Свойство("ГруппаНовогоВнешнегоПользователя") И ЗначениеЗаполнено(ДополнительныеСвойства.ГруппаНовогоВнешнегоПользователя) Тогда Блокировка = Новый БлокировкаДанных; ЭлементБлокировки = Блокировка.Добавить("Справочник.ГруппыВнешнихПользователей"); Блокировка.Заблокировать(); ОбъектГруппы = ДополнительныеСвойства.ГруппаНовогоВнешнегоПользователя.ПолучитьОбъект(); ОбъектГруппы.Состав.Добавить().ВнешнийПользователь = Ссылка; ОбъектГруппы.Записать(); КонецЕсли; // Обновление состава автоматической группы "Все внешние пользователи". УчастникиИзменений = Новый Соответствие; ИзмененныеГруппы = Новый Соответствие; ПользователиСлужебный.ОбновитьСоставыГруппВнешнихПользователей( Справочники.ГруппыВнешнихПользователей.ВсеВнешниеПользователи, Ссылка, УчастникиИзменений, ИзмененныеГруппы); ПользователиСлужебный.ОбновитьИспользуемостьСоставовГруппПользователей( Ссылка, УчастникиИзменений, ИзмененныеГруппы); ПользователиСлужебный.ЗавершитьОбработкуПользователяИБ( ЭтотОбъект, ПараметрыОбработкиПользователяИБ); ПользователиСлужебный.ПослеОбновленияСоставовГруппВнешнихПользователей( УчастникиИзменений, ИзмененныеГруппы); Если СтарыйОбъектАвторизации <> ОбъектАвторизации Тогда ИнтеграцияПодсистемБСП.ПослеИзмененияОбъектаАвторизацииВнешнегоПользователя( Ссылка, СтарыйОбъектАвторизации, ОбъектАвторизации); КонецЕсли; ПользователиСлужебный.ВключитьЗаданиеКонтрольАктивностиПользователейПриНеобходимости(Ссылка); ИнтеграцияПодсистемБСП.ПослеДобавленияИзмененияПользователяИлиГруппы(Ссылка, ЭтоНовый); КонецПроцедуры Процедура ПередУдалением(Отказ) Если ОбменДанными.Загрузка Тогда Возврат; КонецЕсли; ОбщиеДействияПередУдалениемВОбычномРежимеИПриОбменеДанными(); КонецПроцедуры Процедура ПриКопировании(ОбъектКопирования) ДополнительныеСвойства.Вставить("ЗначениеКопирования", ОбъектКопирования.Ссылка); ИдентификаторПользователяИБ = Неопределено; ИдентификаторПользователяСервиса = Неопределено; Подготовлен = Ложь; Комментарий = ""; КонецПроцедуры #КонецОбласти #Область СлужебныеПроцедурыИФункции // Только для внутреннего использования. Процедура ОбщиеДействияПередУдалениемВОбычномРежимеИПриОбменеДанными() Экспорт // Требуется удалить пользователя ИБ, иначе он попадет в список ошибок в форме ПользователиИБ, // кроме того, вход под этим пользователем ИБ приведет к ошибке. ОписаниеПользователяИБ = Новый Структура; ОписаниеПользователяИБ.Вставить("Действие", "Удалить"); ДополнительныеСвойства.Вставить("ОписаниеПользователяИБ", ОписаниеПользователяИБ); ПользователиСлужебный.НачатьОбработкуПользователяИБ(ЭтотОбъект, ПараметрыОбработкиПользователяИБ, Истина); ПользователиСлужебный.ЗавершитьОбработкуПользователяИБ(ЭтотОбъект, ПараметрыОбработкиПользователяИБ); КонецПроцедуры #КонецОбласти #КонецЕсли

Catalogs/ВопросыШаблонаАнкеты/ManagerModule

#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ПрограммныйИнтерфейс #Область ДляВызоваИзДругихПодсистем // СтандартныеПодсистемы.ГрупповоеИзменениеОбъектов // Возвращает реквизиты объекта, которые разрешается редактировать // с помощью обработки группового изменения реквизитов. // // Возвращаемое значение: // Массив - список имен реквизитов объекта. Функция РеквизитыРедактируемыеВГрупповойОбработке() Экспорт Результат = Новый Массив; Результат.Добавить("Обязательный"); Результат.Добавить("Заметки"); Возврат Результат; КонецФункции // Конец СтандартныеПодсистемы.ГрупповоеИзменениеОбъектов #КонецОбласти #КонецОбласти #Область СлужебныйПрограммныйИнтерфейс //////////////////////////////////////////////////////////////////////////////// // Обработчики обновления. // Регистрирует на плане обмена ОбновлениеИнформационнойБазы объекты, // которые необходимо обновить на новую версию. // Процедура ЗарегистрироватьДанныеКОбработкеДляПереходаНаНовуюВерсию(Параметры) Экспорт Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ВопросыШаблонаАнкеты.Ссылка |ИЗ | Справочник.ВопросыШаблонаАнкеты КАК ВопросыШаблонаАнкеты |ГДЕ | ВопросыШаблонаАнкеты.СпособОтображенияПодсказки = &ПустаяСсылка"; Запрос.Параметры.Вставить("ПустаяСсылка", Перечисления.СпособыОтображенияПодсказок.ПустаяСсылка()); Результат = Запрос.Выполнить().Выгрузить(); МассивСсылок = Результат.ВыгрузитьКолонку("Ссылка"); ОбновлениеИнформационнойБазы.ОтметитьКОбработке(Параметры, МассивСсылок); КонецПроцедуры // Заполнить значение нового реквизита СпособОтображенияПодсказки у справочника ВопросыШаблонаАнкеты. // Процедура ОбработатьДанныеДляПереходаНаНовуюВерсию(Параметры) Экспорт Выборка = ОбновлениеИнформационнойБазы.ВыбратьСсылкиДляОбработки(Параметры.Очередь, "Справочник.ВопросыШаблонаАнкеты"); ПроблемныхОбъектов = 0; ОбъектовОбработано = 0; Пока Выборка.Следующий() Цикл Попытка ЗаполнитьРеквизитСпособОтображенияПодсказки(Выборка); ОбъектовОбработано = ОбъектовОбработано + 1; Исключение // Если не удалось обработать объект, повторяем попытку снова. ПроблемныхОбъектов = ПроблемныхОбъектов + 1; ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Не удалось обработать вопрос шаблона анкеты: %1 по причине: |%2'"), Выборка.Ссылка, ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())); ЗаписьЖурналаРегистрации(ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Предупреждение, Метаданные.Справочники.ВопросыШаблонаАнкеты, Выборка.Ссылка, ТекстСообщения); КонецПопытки; КонецЦикла; Параметры.ОбработкаЗавершена = ОбновлениеИнформационнойБазы.ОбработкаДанныхЗавершена(Параметры.Очередь, "Справочник.ВопросыШаблонаАнкеты"); Если ОбъектовОбработано = 0 И ПроблемныхОбъектов <> 0 Тогда ТекстСообщения = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Процедуре ЗаполнитьРеквизитСпособОтображенияПодсказки не удалось обработать некоторые вопросы шаблона анкеты (пропущены): %1'"), ПроблемныхОбъектов); ВызватьИсключение ТекстСообщения; Иначе ЗаписьЖурналаРегистрации(ОбновлениеИнформационнойБазы.СобытиеЖурналаРегистрации(), УровеньЖурналаРегистрации.Информация, Метаданные.Справочники.ВопросыШаблонаАнкеты,, СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Процедура ЗаполнитьРеквизитСпособОтображенияПодсказки обработала очередную порцию вопросов шаблона анкеты: %1'"), ОбъектовОбработано)); КонецЕсли; КонецПроцедуры #КонецОбласти #Область СлужебныеПроцедурыИФункции // Заполняет значение нового реквизита СпособОтображенияПодсказки у переданного объекта. // Процедура ЗаполнитьРеквизитСпособОтображенияПодсказки(Выборка) НачатьТранзакцию(); Попытка // Блокируем объект от изменения другими сеансами. Блокировка = Новый БлокировкаДанных; ЭлементБлокировки = Блокировка.Добавить("Справочник.ВопросыШаблонаАнкеты"); ЭлементБлокировки.УстановитьЗначение("Ссылка", Выборка.Ссылка); Блокировка.Заблокировать(); СправочникОбъект = Выборка.Ссылка.ПолучитьОбъект(); // Если объект ранее был удален или обработан другими сеансами, пропускаем его. Если СправочникОбъект = Неопределено Тогда ОтменитьТранзакцию(); Возврат; КонецЕсли; Если СправочникОбъект.СпособОтображенияПодсказки <> Перечисления.СпособыОтображенияПодсказок.ПустаяСсылка() Тогда ОтменитьТранзакцию(); Возврат; КонецЕсли; // Обработка объекта. СправочникОбъект.СпособОтображенияПодсказки = Перечисления.СпособыОтображенияПодсказок.КонтекстнаяПодсказка; // Запись обработанного объекта. ОбновлениеИнформационнойБазы.ЗаписатьДанные(СправочникОбъект); ЗафиксироватьТранзакцию(); Исключение ОтменитьТранзакцию(); ВызватьИсключение; КонецПопытки; КонецПроцедуры #КонецОбласти #КонецЕсли

Catalogs/ВопросыШаблонаАнкеты/ObjectModule

#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ОбработчикиСобытий Процедура ПередЗаписью(Отказ, РежимЗаписи, РежимПроведения) Если ОбменДанными.Загрузка Тогда Возврат; КонецЕсли; ОбновлениеИнформационнойБазы.ПроверитьОбъектОбработан(ЭтотОбъект); КонецПроцедуры #КонецОбласти #КонецЕсли

Catalogs/ВстречаПрисоединенныеФайлы/ManagerModule

#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ПрограммныйИнтерфейс #Область ДляВызоваИзДругихПодсистем // СтандартныеПодсистемы.ГрупповоеИзменениеОбъектов // Возвращает реквизиты объекта, которые разрешается редактировать // с помощью обработки группового изменения реквизитов. // // Возвращаемое значение: // Массив - список имен реквизитов объекта. Функция РеквизитыРедактируемыеВГрупповойОбработке() Экспорт Возврат РаботаСФайлами.РеквизитыРедактируемыеВГрупповойОбработке(); КонецФункции // Конец СтандартныеПодсистемы.ГрупповоеИзменениеОбъектов // СтандартныеПодсистемы.УправлениеДоступом // См. УправлениеДоступомПереопределяемый.ПриЗаполненииСписковСОграничениемДоступа. Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт Ограничение.Текст = "РазрешитьЧтение |ГДЕ | ЧтениеОбъектаРазрешено(ВладелецФайла) |; |РазрешитьИзменениеЕслиРазрешеноЧтение |ГДЕ | ИзменениеОбъектаРазрешено(ВладелецФайла)"; КонецПроцедуры // Конец СтандартныеПодсистемы.УправлениеДоступом #КонецОбласти #КонецОбласти #КонецЕсли

Catalogs/ВстречаПрисоединенныеФайлы/ObjectModule



Catalogs/ГруппыВнешнихПользователей/Commands/ГруппыВнешнегоПользователя/CommandModule

#Область ОбработчикиСобытий &НаКлиенте Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды) ПараметрыФормы = Новый Структура; ПараметрыФормы.Вставить("Пользователь", ПараметрКоманды); ОткрытьФорму("ОбщаяФорма.ГруппыПользователей", ПараметрыФормы, ПараметрыВыполненияКоманды.Источник, ПараметрыВыполненияКоманды.Уникальность, ПараметрыВыполненияКоманды.Окно); КонецПроцедуры #КонецОбласти

Catalogs/ГруппыВнешнихПользователей/ManagerModule

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

Catalogs/ГруппыВнешнихПользователей/ObjectModule

#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ОписаниеПеременных Перем СтарыйРодитель; // Значение родителя группы до изменения для использования // в обработчике события ПриЗаписи. Перем СтарыйСоставГруппыВнешнихПользователей; // Состав внешних пользователей группы внешних // пользователей до изменения для использования // в обработчике события ПриЗаписи. Перем СтарыйСоставРолейГруппыВнешнихПользователей; // Состав ролей группы внешних пользователей // до изменения для использования в обработчике // события ПриЗаписи. Перем СтароеЗначениеВсеОбъектыАвторизации; // Значение реквизита ВсеОбъектыАвторизации // до изменения для использования в обработчике // события ПриЗаписи. Перем ЭтоНовый; // Показывает, что был записан новый объект. // Используются в обработчике события ПриЗаписи. #КонецОбласти #Область ОбработчикиСобытий Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты) Если ДополнительныеСвойства.Свойство("ПроверенныеРеквизитыОбъекта") Тогда ПроверенныеРеквизитыОбъекта = ДополнительныеСвойства.ПроверенныеРеквизитыОбъекта; Иначе ПроверенныеРеквизитыОбъекта = Новый Массив; КонецЕсли; Ошибки = Неопределено; // Проверка использования родителя. ТекстОшибки = ТекстОшибкиПроверкиРодителя(); Если ЗначениеЗаполнено(ТекстОшибки) Тогда ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(Ошибки, "Объект.Родитель", ТекстОшибки, ""); КонецЕсли; // Проверка незаполненных и повторяющихся внешних пользователей. ПроверенныеРеквизитыОбъекта.Добавить("Состав.ВнешнийПользователь"); // Проверка назначения группы. ТекстОшибки = ТекстОшибкиПроверкиНазначения(); Если ЗначениеЗаполнено(ТекстОшибки) Тогда ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(Ошибки, "Объект.Назначение", ТекстОшибки, ""); КонецЕсли; ПроверенныеРеквизитыОбъекта.Добавить("Назначение"); Для каждого ТекущаяСтрока Из Состав Цикл НомерСтроки = Состав.Индекс(ТекущаяСтрока); // Проверка заполнения значения. Если НЕ ЗначениеЗаполнено(ТекущаяСтрока.ВнешнийПользователь) Тогда ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(Ошибки, "Объект.Состав[%1].ВнешнийПользователь", НСтр("ru = 'Внешний пользователь не выбран.'"), "Объект.Состав", НомерСтроки, НСтр("ru = 'Внешний пользователь в строке %1 не выбран.'")); Продолжить; КонецЕсли; // Проверка наличия повторяющихся значений. НайденныеЗначения = Состав.НайтиСтроки(Новый Структура("ВнешнийПользователь", ТекущаяСтрока.ВнешнийПользователь)); Если НайденныеЗначения.Количество() > 1 Тогда ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(Ошибки, "Объект.Состав[%1].ВнешнийПользователь", НСтр("ru = 'Внешний пользователь повторяется.'"), "Объект.Состав", НомерСтроки, НСтр("ru = 'Внешний пользователь в строке %1 повторяется.'")); КонецЕсли; КонецЦикла; ОбщегоНазначенияКлиентСервер.СообщитьОшибкиПользователю(Ошибки, Отказ); ОбщегоНазначения.УдалитьНепроверяемыеРеквизитыИзМассива(ПроверяемыеРеквизиты, ПроверенныеРеквизитыОбъекта); КонецПроцедуры Процедура ПередЗаписью(Отказ) Если ОбменДанными.Загрузка Тогда Возврат; КонецЕсли; Если НЕ ПользователиСлужебный.ЗапретРедактированияРолей() Тогда РезультатЗапроса = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Ссылка, "Роли"); Если ТипЗнч(РезультатЗапроса) = Тип("РезультатЗапроса") Тогда СтарыйСоставРолейГруппыВнешнихПользователей = РезультатЗапроса.Выгрузить(); Иначе СтарыйСоставРолейГруппыВнешнихПользователей = Роли.Выгрузить(Новый Массив); КонецЕсли; КонецЕсли; ЭтоНовый = ЭтоНовый(); Если Ссылка = Справочники.ГруппыВнешнихПользователей.ВсеВнешниеПользователи Тогда ЗаполнитьНазначениеВсемиТипамиВнешнихПользователей(); ВсеОбъектыАвторизации = Ложь; КонецЕсли; ТекстОшибки = ТекстОшибкиПроверкиРодителя(); Если ЗначениеЗаполнено(ТекстОшибки) Тогда ВызватьИсключение ТекстОшибки; КонецЕсли; Если Ссылка = Справочники.ГруппыВнешнихПользователей.ВсеВнешниеПользователи Тогда Если Состав.Количество() > 0 Тогда ВызватьИсключение НСтр("ru = 'Добавление участников в предопределенную группу ""Все внешние пользователи"" запрещено.'"); КонецЕсли; Иначе ТекстОшибки = ТекстОшибкиПроверкиНазначения(); Если ЗначениеЗаполнено(ТекстОшибки) Тогда ВызватьИсключение ТекстОшибки; КонецЕсли; СтарыеЗначения = ОбщегоНазначения.ЗначенияРеквизитовОбъекта( Ссылка, "ВсеОбъектыАвторизации, Родитель"); СтарыйРодитель = СтарыеЗначения.Родитель; СтароеЗначениеВсеОбъектыАвторизации = СтарыеЗначения.ВсеОбъектыАвторизации; Если ЗначениеЗаполнено(Ссылка) И Ссылка <> Справочники.ГруппыВнешнихПользователей.ВсеВнешниеПользователи Тогда РезультатЗапроса = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Ссылка, "Состав"); Если ТипЗнч(РезультатЗапроса) = Тип("РезультатЗапроса") Тогда СтарыйСоставГруппыВнешнихПользователей = РезультатЗапроса.Выгрузить(); Иначе СтарыйСоставГруппыВнешнихПользователей = Состав.Выгрузить(Новый Массив); КонецЕсли; КонецЕсли; КонецЕсли; КонецПроцедуры Процедура ПриЗаписи(Отказ) Если ОбменДанными.Загрузка Тогда Возврат; КонецЕсли; Если ПользователиСлужебный.ЗапретРедактированияРолей() Тогда ИзменилсяСоставРолейГруппыВнешнихПользователей = Ложь; Иначе ИзменилсяСоставРолейГруппыВнешнихПользователей = ПользователиСлужебный.РазличияЗначенийКолонки( "Роль", Роли.Выгрузить(), СтарыйСоставРолейГруппыВнешнихПользователей).Количество() <> 0; КонецЕсли; УчастникиИзменений = Новый Соответствие; ИзмененныеГруппы = Новый Соответствие; Если Ссылка <> Справочники.ГруппыВнешнихПользователей.ВсеВнешниеПользователи Тогда Если ВсеОбъектыАвторизации ИЛИ СтароеЗначениеВсеОбъектыАвторизации = Истина Тогда ПользователиСлужебный.ОбновитьСоставыГруппВнешнихПользователей( Ссылка, , УчастникиИзменений, ИзмененныеГруппы); Иначе ИзмененияСостава = ПользователиСлужебный.РазличияЗначенийКолонки( "ВнешнийПользователь", Состав.Выгрузить(), СтарыйСоставГруппыВнешнихПользователей); ПользователиСлужебный.ОбновитьСоставыГруппВнешнихПользователей( Ссылка, ИзмененияСостава, УчастникиИзменений, ИзмененныеГруппы); Если СтарыйРодитель <> Родитель Тогда Если ЗначениеЗаполнено(Родитель) Тогда ПользователиСлужебный.ОбновитьСоставыГруппВнешнихПользователей( Родитель, , УчастникиИзменений, ИзмененныеГруппы); КонецЕсли; Если ЗначениеЗаполнено(СтарыйРодитель) Тогда ПользователиСлужебный.ОбновитьСоставыГруппВнешнихПользователей( СтарыйРодитель, , УчастникиИзменений, ИзмененныеГруппы); КонецЕсли; КонецЕсли; КонецЕсли; ПользователиСлужебный.ОбновитьИспользуемостьСоставовГруппПользователей( Ссылка, УчастникиИзменений, ИзмененныеГруппы); КонецЕсли; Если ИзменилсяСоставРолейГруппыВнешнихПользователей Тогда ПользователиСлужебный.ОбновитьРолиВнешнихПользователей(Ссылка); КонецЕсли; ПользователиСлужебный.ПослеОбновленияСоставовГруппВнешнихПользователей( УчастникиИзменений, ИзмененныеГруппы); ИнтеграцияПодсистемБСП.ПослеДобавленияИзмененияПользователяИлиГруппы(Ссылка, ЭтоНовый); КонецПроцедуры #КонецОбласти #Область СлужебныеПроцедурыИФункции Процедура ЗаполнитьНазначениеВсемиТипамиВнешнихПользователей() Назначение.Очистить(); ПустыеСсылки = ПользователиСлужебныйПовтИсп.ПустыеСсылкиТиповОбъектовАвторизации(); Для Каждого ПустаяСсылка Из ПустыеСсылки Цикл НоваяСтрока = Назначение.Добавить(); НоваяСтрока.ТипПользователей = ПустаяСсылка; КонецЦикла; КонецПроцедуры Функция ТекстОшибкиПроверкиРодителя() Если Родитель = Справочники.ГруппыВнешнихПользователей.ВсеВнешниеПользователи Тогда Возврат НСтр("ru = 'Предопределенная группа ""Все внешние пользователи"" не может быть родителем.'"); КонецЕсли; Если Ссылка = Справочники.ГруппыВнешнихПользователей.ВсеВнешниеПользователи Тогда Если Не Родитель.Пустая() Тогда Возврат НСтр("ru = 'Предопределенная группа ""Все внешние пользователи"" не может быть перемещена.'"); КонецЕсли; Иначе Если Родитель = Справочники.ГруппыВнешнихПользователей.ВсеВнешниеПользователи Тогда Возврат НСтр("ru = 'Невозможно добавить подгруппу к предопределенной группе ""Все внешние пользователи"".'"); ИначеЕсли Родитель.ВсеОбъектыАвторизации Тогда Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Невозможно добавить подгруппу к группе ""%1"", |так как в число ее участников входят все пользователи.'"), Родитель); КонецЕсли; Если ВсеОбъектыАвторизации И ЗначениеЗаполнено(Родитель) Тогда Возврат НСтр("ru = 'Невозможно переместить группу, в число участников которой входят все пользователи.'"); КонецЕсли; КонецЕсли; Возврат ""; КонецФункции Функция ТекстОшибкиПроверкиНазначения() // Проверка заполнения назначения группы. Если Назначение.Количество() = 0 Тогда Возврат НСтр("ru = 'Не указан вид участников группы.'"); КонецЕсли; // Проверка уникальности группы всех объектов авторизации заданного типа. Если ВсеОбъектыАвторизации Тогда // Проверка что назначение не совпадает с группой все внешние пользователи. ГруппаВсеВнешниеПользователи = Справочники.ГруппыВнешнихПользователей.ВсеВнешниеПользователи; НазначениеВсеВнешниеПользователи = ОбщегоНазначения.ЗначениеРеквизитаОбъекта( ГруппаВсеВнешниеПользователи, "Назначение").Выгрузить().ВыгрузитьКолонку("ТипПользователей"); МассивНазначения = Назначение.ВыгрузитьКолонку("ТипПользователей"); Если ОбщегоНазначенияКлиентСервер.СпискиЗначенийИдентичны(НазначениеВсеВнешниеПользователи, МассивНазначения) Тогда Возврат НСтр("ru = 'Невозможно создать группу, совпадающую по назначению |с предопределенной группой ""Все внешние пользователи"".'"); КонецЕсли; Запрос = Новый Запрос; Запрос.УстановитьПараметр("Ссылка", Ссылка); Запрос.УстановитьПараметр("ТипыПользователей", Назначение.Выгрузить()); Запрос.Текст = "ВЫБРАТЬ | ТипыПользователей.ТипПользователей |ПОМЕСТИТЬ ТипыПользователей |ИЗ | &ТипыПользователей КАК ТипыПользователей |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ПРЕДСТАВЛЕНИЕ(ГруппыВнешнихПользователей.Ссылка) КАК СсылкаПредставление |ИЗ | Справочник.ГруппыВнешнихПользователей.Назначение КАК ГруппыВнешнихПользователей |ГДЕ | ИСТИНА В | (ВЫБРАТЬ ПЕРВЫЕ 1 | ИСТИНА | ИЗ | ТипыПользователей КАК ТипыПользователей | ГДЕ | ГруппыВнешнихПользователей.Ссылка <> &Ссылка | И ГруппыВнешнихПользователей.Ссылка.ВсеОбъектыАвторизации | И ТИПЗНАЧЕНИЯ(ТипыПользователей.ТипПользователей) = ТИПЗНАЧЕНИЯ(ГруппыВнешнихПользователей.ТипПользователей))"; РезультатЗапроса = Запрос.Выполнить(); Если НЕ РезультатЗапроса.Пустой() Тогда Выборка = РезультатЗапроса.Выбрать(); Выборка.Следующий(); Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Уже существует группа ""%1"", |в число участников которой входят все пользователи указанных видов.'"), Выборка.СсылкаПредставление); КонецЕсли; КонецЕсли; // Проверка совпадения типа объектов авторизации с родителем // (допустимо, если тип у родителя не задан). Если ЗначениеЗаполнено(Родитель) Тогда ТипПользователейРодителя = ОбщегоНазначения.ЗначениеРеквизитаОбъекта( Родитель, "Назначение").Выгрузить().ВыгрузитьКолонку("ТипПользователей"); ТипПользователей = Назначение.ВыгрузитьКолонку("ТипПользователей"); Для Каждого ТипПользователя Из ТипПользователей Цикл Если ТипПользователейРодителя.Найти(ТипПользователя) = Неопределено Тогда Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Вид участников группы должен быть как у вышестоящей |группы внешних пользователей ""%1"".'"), Родитель); КонецЕсли; КонецЦикла; КонецЕсли; // Если группе внешних пользователей устанавливается тип участников "Все пользователи заданного типа", // проверяем наличие подчиненных групп. Если ВсеОбъектыАвторизации И ЗначениеЗаполнено(Ссылка) Тогда Запрос = Новый Запрос; Запрос.УстановитьПараметр("Ссылка", Ссылка); Запрос.Текст = "ВЫБРАТЬ | ПРЕДСТАВЛЕНИЕ(ГруппыВнешнихПользователей.Ссылка) КАК СсылкаПредставление |ИЗ | Справочник.ГруппыВнешнихПользователей КАК ГруппыВнешнихПользователей |ГДЕ | ГруппыВнешнихПользователей.Родитель = &Ссылка"; РезультатЗапроса = Запрос.Выполнить(); Если НЕ РезультатЗапроса.Пустой() Тогда Возврат НСтр("ru = 'Невозможно изменить вид участников группы, |так как у нее имеются подгруппы.'"); КонецЕсли; КонецЕсли; // Проверка, что при изменении типа объектов авторизации // нет подчиненных элементов другого типа (очистка типа допустима). Если ЗначениеЗаполнено(Ссылка) Тогда Запрос = Новый Запрос; Запрос.УстановитьПараметр("Ссылка", Ссылка); Запрос.УстановитьПараметр("ТипыПользователей", Назначение); Запрос.Текст = "ВЫБРАТЬ | ТипыПользователей.ТипПользователей |ПОМЕСТИТЬ ТипыПользователей |ИЗ | &ТипыПользователей КАК ТипыПользователей |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ПРЕДСТАВЛЕНИЕ(ГруппыВнешнихПользователейНазначение.Ссылка) КАК СсылкаПредставление |ИЗ | Справочник.ГруппыВнешнихПользователей.Назначение КАК ГруппыВнешнихПользователейНазначение |ГДЕ | ИСТИНА В | (ВЫБРАТЬ ПЕРВЫЕ 1 | ИСТИНА | ИЗ | ТипыПользователей КАК ТипыПользователей | ГДЕ | ГруппыВнешнихПользователейНазначение.Ссылка.Родитель = &Ссылка | И ТИПЗНАЧЕНИЯ(ГруппыВнешнихПользователейНазначение.ТипПользователей) <> ТИПЗНАЧЕНИЯ(ТипыПользователей.ТипПользователей))"; РезультатЗапроса = Запрос.Выполнить(); Если НЕ РезультатЗапроса.Пустой() Тогда Выборка = РезультатЗапроса.Выбрать(); Выборка.Следующий(); Возврат СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'Невозможно изменить вид участников группы, |так как у нее имеется подгруппа ""%1"" с другим назначением участников.'"), Выборка.СсылкаПредставление); КонецЕсли; КонецЕсли; Возврат ""; КонецФункции #КонецОбласти #КонецЕсли

Catalogs/ГруппыВнешнихПользователей/Forms/ФормаСписка/Form/Module

 #Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. Возврат; КонецЕсли; НастроитьПорядокГруппыВсеВнешниеПользователи(Список); Если Параметры.РежимВыбора Тогда СтандартныеПодсистемыСервер.УстановитьКлючНазначенияФормы(ЭтотОбъект, "ВыборПодбор"); РежимОткрытияОкна = РежимОткрытияОкнаФормы.БлокироватьОкноВладельца; // Исключение выбора группы Все внешние пользователи в качестве родителя. ОбщегоНазначенияКлиентСервер.УстановитьЭлементОтбораДинамическогоСписка( Список, "Ссылка", Справочники.ГруппыВнешнихПользователей.ВсеВнешниеПользователи, ВидСравненияКомпоновкиДанных.НеРавно, , Параметры.Свойство("ВыборРодителя")); Если Параметры.ЗакрыватьПриВыборе = Ложь Тогда // Режим подбора. Заголовок = НСтр("ru = 'Подбор групп внешних пользователей'"); Элементы.Список.МножественныйВыбор = Истина; Элементы.Список.РежимВыделения = РежимВыделенияТаблицы.Множественный; Иначе Заголовок = НСтр("ru = 'Выбор группы внешних пользователей'"); КонецЕсли; Иначе Элементы.Список.РежимВыбора = Ложь; КонецЕсли; Если ОбщегоНазначения.ЭтоАвтономноеРабочееМесто() Тогда ТолькоПросмотр = Истина; КонецЕсли; КонецПроцедуры #КонецОбласти #Область СлужебныеПроцедурыИФункции &НаСервере Процедура НастроитьПорядокГруппыВсеВнешниеПользователи(Список) Перем Порядок; // Порядок. Порядок = Список.КомпоновщикНастроек.Настройки.Порядок; Порядок.ИдентификаторПользовательскойНастройки = "ОсновнойПорядок"; Порядок.Элементы.Очистить(); ЭлементПорядка = Порядок.Элементы.Добавить(Тип("ЭлементПорядкаКомпоновкиДанных")); ЭлементПорядка.Поле = Новый ПолеКомпоновкиДанных("Предопределенный"); ЭлементПорядка.ТипУпорядочивания = НаправлениеСортировкиКомпоновкиДанных.Убыв; ЭлементПорядка.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный; ЭлементПорядка.Использование = Истина; ЭлементПорядка = Порядок.Элементы.Добавить(Тип("ЭлементПорядкаКомпоновкиДанных")); ЭлементПорядка.Поле = Новый ПолеКомпоновкиДанных("Наименование"); ЭлементПорядка.ТипУпорядочивания = НаправлениеСортировкиКомпоновкиДанных.Возр; ЭлементПорядка.РежимОтображения = РежимОтображенияЭлементаНастройкиКомпоновкиДанных.Недоступный; ЭлементПорядка.Использование = Истина; КонецПроцедуры #КонецОбласти

Catalogs/ГруппыВнешнихПользователей/Forms/ФормаЭлемента/Form/Module

 #Область ОбработчикиСобытийФормы &НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) УстановитьУсловноеОформление(); Если Параметры.Свойство("АвтоТест") Тогда // Возврат при получении формы для анализа. Возврат; КонецЕсли; Если НЕ ЗначениеЗаполнено(Объект.Ссылка) Тогда ОбработатьИнтерфейсРолей("ЗаполнитьРоли", Объект.Роли); ОбработатьИнтерфейсРолей("НастроитьИнтерфейсРолейПриСозданииФормы", Ложь); КонецЕсли; // Подготовка вспомогательных данных. Если Не ЗначениеЗаполнено(Объект.Ссылка) Тогда ВсеОбъектыАвторизации = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Объект.Родитель, "ВсеОбъектыАвторизации"); ВсеОбъектыАвторизации = ?(ВсеОбъектыАвторизации = Неопределено, Ложь, ВсеОбъектыАвторизации); Если ВсеОбъектыАвторизации Или Объект.Родитель = Справочники.ГруппыВнешнихПользователей.ВсеВнешниеПользователи Тогда Объект.Родитель = Справочники.ГруппыВнешнихПользователей.ПустаяСсылка(); КонецЕсли; КонецЕсли; ОтобратьДоступныеДляВыбораТипыУчастниковГруппы(); ОпределитьДействияВФорме(); // Установка постоянной доступности свойств. Элементы.Наименование.Видимость = ЗначениеЗаполнено(ДействияВФорме.СвойстваЭлемента); Элементы.Родитель.Видимость = ЗначениеЗаполнено(ДействияВФорме.СвойстваЭлемента); Элементы.Комментарий.Видимость = ЗначениеЗаполнено(ДействияВФорме.СвойстваЭлемента); Элементы.Состав.Видимость = ЗначениеЗаполнено(ДействияВФорме.СоставГруппы); Элементы.ОтображениеРолей.Видимость = ЗначениеЗаполнено(ДействияВФорме.Роли); УчастникиГруппы = ?(Объект.ВсеОбъектыАвторизации, "ВсеПользователиВидов", "ВыбранныеПользователиВидов"); ЭтоГруппаВсеВнешниеПользователи = Объект.Ссылка = Справочники.ГруппыВнешнихПользователей.ВсеВнешниеПользователи; Если ЭтоГруппаВсеВнешниеПользователи Тогда Элементы.Наименование.ТолькоПросмотр = Истина; Элементы.Родитель.ТолькоПросмотр = Истина; Элементы.Комментарий.ТолькоПросмотр = Истина; Элементы.ВнешниеПользователиГруппы.ТолькоПросмотр = Истина; КонецЕсли; Если ТолькоПросмотр ИЛИ НЕ ЭтоГруппаВсеВнешниеПользователи И ДействияВФорме.Роли <> "Редактирование" И ДействияВФорме.СоставГруппы <> "Редактирование" И ДействияВФорме.СвойстваЭлемента <> "Редактирование" ИЛИ ЭтоГруппаВсеВнешниеПользователи И ПользователиСлужебный.ЗапретРедактированияРолей() Тогда ТолькоПросмотр = Истина; КонецЕсли; Если ДействияВФорме.СвойстваЭлемента <> "Редактирование" Тогда Элементы.Наименование.ТолькоПросмотр = Истина; Элементы.Родитель.ТолькоПросмотр = Истина; Элементы.Комментарий.ТолькоПросмотр = Истина; КонецЕсли; Если ДействияВФорме.СоставГруппы <> "Редактирование" Тогда Элементы.ВнешниеПользователиГруппы.ТолькоПросмотр = Истина; КонецЕсли; ОбработатьИнтерфейсРолей( "УстановитьТолькоПросмотрРолей", ПользователиСлужебный.ЗапретРедактированияРолей() ИЛИ ДействияВФорме.Роли <> "Редактирование"); ОбновитьСписокНедействительныхПользователей(Истина); ЗаполнитьСтатусПользователей(); Если ЗначениеЗаполнено(Объект.Родитель) И РеквизитФормыВЗначение("Объект").ЭтоНовый() Тогда Объект.Назначение.Загрузить(Объект.Родитель.Назначение.Выгрузить()); КонецЕсли; ПользователиСлужебный.ОбновитьНазначениеПриСозданииНаСервере(ЭтотОбъект, Ложь); УстановитьДоступностьСвойств(ЭтотОбъект); Если ОбщегоНазначения.ЭтоАвтономноеРабочееМесто() Тогда ТолькоПросмотр = Истина; КонецЕсли; КонецПроцедуры &НаСервере Процедура ПриЧтенииНаСервере(ТекущийОбъект) ОбработатьИнтерфейсРолей("ЗаполнитьРоли", Объект.Роли); ОбработатьИнтерфейсРолей("НастроитьИнтерфейсРолейПриЧтенииНаСервере", Истина); // СтандартныеПодсистемы.УправлениеДоступом Если ОбщегоНазначения.ПодсистемаСуществует("СтандартныеПодсистемы.УправлениеДоступом") Тогда МодульУправлениеДоступом = ОбщегоНазначения.ОбщийМодуль("УправлениеДоступом"); МодульУправлениеДоступом.ПриЧтенииНаСервере(ЭтотОбъект, ТекущийОбъект); КонецЕсли; // Конец СтандартныеПодсистемы.УправлениеДоступом КонецПроцедуры &НаСервере Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи) // Заполнение ролей объекта из коллекции. ТекущийОбъект.Роли.Очистить(); Для каждого Строка Из КоллекцияРолей Цикл ТекущийОбъект.Роли.Добавить().Роль = ОбщегоНазначения.ИдентификаторОбъектаМетаданных( "Роль." + Строка.Роль); КонецЦикла; КонецПроцедуры &НаСервере Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи) ЗаполнитьСтатусПользователей(); КонецПроцедуры &НаКлиенте Процедура ПослеЗаписи(ПараметрыЗаписи) Оповестить("Запись_ГруппыВнешнихПользователей", Новый Структура, Объект.Ссылка); КонецПроцедуры &НаСервере Процедура ОбработкаПроверкиЗаполненияНаСервере(Отказ, ПроверяемыеРеквизиты) НепроверяемыеРеквизиты = Новый Массив; ПроверенныеРеквизитыОбъекта = Новый Массив; Ошибки = Неопределено; // Проверка наличия ролей в метаданных. ПроверенныеРеквизитыОбъекта.Добавить("Роли.Роль"); Если Не Элементы.Роли.ТолькоПросмотр Тогда ЭлементыДерева = Роли.ПолучитьЭлементы(); Для Каждого Строка Из ЭлементыДерева Цикл Если Не Строка.Пометка Тогда Продолжить; КонецЕсли; Если Строка.ЭтоНесуществующаяРоль Тогда ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(Ошибки, "Роли[%1].РолиСиноним", СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Роль ""%1"" не найдена в метаданных.'"), Строка.Синоним), "Роли", ЭлементыДерева.Индекс(Строка), СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Роль ""%1"" в строке %%1 не найдена в метаданных.'"), Строка.Синоним)); КонецЕсли; Если Строка.ЭтоНедоступнаяРоль Тогда ОбщегоНазначенияКлиентСервер.ДобавитьОшибкуПользователю(Ошибки, "Роли[%1].РолиСиноним", СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Роль ""%1"" недоступна для внешних пользователей.'"), Строка.Синоним), "Роли", ЭлементыДерева.Индекс(Строка), СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(НСтр("ru = 'Роль ""%1"" в строке %%1 недоступна для внешних пользователей.'"), Строка.Синоним)); КонецЕсли; КонецЦикла; КонецЕсли; ОбщегоНазначенияКлиентСервер.СообщитьОшибкиПользователю(Ошибки, Отказ); НепроверяемыеРеквизиты.Добавить("Объект"); ОбщегоНазначения.УдалитьНепроверяемыеРеквизитыИзМассива(ПроверяемыеРеквизиты, НепроверяемыеРеквизиты); ТекущийОбъект = РеквизитФормыВЗначение("Объект"); ТекущийОбъект.ДополнительныеСвойства.Вставить( "ПроверенныеРеквизитыОбъекта", ПроверенныеРеквизитыОбъекта); Если НЕ ТекущийОбъект.ПроверитьЗаполнение() Тогда Отказ = Истина; КонецЕсли; КонецПроцедуры &НаСервере Процедура ПриЗагрузкеДанныхИзНастроекНаСервере(Настройки) ОбработатьИнтерфейсРолей("НастроитьИнтерфейсРолейПриЗагрузкеНастроек", Настройки); КонецПроцедуры #КонецОбласти #Область ОбработчикиСобытийЭлементовШапкиФормы &НаКлиенте Процедура СоставУчастниковПриИзменении(Элемент) Объект.ВсеОбъектыАвторизации = (УчастникиГруппы = "ВсеПользователиВидов"); Если Объект.ВсеОбъектыАвторизации Тогда Объект.Состав.Очистить(); КонецЕсли; УстановитьДоступностьСвойств(ЭтотОбъект); КонецПроцедуры &НаКлиенте Процедура РодительПриИзменении(Элемент) Объект.ВсеОбъектыАвторизации = Ложь; ОтобратьДоступныеДляВыбораТипыУчастниковГруппы(); УстановитьДоступностьСвойств(ЭтотОбъект); КонецПроцедуры &НаКлиенте Процедура РодительНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; ПараметрыФормы = Новый Структура; ПараметрыФормы.Вставить("РежимВыбора", Истина); ПараметрыФормы.Вставить("ВыборРодителя"); ОткрытьФорму("Справочник.ГруппыВнешнихПользователей.ФормаВыбора", ПараметрыФормы, Элементы.Родитель); КонецПроцедуры #КонецОбласти #Область ОбработчикиСобытийЭлементовТаблицыФормыРоли //////////////////////////////////////////////////////////////////////////////// // Для работы интерфейса ролей. &НаКлиенте Процедура РолиПометкаПриИзменении(Элемент) Если Элементы.Роли.ТекущиеДанные <> Неопределено Тогда ОбработатьИнтерфейсРолей("ОбновитьСоставРолей"); КонецЕсли; КонецПроцедуры #КонецОбласти #Область ОбработчикиСобытийЭлементовТаблицыФормыСостав &НаКлиенте Процедура СоставОбработкаВыбора(Элемент, ВыбранноеЗначение, СтандартнаяОбработка) Объект.Состав.Очистить(); Если ТипЗнч(ВыбранноеЗначение) = Тип("Массив") Тогда Для каждого Значение Из ВыбранноеЗначение Цикл ОбработкаВыбораВнешнегоПользователя(Значение); КонецЦикла; Иначе ОбработкаВыбораВнешнегоПользователя(ВыбранноеЗначение); КонецЕсли; ЗаполнитьСтатусПользователей(); Элементы.Состав.Обновить(); УстановитьДоступностьСвойств(ЭтотОбъект); КонецПроцедуры &НаКлиенте Процедура СоставПриИзменении(Элемент) УстановитьДоступностьСвойств(ЭтотОбъект); КонецПроцедуры &НаКлиенте Процедура СоставВнешнийПользовательНачалоВыбора(Элемент, ДанныеВыбора, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; ВыбратьПодобратьПользователей(Ложь); КонецПроцедуры &НаКлиенте Процедура СоставПеретаскивание(Элемент, ПараметрыПеретаскивания, СтандартнаяОбработка, Строка, Поле) СтандартнаяОбработка = Ложь; СообщениеПользователю = ПеремещениеПользователяВГруппу(ПараметрыПеретаскивания.Значение, Объект.Ссылка); Если СообщениеПользователю <> Неопределено Тогда ПоказатьОповещениеПользователя( НСтр("ru = 'Перемещение пользователей'"), , СообщениеПользователю, БиблиотекаКартинок.Информация32); КонецЕсли; КонецПроцедуры #КонецОбласти #Область ОбработчикиКомандФормы &НаКлиенте Процедура ПодобратьВнешнихПользователей(Команда) ВыбратьПодобратьПользователей(Истина); КонецПроцедуры &НаКлиенте Процедура ПоказыватьНедействительныхПользователей(Команда) ОбновитьСписокНедействительныхПользователей(Ложь); УстановитьДоступностьСвойств(ЭтотОбъект); КонецПроцедуры &НаКлиенте Процедура СортироватьПоВозрастанию(Команда) СоставСортироватьСтроки("ПоВозрастанию"); КонецПроцедуры &НаКлиенте Процедура СортироватьПоУбыванию(Команда) СоставСортироватьСтроки("ПоУбыванию"); КонецПроцедуры &НаКлиенте Процедура ПереместитьВверх(Команда) СоставПереместитьСтроку("Вверх"); КонецПроцедуры &НаКлиенте Процедура ПереместитьВниз(Команда) СоставПереместитьСтроку("Вниз"); КонецПроцедуры &НаКлиенте Процедура ВыбратьНазначение(Команда) ОписаниеОповещения = Новый ОписаниеОповещения("ПослеВыбораНазначения", ЭтотОбъект); ПользователиСлужебныйКлиент.ВыбратьНазначение(ЭтотОбъект, НСтр("ru = 'Выбор вида пользователей'"), Ложь, Ложь, ОписаниеОповещения); КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// // Для работы интерфейса ролей. &НаКлиенте Процедура ПоказатьТолькоВыбранныеРоли(Команда) ОбработатьИнтерфейсРолей("ТолькоВыбранныеРоли"); ПользователиСлужебныйКлиент.РазвернутьПодсистемыРолей(ЭтотОбъект); КонецПроцедуры &НаКлиенте Процедура ГруппировкаРолейПоПодсистемам(Команда) ОбработатьИнтерфейсРолей("ГруппировкаПоПодсистемам"); ПользователиСлужебныйКлиент.РазвернутьПодсистемыРолей(ЭтотОбъект); КонецПроцедуры &НаКлиенте Процедура ВключитьРоли(Команда) ОбработатьИнтерфейсРолей("ОбновитьСоставРолей", "ВключитьВсе"); ПользователиСлужебныйКлиент.РазвернутьПодсистемыРолей(ЭтотОбъект, Ложь); КонецПроцедуры &НаКлиенте Процедура ИсключитьРоли(Команда) ОбработатьИнтерфейсРолей("ОбновитьСоставРолей", "ИсключитьВсе"); КонецПроцедуры #КонецОбласти #Область СлужебныеПроцедурыИФункции &НаСервере Процедура УстановитьУсловноеОформление() УсловноеОформление.Элементы.Очистить(); // Элемент = УсловноеОформление.Элементы.Добавить(); ПолеЭлемента = Элемент.Поля.Элементы.Добавить(); ПолеЭлемента.Поле = Новый ПолеКомпоновкиДанных(Элементы.СоставВнешнийПользователь.Имя); ОтборЭлемента = Элемент.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); ОтборЭлемента.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("Объект.Состав.Недействителен"); ОтборЭлемента.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; ОтборЭлемента.ПравоеЗначение = Истина; Элемент.Оформление.УстановитьЗначениеПараметра("ЦветТекста", WebЦвета.Серый); КонецПроцедуры &НаСервере Функция ПеремещениеПользователяВГруппу(МассивПользователей, НоваяГруппаВладелец) МассивПеремещенныхПользователей = Новый Массив; МассивНеПеремещенныхПользователей = Новый Массив; Для Каждого ПользовательСсылка Из МассивПользователей Цикл ПараметрыОтбора = Новый Структура("ВнешнийПользователь", ПользовательСсылка); Если ТипЗнч(ПользовательСсылка) = Тип("СправочникСсылка.ВнешниеПользователи") И Объект.Состав.НайтиСтроки(ПараметрыОтбора).Количество() = 0 Тогда Объект.Состав.Добавить().ВнешнийПользователь = ПользовательСсылка; МассивПеремещенныхПользователей.Добавить(ПользовательСсылка); КонецЕсли; КонецЦикла; Возврат ПользователиСлужебный.ФормированиеСообщенияПользователю( МассивПеремещенныхПользователей, НоваяГруппаВладелец, Ложь, МассивНеПеремещенныхПользователей); КонецФункции &НаСервере Процедура ОтобратьДоступныеДляВыбораТипыУчастниковГруппы() Если ЗначениеЗаполнено(Объект.Родитель) И Объект.Родитель <> Справочники.ГруппыВнешнихПользователей.ВсеВнешниеПользователи Тогда Элементы.ТипПользователей.Доступность = Ложь; УчастникиГруппы = Элементы.УчастникиГруппы.СписокВыбора.НайтиПоЗначению("ВыбранныеПользователиВидов").Значение; Иначе Элементы.ТипПользователей.Доступность = Истина; КонецЕсли; КонецПроцедуры &НаСервере Процедура ОпределитьДействияВФорме() ДействияВФорме = Новый Структура; // "", "Просмотр", "Редактирование". ДействияВФорме.Вставить("Роли", ""); // "", "Просмотр", "Редактирование". ДействияВФорме.Вставить("СоставГруппы", ""); // "", "Просмотр", "Редактирование". ДействияВФорме.Вставить("СвойстваЭлемента", ""); Если Пользователи.ЭтоПолноправныйПользователь() ИЛИ ПравоДоступа("Добавление", Метаданные.Справочники.Пользователи) Тогда // Администратор. ДействияВФорме.Роли = "Редактирование"; ДействияВФорме.СоставГруппы = "Редактирование"; ДействияВФорме.СвойстваЭлемента = "Редактирование"; ИначеЕсли ПравоДоступа("Редактирование", Метаданные.Справочники.ГруппыВнешнихПользователей) Тогда // Менеджер внешних пользователей. ДействияВФорме.Роли = ""; ДействияВФорме.СоставГруппы = "Редактирование"; ДействияВФорме.СвойстваЭлемента = "Редактирование"; Иначе // Читатель внешних пользователей. ДействияВФорме.Роли = ""; ДействияВФорме.СоставГруппы = "Просмотр"; ДействияВФорме.СвойстваЭлемента = "Просмотр"; КонецЕсли; ПользователиСлужебный.ПриОпределенииДействийВФорме(Объект.Ссылка, ДействияВФорме); // Проверка имен действий в форме. Если СтрНайти(", Просмотр, Редактирование,", ", " + ДействияВФорме.Роли + ",") = 0 Тогда ДействияВФорме.Роли = ""; ИначеЕсли ПользователиСлужебный.ЗапретРедактированияРолей() Тогда ДействияВФорме.Роли = ""; КонецЕсли; Если СтрНайти(", Просмотр, Редактирование,", ", " + ДействияВФорме.СоставГруппы + ",") = 0 Тогда ДействияВФорме.СвойстваПользователяИБ = ""; КонецЕсли; Если СтрНайти(", Просмотр, Редактирование,", ", " + ДействияВФорме.СвойстваЭлемента + ",") = 0 Тогда ДействияВФорме.СвойстваЭлемента = ""; КонецЕсли; КонецПроцедуры &НаКлиентеНаСервереБезКонтекста Процедура УстановитьДоступностьСвойств(Форма) Элементы = Форма.Элементы; Элементы.Состав.ТолькоПросмотр = Форма.Объект.ВсеОбъектыАвторизации; ДоступностьКоманд = НЕ Форма.ТолькоПросмотр И НЕ Элементы.ВнешниеПользователиГруппы.ТолькоПросмотр И НЕ Элементы.Состав.ТолькоПросмотр И Элементы.Состав.Доступность И Форма.Объект.Назначение.Количество() <> 0; СоставГруппы = Форма.Объект.Состав; ПараметрыОтбора = Новый Структура; ПараметрыОтбора.Вставить("Недействителен", Ложь); ЕстьДействительныеПользователи = СоставГруппы.НайтиСтроки(ПараметрыОтбора).Количество() > 0; ПараметрыОтбора.Вставить("Недействителен", Истина); ЕстьНедействительныеПользователи = СоставГруппы.НайтиСтроки(ПараметрыОтбора).Количество() > 0; ДоступностьКомандПеремещения = ЕстьДействительныеПользователи Или (ЕстьНедействительныеПользователи И Элементы.ПоказыватьНедействительныхПользователей.Пометка); Элементы.Состав.ТолькоПросмотр = Не ДоступностьКоманд; Элементы.СоставПодобрать.Доступность = ДоступностьКоманд; Элементы.СоставКонтекстноеМенюПодобрать.Доступность = ДоступностьКоманд; Элементы.СоставСортироватьПоВозрастанию.Доступность = ДоступностьКоманд; Элементы.СоставСортироватьПоУбыванию.Доступность = ДоступностьКоманд; Элементы.СоставПереместитьВверх.Доступность = ДоступностьКоманд И ДоступностьКомандПеремещения; Элементы.СоставПереместитьВниз.Доступность = ДоступностьКоманд И ДоступностьКомандПеремещения; Элементы.СоставКонтекстноеМенюПереместитьВверх.Доступность = ДоступностьКоманд И ДоступностьКомандПеремещения; Элементы.СоставКонтекстноеМенюПереместитьВниз.Доступность = ДоступностьКоманд И ДоступностьКомандПеремещения; КонецПроцедуры &НаСервере Процедура УдалитьНеТипичныеВнешниеПользователи() Запрос = Новый Запрос; Запрос.УстановитьПараметр("ВыбранныеВнешниеПользователи", Объект.Состав.Выгрузить().ВыгрузитьКолонку("ВнешнийПользователь")); Запрос.УстановитьПараметр("ТипыПользователей", Объект.Назначение.Выгрузить()); Запрос.Текст = "ВЫБРАТЬ | ТипыПользователей.ТипПользователей |ПОМЕСТИТЬ ТипыПользователей |ИЗ | &ТипыПользователей КАК ТипыПользователей |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ВнешниеПользователи.Ссылка |ИЗ | Справочник.ВнешниеПользователи КАК ВнешниеПользователи |ГДЕ | НЕ ЛОЖЬ В | (ВЫБРАТЬ ПЕРВЫЕ 1 | ЛОЖЬ | ИЗ | ТипыПользователей КАК ТипыПользователей | ГДЕ | ТИПЗНАЧЕНИЯ(ТипыПользователей.ТипПользователей) = ТИПЗНАЧЕНИЯ(ВнешниеПользователи.ОбъектАвторизации)) | И ВнешниеПользователи.Ссылка В(&ВыбранныеВнешниеПользователи)"; НачатьТранзакцию(); Попытка Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл НайденныеСтроки = Объект.Состав.НайтиСтроки( Новый Структура("ВнешнийПользователь", Выборка.Ссылка)); Для каждого НайденнаяСтрока Из НайденныеСтроки Цикл Объект.Состав.Удалить(Объект.Состав.Индекс(НайденнаяСтрока)); КонецЦикла; КонецЦикла; ЗафиксироватьТранзакцию(); Исключение ОтменитьТранзакцию(); ВызватьИсключение; КонецПопытки; КонецПроцедуры &НаКлиенте Процедура ВыбратьПодобратьПользователей(Подобрать) ПараметрыФормы = Новый Структура; ПараметрыФормы.Вставить("РежимВыбора", Истина); ПараметрыФормы.Вставить("ТекущаяСтрока", ?( Элементы.Состав.ТекущиеДанные = Неопределено, Неопределено, Элементы.Состав.ТекущиеДанные.ВнешнийПользователь)); Если Подобрать Тогда ПараметрыФормы.Вставить("ЗакрыватьПриВыборе", Ложь); ПараметрыФормы.Вставить("МножественныйВыбор", Истина); ПараметрыФормы.Вставить("РасширенныйПодбор", Истина); ПараметрыФормы.Вставить("ПараметрыРасширеннойФормыПодбора", ПараметрыРасширеннойФормыПодбора()); КонецЕсли; МассивПустыхСсылок = Новый Массив; Для Каждого СтрокаНазначения Из Объект.Назначение Цикл МассивПустыхСсылок.Добавить(СтрокаНазначения.ТипПользователей); КонецЦикла; ПараметрыФормы.Вставить("Назначение", МассивПустыхСсылок); ОткрытьФорму( "Справочник.ВнешниеПользователи.ФормаВыбора", ПараметрыФормы, ?(Подобрать, Элементы.Состав, Элементы.СоставВнешнийПользователь)); КонецПроцедуры &НаКлиенте Процедура ОбработкаВыбораВнешнегоПользователя(ВыбранноеЗначение) Если ТипЗнч(ВыбранноеЗначение) = Тип("СправочникСсылка.ВнешниеПользователи") Тогда Объект.Состав.Добавить().ВнешнийПользователь = ВыбранноеЗначение; КонецЕсли; КонецПроцедуры &НаСервере Функция ПараметрыРасширеннойФормыПодбора() ВыбранныеПользователи = Новый ТаблицаЗначений; ВыбранныеПользователи.Колонки.Добавить("Пользователь"); ВыбранныеПользователи.Колонки.Добавить("НомерКартинки"); УчастникиГруппыВнешнихПользователей = Объект.Состав.Выгрузить(, "ВнешнийПользователь"); Для каждого Элемент Из УчастникиГруппыВнешнихПользователей Цикл СтрокаВыбранныеПользователи = ВыбранныеПользователи.Добавить(); СтрокаВыбранныеПользователи.Пользователь = Элемент.ВнешнийПользователь; КонецЦикла; ЗаголовокФормыПодбора = НСтр("ru = 'Подбор участников группы внешних пользователей'"); ПараметрыРасширеннойФормыПодбора = Новый Структура("ЗаголовокФормыПодбора, ВыбранныеПользователи, ПодборГруппНевозможен", ЗаголовокФормыПодбора, ВыбранныеПользователи, Истина); АдресХранилища = ПоместитьВоВременноеХранилище(ПараметрыРасширеннойФормыПодбора); Возврат АдресХранилища; КонецФункции &НаСервере Процедура ЗаполнитьСтатусПользователей() Для Каждого СтрокаСоставаГруппы Из Объект.Состав Цикл СтрокаСоставаГруппы.Недействителен = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(СтрокаСоставаГруппы.ВнешнийПользователь, "Недействителен"); КонецЦикла; КонецПроцедуры &НаСервере Процедура ОбновитьСписокНедействительныхПользователей(ПередОткрытиемФормы) Элементы.ПоказыватьНедействительныхПользователей.Пометка = ?(ПередОткрытиемФормы, Ложь, НЕ Элементы.ПоказыватьНедействительныхПользователей.Пометка); Отбор = Новый Структура; Если Не Элементы.ПоказыватьНедействительныхПользователей.Пометка Тогда Отбор.Вставить("Недействителен", Ложь); Элементы.Состав.ОтборСтрок = Новый ФиксированнаяСтруктура(Отбор); Иначе Элементы.Состав.ОтборСтрок = Новый ФиксированнаяСтруктура(); КонецЕсли; КонецПроцедуры &НаСервере Процедура СоставСортироватьСтроки(ТипСортировки) Если Не Элементы.ПоказыватьНедействительныхПользователей.Пометка Тогда Элементы.Состав.ОтборСтрок = Новый ФиксированнаяСтруктура(); КонецЕсли; Если ТипСортировки = "ПоВозрастанию" Тогда Объект.Состав.Сортировать("ВнешнийПользователь Возр"); Иначе Объект.Состав.Сортировать("ВнешнийПользователь Убыв"); КонецЕсли; Если Не Элементы.ПоказыватьНедействительныхПользователей.Пометка Тогда Отбор = Новый Структура; Отбор.Вставить("Недействителен", Ложь); Элементы.Состав.ОтборСтрок = Новый ФиксированнаяСтруктура(Отбор); КонецЕсли; КонецПроцедуры &НаСервере Процедура СоставПереместитьСтроку(НаправлениеПеремещения) Строка = Объект.Состав.НайтиПоИдентификатору(Элементы.Состав.ТекущаяСтрока); Если Строка = Неопределено Тогда Возврат; КонецЕсли; ИндексТекущейСтроки = Строка.НомерСтроки - 1; Сдвиг = 0; Пока Истина Цикл Сдвиг = Сдвиг + ?(НаправлениеПеремещения = "Вверх", -1, 1); Если ИндексТекущейСтроки + Сдвиг < 0 Или ИндексТекущейСтроки + Сдвиг >= Объект.Состав.Количество() Тогда Возврат; КонецЕсли; Если Элементы.ПоказыватьНедействительныхПользователей.Пометка Или Объект.Состав[ИндексТекущейСтроки + Сдвиг].Недействителен = Ложь Тогда Прервать; КонецЕсли; КонецЦикла; Объект.Состав.Сдвинуть(ИндексТекущейСтроки, Сдвиг); Элементы.Состав.Обновить(); КонецПроцедуры &НаКлиенте Процедура ПослеВыбораНазначения(МассивТипов, ДополнительныеПараметры) Экспорт Модифицированность = Истина; УдалитьНеТипичныеВнешниеПользователи(); УстановитьДоступностьСвойств(ЭтотОбъект); КонецПроцедуры //////////////////////////////////////////////////////////////////////////////// // Для работы интерфейса ролей. &НаСервере Процедура ОбработатьИнтерфейсРолей(Действие, ОсновнойПараметр = Неопределено) ПараметрыДействия = Новый Структура; ПараметрыДействия.Вставить("ОсновнойПараметр", ОсновнойПараметр); ПараметрыДействия.Вставить("Форма", ЭтотОбъект); ПараметрыДействия.Вставить("КоллекцияРолей", КоллекцияРолей); ПараметрыДействия.Вставить("НазначениеРолей", "ДляВнешнихПользователей"); ПользователиСлужебный.ОбработатьИнтерфейсРолей(Действие, ПараметрыДействия); КонецПроцедуры #КонецОбласти

Catalogs/ГруппыДоступа/ManagerModule

#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область ПрограммныйИнтерфейс #Область ДляВызоваИзДругихПодсистем // СтандартныеПодсистемы.ГрупповоеИзменениеОбъектов // Возвращает реквизиты объекта, которые не рекомендуется редактировать // с помощью обработки группового изменения реквизитов. // // Возвращаемое значение: // Массив - список имен реквизитов объекта. Функция РеквизитыНеРедактируемыеВГрупповойОбработке() Экспорт НеРедактируемыеРеквизиты = Новый Массив; НеРедактируемыеРеквизиты.Добавить("ТипПользователей"); НеРедактируемыеРеквизиты.Добавить("Пользователь"); НеРедактируемыеРеквизиты.Добавить("ОсновнаяГруппаДоступаПоставляемогоПрофиля"); НеРедактируемыеРеквизиты.Добавить("ВидыДоступа.*"); НеРедактируемыеРеквизиты.Добавить("ЗначенияДоступа.*"); Возврат НеРедактируемыеРеквизиты; КонецФункции // Конец СтандартныеПодсистемы.ГрупповоеИзменениеОбъектов // СтандартныеПодсистемы.УправлениеДоступом // См. УправлениеДоступомПереопределяемый.ПриЗаполненииСписковСОграничениемДоступа. Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт Ограничение.Текст = "РазрешитьЧтениеИзменение |ГДЕ | ЭтоГруппа | ИЛИ Профиль <> Значение(Справочник.ПрофилиГруппДоступа.Администратор) | И ЭтоАвторизованныйПользователь(Ответственный)"; КонецПроцедуры // Конец СтандартныеПодсистемы.УправлениеДоступом // ТехнологияСервиса.ВыгрузкаЗагрузкаДанных // См. ВыгрузкаЗагрузкаДанныхПереопределяемый.ПриРегистрацииОбработчиковВыгрузкиДанных. Процедура ПередВыгрузкойОбъекта(Контейнер, МенеджерВыгрузкиОбъекта, Сериализатор, Объект, Артефакты, Отказ) Экспорт УправлениеДоступомСлужебный.ПередВыгрузкойОбъекта(Контейнер, МенеджерВыгрузкиОбъекта, Сериализатор, Объект, Артефакты, Отказ); КонецПроцедуры // Конец ТехнологияСервиса.ВыгрузкаЗагрузкаДанных #КонецОбласти #КонецОбласти #КонецЕсли #Область ОбработчикиСобытий Процедура ОбработкаПолученияПолейПредставления(Поля, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; Поля.Добавить("Наименование"); Поля.Добавить("Пользователь"); КонецПроцедуры Процедура ОбработкаПолученияПредставления(Данные, Представление, СтандартнаяОбработка) Если Не ЗначениеЗаполнено(Данные.Пользователь) Тогда Возврат; КонецЕсли; СтандартнаяОбработка = Ложь; Представление = УправлениеДоступомСлужебныйКлиентСервер.ПредставлениеГруппыДоступа(Данные); КонецПроцедуры #КонецОбласти #Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда #Область СлужебныеПроцедурыИФункции // Устанавливает пометку удаления группам доступа, если установлена // пометка удаления у профиля группы доступа. Требуется, например, // при удалении предопределенных профилей групп доступа, // т.к. платформа не вызывает обработчики объектов при // установке пометки удаления бывшим предопределенным // элементам в процессе обновления конфигурации базы данных. // // Параметры: // ЕстьИзменения - Булево (возвращаемое значение) - если производилась запись, // устанавливается Истина, иначе не изменяется. // Процедура ПометитьНаУдалениеГруппыДоступаПомеченныхПрофилей(ЕстьИзменения = Неопределено) Экспорт Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ГруппыДоступа.Ссылка КАК Ссылка |ИЗ | Справочник.ГруппыДоступа КАК ГруппыДоступа |ГДЕ | ГруппыДоступа.Профиль <> ЗНАЧЕНИЕ(Справочник.ПрофилиГруппДоступа.Администратор) | И ГруппыДоступа.Профиль.ПометкаУдаления | И НЕ ГруппыДоступа.ПометкаУдаления | И НЕ ГруппыДоступа.Предопределенный"; Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл ГруппаДоступаОбъект = Выборка.Ссылка.ПолучитьОбъект(); ГруппаДоступаОбъект.ПометкаУдаления = Истина; ОбновлениеИнформационнойБазы.ЗаписатьОбъект(ГруппаДоступаОбъект); РегистрыСведений.ТаблицыГруппДоступа.ОбновитьДанныеРегистра(Выборка.Ссылка); РегистрыСведений.ЗначенияГруппДоступа.ОбновитьДанныеРегистра(Выборка.Ссылка); ПользователиДляОбновления = ПользователиДляОбновленияРолей(Неопределено, ГруппаДоступаОбъект); УправлениеДоступом.ОбновитьРолиПользователей(ПользователиДляОбновления); ЕстьИзменения = Истина; КонецЦикла; КонецПроцедуры // Выполняет обновление видов доступа групп доступа указанного профиля. // При этом возможно не удалять виды доступа из группы доступа, // которые удалены в профиле этой группы доступа, в случае // когда в группе доступа назначены значения доступа по // удаляемому виду доступа. // // Параметры: // Профиль - СправочникСсылка.ПрофилиГруппДоступа - профиль групп доступа. // // ОбновлятьГруппыДоступаСУстаревшимиНастройками - Булево - обновлять группы доступа. // // Возвращаемое значение: // Булево - когда Истина, группа доступа была изменена, // когда Ложь никаких изменений не было выполнено. // Функция ОбновитьГруппыДоступаПрофиля(Профиль, ОбновлятьГруппыДоступаСУстаревшимиНастройками = Ложь) Экспорт ГруппаДоступаОбновлена = Ложь; ВидыДоступаПрофиля = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Профиль, "ВидыДоступа").Выгрузить(); Индекс = ВидыДоступаПрофиля.Количество() - 1; Пока Индекс >= 0 Цикл Строка = ВидыДоступаПрофиля[Индекс]; Отбор = Новый Структура("ВидДоступа", Строка.ВидДоступа); СвойстваВидаДоступа = УправлениеДоступомСлужебный.СвойстваВидаДоступа(Строка.ВидДоступа); Если СвойстваВидаДоступа = Неопределено Тогда ВидыДоступаПрофиля.Удалить(Строка); КонецЕсли; Индекс = Индекс - 1; КонецЦикла; Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ГруппыДоступа.Ссылка КАК Ссылка |ИЗ | Справочник.ГруппыДоступа КАК ГруппыДоступа |ГДЕ | НЕ(ГруппыДоступа.Профиль <> &Профиль | И НЕ(&Профиль = ЗНАЧЕНИЕ(Справочник.ПрофилиГруппДоступа.Администратор) | И ГруппыДоступа.Ссылка = ЗНАЧЕНИЕ(Справочник.ГруппыДоступа.Администраторы)))"; Запрос.УстановитьПараметр("Профиль", Профиль.Ссылка); Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл // Проверка необходимости/возможности обновления группы доступа. ГруппаДоступа = Выборка.Ссылка.ПолучитьОбъект(); Если ГруппаДоступа.Ссылка = Администраторы И ГруппаДоступа.Профиль <> Справочники.ПрофилиГруппДоступа.Администратор Тогда // Установка профиля Администратор, если не задан. ГруппаДоступа.Профиль = Справочники.ПрофилиГруппДоступа.Администратор; КонецЕсли; // Проверка состава видов доступа. СоставВидовДоступаИзменен = Ложь; ЕстьУдаляемыеВидыДоступаСЗаданнымиЗначениямиДоступа = Ложь; Если ГруппаДоступа.ВидыДоступа.Количество() <> ВидыДоступаПрофиля.НайтиСтроки(Новый Структура("Предустановленный", Ложь)).Количество() Тогда СоставВидовДоступаИзменен = Истина; Иначе Для каждого СтрокаВидаДоступа Из ГруппаДоступа.ВидыДоступа Цикл Если ВидыДоступаПрофиля.НайтиСтроки(Новый Структура("ВидДоступа, Предустановленный", СтрокаВидаДоступа.ВидДоступа, Ложь)).Количество() = 0 Тогда СоставВидовДоступаИзменен = Истина; Если ГруппаДоступа.ЗначенияДоступа.Найти(СтрокаВидаДоступа.ВидДоступа, "ВидДоступа") <> Неопределено Тогда ЕстьУдаляемыеВидыДоступаСЗаданнымиЗначениямиДоступа = Истина; КонецЕсли; КонецЕсли; КонецЦикла; КонецЕсли; Если СоставВидовДоступаИзменен И ( ОбновлятьГруппыДоступаСУстаревшимиНастройками ИЛИ НЕ ЕстьУдаляемыеВидыДоступаСЗаданнымиЗначениямиДоступа ) Тогда // Обновление группы доступа. // 1. Удаление лишних видов доступа и значений доступа (если есть). ТекущийНомерСтроки = ГруппаДоступа.ВидыДоступа.Количество()-1; Пока ТекущийНомерСтроки >= 0 Цикл ТекущийВидДоступа = ГруппаДоступа.ВидыДоступа[ТекущийНомерСтроки].ВидДоступа; Если ВидыДоступаПрофиля.НайтиСтроки(Новый Структура("ВидДоступа, Предустановленный", ТекущийВидДоступа, Ложь)).Количество() = 0 Тогда СтрокиЗначенийВидаДоступа = ГруппаДоступа.ЗначенияДоступа.НайтиСтроки(Новый Структура("ВидДоступа", ТекущийВидДоступа)); Для каждого СтрокаЗначения Из СтрокиЗначенийВидаДоступа Цикл ГруппаДоступа.ЗначенияДоступа.Удалить(СтрокаЗначения); КонецЦикла; ГруппаДоступа.ВидыДоступа.Удалить(ТекущийНомерСтроки); КонецЕсли; ТекущийНомерСтроки = ТекущийНомерСтроки - 1; КонецЦикла; // 2. Добавление новых видов доступа (если есть). Для каждого СтрокаВидаДоступа Из ВидыДоступаПрофиля Цикл Если НЕ СтрокаВидаДоступа.Предустановленный И ГруппаДоступа.ВидыДоступа.Найти(СтрокаВидаДоступа.ВидДоступа, "ВидДоступа") = Неопределено Тогда НоваяСтрока = ГруппаДоступа.ВидыДоступа.Добавить(); НоваяСтрока.ВидДоступа = СтрокаВидаДоступа.ВидДоступа; НоваяСтрока.ВсеРазрешены = СтрокаВидаДоступа.ВсеРазрешены; КонецЕсли; КонецЦикла; КонецЕсли; Если ГруппаДоступа.Модифицированность() Тогда Если Не ОбновлениеИнформационнойБазы.ВыполняетсяОбновлениеИнформационнойБазы() И Не ОбновлениеИнформационнойБазы.ЭтоВызовИзОбработчикаОбновления() Тогда ЗаблокироватьДанныеДляРедактирования(ГруппаДоступа.Ссылка, ГруппаДоступа.ВерсияДанных); КонецЕсли; ГруппаДоступа.ДополнительныеСвойства.Вставить("НеОбновлятьРолиПользователей"); ОбновлениеИнформационнойБазы.ЗаписатьОбъект(ГруппаДоступа); ГруппаДоступаОбновлена = Истина; Если Не ОбновлениеИнформационнойБазы.ВыполняетсяОбновлениеИнформационнойБазы() И Не ОбновлениеИнформационнойБазы.ЭтоВызовИзОбработчикаОбновления() Тогда РазблокироватьДанныеДляРедактирования(ГруппаДоступа.Ссылка); КонецЕсли; КонецЕсли; КонецЦикла; Возврат ГруппаДоступаОбновлена; КонецФункции // Возвращает ссылку на группу-родителя персональных групп доступа. // Если родитель не найден он будет создан. // // Параметры: // НеСоздавать - Булево, если задан Истина, родитель не будет автоматически создан, // а функция вернет Неопределено, если родитель не найден. // // Возвращаемое значение: // СправочникСсылка.ГруппыДоступа - ссылка на группу-родителя. // Функция РодительПерсональныхГруппДоступа(Знач НеСоздавать = Ложь, НаименованиеГруппыЭлементов = Неопределено) Экспорт УстановитьПривилегированныйРежим(Истина); НаименованиеГруппыЭлементов = НСтр("ru = 'Персональные группы доступа'"); Запрос = Новый Запрос; Запрос.УстановитьПараметр("НаименованиеГруппыЭлементов", НаименованиеГруппыЭлементов); Запрос.Текст = "ВЫБРАТЬ | ГруппыДоступа.Ссылка |ИЗ | Справочник.ГруппыДоступа КАК ГруппыДоступа |ГДЕ | ГруппыДоступа.Наименование ПОДОБНО &НаименованиеГруппыЭлементов | И ГруппыДоступа.ЭтоГруппа"; Выборка = Запрос.Выполнить().Выбрать(); Если Выборка.Следующий() Тогда ГруппаЭлементов = Выборка.Ссылка; ИначеЕсли НеСоздавать Тогда ГруппаЭлементов = Неопределено; Иначе ГруппаЭлементовОбъект = СоздатьГруппу(); ГруппаЭлементовОбъект.Наименование = НаименованиеГруппыЭлементов; ГруппаЭлементовОбъект.Записать(); ГруппаЭлементов = ГруппаЭлементовОбъект.Ссылка; КонецЕсли; Возврат ГруппаЭлементов; КонецФункции Функция ИзменилисьВидыИлиЗначенияДоступа(СтарыеЗначения, ТекущийОбъект) Экспорт Если СтарыеЗначения.Ссылка <> ТекущийОбъект.Ссылка Тогда Возврат Истина; КонецЕсли; ВидыДоступа = СтарыеЗначения.ВидыДоступа.Выгрузить(); ЗначенияДоступа = СтарыеЗначения.ЗначенияДоступа.Выгрузить(); Если ВидыДоступа.Количество() <> ТекущийОбъект.ВидыДоступа.Количество() Или ЗначенияДоступа.Количество() <> ТекущийОбъект.ЗначенияДоступа.Количество() Тогда Возврат Истина; КонецЕсли; Отбор = Новый Структура("ВидДоступа, ВсеРазрешены"); Для Каждого Строка Из ТекущийОбъект.ВидыДоступа Цикл ЗаполнитьЗначенияСвойств(Отбор, Строка); Если ВидыДоступа.НайтиСтроки(Отбор).Количество() = 0 Тогда Возврат Истина; КонецЕсли; КонецЦикла; Отбор = Новый Структура("ВидДоступа, ЗначениеДоступа"); Для Каждого Строка Из ТекущийОбъект.ЗначенияДоступа Цикл ЗаполнитьЗначенияСвойств(Отбор, Строка); Если ЗначенияДоступа.НайтиСтроки(Отбор).Количество() = 0 Тогда Возврат Истина; КонецЕсли; КонецЦикла; Возврат Ложь; КонецФункции Функция ПользователиДляОбновленияРолей(СтарыеЗначения, ЭлементДанных) Экспорт Если СтарыеЗначения = Неопределено Тогда СтарыеЗначения = Новый Структура("Ссылка, Профиль, ПометкаУдаления") КонецЕсли; // Обновление ролей для добавленных, оставшихся и удаленных пользователей. Запрос = Новый Запрос; Запрос.УстановитьПараметр("НовыеУчастники", ?(ТипЗнч(ЭлементДанных) <> Тип("УдалениеОбъекта"), ЭлементДанных.Пользователи.ВыгрузитьКолонку("Пользователь"), Новый Массив)); Запрос.УстановитьПараметр("СтарыеУчастники", ?(ЭлементДанных.Ссылка = СтарыеЗначения.Ссылка, СтарыеЗначения.Пользователи.Выгрузить().ВыгрузитьКолонку("Пользователь"), Новый Массив)); Если ТипЗнч(ЭлементДанных) = Тип("УдалениеОбъекта") Или ЭлементДанных.Профиль <> СтарыеЗначения.Профиль Или ЭлементДанных.ПометкаУдаления <> СтарыеЗначения.ПометкаУдаления Тогда // Выбор всех новых и старых участников группы доступа. Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ | СоставыГруппПользователей.Пользователь КАК Пользователь |ИЗ | РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей |ГДЕ | (СоставыГруппПользователей.ГруппаПользователей В (&СтарыеУчастники) | ИЛИ СоставыГруппПользователей.ГруппаПользователей В (&НовыеУчастники))"; Иначе // Выбор изменений участников группы доступа. Запрос.Текст = "ВЫБРАТЬ | Данные.Пользователь КАК Пользователь |ИЗ | (ВЫБРАТЬ РАЗЛИЧНЫЕ | СоставыГруппПользователей.Пользователь КАК Пользователь, | -1 КАК ВидИзмененияСтроки | ИЗ | РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей | ГДЕ | СоставыГруппПользователей.ГруппаПользователей В(&СтарыеУчастники) | | ОБЪЕДИНИТЬ ВСЕ | | ВЫБРАТЬ РАЗЛИЧНЫЕ | СоставыГруппПользователей.Пользователь, | 1 | ИЗ | РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей | ГДЕ | СоставыГруппПользователей.ГруппаПользователей В(&НовыеУчастники)) КАК Данные | |СГРУППИРОВАТЬ ПО | Данные.Пользователь | |ИМЕЮЩИЕ | СУММА(Данные.ВидИзмененияСтроки) <> 0"; КонецЕсли; Возврат Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Пользователь"); КонецФункции Функция ПользователиДляОбновленияРолейПоПрофилю(Профили) Экспорт Запрос = Новый Запрос; Запрос.УстановитьПараметр("Профили", Профили); Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ | СоставыГруппПользователей.Пользователь КАК Пользователь |ИЗ | РегистрСведений.СоставыГруппПользователей КАК СоставыГруппПользователей | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.ГруппыДоступа.Пользователи КАК ГруппыДоступаПользователи | ПО СоставыГруппПользователей.ГруппаПользователей = ГруппыДоступаПользователи.Пользователь | И (ГруппыДоступаПользователи.Ссылка.Профиль В (&Профили))"; Возврат Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Пользователь"); КонецФункции Функция ГруппыДоступаПрофиля(Профили) Экспорт Запрос = Новый Запрос; Запрос.УстановитьПараметр("Профили", Профили); Запрос.Текст = "ВЫБРАТЬ | ГруппыДоступа.Ссылка КАК Ссылка |ИЗ | Справочник.ГруппыДоступа КАК ГруппыДоступа |ГДЕ | ГруппыДоступа.Профиль В(&Профили) | И НЕ ГруппыДоступа.ЭтоГруппа"; РезультатЗапроса = Запрос.Выполнить(); Возврат Запрос.Выполнить().Выгрузить().ВыгрузитьКолонку("Ссылка"); КонецФункции Процедура ЗарегистрироватьСсылки(ВидСсылок, ДобавляемыеСсылки) Экспорт Если ОбщегоНазначения.РазделениеВключено() Тогда Возврат; КонецЕсли; СвойстваВидаСсылок = СвойстваВидаСсылок(ВидСсылок); УстановитьПривилегированныйРежим(Истина); Ссылки = СтандартныеПодсистемыСервер.ПараметрРаботыПрограммы( СвойстваВидаСсылок.ИмяПараметраРаботыПрограммы); УстановитьПривилегированныйРежим(Ложь); Если ТипЗнч(Ссылки) <> Тип("Массив") Тогда Ссылки = Новый Массив; КонецЕсли; ЕстьИзменения = Ложь; Если ДобавляемыеСсылки = Null Тогда Если Ссылки.Количество() > 0 Тогда Ссылки = Новый Массив; ЕстьИзменения = Истина; КонецЕсли; ИначеЕсли Ссылки.Количество() = 1 И Ссылки[0] = Неопределено Тогда Возврат; // Ранее было добавлено более 300 ссылок. Иначе Если ТипЗнч(ДобавляемыеСсылки) <> Тип("Массив") Тогда ДобавляемыеСсылки = ОбщегоНазначенияКлиентСервер.ЗначениеВМассиве(ДобавляемыеСсылки); КонецЕсли; Для Каждого ДобавляемаяСсылка Из ДобавляемыеСсылки Цикл Если Ссылки.Найти(ДобавляемаяСсылка) <> Неопределено Тогда Продолжить; КонецЕсли; Ссылки.Добавить(ДобавляемаяСсылка); ЕстьИзменения = Истина; КонецЦикла; Если Ссылки.Количество() > 300 Тогда Ссылки = Новый Массив; Ссылки.Добавить(Неопределено); ЕстьИзменения = Истина; КонецЕсли; КонецЕсли; Если Не ЕстьИзменения Тогда Возврат; КонецЕсли; УстановитьПривилегированныйРежим(Истина); СтандартныеПодсистемыСервер.УстановитьПараметрРаботыПрограммы( СвойстваВидаСсылок.ИмяПараметраРаботыПрограммы, Ссылки); УстановитьПривилегированныйРежим(Ложь); КонецПроцедуры Функция ЗарегистрированныеСсылки(ВидСсылок) Экспорт Если ОбщегоНазначения.РазделениеВключено() Тогда Возврат Новый Массив; КонецЕсли; СвойстваВидаСсылок = СвойстваВидаСсылок(ВидСсылок); УстановитьПривилегированныйРежим(Истина); Ссылки = СтандартныеПодсистемыСервер.ПараметрРаботыПрограммы( СвойстваВидаСсылок.ИмяПараметраРаботыПрограммы); УстановитьПривилегированныйРежим(Ложь); Если ТипЗнч(Ссылки) <> Тип("Массив") Тогда Ссылки = Новый Массив; КонецЕсли; Если Ссылки.Количество() = 1 И Ссылки[0] = Неопределено Тогда Возврат Ссылки; КонецЕсли; ПроверенныеСсылки = Новый Массив; Для Каждого Ссылка Из Ссылки Цикл Если СвойстваВидаСсылок.ДопустимыеТипы.СодержитТип(ТипЗнч(Ссылка)) Тогда ПроверенныеСсылки.Добавить(Ссылка); КонецЕсли; КонецЦикла; Возврат ПроверенныеСсылки; КонецФункции //////////////////////////////////////////////////////////////////////////////// // Процедуры и функции для поддержки обмена данными в РИБ. // Только для внутреннего использования. Процедура ВосстановитьСоставУчастниковГруппыДоступаАдминистраторы(ЭлементДанных) Экспорт Если ЭлементДанных.ИмяПредопределенныхДанных <> "Администраторы" Тогда Возврат; КонецЕсли; ЭлементДанных.Пользователи.Очистить(); Запрос = Новый Запрос; Запрос.УстановитьПараметр("ИмяПредопределенныхДанных", "Администраторы"); Запрос.Текст = "ВЫБРАТЬ РАЗЛИЧНЫЕ | ГруппыДоступаПользователи.Пользователь |ИЗ | Справочник.ГруппыДоступа.Пользователи КАК ГруппыДоступаПользователи |ГДЕ | ГруппыДоступаПользователи.Ссылка.ИмяПредопределенныхДанных = &ИмяПредопределенныхДанных"; Выборка = Запрос.Выполнить().Выбрать(); Пока Выборка.Следующий() Цикл Если ЭлементДанных.Пользователи.Найти(Выборка.Пользователь, "Пользователь") = Неопределено Тогда ЭлементДанных.Пользователи.Добавить().Пользователь = Выборка.Пользователь; КонецЕсли; КонецЦикла; КонецПроцедуры // Только для внутреннего использования. Процедура УдалитьУчастниковГруппыДоступаАдминистраторыБезПользователяИБ() Экспорт ГруппаДоступаАдминистраторы = Администраторы.ПолучитьОбъект(); Индекс = ГруппаДоступаАдминистраторы.Пользователи.Количество() - 1; Пока Индекс >= 0 Цикл ТекущийПользователь = ГруппаДоступаАдминистраторы.Пользователи[Индекс].Пользователь; Если ТипЗнч(ТекущийПользователь) = Тип("СправочникСсылка.Пользователи") Тогда ИдентификаторПользователяИБ = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ТекущийПользователь, "ИдентификаторПользователяИБ"); Иначе ИдентификаторПользователяИБ = Неопределено; КонецЕсли; Если ТипЗнч(ИдентификаторПользователяИБ) = Тип("УникальныйИдентификатор") Тогда ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору( ИдентификаторПользователяИБ); Иначе ПользовательИБ = Неопределено; КонецЕсли; Если ПользовательИБ = Неопределено Тогда ГруппаДоступаАдминистраторы.Пользователи.Удалить(Индекс); КонецЕсли; Индекс = Индекс - 1; КонецЦикла; Если ГруппаДоступаАдминистраторы.Модифицированность() Тогда ГруппаДоступаАдминистраторы.Записать(); КонецЕсли; КонецПроцедуры // Только для внутреннего использования. Процедура ЗарегистрироватьГруппуДоступаИзмененнуюПриЗагрузке(ЭлементДанных) Экспорт СтарыеЗначения = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ЭлементДанных.Ссылка, "Ссылка, Профиль, ПометкаУдаления, Пользователи, ВидыДоступа, ЗначенияДоступа"); ТребуетсяРегистрация = Ложь; ГруппаДоступа = ЭлементДанных.Ссылка; Если ТипЗнч(ЭлементДанных) = Тип("УдалениеОбъекта") Тогда ТребуетсяРегистрация = Истина; ИначеЕсли СтарыеЗначения.Ссылка <> ЭлементДанных.Ссылка Тогда ТребуетсяРегистрация = Истина; ГруппаДоступа = ПользователиСлужебный.СсылкаОбъекта(ЭлементДанных); ИначеЕсли ЭлементДанных.ПометкаУдаления <> СтарыеЗначения.ПометкаУдаления Или ЭлементДанных.Профиль <> СтарыеЗначения.Профиль Тогда ТребуетсяРегистрация = Истина; Иначе НаличиеУчастников = ЭлементДанных.Пользователи.Количество() <> 0; СтароеНаличиеУчастников = Не СтарыеЗначения.Пользователи.Пустой(); Если НаличиеУчастников <> СтароеНаличиеУчастников Или ИзменилисьВидыИлиЗначенияДоступа(СтарыеЗначения, ЭлементДанных) Тогда ТребуетсяРегистрация = Истина; КонецЕсли; КонецЕсли; Если ТребуетсяРегистрация Тогда ЗарегистрироватьСсылки("ГруппыДоступа", ГруппаДоступа); КонецЕсли; ПользователиДляОбновления = ПользователиДляОбновленияРолей(СтарыеЗначения, ЭлементДанных); ЗарегистрироватьСсылки("Пользователи", ПользователиДляОбновления); КонецПроцедуры // Только для внутреннего использования. Процедура ОбновитьВспомогательныеДанныеГруппДоступаИзмененныхПриЗагрузке() Экспорт Если ОбщегоНазначения.РазделениеВключено() Тогда // Изменения групп доступа в АРМ заблокированы и не загружаются в область данных. Возврат; КонецЕсли; ИзмененныеГруппыДоступа = ЗарегистрированныеСсылки("ГруппыДоступа"); Если ИзмененныеГруппыДоступа.Количество() = 0 Тогда Возврат; КонецЕсли; Если ИзмененныеГруппыДоступа.Количество() = 1 И ИзмененныеГруппыДоступа[0] = Неопределено Тогда РегистрыСведений.ТаблицыГруппДоступа.ОбновитьДанныеРегистра(); РегистрыСведений.ЗначенияГруппДоступа.ОбновитьДанныеРегистра(); Иначе РегистрыСведений.ТаблицыГруппДоступа.ОбновитьДанныеРегистра(ИзмененныеГруппыДоступа); РегистрыСведений.ЗначенияГруппДоступа.ОбновитьДанныеРегистра(ИзмененныеГруппыДоступа); КонецЕсли; ЗарегистрироватьСсылки("ГруппыДоступа", Null); КонецПроцедуры // Только для внутреннего использования. Процедура ЗарегистрироватьПользователейГруппыПользователейИзмененнойПриЗагрузке(ЭлементДанных) Экспорт СтарыеЗначения = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ЭлементДанных.Ссылка, "Ссылка, ПометкаУдаления, Состав"); ИмяРеквизита = ?(ТипЗнч(ЭлементДанных.Ссылка) = Тип("СправочникСсылка.ГруппыВнешнихПользователей"), "ВнешнийПользователь", "Пользователь"); Если СтарыеЗначения.Ссылка = ЭлементДанных.Ссылка Тогда СтарыеПользователи = СтарыеЗначения.Состав.Выгрузить().ВыгрузитьКолонку(ИмяРеквизита); Иначе СтарыеПользователи = Новый Массив; КонецЕсли; Если ТипЗнч(ЭлементДанных) = Тип("УдалениеОбъекта") Тогда ПользователиДляОбновления = СтарыеПользователи; Иначе НовыеПользователи = ЭлементДанных.Состав.ВыгрузитьКолонку(ИмяРеквизита); Если СтарыеЗначения.Ссылка <> ЭлементДанных.Ссылка Тогда ПользователиДляОбновления = НовыеПользователи; Иначе ПользователиДляОбновления = Новый Массив; Все = ЭлементДанных.ПометкаУдаления <> СтарыеЗначения.ПометкаУдаления; Для Каждого Пользователь Из СтарыеПользователи Цикл Если Все Или НовыеПользователи.Найти(Пользователь) = Неопределено Тогда ПользователиДляОбновления.Добавить(Пользователь); КонецЕсли; КонецЦикла; Для Каждого Пользователь Из НовыеПользователи Цикл Если Все Или СтарыеПользователи.Найти(Пользователь) = Неопределено Тогда ПользователиДляОбновления.Добавить(Пользователь); КонецЕсли; КонецЦикла; КонецЕсли; КонецЕсли; ЗарегистрироватьСсылки("Пользователи", ПользователиДляОбновления); КонецПроцедуры // Только для внутреннего использования. Процедура ЗарегистрироватьПользователяИзмененногоПриЗагрузке(ЭлементДанных) Экспорт СтарыеЗначения = ОбщегоНазначения.ЗначенияРеквизитовОбъекта(ЭлементДанных.Ссылка, "Ссылка, ПометкаУдаления, Недействителен"); ТребуетсяРегистрация = Ложь; Пользователь = ЭлементДанных.Ссылка; Если ТипЗнч(ЭлементДанных) = Тип("УдалениеОбъекта") Тогда ТребуетсяРегистрация = Истина; ИначеЕсли СтарыеЗначения.Ссылка <> ЭлементДанных.Ссылка Тогда ТребуетсяРегистрация = Ист