Коллеги, давайте смотреть правде в глаза. В ИТ-индустрии ценятся не те, кто умеет часами писать тонны шаблонного кода, а те, кто умеет создавать быстрые, надежные и автоматизированные решения для бизнеса. Сейчас весь цивилизованный бизнес сидит на ЭДО (электронном документообороте), и информация переносится автоматически. Но в чем парадокс? ЭДО не решает проблему сопоставления номенклатуры автоматически! Когда документ прилетает по ЭДО, номенклатура поставщика (например, «Кабель медный ВВГнг-LS 3х2.5») не совпадает с тем, как этот товар записан в нашей базе (например, «Провод ВВГ 32,5»*). И вот тут 1С-нику все равно приходится писать алгоритмы сопоставления, парсить входящие XML/Excel-данные электронного пакета и программно создавать документ. Если код написан криво, 1С точно так же намертво зависнет на клиенте, ругаясь на мутабельные значения. Потому что рядовые разработчики не понимают, как работает ядро платформы, и строят кривые клиент-серверные интерфейсы. Пора менять правила игры. Хватит быть простым исполнителем — пора становиться архитектором процессов, который заставляет систему летать.
Ни для кого не секрет, что в 2026 году порядка 80% новичков (да и опытных программистов) вовсю используют искусственный интеллект для написания кода. Это удобно, быстро и экономит кучу времени. Но есть одна большая проблема: ИИ регулярно выдает «кашу», путает клиент-серверную архитектуру 1С и галлюцинирует на бесконтекстных серверных вызовах.
Кстати, о том, почему нейросети так отчаянно неправильно пишут код, вы можете подробно прочитать в моей предыдущей статье № 2794002 — «Архитектура 1С для новичков: почему ИИ галлюцинирует при написании кода в 1С (Трагикомедия в 5 актах)».
Чтобы перестать слепо копировать за роботом и научиться с ходу исправлять его ошибки в модулях, нужно наизусть знать основные команды 1С, четко понимать, как они называются и за что отвечают на уровне ядра системы. Только тогда вы будете управлять процессом разработки как настоящий Босс - разработки.
Прежде чем писать следующий код для автоматической загрузки документов, обновим в памяти содержание каждой строчки нашего кода:
1. Процедура ПутьКФайлуНачалоВыбора1 (Перехват кнопки выбора)
СтандартнаяОбработка = Ложь; — отменяет встроенное стандартное окно выбора файлов 1С, позволяя запустить свой собственный настроенный диалог.
Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие); — создает в памяти объект окна диалога в режиме открытия (чтения) файла с диска.
Диалог.Фильтр = "Файлы Excel (*.xlsx)|*.xlsx|Таблицы 1С (*.mxl)|*.mxl"; — устанавливает жесткий фильтр для Windows, скрывая все лишние форматы, чтобы бухгалтер не выбрал не тот файл.
Диалог.Заголовок = "Выберите файл для загрузки"; — задает понятный русский текст в верхней шапке открывшегося окна проводника.
Диалог.МножественныйВыбор = Ложь; — запрещает выделять несколько файлов одновременно, разрешая выбрать строго один отчет.
ОписаниеОповещения = Новый ОписаниеОповещения("ПутьКФайлуНачалоВыбораЗавершение", ЭтотОбъект); — готовит указатель для платформы: куда передать управление и имя файла сразу после того, как пользователь нажмет кнопку «Открыть».
Диалог.Показать(ОписаниеОповещения); — асинхронно выводит окно выбора на экран, не блокируя интерфейс программы и веб-клиент.
Обратите внимание: отмена стандартной обработки здесь критически важна. Если этого не сделать, платформа сначала откроет свое базовое окно, а затем поверх него выведет наше. Асинхронный метод .Показать() гарантирует, что сеанс не зависнет в ожидании, даже если пользователь передумает и закроет диалог.
2. Процедура ПутьКФайлуНачалоВыбораЗавершение (Фиксация пути)
Если ВыбранныеФайлы <> Неопределено И ВыбранныеФайлы.Количество() > 0 Тогда — проверяет, выбрал ли пользователь файл или просто закрыл окно крестиком.
ПутьКФайлу = ВыбранныеФайлы[0]; — берет самый первый (единственный) файл из возвращенного списка и записывает его текстовый путь в реквизит формы для отображения на экране.
Платформа всегда возвращает массив выбранных путей, даже если мы явно запретили множественный выбор. Поэтому мы забираем строго нулевой элемент массива. Путь зафиксирован на клиенте, и теперь мы готовы передать этот файл дальше на сервер.
3. Процедура ВыполнитьЗагрузку (Запуск импорта)
Если ПустаяСтрока(ПутьКФайлу) Тогда — проверяет поле пути на форме перед отправкой. Если там пусто — включает защиту.
ПоказатьПредупреждение(, "Пожалуйста, выберите файл Excel или MXL для загрузки!"); — выводит системное окно, напоминая бухгалтеру выбрать файл.
Возврат; — мгновенно останавливает код, чтобы пустой запрос не улетел на сервер и не вызвал критический сбой.
Сообщить("--- Запуск умного импорта файла ---"); — выводит служебный текст в нижнее окно сообщений 1С, подтверждая старт операции.
ОписаниеОповещения = Новый ОписаниеОповещения("ВыполнитьЗагрузкуЗавершение", ЭтотОбъект); — указывает платформе, какую процедуру запустить на клиенте, когда файл полностью долетит до сервера.
НачатьПомещениеФайлаНаСервер(ОписаниеОповещения, , , , ПутьКФайлу, УникальныйИдентификатор); — берет файл по указанному пути и асинхронно пересылает его двоичные данные «по воздуху» во временное хранилище на сервер 1С.
Метод НачатьПомещениеФайлаНаСервер делает всю грязную работу по передаче бинарного потока. Мы не гоняем тяжелый контекст формы через стандартный серверный вызов, а пересылаем «голый» файл в специальный изолированный карман памяти платформы. Интерфейс при этом остается отзывчивым.
4. Процедура ВыполнитьЗагрузкуЗавершение (Вызов сервера и финал)
Если РезультатПомещения = Неопределено Тогда — проверяет, успешно ли завершилась сетевая передача файла.
ПоказатьПредупреждение(, "Ошибка при передаче файла на сервер или операция отменена!"); — сообщает пользователю о сбое сети или отмене операции.
Возврат; — останавливает программу в случае неудачной загрузки.
ТекстСообщения = ЗагрузитьДанныеНаСервере(РезультатПомещения.Адрес); — берет адрес («ссылку») загруженного файла на сервере, передает его в функцию расчетов и получает обратно готовый итоговый текст.
ПоказатьПредупреждение(, ТекстСообщения); — выводит на экран бухгалтеру готовый аналитический свод.
На этом этапе клиентская часть завершает свою работу. Она поймала адрес файла, отдала его серверу и вывела результат на экран. А вот что произошло в этот момент на самом сервере в полной изоляции от кнопок и окон, показывает наша финальная серверная функция.
5. Функция ЗагрузитьДанныеНаСервере (Серверная математика)
ДвоичныеДанныеФайла = ПолучитьИзВременногоХранилища(АдресХранилища); — находит и извлекает бинарное содержимое файла из оперативной памяти сервера по полученному адресу.
ИмяВременногоФайлаСервер = ПолучитьИмяВременногоФайла("xlsx"); — запрашивает у операционной системы сервера уникальное имя для создания временного файла на диске в папке Temp.
ДвоичныеДанныеФайла.Записать(ИмяВременногоФайлаСервер); — физически записывает бинарные данные из памяти на жесткий диск сервера под временным именем для последующего чтения.
ТабличныйДокумент = Новый ТабличныйДокумент; — инициализирует внутренний виртуальный лист 1С для работы с ячейками Excel.
Попытка — открывает защитный блок, чтобы в случае сбоя или «битого» файла программа не вылетела с ошибкой, а перешла в блок обработки аварии.
ТабличныйДокумент.Прочитать(ИмяВременногоФайлаСервер, СпособЧтенияЗначенийТабличногоДокумента.Текст); — считывает структуру Excel-файла с диска сервера в виртуальную таблицу 1С в текстовом режиме.
ТекстОтвета = "Файл успешно сохранен на сервере"; — фиксирует успешный статус операции, если чтение файла прошло без сбоев.
Исключение — точка перехвата управления ранттаймом 1С в случае возникновения любой технической ошибки внутри блока Попытка.
ТекстОтвета = "Ошибка обработки файла: " + ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); — переводит технический сбой на понятный человеческий язык для вывода пользователю.
КонецПопытки; — закрывает защитный блок.
УдалитьФайлы(ИмяВременногоФайлаСервер); — принудительно стирает временный файл с диска сервера, чтобы не засорять систему Temp-мусором.
Возврат ТекстОтвета; — отправляет итоговый текстовый отчет обратно по сети на компьютер пользователя (на Клиент).
Зачистка следов через УдалитьФайлы — железный стандарт разработки. Прочитали, собрали данные и стерли за собой физический файл, чтобы сервер не засорялся от мусора.
Для каждого студента и джуниора этот построчный разбор должен стать настольной памяткой. Не ленитесь проговаривать про себя, что делает платформа на каждом шаге: отменили стандартное окно, поймали массив путей, отправили бинарный поток, зачистили временный каталог Temp на сервере. Это и есть базовые кирпичики, из которых строится карьера во франчайзи и крупных ИТ-компаниях. Теперь вы готовы к финальному погружению. В следующей части мы научимся программно создавать объекты метаданных, заполнять табличные части "Товары" и проводить документы Поступления напрямую из Excel. Будет сложно, но безумно интересно!
Вступайте в нашу телеграмм-группу Инфостарт