Новое временное имя, обратный вызов и отдельная диагностика файла. Запуск операции и её успешное завершение не смешиваются.
Где и как запускать
Полный модуль собственной управляемой формы; толстый клиент Windows. Не запускать в рабочей конфигурации.
Подготовка
Создайте собственную отдельную учебную базу с именем конфигурации УчебнаяКонфигурацияСинтаксиса, внешнюю обработку и пустую управляемую форму. Откройте её в толстом клиенте Windows 8.5.1.1343.
Для командного урока создайте команду Выполнить, кнопку и действие Выполнить. Вставьте весь приведённый модуль, включая функции ниже процедуры.
Книга / 3 и Ручка / 1 создаются в новом табличном документе. Рабочие печатные формы, документы базы и файлы организации не используются.
Основной язык собственной конфигурации — ru. Урок языков дополнительно требует язык en. Языки создаются вручную в Конфигураторе; код не устанавливает их и не переводит текст автоматически.
Урок проверки печати требует установленного собственного тестового/виртуального принтера. На форме создайте строковый реквизит УчебныйПринтер и введите точное имя устройства.
Для реальной печати дополнительно нужен строковый реквизит Подтверждение. Для окна нужна отдельная команда СкрытьУчебноеОкно. Для сохранения первый запуск использует новый временный MXL, не существующий рабочий файл.
При создании руководства 1С, принтер и запись файла не запускались. Окна, драйвер и обратный вызов проверяются вручную в собственной учебной базе.
&НаКлиенте
Процедура Выполнить(Команда)
Документ = СоздатьУчебныйДокумент();
НовоеИмя = ПолучитьИмяВременногоФайла("mxl");
ПроверкаПути = Новый Файл(НовоеИмя);
Если ПроверкаПути.Существует() Тогда
ВызватьИсключение "Новый временный путь уже занят; повторите команду, файл не перезаписываем";
КонецЕсли;
Состояние = Новый Структура("Маркер,Путь", "guide-owned-save", НовоеИмя);
Оповещение = Новый ОписаниеОповещения("УчебнаяЗаписьЗавершена", ЭтотОбъект, Состояние,
"УчебнаяЗаписьОшибка", ЭтотОбъект);
Документ.НачатьЗапись(Оповещение, НовоеИмя, ТипФайлаТабличногоДокумента.MXL);
Сообщить("Запись запущена; это ещё не подтверждение успешного сохранения.");
КонецПроцедуры
&НаКлиенте
Процедура УчебнаяЗаписьЗавершена(Результат, Состояние) Экспорт
Если Состояние.Маркер <> "guide-owned-save" Тогда
ВызватьИсключение "Неизвестный учебный обратный вызов";
КонецЕсли;
Если Результат = Истина Тогда
Сообщить("Обратный вызов подтвердил сохранение.");
ИначеЕсли Результат = Ложь Тогда
Сообщить("Обратный вызов сообщил, что сохранение не завершено.");
ИначеЕсли Результат = Неопределено Тогда
Сообщить("Результат сохранения неизвестен; скачивание браузером не доказывает получение файла.");
Иначе
ВызватьИсключение "Неожиданный тип результата записи";
КонецЕсли;
СобственныйФайл = Новый Файл(Состояние.Путь);
Если СобственныйФайл.Существует() Тогда
Сообщить(СобственныйФайл.Размер() > 0);
Сообщить("Проверьте созданный учебный файл: " + Состояние.Путь);
Иначе
Сообщить("По собственному локальному пути файла нет; успешную запись не утверждаем.");
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура УчебнаяЗаписьОшибка(ИнформацияОбОшибке, Состояние, СтандартнаяОбработка) Экспорт
СтандартнаяОбработка = Истина;
Сообщить("Ошибка записи собственного файла: " + Состояние.Путь);
Сообщить(ИнформацияОбОшибке.Описание);
КонецПроцедуры
&НаКлиенте
Функция СоздатьУчебныйДокумент()
Документ = Новый ТабличныйДокумент;
Документ.КодЯзыка = "ru";
Документ.Область(1, 1).Текст = "Товар";
Документ.Область(1, 2).Текст = "Количество";
Документ.Область(2, 1).Текст = "Книга";
Документ.Область(3, 1).Текст = "Ручка";
Документ.Область(2, 2).Текст = "3";
Документ.Область(3, 2).Текст = "1";
Документ.Область(, 1, , 1).ШиринаКолонки = 25;
Документ.Область(, 2, , 2).ШиринаКолонки = 12;
Возврат Документ;
КонецФункцииРазбор по шагам
Получить новое временное имя и отказаться от записи, если оно уже занято. Этот путь создан специально для учебного документа.
Передать собственный маркер и путь через дополнительные параметры ОписаниеОповещения. НачатьЗапись получает оповещение первым аргументом, имя вторым, формат третьим.
Обработать Истина, Ложь и Неопределено отдельно. Последнее особенно важно для скачивания средствами браузера: факт запуска не равен факту получения файла.
В толстом клиенте дополнительно проверить существование и ненулевой размер своего файла. Обработчик ошибки не удаляет и не перезаписывает файлы.
Как проверить результат
После запуска выводится только сообщение о начале. Проверку успеха смотрите в обратном вызове.
Если собственный файл появился, проверка его размера даёт Истина. Откройте MXL вручную и сравните Книгу/3 и Ручку/1; файл остаётся для проверки.
Ожидаемый результат
Полный модуль начала записи, завершения и ошибки с честной диагностикой состояния.
На что обратить внимание
На стороне браузера локальный путь может не соответствовать месту сохранённого скачивания: этот урок запускается в толстом клиенте Windows.
Не удаляйте файл при Неопределено: это неизвестный результат, а не доказательство неудачи.
Ненулевой размер не доказывает правильное содержимое; нужна ручная проверка MXL. После неё собственный временный файл можно удалить вручную.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.