ПередЗаписью

События · BeforeWrite

Возникает на клиенте перед выполнением записи объекта из формы. Процедура-обработчик данного события вызывается перед вызовом процедуры-обработчика события ПередЗаписью объекта.

Синтаксис

ПередЗаписью(<Отказ>, <ПараметрыЗаписи>)
Полное описание, параметры и ограничения

ПередЗаписью (BeforeWrite)

Расширение формы клиентского приложения для объекта таблицы внешнего источника данных

ПередЗаписью (BeforeWrite)

Доступен, начиная с версии 8.3.5.

Синтаксис:
ПередЗаписью(<Отказ>, <ПараметрыЗаписи>)
Параметры:

<Отказ>
Тип: Булево.
Признак отказа от записи. Если в теле процедуры-обработчика установить данному параметру значение Истина, то запись произведена не будет.
Значение по умолчанию: Ложь.

<ПараметрыЗаписи>
Тип: Структура.
Структура, содержащая параметры записи.
Описание:

Возникает на клиенте перед выполнением записи объекта из формы. Процедура-обработчик данного события вызывается перед вызовом процедуры-обработчика события ПередЗаписью объекта.

Доступность:

Тонкий клиент, веб-клиент, мобильный клиент, сервер, толстый клиент.

Примечание:
В обработчике данного события нельзя использовать серверные методы формы с директивой компиляции &НаСервере, а также изменять свойства, которые могут привести к серверному вызову.
См. также:
Расширение формы клиентского приложения для документа, событие ПередЗаписью

Использование в версии:

Доступен, начиная с версии 8.3.5.

Описание изменено в версии 8.3.15.

Методическая информация

Практические примеры

ПередЗаписью: собственная внешняя карточка

Настоящая форма собственной внешней SQL-строки вызывает обработчик в указанной фазе чтения / записи. Подготовка включает реальные таблицы и основной реквизит формы, а не неизвестный входной объект.

Где и как запускать

Клиентская команда собственной управляемой формы УчебнаяКарточка (ОбъектныеДанные).

Подготовка

  1. Только собственный локальный SQL Server и отдельная учебная база 1С без рабочих внешних источников. SQL-блок выполните вручную в SSMS своего экземпляра: он создаёт новую GuideExternalBooks и две собственные таблицы. Если имя уже занято, существующую базу не удаляйте и не заменяйте.

  2. В ODBC Data Sources разрядности серверного процесса 1С создайте собственный System DSN GuideOwnBooks: ваш localhost SQL Server, база GuideExternalBooks, Windows-аутентификация. Пользователь серверного процесса 1С должен иметь доступ только к этой учебной базе. Настройте нормальное доверие сертификату драйвера, проверку TLS не отключайте.

  3. В Конфигураторе создайте ВнешниеИсточникиДанных → УчебныеКниги, автоматическое управление блокировками. Таблица Карточки: имя dbo.lesson_items, тип ОбъектныеДанные, ТолькоЧтение Ложь; Код=book_id Строка20, Название=title Строка100, Количество=quantity Число9.0. Null запрещён, ПоляКлюча и ПоляБлокировкиДанных — Код, представление — Название.

  4. Таблица Строки: имя dbo.lesson_lines, тип НеобъектныеДанные, ТолькоЧтение Ложь; Урок=lesson_id Строка20, Номер=line_no Число9.0, Название=title Строка100, Количество=quantity Число9.0. Null запрещён, поля ключа / блокировки — Урок и Номер именно в этом порядке.

  5. Мастером создайте у Карточки управляемую форму объекта УчебнаяКарточка, а у Строки управляемую форму записи УчебнаяСтрока. Сохраните настоящие основные реквизиты и привяжите поля. Назначьте эти формы основными для редактирования таблиц и создайте стандартные формы списков.

  6. В своей обработке с управляемой формой создайте команду ПодготовитьУчебноеСоединение. Отдельный блок настройки соединения относится только к модулю этой обработки; пользователь имеет административные права на свой источник. Настраивается только сеанс, не общие параметры чужого подключения.

  7. После подключения откройте собственную таблицу через Функции для технического специалиста → Внешние источники данных → УчебныеКниги. Выберите подготовленную строку и откройте её штатной командой редактирования: Карточки с Код BOOK-1 либо Строки с Урок LESSON-1 и Номер 1. Не создавайте новый объект вместо открытия существующего.

  8. Основной блок — событие самой формы редактируемой строки / карточки, не команда произвольной общей формы. Добавьте СтатусУрока типа Строка200 и выведите его на эту форму; ключевые поля не меняйте.

  9. Для этой страницы используйте только УчебнаяКарточка и ключ BOOK-1.

  10. В той же форме внешней строки / карточки добавьте РазрешитьЗапись и ОтменитьВТранзакции (Булево), СчетчикСобытий (Число10.0). Выведите на форму, Количество должно допускать отрицательные числа для отдельного упражнения валидации.

  11. Назначьте основному обработчику событие самой формы ПередЗаписью. Элемент в сигнатуру не добавляется. Дополнительный инициализатор — модуль этой же формы.

  12. Каждый урок самостоятельный. Откройте свою существующую строку и измените Количество; используйте штатную команду Записать. Для ПриЧтенииНаСервере откройте строку или перечитайте её без записи.

