Архитектура 1С для новичков: Строим первую внешнюю обработку. Часть третья

22.09.26

Разработка - Механизмы платформы 1С

Боитесь запутаться в клиент-серверной архитектуре и управляемых формах? В третьей части статьи разберем самый простой и понятный алгоритм создания моста во внешней обработке. Пошагово разберем основные команды 1С, чтобы четко понимать, как они называются и за что отвечают на уровне ядра системы. Идеально для начинающих разработчиков и студентов, делающих первые шаги в 1С.

Коллеги, давайте смотреть правде в глаза. В ИТ-индустрии ценятся не те, кто умеет часами писать тонны шаблонного кода, а те, кто умеет создавать быстрые, надежные и автоматизированные решения для бизнеса. Сейчас весь цивилизованный бизнес сидит на ЭДО (электронном документообороте), и информация переносится автоматически. Но в чем парадокс? ЭДО не решает проблему сопоставления номенклатуры автоматически! Когда документ прилетает по ЭДО, номенклатура поставщика (например, «Кабель медный ВВГнг-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. Будет сложно, но безумно интересно!

Вступайте в нашу телеграмм-группу Инфостарт

1С:Предприятие 8.3 управляемые формы клиент-сервер НаСервереБезКонтекста внешняя обработка разработка для новичков искусственный интеллект генерация кода галлюцинации ИИ табличный документ поступление товаров загрузка из Excel электронный документооборот ЭДО сопоставление номенклатуры временное хранилище асинхронные вызовы ОписаниеОповещения рантайм 1С

Вы можете заказать платную адаптацию этой статьи под ваши задачи на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

См. также

Механизмы платформы 1С Разработчик Бесплатно (free)

Разберем 15 мифов о работе платформы «1С:Предприятие 8» – как распространенных, так и малоизвестных. Начнем с классики: «Код, написанный в одну строку, работает быстрее, чем многострочный». Так ли это на самом деле?

16.07.2025    44262    TitanLuchs    109    

153

Работа с интерфейсом WEB-интеграция Механизмы платформы 1С Бесплатно (free)

Веб-интерфейсы повышают качество внешнего вида приложений 1С, предсказуемы с точки зрения верстки, позволяют организовать удобные и высокопроизводительные рабочие места для пользователей. Расскажем об особенностях разработки веб-интерфейсов на React внутри 1С, двустороннем взаимодействии 1С и JavaScript, а также сборке веб-приложения в одностраничный файл.

19.06.2025    17596    zeegin    15    

62

Механизмы платформы 1С Работа с интерфейсом Разработчик Стажер 1С:Предприятие 8 Бесплатно (free)

Про ООП в 1С и о том, как сделать свой код более кратким и выразительным при помощи использования текучего интерфейса (fluent interface).

03.02.2025    25259    bayselonarrend    127    

68

Механизмы платформы 1С Разработчик 1С:Предприятие 8 Бесплатно (free)

В этой статье подробно рассматривается работа с JSON в XDTO в 1С:Предприятие. Вы узнаете, как сериализовать и десериализовать объекты XDTO в JSON, интегрировать 1С с веб-сервисами и API, а также корректно обрабатывать данные при обмене. Разбираются особенности работы с коллекциями, использование функций восстановления и частые ошибки при работе с JSON и XDTO.

30.01.2025    31865    user2122906    10    

67

Механизмы платформы 1С Файловый обмен (TXT, XML, DBF), FTP Разработчик 1С:Предприятие 8 Бесплатно (free)

Этот материал познакомит вас с механизмом XDTO (XML Data Transfer Objects) в 1С и научит эффективно использовать его возможности. Мы разберёмся, как работать с XML-схемами, создавать модели данных, манипулировать объектами XDTO, а также сериализовать и десериализовать их в XML. Вы узнаете, как использовать XDTO для интеграции с внешними системами, избегать типичных ошибок и оптимизировать код. К концу вы будете уверенно применять XDTO для решения сложных задач обмена данными и автоматизации процессов.

17.01.2025    52855    user2122906    12    

63

Механизмы платформы 1С WEB-интеграция Разработчик 1С:Предприятие 8 Бесплатно (free)

В платформе 8.3.27 появилась возможность использовать WebSocket-клиент. Давайте посмотрим, как это все устроено и чем оно нам полезно.

14.01.2025    45111    dsdred    110    

155

Механизмы платформы 1С Разработчик Стажер 1С:Предприятие 8 1C:Бухгалтерия Бесплатно (free)

Эта небольшая статья - некоторого рода шпаргалка по файловым потокам: как и зачем с ними работать, какие преимущества это дает.

23.06.2024    39365    bayselonarrend    22    

180
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Ninel_S 32 22.09.26 10:36 Сейчас в теме
Коллега, большое Вам спасибо за такой непростой труд. Однозначно - "плюсик". И (даже не совет и не рекомендация) моим немолодым глазам было трудно читать:

Попытка — открывает защитный блок, чтобы в случае сбоя или «битого» файла программа не вылетела с ошибкой, а перешла в блок обработки аварии.

ТабличныйДокумент.Прочитать(ИмяВременногоФайлаСервер, СпособЧтенияЗначенийТабличногоДокумента.Текст); — считывает структуру Excel-файла с диска сервера в виртуальную таблицу 1С в текстовом режиме.

ТекстОтвета = "Файл успешно сохранен на сервере"; — фиксирует успешный статус операции, если чтение файла прошло без сбоев.

Вероятно, было бы приятнее Вашим читателям, если бы было выделение:

Попытка — открывает защитный блок, чтобы в случае сбоя или «битого» файла программа не вылетела с ошибкой, а перешла в блок обработки аварии.

ТабличныйДокумент.Прочитать(ИмяВременногоФайлаСервер, СпособЧтенияЗначенийТабличногоДокумента.Текст); — считывает структуру Excel-файла с диска сервера в виртуальную таблицу 1С в текстовом режиме.

ТекстОтвета = "Файл успешно сохранен на сервере"; — фиксирует успешный статус операции, если чтение файла прошло без сбоев.
Для отправки сообщения требуется регистрация/авторизация