// Библиотека проектных подсистем для упрощения разработки архитектуры на 1С: Предприятие 8,
// включая доработку типовых конфигураций.
//
// Copyright First BIT company
//
//   Licensed under the Apache License, Version 2.0 (the "License");
//   you may not use this file except in compliance with the License.
//   You may obtain a copy of the License at
//
//       http://www.apache.org/licenses/LICENSE-2.0
//
//   Unless required by applicable law or agreed to in writing, software
//   distributed under the License is distributed on an "AS IS" BASIS,
//   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
//   See the License for the specific language governing permissions and
//   limitations under the License.
//
// URL:    https://github.com/firstBitSportivnaya/PSSL/
//

#Область СлужебныйПрограммныйИнтерфейс

Функция СписокФормПриОткрытии() Экспорт

	СписокФорм = Новый Соответствие;

	// Добавление
	СписокФорм.Вставить("Документ.ДемоРаботаСФормами.Форма.ФормаДокумента", Истина);
	// КонецДобавления

	Возврат Новый ФиксированноеСоответствие(СписокФорм);

КонецФункции

Функция СписокФормПередЗаписью() Экспорт

	СписокФорм = Новый Соответствие;

	// Добавление

	// КонецДобавления

	Возврат Новый ФиксированноеСоответствие(СписокФорм);

КонецФункции

Функция СписокФормПослеЗаписи() Экспорт

	СписокФорм = Новый Соответствие;

	// Добавление

	// КонецДобавления

	Возврат Новый ФиксированноеСоответствие(СписокФорм);

КонецФункции

#КонецОбласти


// Библиотека проектных подсистем для упрощения разработки архитектуры на 1С: Предприятие 8,
// включая доработку типовых конфигураций.
//
// Copyright First BIT company
//
//   Licensed under the Apache License, Version 2.0 (the "License");
//   you may not use this file except in compliance with the License.
//   You may obtain a copy of the License at
//
//       http://www.apache.org/licenses/LICENSE-2.0
//
//   Unless required by applicable law or agreed to in writing, software
//   distributed under the License is distributed on an "AS IS" BASIS,
//   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
//   See the License for the specific language governing permissions and
//   limitations under the License.
//
// URL:    https://github.com/firstBitSportivnaya/PSSL/
//

#Область ПрограммныйИнтерфейс

// Процедура - Управление формой переопределяемая
//
// Параметры:
//  Форма	 - ФормаКлиентскогоПриложения - модифицируемая форма
//
Процедура УправлениеФормойПереопределяемая(Форма) Экспорт

	ИмяФормы = Форма.ИмяФормы;

	Если ИмяФормы = "ТипМетаданных.ИмяОбработки.Форма.ИмяФормы" Тогда

	КонецЕсли;

КонецПроцедуры

#КонецОбласти // ПрограммныйИнтерфейс


// Библиотека проектных подсистем для упрощения разработки архитектуры на 1С: Предприятие 8,
// включая доработку типовых конфигураций.
//
// Copyright First BIT company
//
//   Licensed under the Apache License, Version 2.0 (the "License");
//   you may not use this file except in compliance with the License.
//   You may obtain a copy of the License at
//
//       http://www.apache.org/licenses/LICENSE-2.0
//
//   Unless required by applicable law or agreed to in writing, software
//   distributed under the License is distributed on an "AS IS" BASIS,
//   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
//   See the License for the specific language governing permissions and
//   limitations under the License.
//
// URL:    https://github.com/firstBitSportivnaya/PSSL/
//

////////////////////////////////////////////////////////////////////////////////
// Формы (сервер): для серверных функций обработок форм планов видов характеристик

#Область ПрограммныйИнтерфейс

// Процедура носит ознакомительный характер по работе с подсистемой "пбп_РаботаСФормами", не переносить.
//
Процедура пбп_ПредопределенныеЗначенияФормаСпискаПриСозданииНаСервере(Форма, Отказ, СтандартнаяОбработка, ДополнительныеПараметры = Неопределено) Экспорт

	#Область ДемоПример

	#Область РаботаСЭлементамиФормы

	Список = Форма.Список;
	Если Список.ПроизвольныйЗапрос Тогда
		Элементы = Форма.Элементы;
		Список.ТекстЗапроса = пбп_СхемыЗапросов.ДобавитьПолеВыборкиВЗапрос(Список.ТекстЗапроса,
			"Пароль", "Пароль",,, Истина);

		Если ДополнительныеПараметры <> Неопределено И ДополнительныеПараметры.Свойство("Предопределенный") Тогда
			ВыраженияПолей = Новый СписокЗначений;
			ВыраженияПолей.Добавить("Предопределенный", "Предопределенный");
			ВыраженияПолей.Добавить("ИмяПредопределенныхДанных", "ИмяПредопределенныхДанных");
			Список.ТекстЗапроса = пбп_СхемыЗапросов.ДобавитьПоляВыборкиВЗапрос(Список.ТекстЗапроса,
				ВыраженияПолей,,,, Истина);

			пбп_РаботаСФормами.СоздатьПоле(Форма, "Предопределенный", Элементы.Список,
				"Предопределенный", 2, "Список.Предопределенный");
			пбп_РаботаСФормами.СоздатьПоле(Форма, "ИмяПредопределенныхДанных", Элементы.Список,
				"Имя предопределенных данных", 1, "Список.Предопределенный");
		КонецЕсли;

		пбп_РаботаСФормами.СоздатьПоле(Форма, "Пароль", Элементы.Список, "Пароль", 2, "Список.Пароль");
	КонецЕсли;

	#КонецОбласти

	#КонецОбласти //ДемоПример

КонецПроцедуры

#КонецОбласти

#Область СлужебныеПроцедурыИФункции

#КонецОбласти


// Библиотека проектных подсистем для упрощения разработки архитектуры на 1С: Предприятие 8,
// включая доработку типовых конфигураций.
//
// Copyright First BIT company
//
//   Licensed under the Apache License, Version 2.0 (the "License");
//   you may not use this file except in compliance with the License.
//   You may obtain a copy of the License at
//
//       http://www.apache.org/licenses/LICENSE-2.0
//
//   Unless required by applicable law or agreed to in writing, software
//   distributed under the License is distributed on an "AS IS" BASIS,
//   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
//   See the License for the specific language governing permissions and
//   limitations under the License.
//
// URL:    https://github.com/firstBitSportivnaya/PSSL/
//

#Область СлужебныйПрограммныйИнтерфейс

Функция СписокФормПриЧтенииНаСервере() Экспорт

	СписокФорм = Новый Соответствие;

	// Добавление

	// КонецДобавления

	Возврат Новый ФиксированноеСоответствие(СписокФорм);

КонецФункции

Функция СписокФормПриСозданииНаСервере() Экспорт

	СписокФорм = Новый Соответствие;

	// Добавление
	СписокФорм.Вставить("Документ.ДемоРаботаСФормами.Форма.ФормаДокумента", Истина);
	СписокФорм.Вставить("ПланВидовХарактеристик.пбп_ПредопределенныеЗначения.Форма.ФормаСписка", Истина);
	// КонецДобавления

	Возврат Новый ФиксированноеСоответствие(СписокФорм);

КонецФункции

Функция СписокФормПередЗаписьюНаСервере() Экспорт

	СписокФорм = Новый Соответствие;

	// Добавление

	// КонецДобавления

	Возврат Новый ФиксированноеСоответствие(СписокФорм);

КонецФункции

Функция СписокФормПослеЗаписиНаСервере() Экспорт

	СписокФорм = Новый Соответствие;

	// Добавление

	// КонецДобавления

	Возврат Новый ФиксированноеСоответствие(СписокФорм);

КонецФункции

#КонецОбласти


// Библиотека проектных подсистем для упрощения разработки архитектуры на 1С: Предприятие 8,
// включая доработку типовых конфигураций.
//
// Copyright First BIT company
//
//   Licensed under the Apache License, Version 2.0 (the "License");
//   you may not use this file except in compliance with the License.
//   You may obtain a copy of the License at
//
//       http://www.apache.org/licenses/LICENSE-2.0
//
//   Unless required by applicable law or agreed to in writing, software
//   distributed under the License is distributed on an "AS IS" BASIS,
//   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
//   See the License for the specific language governing permissions and
//   limitations under the License.
//
// URL:    https://github.com/firstBitSportivnaya/PSSL/
//

///////////////////////////////////////////////////////////////////////////////////////////////////////
// Модуль предназначен для подключения обработчиков обновления информационной базы,
// подключения библиотеки к регистру "Версии подсистем".
//
// Для того чтобы выполнилось обновление, необходимо в модуле БСП "ПодсистемыКонфигурацииПереопределяемый"
// в процедуре "ПриДобавленииПодсистем" вставить строчку "ОбщийМодуль.ПриДобавленииПодсистем(МодулиПодсистем)".
// пример: "пбп_ОбновлениеИнформационнойБазыПБП.ПриДобавленииПодсистем(МодулиПодсистем)".
// Подробную информацию по подключению подсистем см. на сайте ИТС -> Библиотека стандартных подсистем.
///////////////////////////////////////////////////////////////////////////////////////////////////////

#Область ПрограммныйИнтерфейс

#Область ДляВызоваИзДругихПодсистем

// См. ПодсистемыКонфигурацииПереопределяемый.ПриДобавленииПодсистем.
Процедура ПриДобавленииПодсистем(МодулиПодсистем) Экспорт

	МодулиПодсистем.Добавить("пбп_ОбновлениеИнформационнойБазыПБП");

КонецПроцедуры

// СтандартныеПодсистемы.ОбновлениеВерсииИБ

////////////////////////////////////////////////////////////////////////////////
// Сведения о библиотеке (или конфигурации).

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

	Описание.Имя = "ПроектнаяБиблиотекаПодсистем";
	Описание.Версия = "1.0.10.7";

	// Требуется библиотека стандартных подсистем.
	Описание.ТребуемыеПодсистемы.Добавить("СтандартныеПодсистемы");

КонецПроцедуры

////////////////////////////////////////////////////////////////////////////////
// Обработчики обновления информационной базы.

Процедура ПриДобавленииОбработчиковОбновления(Обработчики) Экспорт

	Обработчик = Обработчики.Добавить();
	Обработчик.Процедура = "пбп_ОбновлениеИнформационнойБазыПБП.НачальноеЗаполнениеПредопределенныхЭлементов";
	Обработчик.НачальноеЗаполнение = Истина;
	Обработчик.РежимВыполнения = "Монопольно";

КонецПроцедуры

Процедура ПередОбновлениемИнформационнойБазы() Экспорт

КонецПроцедуры

Процедура ПослеОбновленияИнформационнойБазы(Знач ПредыдущаяВерсия, Знач ТекущаяВерсия,
		Знач ВыполненныеОбработчики, ВыводитьОписаниеОбновлений, МонопольныйРежим) Экспорт

КонецПроцедуры

Процедура ПриПодготовкеМакетаОписанияОбновлений(Знач Макет) Экспорт

КонецПроцедуры

Процедура ПриДобавленииОбработчиковПереходаСДругойПрограммы(Обработчики) Экспорт

КонецПроцедуры

Процедура ПриОпределенииРежимаОбновленияДанных(РежимОбновленияДанных, СтандартнаяОбработка) Экспорт

КонецПроцедуры

Процедура ПриЗавершенииПереходаСДругойПрограммы(Знач ПредыдущееИмяКонфигурации, Знач ПредыдущаяВерсияКонфигурации, Параметры) Экспорт

КонецПроцедуры

#КонецОбласти

#КонецОбласти

#Область СлужебныеПроцедурыИФункции

Процедура НачальноеЗаполнениеПредопределенныхЭлементов() Экспорт

	пбп_ПредопределенныеЗначения.ЗаполнениеПредопределенныхЭлементов();

КонецПроцедуры

#КонецОбласти


Процедура ОбработкаПолученияПолейПредставления(Источник, Поля, СтандартнаяОбработка) Экспорт

	Событие = "ОбработкаПолученияПолейПредставления";
	ИмяМетода = ПолучитьИмяМетода(Источник, Событие);

	Если ЗначениеЗаполнено(ИмяМетода) Тогда
		Попытка
			ПараметрыМетода = Новый Массив;
			ПараметрыМетода.Добавить(Источник);
			ПараметрыМетода.Добавить(Поля);
			ПараметрыМетода.Добавить(СтандартнаяОбработка);

			пбп_Переадресация.ВыполнитьМетодКонфигурации(ИмяМетода, ПараметрыМетода);

			Поля					= ПараметрыМетода[1];
			СтандартнаяОбработка	= ПараметрыМетода[2];
		Исключение
			ВызватьИсключение ПолучитьТекстОшибки(ИмяМетода, ОписаниеОшибки());
		КонецПопытки;
	КонецЕсли;

КонецПроцедуры

// Обработка получения представления
//
// Параметры:
//  Источник			 - СправочникМенеджер, ДокументМенеджер, ПланВидовХарактеристикМенеджер, ПланСчетовМенеджер,
// ПланВидовРасчетаМенеджер, ПланОбменаМенеджер, БизнесПроцессМенеджер, ЗадачаМенеджер - источник подписки на событие
//  Данные				 - Структура	 - значения полей, из которых формируется представление
//  Представление		 - Строка		 - строка, в которую нужно поместить представление объекта или ссылки
//  СтандартнаяОбработка - Булево		 - стандартная обработка
//

