Имя: Пароль:
1C
 
Как программно заполнить контактную инф данными из ФНС? БП3.0 внешн
,
0 Shecurok
 
07.04.21
19:39
Добрый вечер. Пишу внешнюю обраюотку для бух 3.0, и тут у меня создаются новые контрагенты, есл не найдены были в базе. Всё отлично записывается, кроме конт. информации. Процедуру взял типовую. Ошибка на моменте Строки = ЭтотОбъект.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.НайтиСтроки(Отбор); пишет, что поле КонтИнф... не найдено. Судя по всему ЭтотОбъект она считает не нового контрагента, а эту самую внешнюю обработку. Как переделать? Весь код выглдяит так:

Если ЭтоЮрЛицо Тогда
        
        // Заполнение адресов
        
        //++++++++++++++++++++++++++++++++++++++++
        //РАБОТАЕТ, НО НАМ НАДО ИЗ ФСИН АДРЕС ПОЛУЧАТЬ
        //Об=СпрКонтрагент;
        //Адрес=Об.КонтактнаяИнформация.Добавить();
        //Адрес.Тип=Перечисления.ТипыКонтактнойИнформации.Адрес;
        //Адрес.Вид=Справочники.ВидыКонтактнойИнформации.ЮрАдресКонтрагента;
        //Адрес.Представление=Строка(СтрокаТЗ.АдресПокупателя);
        //Об.Записать();
        //----------------------------------------
        
        ЗаполнитьЭлементКонтактнойИнформации(СпрКонтрагент, "КонтактнаяИнформацияПолеЮрАдресКонтрагента", РеквизитыКонтрагента.ЮридическийАдрес);
        
        ЗаполнитьЭлементКонтактнойИнформации(СпрКонтрагент, "КонтактнаяИнформацияПолеФактАдресКонтрагента", РеквизитыКонтрагента.ЮридическийАдрес);
        ЮрФактАдресаСовпадают = Истина;
        
        ЗаполнитьЭлементКонтактнойИнформации(СпрКонтрагент, "КонтактнаяИнформацияПолеПочтовыйАдресКонтрагента", РеквизитыКонтрагента.ЮридическийАдрес);
        ЮрПочтовыйАдресаСовпадают = Истина;
<...>

&НаСервере
Процедура ЗаполнитьЭлементКонтактнойИнформации(СпрКонтрагент, ИмяРеквизита, СтруктураДанных)
    
        
    Если СтруктураДанных = Неопределено Тогда
        Возврат;
    КонецЕсли;

    Отбор  = Новый Структура("ИмяРеквизита", ИмяРеквизита);
    Строки = ЭтотОбъект.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.НайтиСтроки(Отбор);
    ДанныеСтроки = ?(Строки.Количество() = 0, Неопределено, Строки[0]);
    Если ДанныеСтроки = Неопределено Тогда
        Возврат;
    КонецЕсли;
    ЗаполнитьЗначенияСвойств(ДанныеСтроки, СтруктураДанных);
    ДанныеСтроки.Значение = СтруктураДанных.КонтактнаяИнформация;
    ЭтотОбъект[ИмяРеквизита] = СтруктураДанных.Представление;
    
КонецПроцедуры
1 Garykom
 
гуру
07.04.21
19:43
гугл программист однако
2 Shecurok
 
07.04.21
19:43
Если что, СпрКонтрагент видит корректно. с типом Объект
3 Garykom
 
гуру
07.04.21
20:02
(2) ну и если логически подумать? совсем немного
4 Shecurok
 
07.04.21
20:06
(3) ну я понимаю, что этого поля там нет. Его надо откуда то добавить. А вот откуда не пойму
5 Garykom
 
гуру
07.04.21
20:12

Строки = ЭтотОбъект.КонтактнаяИнформацияОписаниеДополнительныхРеквизитов.НайтиСтроки(Отбор);


Ответь что такое "КонтактнаяИнформацияОписаниеДополнительныхРеквизитов"?

Если ответ "не знаю" то упс, вам пора нанять программиста
6 Garykom
 
гуру
07.04.21
20:13
(5)+ Подумай у этого объекта вызывают некую функцию НайтиСтроки(Отбор)
Глянь в СП что это?
7 Shecurok
 
07.04.21
20:17
(5) смею предположить, что это коллекция, вроде так называется. Смотрел через отладчик в модуле формы спр контрагенты. Там это есть, соответственно ошибки нет. У меня нет, это надо добавить... поиск по ключевым словам пока мне не помог
8 Shecurok
 
07.04.21
20:20
(6) ну судя по сп я близок был к правде. Осуществляет поиск строк из коллекции строк дерева значений
9 Garykom
 
гуру
07.04.21
20:24
(7) >это надо добавить

