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