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

—

от автора

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

​Каждый начинающий программист 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 и запоминает путь к файлу.

Вторая половина (на Сервере): Получив файл, программа должна передать его на сервер, чтобы тот открыл базу данных и создал документы.

В этой статье мы подробно разобрали и построили первую, самую коварную половину этого моста — научились перехватывать и запоминать файлы на стороне пользователя.А в следующей статье мы перекинем мост дальше и научим нашу обработку передавать этот файл на сервер и создавать документы в базе данных.

 

​

ссылка на оригинал статьи https://habr.com/ru/articles/1100676/