Каждый начинающий программист 1С рано или поздно приходит к моменту, когда типовых возможностей конфигурации не хватает, а вносить изменения в саму конфигурацию (снимать с поддержки) нельзя или не хочется. Именно для таких задач и существуют внешние обработки (файлы с расширением .epf),они не мешают последующим типовым обновлениям от фирмы 1С.
Шаг 1. Создаем файл обработки в Конфигураторе
Открываем Конфигуратор и идем по классическому пути: Файл — Новый — Внешняя обработка.
Перед нами пустая карточка. Здесь нас интересуют два поля: Имя и Синоним.
Имя — это то, как к вашей обработке будет обращаться сама система в коде (пишем строго без пробелов, например: ЗагрузкаДанныхИзФайлов).
Синоним — это название, которое 1С выведет на экран пользователю (тут пробелы и знаки препинания разрешены, например: Умный импорт первички).
Шаг 2. Проектируем интерфейс (Управляемую форму)
Находим в дереве пункт Формы, жмем на лупу и создаем новую управляемую форму обработки.
Добавляем данные: В правом верхнем углу (вкладка Реквизиты) нажимаем «Добавить». Нам нужна строка, назовем её ПутьКФайлу, перетаскиваем в левое верхнее окно Элементы.
Лайфхак для интерфейса: Выделяем это поле, открываем его свойства (Alt + Enter) и в поле Заголовок пишем то, что должен увидеть пользователь, а чуть ниже находим свойство КнопкаВыбора и ставим галочку Да (чтобы в поле появились заветные три точки ...).
Какое событие выбрать для кнопки с тремя точками?
Чтобы при нажатии на три точки открывалось окно выбора файла, прокрутите свойства поля ввода в самый вниз до раздела События. Из всего списка нам нужна строка НачалоВыбора. Нажмите на лупу рядом с ней 👉 «Создать на клиенте».
Почему именно на клиенте? Почему ПутьКФайлу и выбор файла — это ТОЛЬКО Клиент?
Давайте разберемся, почему ПутьКФайлу создается на клиенте, а база данных живет на сервере, и почему нельзя написать всё в одном месте.
Клиент — это ваш личный компьютер (ноутбук, монитор, мышка).Когда вы нажимаете кнопку выбора файла ..., 1С должна открыть стандартное окно Windows, чтобы вы прошлись по своим папкам и выбрали документ.
Почему не сервер?
Сервер 1С — это огромный мощный компьютер, который физически стоит в другой комнате, в другом городе или вообще в «облаке». У него нет монитора и мышки. Если вы попытаетесь запустить выбор файла на сервере, сервер откроет это окно внутри своей памяти, а вы на своем экране ничего не увидите. Программа просто зависнет. Поэтому всё, что касается ваших личных файлов и экрана — пишется строго на Клиенте.Сервер — это место, где крутится сама база данных SQL и хранятся все ваши справочники, товары и документы.
Почему нельзя выбирать «На клиенте и процедуру на сервере»?
Если вы выберете этот пункт, 1С по ошибке создаст лишнюю пустую серверную процедуру. Но серверу 1С в облаке не интересно, какой файл лежит у вас на диске C:, у него даже нет прав залезть в ваш компьютер. Серверная процедура здесь будет просто бессмысленным мусором, который только запутает код.
Почему создаем событие именно «НачалоВыбора»?
НачалоВыбора — срабатывает в ту самую миллисекунду, когда пользователь только кликнул по кнопке... Платформа 1С понимает: «Пользователь нажал кнопку, он ХОЧЕТ выбрать файл».
После выбора пункта «Создать на клиенте» платформа перекинет вас в модуль. Скопируйте этот готовый рабочий код и вставьте его прямо внутрь процедуры:
&НаКлиенте
Процедура ПутьКФайлуНачалоВыбора(Элемент, ДанныеВыбора, ВыборДобавлением, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
Диалог = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
Диалог.Фильтр = "Файлы Excel (*.xlsx)|*.xlsx|Таблицы 1С (*.mxl)|*.mxl";
Диалог.Заголовок = "Выберите файл для загрузки";
Диалог.МножественныйВыбор = Ложь;
ОписаниеОповещения = Новый ОписаниеОповещения("ПутьКФайлуНачалоВыбораЗавершение", ЭтотОбъект);
Диалог.Показать(ОписаниеОповещения);
КонецПроцедуры
А прямо под ней (в самом низу модуля) вставьте принимающую процедуру, которая запишет выбранный путь в поле на форме:
&НаКлиенте Процедура ПутьКФайлуНачалоВыбораЗавершение(ВыбранныеФайлы, ДополнительныеПараметры) Экспорт
&НаКлиенте
Процедура ПутьКФайлуНачалоВыбораЗавершение(ВыбранныеФайлы, ДополнительныеПараметры) Экспорт
Если ВыбранныеФайлы <> Неопределено И ВыбранныеФайлы.Количество() > 0 Тогда
ПутьКФайлу = ВыбранныеФайлы[0];
КонецЕсли;
КонецПроцедуры
Почему её нужно добавлять, если на клиенте уже есть первая процедура?
Первая процедура ПутьКФайлуНачалоВыбора только открывает окно проводника Windows на экране и сразу... завершает свою работу. Она не ждет, пока пользователь найдет нужную папку и кликнет по файлу. Она дает команду операционной системе: «Покажи пользователю окно выбора файла». И тут же мгновенно завершается.
Но перед завершением она оставляет системе «записку» (это строчка Новый ОписаниеОповещения("ПутьКФайлуНачалоВыбораЗавершение", ЭтотОбъект)). В этой записке написано: «Когда вы выберете файл и нажмете кнопку "Открыть", не забудьте вернуть этот файл в процедуру ПутьКФайлуНачалоВыбораЗавершение». Платформа читает нашу «записку», видит имя второй процедуры и передает выбранный файл в нее.
Если вторую процедуру не написать, то окно откроется, пользователь выберет файл, нажмет «Открыть», но путь к файлу никуда не запишется — его просто некому будет принять. Первая процедура открывает дверь, а вторая — забирает файл.
Шаг 3. Тестируем готовую форму в режиме «1С:Предприятие»
Внешняя обработка хороша тем, что для её проверки не нужно обновлять или перезапускать конфигурацию базы данных. Вы можете менять код, сохранять файл и сразу смотреть результат.
Сохраните ваш файл (Файл — Сохранить как...) на рабочий стол. Он запишется в формате .epf.
Запустите вашу базу 1С в обычном пользовательском режиме (1С:Предприятие).
Нажмите Главное меню — Файл — Открыть и выберите ваш сохраненный файл с рабочего стола.
Нажмите на три точки ... в поле ввода. Перед вами откроется аккуратное окно проводника Windows, которое показывает только файлы Excel и таблицы 1С. Выберите документ, нажмите «Открыть» — и полный путь мгновенно запишется в ваше поле на форме.
У вас может возникнуть логичный вопрос: «Если внешняя обработка нужна для того, чтобы создавать документы и менять справочники внутри базы 1С, почему весь наш код написан строго на Клиенте?»
В этом и кроется главный секрет архитектуры 1С: Чтобы загрузить данные в базу, нам нужно построить мост из двух половин.
Первая половина (на Клиенте): Нам нужно взять файл с вашего личного компьютера. Сервер 1С сделать этого не может — он слеп к вашему диску C:. Поэтому на клиенте мы пишем код, который открывает проводник Windows и запоминает путь к файлу.
Вторая половина (на Сервере): Получив файл, программа должна передать его на сервер, чтобы тот открыл базу данных и создал документы.
В этой статье мы подробно разобрали и построили первую, самую коварную половину этого моста — научились перехватывать и запоминать файлы на стороне пользователя.А в следующей статье мы перекинем мост дальше и научим нашу обработку передавать этот файл на сервер и создавать документы в базе данных.
Вступайте в нашу телеграмм-группу Инфостарт