Конструктор не найден новый описаниеоповещения

Обновлено: 03.05.2024

The text was updated successfully, but these errors were encountered:

nixel2007 commented Jun 9, 2018

@khorevaa ну так Использовать notify в тесте должно спасти отца русской демократии, разве нет? Плюс ко всему, в опм есть fluent, у которого зависимостями стоит notify.

khorevaa commented Jun 9, 2018

@nixel2007 не спасает. Пробовал. В тесте то все норм. Проблема когда тест импортирует либу а в ней есть использовать notify при этом ошибка сохраняется..

nixel2007 commented Jun 9, 2018

у тебя в oscript.cfg для опм библиотеки как прописаны? в lib.system или в lib.additional?

khorevaa commented Jun 9, 2018

Ничего специально не прописывал. Чисто по установке

nixel2007 commented Jun 9, 2018

Поставь пакет oscript-config и выполни oscript-config get lib.system из каталога lib\opm\src

nixel2007 commented Jun 9, 2018

а не, не поможет. попробуй тогда прям в стартовом скрипте опма сообщить значения системных настроек lib.system и lib.additional

khorevaa commented Jun 9, 2018

nixel2007 commented Jun 9, 2018 •

@khorevaa у тебя какой-то рассинхрон данных. в notify 0.1.1 класс назывался ОписаниеОповещенияВнутренний, в 0.2.0 - ОписаниеОповещения

khorevaa commented Jun 9, 2018 •

@nixel2007 ДА уж точно рассинхрон! Опытным путем установил, что ситуация повторяется, если с 13.0 версии перейти сразу на 14.1 минуя 13.1 где были исправлены зависимости от fluent и notify
С 20 движком идет версия 13.0 соответственно запустить opm test можно только после обновления хотя бы до 13.1. Это актуально только если в пакете есть зависимость от fluent или notify и тебе необходимо создать объект ОписаниеОповещения

khorevaa commented Jun 9, 2018

@nixel2007 Дополнительно выявил, что update (или install) не удаляют каталог oscript_modules - что приводит к тому, что сначала поиск подключения либы идет в нем, а потом в системном каталоге.. а там может быть старая либа.

nixel2007 commented Jun 10, 2018

А вот это уже похоже на основание для пулл реквеста в опм :)

You can’t perform that action at this time.

You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.

на клиентском общем модуле пишу
Процедура ОткрытьФормуЦеныИВалюта(ФормаДокумента, ДополнительныеПараметрыОповещения = Неопределено) Экспорт
ПараметрыОповещения = Новый Структура("ФормаДокумента, ДополнительныеПараметры", ФормаДокумента, ДополнительныеПараметрыОповещения);
ОписаниеОповещения = Новый ОписаниеОповещения("ПослеЗакрытияФормыЦеныИВалюта", ФормаДокумента, ПараметрыОповещения);
КонецПроцедуры

Процедура ПослеЗакрытияФормыЦеныИВалюта(Результат, Параметры) Экспорт
ФормаДокумента = Параметры.ФормаДокумента;
КонецПроцедуры

: Ошибка при вызове конструктора (ОписаниеОповещения)
ОписаниеОповещения = Новый ОписаниеОповещения("ПослеЗакрытияФормыЦеныИВалюта",
по причине:
Не найден экспортируемый метод: ПослеЗакрытияФормыЦеныИВалюта

вроде указал слово Экспорт

(0) Сотри "Экспорт" и напиши по новой. Даже миста его не понимает и не подсветила красным. Скорее всего у тебя там анг буква -)

(0) ты метод ПослеЗакрытияФормыЦеныИВалюта к Форме привязал, а он по ходу у тебя в этом же общем модуле живет

Ну. Ты сам указал расположение обработчика "ПослеЗакрытияФормыЦеныИВалюта" в ФормаДокумента. А поместил его в общем модуле.

Правильно оно ругается.

