|   |   | 
| 
 | 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 | 
        я в конфиге перевёл правильно, просто, когда правил здесь, упустил. усё гуд!     | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |