Имя: Пароль:
1C
1C 7.7
v7: Проверка перед записью в справочник
0 Pazan
 
20.01.12
15:59
1С77
Имеется процедура в документе:

Процедура Клиент()          
   
СпрКлиент                                = СоздатьОбъект("Справочник.Клиенты");  
СпрКлиент.Новый();  
СпрКлиент.Наименование    = Получатель1;
СпрКлиент.ЕГРПОУ                = Получатель1_Код;    
СпрКлиент.Полн_Наим            = Получатель1;  
СпрКлиент.Банк                    = Получатель1_Банк;  
СпрКлиент.Счет                    = Получатель1_Счет;    
СпрКлиент.МФО                        = Получатель1_Банк_МФО;
СпрКлиент.Город_Банк        = Получатель1_Банк_Город;

СпрКлиент.Записать();                    

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

Вопрос: Как перед записью проверить на существование клиента, сравнив заполенение реквизита справочника .ЕГРПОУ и текстового поля документа Получатель1_Код. Если совпадает - предупредить, если пустой реквизит, аналогично сравнить .Наименование и Получатель1?
1 Ковычки
 
20.01.12
16:01
Если
2 Ковычки
 
20.01.12
16:01
найтипореквизиту
перебор
запрос
3 viktor_vv
 
20.01.12
16:01
НайтиПоРеквизиту() = 1
4 viktor_vv
 
20.01.12
16:02
Тольок флажок "сортировка" на реквизите справочника должен стоять.
5 Pazan
 
20.01.12
16:09
Хм...
   
СпрКлиент                                = СоздатьОбъект("Справочник.Клиенты");  
СпрКлиент.Новый();  

//Поиск по реквизиту НАЧАЛО

СпрКлиент.НайтиПоРеквизиту("ЕГРПОУ", Получатель1_Код, 1);
Если СпрКлиент.Выбран() > 0 Тогда
Сообщить("Клиент существует")
 Иначе

СпрКлиент.Наименование    = Получатель1;
СпрКлиент.ЕГРПОУ                = Получатель1_Код;    
СпрКлиент.Полн_Наим            = Получатель1;  
СпрКлиент.Банк                    = Получатель1_Банк;  
СпрКлиент.Счет                    = Получатель1_Счет;    
СпрКлиент.МФО                        = Получатель1_Банк_МФО;
СпрКлиент.Город_Банк        = Получатель1_Банк_Город;

КонецЕсли;

// Поиск по реквизиту КОНЕЦ

СпрКлиент.Записать();                    

Так должно быть?
6 viktor_vv
 
20.01.12
16:16
Можно и так, можно и

Если СпрКлиент.НайтиПоРеквизиту("ЕГРПОУ", Получатель1_Код, 1) = 1 Тогда
// нашли
Иначе
// не нашли
// новый
СпрКлиент.Новый();
........
СпрКлиент.Записать();
КонецЕсли ;
7 viktor_vv
 
20.01.12
16:17
(6)+ как в (5) Не надо так делать.
СпрКлиент  = СоздатьОбъект("Справочник.Клиенты");  
//СпрКлиент.Новый();
8 Pazan
 
20.01.12
16:18
жалуется на "Неверное имя реквизита"
9 viktor_vv
 
20.01.12
16:23
(8) Смотри (4).
10 Pazan
 
20.01.12
16:25
флаг установлен -- "Сортировка" + "Отбор за реквизитом". Об этом я знаю, но всё же ошибка
11 Pazan
 
20.01.12
16:27
мож у кого есть похожий пример?
12 viktor_vv
 
20.01.12
16:29
Да все там должно работать. Значит не стоит флаг.
Новый() Перенес после НайтиПоРеквизиту() ?
13 vinogradъ
 
20.01.12
16:31
в НайтиПоРеквизиту в названии реквизита ошибка?
14 Pazan
 
20.01.12
16:36
Языком оригинала:
ДовКлієнт.НайтиПоРеквизиту(Код_ЄДРПОУ, Код1, 1);
{Документ.ПД.Форма.Модуль(143)}: Невірне ім'я реквізита!
15 Pazan
 
20.01.12
16:37
Процедура языком оригинала:

Процедура Клієнт()          
   
ДовКлієнт                    = СоздатьОбъект("Справочник.Клієнти");  

Код_ЄДРПОУ = ДовКлієнт.ЄДРПОУ;
Код1 =  Одержувач1_Код;


ДовКлієнт.НайтиПоРеквизиту(Код_ЄДРПОУ, Код1, 1);
Если ДовКлієнт.Выбран() > 0 Тогда
Сообщить("Клиент существует")
 Иначе
ДовКлієнт.Новый();  
ДовКлієнт.Наименование        = Одержувач1;
ДовКлієнт.ЄДРПОУ            = Одержувач1_Код;    
ДовКлієнт.Повна_Назва        = Одержувач1;  
ДовКлієнт.Банк                = Одержувач1_Банк;  
ДовКлієнт.Рахунок            = Одержувач1_Рахунок;    
ДовКлієнт.МФО                = Одержувач1_Банк_МФО;
ДовКлієнт.Місто_Банк        = Одержувач1_Банк_Місто;

ДовКлієнт.Записать();                    
                                                     

КонецЕсли;
КонецПроцедуры
16 viktor_vv
 
20.01.12
16:39
ДовКлієнт.НайтиПоРеквизиту("ЄДРПОУ", Код1, 1)
17 viktor_vv
 
20.01.12
16:41
Закоментируй
//Код_ЄДРПОУ = ДовКлієнт.ЄДРПОУ;

Тебе ж не значение надо, а имя реквизита, тем более, что в этот момент он еще не спозиционирован.
18 Pazan
 
20.01.12
16:45
Все, понял "ЄДРПОУ". 1-я часть вопроса снята. осталась вторая:

"если пустой реквизит, аналогично сравнить .Наименование и Получатель1?"
19 viktor_vv
 
20.01.12
16:50
НайтиПоНаименованию();
20 viktor_vv
 
20.01.12
16:53
//ДовКлієнт.НайтиПоРеквизиту(Код_ЄДРПОУ, Код1, 1);
Если ДовКлієнт.НайтиПоРеквизиту("ЄДРПОУ", Код1, 1) = 1 Тогда
Сообщить("Клиент существует")
ИначеЕсли ДовКлієнт.НайтиПоНаименованию(СокрЛП(Получатель1), 0, 1) = 1 Тогда
// последний параметр смотри какой тебе надо
Сообщить("Клиент существует");
 Иначе
ДовКлієнт.Новый();  
ДовКлієнт.Наименование         = Одержувач1;
ДовКлієнт.ЄДРПОУ            = Одержувач1_Код;    
ДовКлієнт.Повна_Назва         = Одержувач1;  
ДовКлієнт.Банк                 = Одержувач1_Банк;  
ДовКлієнт.Рахунок            = Одержувач1_Рахунок;    
ДовКлієнт.МФО                = Одержувач1_Банк_МФО;
ДовКлієнт.Місто_Банк        = Одержувач1_Банк_Місто;

ДовКлієнт.Записать();                    
                                                     

КонецЕсли;
21 viktor_vv
 
20.01.12
16:54
Получатель1 -> Одержувач1
22 Pazan
 
20.01.12
16:54
понял. спасибо
23 Pazan
 
20.01.12
16:55
я в конфиге перевёл правильно, просто, когда правил здесь, упустил. усё гуд!