Тип: Строка.
Тип: УправляемаяФорма; КомандаКомандногоИнтерфейса; ОбщийМодуль.
Программный модуль, процедура которого будет вызвана.
При использовании типа УправляемаяФорма будет вызван метод модуля указанной управляемой формы.
При использовании типа ОбщийМодуль будет вызван метод общего неглобального модуля.
При использовании типа КомандаКомандногоИнтерфейса будет вызван метод модуля команды командного интерфейса.
Объект данного типа может быть получен только из модуля команды.
Для получения ссылки на него необходимо использовать свойство "ЭтотОбъект".
Оно доступно в контексте модуля команды и аналогично свойству ЭтаФорма в модуле формы.

второй параметр смотри-читай

ОписаниеОповещения — объект встроенного языка 1С:Предприятия, указывающий на процедуру, в которой будет продолжено исполнение кода при наступлении определенного события.

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

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

Основным инструментом отказа от модальности стало ОписаниеОповещения.

Как работает ОписаниеОповещения

Для начала разберем как работает платформа с модальными окнами на примере метода Вопрос(). Напишем не хитрый код, в котором пользователю показывается диалог с вопросом и вариантами ответа Да и Нет.

В данном случае пользователю будет показан диалог, а работа клиентской части будет полностью приостановлена до момента, пока пользователь не ответит на вопрос.

Диалог с ОписаниеОповещения

Тогда результат поместится в переменную Ответ и только после этого работа клиентской части будет возобновлена для выполнения алгоритма заполнения.

Напишем аналогичный пример, но уже без модального вызова. Будем использовать метод ПоказатьВопрос(), которому передадим ОписаниеОповещения.

Пользователь не заметит разницы, ведь будет показан точно такой же диалог с вопросом. Но исполнение кода не будет приостановлено, вместо этого будет исполнен дальнейший алгоритм и будет завершена работа текущей процедуры.

После ответа пользователя будет вызвана процедура ОбработатьОтветПользователя(), которую мы указали в конструкторе ОписаниеПоповещения и только тогда будет выполнен алгоритм заполнения.

Описание функционала от разработчиков на ИТС

Синтаксис

Конструктор ОписаниеОповещения имеет 5 необязательных параметров:

ИмяПроцедуры — Имя экспортируемой процедуры, которая будет вызвана;

Модуль — Модуль в котором расположена вызываемая процедура. Могут быть указаны Форма, Общий модуль, Команда командного интерфейса;

ДополнительныеПараметры — Произвольное значение, которое будет передано в вызываемую процедуру последним параметром;

ИмяПроцедурыОбработкиОшибки — Имя экспортируемой процедуры, которая будет вызвана в случае ошибки;

МодульОбработкиОшибки — Модуль в котором расположена вызываемая процедура в случае ошибки. Могут быть указаны Форма, Общий модуль, Команда командного интерфейса.

Вызываемая процедура и её параметры

Вызываемая процедура должна быть экспортируемой, и в самом простом случае содержать два параметра Результат и ДополнительныеПараметры.

В зависимости от объекта в котором используется ОписаниеОпопвещения, количество параметров вызываемой процедуры может меняться.

Например вызываемая процедура для обработки оповещения метода глобального контекста НачатьПомещениеФайла() должна иметь 4 параметра.

Для избежания ошибок обращайтесь к Синтаксис-помощнику, там описано количество и порядок необходимых параметров.

Выполнение обработки оповещения

В платформе реализован метод ВыполнитьОбработкуОповещения(), для возможности непосредственного выполнения обработки оповещения.

Методу в качестве параметра необходимо передать ОписаниеОповещения, которое будет выполнено. Так же можно передать в процедуру обработки произвольный результат вторым необязательным параметром.

Работа на сервере

ОписаниеОповещения не доступно на сервере, но в качестве исполняемой процедуры можно указать серверный метод. В справке нет явного указания о данной возможности, но и противоречий нет.

Возможные ошибки

Не найден экспортируемый метод

Если вызываемая процедура не экспортная, то при исполнении будет вызвано исключение. Решается указанием экспортной процедуры.

Не найден экспортируемый метод

Количество параметров 1. Ожидаемое количество – 2

Если вызываемая процедура будет объявлена с одним параметром, то при исполнении будет вызвано исключение. Решается добавлением второго параметра в вызываемую процедуру.

Количество параметров 1. Ожидаемое количество – 2

Примеры использования ОписаниеОповещения