Процедура ОбработкаПолученияПредставления(Источник, Данные, Представление, СтандартнаяОбработка) Экспорт

	Событие = "ОбработкаПолученияПредставления";
	ИмяМетода = ПолучитьИмяМетода(Источник, Событие);

	Если ЗначениеЗаполнено(ИмяМетода) Тогда
		Попытка
			ПараметрыМетода = Новый Массив;
			ПараметрыМетода.Добавить(Источник);
			ПараметрыМетода.Добавить(Данные);
			ПараметрыМетода.Добавить(Представление);
			ПараметрыМетода.Добавить(СтандартнаяОбработка);

			пбп_Переадресация.ВыполнитьМетодКонфигурации(ИмяМетода, ПараметрыМетода);

			Данные					= ПараметрыМетода[1];
			Представление			= ПараметрыМетода[2];
			СтандартнаяОбработка	= ПараметрыМетода[3];
		Исключение
			ВызватьИсключение ПолучитьТекстОшибки(ИмяМетода, ОписаниеОшибки());
		КонецПопытки;
	КонецЕсли;

КонецПроцедуры

// Обработка после записи версий истории данных
//
// Параметры:
//  Источник			 - СправочникМенеджер, КонстантаМенеджер, ДокументМенеджер,
// РегистрСведенийМенеджер, ПланВидовХарактеристикМенеджер, ПланСчетовМенеджер, ПланВидовРасчетаМенеджер,
// ПланОбменаМенеджер, БизнесПроцессМенеджер, ЗадачаМенеджер - источник подписки на событие
//  ИнформацияОЗаписиВерсий	 - КоллекцияИнформацииОЗаписиВерсииИсторииДанных 	 - информация о записи версий истории данных
//

Процедура ОбработкаПослеЗаписиВерсийИсторииДанных(Источник, ИнформацияОЗаписиВерсий) Экспорт

	Событие = "ОбработкаПослеЗаписиВерсийИсторииДанных";
	ИмяМетода = ПолучитьИмяМетода(Источник, Событие);

	Если ЗначениеЗаполнено(ИмяМетода) Тогда
		Попытка
			ПараметрыМетода = Новый Массив;
			ПараметрыМетода.Добавить(Источник);
			ПараметрыМетода.Добавить(ИнформацияОЗаписиВерсий);

			пбп_Переадресация.ВыполнитьМетодКонфигурации(ИмяМетода, ПараметрыМетода);

			ИнформацияОЗаписиВерсий	= ПараметрыМетода[1];
		Исключение
			ВызватьИсключение ПолучитьТекстОшибки(ИмяМетода, ОписаниеОшибки());
		КонецПопытки;
	КонецЕсли;

КонецПроцедуры

#Область Задачи

// Обработка проверки выполнения
//
// Параметры:
//  Источник	 - ЗадачаОбъект	 - источник подписки на событие
//  Результат	 - Булево		 - результат
//

Процедура ОбработкаПроверкиВыполнения(Источник, Результат) Экспорт

	Событие = "ОбработкаПроверкиВыполнения";
	ИмяМетода = ПолучитьИмяМетода(Источник, Событие);

	Если ЗначениеЗаполнено(ИмяМетода) Тогда
		Попытка
			ПараметрыМетода = Новый Массив;
			ПараметрыМетода.Добавить(Источник);
			ПараметрыМетода.Добавить(Результат);

			пбп_Переадресация.ВыполнитьМетодКонфигурации(ИмяМетода, ПараметрыМетода);

			Результат	= ПараметрыМетода[1];
		Исключение
			ВызватьИсключение ПолучитьТекстОшибки(ИмяМетода, ОписаниеОшибки());
		КонецПопытки;
	КонецЕсли;

КонецПроцедуры

// Перед выполнением
//
// Параметры:
//  Источник - ЗадачаОбъект	 - источник подписки на событие
//  Отказ	 - Булево		 - отказ
//

Процедура ПередВыполнением(Источник, Отказ) Экспорт

	Событие = "ПередВыполнением";
	ИмяМетода = ПолучитьИмяМетода(Источник, Событие);

	ВыполнитьСПараметрамиИсточникИОтказ(ИмяМетода, Источник, Отказ);

КонецПроцедуры

// Перед интерактивным выполнением
//
// Параметры:
//  Источник - ЗадачаОбъект	 - источник подписки на событие
//  Отказ	 - Булево		 - отказ
//

Процедура ПередИнтерактивнымВыполнением(Источник, Отказ) Экспорт

	Событие = "ПередИнтерактивнымВыполнением";
	ИмяМетода = ПолучитьИмяМетода(Источник, Событие);

	ВыполнитьСПараметрамиИсточникИОтказ(ИмяМетода, Источник, Отказ);

КонецПроцедуры

// При выполнении
//
// Параметры:
//  Источник - ЗадачаОбъект	 - источник подписки на событие
//  Отказ	 - Булево		 - отказ
//

Процедура ПриВыполнении(Источник, Отказ) Экспорт

	Событие = "ПриВыполнении";
	ИмяМетода = ПолучитьИмяМетода(Источник, Событие);

	ВыполнитьСПараметрамиИсточникИОтказ(ИмяМетода, Источник, Отказ);

КонецПроцедуры

#КонецОбласти // Задачи

#Область ПланыОбмена

// При отправке данных подчиненному
//
// Параметры:
//  Источник				 - ПланОбменаОбъект			 - источник подписки на событие
//  ЭлементДанных			 - Произвольный				 - элемент данных
//  ОтправкаЭлемента		 - ОтправкаЭлементаДанных	 - отправка элемента данных
//  СозданиеНачальногоОбраза - Булево					 - создани начального образа
//

Процедура ПриОтправкеДанныхПодчиненному(Источник, ЭлементДанных, ОтправкаЭлемента, СозданиеНачальногоОбраза) Экспорт

	Событие = "ПриОтправкеДанныхПодчиненному";
	ИмяМетода = ПолучитьИмяМетода(Источник, Событие);

	ПриОтправкеДанных(ИмяМетода, Источник, ЭлементДанных,
		ОтправкаЭлемента, СозданиеНачальногоОбраза);

КонецПроцедуры

// При отправке данных главному
//
// Параметры:
//  Источник				 - ПланОбменаОбъект			 - источник подписки на событие
//  ЭлементДанных			 - Произвольный				 - элемент данных
//  ОтправкаЭлемента		 - ОтправкаЭлементаДанных	 - отправка элемента данных
//

Процедура ПриОтправкеДанныхГлавному(Источник, ЭлементДанных, ОтправкаЭлемента) Экспорт

	Событие = "ПриОтправкеДанныхГлавному";
	ИмяМетода = ПолучитьИмяМетода(Источник, Событие);

	ПриОтправкеДанных(ИмяМетода, Источник, ЭлементДанных, ОтправкаЭлемента);

КонецПроцедуры

// При получении данных от подчиненного
//
// Параметры:
//  Источник			 - ПланОбменаОбъект			 - источник подписки на событие
//  ЭлементДанных		 - Произвольный				 - элемент данных
//  ПолучениеЭлемента	 - ПолучениеЭлементаДанных	 - получение элемента данных
//  ОтправкаНазад		 - Булево					 - отправка назад
//

Процедура ПриПолученииДанныхОтПодчиненного(Источник, ЭлементДанных, ПолучениеЭлемента, ОтправкаНазад) Экспорт

	Событие = "ПриПолученииДанныхОтПодчиненного";
	ИмяМетода = ПолучитьИмяМетода(Источник, Событие);

	ПриПолученииДанных(ИмяМетода, Источник, ЭлементДанных, ПолучениеЭлемента, ОтправкаНазад);

КонецПроцедуры

// При получении данных от главного
//
// Параметры:
//  Источник			 - ПланОбменаОбъект			 - источник подписки на событие
//  ЭлементДанных		 - Произвольный				 - элемент данных
//  ПолучениеЭлемента	 - ПолучениеЭлементаДанных	 - получение элемента данных
//  ОтправкаНазад		 - Булево					 - отправка назад
//

Процедура ПриПолученииДанныхОтГлавного(Источник, ЭлементДанных, ПолучениеЭлемента, ОтправкаНазад) Экспорт

	Событие = "ПриПолученииДанныхОтГлавного";
	ИмяМетода = ПолучитьИмяМетода(Источник, Событие);

	ПриПолученииДанных(ИмяМетода, Источник, ЭлементДанных, ПолучениеЭлемента, ОтправкаНазад);

КонецПроцедуры

// При отправке данных узла подчиненному
//
// Параметры:
//  Источник		 - ПланОбменаОбъект	 - источник подписки на событие
//  ЭлементДанных	 - Произвольный		 - элемент данных
//  Игнорировать	 - Булево			 - игнорировать
//


Функция КонстантыОбработкаПроверкиЗаполнения() Экспорт

	Соответствие = Новый Соответствие;

	// Добавление

	// КонецДобавления

	ОбработатьСоответствиеКонстанты(Соответствие);

	Возврат Соответствие;

КонецФункции

// Определяет соответствие типа источника подписки и имени метода.
//
// Возвращаемое значение:
//   Соответствие - в качестве ключа передается тип объекта источника подписки,
// 					а в качестве значения имя исполняемого метода.
//
// Пример:
// Соответствие.Вставить(Тип("КонстантаМенеджерЗначения.ДополнительныйЯзык1"),
// 		"ДополнительныйЯзык1ОбработкаФормированияПоВерсииИсторииДанных");
//

Функция КонстантыОбработкаФормированияПоВерсииИсторииДанных() Экспорт

	Соответствие = Новый Соответствие;

	// Добавление

	// КонецДобавления

	ОбработатьСоответствиеКонстанты(Соответствие);

	Возврат Соответствие;

КонецФункции

#КонецОбласти // Константы

#Область РегистрыСведений

#Область НаборЗаписей

// Определяет соответствие типа источника подписки и имени метода.
//
// Возвращаемое значение:
//   Соответствие - в качестве ключа передается тип объекта источника подписки,
// 					а в качестве значения имя исполняемого метода.
//
// Пример:
// Соответствие.Вставить(Тип("РегистрСведенийНаборЗаписей.ШтрихкодыНоменклатуры"), "ШтрихкодыНоменклатурыПередЗаписью");
//

Функция РегистрыСведенийПередЗаписью() Экспорт

	Соответствие = Новый Соответствие;

	// Добавление

	// КонецДобавления

	ОбработатьСоответствиеРегистрыСведений(Соответствие);

	Возврат Соответствие;

КонецФункции

// Определяет соответствие типа источника подписки и имени метода.
//
// Возвращаемое значение:
//   Соответствие - в качестве ключа передается тип объекта источника подписки,
// 					а в качестве значения имя исполняемого метода.
//
// Пример:
// Соответствие.Вставить(Тип("РегистрСведенийНаборЗаписей.ШтрихкодыНоменклатуры"), "ШтрихкодыНоменклатурыПриЗаписи");
//

Функция РегистрыСведенийПриЗаписи() Экспорт

	Соответствие = Новый Соответствие;

	// Добавление

	// КонецДобавления

	ОбработатьСоответствиеРегистрыСведений(Соответствие);

	Возврат Соответствие;

КонецФункции

// Определяет соответствие типа источника подписки и имени метода.
//
// Возвращаемое значение:
//   Соответствие - в качестве ключа передается тип объекта источника подписки,
// 					а в качестве значения имя исполняемого метода.
//
// Пример:
// Соответствие.Вставить(Тип("РегистрСведенийНаборЗаписей.ШтрихкодыНоменклатуры"), "ШтрихкодыНоменклатурыОбработкаЗаполнения");
//

Функция РегистрыСведенийОбработкаЗаполнения() Экспорт

	Соответствие = Новый Соответствие;

	// Добавление

	// КонецДобавления

	ОбработатьСоответствиеРегистрыСведений(Соответствие);

	Возврат Соответствие;

КонецФункции

// Определяет соответствие типа источника подписки и имени метода.
//
// Возвращаемое значение:
//   Соответствие - в качестве ключа передается тип объекта источника подписки,
// 					а в качестве значения имя исполняемого метода.
//
// Пример:
// Соответствие.Вставить(Тип("РегистрСведенийНаборЗаписей.ШтрихкодыНоменклатуры"), "ШтрихкодыНоменклатурыОбработкаПроверкиЗаполнения");
//

Функция РегистрыСведенийОбработкаПроверкиЗаполнения() Экспорт

	Соответствие = Новый Соответствие;

	// Добавление

	// КонецДобавления

	ОбработатьСоответствиеРегистрыСведений(Соответствие);

	Возврат Соответствие;

КонецФункции

// Определяет соответствие типа источника подписки и имени метода.
//
// Возвращаемое значение:
//   Соответствие - в качестве ключа передается тип объекта источника подписки,
// 					а в качестве значения имя исполняемого метода.
//
// Пример:
// Соответствие.Вставить(Тип("РегистрСведенийНаборЗаписей.ШтрихкодыНоменклатуры"), "ШтрихкодыНоменклатурыОбработкаФормированияПоВерсииИсторииДанных");
//

Функция РегистрыСведенийОбработкаФормированияПоВерсииИсторииДанных() Экспорт

	Соответствие = Новый Соответствие;

	// Добавление

	// КонецДобавления

	ОбработатьСоответствиеРегистрыСведений(Соответствие);

	Возврат Соответствие;

КонецФункции

#КонецОбласти // НаборЗаписей

#Область Менеджер

// Определяет соответствие типа источника подписки и имени метода.
//
// Возвращаемое значение:
//   Соответствие - в качестве ключа передается тип объекта источника подписки,
// 					а в качестве значения имя исполняемого метода.
//
// Пример:
// Соответствие.Вставить(Тип("РегистрСведенийМенеджер.ШтрихкодыНоменклатуры"), "ШтрихкодыНоменклатурыОбработкаПолученияФормы");
//

Функция РегистрыСведенийОбработкаПолученияФормы() Экспорт

	Соответствие = Новый Соответствие;

	// Добавление

	// КонецДобавления

	ОбработатьСоответствиеРегистрыСведений(Соответствие);

	Возврат Соответствие;

КонецФункции

// Определяет соответствие типа источника подписки и имени метода.
//
// Возвращаемое значение:
//   Соответствие - в качестве ключа передается тип объекта источника подписки,
// 					а в качестве значения имя исполняемого метода.
//
// Пример:
// Соответствие.Вставить(Тип("РегистрСведенийМенеджер.ШтрихкодыНоменклатуры"), "ШтрихкодыНоменклатурыОбработкаПослеЗаписиВерсийИсторииДанных");
//

Функция РегистрыСведенийОбработкаПослеЗаписиВерсийИсторииДанных() Экспорт

	Соответствие = Новый Соответствие;

	// Добавление

	// КонецДобавления

	ОбработатьСоответствиеРегистрыСведений(Соответствие);

	Возврат Соответствие;

КонецФункции

#КонецОбласти // Менеджер

#КонецОбласти // РегистрыСведений

#Область РегистрыНакопления

#Область НаборЗаписей

// Определяет соответствие типа источника подписки и имени метода.
//
// Возвращаемое значение:
//   Соответствие - в качестве ключа передается тип объекта источника подписки,
// 					а в качестве значения имя исполняемого метода.
//
// Пример:
// Соответствие.Вставить(Тип("РегистрНакопленийНаборЗаписей.ТоварыОрганизаций"), "ТоварыОрганизацийПередЗаписью");
//

Функция РегистрыНакопленияПередЗаписью() Экспорт

	Соответствие = Новый Соответствие;

	// Добавление

	// КонецДобавления

	ОбработатьСоответствиеРегистрыНакопления(Соответствие);

	Возврат Соответствие;

КонецФункции

// Определяет соответствие типа источника подписки и имени метода.
//
// Возвращаемое значение:
//   Соответствие - в качестве ключа передается тип объекта источника подписки,
// 					а в качестве значения имя исполняемого метода.
//
// Пример:
// Соответствие.Вставить(Тип("РегистрНакопленийНаборЗаписей.ТоварыОрганизаций"), "ТоварыОрганизацийПриЗаписи");
//

Функция РегистрыНакопленияПриЗаписи() Экспорт

	Соответствие = Новый Соответствие;

	// Добавление

	// КонецДобавления

	ОбработатьСоответствиеРегистрыНакопления(Соответствие);

	Возврат Соответствие;

КонецФункции

// Определяет соответствие типа источника подписки и имени метода.
//
// Возвращаемое значение:
//   Соответствие - в качестве ключа передается тип объекта источника подписки,
// 					а в качестве значения имя исполняемого метода.
//
// Пример:
// Соответствие.Вставить(Тип("РегистрНакопленийНаборЗаписей.ТоварыОрганизаций"), "ТоварыОрганизацийОбработкаПроверкиЗаполнения");
//

Функция РегистрыНакопленияОбработкаПроверкиЗаполнения() Экспорт

	Соответствие = Новый Соответствие;

	// Добавление

	// КонецДобавления

	ОбработатьСоответствиеРегистрыНакопления(Соответствие);

	Возврат Соответствие;

КонецФункции

#КонецОбласти // НаборЗаписей

#Область Менеджер

// Определяет соответствие типа источника подписки и имени метода.
//
// Возвращаемое значение:
//   Соответствие - в качестве ключа передается тип объекта источника подписки,
// 					а в качестве значения имя исполняемого метода.
//
// Пример:
// Соответствие.Вставить(Тип("РегистрНакопленияМенеджер.ШтрихкодыНоменклатуры"), "ШтрихкодыНоменклатурыОбработкаПолученияФормы");
//


// Библиотека проектных подсистем для упрощения разработки архитектуры на 1С: Предприятие 8,
// включая доработку типовых конфигураций.
//
// Copyright First BIT company
//
//   Licensed under the Apache License, Version 2.0 (the "License");
//   you may not use this file except in compliance with the License.
//   You may obtain a copy of the License at
//
//       http://www.apache.org/licenses/LICENSE-2.0
//
//   Unless required by applicable law or agreed to in writing, software
//   distributed under the License is distributed on an "AS IS" BASIS,
//   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
//   See the License for the specific language governing permissions and
//   limitations under the License.
//
// URL:    https://github.com/firstBitSportivnaya/PSSL/
//

#Область СлужебныйПрограммныйИнтерфейс

// См. пбп_ОбщегоНазначенияСервер.СуществуетБиблиотекаСтандартныхПодсистем.
Функция СуществуетБиблиотекаСтандартныхПодсистем() Экспорт

	Возврат пбп_ОбщегоНазначенияПовтИсп.СуществуетБиблиотекаСтандартныхПодсистем();

КонецФункции

// См. пбп_ОбщегоНазначенияСервер.ТекущаяДатаПользователя
Функция ТекущаяДатаПользователя(ИмяПользователя = Неопределено) Экспорт

	Возврат пбп_Переадресация.ТекущаяДатаПользователя(ИмяПользователя);

КонецФункции

#КонецОбласти // СлужебныйПрограммныйИнтерфейс


///////////////////////////////////////////////////////////////////////////////////////////////////////
// Библиотека проектных подсистем для упрощения разработки архитектуры на 1С: Предприятие 8,
// включая доработку типовых конфигураций.
//
// Copyright First BIT company
//
//   Licensed under the Apache License, Version 2.0 (the "License");
//   you may not use this file except in compliance with the License.
//   You may obtain a copy of the License at
//
//       http://www.apache.org/licenses/LICENSE-2.0
//
//   Unless required by applicable law or agreed to in writing, software
//   distributed under the License is distributed on an "AS IS" BASIS,
//   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
//   See the License for the specific language governing permissions and
//   limitations under the License.
//
// URL: https://github.com/firstBitSportivnaya/PSSL/
///////////////////////////////////////////////////////////////////////////////////////////////////////

#Область ПрограммныйИнтерфейс

#Область УсловныеВызовы

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

	Модуль = Вычислить(Имя);

#Если Не ВебКлиент Тогда

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

#КонецЕсли

	Возврат Модуль;

КонецФункции

#КонецОбласти

#КонецОбласти


// Библиотека проектных подсистем для упрощения разработки архитектуры на 1С: Предприятие 8,
// включая доработку типовых конфигураций.
//
// Copyright First BIT company
//
//   Licensed under the Apache License, Version 2.0 (the "License");
//   you may not use this file except in compliance with the License.
//   You may obtain a copy of the License at
//
//       http://www.apache.org/licenses/LICENSE-2.0
//
//   Unless required by applicable law or agreed to in writing, software
//   distributed under the License is distributed on an "AS IS" BASIS,
//   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
//   See the License for the specific language governing permissions and
//   limitations under the License.
//
// URL:    https://github.com/firstBitSportivnaya/PSSL/
//

////////////////////////////////////////////////////////////////////////////////
// Общего назначения (клиент): для клиентских и серверных функций общего назначения

#Область ПрограммныйИнтерфейс

// Упаковывает ДанныеФормыКоллекция в массив структур.
// Может использоваться для передачи таблицы между клиентом и сервером.
//
// Параметры:
//  ДанныеФормыКоллекция - ДанныеФормыКоллекция - Данные формы коллекции
//  ИменаКолонок		 - Массив - Массив колонок.
//
// Возвращаемое значение:
// Массив - Массив структур.
//
Функция УпаковатьДанныеФормыКоллекция(ДанныеФормыКоллекция, ИменаКолонок) Экспорт

	Результат = Новый Массив;

	Для Каждого СтрокаТаблицы Из ДанныеФормыКоллекция Цикл

		МодельСтроки = Новый Структура;

		Для Каждого Элемент Из ИменаКолонок Цикл

			Если ТипЗнч(ИменаКолонок) = Тип("Структура") Тогда
				ИмяКолонки = Элемент.Ключ;
			Иначе
				ИмяКолонки = Элемент;
			КонецЕсли;

			МодельСтроки.Вставить(ИмяКолонки, СтрокаТаблицы[ИмяКолонки]);

		КонецЦикла;

		Результат.Добавить(МодельСтроки);

	КонецЦикла;

	Возврат Результат;

КонецФункции

// Разбирает строку с разделителями и упаковывает значения в массив.
//
// Параметры:
//  ИсходнаяСтрока	 - Строка - Исходная строка.
//  Разделитель		 - Строка - Разделитель.
//
// Возвращаемое значение:
// Массив - Массив подстрок.
//
Функция РазобратьСтрокуСРазделителями(ИсходнаяСтрока, Разделитель = ",") Экспорт

	Результат = Новый Массив;

	// Разделитель бывает длиной строки > 1, учитывая особенность "СтрЗаменить",
	// заменим его на редкий односимвольный разделитель - Символ(9786).
	Сепаратор = Символ(9786);
	Образец = СтрЗаменить(ИсходнаяСтрока, Разделитель, Сепаратор);
	Результат = СтрРазделить(Образец, Сепаратор, Ложь);

	Возврат Результат;

КонецФункции

// Получает номер месяца числом по строковому представлению
//
// Параметры:
//  МесяцСтрокойСокр - Строка - первые 3 буквы названия месяца
//
// Возвращаемое значение:
//  Число - номер месяца числом
//
Функция ПолучитьНомерМесяцаПоСтроковомуПредставлению(МесяцСтрокойСокр) Экспорт

	Если МесяцСтрокойСокр = "Янв"
		Или МесяцСтрокойСокр = "Jan" Тогда
		МесяцЧислом = 1;
	ИначеЕсли МесяцСтрокойСокр = "Фев"
		Или МесяцСтрокойСокр = "Feb" Тогда
		МесяцЧислом = 2;
	ИначеЕсли МесяцСтрокойСокр = "Мар"
		Или МесяцСтрокойСокр = "Mar" Тогда
		МесяцЧислом = 3;
	ИначеЕсли МесяцСтрокойСокр = "Апр"
		Или МесяцСтрокойСокр = "Apr" Тогда
		МесяцЧислом = 4;
	ИначеЕсли МесяцСтрокойСокр = "Май"
		Или МесяцСтрокойСокр = "May" Тогда
		МесяцЧислом = 5;
	ИначеЕсли МесяцСтрокойСокр = "Июн"
		Или МесяцСтрокойСокр = "Jun" Тогда
		МесяцЧислом = 6;
	ИначеЕсли МесяцСтрокойСокр = "Июл"
		Или МесяцСтрокойСокр = "Jul" Тогда
		МесяцЧислом = 7;
	ИначеЕсли МесяцСтрокойСокр = "Авг"
		Или МесяцСтрокойСокр = "Aug" Тогда
		МесяцЧислом = 8;
	ИначеЕсли МесяцСтрокойСокр = "Сен"
		Или МесяцСтрокойСокр = "Sep" Тогда
		МесяцЧислом = 9;
	ИначеЕсли МесяцСтрокойСокр = "Окт"
		Или МесяцСтрокойСокр = "Oct" Тогда
		МесяцЧислом = 10;
	ИначеЕсли МесяцСтрокойСокр = "Ноя"
		Или МесяцСтрокойСокр = "Nov" Тогда
		МесяцЧислом = 11;
	ИначеЕсли МесяцСтрокойСокр = "Dec"
		Или МесяцСтрокойСокр = "Дек" Тогда
		МесяцЧислом = 12;
	Иначе
		МесяцЧислом = 0;
	КонецЕсли;

	Возврат МесяцЧислом;

КонецФункции

#КонецОбласти

#Область СлужебныйПрограммныйИнтерфейс

