Имя: Пароль:
1C
 
Заполнение справочника контрагентов при приеме данных
0 Кукуев
 
05.10.07
14:06
В бухгалтерии при загрузке документов принимаю контрагента и, если его нет – заношу в справочник, если он уже есть – пропускаю, делая ТекущийЭлемент.
Код такой:

   ИНН = ИННПартнераДокумента + "/" + КПППартнераДокумента;
   ИННКорДок = Лев(ИНН, 10);
   ИННКор1С = Лев(СпрКонтрагенты.ИНН, 10);
   Наименование = Партнер;
   Если (ПустоеЗначение(Наименование) = 0) Тогда
       Контрагент=ПолучитьПустоеЗначение("Справочник.Контрагенты");
       Если (ПустаяСтрока(ИННКорДок) = 0) И (ПустоеЗначение(Контрагент) = 1) Тогда
           Если (СпрКонтрагенты.НайтиПоРеквизиту(ИННКор1С, ИННКорДок,1) = 1) Тогда
               Контрагент=СпрКонтрагенты.ТекущийЭлемент();
           КонецЕсли;
       ИначеЕсли (ПустаяСтрока(Наименование) = 0) И (ПустоеЗначение(Контрагент) = 1) Тогда
           Если  (СпрКонтрагенты.НайтиПоНаименованию(Наименование, 0, 1) = 1)Тогда
               Контрагент=СпрКонтрагенты.ТекущийЭлемент();
           КонецЕсли;
           
       КонецЕсли;
       
       Если (СпрКонтрагенты.НайтиПоНаименованию(Наименование, 0, 1) = 0) И
       (ПустоеЗначение(Наименование) = 0) И (ПустаяСтрока(ИННКорДок) = 1) Тогда
           Если Вопрос("У контрагента " + Наименование + " не указан ИНН. Вы хотите записать контрагента?", "Да+Нет") = "Да" Тогда
               ВвестиЗначение(ИННКорДок, "Введите ИНН для контрагента: " + Наименование, "Строка",10);
               СпрКонтрагенты.Новый();
………………………………./ Здесь заполняются реквизиты
               СпрКонтрагенты.Записать();
               Контрагент=СпрКонтрагенты.ТекущийЭлемент();                  
           КонецЕсли;
       КонецЕсли;
       
       Если (ПустоеЗначение(Контрагент)=1) И (СпрКонтрагенты.НайтиПоНаименованию(Наименование, 0, 1) = 0) Тогда
           СпрКонтрагенты.Новый();
………………………………………………………..// Здесь заполняются реквизиты
           СпрКонтрагенты.Записать();
           Контрагент=СпрКонтрагенты.ТекущийЭлемент();                  
       Иначе
           СпрКонтрагенты.НайтиЭлемент(Контрагент);
       КонецЕсли;
   КонецЕсли;

При загрузке, когда начитается поиск по реквизиту, вываливается ошибка
Если (СпрКонтрагенты.НайтиПоРеквизиту(ИННКор1С, ИННКорДок,1) = 1) Тогда
{D:\1С\БУХГАЛТЕРИЯ\1SBDEMO\EXTFORMS\1ЗАГРУЗКА ДАННЫХ.ERT(1903)}: Неверное имя реквизита!
Переменных наплодил кучу – просто не знаю, как к этому реквизиту подобраться…
Подскажите, как, принимая данные, проверить – есть ли такой контрагент в 1С или еще нет, идентифицируя только по ИНН (а не по ИНН/КПП), т.к. в новых данных может быть только реквизит ИННПартнераДокумента?
1 ТелепатБот
 
гуру
05.10.07
14:06
2 CrecerRu
 
05.10.07
14:14
(0)Перед загрузко делай ТЗ 2 колонки "Контрагент", "ИНН" и ищи в ней или запросом, если контрагентов не много
3 CrecerRu
 
05.10.07
14:15
Функция НайтиОрганизациюПоИНН(ИННКраткий, Вид, ДлинаИНН = 10)

   Перем Запрос, ТекстЗапроса;
 
   Запрос = СоздатьОбъект("Запрос");
   ТекстЗапроса = "//{{ЗАПРОС(НайтиЮрЛицо)
                   |ТекущийЭлемент = Справочник." + Вид + ".ТекущийЭлемент;
                   |ИНН = Справочник." + Вид + ".ИНН;
                   |Группировка ТекущийЭлемент без групп;
                   |Условие((Лев(ИНН,  " + ДлинаИНН + ") = ИННКраткий) ИЛИ (Лев(ИНН, 12) = ИННКраткий));
                   |"//}}ЗАПРОС
   ;

   // Если ошибка в запросе, то выход из процедуры
   Если Запрос.Выполнить(ТекстЗапроса) <> 0 Тогда
       
       Пока Запрос.Группировка(1) = 1 Цикл
           Возврат Запрос.ТекущийЭлемент;  
       КонецЦикла;
   КонецЕсли;
   
   Возврат СоздатьОбъект("Справочник." + Вид);

КонецФункции // НайтиОрганизациюПоИНН()
4 Кукуев
 
05.10.07
14:22
(3)Да, с функцией, наверное, должно получиться, но контрагентов довольно много... и еще, честно, говоря, уметь бы эту функцию правильно использовать... (это я о себе, конечно, учусь...)
а нельзя ли без функции как-то найти и сравнить?
5 CrecerRu
 
05.10.07
14:26
(4) Перед загрузкой делай ТЗ 2 колонки "Контрагент", "ИНН" и ищи в ней
6 Кукуев
 
05.10.07
14:35
(5)Спасибо, попробую так сделать...
к сожалению, вынужден покинуть просторы интернета, но буду премного благодарен, если кто-то еще подскажет, спасибо!
Ошибка? Это не ошибка, это системная функция.