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