Имя: Пароль:
1C
 
Массовое внесение ИНН и СНИЛС для контрагентов-физлиц
0 veryom
 
31.05.24
15:12
Здравствуйте.
Есть файл из тысячи строк вида "ФИО ИНН СНИЛС".
Как можно автоматизировано загрузить в «Бухгалтерию государственного учреждения, редакция 2.0», чтобы у каждого контрагента-физлица заполнились поля ИНН и СНИЛС (чтобы не забивать эти поля вручную)? Может быть, какой-нибудь
SQL-запрос?
1 Волшебник
 
31.05.24
15:15
Обработкой
2 Волшебник
 
31.05.24
15:59
Промт:
/Есть текстовый файл из строк вида "ФИО ИНН СНИЛС". Напиши процедуру на языке 1С для загрузки данных из файла в справочник "Контрагенты", где ФИО это Наименование контрагента-физлица.
/Добавь проверку на существование контрагента перед созданием нового элемента. Мы будем искать контрагента по наименованию (ФИО).
/При этом не используй запрос, потому что запрос в цикле — это плохо. Используй метод НайтиПоНаименованию(), который определён для объекта Справочники.Контрагенты


### Шаг 1: Создание процедуры для загрузки данных с проверкой на существование

Добавляем процедуру для загрузки данных в модуль обработки или общий модуль, которая будет:
1. Открывать текстовый файл.
2. Читать строки файла.
3. Разбивать строки на части (ФИО, ИНН, СНИЛС).
4. Проверять существование контрагента по ФИО.
5. Если контрагент не найден, добавлять новый элемент в справочник "Контрагенты".

#### Модуль обработки или общий модуль:

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

        // Разбиваем файл на строки
        МассивСтрок = СтрРазделить(Текст.ПолучитьТекст(), Символы.ПС);
        
        // Итерация по строкам файла
        Для Каждого Строка Из МассивСтрок Цикл
            Если Строка = "" Тогда
                Продолжить;
            КонецЕсли;
            
            // Разбиваем строку на части
            МассивЧастей = СтрРазделить(Строка, " ");
            
            Если МассивЧастей.Количество() = 3 Тогда
                ФИО = МассивЧастей[0];
                ИНН = МассивЧастей[1];
                СНИЛС = МассивЧастей[2];

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


### Шаг 2: Вызов процедуры
Теперь добавим вызов этой процедуры. Например, добавим кнопку на форму обработки для выбора файла и старта загрузки:

#### Модуль формы:

Процедура КнопкаЗагрузитьНажатие(Элемент)
    // Диалог для выбора файла
    Диалог = Новый ОткрытьФайлДиалог;
    Диалог.Заголовок = "Выберите файл для загрузки данных";
    Диалог.Фильтр = "Текстовые файлы (*.txt)|*.txt";
    
    Если Диалог.Выбрать() Тогда
        ПутьКФайлу = Диалог.ПолноеИмяФайла;
        ЗагрузитьДанныеИзФайла(ПутьКФайлу);
    КонецЕсли;
КонецПроцедуры


### Шаг 3: Тестирование и отладка
1. Запустите обработку в режиме 1С:Предприятие.
2. Нажмите кнопку для загрузки данных.
3. Выберите файл с данными.
4. Проверьте, что данные корректно загружены или обновлены в справочнике "Контрагенты".

### Заключение:
Теперь процедура для загрузки данных из текстового файла в справочник "Контрагенты" реализована с учётом проверки на существование контрагента по ФИО. Если контрагент уже существует, его данные обновляются, иначе создается новая запись. Такой подход позволяет избежать дублирования контрагентов и обеспечивает актуальность данных.
3 maxab72
 
31.05.24
16:17
Кто сказал, что запрос в цикле это плохо?
4 Волшебник
 
31.05.24
16:21
(3) У профессионалов запросы в цикле не тормозят. Джунам лучше избегать запросов в цикле. ChatGPT пока на уровне джуна.
5 Волшебник
 
31.05.24
16:21
6 Гость из Мариуполя
 
31.05.24
16:51
о-хо-хо.
Вот только сейчас работал по удаленке с одной барышней.
А перед этим звонил другой барышне.
Прикол в том, что они обе полные тезки (фамилия, имя, отчество совпадают), я их в телефонной книге даже специально пометил, что это разные барышни.

И это у меня, где контрагентов далеко-далеко не тысячи, как у автора. В лучшем случае десятки (ну может под сотню в телефонной книге записано).
И то среди этой сотни нашлись две полные тезки.
прикинул, как будет работать  
СуществующийКонтрагент = Справочник.Контрагенты.НайтиПоНаименованию(ФИО);
в случае тысяч..
7 Волшебник
 
31.05.24
16:46
(6) Ой, да Вы зануда. В любой программе есть ошибки.
8 Гость из Мариуполя
 
31.05.24
16:53
(7) Не, ну у меня реально две полные тезки и я реально сегодня общался ними обеими. Истинная правда, отвечаю, зуб даю.
9 maxab72
 
31.05.24
16:54
Барышни имеют свойство менять фамилию. Вот надо одной (на выбор) и предложить поменять.
10 Масянька
 
31.05.24
16:55
(6) В принципе, не так уже плохо...
Находим первого Иванова И.И. - пишем ему ИНН, СНИЛС.
Далее опять ищем Иванова И.И. и - находим другого (у которого нет ИНН и СНИЛС) - пишем.
И будем иметь двух Ивановых И.И. с разными ИНН и СНИЛСами.
Главное, проверку на заполнение иметь.
Хотя, я (лично) все-таки за доп. параметр (кроме ФИО).
11 Волшебник
 
31.05.24
16:55
(8) Значит Вам не подойдёт эта программа. Можете переделать на запрос в цикле и если найдено несколько элементов, то пропускать загрузку таких сложных случаев. В данном случае запрос в цикле можно и стерпеть, потому что основные тормоза будут на записи объектов.
12 Волшебник
 
31.05.24
17:02
Дополнительно рассмотрим такой сценарий: если в справочнике "Контрагенты" есть записи с полными тезками, а именно с одинаковыми ФИО (такие записи встречаются неоднократно), следует пропустить загрузку для этих записей и сформировать список пропущенных записей для последующего ручного ввода данных.

### Шаг 1: Реорганизация кода и выделение функций с проверкой на наличие тезок

#### Модуль обработки или общий модуль:

Процедура ЗагрузитьДанныеИзФайла(ПутьКФайлу)
    // Открываем файл
    ПропущенныеКонтрагенты = Новый СписокЗначений;

    Попытка
        Текст = Новый ТекстовыйДокумент;
        Текст.Прочитать(ПутьКФайлу);

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

            // Проверка контрагентов по ФИО
            НайденныеКонтрагенты = НайтиКонтрагентовПоФИО(Данные.ФИО);
            
            Если НайденныеКонтрагенты.Количество() = 0 Тогда
                // Создаем нового контрагента
                СоздатьКонтрагента(Данные);
            ИначеЕсли НайденныеКонтрагенты.Количество() = 1 Тогда
                // Изменяем существующего контрагента
                ИзменитьКонтрагента(НайденныеКонтрагенты[0], Данные);
            Иначе
                // Пропускаем контрагента и добавляем в список тех, которых нужно обработать вручную
                ПропущенныеКонтрагенты.Добавить(Данные.ФИО);
            КонецЕсли;
        КонецЦикла;
        
        // Вывод списка пропущенных контрагентов
        Если ПропущенныеКонтрагенты.Количество() > 0 Тогда
            Сообщить("Следующие контрагенты не были загружены из-за дублирования ФИО:");
            Для Каждого Контрагент Из ПропущенныеКонтрагенты Цикл
                Сообщить(Контрагент);
            КонецЦикла;
        КонецЕсли;
    Исключение
        Сообщить("Ошибка при чтении файла: " + ОписаниеОшибки());
    КонецПопытки;
КонецПроцедуры