Процедура УдалитьНедопустимыеСимволы(Строка) Экспорт
	НедопустимыеСимволы = """'`/\[]{}:;|-=?*<>,.()+#№@!%^&~«»";
	Строка = СтрСоединить(СтрРазделить(Строка, НедопустимыеСимволы, Истина));
КонецПроцедуры

#КонецОбласти


// Библиотека проектных подсистем для упрощения разработки архитектуры на 1С: Предприятие 8,
// включая доработку типовых конфигураций.
//
// Copyright First BIT company
//
//   Licensed under the Apache License, Version 2.0 (the "License");
//   you may not use this file except in compliance with the License.
//   You may obtain a copy of the License at
//
//       http://www.apache.org/licenses/LICENSE-2.0
//
//   Unless required by applicable law or agreed to in writing, software
//   distributed under the License is distributed on an "AS IS" BASIS,
//   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
//   See the License for the specific language governing permissions and
//   limitations under the License.
//
// URL:    https://github.com/firstBitSportivnaya/PSSL/
//

////////////////////////////////////////////////////////////////////////////////
// Общего назначения (сервер): для серверных функций общего назначения
// с повторным использованием

#Область ПрограммныйИнтерфейс

// Возвращает таблицу соответствий по отбору.
//
// Параметры:
//  ИдентификаторНастройки - Строка - Идентификатор элемента справочника "Тип соответствия объектов ИБ".
//  Объект1 - ПроизвольныйТип - Объект1.
//  Объект2 - ПроизвольныйТип - Объект2.
//  Объект3 - ПроизвольныйТип - Объект3.
//
// Возвращаемое значение:
//  - ТаблицаЗначений - Таблица соответствий по отбору.
//
Функция ПолучитьСоответствиеОбъектовИБ(ИдентификаторНастройки, Объект1 = Неопределено, Объект2 = Неопределено, Объект3 = Неопределено) Экспорт

	Возврат РегистрыСведений.пбп_СоответствияОбъектовИБ.ПолучитьСоответствиеОбъектовИБ(
		ИдентификаторНастройки,
		Объект1,
		Объект2,
		Объект3);

КонецФункции

// Возвращает массив значений произвольного типа, объекта соответствия.
//
// Параметры:
//  ИдентификаторНастройки - Строка - Идентификатор элемента справочника "Тип соответствия объектов ИБ".
//  ИмяКлюча		 - Строка - поле регистра сведений пбп_СоответствияОбъектовИБ, по которому устанавливается отбор.
//  ЗначениеКлюча	 - ПроизвольныйТип - Значение ключа по которому установлен отбор.
//  ИмяОбъекта		 - Строка - получаемое поле регистра сведений пбп_СоответствияОбъектовИБ.
//
// Возвращаемое значение:
//   - Массив - Значения объекта из регистра сведений пбп_СоответствияОбъектовИБ,
//				если соответствие одно в массив будет один элемент
//
Функция ПолучитьЗначенияОбъектаСоответствияПоКлючу(ИдентификаторНастройки, ИмяКлюча, ЗначениеКлюча, ИмяОбъекта) Экспорт

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

КонецФункции

// Возвращает значение соответствия объектов ИБ по отбору.
// См. РегистрыСведений.пбп_СоответствияОбъектовИБ.ПолучитьЗначениеСоответствияОбъектов
//
Функция ПолучитьЗначениеСоответствияОбъектов(ИдентификаторНастройки, Объект1, Объект2) Экспорт

	Возврат РегистрыСведений.пбп_СоответствияОбъектовИБ.ПолучитьЗначениеСоответствияОбъектов(
		ИдентификаторНастройки, Объект1, Объект2);

КонецФункции

// См. пбп_ОбщегоНазначенияСервер.СуществуетБиблиотекаСтандартныхПодсистем.
Функция СуществуетБиблиотекаСтандартныхПодсистем() Экспорт

	Возврат пбп_ОбщегоНазначенияСервер.СуществуетБиблиотекаСтандартныхПодсистем();

КонецФункции

// См. пбп_ОбщегоНазначенияСервер.ПолучитьЗначениеКонстанты.
//
Функция ПолучитьЗначениеКонстанты(ИмяКонстанты) Экспорт

	Возврат пбп_ОбщегоНазначенияСервер.ПолучитьЗначениеКонстанты(ИмяКонстанты);

КонецФункции

// См. пбп_ИнтеграцииСервер.ПолучитьИспользованиеВерсионированияОбъектовОбмена.
//
Функция ПолучитьИспользованиеВерсионированияОбъектовОбмена() Экспорт

	Возврат пбп_ИнтеграцииСервер.ПолучитьИспользованиеВерсионированияОбъектовОбмена();

КонецФункции

#КонецОбласти // ПрограммныйИнтерфейс


///////////////////////////////////////////////////////////////////////////////////////////////////////
// Библиотека проектных подсистем для упрощения разработки архитектуры на 1С: Предприятие 8,
// включая доработку типовых конфигураций.
//
// Copyright First BIT company
//
//   Licensed under the Apache License, Version 2.0 (the "License");
//   you may not use this file except in compliance with the License.
//   You may obtain a copy of the License at
//
//       http://www.apache.org/licenses/LICENSE-2.0
//
//   Unless required by applicable law or agreed to in writing, software
//   distributed under the License is distributed on an "AS IS" BASIS,
//   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
//   See the License for the specific language governing permissions and
//   limitations under the License.
//
// URL: https://github.com/firstBitSportivnaya/PSSL/
///////////////////////////////////////////////////////////////////////////////////////////////////////

#Область СлужебныйПрограммныйИнтерфейс

// Функция ОпределитьМодульПереадресации предназначена для проверки наличия общего модуля
// БСП с указанным именем и получения этого модуля, если он существует.
//
// Параметры:
//  ИмяМодуля	 - Строка - имя общего модуля, который необходимо найти.
//
// Возвращаемое значение:
//  Структура - общий модуль и что он существует
//  * Модуль 	- ОбщийМодуль - общий модуль из БСП.
//  * МодульСуществует - Булево - Если флаг истина, модуль существует.
//
Функция ОпределитьМодульПереадресации(ИмяМодуля) Экспорт

	Возврат пбп_Переадресация.ОпределитьМодульПереадресации(ИмяМодуля);

КонецФункции

#Область ПереадресацияМетодов

#КонецОбласти

#КонецОбласти

#Область СлужебныеПроцедурыИФункции

#Область МодульПереадресацииПоПодсистемам

Функция ПереадресацияМодуляСтандартныеПодсистемыПовтИсп()
	Возврат пбп_ПереадресацияПовтИсп.ОпределитьМодульПереадресации("СтандартныеПодсистемыПовтИсп");
КонецФункции

Функция ПереадресацияМодуляПользователиСлужебныйПовтИсп()
	Возврат пбп_ПереадресацияПовтИсп.ОпределитьМодульПереадресации("ПользователиСлужебныйПовтИсп");
КонецФункции

#КонецОбласти

#Область ПереадресацияМетодов

#Область СтандартныеПодсистемыПовтИсп

// Аналог метода БСП. Возвращает соответствие имен "функциональных" подсистем и значения Истина.
// У "функциональной" подсистемы снят флажок "Включать в командный интерфейс".
//
// Возвращаемое значение:
//  ФиксированноеСоответствие из КлючИЗначение:
//   * Ключ - Строка
//   * Значение - Булево
//
Функция ИменаПодсистем() Экспорт

	Результат = ПереадресацияМодуляСтандартныеПодсистемыПовтИсп();
	Если Результат.МодульСуществует Тогда
		Возврат Результат.Модуль.ИменаПодсистем();
	КонецЕсли;

	ОтключенныеПодсистемы = Новый Соответствие;

	Имена = Новый Соответствие;
	ВставитьИменаПодчиненныхПодсистем(Имена, Метаданные, ОтключенныеПодсистемы);

	Возврат Новый ФиксированноеСоответствие(Имена);

КонецФункции

// Аналог метода БСП. Возвращает описание типов всех ссылок в информационной базе
//
// Возвращаемое значение:
//  ОписаниеТипов
//
Функция ОписаниеТипаВсеСсылки() Экспорт

	Результат = ПереадресацияМодуляСтандартныеПодсистемыПовтИсп();
	Если Результат.МодульСуществует Тогда
		Возврат Результат.Модуль.ОписаниеТипаВсеСсылки();
	КонецЕсли;

	Возврат Новый ОписаниеТипов(Новый ОписаниеТипов(Новый ОписаниеТипов(Новый ОписаниеТипов(Новый ОписаниеТипов(
		Новый ОписаниеТипов(Новый ОписаниеТипов(Новый ОписаниеТипов(Новый ОписаниеТипов(
			Справочники.ТипВсеСсылки(),
			Документы.ТипВсеСсылки().Типы()),
			ПланыОбмена.ТипВсеСсылки().Типы()),
			Перечисления.ТипВсеСсылки().Типы()),
			ПланыВидовХарактеристик.ТипВсеСсылки().Типы()),
			ПланыСчетов.ТипВсеСсылки().Типы()),
			ПланыВидовРасчета.ТипВсеСсылки().Типы()),
			БизнесПроцессы.ТипВсеСсылки().Типы()),
			БизнесПроцессы.ТипВсеСсылкиТочекМаршрутаБизнесПроцессов().Типы()),
			Задачи.ТипВсеСсылки().Типы());

КонецФункции

// Аналог метода БСП.
//
Процедура ВставитьИменаПодчиненныхПодсистем(Имена, РодительскаяПодсистема, ОтключенныеПодсистемы, ИмяРодительскойПодсистемы = "")

	Для Каждого ТекущаяПодсистема Из РодительскаяПодсистема.Подсистемы Цикл

		Если ТекущаяПодсистема.ВключатьВКомандныйИнтерфейс Тогда
			Продолжить;
		КонецЕсли;

		ИмяТекущейПодсистемы = ИмяРодительскойПодсистемы + ТекущаяПодсистема.Имя;
		Если ОтключенныеПодсистемы.Получить(ИмяТекущейПодсистемы) = Истина Тогда
			Продолжить;
		Иначе
			Имена.Вставить(ИмяТекущейПодсистемы, Истина);
		КонецЕсли;

		Если ТекущаяПодсистема.Подсистемы.Количество() = 0 Тогда
			Продолжить;
		КонецЕсли;

		ВставитьИменаПодчиненныхПодсистем(Имена, ТекущаяПодсистема, ОтключенныеПодсистемы, ИмяТекущейПодсистемы + ".");
	КонецЦикла;

КонецПроцедуры

#КонецОбласти

#Область ПользователиСлужебныйПовтИсп

// Аналог метода БСП. Возвращает свойства текущего пользователя информационной базы.
//
// Возвращаемое значение:
//  ФиксированнаяСтруктура из КлючИЗначение:
//   * Ключ - Строка
//   * Значение - Произвольный
//
Функция СвойстваТекущегоПользователяИБ() Экспорт

	Результат = ПереадресацияМодуляПользователиСлужебныйПовтИсп();
	Если Результат.МодульСуществует Тогда
		Возврат Результат.Модуль.СвойстваТекущегоПользователяИБ();
	КонецЕсли;

	ПользовательИБ = ПользователиИнформационнойБазы.ТекущийПользователь();

	Свойства = Новый Структура;
	Свойства.Вставить("УказанТекущийПользовательИБ", Истина);
	Свойства.Вставить("УникальныйИдентификатор", ПользовательИБ.УникальныйИдентификатор);
	Свойства.Вставить("Имя",                     ПользовательИБ.Имя);

	Свойства.Вставить("ПравоАдминистрирование", ?(ПривилегированныйРежим(),
		ПравоДоступа("Администрирование", Метаданные, ПользовательИБ),
		ПравоДоступа("Администрирование", Метаданные)));

	Свойства.Вставить("РольДоступнаАдминистраторСистемы",
		РольДоступна(Метаданные.Роли.АдминистраторСистемы));

	Свойства.Вставить("РольДоступнаПолныеПрава",
		РольДоступна(Метаданные.Роли.ПолныеПрава));

	Возврат Новый ФиксированнаяСтруктура(Свойства);

КонецФункции

#КонецОбласти

#КонецОбласти

#КонецОбласти


// Библиотека проектных подсистем для упрощения разработки архитектуры на 1С: Предприятие 8,
// включая доработку типовых конфигураций.
//
// Copyright First BIT company
//
//   Licensed under the Apache License, Version 2.0 (the "License");
//   you may not use this file except in compliance with the License.
//   You may obtain a copy of the License at
//
//       http://www.apache.org/licenses/LICENSE-2.0
//
//   Unless required by applicable law or agreed to in writing, software
//   distributed under the License is distributed on an "AS IS" BASIS,
//   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
//   See the License for the specific language governing permissions and
//   limitations under the License.
//
// URL:    https://github.com/firstBitSportivnaya/PSSL/
//

///////////////////////////////////////////////////////////////////////////////
//

#Область ПрограммныйИнтерфейс

// Загрузить настройки формы.
// См. пбп_ПодключаемыеКоманды.ЗагрузитьНастройкиФормы
//
Функция ЗагрузитьНастройкиФормы(ИмяФормы, АдресХранилищаСвойствФормы, АдресФайлаВХранилище) Экспорт

	Возврат пбп_ПодключаемыеКоманды.ЗагрузитьНастройкиФормы(ИмяФормы, АдресХранилищаСвойствФормы, АдресФайлаВХранилище);

КонецФункции

// Сохранить настройки формы.
// См. пбп_ПодключаемыеКоманды.СохранитьНастройкиФормы
//
Функция СохранитьНастройкиФормы(ИмяФормы, ЗначенияРеквизитов) Экспорт

	Возврат пбп_ПодключаемыеКоманды.СохранитьНастройкиФормы(ИмяФормы, ЗначенияРеквизитов);

КонецФункции

#КонецОбласти // ПрограммныйИнтерфейс


// Библиотека проектных подсистем для упрощения разработки архитектуры на 1С: Предприятие 8,
// включая доработку типовых конфигураций.
//
// Copyright First BIT company
//
//   Licensed under the Apache License, Version 2.0 (the "License");
//   you may not use this file except in compliance with the License.
//   You may obtain a copy of the License at
//
//       http://www.apache.org/licenses/LICENSE-2.0
//
//   Unless required by applicable law or agreed to in writing, software
//   distributed under the License is distributed on an "AS IS" BASIS,
//   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
//   See the License for the specific language governing permissions and
//   limitations under the License.
//
// URL:    https://github.com/firstBitSportivnaya/PSSL/
//

///////////////////////////////////////////////////////////////////////////////
//

#Область ПрограммныйИнтерфейс

// Загрузить настройки формы
//
// Параметры:
//  Форма	 - ФормаКлиентскогоПриложения	 - форма, с которой выполняется команда
//
Асинх Процедура ЗагрузитьНастройкиФормы(Форма) Экспорт

	Диалог = СоздатьДиалогВыбораФайлаНастроек(Истина);

	ОповещениеЗавершениеЗагрузки = Новый ОписаниеОповещения("Подключаемый_ПослеЗагрузкиНастроек", Форма);

	Результат = Ждать Диалог.ВыбратьАсинх();

	Если ЗначениеЗаполнено(Результат) Тогда
		ЗагрузитьНастройкиФормыПослеВыбораФайла(Форма, Результат[0]);
		пбп_ПереадресацияКлиент.СообщитьПользователю(НСтр("ru = 'Загрузка настроек из файла завершена'"));
	КонецЕсли;

	ВыполнитьОбработкуОповещения(ОповещениеЗавершениеЗагрузки);

КонецПроцедуры

// Сохранить настройки формы
//
// Параметры:
//  Форма	 - ФормаКлиентскогоПриложения	 - форма, с которой выполняется команда
//
Асинх Процедура СохранитьНастройкиФормы(Форма) Экспорт

	Диалог = СоздатьДиалогВыбораФайлаНастроек(Ложь);

	Результат = Ждать Диалог.ВыбратьАсинх();

	Если ЗначениеЗаполнено(Результат) Тогда
		СохранитьНастройкиФормыПослеВыборФайла(Форма, Результат[0]);
		пбп_ПереадресацияКлиент.СообщитьПользователю(НСтр("ru = 'Сохранение настроек в файл завершено'"));
	КонецЕсли;

КонецПроцедуры

#КонецОбласти // ПрограммныйИнтерфейс

#Область СлужебныеПроцедурыИФункции

Функция СоздатьДиалогВыбораФайлаНастроек(ЭтоЗагрузка)

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

	Диалог.МножественныйВыбор	= Ложь;
	Диалог.Фильтр				= "Расширяемый язык разметки (*.xml)|*.xml";

	Возврат Диалог;

КонецФункции

Процедура ЗагрузитьНастройкиФормыПослеВыбораФайла(Форма, ПутьКФайлу)

	Попытка
		ДвоичныеДанныеФайла = Новый ДвоичныеДанные(ПутьКФайлу);
		АдресФайлаВХранилище = ПоместитьВоВременноеХранилище(ДвоичныеДанныеФайла, Новый УникальныйИдентификатор);

		ЗначенияРеквизитов = пбп_ПодключаемыеКомандыВызовСервера.ЗагрузитьНастройкиФормы(
			Форма.ИмяФормы, Форма.АдресХранилищаСвойствФормы, АдресФайлаВХранилище);

		ЗаполнитьФормуПолученнымиИзФайлаЗначениями(Форма, ЗначенияРеквизитов);
	Исключение
		пбп_ПереадресацияКлиент.СообщитьПользователю(
			НСтр("ru = 'Ошибка при чтении файла: '") + ОписаниеОшибки());
	КонецПопытки;

КонецПроцедуры

Процедура ЗаполнитьФормуПолученнымиИзФайлаЗначениями(ФормаСтруктура, ЗначенияРеквизитов, ЭтоОбъект = Ложь)

	Для Каждого КлючИЗначение Из ЗначенияРеквизитов Цикл
		Если ЗначениеЗаполнено(КлючИЗначение.Значение) Тогда
			Если ТипЗнч(КлючИЗначение.Значение) = Тип("Структура") Тогда
				ЗаполнитьФормуПолученнымиИзФайлаЗначениями(ФормаСтруктура.Объект, КлючИЗначение.Значение, Истина);
			ИначеЕсли ТипЗнч(КлючИЗначение.Значение) = Тип("Массив") Тогда
					ТабличнаяЧасть = ФормаСтруктура[КлючИЗначение.Ключ];

					ТабличнаяЧасть.Очистить();
					Для Каждого СтрокаМассива Из КлючИЗначение.Значение Цикл
						ЗаполнитьФормуПолученнымиИзФайлаЗначениями(ТабличнаяЧасть.Добавить(), СтрокаМассива);
					КонецЦикла;
			Иначе
				ФормаСтруктура[КлючИЗначение.Ключ] = КлючИЗначение.Значение;
			КонецЕсли;
		КонецЕсли;
	КонецЦикла;

КонецПроцедуры

Процедура СохранитьНастройкиФормыПослеВыборФайла(Форма, ПутьКФайлу)

	СтруктураРеквизитов = ПолучитьИзВременногоХранилища(Форма.АдресХранилищаСвойствФормы);

	Попытка
		ЗначенияРеквизитов = Новый Структура;
		ЗначенияРеквизитов = ЗаполнитьЗначенияФормыПередСохранением(Форма, ЗначенияРеквизитов, СтруктураРеквизитов);

		АдресФайлаВХранилище = пбп_ПодключаемыеКомандыВызовСервера.СохранитьНастройкиФормы(
			Форма.ИмяФормы, ЗначенияРеквизитов);

		ДвоичныеДанныеФайла = ПолучитьИзВременногоХранилища(АдресФайлаВХранилище);
		ДвоичныеДанныеФайла.Записать(ПутьКФайлу);
	Исключение
		пбп_ПереадресацияКлиент.СообщитьПользователю(
			НСтр("ru = 'Ошибка при сохранении файла: '") + ОписаниеОшибки());
	КонецПопытки;

КонецПроцедуры

Функция ЗаполнитьЗначенияФормыПередСохранением(ФормаСтруктура, ЗначенияРеквизитов, СтруктураРеквизитов)

	ЗначенияРеквизитов = пбп_ПодключаемыеКомандыСлужебныйКлиентСервер
		.СкопироватьСтруктуруЗначенийРеквизитовИзСвойствФормы(СтруктураРеквизитов);
	Для Каждого КлючИЗначение Из СтруктураРеквизитов Цикл
		Если ТипЗнч(КлючИЗначение.Значение) = Тип("Структура") Тогда
			Если КлючИЗначение.Ключ = "Объект" Тогда
				СтруктураОбъекта = Новый Структура;
				ЗначенияРеквизитов.Вставить(КлючИЗначение.Ключ, ЗаполнитьЗначенияФормыПередСохранением(ФормаСтруктура.Объект,
					СтруктураОбъекта, КлючИЗначение.Значение));
			Иначе
				МассивЗначений = Новый Массив;
				Для Каждого СтрокаТаблицы Из ФормаСтруктура[КлючИЗначение.Ключ] Цикл
					НоваяСтрока = пбп_ПодключаемыеКомандыСлужебныйКлиентСервер
						.СкопироватьСтруктуруЗначенийРеквизитовИзСвойствФормы(КлючИЗначение.Значение);
					ЗаполнитьЗначенияСвойств(НоваяСтрока, СтрокаТаблицы);

					МассивЗначений.Добавить(НоваяСтрока);
				КонецЦикла;

				ЗначенияРеквизитов.Вставить(КлючИЗначение.Ключ, МассивЗначений);
			КонецЕсли;
		Иначе
			ЗначенияРеквизитов.Вставить(КлючИЗначение.Ключ, ФормаСтруктура[КлючИЗначение.Ключ]);
		КонецЕсли;
	КонецЦикла;

	Возврат ЗначенияРеквизитов;

КонецФункции

#КонецОбласти // СлужебныеПроцедурыИФункции


// Библиотека проектных подсистем для упрощения разработки архитектуры на 1С: Предприятие 8,
// включая доработку типовых конфигураций.
//
// Copyright First BIT company
//
//   Licensed under the Apache License, Version 2.0 (the "License");
//   you may not use this file except in compliance with the License.
//   You may obtain a copy of the License at
//
//       http://www.apache.org/licenses/LICENSE-2.0
//
//   Unless required by applicable law or agreed to in writing, software
//   distributed under the License is distributed on an "AS IS" BASIS,
//   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
//   See the License for the specific language governing permissions and
//   limitations under the License.
//
// URL:    https://github.com/firstBitSportivnaya/PSSL/
//

///////////////////////////////////////////////////////////////////////////////
//

#Область ПрограммныйИнтерфейс

// Возвращает соответствие имени формы и типа XDTO
//
// Возвращаемое значение:
//  Соответствие - Ключ - имя формы, Значение - имя корневого типа XDTO-пакета
//
Функция СоответствиеФормыТипаXDTO() Экспорт

	СписокФорм = Новый Соответствие;

	// Добавление
	СписокФорм.Вставить("Обработка.пбп_УниверсальнаяЗагрузкаИзФайлаЧерезТабличныйДокумент.Форма.Форма",
		"DataProcessor.UniversalFileDownloadFromTableFile");
	// КонецДобавления

	Возврат Новый ФиксированноеСоответствие(СписокФорм);

КонецФункции

#КонецОбласти // ПрограммныйИнтерфейс

#Область СлужебныйПрограммныйИнтерфейс

#Область НастройкиФормы

#Область пбп_УниверсальнаяЗагрузкаИзФайлаЧерезТабличныйДокумент

Функция ПередКонвертацией_пбп_УниверсальнаяЗагрузкаИзФайлаЧерезТабличныйДокументФорма(ЭтоЗагрузка) Экспорт

	СписокОбработчиков = Новый Массив;

	// Добавление
	// Общие для загрузки и выгрузки
	СписокОбработчиков.Добавить("НастройкаСтруктурыКолонокФайла.ТипЗначения");
	СписокОбработчиков.Добавить("НастройкаСтруктурыКолонокФайла.ФорматДаты");

	Если Не ЭтоЗагрузка Тогда
		СписокОбработчиков.Добавить("КодПостобработки");
	КонецЕсли;
	// КонецДобавления

	Возврат СписокОбработчиков;

КонецФункции

Процедура ПриЗагрузке_пбп_УниверсальнаяЗагрузкаИзФайлаЧерезТабличныйДокументФорма_НастройкаСтруктурыКолонокФайла_ТипЗначения(
	ДанныеРеквизитов, ДанныеXDTO, ИмяПоля, ИсточникДанных) Экспорт

	ДанныеРеквизитов[ИмяПоля] = Новый ОписаниеТипов(ДанныеXDTO[ИмяПоля]);

КонецПроцедуры

Процедура ПриЗагрузке_пбп_УниверсальнаяЗагрузкаИзФайлаЧерезТабличныйДокументФорма_НастройкаСтруктурыКолонокФайла_ФорматДаты(
	ДанныеРеквизитов, ДанныеXDTO, ИмяПоля, ИсточникДанных) Экспорт

	МассивФормата = пбп_ПереадресацияКлиентСервер.РазложитьСтрокуВМассивПодстрок(ДанныеXDTO[ИмяПоля], "_");
	Если МассивФормата.Количество() = 3 Тогда
		ДанныеРеквизитов.ФорматДаты	= СтрШаблон("%1_%2", МассивФормата[0], МассивФормата[1]);
		ДанныеРеквизитов.ЕстьВремя	= Число(МассивФормата[2]);
	КонецЕсли;

КонецПроцедуры

Процедура ПриВыгрузке_пбп_УниверсальнаяЗагрузкаИзФайлаЧерезТабличныйДокументФорма_КодПостобработки(
	ДанныеРеквизитов, ДанныеXDTO, ИмяПоля, ИсточникДанных) Экспорт

	ДанныеXDTO[ИмяПоля] = ?(ДанныеРеквизитов.ЭтоЗагрузка
		И Не ДанныеРеквизитов.ПостобработкаПользовательскойФункцией,
		ДанныеРеквизитов[ИмяПоля], "");

КонецПроцедуры

Процедура ПриВыгрузке_пбп_УниверсальнаяЗагрузкаИзФайлаЧерезТабличныйДокументФорма_НастройкаСтруктурыКолонокФайла_ТипЗначения(
	ДанныеРеквизитов, ДанныеXDTO, ИмяПоля, ИсточникДанных) Экспорт

	ДанныеXDTO[ИмяПоля] = пбп_Переадресация.СтроковоеПредставлениеТипа(ДанныеРеквизитов[ИмяПоля].Типы()[0]);

КонецПроцедуры

Процедура ПриВыгрузке_пбп_УниверсальнаяЗагрузкаИзФайлаЧерезТабличныйДокументФорма_НастройкаСтруктурыКолонокФайла_ФорматДаты(
	ДанныеРеквизитов, ДанныеXDTO, ИмяПоля, ИсточникДанных) Экспорт

	ДанныеXDTO[ИмяПоля] = пбп_ПодключаемыеКомандыСлужебныйКлиентСервер
		.ПолучитьФорматДаты(ДанныеРеквизитов[ИмяПоля], ДанныеРеквизитов.ЕстьВремя);

КонецПроцедуры

#КонецОбласти // пбп_УниверсальнаяЗагрузкаИзФайлаЧерезТабличныйДокумент

#КонецОбласти // НастройкиФормы

#КонецОбласти // СлужебныйПрограммныйИнтерфейс


// Библиотека проектных подсистем для упрощения разработки архитектуры на 1С: Предприятие 8,
// включая доработку типовых конфигураций.
//
// Copyright First BIT company
//
//   Licensed under the Apache License, Version 2.0 (the "License");
//   you may not use this file except in compliance with the License.
//   You may obtain a copy of the License at
//
//       http://www.apache.org/licenses/LICENSE-2.0
//
//   Unless required by applicable law or agreed to in writing, software
//   distributed under the License is distributed on an "AS IS" BASIS,
//   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
//   See the License for the specific language governing permissions and
//   limitations under the License.
//
// URL:    https://github.com/firstBitSportivnaya/PSSL/
//

///////////////////////////////////////////////////////////////////////////////
//

#Область СлужебныйПрограммныйИнтерфейс

// Копирует ключи (без значений) структуры значений реквизитов из свойств формы с преобразованием
// структуры в массив для таблиц формы. Для объекта тип значения остается структурой.
//
// Параметры:
//  СтруктураРеквизитов	 - Структура	 - структура, из которой необходимо скопировать ключи
//
// Возвращаемое значение:
//  Структура - скопированные ключи структуры
//
Функция СкопироватьСтруктуруЗначенийРеквизитовИзСвойствФормы(СтруктураРеквизитов) Экспорт

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

	Возврат ЗначенияРеквизитов;

КонецФункции

// Получить формат даты, учитывая время
//
// Параметры:
//  ФорматДатыБезВремени - Строка	 - формат даты "0_0"
//  ФорматВремени		 - Число	 - формат времени: 0, 1 или 2
//
// Возвращаемое значение:
//  Строка - строка формата даты с временем вида "0_0_0"
//
Функция ПолучитьФорматДаты(ФорматДатыБезВремени, ФорматВремени) Экспорт

	Если Не ЗначениеЗаполнено(ФорматДатыБезВремени) Тогда
		Возврат "";
	КонецЕсли;

	Если ФорматДатыБезВремени = "0_0" Тогда
		ФорматДаты = "0_0_0";
	Иначе
		ФорматДаты = СтрШаблон("%1_%2", ФорматДатыБезВремени, ФорматВремени);
	КонецЕсли;

	Возврат ФорматДаты;

КонецФункции

#КонецОбласти // СлужебныйПрограммныйИнтерфейс


///////////////////////////////////////////////////////////////////////////////////////////////////////
// Библиотека проектных подсистем для упрощения разработки архитектуры на 1С: Предприятие 8,
// включая доработку типовых конфигураций.
//
// Copyright First BIT company
//
//   Licensed under the Apache License, Version 2.0 (the "License");
//   you may not use this file except in compliance with the License.
//   You may obtain a copy of the License at
//
//       http://www.apache.org/licenses/LICENSE-2.0
//
//   Unless required by applicable law or agreed to in writing, software
//   distributed under the License is distributed on an "AS IS" BASIS,
//   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
//   See the License for the specific language governing permissions and
//   limitations under the License.
//
// URL: https://github.com/firstBitSportivnaya/PSSL/
///////////////////////////////////////////////////////////////////////////////////////////////////////

#Область СлужебныйПрограммныйИнтерфейс

Функция ИменаМакетовСервисов() Экспорт

	ИменаМакетов = Новый Соответствие;

	// Добавление
	ИменаМакетов.Вставить("ИмяСервиса", "ИмяМакета");
	// КонецДобавления

	Возврат ИменаМакетов;

Конецфункции

Функция СпецификацииСервисовСтрокой() Экспорт

	ИменаМакетов = Новый Соответствие;

	// Добавление
	ИменаМакетов.Вставить("ИмяСервиса_1", Демо_МакетСтрокойСервиса_1());
	// КонецДобавления

	Возврат ИменаМакетов;

Конецфункции

#КонецОбласти // СлужебныйПрограммныйИнтерфейс

#Область СлужебныеПроцедурыИФункции

Функция Демо_МакетСтрокойСервиса_1()
	Возврат "{""openapi"": ""3.0.0""
		| ""info"": {""title"": ""Example API"", ""version"": ""1.0.0""},
		| ""paths"": {""/users"": {""get"": {""summary"": ""Get users"",
		| ""responses"": {""200"": {""description"": ""Successful response""}}}}}}";
КонецФункции

#КонецОбласти // СлужебныеПроцедурыИФункции


///////////////////////////////////////////////////////////////////////////////////////////////////////
// Библиотека проектных подсистем для упрощения разработки архитектуры на 1С: Предприятие 8,
// включая доработку типовых конфигураций.
//
// Copyright First BIT company
//
//   Licensed under the Apache License, Version 2.0 (the "License");
//   you may not use this file except in compliance with the License.
//   You may obtain a copy of the License at
//
//       http://www.apache.org/licenses/LICENSE-2.0
//
//   Unless required by applicable law or agreed to in writing, software
//   distributed under the License is distributed on an "AS IS" BASIS,
//   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
//   See the License for the specific language governing permissions and
//   limitations under the License.
//
// URL: https://github.com/firstBitSportivnaya/PSSL/
///////////////////////////////////////////////////////////////////////////////////////////////////////

#Область СлужебныйПрограммныйИнтерфейс

Функция ОбработчикиРесурсов() Экспорт

	РесурсыИОбработчики = пбп_ПостроительСпецификацииOpenAPI.ПолучитьОбработчикиИРесурсыСпецификации();

	Обработчики = Новый Соответствие;

	Для Каждого Пара Из РесурсыИОбработчики Цикл
		Обработчики.Вставить(Пара.Ресурс, Пара.Обработчик);
	КонецЦикла;

	Возврат Обработчики;

Конецфункции

Функция ДопустимыеРесурсыСпецификации() Экспорт

	РесурсыИОбработчики = пбп_ПостроительСпецификацииOpenAPI.ПолучитьОбработчикиИРесурсыСпецификации();

	ДопустимыеРесурсы = Новый Соответствие;

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

	Возврат ДопустимыеРесурсы;

КонецФункции

Функция ПолучитьМакетСпецификации(ИмяМакета) Экспорт
	Возврат ПолучитьОбщийМакет(ИмяМакета).ПолучитьТекст();
КонецФункции

#КонецОбласти // СлужебныйПрограммныйИнтерфейс


// Библиотека проектных подсистем для упрощения разработки архитектуры на 1С: Предприятие 8,
// включая доработку типовых конфигураций.
//
// Copyright First BIT company
//
//   Licensed under the Apache License, Version 2.0 (the "License");
//   you may not use this file except in compliance with the License.
//   You may obtain a copy of the License at
//
//       http://www.apache.org/licenses/LICENSE-2.0
//
//   Unless required by applicable law or agreed to in writing, software
//   distributed under the License is distributed on an "AS IS" BASIS,
//   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
//   See the License for the specific language governing permissions and
//   limitations under the License.
//
// URL:    https://github.com/firstBitSportivnaya/PSSL/
//

#Область СлужебныйПрограммныйИнтерфейс

// Инициализирует предопределенные значения из таблицы.
//
// Параметры:
//  ИмяФормы - Строка - Имя формы из которой выполняется инициализация.
//
// Возвращаемое значение:
//  ФиксированнаяСтруктура - Таблица с конфликтными элементами
//  * АдресТаблицы - Строка - Адрес временного хранилища.
//  * ЕстьСтроки - Булево - Истина если есть строки в таблице конфликтов.
//
Функция ИнициализироватьПредопределенныеЗначения(ИмяФормы) Экспорт

	Менеджер = пбп_Переадресация.МенеджерОбъектаПоПолномуИмени(ИмяФормы);
	ТаблицаКонфликтныхЭлементов = пбп_ПредопределенныеЗначения.ИнициализироватьПредопределенныеЗначения(Менеджер);

	АдресТаблицы = "";
	ЕстьСтроки = Ложь;
	Если ЗначениеЗаполнено(ТаблицаКонфликтныхЭлементов) Тогда
		АдресТаблицы = ПоместитьВоВременноеХранилище(ТаблицаКонфликтныхЭлементов, Новый УникальныйИдентификатор);
		ЕстьСтроки = Истина;
	КонецЕсли;

	РезультатОбработки = Новый Структура;
	РезультатОбработки.Вставить("АдресТаблицы", АдресТаблицы);
	РезультатОбработки.Вставить("ЕстьСтроки", ЕстьСтроки);

	Возврат Новый ФиксированнаяСтруктура(РезультатОбработки);

КонецФункции

#КонецОбласти


// Библиотека проектных подсистем для упрощения разработки архитектуры на 1С: Предприятие 8,
// включая доработку типовых конфигураций.
//
// Copyright First BIT company
//
//   Licensed under the Apache License, Version 2.0 (the "License");
//   you may not use this file except in compliance with the License.
//   You may obtain a copy of the License at
//
//       http://www.apache.org/licenses/LICENSE-2.0
//
//   Unless required by applicable law or agreed to in writing, software
//   distributed under the License is distributed on an "AS IS" BASIS,
//   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
//   See the License for the specific language governing permissions and
//   limitations under the License.
//
// URL:    https://github.com/firstBitSportivnaya/PSSL/
//

#Область ПрограммныйИнтерфейс

// Обработчик команды формы.
//
// Параметры:
//   Форма - ФормаКлиентскогоПриложения - форма, в которой выполняется команда.
//   Команда - КомандаФормы - выполняемая команда.
//   Источник - ТаблицаФормы
//            - ДанныеФормыСтруктура - объект или список формы с полем "Ссылка".
//
Процедура НачатьВыполнениеКоманды(Форма, Команда, Источник) Экспорт

	ИмяКоманды = Команда.Имя;

	Имя = ЧистоеИмяКоманды(ИмяКоманды);
	Если Имя = пбп_ПредопределенныеЗначенияКлиентСервер.ИмяКомандыЗаполненияПредопределенных() Тогда
		СоздатьОбновитьПредопределенныеЗначения(Форма);
	КонецЕсли;

	Если ТипЗнч(Источник) = Тип("ТаблицаФормы") Тогда
		Источник.Обновить();
	КонецЕсли;

КонецПроцедуры

// Создание предопределенных значений на основании заполненной таблицы
//
// Параметры:
//  Форма - ФормаКлиентскогоПриложения - Форма из которой запущена обработка обновление предопределенных элементов
//
Процедура СоздатьОбновитьПредопределенныеЗначения(Форма) Экспорт

	// Возвращаем адрес временного хранилища на таблицу и есть ли конфликты
	РезультатОбработки =
		пбп_ПредопределенныеЗначенияВызовСервера.ИнициализироватьПредопределенныеЗначения(Форма.ИмяФормы);

	Если РезультатОбработки.ЕстьСтроки = Ложь Тогда
		Возврат;
	КонецЕсли;

	Параметры = Новый Структура;
	Параметры.Вставить("АдресТаблицы", РезультатОбработки.АдресТаблицы);
	Параметры.Вставить("ИмяФормыВладельца", Форма.ИмяФормы);

	ОткрытьФорму("ОбщаяФорма.пбп_ФормаРазрешенияКонфликтовПредопределенныхЭлементов", Параметры, Форма);

КонецПроцедуры

Процедура ОбработкаОповещения(ИмяСобытия, Элемент) Экспорт

	Если ИмяСобытия = ИмяСобытияОповещенияОбновления() Тогда
		Если ТипЗнч(Элемент) = Тип("ТаблицаФормы") Тогда
			Элемент.Обновить();
		КонецЕсли;
	КонецЕсли;

КонецПроцедуры

Функция ИмяСобытияОповещенияОбновления() Экспорт
	Возврат "ОбновитьСписокПредопределенных";
КонецФункции

#КонецОбласти

#Область СлужебныеПроцедурыИФункции

Функция ЧистоеИмяКоманды(ИмяКоманды)

	Если Не ЗначениеЗаполнено(ИмяКоманды) Тогда
		Возврат "";
	КонецЕсли;

	ЧастиСтроки = СтрРазделить(ИмяКоманды, "_", Истина);
	Если ЗначениеЗаполнено(ЧастиСтроки) Тогда
		Возврат ЧастиСтроки[0];
	КонецЕсли;

	Возврат "";

КонецФункции

#КонецОбласти


// Библиотека проектных подсистем для упрощения разработки архитектуры на 1С: Предприятие 8,
// включая доработку типовых конфигураций.
//
// Copyright First BIT company
//
//   Licensed under the Apache License, Version 2.0 (the "License");
//   you may not use this file except in compliance with the License.
//   You may obtain a copy of the License at
//
//       http://www.apache.org/licenses/LICENSE-2.0
//
//   Unless required by applicable law or agreed to in writing, software
//   distributed under the License is distributed on an "AS IS" BASIS,
//   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
//   See the License for the specific language governing permissions and
//   limitations under the License.
//
// URL:    https://github.com/firstBitSportivnaya/PSSL/
//

#Область СлужебныйПрограммныйИнтерфейс

// Возвращает соответствие типа с функцией для получения таблицы предопределенных элементов.
//
// Возвращаемое значение:
//  Соответствие из КлючИЗначение:
//   * Ключ - ПланВидовХарактеристикМенеджер, СправочникМенеджер
//   * Значение - Строка
//
Функция ФункцииСозданияТаблицПредопределенныхЭлементов() Экспорт

	Соответствие = Новый Соответствие;

	// Добавление
	Соответствие.Вставить(Тип("ПланВидовХарактеристикМенеджер.пбп_ПредопределенныеЗначения"),
		"пбп_ПредопределенныеЗначенияПереопределяемый.ПредопределенныеЗначения");
	Соответствие.Вставить(Тип("СправочникМенеджер.пбп_ИнтегрируемыеСистемы"),
		"пбп_ПредопределенныеЗначенияПереопределяемый.ПредопределенныеЗначенияИнтегрируемыеСистемы");
	Соответствие.Вставить(Тип("СправочникМенеджер.пбп_ИнтеграционныеПотоки"),
		"пбп_ПредопределенныеЗначенияПереопределяемый.ПредопределенныеЗначенияИнтеграционныеПотоки");
	Соответствие.Вставить(Тип("СправочникМенеджер.пбп_НастройкиИнтеграции"),
		"пбп_ПредопределенныеЗначенияПереопределяемый.ПредопределенныеЗначенияНастройкиИнтеграции");
	Соответствие.Вставить(Тип("СправочникМенеджер.пбп_ТипСоответствияОбъектовИБ"),
		"пбп_ПредопределенныеЗначенияПереопределяемый.ПредопределенныеЗначенияТипСоответствияОбъектовИБ");
	// КонецДобавления

	Возврат Соответствие;

КонецФункции

// Возвращает соответствие типа с функцией для получения колонок таблицы предопределенных элементов.
//
// Возвращаемое значение:
//  Соответствие из КлючИЗначение:
//   * Ключ - ПланВидовХарактеристикМенеджер, СправочникМенеджер
//   * Значение - Строка
//
Функция ФункцииПолученияКолонокПредопределенныхЭлементов() Экспорт

	Соответствие = Новый Соответствие;

	// Добавление
	Соответствие.Вставить(Тип("ПланВидовХарактеристикМенеджер.пбп_ПредопределенныеЗначения"),
		"пбп_ПредопределенныеЗначенияПереопределяемый.КолонкиПредопределенныеЗначения");
	Соответствие.Вставить(Тип("СправочникМенеджер.пбп_ИнтегрируемыеСистемы"),
		"пбп_ПредопределенныеЗначенияПереопределяемый.КолонкиИнтегрируемыеСистемы");
	Соответствие.Вставить(Тип("СправочникМенеджер.пбп_ИнтеграционныеПотоки"),
		"пбп_ПредопределенныеЗначенияПереопределяемый.КолонкиИнтеграционныеПотоки");
	Соответствие.Вставить(Тип("СправочникМенеджер.пбп_НастройкиИнтеграции"),
		"пбп_ПредопределенныеЗначенияПереопределяемый.КолонкиНастройкиИнтеграции");
	Соответствие.Вставить(Тип("СправочникМенеджер.пбп_ТипСоответствияОбъектовИБ"),
		"пбп_ПредопределенныеЗначенияПереопределяемый.КолонкиТипСоответствияОбъектовИБ");
	// КонецДобавления

	ОбработатьСоответствиеФункций(Соответствие);

	Возврат Соответствие;

КонецФункции

// Возвращает соответствие типа с функцией для получения полей расчета хеша.
//
// Возвращаемое значение:
//  Соответствие из КлючИЗначение:
//   * Ключ - ПланВидовХарактеристикМенеджер, СправочникМенеджер
//   * Значение - Строка
//
Функция ФункцииПолученияДобавляемыхПолейДляРасчетаХеша() Экспорт

	Соответствие = Новый Соответствие;

	// Добавление
	Соответствие.Вставить(Тип("ПланВидовХарактеристикМенеджер.пбп_ПредопределенныеЗначения"),
		"пбп_ПредопределенныеЗначенияПереопределяемый.ДобавляемыеПоляДляРасчетаХешаПредопределенныеЗначения");
	Соответствие.Вставить(Тип("СправочникМенеджер.пбп_ИнтегрируемыеСистемы"),
		"пбп_ПредопределенныеЗначенияПереопределяемый.ДобавляемыеПоляДляРасчетаХешаИнтегрируемыеСистемы");
	Соответствие.Вставить(Тип("СправочникМенеджер.пбп_ИнтеграционныеПотоки"),
		"пбп_ПредопределенныеЗначенияПереопределяемый.ДобавляемыеПоляДляРасчетаХешаИнтеграционныеПотоки");
	Соответствие.Вставить(Тип("СправочникМенеджер.пбп_НастройкиИнтеграции"),
		"пбп_ПредопределенныеЗначенияПереопределяемый.ДобавляемыеПоляДляРасчетаХешаНастройкиИнтеграции");
	Соответствие.Вставить(Тип("СправочникМенеджер.пбп_ТипСоответствияОбъектовИБ"),
		"пбп_ПредопределенныеЗначенияПереопределяемый.ДобавляемыеПоляДляРасчетаХешаТипСоответствияОбъектовИБ");
	// КонецДобавления

	ОбработатьСоответствиеФункций(Соответствие);

	Возврат Соответствие;

КонецФункции

#Область ПолучениеПредопределенных

// Описание см. в пбп_ПредопределенныеЗначения.ПредопределенныйЭлемент.
//
Функция ПредопределенныйЭлемент(Знач ИмяОбъектаМетаданных, Знач Идентификатор, ВыбрасыватьИсключение = Ложь, ЗначениеПоУмолчанию = Неопределено) Экспорт

	Возврат пбп_ПредопределенныеЗначения.ПолучитьПредопределенныеПоИдентификаторам(
		ИмяОбъектаМетаданных, Идентификатор, ЗначениеПоУмолчанию, , ВыбрасыватьИсключение);

КонецФункции

// Описание см. в пбп_ПредопределенныеЗначения.ЗначениеПредопределенногоЭлемента.
//
Функция ЗначениеПредопределенногоЭлемента(Знач ИмяОбъектаМетаданных, Ссылка, ВыбрасыватьИсключение = Ложь, ЗначениеПоУмолчанию = Неопределено) Экспорт

	Менеджер = пбп_Переадресация.МенеджерОбъектаПоПолномуИмени(ИмяОбъектаМетаданных);

	Возврат Менеджер.ПолучитьЗначение(Ссылка, ВыбрасыватьИсключение, ЗначениеПоУмолчанию);

КонецФункции

#КонецОбласти

#КонецОбласти

#Область СлужебныеПроцедурыИФункции

Процедура ОбработатьСоответствиеФункций(Соответствие)

	Для Каждого КлючЗначение Из Соответствие Цикл
		Соответствие[КлючЗначение.Ключ] = КлючЗначение.Значение + "()";
	КонецЦикла;

КонецПроцедуры

#КонецОбласти


// Библиотека проектных подсистем для упрощения разработки архитектуры на 1С: Предприятие 8,
// включая доработку типовых конфигураций.
//
// Copyright First BIT company
//
//   Licensed under the Apache License, Version 2.0 (the "License");
//   you may not use this file except in compliance with the License.
//   You may obtain a copy of the License at
//
//       http://www.apache.org/licenses/LICENSE-2.0
//
//   Unless required by applicable law or agreed to in writing, software
//   distributed under the License is distributed on an "AS IS" BASIS,
//   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
//   See the License for the specific language governing permissions and
//   limitations under the License.
//
// URL:    https://github.com/firstBitSportivnaya/PSSL/
//

#Область СлужебныйПрограммныйИнтерфейс

// См. СтандартныеПодсистемыКлиент.ПриПолученииСерверногоОповещения.
Процедура ПриПолученииСерверногоОповещения(ИмяОповещения, Результат) Экспорт

	Если ТипЗнч(Результат) = Тип("Структура") Тогда
		Текст = пбп_ПереадресацияКлиентСервер.ПодставитьПараметрыВСтроку(
			НСтр("ru = 'Существуют конфликты предопределенных элементов ''%1'''"),
			Результат.ПредставлениеОбъекта);
		Пояснение = пбп_ПереадресацияКлиентСервер.ПодставитьПараметрыВСтроку(
			НСтр("ru = 'Разрешить конфликты предопределенных элементов ''%1'''"),
			Результат.ПредставлениеОбъекта);

		ПоказатьОповещениеПользователя(
			Текст,
			НавигационнаяСсылкаОбъекта(Результат.ИмяОбъектаМетаданных),
			Пояснение,
			БиблиотекаКартинок.ДиалогВосклицание,
			СтатусОповещенияПользователя.Важное,
			"КонфликтыПредопределенныхЭлементов_" + Результат.ИмяОбъектаМетаданных);
	КонецЕсли;

КонецПроцедуры

#КонецОбласти

#Область СлужебныеПроцедурыИФункции

// Возвращает навигационную ссылку для оповещений.
//
// Параметры:
//  ИмяОбъекта	 - Строка - Полное имя объекта метаданных
//
// Возвращаемое значение:
//  Строка - навигационная ссылка
//
Функция НавигационнаяСсылкаОбъекта(ИмяОбъекта)
	Возврат "e1cib/list/" + ИмяОбъекта;
КонецФункции

#КонецОбласти


// Библиотека проектных подсистем для упрощения разработки архитектуры на 1С: Предприятие 8,
// включая доработку типовых конфигураций.
//
// Copyright First BIT company
//
//   Licensed under the Apache License, Version 2.0 (the "License");
//   you may not use this file except in compliance with the License.
//   You may obtain a copy of the License at
//
//       http://www.apache.org/licenses/LICENSE-2.0
//
//   Unless required by applicable law or agreed to in writing, software
//   distributed under the License is distributed on an "AS IS" BASIS,
//   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
//   See the License for the specific language governing permissions and
//   limitations under the License.
//
// URL:    https://github.com/firstBitSportivnaya/PSSL/
//

////////////////////////////////////////////////////////////////////////////////
// Работа с диалогами (клиент): для клиентских методов работы с диалогами.

#Область ПрограммныйИнтерфейс

// Осуществляет выбор составного типа из списка в управляемой форме.
//
// Параметры:
//  ТекущаяФорма  - Форма
//  ЭлементВладелец - ЭлементУправления
//  Контейнер     - Объект,СтрокаТабличнойЧасти
//  ИмяРеквизита  - Строка
//  СписокВыбора  - Список с типами, которые выбираем
//  СтандартнаяОбработка - Булево
//
Процедура НачалоВыбораСоставного(ТекущаяФорма
								,ЭлементВладелец
								,Контейнер
								,ИмяРеквизита
								,СписокВыбора
								,СтандартнаяОбработка) Экспорт

	Если Контейнер = Неопределено Тогда
		Возврат;
	КонецЕсли;

	ЭлементВладелец.ВыбиратьТип = Ложь;

	ТекущееЗначение = Контейнер[ИмяРеквизита];
	Если ТекущееЗначение = Неопределено Тогда

		СтандартнаяОбработка = Ложь;
		ЭлементВладелец.ВыбиратьТип = Истина;

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

КонецПроцедуры

// Процедура - Начало выбора составного завершение
//
// Параметры:
//  Результат			 - Произвольный - Результат выбора данных
//  ПараметрыОповещения	 - Структура - Параметры передаваемые в оповещение
//
Процедура НачалоВыбораСоставного_Завершение(Результат, ПараметрыОповещения) Экспорт

	Если Результат = Неопределено Тогда
		Возврат;
	КонецЕсли;

КонецПроцедуры

#КонецОбласти // ПрограммныйИнтерфейс

#Область СлужебныеПроцедурыИФункции

#КонецОбласти // СлужебныеПроцедурыИФункции


// Библиотека проектных подсистем для упрощения разработки архитектуры на 1С: Предприятие 8,
// включая доработку типовых конфигураций.
//
// Copyright First BIT company
//
//   Licensed under the Apache License, Version 2.0 (the "License");
//   you may not use this file except in compliance with the License.
//   You may obtain a copy of the License at
//
//       http://www.apache.org/licenses/LICENSE-2.0
//
//   Unless required by applicable law or agreed to in writing, software
//   distributed under the License is distributed on an "AS IS" BASIS,
//   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
//   See the License for the specific language governing permissions and
//   limitations under the License.
//
// URL:    https://github.com/firstBitSportivnaya/PSSL/
//

////////////////////////////////////////////////////////////////////////////////
// Работа с диалогами (сервер): для серверных методов работы с диалогами.

#Область ПрограммныйИнтерфейс

// Выполняет стандартные действия при создании на сервере в форме списка.
//
// Параметры:
//  Отказ                   - Булево.
//  СтандартнаяОбработка    - Булево.
//  ТекущаяФорма            - УправляемаяФорма.
//  ДополнительныеПараметры - Структура.
//
Процедура СписокПриСозданииНаСервере(Отказ, СтандартнаяОбработка, ТекущаяФорма, ДополнительныеПараметры = Неопределено) Экспорт

	ПолноеИмяОбъекта = пбп_ОбщегоНазначенияСервер.ПолучитьИмяОбъектаПоИмениФормы(ТекущаяФорма.ИмяФормы, Истина);
	ПолноеИмяОбъекта = СтрШаблон("%1.ФормаСписка", ПолноеИмяОбъекта);

КонецПроцедуры

// Выполняет стандартные действия при создании на сервере в форме выбора.
//
// Параметры:
//  Отказ                   - Булево.
//  СтандартнаяОбработка    - Булево.
//  ТекущаяФорма            - УправляемаяФорма.
//  ДополнительныеПараметры - Структура.
//
Процедура ФормаВыбораПриСозданииНаСервере(Отказ, СтандартнаяОбработка, ТекущаяФорма, ДополнительныеПараметры = Неопределено) Экспорт

	ПолноеИмяОбъекта = пбп_ОбщегоНазначенияСервер.ПолучитьИмяОбъектаПоИмениФормы(ТекущаяФорма.ИмяФормы, Истина);
	ПолноеИмяОбъекта = СтрШаблон("%1.ФормаВыбора", ПолноеИмяОбъекта);

КонецПроцедуры

#КонецОбласти // ПрограммныйИнтерфейс

#Область СлужебныеПроцедурыИФункции

#КонецОбласти // СлужебныеПроцедурыИФункции


// Библиотека проектных подсистем для упрощения разработки архитектуры на 1С: Предприятие 8,
// включая доработку типовых конфигураций.
//
// Copyright First BIT company
//
//   Licensed under the Apache License, Version 2.0 (the "License");
//   you may not use this file except in compliance with the License.
//   You may obtain a copy of the License at
//
//       http://www.apache.org/licenses/LICENSE-2.0
//
//   Unless required by applicable law or agreed to in writing, software
//   distributed under the License is distributed on an "AS IS" BASIS,
//   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
//   See the License for the specific language governing permissions and
//   limitations under the License.
//
// URL:    https://github.com/firstBitSportivnaya/PSSL/
//

////////////////////////////////////////////////////////////////////////////////
// Работа с коллекциями (клиент, сервер): Модуль содержит методы работы с универсальными коллекциями значений.

#Область ПрограммныйИнтерфейс

#Область РаботаСМассивами

// Ищет элемент в массиве. Если находит - возвращает его индекс, иначе -1.
//
// Параметры:
//  МассивДанные - МассивДанных - Массив данных для поиска.
//  Элемент		 - Произвольный - Искомый элемент в массиве.
//
// Возвращаемое значение:
// Число - Индекс элемента в массиве. Если не найден, -1.
//
Функция ВернутьИндексВМассиве(МассивДанных, Элемент) Экспорт

	Если МассивДанных = Неопределено Тогда
		Возврат -1;
	КонецЕсли;

	Для ИндексЭлемента = 0 По МассивДанных.ВГраница() Цикл

		Если (МассивДанных[ИндексЭлемента] = Элемент) Тогда
			Возврат ИндексЭлемента;
		КонецЕсли;
	КонецЦикла;

	Возврат -1;

КонецФункции

// Определяет входит ли в массив переданное значение.
//
// Параметры:
//  ТекущийМассив	 - Массив - Массив данных.
//  ЗначениеПоиска	 - Произвольный - Искомое значение.
//
// Возвращаемое значение:
//  Булево - Результат поиска значения в массиве.
//
Функция МассивСодержит(ТекущийМассив, ЗначениеПоиска)  Экспорт

	Возврат ТекущийМассив.Найти(ЗначениеПоиска) <> Неопределено;

КонецФункции

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

	Индекс = МассивЭлементов.Найти(Значение);
	Если Индекс <> Неопределено Тогда
		МассивЭлементов.Удалить(Индекс);
	КонецЕсли;

КонецПроцедуры

// Удаляет повторяющиеся элементы массива.
//
// Параметры:
//  ИсходныйМассив 		- Массив - Массив данных.
//  УдалитьНеопределено - Булево (По умолчанию = Ложь) - Признак удаления .
//
// Возвращаемое значение:
//  Массив - Массив данных после удаления дублей.
//
Функция УдалитьПовторяющиесяЭлементыМассива(ИсходныйМассив, УдалитьНеопределено = Ложь) Экспорт

	НовыйМассив = Новый Массив;

	Для Каждого ЭлементМассива Из ИсходныйМассив Цикл

		Если Не МассивСодержит(НовыйМассив, ЭлементМассива)
			И Не (ЭлементМассива = Неопределено И УдалитьНеопределено) Тогда

			НовыйМассив.Добавить(ЭлементМассива);
		КонецЕсли;
	КонецЦикла;

	Возврат НовыйМассив;

КонецФункции // УдалитьПовторяющиесяЭлементыМассива()

// Преобразовывает массив строк в массив чисел.
// В случае невозможности преобразования элемента, элементу присваивается -1.
//
// Параметры:
//  МассивСтрок - Массив - Массив данных
//
Процедура ПреобразоватьМассивСтрокВЧисла(МассивСтрок) Экспорт

	Для Сч = 1 По МассивСтрок.Количество() Цикл

		Попытка
			МассивСтрок[Сч - 1] = Число(МассивСтрок[Сч - 1]);
		Исключение
			МассивСтрок[Сч - 1] = -1;
		КонецПопытки;
	КонецЦикла;

КонецПроцедуры // ПреобразоватьМассивСтрокВЧисла()

#КонецОбласти

#Область РаботаСДеревьями

// Функция выполняет поиск элемента дерева в коллекции.
//
// Параметры:
//  Коллекция		 - ДанныеФормыКоллекцияЭлементовДерева - Дерево.
//  СтруктураПоиска	 - Структура - Структура поиска элемента.
//
// Возвращаемое значение:
// ДанныеФормыЭлементДерева - Результат поиска элемента дерева.
//
Функция НайтиЭлементДерева(Коллекция, СтруктураПоиска) Экспорт

	НайденныйЭлемент = Неопределено;

	Для Каждого Элемент Из Коллекция Цикл

		Совпадение = Истина;
		Для Каждого ТекущаяСтрока Из СтруктураПоиска Цикл

			Если Не Элемент[ТекущаяСтрока.Ключ] = ТекущаяСтрока.Значение Тогда

				Совпадение = Ложь;
				Прервать;
			КонецЕсли;
		КонецЦикла;

		Если Совпадение Тогда

			НайденныйЭлемент = Элемент;
			Прервать;
		КонецЕсли;
	КонецЦикла;

	Возврат НайденныйЭлемент;

КонецФункции

#КонецОбласти

#Область РаботаСоСписками

// Выполняет поиск элемента списка значени по представлению.
//
// Параметры:
//   Список           - СписокЗначений - Список данных.
//   Представление    - Строка - Значение поиска.
//   УчитыватьРегистр - Булево - Признак учитывания регистра при поиске.
//
// Возвращаемое значение:
//  ЭлементСпискаЗначений - Результат поиска.
//
Функция НайтиЭлементСпискаПоПредставлению(Список, Представление, УчитыватьРегистр = Ложь) Экспорт

	НайденныйЭлемент = Неопределено;

	Для Каждого ТекущаяСтрока Из Список Цикл

		Если УчитыватьРегистр Тогда

			Если ТекущаяСтрока.Представление = Представление Тогда

				НайденныйЭлемент = ТекущаяСтрока;
				Прервать;
			КонецЕсли;
		Иначе

			Если ВРег(ТекущаяСтрока.Представление) = ВРег(Представление) Тогда

				НайденныйЭлемент = ТекущаяСтрока;
				Прервать;
			КонецЕсли;
		КонецЕсли;
	КонецЦикла;

	Возврат НайденныйЭлемент;

КонецФункции

#КонецОбласти

#КонецОбласти

#Область СлужебныеПроцедурыИФункции

#КонецОбласти


// Библиотека проектных подсистем для упрощения разработки архитектуры на 1С: Предприятие 8,
// включая доработку типовых конфигураций.
//
// Copyright First BIT company
//
//   Licensed under the Apache License, Version 2.0 (the "License");
//   you may not use this file except in compliance with the License.
//   You may obtain a copy of the License at
//
//       http://www.apache.org/licenses/LICENSE-2.0
//
//   Unless required by applicable law or agreed to in writing, software
//   distributed under the License is distributed on an "AS IS" BASIS,
//   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
//   See the License for the specific language governing permissions and
//   limitations under the License.
//
// URL:    https://github.com/firstBitSportivnaya/PSSL/
//

#Область ПрограммныйИнтерфейс

Функция ПолучитьМакетСтруктурыКолонок() Экспорт

	Возврат ПолучитьМакет("СтруктураКолонокФайла");

КонецФункции

Функция ПолучитьМакетШаблонаВнешнейОбработки() Экспорт

	Возврат ПолучитьМакет("ШаблонВнешнейОбработки");

КонецФункции

#КонецОбласти // ПрограммныйИнтерфейс


// Библиотека проектных подсистем для упрощения разработки архитектуры на 1С: Предприятие 8,
// включая доработку типовых конфигураций.
//
// Copyright First BIT company
//
//   Licensed under the Apache License, Version 2.0 (the "License");
//   you may not use this file except in compliance with the License.
//   You may obtain a copy of the License at
//
//       http://www.apache.org/licenses/LICENSE-2.0
//
//   Unless required by applicable law or agreed to in writing, software
//   distributed under the License is distributed on an "AS IS" BASIS,
//   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
//   See the License for the specific language governing permissions and
//   limitations under the License.
//
// URL:    https://github.com/firstBitSportivnaya/PSSL/
//

////////////////////////////////////////////////////////////////////////////////
// <Заголовок модуля: краткое описание и условия применения модуля.>
//
////////////////////////////////////////////////////////////////////////////////

#Область ОбработчикиСобытийФормы

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

	пбп_МодификацияКонфигурацииПереопределяемый.ПриСозданииНаСервере(ЭтаФорма, Отказ, СтандартнаяОбработка);

КонецПроцедуры

&НаКлиенте
Процедура ПриОткрытии(Отказ)

	пбп_МодификацияКонфигурацииКлиентПереопределяемый.ПриОткрытии(ЭтотОбъект, Отказ);

КонецПроцедуры

#КонецОбласти

#Область ОбработчикиСобытийЭлементовШапкиФормы

#КонецОбласти

#Область ОбработчикиСобытийЭлементовТаблицыФормы

#КонецОбласти

#Область ОбработчикиКомандФормы

&НаКлиенте
Процедура ПоказатьОтца(Команда)

	ПоказатьОтцаНаСервере();

КонецПроцедуры

&НаКлиенте
Процедура ПодсказатьКогдаОбед(Команда)

	ШаблонСообщения = НСтр("ru='Привет, текущее время %1'; en='Hello, the current time is %1'");
	ТекстСообщения = СтрШаблон(ШаблонСообщения,
		Формат(пбп_ОбщегоНазначенияВызовСервера.ТекущаяДатаПользователя(), "ДЛФ=DT"));

	пбп_ПереадресацияКлиент.СообщитьПользователю(ТекстСообщения);

КонецПроцедуры

&НаКлиенте
Процедура СкрытьОтца(Команда)

	СкрытьОтцаНаСервере();

КонецПроцедуры

#КонецОбласти

#Область СлужебныеПроцедурыИФункции

&НаСервере
Процедура СкрытьОтцаНаСервере()

	Если Не пбп_ПереадресацияКлиентСервер.ЗначениеСвойстваЭлементаФормы(Элементы, "_ДемоBotFather", "Видимость") Тогда
		пбп_Переадресация.СообщитьПользователю(НСтр("ru='Он и так не с нами.'; en='He`s not with us anyway.'"));
	Иначе
		пбп_ПереадресацияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "_ДемоBotFather", "Видимость", Ложь);
	КонецЕсли;

КонецПроцедуры

&НаСервере
Процедура ПоказатьОтцаНаСервере()

	Если пбп_ПереадресацияКлиентСервер.ЗначениеСвойстваЭлементаФормы(Элементы, "_ДемоBotFather", "Видимость") Тогда
		пбп_Переадресация.СообщитьПользователю(НСтр("ru='Присмотрись получше.'; en='Take a closer look.'"));
	Иначе
		пбп_ПереадресацияКлиентСервер.УстановитьСвойствоЭлементаФормы(Элементы, "_ДемоBotFather", "Видимость", Истина);
	КонецЕсли;

КонецПроцедуры

#КонецОбласти


// Библиотека проектных подсистем для упрощения разработки архитектуры на 1С: Предприятие 8,
// включая доработку типовых конфигураций.
//
// Copyright First BIT company
//
//   Licensed under the Apache License, Version 2.0 (the "License");
//   you may not use this file except in compliance with the License.
//   You may obtain a copy of the License at
//
//       http://www.apache.org/licenses/LICENSE-2.0
//
//   Unless required by applicable law or agreed to in writing, software
//   distributed under the License is distributed on an "AS IS" BASIS,
//   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
//   See the License for the specific language governing permissions and
//   limitations under the License.
//
// URL:    https://github.com/firstBitSportivnaya/PSSL/
//

#Если Сервер Или ТолстыйКлиентОбычноеПриложение Или ВнешнееСоединение Тогда

#Область ПрограммныйИнтерфейс

// Добавить запись.
//
// Параметры:
//  ПараметрыЗаписи - Структура - набор параметров Для записи. Ключи:
//   * Период - Дата - дата загрузки файла
//   * ИнтеграционныйПоток - СправочникСсылка.пбп_ИнтеграционныеПотоки - интеграционный поток
//   * ИмяФайла - Строка - имя файла
//   * Обработан - Булево - статус обработки файла
//
Процедура ДобавитьЗапись(ПараметрыЗаписи) Экспорт

	Если Не ЗначениеЗаполнено(ПараметрыЗаписи.ИнтеграционныйПоток) Тогда
		ВызватьИсключение НСтр("ru='Не указан интеграционный поток'");
	КонецЕсли;

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

	Попытка
		МенеджерЗаписи = СоздатьМенеджерЗаписи();
		ЗаполнитьЗначенияСвойств(МенеджерЗаписи, ПараметрыЗаписи);

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

КонецПроцедуры

// Изменить запись.
//
// Параметры:
//  ПараметрыЗаписи - Структура - набор параметров Для записи. Ключи:
//   * Период - Дата - дата загрузки файла
//   * ИнтеграционныйПоток - СправочникСсылка.пбп_ИнтеграционныеПотоки - интеграционный поток
//   * ИмяФайла - Строка - имя файла
//   * Обработан - Булево - статус обработки файла
//
Процедура ИзменитьЗапись(ПараметрыЗаписи) Экспорт

	НаборЗаписей = СоздатьНаборЗаписей();

	Если ЗначениеЗаполнено(ПараметрыЗаписи.Период) Тогда
		НаборЗаписей.Отбор.Период.Установить(ПараметрыЗаписи.Период);
	КонецЕсли;

	Если ЗначениеЗаполнено(ПараметрыЗаписи.ИнтеграционныйПоток) Тогда
		НаборЗаписей.Отбор.ИнтеграционныйПоток.Установить(ПараметрыЗаписи.ИнтеграционныйПоток);
	КонецЕсли;

	Если ПараметрыЗаписи.Свойство("ИмяФайла")
		И ЗначениеЗаполнено(ПараметрыЗаписи.ИмяФайла) Тогда
		НаборЗаписей.Отбор.ИмяФайла.Установить(ПараметрыЗаписи.ИмяФайла);
	КонецЕсли;

	НаборЗаписей.Прочитать();

	Если НаборЗаписей.Количество() Тогда
		Запись = НаборЗаписей[0];
		Для Каждого КлючИЗначение Из ПараметрыЗаписи Цикл
			Запись[КлючИЗначение.Ключ] = КлючИЗначение.Значение;
		КонецЦикла;

		НаборЗаписей.Записать();
	КонецЕсли;

КонецПроцедуры

// Удалить запись.
//
// Параметры:
//  ПараметрыЗаписи - Структура - набор параметров Для записи. Ключи:
//   * Период - Дата - дата загрузки файла
//   * ИнтеграционныйПоток - СправочникСсылка.пбп_ИнтеграционныеПотоки - интеграционный поток
//   * ИмяФайла - Строка - имя файла
Процедура УдалитьЗаписи(ПараметрыЗаписи) Экспорт

	Если ТипЗнч(ПараметрыЗаписи) <> Тип("Структура") Тогда
		ВызватьИсключение НСтр("ru='Некорректный тип параметра'");
	КонецЕсли;

	НачатьТранзакцию();
	Попытка
		НаборЗаписей = СоздатьНаборЗаписей();
		Для Каждого КлючИЗначение Из ПараметрыЗаписи Цикл
			Если Не ЗначениеЗаполнено(КлючИЗначение.Значение) Тогда
				Продолжить;
			КонецЕсли;

			НаборЗаписей.Отбор[КлючИЗначение.Ключ].Установить(КлючИЗначение.Значение);
		КонецЦикла;

		НаборЗаписей.Очистить();
		НаборЗаписей.Записать();

		ТекстСообщения = НСтр("ru='Удаление записей истории загрузки файлов'");
		ЗаписьЖурналаРегистрации(ТекстСообщения,
			УровеньЖурналаРегистрации.Информация, , ,
			"Параметры: " + СтрСоединить(ПараметрыЗаписи));

		ЗафиксироватьТранзакцию();
	Исключение
		ОтменитьТранзакцию();
		ВызватьИсключение;
	КонецПопытки;

КонецПроцедуры

#КонецОбласти // ПрограммныйИнтерфейс

#КонецЕсли