ОписаниеОповещения может использоваться во множестве сценариев, например обработка результата открытия форм, диалог выбора файла, работа с файлами, чтение и запись данных, работа с табличными и текстовыми документами. Разберем некоторые из них.

Оповещение о закрытии формы

Реализуем функционал открытия формы подбора с дальнейшей обработкой результата

Ввод значений и предупреждения

Реализуем функционал ввода числа. После ввода выполним проверку на четность введенного числи, если число не четное выведем предупреждение

Проверка существования файла и передача описания оповещения через дополнительные параметры

При работе на стороне клиента, например с оборудованием, логику работы системы можно организовать при помощи оповещений. Можно передавать ОписаниеОповещения в качестве следующего шага, ветвления логики или вызывать одно оповещение из нескольких мест.

Разработаем функционал проверки существования файла. В модуле реализована процедура для централизованной обработки ошибок ОповеститьОбОшибке(), будем передавать ОписаниеОповещения об ошибке через дополнительные параметры.

Обработаем результат проверки существования файла. Если файл не существует, выполним обработку оповещения переданного через дополнительные параметры

Отказ от использования модальных окон

В статье будут рассмотрены причины отказа от дальнейшей поддержки модальных окон в платформе «1С:Предприятие» и типовые сценарии перевода имеющегося функционала на новую модель.

Развитие продуктов «1С» и платформы «1С:Предприятие»

Одним из основных векторов развития платформы «1С:Предприятие» является возможность ее успешного использования в среде Интернет.

Эта среда имеет ряд ограничений, которые отсутствуют в среде настольных приложений:

  • Ограничения программ, используемых для работы в Интернете (браузеров),
  • Ограничения, связанные с качеством связи между клиентским приложением и сервером.

Приложения, предназначенные для работы через Интернет, должны быть построены с учетом этих ограничений, поэтому их модель отличается от настольных приложений.

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

Изначально платформа «1С:Предприятие» создавалась для построения настольных бизнес-приложений, использующих синхронную модель. Однако, с развитием SaaS-решений потребовался постепенный переход на асинхронную логику.

Проблемы поддержки модальных окон в среде Интернет

Модальные окна являются элементом синхронной модели. Они блокируют исполнение логики приложения, позволяя выполнять ее участки последовательно, друг за другом, в зависимости от результата, полученного от пользователя.

Такие окна не входят в стандарт веб-разработки, поэтому не поддерживаются всеми браузерами, при помощи которых пользователь получает доступ к приложениям «1С».

Для разработки качественных веб-приложений требуются асинхронные средства обеспечения взаимодействия с пользователем.

Такие средства были добавлены в платформу «1С:Предприятие» в версии 8.3.3.

Несколько терминов и определений

Далее в статье будут использоваться следующие термины:

  • Модальное окно – окно, блокирующее весь интерфейс приложения, при этом исполнение кода останавливается до момента получения ответа пользователя. Например, окно модальной формы.
  • Модальный метод – метод глобального контекста или объекта платформы, при выполнении которого происходит открытие модального окна. Например, методы Вопрос() , ОткрытьМодально() .
  • Блокирующее окно – окно, блокирующее весь интерфейс или его часть, но при этом исполнение кода не останавливается. Например, форма, блокирующая владельца.

Общие принципы при переходе на асинхронную модель построения бизнес-логики

В синхронной модели код, зависящий от выбора пользователя, выполняется последовательно.

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

Таким образом, получается, что такой код разбивается на две процедуры:

  1. Процедура, которая создает блокирующее окно, ожидающее действия пользователя,
  2. Процедура - обработчик оповещения о том, что пользователь сделал свой выбор и мы можем использовать результат его действий для дальнейшей работы.

Новые асинхронные средства платформы для взаимодействия с пользователем

Для реализации асинхронной модели в первую очередь требуется возможность описания процедур-обработчиков оповещений, которые будут вызваны системой при завершении выбора пользователя.

Для этого в платформу был добавлен новый тип объектов - ОписаниеОповещения .