добавить фигня, вот заполнить...
10 Garykom
 
гуру
07.04.21
20:25
но проще выкинуть все это и написать правильно
11 Shecurok
 
07.04.21
20:25
(10) где можно подсмотреть?)
12 Shecurok
 
07.04.21
20:25
копать судя по всему в сторону общего модуля УправлениеКонтактнойИнформацией
13 Garykom
 
гуру
07.04.21
20:26
14 Garykom
 
гуру
07.04.21
20:27
(12) в БП3 КИ находится в ТЧ объектов, банально же
Нахер общий модуль
15 Cthulhu
 
07.04.21
20:28
F11
16 Shecurok
 
07.04.21
20:31
(14) откуда начинать в таком случае, чтоб привело к месту где эта коллекция заполняется и появляется. хотя тут уже туплю, скорее всего пр нажатии на кнопку заполнить по ИНН)
17 Shecurok
 
07.04.21
20:32
(14) в каком месте мне реально копать, чтоб это найти?
18 Shecurok
 
07.04.21
20:39
полная поебота эти коллекции и пр дерьмо.
19 Shecurok
 
07.04.21
20:39
но сделать надо
20 Shecurok
 
07.04.21
20:43
буду писать здесь и как будто с кем то общаюсь. Смотрю у себя в обработке строчку ЗаполнитьЗначенияСвойств(СпрКонтрагент, РеквизитыКонтрагента);.

В реквизитыКонтрагента есть рквизт юр.адрес с тем, что мне и надо. Угу. Пошли дальше
21 Shecurok
 
07.04.21
20:46
Дальше ничего особоенного нет, только заполнение истории ки
22 Shecurok
 
07.04.21
20:48
потом сразу строка ЗаполнитьЭлементКонтактнойИнформации(СпрКонтрагент, "КонтактнаяИнформацияПолеЮрАдресКонтрагента", РеквизитыКонтрагента.ЮридическийАдрес);
которая и переносит меня в процедуру где ошибка встречается... окее. посомтрим что идет в документе при заполнении по инн контр, начиная с кнопки заполнить
23 Shecurok
 
07.04.21
20:50
Тут мы через все если проскакиваем и попадаем в процедуру Процедура ВыполнитьЗаполнениеРеквизитовПоИНН(ПроверитьИНН = Ложь). Ну пошли
24 Shecurok
 
07.04.21
20:58
Так, ну тут были пару момоентом с переходмаи в другие процедуры и пр, но единственное наверн, что может быть интересно это процедура РеквизитыЮридическогоЛицаПоИНН, где мы их заполнили. Т.е. адрес появился в реквизите, но он еще где то там
25 Shecurok
 
07.04.21
21:02
прошли процедуру ДанныеЕдиныхГосРеестровПоИНН(ИННОбъекта, ЭтоЮрЛицо);, получили ДанныйЗаполнения. Но там тоже вроде ничего такого
26 Shecurok
 
07.04.21
21:06
Переходим в процедуру ЗаполнитьРеквизитыНаСервере(АдресРеквизитовКонтрагента, ПроверитьИНН)

Тут первые две строчки сразу


РеквизитыКонтрагента = ПолучитьИзВременногоХранилища(АдресРеквизитовКонтрагента);
    
    Если Объект.ЮридическоеФизическоеЛицо <> РеквизитыКонтрагента.ЮридическоеФизическоеЛицо Тогда
    
        Вид = ?(РеквизитыКонтрагента.ЮридическоеФизическоеЛицо = Перечисления.ЮридическоеФизическоеЛицо.ЮридическоеЛицо, "ЮридическоеЛицо", "ФизическоеЛицо");
        ВидПриИзмененииНаСервере();

Встаем на Если Объект...., смотрим отладчиком что у нас там по объекту... А там уже все это есть. Збс. Класс. Где упустил, хрен знает. Завтра попробую продублровать это все в обрабтку, сомневаюсь, что из этого что-то выйдет, но всё же.
        
    КонецЕсли;
27 Shecurok
 
08.04.21
10:12
Хотел как лучше, получилось как всегда...

Забил я пока на эти коллекции данных,  у меня же адрес из ФНС был в РеквизитыКонтрагента. В итоге сделал так:

Об=СпрКонтрагент;
        Адрес=Об.КонтактнаяИнформация.Добавить();
        Адрес.Тип=Перечисления.ТипыКонтактнойИнформации.Адрес;
        Адрес.Вид=Справочники.ВидыКонтактнойИнформации.ЮрАдресКонтрагента;
        //Адрес.Представление=Строка(СтрокаТЗ.АдресПокупателя);
        Адрес.Представление=РеквизитыКонтрагента.ЮридическийАдрес.Представление;
        Об.Записать();