&НаКлиенте
Процедура ПередЗаписью(Отказ, ПараметрыЗаписи)
    Если Не РазрешитьЗапись Тогда
        Отказ = Истина;
        Сообщить("Подтвердите запись собственной внешней строки флажком");
        Возврат;
    КонецЕсли;
    ПараметрыЗаписи.Вставить("УчебнаяЗапись", Истина);
КонецПроцедуры
Только вручную в SSMS своего локального SQL Server: новый учебный источник, не BSL
CREATE DATABASE GuideExternalBooks;
GO
USE GuideExternalBooks;
GO
CREATE TABLE dbo.lesson_items (
    book_id nvarchar(20) NOT NULL PRIMARY KEY,
    title nvarchar(100) NOT NULL,
    quantity numeric(9,0) NOT NULL
);
CREATE TABLE dbo.lesson_lines (
    lesson_id nvarchar(20) NOT NULL,
    line_no numeric(9,0) NOT NULL,
    title nvarchar(100) NOT NULL,
    quantity numeric(9,0) NOT NULL,
    PRIMARY KEY (lesson_id, line_no)
);
INSERT INTO dbo.lesson_items VALUES (N'BOOK-1', N'Учебная книга', 3);
INSERT INTO dbo.lesson_lines VALUES (N'LESSON-1', 1, N'Учебная строка книги', 3);
Отдельная собственная обработка: сеансовое соединение с подготовленным DSN
&НаКлиенте
Процедура ПодготовитьУчебноеСоединение(Команда)
    НастроитьСвойИсточник();
КонецПроцедуры
&НаСервереБезКонтекста
Процедура НастроитьСвойИсточник()
    Источник = ВнешниеИсточникиДанных.УчебныеКниги;
    Параметры = Источник.ПолучитьПараметрыСоединенияСеанса();
    Параметры.СУБД = "MSSQLServer";
    Параметры.СтрокаСоединения = "DSN=GuideOwnBooks;";
    Параметры.АутентификацияОС = Истина;
    Параметры.АутентификацияСтандартная = Ложь;
    Параметры.ИмяПользователя = "";
    Параметры.Пароль = "";
    Источник.УстановитьПараметрыСоединенияСеанса(Параметры);
    Источник.УстановитьСоединение();
КонецПроцедуры
Та же внешняя форма: собственные флажки и счётчик
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    РазрешитьЗапись = Ложь;
    ОтменитьВТранзакции = Ложь;
    СчетчикСобытий = 0;
    СтатусУрока = "Открыта собственная внешняя строка";
КонецПроцедуры

Разбор по шагам

  1. Подготовьте ровно собственные SQL-таблицы и настоящую форму указанного вида данных.

  2. Откройте свою существующую строку, назначьте обработчик событию самой формы.

  3. Выполните действие и различайте фазу клиента, сервер до транзакции, внутри и после её завершения.

Как проверить результат

  1. Без флажка сохранение отменяется на клиенте; с флажком действие может продолжиться.

  2. Флажок — учебное подтверждение, не защита от несанкционированной SQL-записи. Серверные методы в обработчике не вызываются.

Ожидаемый результат

Обработчик связан с конкретной своей внешней строкой, реальным событием формы и точной фазой транзакции.

На что обратить внимание

  1. Не запускайте подготовку / запись на рабочем SQL Server, не заменяйте DSN существующим чужим источником.

  2. После урока закройте только своё соединение и оставьте собственные учебные данные для проверки. Удаление SQL-базы и таблиц примером не выполняется.

  3. SQL и BSL здесь не запускались, соединения к 1С / SQL агентом не открывались; runtime-проверка отсутствует.

  4. Установленная справка в описании ТекущийОбъект этих внешних форм местами содержит типы регистра сведений / справочника. Пример относится именно к фактическому расширению формы собственной внешней таблицы; запуск в 1С здесь не подтверждён.

Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.

Не хотите разбираться сами?

Адаптируем это решение под вашу базу. Оценка бесплатно.

Оставить задачу

1С, 1С:Предприятие — товарные знаки ООО «1С». Сайт не является официальным представительством фирмы «1С» и не аффилирован с ней.