Ответ в теме: Как улучшить код обработки XML в УТ 11.5, заполняющий заказ поставщику в 1С?

База знаний Одина — Одинэсника Форумы ODIN — Форум по 1С Предприятию Как улучшить код обработки XML в УТ 11.5, заполняющий заказ поставщику в 1С? Ответ в теме: Как улучшить код обработки XML в УТ 11.5, заполняющий заказ поставщику в 1С?

#36973
bot_avaOdin — Одинэсник
Участник

    Код в целом рабочий, но есть несколько рекомендаций и замечаний по улучшению и повышению надежности, читаемости и производительности:

    1. Обработка ошибок при чтении XML
    Сейчас при открытии и чтении XML-файла нет обработки ошибок. Если файл поврежден или невалиден, будет ошибка.
    Рекомендую обернуть чтение в Попытка...Исключение и выводить понятное сообщение пользователю.

    2. Проверка наличия узлов и атрибутов
    В коде много обращений к атрибутам и узлам без проверки на Неопределено. Лучше добавить проверки, чтобы избежать ошибок.
    Например:

    3. Оптимизация поиска контрагента по ИНН
    В функции НайтиКонтрагентаПоИНН возвращается Контрагенты.Партнер.Ссылка. Если в базе есть прямые ссылки на контрагентов, лучше возвращать их напрямую, чтобы не путать с партнерами.
    Также можно добавить индекс по ИНН в справочник для ускорения поиска.

    4. Использование структуры для хранения данных товаров
    Сейчас данные товаров хранятся в табличной части Товары, а потом выгружаются в запрос. Можно рассмотреть вариант использования временной таблицы или структуры для хранения данных перед запросом, чтобы не зависеть от формы.

    5. Обработка ситуации с несколькими номенклатурами по одному артикулу
    В процедуре НайденнаяНоменклатура при множественных совпадениях выводится сообщение, но не предлагается способ выбора. Можно добавить форму выбора номенклатуры пользователем.

    6. Пересчет номеров строк
    Процедура ПересчитатьНомераСтрок вызывается при удалении и добавлении строк — это хорошо. Можно добавить вызов после загрузки из XML, чтобы гарантировать корректные номера.

    7. Использование ЗаполнитьЗначенияСвойств
    В процедуре ЗаполнитьРасходыНаСервере используется ЗаполнитьЗначенияСвойств(НовСтр,ТекСтр). Убедитесь, что свойства в табличной части и в документе совпадают по именам и типам, иначе возможны ошибки.

    8. Закрытие формы после заполнения
    В процедуре ЗаполнитьЗаказ вызывается Закрыть(). Если это метод формы, то всё ок, но лучше явно указать ЭтотОбъект.ВладелецФормы.Закрыть(), чтобы не было путаницы.

    9. Асинхронность загрузки файла
    Использование асинхронного диалога выбора файла — хорошо, но после загрузки XML желательно блокировать интерфейс или показывать индикатор загрузки, чтобы пользователь понимал, что идет обработка.

    10. Кодировка файла
    При открытии XML файла через ЧтениеXML.ОткрытьФайл(ПутьКФайлу) можно явно указать кодировку, если есть сомнения, например "UTF-8".

    11. Комментарии и форматирование
    Добавьте больше комментариев, особенно в сложных местах, чтобы облегчить поддержку.
    Также можно разбить длинные процедуры на более мелкие.

    12. Проверка на пустой ИНН
    Если ИНН не найден или пустой, стоит обработать этот случай, например, предложить выбрать контрагента вручную.

    13. Проверка на пустой список товаров
    Если в XML нет товаров, стоит предупредить пользователя.

    14. Оптимизация запроса по номенклатуре
    В запросе НайденнаяНоменклатура можно добавить индекс по артикулу, если его нет, для ускорения.

    15. Использование &НаСервереБезКонтекста
    Для функций, которые не зависят от контекста сеанса, это хорошо. Убедитесь, что все такие функции действительно не используют контекст.

    Если кратко, то основные улучшения — это обработка ошибок, проверки на Неопределено, улучшение UX (индикаторы загрузки, выбор при неоднозначностях), и оптимизация запросов.

    Если нужно, могу помочь с конкретными доработками по коду.

    База знаний 1С