Этот объект имеет конструктор со следующими параметрами:

  • ИмяПроцедуры - Указывает имя процедуры-обработчика оповещения, которая будет выполнена после получения ответа пользователя,
  • Модуль -Указывает в каком модуле расположена эта процедура. Этот параметр может иметь следующие типы:
    • УправляемаяФорма - процедура расположена в модуле управляемой формы,
    • ОбщийМодуль - процедура расположена в общем неглобальном клиентском модуле,
    • КомандаКомандногоИнтерфейса - процедура расположена в модуле команды.

    Для получения значения модуля у вышеперечисленных объектов добавлено общее свойство ЭтотОбъект.

    • ДополнительныеПараметры - значение любого типа, которое будет передано в процедуру-обработчик оповещения при ее вызове.

    При вызове указанной процедуры системой ей через параметры передается результат выбора пользователя и значение ДополнительныеПараметры . В некоторых случаях результат выбора может отсутствовать (метод ПоказатьПредупреждение() ) или передаваться несколькими параметрами (метод НачатьПомещениеФайла() ).

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

    Группа этих методов отличается следующим:

    • Их имена начинаются со слова Показать либо Начать, например ПоказатьВопрос() вместо Вопрос() , НачатьПомещениеФайла() вместо ПоместитьФайл() , и так далее,
    • Первым параметром принимают объект ОписаниеОповещения, указывающий на процедуру модуля, которая будет выполнена после того как пользователь сделает выбор в блокирующем окне,
    • Не возвращают значения, вместо этого результат выбора пользователя будет передан в процедуру модуля, описанную объектом ОписаниеОповещения.

    Также были добавлены возможности работы с управляемыми формами в асинхронной модели. Однако, для них не создавалось новых методов, а были доработаны уже имеющиеся средства:

    • Добавлено свойство формы ОписаниеОповещенияОЗакрытии , которое указывает на процедуру модуля, которая будет вызвана при ее закрытии. Также это значение можно установить при помощи нового параметра метода ОткрытьФорму() ,
    • Добавлен вариант режима открытия окна формы - БлокироватьВеcьИнтерфейс , при использовании которого открываемая форма заблокирует все окна, а не только окно родителя.

    Дополнительно реализован новый метод глобального контекста ВыполнитьОбработкуОповещения(), который позволяет вручную осуществить вызов процедуры-обработчика. Это позволяет реализовать общую процедуру, выполняющую опрос пользователя, которая вызывается из разных мест.

    Особенности реализации асинхронной бизнес-логики

    Следует отметить, что поначалу асинхронная модель может показаться сложнее привычной синхронной. На самом деле, понимая основные различия этих моделей, разработка асинхронных приложений становится не многим труднее.

    Это подтверждается тем фактом, что все современные веб-приложения построены именно с использованием асинхронной модели и их количество постоянно растет.

    Типовые сценарии при переходе на асинхронную модель

    Вопрос пользователю в команде формы

    Наиболее частым сценарием является получение информации от пользователя во время исполнения какой-либо команды.
    Допустим, существует следующий код, написанный в рамках синхронной модели:

    В рамках асинхронной модели с использованием новых средств этот код будет выглядеть следующим образом:

    Процедура ДобавитьХарактеристику ( Команда )
    //Выберем вид характеристики
    Оповещение = Новый ОписаниеОповещения (
    "ДобавитьХарактеристикуЗавершение" ,
    ЭтотОбъект ) ;
    ОткрытьФорму ( "ПланВидовХарактеристик.ВидыХарактеристик.ФормаВыбора" ,
    , , , , , Оповещение , РежимОткрытияОкнаФормы . БлокироватьВеcьИнтерфейс ) ;
    КонецПроцедуры

    Процедура ДобавитьХарактеристикуЗавершение ( ВидХарактеристики , Параметры ) Экспорт
    Если ВидХарактеристики = Неопределено Тогда
    Возврат ;
    КонецЕсли ;

    //Проверим наличие
    Если ОписаниеХарактеристик . НайтиСтроки (
    Новый Структура ( "ВидХарактеристики" , ВидХарактеристики ) ) . Количество ( ) > 0 Тогда
    ПоказатьПредупреждение ( , НСтр ( "ru = 'Характеристика уже существует!'" , "ru" ) ) ;
    Возврат ;
    КонецЕсли ;


    //Добавим вид характеристики на форму
    ДобавитьХарактеристикуНаСервере ( ВидХарактеристики ) ;
    КонецПроцедуры

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

    Вопрос пользователю при закрытии формы

    Более сложной является ситуация, когда нужно о чем-то спросить пользователя во время обработчика события, например события закрытия формы. В асинхронной модели мы не можем сразу получить результат выбора, чтобы указать дальнейшие действия системе при помощи значения параметра Отказ .

    В таких случаях доступен следующий алгоритм:

    1. Создать в форме переменную, которая будет хранить ответ пользователя при ее закрытии,
    2. Если ответа получено еще не было (переменная содержит Неопределено ), то в обработчике ПередЗакрытием нужно показать окно выбора пользователю, например, при помощи метода ПоказатьВопрос() и прервать закрытие формы, установив Отказ=Истина ,
    3. В процедуре-обработчике выбора следует установить переменной результат выбора и вызвать метод Закрыть() формы,
    4. Если переменная содержит какое-либо значение, то это значит, что идет процесс закрытия, инициированный на предыдущем шаге, результат выбора от пользователя уже получен и обработчик ПередЗакрытием может использовать его значение.

    Ниже приведен пример кода, реализующего этот алгоритм:

    Вопрос пользователю во вложенных процедурах

    Теперь рассмотрим случай, когда выбор пользователя осуществляется в некоторой общей процедуре, вызываемой из разных мест другими процедурами. Получается, что в асинхронной модели такая процедура не может сразу вернуть результат, а должна как-то уведомлять вызывающие ее процедуры о том, что результат получен и можно продолжать работу.

    Предположим, существует общая функция, которая возвращает текст, в зависимости от ответа пользователя:

    В асинхронной модели эту функцию и ее вызовы следует реализовывать следующим образом:

    Таким образом, вызовы процедур можно связывать в цепочки, передавая им результат при помощи метода ВыполнитьОбработкуОповещения().

    Заключение

    В статье были рассмотрены новые средства, позволяющие реализовывать более качественные приложения с использованием асинхронной модели, принятой в среде Интернет.

    Несмотря на наличие таких средств, видно, что большое количество диалогов может усложнять программный код. К тому же, в веб-приложениях диалоги выбора используются гораздо реже, чем в настольных, поскольку снижают общее удобство использования.

    В этой статье я рассмотрю основные моменты работы с текстовым файлом в 1С 8.3. в режиме отключенной модальности.

    Для написания статьи я создал форму обработки, на которой разместил реквизит «РеквизитСтрока» с типом Строка, а так же две команды: ЗагрузитьТекстовыйФайл и СохранитьТекстовыйФайл. Реквизит и команды я поместил на форму, у поля, которое связанно с реквизитом, выбрал тип «Поле текстового документа».


    В пользовательском приложении должна получиться такая форма:


    Для команд были созданы клиентские обработчики:

    Для работы с текстовыми документами в 1С: Предприятии есть специальный объект ТекстовыйДокумент, который вызывается при помощи конструктора Новый. Решим следующую задачу: будем при выполнении команды СохранитьТекстовыйДокумент сохранять текст из реквизита «РеквизитСтрока» в определенный файл, а при выполнении команды ЗагрузитьТекстовыйДокумент будем загружать текст из определенного файла.

    При сохранении, код в обработчике команды будет следующий


    В этом коде мы создаем объект ТекстовыйДокумент (строка //1), и при помощи метода этого объекта УстановитьТекст помещаем в данный объект текст из реквизита «РеквизитСтрока» (строка //2).

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

    Первый параметр — ОписаниеОповещения содержит имя процедуры, которая вызывается после записи. Можно не указывать, что мы и делаем в строк //3.

    ИмяФайла – полное имя файла.
    Смысл остальных параметром можете узнать в справочной информации.


    Отмечу только, что разделитель я указал, как Символы.ВК + Символы.ПС, потому что такой набор символов используется по умолчанию при загрузке текстового файла.


    Посмотрим, как работает наша команда


    Теперь напишем загрузку текстового файла.

    В этом случае, код будет немного сложнее, чем при записи. Мы используем метод НачатьЧтение объекта текстовый документ (строка //4), но в этот раз передаем в него описание оповещения (создали в строке //3), где указываем процедуру ПослеЧтенияФайла, а в описание оповещения передаем в процедуру ПослеЧтенияФайла параметр, в котором указали созданный текстовый документ (строка //2). И уже в процедуре ПослеЧтенияФайла реквизиту РеквизитСтрока присваиваем текст, который содержится в текстовом документе, при помощи метода текстового документа ПолучитьТекст.

    Почему мы извлекаем текст именно в процедуре оповещения ПослеЧтенияФайла? Потому что она вызывается именно тогда, когда завершено чтение файла. Если Вы попытаетесь прочитать текст, после строки //4, то ни чего не получится. Это одна из особенностей работы асинхронных методов 1С 8.3.

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

    В этом случае мы вызываем диалог выбора файла с режимом сохранения, заполняем нужные параметры этого объекта, и в конце используем метод Показать. В качестве единственного параметра этого метода нужно указать обработчик оповещения, который мы создали строкой ранее, с процедурой, которая выполнится после сохранения файла (после нажатия на кнопку «Сохранить» диалога). А вот уже в обработчике оповещения ПослеСохраненияФайла мы создаем текстовый документ, устанавливаем в него текст из реквизита и записываем в файл, путь которого указан в массиве – параметре процедуры ВыбранныеФайлы. В первом параметре процедуры обработки оповещения содержится массив полных путей к выбранным файлам (в случае множественного выбора). Если Вы посмотрите на переменную ВыбранныеФайлы в отладке, то увидите путь к этому массиву.


    Посмотрим, как работает наш код.



    Теперь выполним обратную задачу: будем загружать текст из файла в реквизит на форме. Переделаем обработчик команды ЗагрузитьТекстовыйФайл.

    В этом случае, в обработчике ЗагрузитьТекстовыйФайл мы так же используем объект ДиалогВыбораФайл, который создаем в режиме Открытия, заполняем параметры этого диалога и используем метод Показать, где в качестве параметра используется описание оповещения, с процедурой, которая выполнится после выбора файла (после нажатия на кнопку «Открыть» диалога). А в процедуре ПослеЗагрузкиФайла, которая указана в оповещение, мы загружаем в текстовый файл по пути, который указан в массиве — параметре процедуры ВыбранныеФайл. В этом случае алгоритм действий точно такой же, как и в том случае, когда мы путь к файлу указывали жестко.

    Посмотрим, как работает наша загрузка файла



    Изучите программирование в 1С с помощью моей книги «Программировать в 1С за 11 шагов»

    1. Без сложных технических терминов.
    2. Более 700 страниц практического материала.
    3. Каждое задание сопровождается рисунком (скриншот).
    4. Сборник задач для домашней проработки.
    5. Книга написана понятным и простым языком — для новичка.
    6. Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!


    Эта книга подойдёт тем, кто уже начал программировать и испытывает определенные сложности с этой темой и тем, кто уже давно программирует, но ни разу еще не работал с управляемыми формами 1С

    1. Без сложных технических терминов;
    2. Более 600 страниц практического материала;
    3. Каждый пример сопровождается рисунком (скриншот);
    4. Книга посылается на электронную почту в формате PDF. Можно открыть на любом устройстве!

    Промо-код на скидку в 15% — 48PVXHeYu


    Если Вам помог этот урок решить какую-нибудь проблему, понравился или оказался полезен, то Вы можете поддержать мой проект, перечислив любую сумму:

    можно оплатить вручную:

    Яндекс.Деньги — 410012882996301
    Web Money — R955262494655

    Вступайте в мои группы:

    One thought on “ Работа с текстовыми файлами в 1С 8.3 (немодальные вызовы) ”

    Нужно было установить у реквизита формы РеквизитСтрока тип ТекстовыйДокумент. Это позволило бы обойтись без преобразований, т.е. вместо
    ТекстДок = Новый ТекстовыйДокумент;
    ТекстДок.УстановитьТекст(РеквизитСтрока);
    ТекстДок.НачатьЗапись(,ВыбранныеФайлы[0],
    КодировкаТекста.ANSI,
    Символы.ВК + Символы.ПС);

    Было бы просто
    РеквизитСтрока.НачатьЗапись(,ВыбранныеФайлы[0],
    КодировкаТекста.ANSI,
    Символы.ВК + Символы.ПС);

    Читайте также: