Как выгрузить список новых созданных контрагентов (создаются программно)

1. Shecurok 08.04.21 11:26 Сейчас в теме
Здравствуйте. Вопрос в том, что загружаю данные из файла эксель, если контрагент не найден, создается новый:

СпрКонтрагент = Справочники.Контрагенты.СоздатьЭлемент();
			
			ДанныеДляЗаполнения = ДанныеЕдиныхГосРеестровПоИНН(ИННКонтрагента, ЭтоЮрЛицо);
			
			Если ЗначениеЗаполнено(ДанныеДляЗаполнения.ОписаниеОшибки) Тогда
				
				Сообщить("Контрагент не найден по ИНН:" + ИННКонтрагента + " Номер строки в файле "+ СтрокаТЗ.НомерСтрокиВФайле); //
				Возврат;
			ИначеЕсли ДанныеДляЗаполнения.Свойство("ЮридическоеФизическоеЛицо") Тогда
			Если ДанныеДляЗаполнения.Свойство("ЮридическоеФизическоеЛицо") Тогда	
				
				ЭтоЮрЛицо = (ДанныеДляЗаполнения.ЮридическоеФизическоеЛицо = ПредопределенноеЗначение("Перечисление.ЮридическоеФизическоеЛицо.ЮридическоеЛицо"));
				
				ДополнительныеПараметры = Новый Структура("АдресРеквизитовКонтрагента, ПроверитьИНН", ДанныеДляЗаполнения.АдресРеквизитовКонтрагента, Ложь);
				
				ЗаполнитьРеквизитыНаСервере(СпрКонтрагент, ДополнительныеПараметры.АдресРеквизитовКонтрагента, ДополнительныеПараметры.ПроверитьИНН, СтрокаТЗ);
			КонецЕсли;
			СпрКонтрагент.Записать();
Показать


Дальше мне надо создать таблицу значений, верно?

НовыеКонтаргенты = Новый ТаблицаЗначений;
			
				НовыеКонтаргенты.Колонки.Добавить("Контрагент");
				НовыеКонтаргенты.Колонки.Добавить("ИНН");
				НовыеКонтаргенты.Колонки.Добавить("КПП");
				НовыеКонтаргенты.Колонки.Добавить("Адрес");
				
			Для Каждого Строка Из НовыеКонтаргенты Цикл
				Строка= НовыеКонтаргенты.Добавить();
				Строка.Контрагент = СпрКонтрагент.Наименование;
				Строка.ИНН = СпрКонтрагент.ИНН;
				Строка.КПП = СпрКонтрагент.КПП;
				Строка.Адрес =  СпрКонтрагент.КонтактнаяИнформация.Представление;
			КонецЦикла;
Показать


И заполнить данными из СпрКонтрагент.

Но тут еще затык у меня в том, что таблица пустая выходит, даже без колонок. Где не так прописал?
По теме из базы знаний
Вознаграждение за ответ
Показать полностью
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. user633533_encantado 11 08.04.21 11:30 Сейчас в теме
(1) вы создаете таблицу без строк и начинаете ее перебирать, естественно ничего не будет.

вам надо новых контрагентов куда-то сначала отложить, или добавлять в эту таблицу при записи.
3. UtSpar 134 08.04.21 11:30 Сейчас в теме
НовыеКонтаргенты = Новый ТаблицаЗначений;
            
                НовыеКонтаргенты.Колонки.Добавить("Контрагент");
                НовыеКонтаргенты.Колонки.Добавить("ИНН");
                НовыеКонтаргенты.Колонки.Добавить("КПП");
                НовыеКонтаргенты.Колонки.Добавить("Адрес");




инициализацию таблицы поднимите за цикл в самый самый верх.
4. UtSpar 134 08.04.21 11:30 Сейчас в теме
(3)


А уже добавлению в таблицу делайте после

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



Строка= НовыеКонтаргенты.Добавить();
                Строка.Контрагент = СпрКонтрагент.Наименование;
                Строка.ИНН = СпрКонтрагент.ИНН;
                Строка.КПП = СпрКонтрагент.КПП;
                Строка.Адрес =  СпрКонтрагент.КонтактнаяИнформация.Представление;
