Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
01 фев 2023, 18:26

Указание Владельца

Автор Дмитрий357, 17 окт 2022, 18:36

0 Пользователей и 1 гость просматривают эту тему.

Дмитрий357

Здравствуйте! Хочу загрузить CSV файл, элементы справочника Контрагенты. Есть такой реквизит у справочника Контрагента как БанковскийСчетПоУмолчанию с типом СправочникСсылка.БанковскиеСчета (ссылка на справочник Банковские счета; реквизит номер счета - тип Строка). Справочник БанковскиеСчета подчинен справочнику Контрагенты.
При загрузке возникает ошибка "Значение поля "Владелец" не заполнено или заполнено неверно". Не могу понять как задать поле Валаделец. Код загрузки:
&НаСервере
Процедура ЗагрузитьНаСервере()
Документ = Новый ТекстовыйДокумент;
Документ.Прочитать(Объект.ПутьКФайлу);
Для НомерСтроки = 2 По Документ.КоличествоСтрок() Цикл
СтрокаДокумента = Документ.ПолучитьСтроку(НомерСтроки); 
МассивЗначениеСтроки = СтрРазделить(СтрокаДокумента, ";");
НаименованиеКонтрагента              = МассивЗначениеСтроки[0];
Группа                               = МассивЗначениеСтроки[1];
ИНН                                  = МассивЗначениеСтроки[2]; 
ДатаРегистрацииКонтрагента           = МассивЗначениеСтроки[3];
ВидКонтрагента                       = МассивЗначениеСтроки[4];
БанковскийСчетПоУмолчанию            = МассивЗначениеСтроки[5];     
ПолноеЮридическоеНаименование        = МассивЗначениеСтроки[6];
СсылкаНаКонтрагентов = Справочники.Контрагенты.НайтиПоНаименованию(НаименованиеКонтрагента);
Если Не ЗначениеЗаполнено(СсылкаНаКонтрагентов) Тогда
НовыйЭлементКонтрагенты = Справочники.Контрагенты.СоздатьЭлемент();
НовыйЭлементКонтрагенты.Наименование                   = НаименованиеКонтрагента;
ИскомаяГруппа=Справочники.Контрагенты.НайтиПоНаименованию(Группа);
Если ИскомаяГруппа.Пустая() Тогда
НоваяГруппа=Справочники.Контрагенты.СоздатьГруппу();
НоваяГруппа.Наименование=Группа;
НоваяГруппа.Записать();
НовыйЭлементКонтрагенты.Родитель = НоваяГруппа.Ссылка;
Иначе
НовыйЭлементКонтрагенты.Родитель=ИскомаяГруппа; 
КонецЕсли;
НовыйЭлементКонтрагенты.ИНН = ИНН;
НовыйЭлементКонтрагенты.ДатаРегистрации       = Дата (ДатаРегистрацииКонтрагента);
Если ВидКонтрагента = "Юридическое лицо" Тогда
НовыйЭлементКонтрагенты.ВидКонтрагента = Перечисления.ЮрФизЛицо.ЮридическоеЛицо;
ИначеЕсли ВидКонтрагента = "ФизЛицо" Тогда
НовыйЭлементКонтрагенты.ВидКонтрагента = Перечисления.ЮрФизЛицо.ФизическоеЛицо;
ИначеЕсли ВидКонтрагента = "ЮрЛицоНеРезидент" Тогда
НовыйЭлементКонтрагенты.ВидКонтрагента = Перечисления.ЮрФизЛицо.ЮридическоеЛицоНеРезидент;    
КонецЕсли;
ИскомыйСчет     = Справочники.БанковскиеСчета.НайтиПоНаименованию (БанковскийСчетПоУмолчанию);
Если ИскомыйСчет.Пустая() Тогда
НовыйСчет = Справочники.БанковскиеСчета.СоздатьЭлемент ();
НовыйСчет.НомерСчета=БанковскийСчетПоУмолчанию;
НовыйСчет.Записать ();
НовыйЭлементКонтрагенты.БанковскийСчетПоУмолчанию=БанковскийСчетПоУмолчанию;
Иначе
НовыйЭлементКонтрагенты.БанковскийСчетПоУмолчанию=ИскомыйСчет;
КонецЕсли;
НовыйЭлементКонтрагенты.ПолноеЮридическоеНаименование  = ПолноеЮридическоеНаименование;
НовыйЭлементКонтрагенты.Записать();  
СсылкаНаКонтрагентов=НовыйЭлементКонтрагенты.Ссылка;
КонецЕсли;
КонецЦикла;       
Сообщить("Создание контрагентов завершено!");
КонецПроцедуры

Optiman