Функция ПолучитьДанныеИзСтроки(Строка)
    МассивЧастей = СтрРазделить(Строка, " ");
    Если МассивЧастей.Количество() = 3 Тогда
        Данные = Новый Структура;
        Данные.Вставить("ФИО", МассивЧастей[0]);
        Данные.Вставить("ИНН", МассивЧастей[1]);
        Данные.Вставить("СНИЛС", МассивЧастей[2]);
        Возврат Данные;
    Иначе
        Возврат Неопределено;
    КонецЕсли;
КонецФункции

Функция НайтиКонтрагентовПоФИО(ФИО) Экспорт
    Запрос = Новый Запрос;
    Запрос.Текст = 
    "ВЫБРАТЬ
    |   КонтрагентыСправочник.Ссылка
    |ИЗ
    |   Справочник.Контрагенты КАК КонтрагентыСправочник
    |ГДЕ
    |   КонтрагентыСправочник.Наименование = &ФИО";
    
    Запрос.УстановитьПараметр("ФИО", ФИО);
    РезультатЗапроса = Запрос.Выполнить();
    Вернуть РезультатЗапроса.ВыбратьВсех();
КонецФункции

Процедура СоздатьКонтрагента(Данные)
    НовыйКонтрагент = Справочники.Контрагенты.СоздатьЭлемент();
    НовыйКонтрагент.Наименование = Данные.ФИО;
    НовыйКонтрагент.ИндивидуальныйНалоговыйНомер = Данные.ИНН;
    НовыйКонтрагент.СНИЛС = Данные.СНИЛС;
    НовыйКонтрагент.Записать();
КонецПроцедуры
    
Процедура ИзменитьКонтрагента(Ссылка, Данные)
    Контрагент = Ссылка.ПолучитьОбъект();
    Контрагент.ИндивидуальныйНалоговыйНомер = Данные.ИНН;
    Контрагент.СНИЛС = Данные.СНИЛС;
    Контрагент.Записать();
КонецПроцедуры


### Шаг 2: Вызов процедуры

Убедитесь, что вызов процедуры `ЗагрузитьДанныеИзФайла()` на месте, например:

#### Модуль формы:

Процедура КнопкаЗагрузитьНажатие(Элемент)
    // Диалог для выбора файла
    Диалог = Новый ОткрытьФайлДиалог;
    Диалог.Заголовок = "Выберите файл для загрузки данных";
    Диалог.Фильтр = "Текстовые файлы (*.txt)|*.txt";
    
    Если Диалог.Выбрать() Тогда
        ПутьКФайлу = Диалог.ПолноеИмяФайла;
        ЗагрузитьДанныеИзФайла(ПутьКФайлу);
    КонецЕсли;
КонецПроцедуры


### Шаг 3: Тестирование и отладка

1. Запустите обработку в режиме 1С:Предприятие.
2. Нажмите кнопку для загрузки данных.
3. Выберите файл с данными.
4. Проверьте, что данные корректно загружены или обновлены в справочнике "Контрагенты" и что список пропущенных записей выводится правильно.

### Заключение:
Теперь процедура для загрузки данных из текстового файла в справочник "Контрагенты" обрабатывает случаи с совпадением ФИО (полными тезками). Для таких записей загрузка данных ИНН и СНИЛС пропускается, а список таких контрагентов выводится для дальнейшего ручного ввода данных.
13 Garykom
 
31.05.24
17:07
(2)
// Проверка на существование контрагента
СуществующийКонтрагент = Справочник.Контрагенты.НайтиПоНаименованию(ФИО);

А как же дубли по наименованию?
14 Волшебник
 
31.05.24
17:09
(13) Вы ветку не читаете, а сразу пишете?
15 Garykom
 
31.05.24
17:09
(12) только написал (13) и уже вижу
16 Garykom
 
31.05.24
17:10
(14) Ветку пока читал не обновлял
Решил написать к (2) и уже после отправки обновилась и увидел (12)
17 Garykom
 
31.05.24
17:14
(12) Классический "запрос в цикле"
Лучше сразу строки в ТЗ
Затем эту ТЗ в запрос параметром в ВТ
И к этой ВТ левым соединением добавить/подобрать ссылки
Но учесть так же дубли, использовать группировку
18 Garykom
 
31.05.24
17:14
(17)+ На практике если файлик с данными огромный то разбивать его на куски и разными фоновыми
19 Волшебник
 
31.05.24
17:20
(17) Это всё не нужно, потому что тормозить будет на записи. Нагородишь программного кода, а профита ноль.
20 Garykom
 
31.05.24
17:23
(19) Тормозить на записи будет меньше
Если убрать лишнее чтение
Особенность блокировок
21 Волшебник
 
31.05.24
17:28
Ладно, уже всё разобрали. Пусть ТС теперь охреневает
22 Гена
 
31.05.24
17:29
(12) Маленькое замечание: в процедуре СоздатьКонтрагента в зависимости от конфигурации надо обязательно прописать выбор реквизита ЮридическоеФизическоеЛицо или что там в конфе как строго физлицо.
23 ptiz
 
31.05.24
17:35
(2) Как получить доступ к такой нейронке?
24 Asmody
 
31.05.24
20:26
(23) через постель https://cors.su/klub/
25 Волшебник
 
31.05.24
21:27
(22) Гена, спасибо Вам за Ваше участие на форуме и вообще вот такие вставки. Без Вас мы немного умрём, а с Вами мы больше живы.

Конечно, тут была речь про массовую загрузку и ТС куда-то слинял. Мы такое не любим. Передайте там.
Мы очень не любим работы в пустоту или в никуда. ТС слинял. Нет обратной связи.
Нет лайков, понимаете?
26 Михаил Козлов
 
31.05.24
23:18
(0) Обработка ЗагрузкаДанныхИзТабличногоДокумента не подойдет?
ФИО + дата рождения с большой вероятностью уникальны.
27 Сияющий Асинхраль
 
01.06.24
11:40
(2) Ну, кстати, было дело проверял, НайтиПоНаименованию в цикле работало медленнее, чем запрос в цикле :-( ...
28 veryom
 
01.06.24
12:29
Спасибо. Не ожидал такой помощи.:)
Доработал обработку вот так:
                                                                                                                                                      
Функция ЗаполнитьИННСНИЛС(МассивСтрок)
    ПропущенныеФизЛица = Новый СписокЗначений;
    Для Каждого Строка Из МассивСтрок Цикл
        Если ПустаяСтрока(Строка) Тогда
            Продолжить;
        КонецЕсли;
        // Получение данных из строки
        Данные = ПолучитьДанныеИзСтроки(Строка);
        // Проверка физлиц по ФИО
        НайденныеФизЛица = НайтиФизЛицПоФИО(Данные.ФИО);
        Если НайденныеФизЛица.Количество() = 0 Тогда
            Продолжить;
            ИначеЕсли НайденныефизЛица.Количество() = 1 Тогда
                // Изменяем существующее физлицо
                ИзменитьФизЛицо(НайденныеФизЛица, Данные);
            Иначе
                // Пропускаем физлицо и добавляем в список тех, которых нужно обработать вручную
                ПропущенныеФизЛица.Добавить(Данные.ФИО);
            КонецЕсли;
    КонецЦикла;
    Возврат ПропущенныеФизЛица;
КонецФункции

Функция ПолучитьДанныеИзСтроки(Строка)
    МассивЧастей = СтрРазделить(Строка, Символы.Таб);
    Данные = Новый Структура;
    Данные.Вставить("ФИО", МассивЧастей[0]);
    Данные.Вставить("ИНН", МассивЧастей[1]);
    Данные.Вставить("СНИЛС", МассивЧастей[2]);
    Возврат Данные;
КонецФункции

Функция НайтиФизЛицПоФИО(ФИО) Экспорт
    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |   ФизЛицаСправочник.Ссылка КАК ФизЛицоСсылка
    |ИЗ
    |   Справочник.ФизическиеЛица КАК ФизЛицаСправочник
    |ГДЕ
    |   ФизЛицаСправочник.Наименование = &ФИО
    |     И ФизЛицаСправочник.ЭтоГруппа = ЛОЖЬ";
    
    Запрос.УстановитьПараметр("ФИО", ФИО);
    РезультатЗапроса = Запрос.Выполнить();
    Возврат РезультатЗапроса.Выбрать();
КонецФункции

Процедура ИзменитьФизЛицо(НайденныеФизЛица, Данные)
    НайденныеФизЛица.Следующий();
    ФизЛицо = НайденныеФизЛица.ФизЛицоСсылка.ПолучитьОбъект();
    ФизЛицо.ИНН = Данные.ИНН;
    ФизЛицо.СтраховойНомерПФР = Данные.СНИЛС;
    ФизЛицо.Записать();
КонецПроцедуры

&НаКлиенте
Процедура Команда1(Команда)
    // Диалог для выбора файла
    Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
    Диалог.Заголовок = "Выберите файл для загрузки данных";
    Диалог.Фильтр = "Текстовые файлы (*.txt)|*.txt";
    
    Если Диалог.Выбрать() Тогда
        ПутьКФайлу = Диалог.ПолноеИмяФайла;
        //ЗагрузитьДанныеИзФайла(ПутьКФайлу);
        Текст = Новый ТекстовыйДокумент;
        Попытка
            Текст.Прочитать(ПутьКФайлу);
        Исключение
            Сообщить("Ошибка при чтении файла: " + ОписаниеОшибки());
        КонецПопытки;
        // Разбиваем файл на строки
        МассивСтрок = СтрРазделить(Текст.ПолучитьТекст(), Символы.ПС);
        ПропущенныеФизЛица = ЗаполнитьИННСНИЛС(МассивСтрок);
        Если ПропущенныеФизЛица.Количество() > 0 Тогда
            Сообщить("Следующие физлица не были загружены из-за дублирования ФИО:");
            Для Каждого ФизЛицо Из ПропущенныеФизЛица Цикл
                Сообщить(ФизЛицо);
            КонецЦикла;
        КонецЕсли;
    КонецЕсли;

КонецПроцедуры


Запустил. Сработало.
Только в форме Справочники-Контрагенты в поле "ИНН" ИНН не отображается, хотя, если открыть контрагента, то ИНН у него установлен. Если нажать "Записать", то ИНН появляется в поле "ИНН" формы со списком Контрагентов.
29 Волшебник
 
01.06.24
13:04
(28) Вы прокидываете объект "Выборка" через кучу процедур. Плохой стиль программирования. Исправьте
30 Злопчинский
 
01.06.24
15:36
(25) а я давно предлагал банить/штрафовать тех, кто вбросил и слинял. Поставить тайм-аут 3 суток, не нарисовался - в бан автоматом на неделю/месяц...
31 Злопчинский
 
01.06.24
15:37
Есть подозрение что всё можно сделать тыканиямт мышат в ИРке
32 Garykom
 
01.06.24
15:44
(29) Разработчики типовых (ERP/КА/УТ11) так не считают
33 Garykom
 
01.06.24
15:47
(28)
Только в форме Справочники-Контрагенты в поле "ИНН" ИНН не отображается, хотя, если открыть контрагента, то ИНН у него установлен. Если нажать "Записать", то ИНН появляется в поле "ИНН" формы со списком Контрагентов.

Чего-то не хватает в данных при записи
Сравнить реквизиты до и после
Или проанализировать запрос ДС на форме списка контрагентов
34 Garykom
 
01.06.24
15:48
(33)+ По идее должны быть служебные процедуры/функции для правильного создания/записи объектов
Через отладку и замер производительности их можно найти
35 veryom
 
01.06.24
18:18
                                                                                                                                                                                                                                    
Функция ЗаполнитьИННСНИЛС(МассивСтрок)
    ПропущенныеКонтрагенты = Новый СписокЗначений;
    Для Каждого Строка Из МассивСтрок Цикл
    	Если ПустаяСтрока(Строка) Тогда
        	Продолжить;
        КонецЕсли;
        // Получение данных из строки
        Данные = ПолучитьДанныеИзСтроки(Строка);
        // Проверка физлиц по ФИО
        НайденныеКонтрагенты = НайтиКонтрагентаПоФИО(Данные.ФИО);
        Если НайденныеКонтрагенты.Количество() = 0 Тогда
			Продолжить;
        ИначеЕсли НайденныеКонтрагенты.Количество() = 1 Тогда
            // Изменяем существующее физлицо
			НайденныеКонтрагенты.Следующий();
            ИзменитьКонтрагента(НайденныеКонтрагенты.КонтрагентСсылка, Данные);
        Иначе
            // Пропускаем физлицо и добавляем в список тех, которых нужно обработать вручную
            ПропущенныеКонтрагенты.Добавить(Данные.ФИО);
        КонецЕсли;
    КонецЦикла;
	Возврат ПропущенныеКонтрагенты;
КонецФункции

Функция ПолучитьДанныеИзСтроки(Строка)
    МассивЧастей = СтрРазделить(Строка, Символы.Таб);
    Данные = Новый Структура;
    Данные.Вставить("ФИО", МассивЧастей[0]);
    Данные.Вставить("ИНН", МассивЧастей[1]);
    Данные.Вставить("СНИЛС", МассивЧастей[2]);
    Возврат Данные;
КонецФункции

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

Процедура ИзменитьКонтрагента(КонтрагентСсылка, Данные)
    Контрагент = КонтрагентСсылка.ПолучитьОбъект();
	ФизЛицо = Контрагент.ЮридическоеФизическоеЛицо.ПолучитьОбъект();
	ФизЛицо.ИНН = Данные.ИНН;
	ФизЛицо.СтраховойНомерПФР = Данные.СНИЛС;
	ФизЛицо.Записать();
	Контрагент.Записать();
КонецПроцедуры

&НаКлиенте
Процедура Команда1(Команда)
	// Диалог для выбора файла
    Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
    Диалог.Заголовок = "Выберите файл для загрузки данных";
    Диалог.Фильтр = "Текстовые файлы (*.txt)|*.txt";
    
    Если Диалог.Выбрать() Тогда
        ПутьКФайлу = Диалог.ПолноеИмяФайла;
        //ЗагрузитьДанныеИзФайла(ПутьКФайлу);
		Текст = Новый ТекстовыйДокумент;
		Попытка
        	Текст.Прочитать(ПутьКФайлу);
		Исключение
        	Сообщить("Ошибка при чтении файла: " + ОписаниеОшибки());
    	КонецПопытки;
        // Разбиваем файл на строки
        МассивСтрок = СтрРазделить(Текст.ПолучитьТекст(), Символы.ПС);
		ПропущенныеКонтрагенты = ЗаполнитьИННСНИЛС(МассивСтрок);
		Если ПропущенныеКонтрагенты.Количество() > 0 Тогда
        	Сообщить("Следующие контрагенты не были загружены из-за дублирования ФИО:");
            Для Каждого Контрагент Из ПропущенныеКонтрагенты Цикл
                Сообщить(Контрагент);
            КонецЦикла;
        КонецЕсли;
    КонецЕсли;

КонецПроцедуры


Теперь в форме Справочники-Контрагенты в поле "ИНН" ИНН стал отображаться.
36 Волшебник
 
01.06.24
20:17
(35) Соблюдайте правильную лесенку программного кода (отступы)
37 trk415e76
 
01.06.24
23:48
А я программист - лентяй. Взял типовую загрузку из табличного документа, поставил поиск соответствия по контрагенту и все дела. Она мне и неоднозначности подсветит (дубли, для закостенелых прогов). И загрузит достаточно быстро. Справочник медикаментов в несколько десятков тысяч строк грузил, не вопрос. И цены устанавливал. Для быстроты можно разбить на список на части. В зависимости от производительности компа. Все дела.
38 trk415e76
 
01.06.24
23:51
И да, для БГУ не забываем установить тип контрагента "7 - Физическое лицо". Для порядка, забывают часто. Потом бухи мучаются с 169/769 формами.