Показать
5. UtSpar 134 08.04.21 11:32 Сейчас в теме
НовыеКонтаргенты = Новый ТаблицаЗначений;

НовыеКонтаргенты.Колонки.Добавить("Контрагент");
НовыеКонтаргенты.Колонки.Добавить("ИНН");
НовыеКонтаргенты.Колонки.Добавить("КПП");
НовыеКонтаргенты.Колонки.Добавить("Адрес");
          
/////////////
где то тут должен быть цикл вы же не одного контрагента создаете???
//////
СпрКонтрагент = Справочники.Контрагенты.СоздатьЭлемент();
            
            ДанныеДляЗаполнения = ДанныеЕдиныхГосРеестровПоИНН(ИННКонтрагента, ЭтоЮрЛицо);
            
            Если ЗначениеЗаполнено(ДанныеДляЗаполнения.ОписаниеОшибки) Тогда
                
                Сообщить("Контрагент не найден по ИНН:" + ИННКонтрагента + " Номер строки в файле "+ СтрокаТЗ.НомерСтрокиВФайле); //
                Возврат;
            ИначеЕсли ДанныеДляЗаполнения.Свойство("ЮридическоеФизическоеЛицо") Тогда
            Если ДанныеДляЗаполнения.Свойство("ЮридическоеФизическоеЛицо") Тогда    
                
                ЭтоЮрЛицо = (ДанныеДляЗаполнения.ЮридическоеФизическоеЛицо = ПредопределенноеЗначение("Перечисление.ЮридическоеФизическоеЛицо.ЮридическоеЛицо"));
                
                ДополнительныеПараметры = Новый Структура("АдресРеквизитовКонтрагента, ПроверитьИНН", ДанныеДляЗаполнения.АдресРеквизитовКонтрагента, Ложь);
                
                ЗаполнитьРеквизитыНаСервере(СпрКонтрагент, ДополнительныеПараметры.АдресРеквизитовКонтрагента, ДополнительныеПараметры.ПроверитьИНН, СтрокаТЗ);
            КонецЕсли;
            СпрКонтрагент.Записать();

//////////////////////////

Строка= НовыеКонтаргенты.Добавить();
Строка.Контрагент = СпрКонтрагент.Наименование;
Строка.ИНН = СпрКонтрагент.ИНН;
Строка.КПП = СпрКонтрагент.КПП;
Строка.Адрес = СпрКонтрагент.КонтактнаяИнформация.Представление;
Показать
7. Shecurok 08.04.21 11:45 Сейчас в теме
(5) да, увидел ошибку. Исправил. А не подскажите случайно как эту ТЗ выгрузить в эксель? Определенный документ на диске.

И еще контактную информацию надо как то вытащить, но это уже сам.
10. user856012 13 08.04.21 12:21 Сейчас в теме
(7)
А не подскажите случайно как эту ТЗ выгрузить в эксель? Определенный документ на диске.
Подскажем:
https://infostart.ru/public/566078/
https://infostart.ru/1c/articles/372778/
https://infostart.ru/1c/articles/190399/
13. Shecurok 08.04.21 12:37 Сейчас в теме
(10) посомтрел все. самый простой и бстрый метод странно работает, ошибка при открывании документа

	ПострПечать = Новый ПостроительОтчета;
			ПострПечать.ИсточникДанных = Новый ОписаниеИсточникаДанных(НовыеКонтаргенты);
			ТабДок = Новый ТабличныйДокумент;                  
			ПострПечать.Вывести(ТабДок);
			ТабДок.Записать("D:\Test Base\...\НовыеКонтрагенты.xlsx");



я прочитал, что метод не самый быстрый, но у меня там булет от силы 20-30 строчек. Не сталкивались?
14. user856012 13 08.04.21 12:45 Сейчас в теме
(13)
Не сталкивались?
С чем именно? Вы не написали - какой статьей руководствовались?
15. Shecurok 08.04.21 12:46 Сейчас в теме +1 $m
(14) эта статья https://infostart.ru/1c/articles/372778/
но метод из комментраиев. Перый в списке.
16. user856012 13 08.04.21 12:50 Сейчас в теме
(15)
метод из комментраиев. Перый в списке.
Попробуйте прочитать до восьмого, как минимум. ;)
11. UtSpar 134 08.04.21 12:27 Сейчас в теме
(7) ну по сохранению в эксель вариантов море, ищатся даже здесь на ура. советовать ничего не буду посмотрите и увидите какой вам больше по душе и кажется легче - несмотря на то насколько какой лучше - задачу выполняет это главное.
8. Shecurok 08.04.21 11:57 Сейчас в теме
(5)
где то тут должен быть цикл вы же не одного контрагента создаете???


тут цикл идет, да
6. Jimbo 9 08.04.21 11:35 Сейчас в теме
Что это за перл ? Масло масляное. Вы создали пустую таблицу значений. В этот цикл никогда не зайдете.
В обходе коллекции менять итератор в цикле - ну такое...

Для Каждого Строка Из НовыеКонтаргенты Цикл
Строка= НовыеКонтаргенты.Добавить();
9. DenisVol 3 08.04.21 12:09 Сейчас в теме
             НовыеКонтаргенты = Новый ТаблицаЗначений;

             НовыеКонтаргенты.Колонки.Добавить("Контрагент");
             НовыеКонтаргенты.Колонки.Добавить("ИНН");
             НовыеКонтаргенты.Колонки.Добавить("КПП");
             НовыеКонтаргенты.Колонки.Добавить("Адрес");

            
            ДанныеДляЗаполнения = ДанныеЕдиныхГосРеестровПоИНН(ИННКонтрагента, ЭтоЮрЛицо);
            
            Если ЗначениеЗаполнено(ДанныеДляЗаполнения.ОписаниеОшибки) Тогда
                
                      Сообщить("Контрагент не найден по ИНН:" + ИННКонтрагента + " Номер строки в файле "+ 
                                        СтрокаТЗ.НомерСтрокиВФайле); //
                       //Возврат;
                       СпрКонтрагент = Справочники.Контрагенты.СоздатьЭлемент();
                       ЗаполнитьРеквизитыНаСервере(СпрКонтрагент, 
                               ДополнительныеПараметры.АдресРеквизитовКонтрагента, 
                               ДополнительныеПараметры.ПроверитьИНН, СтрокаТЗ);
                        //другие реквизиты контрагента
                       СпрКонтрагент.Записать();
                       
                       Строка= НовыеКонтаргенты.Добавить();
                       Строка.Контрагент = СпрКонтрагент.Наименование;
                       Строка.ИНН = СпрКонтрагент.ИНН;
                       Строка.КПП = СпрКонтрагент.КПП;
                       Строка.Адрес = СпрКонтрагент.КонтактнаяИнформация.Представление;

            ИначеЕсли ДанныеДляЗаполнения.Свойство("ЮридическоеФизическоеЛицо") Тогда
                      Если ДанныеДляЗаполнения.Свойство("ЮридическоеФизическоеЛицо") Тогда    
                
                              ЭтоЮрЛицо = (ДанныеДляЗаполнения.ЮридическоеФизическоеЛицо =          
                              ПредопределенноеЗначение("Перечисление.ЮридическоеФизическоеЛицо.ЮридическоеЛицо"));
                
                               ДополнительныеПараметры = Новый Структура("АдресРеквизитовКонтрагента, ПроверитьИНН", 
                               ДанныеДляЗаполнения.АдресРеквизитовКонтрагента, Ложь);
                
                               ЗаполнитьРеквизитыНаСервере(СпрКонтрагент, 
                               ДополнительныеПараметры.АдресРеквизитовКонтрагента, 
                               ДополнительныеПараметры.ПроверитьИНН, СтрокаТЗ);
                      КонецЕсли;
            КонецЕсли;

Показать


Короче говоря:
не нашли клиента: создаем,заполняем реквизиты, а потом записываем этого клиента в ТЗ.
12. DenisVol 3 08.04.21 12:37 Сейчас в теме
Создать макет в этой обработке, заполнить макет из ТЗ и сохранить в файл экселя
17. user856012 13 08.04.21 13:03 Сейчас в теме
+(16) Если непонятно, о чем речь, то попробуйте так:
ТабДок.Записать("D:\Test Base\...\НовыеКонтрагенты.xlsx",ТипФайлаТабличногоДокумента.XLSX);
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот