|
|
|
Массовое внесение ИНН и СНИЛС для контрагентов-физлиц | ☑ | ||
|---|---|---|---|---|
|
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) через
|
|||
|
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 формами.
|
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |