Партнеры / Модуль менеджера

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

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

// СтандартныеПодсистемы.ВерсионированиеОбъектов

// Определяет настройки объекта для подсистемы ВерсионированиеОбъектов.
//
// Параметры:
//  Настройки - Структура - настройки подсистемы.
Процедура ПриОпределенииНастроекВерсионированияОбъектов(Настройки) Экспорт

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

// Конец СтандартныеПодсистемы.ВерсионированиеОбъектов

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

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

// Определяет настройки начального заполнения элементов
//
// Параметры:
//  Настройки - Структура - настройки заполнения:
//   * ПриНачальномЗаполненииЭлемента - Булево - Если Истина, то для каждого элемента будет
//      вызвана процедура индивидуального заполнения ПриНачальномЗаполненииЭлемента.
Процедура ПриНастройкеНачальногоЗаполненияЭлементов(Настройки) Экспорт
	
	Настройки.ПриНачальномЗаполненииЭлемента = Истина;
	
КонецПроцедуры

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

	КодОсновногоЯзыка = ОбщегоНазначения.КодОсновногоЯзыка();
	
	#Область НашеПредприятие
	Элемент = Элементы.Добавить();
	Элемент.Код = "00-00000001";
	Элемент.ИмяПредопределенныхДанных = "НашеПредприятие";
	Элемент.Наименование = НСтр("ru = 'Наше предприятие'", КодОсновногоЯзыка);
	Элемент.НаименованиеПолное = НСтр("ru = 'Наше предприятие'", КодОсновногоЯзыка);
	Элемент.ЮрФизЛицо = Перечисления.КомпанияЧастноеЛицо.Компания;
	Элемент.ДатаРегистрации = Дата("19800101000000");
	
	Если ПолучитьФункциональнуюОпцию("ИспользоватьПартнеровКакКонтрагентов") Тогда
		СсылкаНашеПредприятие = Справочники.Партнеры.НашеПредприятие;
		МассивПартнеров = ПартнерыИКонтрагенты.ПолучитьВсехКонтрагентовПартнера(СсылкаНашеПредприятие);
		Если МассивПартнеров.Количество() = 0 Тогда
			Контрагент = Справочники.Контрагенты.СоздатьЭлемент();
			Контрагент.Наименование = Элемент.Наименование;
			Контрагент.НаименованиеПолное = Элемент.НаименованиеПолное;
			Контрагент.ЮрФизЛицо = Перечисления.ЮрФизЛицо.ЮрЛицо;
			Контрагент.Партнер = СсылкаНашеПредприятие;
			Контрагент.Записать();
		КонецЕсли;
	КонецЕсли;
	#КонецОбласти

	#Область НеизвестныйПартнер
	Элемент = Элементы.Добавить();
	Элемент.Код = "00-00000002";
	Элемент.ИмяПредопределенныхДанных = "НеизвестныйПартнер";
	Элемент.Наименование = НСтр("ru = 'Неизвестный партнер'", КодОсновногоЯзыка);
	Элемент.НаименованиеПолное = НСтр("ru = 'Неизвестный партнер'", КодОсновногоЯзыка);
	Элемент.ЮрФизЛицо = Перечисления.КомпанияЧастноеЛицо.Компания;
	Элемент.ДатаРегистрации = Дата("19800101000000");
	Элемент.Клиент = Истина;
	Элемент.Поставщик = Истина;
	Элемент.ПрочиеОтношения = Истина;
	#КонецОбласти

	#Область РозничныйПокупатель
	Элемент = Элементы.Добавить();
	Элемент.Код = "00-00000003";
	Элемент.ИмяПредопределенныхДанных = "РозничныйПокупатель";
	Элемент.Наименование = НСтр("ru = 'Розничный покупатель'", КодОсновногоЯзыка);
	Элемент.НаименованиеПолное = НСтр("ru = 'Розничный покупатель'", КодОсновногоЯзыка);
	Элемент.ЮрФизЛицо = Перечисления.КомпанияЧастноеЛицо.ЧастноеЛицо;
	Элемент.ДатаРегистрации = Дата("19800101000000");
	Элемент.Клиент = Истина;
	#КонецОбласти

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

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

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

// Производит удаление индивидуального прайс листа для объекта.
// 
// Параметры:
// 	Ссылка - СправочникСсылка.Партнеры - Ссылка на колонку прайс лист.
// Возвращаемое значение:
// 	Булево - результат выполнения.
Функция УдалитьИПЛ(Ссылка) Экспорт
	РезультатОперации = Ложь;	
	
		
	СправочникОбъект = Ссылка.получитьОбъект();
	СправочникОбъект.ИндивидуальныйВидЦены = Справочники.ВидыЦен.ПустаяСсылка();
	УстановитьПривилегированныйРежим(Истина);
	СправочникОбъект.Записать();
	УстановитьПривилегированныйРежим(Ложь);
	
	
	РезультатОперации = Истина;
	
	Возврат РезультатОперации;
КонецФункции

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

// СтандартныеПодсистемы.УправлениеДоступом

// Параметры:
//   Ограничение - см. УправлениеДоступомПереопределяемый.ПриЗаполненииОграниченияДоступа.Ограничение.
//
Процедура ПриЗаполненииОграниченияДоступа(Ограничение) Экспорт

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

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

// Конец СтандартныеПодсистемы.УправлениеДоступом

// СтандартныеПодсистемы.ЗагрузкаДанныхИзФайла

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

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

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

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

	КонецЦикла;
	
КонецПроцедуры

//Конец СтандартныеПодсистемы.ЗагрузкаДанныхИзФайла

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

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

#КонецЕсли

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

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

Процедура ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка)
	
	Результат = ПартнерыИКонтрагентыВызовСервера.ПартнерыДанныеВыбора(Параметры);
	
	Если Результат <> Неопределено Тогда
		
		СтандартнаяОбработка = ЛОЖЬ;
		ДанныеВыбора = Результат;
		
	КонецЕсли;
	
КонецПроцедуры

#КонецЕсли

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

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

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

Процедура ОбработкаПолученияПредставления(Данные, Представление, СтандартнаяОбработка)
	
	МультиязычностьКлиентСервер.ОбработкаПолученияПредставления(Данные, Представление, СтандартнаяОбработка);
	
КонецПроцедуры

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

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

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

#Область Назначения

//++ НЕ УТ

// Возвращает шаблон для генерации назначения
//
// Параметры:
// 		Объект - СправочникОбъект.Партнеры, ДанныеФормыСтруктура - объект по которому необходимо получить шаблон назначения.
//
// Возвращаемое значение:
// 		См. Справочники.Назначения.ШаблонНового
//
Функция ШаблонНазначенияПереработчика(Объект) Экспорт
	
	ШаблонНазначения = Справочники.Назначения.ШаблонНового();
	ШаблонНазначения.Партнер = Объект.Ссылка;
	
	Возврат ШаблонНазначения;
	
КонецФункции

//-- НЕ УТ

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

#Область ОбновлениеИнформационнойБазы

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

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

	Обработчик = Обработчики.Добавить();
	Обработчик.Процедура = "Справочники.Партнеры.ОбработатьДанныеДляПереходаНаНовуюВерсию";
	Обработчик.Версия = "11.5.24.25";
	Обработчик.РежимВыполнения = "Отложенно";
	Обработчик.Идентификатор = Новый УникальныйИдентификатор("95824992-4f28-4d86-ab9e-99e9e5c15da4");
	Обработчик.Многопоточный = Истина;
	Обработчик.ПроцедураЗаполненияДанныхОбновления = "Справочники.Партнеры.ЗарегистрироватьДанныеКОбработкеДляПереходаНаНовуюВерсию";
	Обработчик.ПроцедураПроверки = "ОбновлениеИнформационнойБазы.ДанныеОбновленыНаНовуюВерсиюПрограммы";
	
	СписокОписаний = Новый Массив;
	СписокОписаний.Добавить(НСтр("ru = 'Обновление справочника ""Партнеры"":'"));
	СписокОписаний.Добавить(НСтр("ru = '- Заполнение мультиязычных реквизитов справочника';"));
	СписокОписаний.Добавить(НСтр("ru = '- Заполнение xml данных контактной информации';"));
	
	Обработчик.Комментарий = СтрСоединить(СписокОписаний, Символы.ПС);
	Обработчик.Порядок = Перечисления.ПорядокОбработчиковОбновления.Обычный;
	
	Читаемые = Новый Массив;
	Читаемые.Добавить(Метаданные.Справочники.Партнеры.ПолноеИмя());
	Обработчик.ЧитаемыеОбъекты = СтрСоединить(Читаемые, ",");
	
	Изменяемые = Новый Массив;
	Изменяемые.Добавить(Метаданные.Справочники.Партнеры.ПолноеИмя());
	Обработчик.ИзменяемыеОбъекты = СтрСоединить(Изменяемые, ",");
	
	Блокируемые = Новый Массив;
	Блокируемые.Добавить(Метаданные.Справочники.Партнеры.ПолноеИмя());
	Обработчик.БлокируемыеОбъекты = СтрСоединить(Блокируемые, ",");

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

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

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

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

#Область Прочее

Процедура ЗаполнитьСтруктуруПолучателейПечатныхФорм(СтруктураДанныхОбъектаПечати) Экспорт
	
	СтруктураДанныхОбъектаПечати.ОсновнойПолучатель = "Ссылка";

	МассивРеквизитовПолучателей = СтруктураДанныхОбъектаПечати.МассивРеквизитовПолучателей; // Массив
	МассивРеквизитовПолучателей.Добавить("Ссылка");
	
КонецПроцедуры

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

#Область Отчеты

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

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

#Область ШаблоныСообщений

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

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

// Заполняет список получателей SMS при отправке сообщения сформированного по шаблону.
//
// Параметры:
//   ПолучателиSMS - ТаблицаЗначений - список получается SMS:
//     * НомерТелефона - Строка - номер телефона, куда будет отправлено сообщение SMS.
//     * Представление - Строка - представление получателя сообщения SMS.
//     * Контакт       - СправочникСсылка - контакт, которому принадлежит номер телефона.
//  ПредметСообщения - ЛюбаяСсылка - ссылка на объект являющийся источником данных.
//
Процедура ПриЗаполненииТелефоновПолучателейВСообщении(ПолучателиSMS, ПредметСообщения) Экспорт
	
КонецПроцедуры

// Заполняет список получателей письма при отправки сообщения сформированного по шаблону.
//
// Параметры:
//   ПолучателиПисьма - ТаблицаЗначений - список получается письма:
//     * Адрес           - Строка - адрес электронной почты получателя.
//     * Представление   - Строка - представление получается письма.
//     * ВариантОтправки - Строка - Варианты отправки письма: "Кому", "Копия", "СкрытаяКопия", "ОбратныйАдреса";
//  ПредметСообщения - ЛюбаяСсылка - ссылка на объект являющийся источником данных.
//
Процедура ПриЗаполненииПочтыПолучателейВСообщении(ПолучателиПисьма, ПредметСообщения) Экспорт
	
КонецПроцедуры

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

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

#КонецЕсли

Связанные материалы