Загрузка данных из внешних файлов (Excel, CSV, PDF) в 1С — одна из самых частых задач, с которыми сталкиваются как бухгалтеры, так и программисты. Несмотря на наличие встроенных инструментов, часто требуется индивидуальная настройка логики: например, поиск контрагента строго по ИНН или автоматическое создание номенклатуры с определенными параметрами. В данной статье мы разберем, как реализовать подобную загрузку, какие «подводные камни» существуют и какие альтернативы предлагает современная платформа 1С.
Рассмотрим типовую ситуацию: имеется файл Excel, где в определенных ячейках (например, B2 и C3) указаны дата и ИНН контрагента, а ниже расположена табличная часть с товарами. Нам необходимо создать документ Поступление (акт, накладная) в 1С:Бухгалтерии предприятия 3.0 КОРП.
Для реализации такой задачи программным путем мы определим следующий алгоритм работы нашей обработки:
Товар и ставкой НДС Без НДС.Товары.Разберем подробнее, как должен выглядеть программный код для поиска контрагента по ИНН. Проанализируем ситуацию: в версии КОРП у одного ИНН может быть несколько КПП (филиалы). Простой поиск Справочники.Контрагенты.НайтиПоРеквизиту("ИНН", ЗначениеИНН) может вернуть первый попавшийся филиал, что не всегда корректно.
Посмотрим на пример кода для поиска контрагента:
Функция НайтиИлиСоздатьКонтрагента(ЗначениеИНН)
КонтрагентОбъект = Справочники.Контрагенты.НайтиПоРеквизиту("ИНН", ЗначениеИНН);
Если КонтрагентОбъект.Пустая() Тогда
НовыйКонтрагент = Справочники.Контрагенты.СоздатьГруппу(); // Или СоздатьЭлемент()
НовыйКонтрагент = Справочники.Контрагенты.СоздатьЭлемент();
НовыйКонтрагент.Наименование = "Новый контрагент (ИНН " + ЗначениеИНН + ")";
НовыйКонтрагент.ИНН = ЗначениеИНН;
НовыйКонтрагент.ЮридическоеФизическоеЛицо = Перечисления.ЮридическоеФизическоеЛицо.ЮридическоеЛицо;
НовыйКонтрагент.Записать();
Возврат НовыйКонтрагент.Ссылка;
КонецЕсли;
Возврат КонтрагентОбъект;
КонецФункции
Аналогично рассмотрим создание номенклатуры. При автоматическом создании важно заполнять не только наименование, но и базовую единицу измерения, а также вид номенклатуры. Выясним причину, почему это критично: без вида номенклатуры 1С не сможет автоматически определить счета учета (например, 41.01 для товаров или 10.01 для материалов), что приведет к ошибкам при проведении документа.
Функция НайтиИлиСоздатьНоменклатуру(НаименованиеФайл)
СсылкаНоменклатура = Справочники.Номенклатура.НайтиПоНаименованию(НаименованиеФайл, Истина);
Если СсылкаНоменклатура.Пустая() Тогда
НоваяНоменклатура = Справочники.Номенклатура.СоздатьЭлемент();
НоваяНоменклатура.Наименование = НаименованиеФайл;
НоваяНоменклатура.НаименованиеПолное = НаименованиеФайл;
// Важно: Поиск вида номенклатуры по умолчанию
ВидТовар = Справочники.ВидыНоменклатуры.НайтиПоНаименованию("Товары");
Если Не ВидТовар.Пустая() Тогда
НоваяНоменклатура.ВидНоменклатуры = ВидТовар;
КонецЕсли;
НоваяНоменклатура.ЕдиницаИзмерения = Справочники.КлассификаторЕдиницИзмерения.НайтиПоКоду("796"); // Штуки
НоваяНоменклатура.СтавкаНДС = Перечисления.СтавкиНДС.БезНДС;
НоваяНоменклатура.Записать();
Возврат НоваяНоменклатура.Ссылка;
КонецЕсли;
Возврат СсылкаНоменклатура;
КонецФункции
Прежде чем приступать к написанию собственной обработки, проанализируем встроенные механизмы программы. В современных релизах 1С:Бухгалтерии (начиная с 3.0.90 и выше) функционал «Загрузить из файла» стал гораздо мощнее.
Рассмотрим по шагам работу штатного ассистента:
Одной из главных проблем загрузки является несовпадение наименований. У поставщика товар может называться «Бумага А4 SvetoCopy», а в вашей базе — «Бумага офисная А4». Поиск по наименованию в этом случае создаст дубль.
Для решения этой проблемы разберем использование регистра сведений Номенклатура контрагентов. Этот механизм позволяет хранить связь между вашим справочником и наименованиями в системе поставщика. При загрузке через ЭДО или современные штатные обработки система сначала ищет соответствие в этом регистре, и только если оно не найдено, предлагает создать новую карточку или выбрать существующую вручную. Это избавляет от необходимости «мучить» справочник бесконечными дублями.
Если формат файлов от поставщиков постоянно меняется, создание жестко привязанной обработки (где ИНН всегда в C3, а дата в B2) становится неэффективным. В этом случае рекомендуем обратить внимание на сервис «1С:Распознавание документов».
Этот сервис использует нейросети для извлечения данных. Ему не важно, в какой ячейке находится сумма или дата. Он анализирует весь документ, находит ключевые поля и автоматически формирует документ в базе. Это наиболее современный и надежный способ автоматизации ввода первички, особенно в крупных организациях (КОРП-сегмент).
Подводя итог, можно сказать, что выбор способа загрузки зависит от регулярности задачи и стабильности формата входных данных:
Рациональный подход к загрузке данных не только экономит время бухгалтера, но и обеспечивает чистоту нормативно-справочной информации в вашей базе 1С.