Имя: Пароль:
1C
1С v8
Проверка ПередЗаписью
,
0 1Slash1
 
01.12.16
15:08
Помогите!!!

Если есть контрагент с наименованием "А", при попытке создать еще одного контрагента с таким же наименованием "А", система должна выдать предупреждение и не сохранить его.
1 FIXXXL
 
01.12.16
15:10
чем помочь то?
2 DrShad
 
01.12.16
15:18
(1)+1
3 mehfk
 
01.12.16
15:19
(1) Деньгами на программиста, вестимо.
4 1Slash1
 
01.12.16
15:20
Реализацией, или подскажиет хоть как сделать
5 BeerHelpsMeWin
 
01.12.16
15:22
в ПередЗаписью:
-выполнить поиск контрагента с наименованием "А"
-помедитировать над результатом
-обработать результат
6 1Slash1
 
01.12.16
15:26
А  чуть конкретнее,если можна.Можете описать это в виде кода?
7 Масянька
 
01.12.16
15:31
(0) Может лучше по ИНН контролировать дубли?
8 dka80
 
01.12.16
15:32
В модуле объекта:
Процедура ПередЗаписью(Отказ)

Если Справочник.Контрагенты.НайтиПоНаименованию(Наименование) <> Справочник.Контрагенты.ПустаяСсылка Тогда
Отказ = Истина
КонецЕсли;
КонецПроцедуры
9 1Slash1
 
01.12.16
15:36
Сейчас проверю, спасибо
10 Lexey_
 
01.12.16
15:37
(8) не даст записать второй раз
11 Lexey_
 
01.12.16
15:38
+(10) этого же контрагента
12 Масянька
 
01.12.16
15:39
(11) Ну, и не фиг по сто раз записывать одного и того же контрагента. Нужно один раз сделать и забыть. :))))))
13 DrShad
 
01.12.16
15:39
Процедура ПередЗаписью(Отказ)

НайденныйКонтрагент = Справочник.Контрагенты.НайтиПоНаименованию(Наименование) ;
Если НайденныйКонтрагент <> Ссылка И НайденныйКонтрагент <> Справочник.Контрагенты.ПустаяСсылка Тогда
Отказ = Истина
КонецЕсли;
КонецПроцедуры
14 Heckfy
 
01.12.16
15:41
Если Объект.ЭтоНовый() Тогда

Не?
15 Lexey_
 
01.12.16
15:42
(13) если в базе будет "Иванов", то не даст создать "Иван"
16 Масянька
 
01.12.16
15:44
Объясните мне, что по ИНН уже не кошерно?
17 Dark_Warrior
 
01.12.16
15:54
(0) А конфа-то какая? В некоторых это штатно реализовано.
18 DrShad
 
01.12.16
15:57
(15) НайденныйКонтрагент = Справочник.Контрагенты.НайтиПоНаименованию(Наименование, Истина) ;

теперь ты за ТС спокоен?
19 Heckfy
 
01.12.16
15:58
:)

&НаКлиенте
Процедура ПередЗаписью(Отказ, ПараметрыЗаписи)
    ЕстьК = НайтиДубль (Объект.ИНН,Объект.КПП);    
    Если ЗначениеЗаполнено(ЕстьК) тогда
        Предупреждение("Контрагент с таким ИНН уже есть! "+ЕстьК);
Отказ=Истина;
    КонецЕсли;
КонецПроцедуры;

&НаСервере
Функция НайтиДубль(ИНН,КПП)
    запрос = новый запрос;
    запрос.Текст =
    "ВЫБРАТЬ
    |    Контрагенты.Ссылка
    |ИЗ
    |    Справочник. Контрагенты КАК Контрагенты
    |ГДЕ
    |    Контрагенты.ИНН = &ИНН
    |    И Контрагенты.КПП = &КПП
    |    И Контрагенты.Ссылка <> &ссылка";
    Запрос.УстановитьПараметр("ИНН",ИНН);
    Запрос.УстановитьПараметр("КПП",КПП);
    Запрос.УстановитьПараметр("ссылка",объект.Ссылка);
    Выб = Запрос.Выполнить().Выбрать();
    Если выб.Следующий() тогда
        Возврат выб.ссылка;
    Конецесли;
КонецФункции
20 Lexey_
 
01.12.16
15:59
(18) отлегло немного
21 Fragster
 
гуру
01.12.16
16:00
а теперь создаем петрова, сохраняем, а потом переименовываем в иванова
22 Масянька
 
01.12.16
16:00
Издеваетесь?
23 h-sp
 
01.12.16
16:05
(16) несколько контрагентов может иметь один и тот же ИНН. Например, клиент Сбербанк. У вас 50 контрагентов отделений сбербанка и у всех один ИНН. Или например РЖД.
24 1Slash1
 
01.12.16
16:05
Народ ,  по поводу кода , его в модуле обьекта писать?
25 Nolan
 
01.12.16
16:07
(24) -> (8)
26 1Slash1
 
01.12.16
16:11
А если в Документе нужно проверить то там как ?
27 BeerHelpsMeWin
 
01.12.16
16:12
(21)
Кстати, получилась хорошая задачка для собеседования.
28 Fragster
 
гуру
01.12.16
16:14
(27) ну, если только на младшего помощника стажера
29 Nolan
 
01.12.16
16:36
(26) Представь, что в документе тоже есть модуль объекта. Только никому не говори, эта тайная информация.
30 1Slash1
 
01.12.16
16:41
(29) Серьезно!!Некому не скажу
31 1Slash1
 
01.12.16
16:55
Спасибо всем , все получилось
32 HEKPOH
 
01.12.16
17:11
(19) не стоит забывать, что КПП может быть и не заполнен (или у создаваемого, или у существующего). это тоже нужно обработать