Имя: Пароль:
1C
1С v8
Обработка выбора
0 Масянька
 
21.06.12
11:56
Доброе утро!
Есть реквизит - ПлатежныйДокумент. Обрабатывается выбор:


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

Проверка();
   КонецЕсли;

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

Проверка:

Процедура Проверка()
   
   Если ЗначениеЗаполнено(Контрагент) Тогда
       СтарыйКонтрагент = Контрагент;
   КонецЕсли;
   
   Если ЗначениеЗаполнено(ДоговорКонтрагента) Тогда
       СтарыйДоговор = ДоговорКонтрагента;
   КонецЕсли;
   
   Если ЗначениеЗаполнено(ВалютаДокумента) Тогда
       СтараяВалюта = ВалютаДокумента;
   КонецЕсли;
   
   Если ЗначениеЗаполнено(СтавкаНДС) Тогда
       СтараяСтавкаНДС = СтавкаНДС;
   КонецЕсли;

   Если ЗначениеЗаполнено(ПлатежныйДокумент) Тогда
       
       // проверяем контрагента
       КонтрагентИзПлатежки    = ПлатежныйДокумент.Контрагент;
       
       Если (КонтрагентИзПлатежки <> СтарыйКонтрагент) Тогда
           Предупреждение("Выбор не верен: не соответствие контрагента.");
           ПлатежныйДокумент = "";
           Возврат;
       КонецЕсли;
       
       // проверяем договор
       ДоговорИзПлатежки    = ПлатежныйДокумент.ДоговорКонтрагента;
       
       Если (ДоговорИзПлатежки <> СтарыйДоговор) Тогда
           Предупреждение("Выбор не верен: не соответствие договора контрагента.");
           ПлатежныйДокумент = "";
           Возврат;
       КонецЕсли;
       
       // проверяем валюту
       ВалютаИзПлатежки    = ПлатежныйДокумент.ВалютаДокумента;
       
       Если (ВалютаИзПлатежки <> СтараяВалюта) Тогда
           Предупреждение("Выбор не верен: не соответствие валюты.");
           ПлатежныйДокумент = "";
           Возврат;
       КонецЕсли;
       
       // проверяем НДС
       СтавкаНДСИзПлатежки    = ПлатежныйДокумент.РасшифровкаПлатежа.СтавкаНДС;
       Если (СтавкаНДСИзПлатежки <> СтараяСтавкаНДС) Тогда
           Предупреждение("Выбор не верен: не соответствие ставки НДС.");
           ПлатежныйДокумент = "";
           Возврат;
       КонецЕсли;
   КонецЕсли;
КонецПроцедуры    

Вроде работает, но платежка успевает прорисоваться.
Может можно как-то по-другому?
Спасибо.
1 zak555
 
21.06.12
12:02
зачем тебе такие документы, как элСчет ?
2 Масянька
 
21.06.12
12:02
А по вопросу?
3 kosts
 
21.06.12
12:04
(0) >Может можно как-то по-другому?
Всегда можно сделать по другому.

А что хотела то?
4 Масянька
 
21.06.12
12:12
Платежный документ - фильтруется по данному контрагенту и в зависимости от счета (полученный - списание с расч. счета, выставленный - поступление). Но: фильтр можно отключить, тогда все контрагенты вываливаются - нельзя. потом: в выбранной платежке не та валюта или НДС - тоже нельзя. Вот проверка и проверяет допустимость. Но если "нельзя", то выводится окошко с предупреждением, но в строке "Платежка" уже прописана выбранная платежка. Когда закрывается окно предупреждение - платежка очищается. Но мне хочется, что платежка не прорисовывалась, если нельзя.
"ПриИзменении" не работает. Насколько я понимаю, потому что в обработке выбора стоит СтандартнаяОбработка=Ложь.
5 kosts
 
21.06.12
12:16
(4) ПлатежныйДокументТМП    = ФормаВыбораПлатежки.ОткрытьМодально();

Если ПлатежкаПравильная(ПлатежныйДокументТМП) Тогда
   ПлатежныйДокумент = ПлатежныйДокументТМП;
КонецЕсли;
6 Масянька
 
21.06.12
12:22
Огромное спасибо!!!!!