Имя: Пароль:
1C
1С v8
контроль повтора ввода в управляемых формах
0 wwwqwert2014
 
26.06.13
17:11
Есть ТЧ Проекты, в которой всего одна колонка Проект. Необходимо осуществить контроль, чтобы один и тот же проект не был введен 2 раза.
Как правильно такое сделать?
Я писал несколько вариантов, но у меня то в одном месте ошибка, то в другом.

В данном случае не позволяет передать Элемент как аргумент процедуры:



&НаСервере

Перем МассивПроекты экспорт;
&НаКлиенте
Процедура ПроектыПриИзменении(Элемент)
   
   ПроектыПриИзмененииНаСервере(Элемент);

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

&НаКлиенте
Процедура ПриОткрытии(Отказ)
   // Вставить содержимое обработчика.
   МассивПроекты = Новый Массив;
КонецПроцедуры


&НаСервере
Процедура ПроектыПриИзмененииНаСервере(Элемент)

      // Вставить содержимое обработчика.
          ЕстьПовторения= ложь;
        Если Элемент.ТекущиеДанные.Проект = Справочники.Проекты.ПустаяСсылка() Тогда
            Возврат;
        конецЕсли;
       
     Для Каждого Строка из Объект.Проекты Цикл
         Если Строка.Проект = Элемент.ТекущиеДанные.Проект Тогда
             ЕстьПовторения = Истина;
         КонецЕсли;
     КонецЦикла;
     
     Если ЕстьПовторения = Ложь Тогда
         МассивПроекты.Добавить(Элемент.ТекущиеДанные.Проект);
     Иначе
         Сообщить("Проект " +  Элемент.ТекущиеДанные.Проект + " был уже введен");
         Возврат;
     КонецЕсли;

КонецПроцедуры // ПроектыПриИзмененииНаСервере()
1 wwwqwert2014
 
26.06.13
17:16
up up
2 wwwqwert2014
 
26.06.13
17:28
up up up up
3 SherifSP
 
26.06.13
17:28
(0) Ты не элемент передавай, а ЭлементыФормы.МояТЧ.ТекущиеДанные и не перебирай все строки тч, а пользуйся методом найти или найти строки.
4 SherifSP
 
26.06.13
17:30
&НаКлиенте
Процедура ПроектыПриИзменении(Элемент)
   МойЭлемент = Элемент;
   ПроектыПриИзмененииНаСервере(МойЭлемент);
КонецПроцедуры

Попробуй так
5 zladenuw
 
26.06.13
17:31
а не проще ли в запрос передать и сгруппировать и условие если количество больше двух. тогда ахтунг
6 wwwqwert2014
 
26.06.13
17:53
(5) Попробовал сделать как ты сказал.
&НаСервере
Перем МассивПроекты экспорт;
&НаКлиенте
Процедура ПроектыПриИзменении(Элемент)
   
   ПроектыПриИзмененииНаСервере(ЭлементыФормы.Проекты);

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

&НаКлиенте
Процедура ПриОткрытии(Отказ)
   // Вставить содержимое обработчика.
   МассивПроекты = Новый Массив;
КонецПроцедуры


&НаСервере
Процедура ПроектыПриИзмененииНаСервере(Элемент)

       Запрос = Новый Запрос;
   Запрос.Текст =
       "ВЫБРАТЬ
       |    Массив.Проекты
       |ПОМЕСТИТЬ ВТ_Проекты
       |ИЗ
       |    &Массив КАК Массив
       |;
       |
       |////////////////////////////////////////////////////////////////////////////////
       |ВЫБРАТЬ
       |    ВТ_Проекты.Проекты,
       |    СУММА(1) КАК Количество
       |ИЗ
       |    ВТ_Проекты КАК ВТ_Проекты
       |
       |СГРУППИРОВАТЬ ПО
       |    ВТ_Проекты.Проекты";

   Результат = Запрос.Выполнить();

   ВыборкаДетальныеЗаписи = Результат.Выбрать();

   Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
       // Вставить обработку выборки ВыборкаДетальныеЗаписи
       Если ВыборкаДетальныеЗаписи.Количество > 1 тогда
           Сообщить("Присутствуют одинаковые проекты");
           Возврат;
       Конецесли;
       
   КонецЦикла;

   //}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА


     
КонецПроцедуры // ПроектыПриИзмененииНаСервере()

&НаКлиенте
Процедура ПроектыПроектПриИзменении(Массив)
   // Вставить содержимое обработчика.
       //{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА
   // Данный фрагмент построен конструктором.
   // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!

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



Ругается на Процедура ПроектыПриИзменении(Элемент)
   
   ПроектыПриИзмененииНаСервере(ЭлементыФормы.Проекты);

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

Ошибка:
{Документ.ПриходДенег.Форма.ФормаДокумента.Форма(6,31)}: Переменная не определена (ЭлементыФормы)
   ПроектыПриИзмененииНаСервере(<<?>>ЭлементыФормы.Проекты); (Проверка: Тонкий клиент)
7 МихаилМ
 
26.06.13
18:10
8 zladenuw
 
26.06.13
18:23
у меня так получилось


&НаКлиенте
Процедура ТабличнаяЧасть1Реквизит1ПриИзменении(Элемент)
   МояФ();
КонецПроцедуры

&НаСервере
Функция МояФ()
   
   ТекущаяСтрока = Объект.ТабличнаяЧасть1[Элементы.ТабличнаяЧасть1.ТекущаяСтрока];    
   МассивНайденных = Объект.ТабличнаяЧасть1.НайтиСтроки(Новый Структура("Реквизит1",ТекущаяСтрока.Реквизит1));
   Если  МассивНайденных.количество()>1 Тогда
       СообП = Новый СообщениеПользователю;
       СообП.Текст = "дубль значения";
       СообП.ПутьКДанным = "ТабличнаяЧасть1["+Объект.ТабличнаяЧасть1[Элементы.ТабличнаяЧасть1.ТекущаяСтрока].ПолучитьИдентификатор()+"].Реквизит1";
       
       СообП.УстановитьДанные(Объект);
       СообП.Сообщить();
       
       
   КонецЕсли;
                             
КонецФункции // ()
9 Поросенок Петр
 
26.06.13
21:54
"ТекущаяСтрока = Объект.ТабличнаяЧасть1[Элементы.ТабличнаяЧасть1.ТекущаяСтрока]; "  

Садись, два.
Закон Брукера: Даже маленькая практика стоит большой теории.