Процедура УстановкаПараметровСеанса(ИменаПараметровСеанса) Экспорт
Если ИменаПараметровСеанса = Неопределено
И НЕ ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда
ВерсияКонфигурацииИБ = ОбновлениеИнформационнойБазы.ВерсияИБ(Метаданные.Имя);
Если ОбщегоНазначенияКлиентСервер.СравнитьВерсии(ВерсияКонфигурацииИБ, "3.0.44.81") < 0 Тогда
НастройкиКлиента = ХранилищеСистемныхНастроек.Загрузить("Общее/НастройкиКлиентскогоПриложения");
Если НастройкиКлиента = Неопределено Тогда
НастройкиКлиента = Новый НастройкиКлиентскогоПриложения;
КонецЕсли;
НастройкиКлиента.ВариантИнтерфейсаКлиентскогоПриложения = ВариантИнтерфейсаКлиентскогоПриложения.Такси;
ХранилищеСистемныхНастроек.Сохранить("Общее/НастройкиКлиентскогоПриложения", , НастройкиКлиента);
КонецЕсли;
КонецЕсли;
КонецПроцедуры
// Возвращает структуру параметров, необходимых для работы клиентского кода
// при запуске конфигурации, т.е. в обработчиках событий
// - ПередНачаломРаботыСистемы,
// - ПриНачалеРаботыСистемы
//
// Важно: при запуске недопустимо использовать команды сброса кэша
// повторно используемых модулей, иначе запуск может привести
// к непредсказуемым ошибкам и лишним серверным вызовам
//
// Параметры:
// Параметры - Структура - (возвращаемое значение) структура параметров работы клиента при запуске.
//
// Пример реализации:
// Для установки параметров работы клиента можно использовать шаблон:
//
// Параметры.Вставить(<ИмяПараметра>, <код получения значения параметра>);
//
//
Процедура ПараметрыРаботыКлиентаПриЗапуске(Параметры) Экспорт
НастройкиКлиента = ХранилищеСистемныхНастроек.Загрузить("Общее/НастройкиКлиентскогоПриложения");
ВариантИнтерфейса = ?(ТипЗнч(НастройкиКлиента) = Тип("НастройкиКлиентскогоПриложения"),
НастройкиКлиента.ВариантИнтерфейсаКлиентскогоПриложения,
ВариантИнтерфейсаКлиентскогоПриложения.Такси);
// Помощник перехода с редации 2.0
Обработки.ПомощникПереходаСРедакции20.ПараметрыРаботыКлиентаПриЗапуске(Параметры);
// Информация о необходимости обновить конфигурацию
Параметры.Вставить("ПоказатьПредложитьОбновитьВерсиюПрограммы", ПредлагатьОбновитьВерсиюПрограммы(Параметры));
// Предложение включить основной интерфейс
ВариантПредложения = Неопределено;
Параметры.Вставить("ПоказатьВключитьОсновнойИнтерфейс",
ПредлагатьВключитьОсновнойИнтерфейс(ВариантИнтерфейса, ВариантПредложения));
Параметры.Вставить("ВариантПредложенияВключитьОсновнойИнтерфейс", ВариантПредложения);
// Начало работы в сервисе Бизнес-Старт и Предприниматель 2015
ПоказатьНачалоРаботыПредпринимательВСервисе = ПолучитьФункциональнуюОпцию("ПредпринимательВСервисе")
И РольДоступна("ПолныеПрава")
И ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("НачалоРаботыПредпринимательВСервисе", "Показывать", Истина);
Параметры.Вставить("ПоказатьНачалоРаботыПредпринимательВСервисе", ПоказатьНачалоРаботыПредпринимательВСервисе);
// Знакомство с редакцией 3.0
ПоказатьЗнакомствоСРедакциейВ30 = ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных()
И ОбновлениеСПредыдущейРедакции.ИнформационнаяБазаОбновленаС20()
И ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("НачалоРаботыВ30", "Показывать", Истина);
ИмяОбработкиЗнакомствоСРедакциейВ30 = "";
Если ПоказатьЗнакомствоСРедакциейВ30 Тогда
ИмяОбработкиЗнакомствоСРедакциейВ30 = ?(
ВариантИнтерфейса = ВариантИнтерфейсаКлиентскогоПриложения.Версия8_2,
"НачинаемРаботатьВ30_82",
"НачинаемРаботатьВ30");
Если Не ПравоДоступа("Использование", Метаданные.Обработки[ИмяОбработкиЗнакомствоСРедакциейВ30]) Тогда
ПоказатьЗнакомствоСРедакциейВ30 = Ложь;
КонецЕсли;
КонецЕсли;
Параметры.Вставить("ПоказатьЗнакомствоСРедакциейВ30", ПоказатьЗнакомствоСРедакциейВ30);
Параметры.Вставить("ИмяОбработкиЗнакомствоСРедакциейВ30", ИмяОбработкиЗнакомствоСРедакциейВ30);
// Путеводитель по демо-базе
ИмяОбработкиПутеводительПоДемоБазе = ИмяОбработкиПутеводительПоДемоБазе();
ПоказатьПутеводительПоДемоБазе = ИмяОбработкиПутеводительПоДемоБазе <> Неопределено;
Параметры.Вставить("ПоказатьПутеводительПоДемоБазе", ПоказатьПутеводительПоДемоБазе);
Параметры.Вставить("ИмяОбработкиПутеводительПоДемоБазе", ИмяОбработкиПутеводительПоДемоБазе);
// Свертка базы (продолжение работы)
Параметры.Вставить("ПоказатьСвертку", ТребуетсяОткрытьСверткуБазы());
// Разрешение на открытие окон при запуске
Параметры.Вставить("ОткрыватьДополнительныеОкнаПриЗапуске", ОткрыватьДополнительныеОкнаПриЗапуске());
УстановитьСведенияОРекомендуемойВерсииПлатформы(Параметры);
УстановитьПараметрыНачалаРаботы(Параметры);
КонецПроцедуры
// Установка набора видимых подсистем командного интерфейса
// и настроек всем пользователям вида интерфейса (Такси / в закладках).
//
// Параметры:
// Режим - Строка - ИнтерфейсТакси / ИнтерфейсВерсии82 / ИнтерфейсВерсии77 - соответствует константе, которая будет установлена в Истину
//
Процедура УстановитьРежимКомандногоИнтерфейса(Режим) Экспорт
Если НЕ ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда
Возврат;
КонецЕсли;
// Установка констант
РежимТакси = ВРег(Режим) = ВРег("ИнтерфейсТакси");
Режим82 = ВРег(Режим) = ВРег("ИнтерфейсВерсии82");
Режим77 = ВРег(Режим) = ВРег("ИнтерфейсВерсии77");
Если НЕ РежимТакси
И НЕ Режим82
И НЕ Режим77 Тогда
Возврат;
КонецЕсли;
УстановитьПривилегированныйРежим(Истина);
РежимСоответствуетТекущему = РежимТакси = Константы.ИнтерфейсТакси.Получить()
ИЛИ Режим82 = Константы.ИнтерфейсВерсии82.Получить()
ИЛИ Режим77 = Константы.ИнтерфейсВерсии82.Получить();
Константы.ИнтерфейсТакси.Установить(РежимТакси);
Константы.ИнтерфейсВерсии82.Установить(Режим82);
Константы.ИнтерфейсВерсии77.Установить(Режим77);
ОтображатьПодсистемуУчетаЗарплатыИКадров = УчетЗарплаты.ИспользуетсяПодсистемаУчетаЗарплатыИКадров();
Константы.ОтображатьПодсистемуСотрудникиИЗарплата82.Установить(ОтображатьПодсистемуУчетаЗарплатыИКадров И Режим82);
Константы.ОтображатьПодсистемуЗарплатаИКадры.Установить(ОтображатьПодсистемуУчетаЗарплатыИКадров И РежимТакси);
ЭтоБазоваяВерсияКонфигурации = СтандартныеПодсистемыСервер.ЭтоБазоваяВерсияКонфигурации();
ВестиУчетПоОрганизациям = Константы.ВестиУчетПоОрганизациям.СоздатьМенеджерЗначения();
ВестиУчетПоОрганизациям.Значение = НЕ ЭтоБазоваяВерсияКонфигурации И РежимТакси;
ВестиУчетПоОрганизациям.ОбменДанными.Загрузка = Истина;
ВестиУчетПоОрганизациям.Записать();
ВестиУчетПоОрганизациям82 = Константы.ВестиУчетПоОрганизациям82.СоздатьМенеджерЗначения();
ВестиУчетПоОрганизациям82.Значение = НЕ ЭтоБазоваяВерсияКонфигурации И НЕ РежимТакси;
ВестиУчетПоОрганизациям82.ОбменДанными.Загрузка = Истина;
ВестиУчетПоОрганизациям82.Записать();
// Установка настроек по умолчанию всем пользователям
ВсеПользователи = ПользователиИнформационнойБазы.ПолучитьПользователей();
НовыйИнтерфейсПользователей = ?(РежимТакси, ВариантИнтерфейсаКлиентскогоПриложения.Такси,
ВариантИнтерфейсаКлиентскогоПриложения.Версия8_2);
Если ВсеПользователи.Количество() > 0 Тогда
Для каждого ПользовательИБ Из ВсеПользователи Цикл
УстановитьНачальныеНастройки = Истина;
Если РежимСоответствуетТекущему Тогда
// Не меняем настройки, если интерфейс пользователя и ранее соответствовал устанавливаемому.
НастройкиКлиента = ХранилищеСистемныхНастроек.Загрузить("Общее/НастройкиКлиентскогоПриложения", , , ПользовательИБ.Имя);
Если НастройкиКлиента <> Неопределено Тогда
ТекущийИнтерфейсПользователя = НастройкиКлиента.ВариантИнтерфейсаКлиентскогоПриложения;
УстановитьНачальныеНастройки = ТекущийИнтерфейсПользователя <> НовыйИнтерфейсПользователей;
КонецЕсли;
КонецЕсли;
Если УстановитьНачальныеНастройки Тогда
ПользователиСлужебный.УстановитьНачальныеНастройки(ПользовательИБ.Имя);
КонецЕсли;
КонецЦикла;
Иначе
УстановитьНачальныеНастройки = Истина;
Если РежимСоответствуетТекущему Тогда
// Не меняем настройки, если интерфейс пользователя и ранее соответствовал устанавливаемому.
НастройкиКлиента = ХранилищеСистемныхНастроек.Загрузить("Общее/НастройкиКлиентскогоПриложения", , , "");
Если НастройкиКлиента <> Неопределено Тогда
ТекущийИнтерфейсПользователя = НастройкиКлиента.ВариантИнтерфейсаКлиентскогоПриложения;
УстановитьНачальныеНастройки = ТекущийИнтерфейсПользователя <> НовыйИнтерфейсПользователей;
КонецЕсли;
КонецЕсли;
Если УстановитьНачальныеНастройки Тогда
ПользователиСлужебный.УстановитьНачальныеНастройки("");
КонецЕсли;
КонецЕсли
КонецПроцедуры
Функция ЭтоБазоваяВерсияКонфигурации() Экспорт
Возврат СтандартныеПодсистемыСервер.ЭтоБазоваяВерсияКонфигурации();
КонецФункции
Функция ЭтоКОРПВерсияКонфигурации() Экспорт
Возврат СтрНайти(ВРег(Метаданные.Имя), "КОРП") > 0;
КонецФункции
Функция ЭтоПрофВерсияКонфигурации() Экспорт
Возврат НЕ (ЭтоБазоваяВерсияКонфигурации() ИЛИ ЭтоКОРПВерсияКонфигурации())
КонецФункции
// Подтверждает, что переданная организация входит в список доступных для пользователя.
//
// Параметры:
// Организация - СправочникСсылка.Организации - проверяемая организация. Может быть пустым значением.
// ВключатьОбособленныеПодразделения - Булево - признак добавления в список доступных обособленных подразделений.
// ПравоНаИзменение - Булево - Истина, если список будет использоваться в алгоритмах изменения данных.
//
// Возвращаемое значение:
// Массив - список из всех доступных, если было передано пустое значение;
// - список из Организация и её доступных обособленных подразделений;
// - пустой список, если организация недоступна для пользователя.
//
Функция СписокДоступныхОрганизаций(Организация, ВключатьОбособленныеПодразделения = Ложь, ПравоНаИзменение = Ложь) Экспорт
ДоступныеОрганизации = ОбщегоНазначенияБПВызовСервераПовтИсп.ВсеОрганизацииДанныеКоторыхДоступныПоRLS(ПравоНаИзменение);
Если ЗначениеЗаполнено(Организация) Тогда // проверяем конкретную организацию
Если ВключатьОбособленныеПодразделения
И ПолучитьФункциональнуюОпцию("ВестиУчетПоПодразделениям") Тогда
СписокОбособленныхПодразделений = ОбщегоНазначенияБПВызовСервераПовтИсп.ПолучитьСписокОбособленныхПодразделений(Организация);
ОбособленныеПодразделения = СписокОбособленныхПодразделений.ВыгрузитьЗначения();
НедоступныеОрганизации = ОбщегоНазначенияКлиентСервер.СократитьМассив(ОбособленныеПодразделения, ДоступныеОрганизации);
СписокОрганизаций = ОбщегоНазначенияКлиентСервер.СократитьМассив(ОбособленныеПодразделения, НедоступныеОрганизации);
Иначе
СписокОрганизаций = Новый Массив;
КонецЕсли;
Если ДоступныеОрганизации.Найти(Организация) <> Неопределено
И СписокОрганизаций.Найти(Организация) = Неопределено Тогда
СписокОрганизаций.Вставить(0, Организация);
КонецЕсли;
ДоступныеОрганизации = СписокОрганизаций;
КонецЕсли;
Возврат ДоступныеОрганизации;
КонецФункции
#КонецОбласти
////////////////////////////////////////////////////////////////////////////////
// ПРОЦЕДУРЫ И ФУНКЦИИ ПРОВЕРКИ НЕОБХОДИМОСТИ ВЫПОЛНЕНИЯ ДЕЙСТВИЙ ПРИ ЗАПУСКЕ
Функция ПредлагатьВключитьОсновнойИнтерфейс(ВариантИнтерфейса, ВариантПредложения)
Если НЕ ОбщегоНазначенияПовтИсп.ДоступноИспользованиеРазделенныхДанных() Тогда
Возврат Ложь;
КонецЕсли;
Интерфейс77 = Константы.ИнтерфейсВерсии77.Получить();
Интерфейс82 = Константы.ИнтерфейсВерсии82.Получить();
Если НЕ Интерфейс77 И НЕ Интерфейс82 Тогда
Возврат Ложь;
КонецЕсли;
ДатаСменыИнтерфейса = ХранилищеОбщихНастроек.Загрузить(ВРег("ДатаСменыИнтерфейса"));
Если ЗначениеЗаполнено(ДатаСменыИнтерфейса)
И ТипЗнч(ДатаСменыИнтерфейса) = Тип("Дата")
И НачалоДня(ТекущаяДатаСеанса()) >= НачалоДня(ДатаСменыИнтерфейса) Тогда
ДнейСПоследнегоПоказа = (НачалоДня(ТекущаяДатаСеанса()) - НачалоДня(ДатаСменыИнтерфейса)) / (60*60*24);
Иначе
ДнейСПоследнегоПоказа = 99999;
КонецЕсли;
НадоПредлагать = (Интерфейс77 И ДнейСПоследнегоПоказа >= 7)
ИЛИ (Интерфейс82 И ДнейСПоследнегоПоказа >= 14);
Если НадоПредлагать Тогда
ВариантПредложения = ?(ВариантИнтерфейса = ВариантИнтерфейсаКлиентскогоПриложения.Такси,
"ИзменитьКомандныйИнтерфейс", "ВключитьСтандартныйИнтерфейс");
КонецЕсли;
Возврат НадоПредлагать;
КонецФункции
Функция ПредлагатьОбновитьВерсиюПрограммы(Параметры)
Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда
Возврат Ложь;
КонецЕсли;
Параметры.Вставить("ЭтоАдминистраторСистемы", ОбщегоНазначенияПовтИсп.РежимРаботыПрограммы().ЭтоАдминистраторСистемы);
ДатаТекущейВерсии = Константы.ДатаТекущейВерсии.Получить();
НадоПредлагать = ЗначениеЗаполнено(ДатаТекущейВерсии)
И ТекущаяДатаСеанса() > ДобавитьМесяц(ДатаТекущейВерсии, 2);
Возврат НадоПредлагать;
КонецФункции
// Возвращает имя внешней обработки путеводителя по демо-базе или пустое значение, если путеводитель запускать не требуется
//
Функция ИмяОбработкиПутеводительПоДемоБазе()
Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда
Возврат Неопределено;
КонецЕсли;
Если Не ПравоДоступа("Чтение", Метаданные.Справочники.ДополнительныеОтчетыИОбработки) Тогда
Возврат Неопределено;
КонецЕсли;
ПоказыватьПриСтарте = ОбщегоНазначения.ХранилищеОбщихНастроекЗагрузить("ПутеводительПоДемоБазе", "Показывать", Истина);
Если НЕ ПоказыватьПриСтарте Тогда
Возврат Неопределено;
КонецЕсли;
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 1
| ВнешниеОбработки.Ссылка
|ИЗ
| Справочник.ДополнительныеОтчетыИОбработки КАК ВнешниеОбработки
|ГДЕ
| ВнешниеОбработки.ИмяОбъекта = &ИмяОбъекта";
Запрос.УстановитьПараметр("ИмяОбъекта", "ПутеводительПоДемонстрационнойБазе");
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
Возврат ДополнительныеОтчетыИОбработки.ПодключитьВнешнююОбработку(Выборка.Ссылка);
Иначе
Возврат Неопределено;
КонецЕсли;
КонецФункции
// Возвращает значение: требуется ли запускать обработку "Свертка информационной базы" или нет.
//
Функция ТребуетсяОткрытьСверткуБазы()
Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда
Возврат Ложь;
КонецЕсли;
Если Не РольДоступна("ПолныеПрава") Тогда
Возврат Ложь;
КонецЕсли;
ЗначениеХранилища = Константы.СтатусСверткиИнформационнойБазы.Получить();
ПоказыватьПриСтарте = Ложь;
Если ЗначениеХранилища <> Неопределено Тогда
Статус = ЗначениеХранилища.Получить();
Если Статус <> Неопределено Тогда
ПоказыватьПриСтарте = Статус.ПоказыватьПриСтарте;
КонецЕсли;
Иначе
ПоказыватьПриСтарте = Ложь;
КонецЕсли;
Возврат ПоказыватьПриСтарте;
КонецФункции
Функция ОткрыватьДополнительныеОкнаПриЗапуске() Экспорт
Если Не ПравоДоступа("Чтение", Метаданные.Справочники.Организации) Тогда
// Дополнительные окна предназначены только для регулярных пользователей
Возврат Ложь;
КонецЕсли;
Запрос = Новый Запрос();
Запрос.Текст =
"ВЫБРАТЬ РАЗРЕШЕННЫЕ ПЕРВЫЕ 1
| Организация.Ссылка
|ИЗ
| Справочник.Организации КАК Организация";
Если НЕ Запрос.Выполнить().Пустой() Тогда
Возврат Истина;
Иначе
Возврат Ложь;
КонецЕсли;
КонецФункции
Процедура УстановитьСведенияОРекомендуемойВерсииПлатформы(Параметры)
КонфигурацияМоделиСервиса = ОбщегоНазначенияПовтИсп.РазделениеВключено()
Или ПолучитьФункциональнуюОпцию("РаботаВАвтономномРежиме");
Если КонфигурацияМоделиСервиса Тогда
Возврат;
КонецЕсли;
Если Пользователи.ЭтоПолноправныйПользователь(,Истина) Тогда
РекомендуемаяВерсия = "8.3.8";
РекомендуемаяВерсияДляПроверки = "8.3.8.0";
СистемнаяИнформация = Новый СистемнаяИнформация;
СообщитьОРекомендуемойВерсииПлатформы =
ОбщегоНазначенияКлиентСервер.СравнитьВерсии(СистемнаяИнформация.ВерсияПриложения, РекомендуемаяВерсияДляПроверки) < 0;
Если СообщитьОРекомендуемойВерсииПлатформы Тогда
Параметры.Вставить("СообщитьОРекомендуемойВерсииПлатформы", Ложь);
Параметры.Вставить("РекомендуемаяВерсияПлатформы", РекомендуемаяВерсия);
Параметры.Вставить("ТекстСообщенияОРекомендуемойВерсииПлатформы",
НСтр("ru='Для работы с версией 3.0.44 конфигурации ""Бухгалтерии предприятия"" необходимо использовать версию платформы 8.3.8'"));
КонецЕсли;
КонецЕсли;
КонецПроцедуры
Процедура УстановитьПараметрыНачалаРаботы(Параметры)
ПоказыватьБыстрыйСтарт = ПолучитьФункциональнуюОпцию("НачалоРаботы")
И ОбщегоНазначенияБПВызовСервера.ПроверитьНаличиеДоступныхОрганизаций();
Параметры.Вставить("ПоказыватьБыстрыйСтарт", ПоказыватьБыстрыйСтарт);
КонецПроцедуры
////////////////////////////////////////////////////////////////////////////////
// ПРОЦЕДУРЫ И ФУНКЦИИ ПРОВЕРКИ НАЛИЧИЯ И ЗАПОЛНЕНИЯ РЕВИЗИТОВ
// Позволяет определить есть ли табличная часть документа с переданным именем.
//
// Параметры:
// ИмяТабЧасти - строковое имя искомой табличной части,
// МетаданныеДокумента - объект описания метаданных документа, среди реквизитов которого производится поиск.
//
// Возвращаемое значение:
// Истина - нашли реквизит с таким именем, Ложь - не нашли.
//
Функция ЕстьТабЧастьДокумента(ИмяТабЧасти, МетаданныеДокумента) Экспорт
Возврат НЕ (МетаданныеДокумента.ТабличныеЧасти.Найти(ИмяТабЧасти) = Неопределено);
КонецФункции // ЕстьТабЧастьДокумента()
// Позволяет определить есть ли среди реквизитов табличной части документа
// реквизит с переданным именем.
//
// Параметры:
// ИмяРеквизита - строковое имя искомого реквизита,
// МетаданныеДокумента - объект описания метаданных документа, среди реквизитов которого производится поиск.
// ИмяТабЧасти - строковое имя табличной части документа, среди реквизитов которого производится поиск
//
// Возвращаемое значение:
// Истина - нашли реквизит с таким именем, Ложь - не нашли.
//
Функция ЕстьРеквизитТабЧастиДокумента(ИмяРеквизита, МетаданныеДокумента, ИмяТабЧасти) Экспорт
ТабЧасть = МетаданныеДокумента.ТабличныеЧасти.Найти(ИмяТабЧасти);
Если ТабЧасть = Неопределено Тогда // Нет такой таб. части в документе
Возврат Ложь;
Иначе
Возврат НЕ (ТабЧасть.Реквизиты.Найти(ИмяРеквизита) = Неопределено);
КонецЕсли;
КонецФункции // ЕстьРеквизитТабЧастиДокумента()
// Позволяет определить заполнен ли реквизит в документе.
//
// Параметры:
// ИмяРеквизита - Строка - Строковое имя искомого реквизита.
// ДокументОбъект - ДокументОбъект - Объект, в котором проверяется заполненность реквизита.
// МетаданныеДокумента - Метаданные - Объект описания метаданных документа, среди реквизитов которого производится поиск.
//
// Возвращаемое значение:
// Булево.
//
Функция ЕстьНезаполненныйРеквизитДокумента(ИмяРеквизита, ДокументОбъект, МетаданныеДокумента) Экспорт
Результат =
ОбщегоНазначения.ЕстьРеквизитОбъекта(ИмяРеквизита, МетаданныеДокумента)
И НЕ ЗначениеЗаполнено(ДокументОбъект[ИмяРеквизита]);
Возврат Результат;
КонецФункции
Функция ЕстьНезаполненныйРеквизитТабЧастиДокумента(ИмяРеквизита, СтрокаТабЧасти, МетаданныеДокумента, ИмяТабЧасти) Экспорт
Результат =
ЕстьРеквизитТабЧастиДокумента(ИмяРеквизита, МетаданныеДокумента, ИмяТабЧасти)
И НЕ ЗначениеЗаполнено(СтрокаТабЧасти[ИмяРеквизита]);
Возврат Результат;
КонецФункции
// Удаляет из списка проверяемых реквизитов табличные части, если хотя бы одна из них заполнена
//
// Параметры:
// Объект - ДокументОбъект, СправочникОбъект - объект с табличными частями
// ИменаТабличныхЧастей - Массив, Строка - Перечень имен проверяемых табличных частей
// ПроверяемыеРеквизиты - Массив - Перечень проверяемых реквизитов
Процедура ИсключитьИзПроверкиОсновныеТабличныеЧасти(Объект, Знач ИменаТабличныхЧастей, ПроверяемыеРеквизиты) Экспорт
МассивНепроверяемыхРеквизитов = Новый Массив;
Если ТипЗнч(ИменаТабличныхЧастей) = Тип("Строка") Тогда
ИменаТабличныхЧастей = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(ИменаТабличныхЧастей);
КонецЕсли;
ЕстьЗаписи = Ложь;
Для Каждого ИмяТабличнойЧасти Из ИменаТабличныхЧастей Цикл
Если Объект[СокрЛП(ИмяТабличнойЧасти)].Количество() > 0 Тогда
ЕстьЗаписи = Истина;
Прервать;
КонецЕсли;
КонецЦикла;
Если ЕстьЗаписи Тогда
Для Каждого ИмяТабличнойЧасти Из ИменаТабличныхЧастей Цикл
МассивНепроверяемыхРеквизитов.Добавить(СокрЛП(ИмяТабличнойЧасти));
КонецЦикла;
КонецЕсли;
ОбщегоНазначения.УдалитьНепроверяемыеРеквизитыИзМассива(ПроверяемыеРеквизиты, МассивНепроверяемыхРеквизитов);
КонецПроцедуры
// Удаляет из списка проверяемых реквизитов неиспользуемые табличные части и все их реквизиты
//
// Параметры:
// ПроверяемыеРеквизиты - Массив - Перечень проверяемых реквизитов
// НеИспользуемыеТабличныеЧасти - Массив - Перечень имен неиспользуемых табличных частей
Процедура ИсключитьИзПроверкиНеиспользуемыеТабличныеЧасти(ПроверяемыеРеквизиты, НеИспользуемыеТабличныеЧасти) Экспорт
// Исключим из проверки сами списки
ОбщегоНазначения.УдалитьНепроверяемыеРеквизитыИзМассива(ПроверяемыеРеквизиты, НеИспользуемыеТабличныеЧасти);
// Исключим из проверки колонки списков
МассивНепроверяемыхРеквизитов = Новый Массив;
Для Каждого ИмяТабличнойЧасти Из НеИспользуемыеТабличныеЧасти Цикл
ПрефиксРеквизита = ИмяТабличнойЧасти + ".";
ДлинаПрефикса = СтрДлина(ПрефиксРеквизита);
Для Каждого ПроверяемыйРеквизит Из ПроверяемыеРеквизиты Цикл
Если СтрДлина(ПроверяемыйРеквизит) > ДлинаПрефикса
И Лев(ПроверяемыйРеквизит, ДлинаПрефикса) = ПрефиксРеквизита Тогда
МассивНепроверяемыхРеквизитов.Добавить(ПроверяемыйРеквизит);
КонецЕсли;
КонецЦикла;
КонецЦикла;
ОбщегоНазначения.УдалитьНепроверяемыеРеквизитыИзМассива(ПроверяемыеРеквизиты, МассивНепроверяемыхРеквизитов);
КонецПроцедуры
Процедура ОчиститьНеиспользуемыеТабличныеЧасти(Объект, ИменаТабличныхЧастей) Экспорт
Для Каждого ИмяТабличнойЧасти Из ИменаТабличныхЧастей Цикл
ТабличнаяЧасть = Объект[ИмяТабличнойЧасти];
Если ТабличнаяЧасть.Количество() = 0 Тогда
Продолжить;
КонецЕсли;
ТабличнаяЧасть.Очистить();
КонецЦикла;
КонецПроцедуры
// Возвращает значение второго параметра в случае, если значение первого параметра NULL.
// В противном случае будет возвращено значение первого параметра
//
// Параметры:
// ПроверяемоеЗначение - произвольный тип - проверяемое значение
// ВозвращаемоеЗначение - произвольный тип - возвращаемое значение, если значение ПроверяемоеЗначение есть NULL
//
// Возвращаемое значение:
// ПроверяемоеЗначение - если его значение не NULL, ВозвращаемоеЗначение - в ином случае.
//
Функция ЕстьNull(Знач ПроверяемоеЗначение, ВозвращаемоеЗначение) Экспорт
Если ПроверяемоеЗначение = Null Тогда
Возврат ВозвращаемоеЗначение;
Иначе
Возврат ПроверяемоеЗначение;
КонецЕсли;
КонецФункции
///////////////////////////////////////////////////////////////////////////////
// ПРОЦЕДУРЫ И ФУНКЦИИ ПОЛУЧЕНИЯ И УСТАНОВКИ НАСТРОЕК ПОЛЬЗОВАТЕЛЕЙ
// Устарела. Необходимо использовать функцию БСП ОбщегоНазначения.ТекущаяДатаПользователя()
//
Функция ПолучитьРабочуюДату() Экспорт
Возврат ОбщегоНазначения.ТекущаяДатаПользователя();
КонецФункции
// Определяет конфигурации с основной функциональностью
//
// Возвращаемое значение:
// Булево
//
Функция ЭтоВерсияСОсновнойФункциональностью() Экспорт
Возврат ОбщегоНазначенияПовтИсп.РазделениеВключено() ИЛИ СтандартныеПодсистемыСервер.ЭтоБазоваяВерсияКонфигурации();
КонецФункции
////////////////////////////////////////////////////////////////////////////////
// Замена ссылок по информационной базе
// Принимает Соответствие между замещаемыми ссылками и заменителями и заменяет ссылки по информационной базе
Процедура ЗаменитьСсылки(ПарыЗамен) Экспорт
ДвиженияССубконтоИмя = ?(Метаданные.ВариантВстроенногоЯзыка = Метаданные.СвойстваОбъектов.ВариантВстроенногоЯзыка.Английский,
".RecordsWithExtDimensions", ".ДвиженияССубконто");
ЗаменяемыеСсылки = Новый Массив;
Для Каждого Пара Из ПарыЗамен Цикл
ЗаменяемыеСсылки.Добавить(Пара.Ключ);
КонецЦикла;
РезультатыПоиска = НайтиПоСсылкам(ЗаменяемыеСсылки);
// (.Ссылка: исходная ссылка; .Данные: ссылающийся объект; .Метаданные: метаданные ссылающегося объекта)
КешПолей = Новый Соответствие;
Для Каждого Результат Из РезультатыПоиска Цикл
Замещаемое = Результат.Ссылка;
// объект, ссылающийся сам на себя не трогаем!
Если Замещаемое = Результат.Данные Тогда
Продолжить;
КонецЕсли;
ТипЗамещаемого = ТипЗнч(Замещаемое);
Заменитель = ПарыЗамен[Результат.Ссылка];
Если ЭтоСсылочныйОбъектМетаданных(Результат.Метаданные) Тогда
// обработка самого объекта
ОбъектДанных = Результат.Данные.ПолучитьОбъект();
ИменаПолей = ИменаПолейСТипом(Результат.Метаданные.ПолноеИмя(), ТипЗамещаемого, КешПолей, "Ссылка, Ref");
ЗаменитьЗначение(ОбъектДанных, ИменаПолей, Замещаемое, Заменитель);
// обработка табчастей объекта
Для Каждого Табчасть Из Результат.Метаданные.ТабличныеЧасти Цикл
ИменаПолей = ИменаПолейСТипом(Результат.Метаданные.ПолноеИмя()+"."+Табчасть.Имя, ТипЗамещаемого, КешПолей, "Ссылка, Ref");
Для Каждого Табстрока Из ОбъектДанных[Табчасть.Имя] Цикл
ЗаменитьЗначение(Табстрока, ИменаПолей, Замещаемое, Заменитель);
КонецЦикла;
КонецЦикла;
// обработка стандартных табчастей объекта
Если Метаданные.ПланыСчетов.Содержит(Результат.Метаданные) Или Метаданные.ПланыВидовРасчета.Содержит(Результат.Метаданные) Тогда
Для Каждого Табчасть Из Результат.Метаданные.СтандартныеТабличныеЧасти Цикл
ИменаПолей = ИменаПолейСТипом(Результат.Метаданные.ПолноеИмя()+"."+Табчасть.Имя, ТипЗамещаемого, КешПолей, "Ссылка, Ref");
Для Каждого Табстрока Из ОбъектДанных[Табчасть.Имя] Цикл
ЗаменитьЗначение(Табстрока, ИменаПолей, Замещаемое, Заменитель);
КонецЦикла;
КонецЦикла;
КонецЕсли;
ЗаписатьДанные(ОбъектДанных);
ОбъектДанных = Неопределено;
// обработка движений документа
Если Метаданные.Документы.Содержит(Результат.Метаданные) Тогда
Для Каждого Движение Из Результат.Метаданные.Движения Цикл
Если Метаданные.РегистрыБухгалтерии.Содержит(Движение) Тогда
ДопТаблица = ДвиженияССубконтоИмя;
Регистр = РегистрыБухгалтерии[Движение.Имя];
ИменаПолей = ИменаПолейСТипом(Движение.ПолноеИмя(), ТипЗамещаемого, КешПолей, "Регистратор, Recorder");
Набор = НаборЗаписей(Регистр, Новый Структура("Регистратор", Результат.Данные));
ЗначениеЗаменено = Ложь;
Для Каждого Запись Из Набор Цикл
ЗаменитьЗначение(Запись, ИменаПолей, Замещаемое, Заменитель, ЗначениеЗаменено);
ЗаменыЗначенийСубконто = Новый Соответствие();
Для Каждого Субконто ИЗ Запись.СубконтоДт Цикл
Если Субконто.Значение = Замещаемое Тогда
ЗаменыЗначенийСубконто.Вставить(Субконто.Ключ, Заменитель);
КонецЕсли;
КонецЦикла;
Для Каждого Замена Из ЗаменыЗначенийСубконто Цикл
Запись.СубконтоДт.Вставить(Замена.Ключ, Замена.Значение);
КонецЦикла;
ЗаменыЗначенийСубконто.Очистить();
Для Каждого Субконто ИЗ Запись.СубконтоКт Цикл
Если Субконто.Значение = Замещаемое Тогда
ЗаменыЗначенийСубконто.Вставить(Субконто.Ключ, Заменитель);
КонецЕсли;
КонецЦикла;
Для Каждого Замена Из ЗаменыЗначенийСубконто Цикл
Запись.СубконтоКт.Вставить(Замена.Ключ, Замена.Значение);
КонецЦикла;
КонецЦикла;
ЗаписатьДанные(Набор, ЗначениеЗаменено);
Иначе
Если Метаданные.РегистрыНакопления.Содержит(Движение) Тогда
Регистр = РегистрыНакопления[Движение.Имя];
ИначеЕсли Метаданные.РегистрыСведений.Содержит(Движение) Тогда
Регистр = РегистрыСведений[Движение.Имя];
ИначеЕсли Метаданные.РегистрыРасчета.Содержит(Движение) Тогда
Регистр = РегистрыРасчета[Движение.Имя];
КонецЕсли;
ИменаПолей = ИменаПолейСТипом(Движение.ПолноеИмя(), ТипЗамещаемого, КешПолей, "Регистратор, Recorder");
Набор = НаборЗаписей(Регистр, Новый Структура("Регистратор", Результат.Данные));
ЗначениеЗаменено = Ложь;
Для Каждого Запись Из Набор Цикл
ЗаменитьЗначение(Запись, ИменаПолей, Замещаемое, Заменитель, ЗначениеЗаменено);
КонецЦикла;
ЗаписатьДанные(Набор, ЗначениеЗаменено);
КонецЕсли;
КонецЦикла;
// обработка последовательностей, включающих документ
Для Каждого Последовательность Из Метаданные.Последовательности Цикл
Если Последовательность.Документы.Содержит(Результат.Метаданные) Тогда
ИменаПолей = ИменаПолейСТипом(Последовательность.ПолноеИмя(), ТипЗамещаемого, КешПолей, "Регистратор, Recorder");
Набор = НаборЗаписей(Последовательности[Последовательность.Имя], Новый Структура("Регистратор", Результат.Данные));
Для Каждого Запись Из Набор Цикл
ЗаменитьЗначение(Запись, ИменаПолей, Замещаемое, Заменитель);
КонецЦикла;
ЗаписатьДанные(Набор);
КонецЕсли;
КонецЦикла;
КонецЕсли;
// константы
ИначеЕсли Метаданные.Константы.Содержит(Результат.Метаданные) Тогда
Константы[Результат.Метаданные.Имя].Установить(Заменитель);
// регистры сведений (необъектные таблицы)
ИначеЕсли Метаданные.РегистрыСведений.Содержит(Результат.Метаданные) Тогда
ИменаПолей = ИменаПолейСТипом(Результат.Метаданные.ПолноеИмя(), ТипЗамещаемого, КешПолей);
Отборы = ОтборыРегистраСведений(Результат.Метаданные, Результат.Данные);
Набор = НаборЗаписей(РегистрыСведений[Результат.Метаданные.Имя], Отборы);
Таблица = Набор.Выгрузить();
Набор.Очистить();
ЗаписатьДанные(Набор);
ЗаменитьЗначение(Таблица[0], ИменаПолей, Замещаемое, Заменитель);
Для Каждого ИмяПоля Из ИменаПолей Цикл
Если Отборы.Свойство(ИмяПоля) И Отборы[ИмяПоля] = Замещаемое Тогда
Набор.Отбор[ИмяПоля].Установить(Заменитель);
КонецЕсли
КонецЦикла;
Набор.Загрузить(Таблица);
ЗаписатьДанные(Набор);
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Функция ИменаПолейСТипом(ИмяТаблицы, ТипДанных, КешПолейТаблиц=Неопределено, СтрокаИсключений=Неопределено)
ИменаПолей = Новый Массив;
ТекстЗапроса = СтрЗаменить("ВЫБРАТЬ Т.* ИЗ ТаблицаВыборки КАК Т ГДЕ Ложь", "ТаблицаВыборки", ИмяТаблицы);
Если Неопределено<>КешПолейТаблиц Тогда
ПоляТаблицы = КешПолейТаблиц.Получить(ИмяТаблицы);
Если Неопределено=ПоляТаблицы Тогда
Запрос = Новый Запрос(ТекстЗапроса);
ПоляТаблицы = Запрос.Выполнить().Колонки;
КешПолейТаблиц.Вставить(ИмяТаблицы, ПоляТаблицы);
КонецЕсли;
Иначе
Запрос = Новый Запрос(ТекстЗапроса);
ПоляТаблицы = Запрос.Выполнить().Колонки;
КонецЕсли;
Исключения = Новый Структура(СтрокаИсключений);
Для Каждого Поле Из ПоляТаблицы Цикл
Если Поле.ТипЗначения.СодержитТип(ТипДанных) И Не Исключения.Свойство(Поле.Имя) Тогда
ИменаПолей.Добавить(Поле.Имя);
КонецЕсли;
КонецЦикла;
Возврат ИменаПолей;
КонецФункции
Процедура ЗаменитьЗначение(Данные, ИменаПолей, Замещаемое, Заменитель, ЗначениеЗаменено=Ложь)
Для Каждого ИмяПоля Из ИменаПолей Цикл
Если Данные[ИмяПоля] = Замещаемое Тогда
Данные[ИмяПоля] = Заменитель;
ЗначениеЗаменено = Истина;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Процедура ЗаписатьДанные(Данные, Принудительно=Ложь)
Если Данные.Модифицированность() Или Принудительно Тогда
Данные.ОбменДанными.Загрузка = Истина;
Данные.Записать();
КонецЕсли;
КонецПроцедуры
Функция ОтборыРегистраСведений(МетаданныеРегистра, Запись)
Отборы = Новый Структура;
Если МетаданныеРегистра.ПериодичностьРегистраСведений <> Метаданные.СвойстваОбъектов.ПериодичностьРегистраСведений.Непериодический Тогда
Отборы.Вставить("Период", Запись.Период);
КонецЕсли;
Для Каждого Измерение Из МетаданныеРегистра.Измерения Цикл
Отборы.Вставить(Измерение.Имя, Запись[Измерение.Имя]);
КонецЦикла;
Возврат Отборы;
КонецФункции
Функция НаборЗаписей(МенеджерРегистра, Отборы)
Набор = МенеджерРегистра.СоздатьНаборЗаписей();
Для Каждого Отбор Из Отборы Цикл
Набор.Отбор[Отбор.Ключ].Установить(Отбор.Значение);
КонецЦикла;
Набор.Прочитать();
Возврат Набор;
КонецФункции
Функция ЭтоСсылочныйОбъектМетаданных(ОбъектМетаданных)
Возврат Метаданные.Справочники.Содержит(ОбъектМетаданных)
ИЛИ Метаданные.Документы.Содержит(ОбъектМетаданных)
ИЛИ Метаданные.Перечисления.Содержит(ОбъектМетаданных)
ИЛИ Метаданные.ПланыВидовХарактеристик.Содержит(ОбъектМетаданных)
ИЛИ Метаданные.ПланыСчетов.Содержит(ОбъектМетаданных)
ИЛИ Метаданные.ПланыВидовРасчета.Содержит(ОбъектМетаданных)
ИЛИ Метаданные.БизнесПроцессы.Содержит(ОбъектМетаданных)
//ИЛИ БизнесПроцессы.ТипВсеСсылкиТочекМаршрутаБизнесПроцессов().СодержитТип(Тип)
ИЛИ Метаданные.Задачи.Содержит(ОбъектМетаданных)
ИЛИ Метаданные.ПланыОбмена.Содержит(ОбъектМетаданных);
КонецФункции
// Заменяет отбор, установленный пользователем в сохраненной настройке списка, на отбор, установленный программно при создании формы списка.
// Вызывается при восстановлении пользовательских настроек динамического списка
// из обработчика списка ПередЗагрузкойПользовательскихНастроекНаСервере.
//
// Параметры:
// Список - ДинамическийСписок - Динамический список, для которого устанавливается отбор.
// Настройки - ПользовательскиеНастройкиКомпоновкиДанных - Восстанавливаемые настройки списка.
// ИмяОтбора - Строка - Имя элемента отбора.
//
Процедура ВосстановитьОтборСписка(Список, Настройки, ИмяОтбора) Экспорт
Отборы = ОбщегоНазначенияКлиентСервер.НайтиЭлементыИГруппыОтбора(
Список.КомпоновщикНастроек.Настройки.Отбор, ИмяОтбора);
Если Отборы.Количество() = 0 Тогда
Возврат;
КонецЕсли;
ЭлементОтбора = Отборы[0];
ИдентификаторНастройки = ЭлементОтбора.ИдентификаторПользовательскойНастройки;
Для каждого ЭлементНастроек Из Настройки.Элементы Цикл
Если ТипЗнч(ЭлементНастроек) = Тип("ЭлементОтбораКомпоновкиДанных")
И ЭлементНастроек.ИдентификаторПользовательскойНастройки = ИдентификаторНастройки Тогда
ЭлементНастроек.ПравоеЗначение = ЭлементОтбора.ПравоеЗначение;
ЭлементНастроек.Использование = ЭлементОтбора.Использование;
Прервать;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
///////////////////////////////////////////////////////////////////////////////
// ПРОЦЕДУРЫ И ФУНКЦИИ РАБОТЫ С СОХРАНЕНИЕМ И ОТПРАВКОЙ ДОКУМЕНТОВ ПО ЭЛ.ПОЧТЕ
// Процедура формирует имя сохраняемого файла путем формирования представления документа и удаления из него символов "точка"
Процедура УстановитьИмяСохраняемогоФайла(ОбъектыПечати, КоллекцияПечатныхФорм)
Если НЕ КоллекцияПечатныхФорм.Количество() = 1 Тогда
Возврат;
КонецЕсли;
ПечатнаяФорма = КоллекцияПечатныхФорм[0];
ИмяФайлаПечатнойФормы = Новый Соответствие;
Для Каждого ОбъектПечати Из ОбъектыПечати Цикл
ПредставлениеДокументаДляПечатнойФормы = ОбщегоНазначенияБПВызовСервера.СформироватьЗаголовокДокумента(
ОбъектПечати.Значение, ПечатнаяФорма.СинонимМакета);
ПредставлениеДокументаДляПечатнойФормы = СтрЗаменить(ПредставлениеДокументаДляПечатнойФормы, ".", "");
ИмяФайлаПечатнойФормы.Вставить(ОбъектПечати.Значение, ПредставлениеДокументаДляПечатнойФормы);
КонецЦикла;
ПечатнаяФорма.ИмяФайлаПечатнойФормы = ИмяФайлаПечатнойФормы;
КонецПроцедуры
// Устанавливает имя сохраняемого файла.
//
// Параметры:
// МассивОбъектов - Массив - Массив объектов печати.
// КоллекцияПечатныхФорм - Массив - Коллекция печатных форм.
// ОбъектыПечати - Массив - Массив объектов печати.
// ПараметрыВывода - Структура - Параметры вывода печатной формы.
//
Процедура ЗаполнитьДополнительныеПараметрыПечати(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати,
ПараметрыВывода = Неопределено) Экспорт
Если ТипЗнч(ПараметрыВывода) = Тип("Структура") И ПараметрыВывода.Свойство("НеПереопределятьИмяФайла") Тогда
Возврат;
КонецЕсли;
УстановитьИмяСохраняемогоФайла(ОбъектыПечати, КоллекцияПечатныхФорм);
КонецПроцедуры
////////////////////////////////////////////////////////////////////////////////
// ПРОЦЕДУРЫ И ФУНКЦИИ РАБОТЫ СО СТАТУСОМ ДОКУМЕНТОВ
// Позволяет получить индекс картинки состояния документа из коллекции СостоянияДокумента
// по свойствам Проведен/ПометкаУдаления/РучнаяКорректировка
//
// Параметры:
// Объект - основной реквизит формы документа, с типом ДанныеФормыСтруктура
//
Функция СостояниеДокумента(Объект) Экспорт
РучнаяКорректировка = Неопределено;
Если Объект.Свойство("РучнаяКорректировка", РучнаяКорректировка) Тогда
Если Объект.РучнаяКорректировка Тогда
Если Объект.ПометкаУдаления Тогда
СостояниеДокумента = 10;
ИначеЕсли НЕ Объект.Проведен Тогда
СостояниеДокумента = 9;
Иначе
СостояниеДокумента = 8;
КонецЕсли;
Иначе
Если Объект.ПометкаУдаления Тогда
СостояниеДокумента = 2;
ИначеЕсли Объект.Проведен Тогда
СостояниеДокумента = 1;
Иначе
СостояниеДокумента = 0;
КонецЕсли;
КонецЕсли;
Иначе
Если Объект.ПометкаУдаления Тогда
СостояниеДокумента = 2;
ИначеЕсли Объект.Проведен Тогда
СостояниеДокумента = 1;
Иначе
СостояниеДокумента = 0;
КонецЕсли;
КонецЕсли;
Возврат СостояниеДокумента;
КонецФункции
#Область УстаревшийПрограммныйИнтерфейс
// Устарела. Следует использовать ОбщегоНазначения.ЕстьРеквизитОбъекта
// Позволяет определить есть ли среди реквизитов шапки документа
// реквизит с переданным именем.
//
// Параметры:
// ИмяРеквизита - строковое имя искомого реквизита,
// МетаданныеДокумента - объект описания метаданных документа, среди реквизитов которого производится поиск.
//
// Возвращаемое значение:
// Истина - нашли реквизит с таким именем, Ложь - не нашли.
//
Функция ЕстьРеквизитДокумента(ИмяРеквизита, МетаданныеДокумента) Экспорт
Возврат НЕ (МетаданныеДокумента.Реквизиты.Найти(ИмяРеквизита) = Неопределено);
КонецФункции // ЕстьРеквизитДокумента()
#КонецОбласти
////////////////////////////////////////////////////////////////////////////////
// ПРОЦЕДУРЫ И ФУНКЦИИ РАБОТЫ С ПЛАНАМИ ОБМЕНА
// Проверяет, используются ли планы обмена.
// Параметры:
// ОтборРаспределеннаяИнформационнаяБаза - <Булево> - Если Истина, то проверяются
// только распределенные информационные базы, если Ложь, то обмены с другими
// программами.
Функция ИспользуютсяПланыОбмена(ОтборРаспределеннаяИнформационнаяБаза) Экспорт
Результат = Ложь;
ПланыОбменаПодсистемы = Новый Массив;
ОбменДаннымиПереопределяемый.ПолучитьПланыОбмена(ПланыОбменаПодсистемы);
Для каждого ПланОбмена Из ПланыОбменаПодсистемы Цикл
Если ПланОбмена.РаспределеннаяИнформационнаяБаза <> ОтборРаспределеннаяИнформационнаяБаза Тогда
Продолжить;
КонецЕсли;
Запрос = Новый Запрос;
ТекстЗапроса =
"ВЫБРАТЬ
| ПроверяемыйПланОбмена.Ссылка
|ИЗ
| ПланОбмена.%1 КАК ПроверяемыйПланОбмена
|ГДЕ
| ПроверяемыйПланОбмена.ПометкаУдаления = ЛОЖЬ И ПроверяемыйПланОбмена.ЭтотУзел = Ложь";
ТекстЗапроса = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(ТекстЗапроса, ПланОбмена.Имя);
Запрос.Текст = ТекстЗапроса;
РезультатЗапроса = Запрос.Выполнить();
Если НЕ РезультатЗапроса.Пустой() Тогда
Результат = Истина;
Прервать;
КонецЕсли;
КонецЦикла;
Возврат Результат
КонецФункции
// Устанавливает значения общих констант загрузке данных из сервиса
//
Процедура УстановитьЗначенияКонстантПоставкиПослеЗагрузкиДанных() Экспорт
Если ОбщегоНазначенияПовтИсп.РазделениеВключено() Тогда
// Значения общих констант устанавливаются при включении разделения по областям данных
Возврат;
КонецЕсли;
Если Константы.ПредпринимательВСервисе.Получить() Тогда
// Данные загружены из 1С:Предприниматель 2015
Константы.ПредпринимательВСервисе.Установить(Ложь);
КонецЕсли;
КонецПроцедуры
// Устанавливает значения общих констант при включении разделения
//
Процедура УстановитьЗначенияКонстантПоставкиПриВключенииРазделенияПоОбластямДанных() Экспорт
Константы.ПредпринимательВСервисе.Установить(СтандартныеПодсистемыСервер.ЭтоБазоваяВерсияКонфигурации());
КонецПроцедуры
// Обработчик обновления ИБ
//
Процедура ЗаполнитьКонстантуПредпринимательВСервисеПриОбновлении() Экспорт
Если ПланыОбмена.ГлавныйУзел() <> Неопределено Тогда // В подчиненных узлах РИБ не выполняется
Возврат;
КонецЕсли;
МенеджерЗначения = Константы.ПредпринимательВСервисе.СоздатьМенеджерЗначения();
МенеджерЗначения.Значение = ОбщегоНазначенияПовтИсп.РазделениеВключено() И СтандартныеПодсистемыСервер.ЭтоБазоваяВерсияКонфигурации();
ОбновлениеИнформационнойБазы.ЗаписатьДанные(МенеджерЗначения, Истина);
КонецПроцедуры