Во-первых, банковский счет нужно создавать после записи контрагента (тогда будет доступна ссылка на контрагента).
Во-вторых, добавьте НовыйСчет.Владелец = СсылкаНаКонтрагентов;

Дмитрий357

Optiman, Сделай как вы сказали, все работает ОГРОМНАЯ БЛАГОДАРНОСТЬ. Маленькое уточнение, в коде получается я два раза записываю контрагента, это не страшно:
&НаСервере
Процедура ЗагрузитьНаСервере()
Документ = Новый ТекстовыйДокумент;
Документ.Прочитать(Объект.ПутьКФайлу);
Для НомерСтроки = 2 По Документ.КоличествоСтрок() Цикл
СтрокаДокумента = Документ.ПолучитьСтроку(НомерСтроки); 
МассивЗначениеСтроки = СтрРазделить(СтрокаДокумента, ";");
НаименованиеКонтрагента              = МассивЗначениеСтроки[0];
Группа                               = МассивЗначениеСтроки[1];
ИНН                                  = МассивЗначениеСтроки[2]; 
ДатаРегистрацииКонтрагента           = МассивЗначениеСтроки[3];
ВидКонтрагента                       = МассивЗначениеСтроки[4];
БанковскийСчетПоУмолчанию            = МассивЗначениеСтроки[5];     
ПолноеЮридическоеНаименование        = МассивЗначениеСтроки[6];
СсылкаНаКонтрагентов = Справочники.Контрагенты.НайтиПоНаименованию(НаименованиеКонтрагента);
Если Не ЗначениеЗаполнено(СсылкаНаКонтрагентов) Тогда
НовыйЭлементКонтрагенты = Справочники.Контрагенты.СоздатьЭлемент();
НовыйЭлементКонтрагенты.Наименование                   = НаименованиеКонтрагента;
ИскомаяГруппа=Справочники.Контрагенты.НайтиПоНаименованию(Группа);
Если ИскомаяГруппа.Пустая() Тогда
НоваяГруппа=Справочники.Контрагенты.СоздатьГруппу();
НоваяГруппа.Наименование=Группа;
НоваяГруппа.Записать();
НовыйЭлементКонтрагенты.Родитель = НоваяГруппа.Ссылка;
Иначе
НовыйЭлементКонтрагенты.Родитель=ИскомаяГруппа; 
КонецЕсли;
НовыйЭлементКонтрагенты.ИНН = ИНН;
НовыйЭлементКонтрагенты.ДатаРегистрации       = Дата (ДатаРегистрацииКонтрагента);
Если ВидКонтрагента = "Юридическое лицо" Тогда
НовыйЭлементКонтрагенты.ВидКонтрагента = Перечисления.ЮрФизЛицо.ЮридическоеЛицо;
ИначеЕсли ВидКонтрагента = "Физическое лицо" Тогда
НовыйЭлементКонтрагенты.ВидКонтрагента = Перечисления.ЮрФизЛицо.ФизическоеЛицо;
ИначеЕсли ВидКонтрагента = "Юридическое лицо не резидент" Тогда
НовыйЭлементКонтрагенты.ВидКонтрагента = Перечисления.ЮрФизЛицо.ЮридическоеЛицоНеРезидент;    
КонецЕсли;
НовыйЭлементКонтрагенты.ПолноеЮридическоеНаименование  = ПолноеЮридическоеНаименование;
НовыйЭлементКонтрагенты.Записать();  
СсылкаНаКонтрагентов=НовыйЭлементКонтрагенты.Ссылка;
ИскомыйСчет     = Справочники.БанковскиеСчета.НайтиПоНаименованию (БанковскийСчетПоУмолчанию);
Если ИскомыйСчет.Пустая() Тогда
НовыйСчет = Справочники.БанковскиеСчета.СоздатьЭлемент ();
НовыйСчет.НомерСчета=БанковскийСчетПоУмолчанию;
НовыйСчет.Владелец=СсылкаНаКонтрагентов;
НовыйСчет.Записать ();
НовыйЭлементКонтрагенты.БанковскийСчетПоУмолчанию=БанковскийСчетПоУмолчанию;
Иначе
НовыйЭлементКонтрагенты.БанковскийСчетПоУмолчанию=ИскомыйСчет;
КонецЕсли;
НовыйЭлементКонтрагенты.Записать();
СсылкаНаКонтрагентов=НовыйЭлементКонтрагенты.Ссылка;
КонецЕсли;
КонецЦикла;       
Сообщить("Создание контрагентов завершено!");
КонецПроцедуры


Теги:

Похожие темы (5)

Рейтинг@Mail.ru Rambler's Top100

Поиск