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