Недавно была задача от клиента, который занимается грузоперевозками, а звучала она так: мы заполняем Реестры НДС КНД 1155112 (ЖД), 1155113 (АВТО), 1155114 (АВИА), 1155115 (МОРЕ) руками из excel, копируя каждую ячейку и вставляя ее в реестр по НДС в 1С.
Нужно было разработать решение, которое помогало бы избежать бессонных ночей перед отчетностью и помочь загрузить файл excel, который они формируют в течение квартала. Это решение было необходимо, потому что в каждом реестре в среднем 20 колонок, а строк может быть как 80, так и 300. С помощью простой математики можно понять, как долго стиралась клавиатура под ctrl+c → ctrl+v…
Что есть на рынке?
Пошуршав в интернете перед началом разработки, я нашел пару решений (возможно, искал недостаточно времени, чтобы найти больше). Первое решение было подключаемое расширение за какую-то n-ю сумму, в котором добавляется кнопка прямо в 1С-Отчетность и оттуда пляшет. Второе решение было найдено на Инфостарте. Это было решение конвертации файла excel в XML.
Как работает?

Здесь вы можете увидеть инструкцию к обработке, да и саму обработку тоже. Для примера я уже выбрал тип реестра, чтобы отобразился шаблон.
Самое муторное здесь для пользователя это то, что нужно сопоставить колонки из его excel с колонками шаблона, т.е. взять и вписать вместо названий колонок из excel служебные наименования колонок из шаблона.
Было так:

А должно получиться так:

Но мой клиент выгружал типовой шаблон откуда-то и заполнял excel. Следовательно, у него совпадают все колонки, и он может просто взять, выделить строку служебных наименований и вставить к себе.
Дальше есть важный момент. Двойным кликом мыши активировать первую служебную колонку. Зачем это надо? Я получал данные из Табличного документа с помощью построителя запросов, а когда файлы excel могут отличаться друг от друга, то угадать, где начинается таблица, просто невозможно). После того, как пользователь проверил, что все колонки подписаны служебными наименованиями и они соответствуют по смыслу тому, как они подписаны на шаблоне, то можно нажимать зеленую кнопку. Вас попросят выбрать каталог, но не имя файла, потому что имя файла должно быть служебным. После сохранения у вас откроется проводник с позиционированием на сохраненном файле XML. В принципе готово. Осталось только зайти в Отчёты → Регламентированные отчёты → Реестр по НДС: КНД 115511* и нажать кнопку Загрузить. Да, там вылетает типовая форма с выбором квартала и Организации, но, думаю, там уже всё понятно.
Процесс разработки
После получения задачи я зашел в 1С-Отчетность и увидел кнопку «Загрузить». Было предположено, что excel она съест, стоит только привести к нужному виду. Но я ошибался. С помощью выдаваемого сообщения и отладки было выяснено, что ему лучше всего кормить XML. С таким форматом данных я не работал, знал только структуру и то на уровне университета, но не боялся взяться. Как раз тогда была найдена статья на Инфостарте, которая меня вдохновила. Обработка из статьи была куплена и изучена, я понял, как работать с XML благодаря ей, и принялся за разработку своего решения.
Для начала была придумана структура хранения значений. Были использованы макеты. Структура обработки:

В макете «Соответствия» хранятся константные значения для работы обработки, такие как значение реестра (115511*), представление для вывода пользователю, служебное наименование файла и как будет называться узел в XML.
Для формирования шаблонов_XML_115511* был скачен архив с сайта ФНС с документацией. Там были найдены правила формирования имен файлов и схемы XML с описаниями. Хотел прикрепить ссылку, но потерял ее). Но под конец разработки, когда уже пошла плотная отладка, я нашел в конфигурации объекты СхемаВыгрузки* в отчетах и переписал немного своё решение.
Шаблоны_шапок_excel_115511* были позаимствованы из конфигурации. Это Отчеты.РегламентированныйОтчетРеестрНДСПриложение7, 8, 9 и 10. Так людям будет легче работать с обработкой.
Особенности
Особенность обработки в том, что я не писал решение по условию для каждого реестра. Было разработано одно общее решение, которому достаточно скормить имена колонок по правильному шаблону и обработка отрисует xml.
Сделано это было с помощью рекурсии. Сначала была получена выборка по табличному документу с помощью Построителя запросов, далее собрал все колонки в массив и пошел их сортировать.
Изначальный порядок колонок:

После сортировки:

Порядок записи XML такой: сначала пишем атрибуты узла, потом пишем подчиненный узел, затем уже его атрибуты и так глубже и глубже… В голову для универсального решения пришла только рекурсия. На примере ГрузПолуч можно увидеть, что сам ГрузПолуч является подчиненным главному узлу, но не является атрибутом, потому что у него есть путь дальше. ГрузПолуч_Адрес обозначает, что Адрес будет атрибутом узла ГрузПолуч. А ГрузПолуч_СверОрг_ИННЮЛ значит, что у ГрузПолуч будет подчиненный узел СведОрг, у которого будет атрибут ИННЮЛ.
По итогу мы получаем фрагмент XML, который мы вставляем с помощью обычной строковой замены в шаблон_XML и сохраняем в файл.
Надеюсь, вам было интересно это читать, и что моя обработка поможет вашим бухгалтерам быстро перенести реестры НДС в 1С♥
Тестировал на Бухгалтерия предприятия КОРП, редакция 3.0 (3.0.198.15).
Вступайте в нашу телеграмм-группу Инфостарт