Ошибка при вызове метода контекста начатьпомещениефайла

Помещение нескольких файлов с клиента на сервер
   travelekb

12.11.19 — 07:36

Доброго дня.

Прошу помощи по следующему вопросу, сижу туплю уже два дня.

Как можно организовать передачу с клиента на сервер НЕСКОЛЬКИХ файлов через временное хранилище. Не модально. Платформа 8.3

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

Дано: В ТЧ (ФотоТовара) имеются строки с именами файлов на компьютере клиента, их несколько.

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

Попытка решения:

&НаКлиенте

Процедура ПомещаемФайлы ()

Для каждого Строка Из ФотоТовара

ОписаниеОповещения = Новый ОписаниеОповещения(«ПередатьФайлыНаСерверЗавершение», ЭтаФорма);

НачатьПомещениеФайла(ОписаниеОповещения,,Строка.ИмяФайла, Ложь, УникальныйИдентификатор);

КонецПроцедуры

&НаКлиенте

Процедура ВыбратьИПередатьФайлыНаСерверЗавершение(Результат, Адрес, ВыбранноеИмяФайла, ДополнительныеПараметры) Экспорт

    Сообщить(Адрес);

    //ЗавершитьНаСервере();

КонецПроцедуры

ругается:

{Документ.ПоступлениеТоваров.Форма.ФормаДокумента.Форма(27)}: Ошибка при вызове метода контекста (НачатьПомещениеФайла)

        НачатьПомещениеФайла(ОписаниеОповещения,,Строка.ИмяФайла, Ложь, УникальныйИдентификатор);

по причине:

Помещение файла невозможно, повторите попытку позднее.

Понимаю что проблема как-то связана с асинхронностью, но никак не могу разобраться.

Заранее благодарен за помощь.

   travelekb

1 — 12.11.19 — 07:38

* немного ошибся при перепечатке.

Пробую делать вот так:

&НаКлиенте

Процедура ПомещаемФайлы ()

Для каждого Строка Из ФотоТовара

ОписаниеОповещения = Новый ОписаниеОповещения(«ПередатьФайлыНаСерверЗавершение», ЭтаФорма);

НачатьПомещениеФайла(ОписаниеОповещения,,Строка.ИмяФайла, Ложь, УникальныйИдентификатор);

КонецЦикла;

КонецПроцедуры

&НаКлиенте

Процедура ПередатьФайлыНаСерверЗавершение(Результат, Адрес, ВыбранноеИмяФайла, ДополнительныеПараметры) Экспорт

    Сообщить(Адрес);

    //ЗавершитьНаСервере();

КонецПроцедуры

  

travelekb

5 — 12.11.19 — 08:10

(3) если-палки, ну точно же, как же я пропустил его…

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

(4) это я второпях писал пример для теста. Исправлю. Еще раз спасибо, второй день читаю описание этого метода и не вижу в СП строчку ниже с методом НачатьПомещениеФайлов, ну надо же как

Здравствуйте, обновили платформу на 8.3.15 и бухгалтерию на 3.0.75.93.
После этого перестал работать метод НачатьПомещениеФайла в форме обработки УниверсальныйОбменДаннымиXML.
Причем при таком вызове он отрабатывает

&НаКлиенте
Процедура ВыполнитьЗагрузкуИзФормы()

АдресФайла = "";
ИмяФайлаДляРасширения = "";

ДобавитьСтрокуКСпискуВыбора(Элементы.ИмяФайлаОбмена.СписокВыбора, ИмяФайлаОбмена, ЗагрузкаДанныхИхФайла);

Если ЭтоКлиент Тогда

ОписаниеОповещения = Новый ОписаниеОповещения("ВыполнитьЗагрузкуИзФормыЗавершение", ЭтотОбъект);
НачатьПомещениеФайла(ОписаниеОповещения, АдресФайла, , , УникальныйИдентификатор);

Иначе

Если ПустоеЗначениеРеквизита(ИмяФайлаОбмена, "ИмяФайлаОбмена", Элементы.ИмяФайлаОбмена.Заголовок) Тогда
Возврат;
КонецЕсли;

ВыполнитьЗагрузкуИзФормыЗавершение(Истина, АдресФайла, ИмяФайлаДляРасширения, Неопределено);

КонецЕсли;

КонецПроцедуры

А при таком выходит ошибка. «Перемещение файла невозможно, повторите попытку позднее.»


&НаКлиенте
Процедура ВыполнитьЗагрузкуИзФормы()

АдресФайла = "";
ИмяФайлаДляРасширения = "";

ДобавитьСтрокуКСпискуВыбора(Элементы.ИмяФайлаОбмена.СписокВыбора, ИмяФайлаОбмена, ЗагрузкаДанныхИхФайла);

Если ЭтоКлиент Тогда

Режим = РежимДиалогаВыбораФайла.ВыборКаталога;
    ДиалогВыбораКаталога = Новый ДиалогВыбораФайла(Режим) ;
    ДиалогВыбораКаталога.Заголовок = "Выберите каталог";
    Если НЕ ДиалогВыбораКаталога.Выбрать() Тогда
        Сообщить("Каталог НЕ ВЫБРАН", СтатусСообщения.Внимание);
Возврат;
    Иначе   
        КаталогЗагрузки = ДиалогВыбораКаталога.Каталог;
КонецЕсли;

ОписаниеОповещения = Новый ОписаниеОповещения("ВыполнитьЗагрузкуИзФормыЗавершение", ЭтотОбъект);

НайденныеФайлы = НайтиФайлы(КаталогЗагрузки, "*.xml", Ложь);
Для Каждого Эл Из НайденныеФайлы Цикл
ИмяФайлаОбмена = Эл.ПолноеИмя;
НачатьПомещениеФайла(ОписаниеОповещения, АдресФайла, ИмяФайлаОбмена, Ложь, УникальныйИдентификатор); 
КонецЦикла;

Иначе

Если ПустоеЗначениеРеквизита(ИмяФайлаОбмена, "ИмяФайлаОбмена", Элементы.ИмяФайлаОбмена.Заголовок) Тогда
Возврат;
КонецЕсли;

ВыполнитьЗагрузкуИзФормыЗавершение(Истина, АдресФайла, ИмяФайлаДляРасширения, Неопределено);

КонецЕсли;

КонецПроцедуры

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

О чем эта статья

Это финальная статья нашего цикла статей “Первые шаги в программировании на 1С”.

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

Применимость

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

Отказ от использования модальных окон в платформе 1С:Предприятие 8.3

При разработке конфигурации на платформе 1С:Предприятие 8 периодически возникает потребность приостановить работу программы до того момента, когда пользователь примет какое-либо решение или выполнит какие-либо действия.

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

Такое поведение может обеспечить, например, следующий код:

&НаКлиенте
Процедура ЗаполнитьТовары(Команда)
Ответ = Вопрос(“Табличная часть будет очищена. Продолжить?”, РежимДиалогаВопрос.ДаНет);
Если Ответ = КодВозвратаДиалога.Да Тогда
//алгоритм заполнения
КонецЕсли;
КонецПроцедуры

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

Также к приостановке выполнения кода и блокировке интерфейса приводит открытие модальных окон при помощи вызова метода ОткрытьМодально().

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

1C - Диалоговое окно веб-страницы

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

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

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

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

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

1С - Блокирующее окно

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

У корневого элемента конфигурации существует свойство “Режим использования модальности”, которое определяет, можно ли в конфигурации открывать модальные окна.

Режим использования модальности

Если выбран вариант “Использовать”, то модальные окна можно открывать. Если выбран вариант “Не использовать”, то модальные окна недопустимы. При попытке вызвать метод, открывающий модальное окно, система выводит сообщение об ошибке:

Режим Не использовать модальные окна

При таком значении свойства “Режим использования модальности” допустимы только блокирующие окна.

Если выбран вариант “Использовать с предупреждениями”, то при открытии модальных окон в окно сообщений выводится текст:

Использование модальных окон с предупреждением

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

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

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

Код нужно разделить на две части:

  • открытие блокирующего окна;
  • обработка выбора пользователя.

Фрагмент кода, приведенный в начале статьи, нужно переписать следующим образом:

&НаКлиенте
Процедура ЗаполнитьТовары(Команда)
Оповещение = Новый ОписаниеОповещения(“ЗаполнитьТоварыВопросЗавершение”, ЭтотОбъект);
ТекстВопроса = “Табличная часть будет очищена. Продолжить?”;
ПоказатьВопрос(Оповещение, ТекстВопроса, РежимДиалогаВопрос.ДаНет);
КонецПроцедуры
&НаКлиенте
Процедура ЗаполнитьТоварыВопросЗавершение(Результат, ДополнительныеПараметры) Экспорт
Если Результат = КодВозвратаДиалога.Да Тогда
//алгоритм заполнения
КонецЕсли;
КонецПроцедуры

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

Пользователь сможет сделать выбор только после завершения работы всей процедуры. При этом будет вызвана экспортная процедура ЗаполнитьТоварыВопросЗавершение(). Ее название мы передали в конструктор объекта ОписаниеОповещения.

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

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

Рассмотрим вызов процедуры, расположенной в общем модуле. Для этого добавим новый общий модуль ОбработкаОповещений, установим для него флаг “Клиент (управляемое приложение)”, а признак “Глобальный” не устанавливаем. Расположим в этом модуле процедуру ЗаполнитьТоварыВопросЗавершение().

Тогда обработчик команды заполнения будет выглядеть так:

&НаКлиенте
Процедура ЗаполнитьТовары(Команда)
Оповещение = Новый ОписаниеОповещения(“ЗаполнитьТоварыВопросЗавершение”,
ОбработкаОповещений);
ТекстВопроса = “Табличная часть будет очищена. Продолжить?”;
ПоказатьВопрос(Оповещение, ТекстВопроса, РежимДиалогаВопрос.ДаНет);
КонецПроцедуры

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

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

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

На примере рассмотренного выше участка кода это можно сделать так:

&НаКлиенте
Процедура ЗаполнитьТовары(Команда)
Параметр1 = 0;
Параметр2 = 0;
СписокПараметров = Новый Структура(“Параметр1, Параметр2″, Параметр1, Параметр2);
Оповещение = Новый ОписаниеОповещения(“ЗаполнитьТоварыВопросЗавершение”, ЭтотОбъект,
СписокПараметров);
ПоказатьВопрос(Оповещение, “Табличная часть будет очищена. Продолжить?”,
РежимДиалогаВопрос.ДаНет);
КонецПроцедуры
&НаКлиенте
Процедура ЗаполнитьТоварыВопросЗавершение(Результат, ДополнительныеПараметры) Экспорт
Если Результат = КодВозвратаДиалога.Да Тогда
//анализируем ДополнительныеПараметры.Параметр1
//анализируем ДополнительныеПараметры.Параметр2
КонецЕсли;
КонецПроцедуры

Если нужно передать только одно значение, то структуру можно не использовать, а присвоить это значение параметру ДополнительныеПараметры конструктора объекта ОписаниеОповещения.

Рассмотрим несколько примеров работы с блокирующими окнами.

Задача 1. Открытие другой формы

Из формы документа по нажатию на кнопку “Открыть параметры” нужно открыть форму, на которой расположены два флажка Параметр1 и Параметр2, которые должен установить пользователь. После закрытия формы вывести в строку сообщений значения параметров.

Создаем общую форму “ФормаПараметров”, на которой размещаем реквизиты Параметр1 и Параметр2, а также команду ЗакрытьФорму:

Форма параметров

Обработчик команды выглядит следующим образом:

Обработчик команды выглядит следующим образом:

&НаКлиенте
Процедура ЗакрытьФорму(Команда)
СписокПараметров = Новый Структура(“Параметр1, Параметр2”, Параметр1, Параметр2);
Закрыть(СписокПараметров);

КонецПроцедуры

Для формы свойство РежимОткрытияОкна устанавливаем в “Блокировать весь интерфейс”:

Свойства формы

На форме документа располагаем команду ОткрытьПараметры, обработчик которой описываем следующим образом:

&НаКлиенте
Процедура ОткрытьПараметры(Команда)
Оповещение = Новый ОписаниеОповещения(“ОткрытьПараметрыЗавершение”, ЭтотОбъект);
ОткрытьФорму(“ОбщаяФорма.ФормаПараметров”, , , , , , Оповещение);
КонецПроцедуры
&НаКлиенте
Процедура ОткрытьПараметрыЗавершение(Результат, ДополнительныеПараметры) Экспорт
Если ТипЗнч(Результат) = Тип(“Структура”) Тогда
Для каждого КлючЗначение Из Результат Цикл
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = “Ключ: “”” + КлючЗначение.Ключ + “””, значение =
+
КлючЗначение.Значение;
Сообщение.Сообщить();
КонецЦикла;
КонецЕсли;
КонецПроцедуры

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

Форма параметров в пользовательском режиме

Для увеличения нажмите на изображение.

Сообщения в пользовательском режиме

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

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

Задача 2. Вопрос при закрытии формы

При закрытии окна обработки задавать пользователю вопрос, действительно ли он хочет закрыть окно.

Эту задачу можно решить при помощи следующего кода, расположенного в модуле формы обработки:

&НаКлиенте
Перем НужноЗакрыватьФорму;
&НаКлиенте
Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка)
Если НЕ НужноЗакрыватьФорму = Истина Тогда
Отказ = Истина;
Оповещение = Новый ОписаниеОповещения(“ПередЗакрытиемЗавершение”, ЭтотОбъект);
ПоказатьВопрос(Оповещение, “Вы действительно хотите закрыть окно?”,
РежимДиалогаВопрос.ДаНет
);
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура ПередЗакрытиемЗавершение(Результат, ДополнительныеПараметры) Экспорт
Если Результат = КодВозвратаДиалога.Да Тогда
НужноЗакрыватьФорму = Истина;
Закрыть();
Иначе
НужноЗакрыватьФорму = Неопределено;
КонецЕсли;
КонецПроцедуры

В процедуре ПередЗакрытием формы пользователю задается вопрос, флаг Отказ выставляется в Истина, закрытие формы отменяется.

После утвердительного ответа на вопрос переменная НужноЗакрыватьФорму устанавливается в Истина, форма закрывается повторно.

Задача 3. Ввод числового значения

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

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

&НаКлиенте
Процедура ВводЧисла(Команда)
Оповещение = Новый ОписаниеОповещения(“ВводЧислаЗавершение”, ЭтотОбъект);
ПоказатьВводЧисла(Оповещение, 0, “Введите количество”, 15, 3);
КонецПроцедуры
&НаКлиенте
Процедура ВводЧислаЗавершение(Результат, ДополнительныеПараметры) Экспорт
Если НЕ Результат = Неопределено Тогда
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = “Вы ввели количество + Результат;
Сообщение.Сообщить();
КонецЕсли;
КонецПроцедуры

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

Задача 4. Выбор цвета

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

Добавим на форму команду ВыборЦвета со следующим обработчиком:

&НаКлиенте
Процедура ВыборЦвета(Команда)
ДиалогВыбораЦвета = Новый ДиалогВыбораЦвета;
Оповещение = Новый ОписаниеОповещения(“ВыборЦветаЗавершение”, ЭтотОбъект);
ДиалогВыбораЦвета.Показать(Оповещение);
КонецПроцедуры
&НаКлиенте
Процедура ВыборЦветаЗавершение(Результат, ДополнительныеПараметры) Экспорт
Если НЕ Результат = Неопределено Тогда
Элементы.ВыборЦвета.ЦветФона = Результат;
КонецЕсли;
КонецПроцедуры

Выбор цвета в 1С

Выбор фона нажимаемой кнопки в 1С

Для объектов ДиалогВыбораЦвета (а также ДиалогРедактированияСтандартногоПериода, КонструкторФорматнойСтроки, ДиалогРасписанияРегламентногоЗадания, ДиалогВыбораШрифта) метод Показать() открывает блокирующее окно.

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

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

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

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

В заключение отметим, что начиная с релиза 8.3.10 в веб-клиенте прекращена поддержка модальных окон. В этом случае, если в конфигурации происходит вызов модального метода, то происходит генерация исключения. Также в в веб-клиенте прекращена поддержка режима интерфейса В отдельных окнах. Кроме того, и в тонком, и в веб-клиенте теперь нельзя открывать форму в отдельном окне (при работе в режиме интерфейса В Закладках). Такие кардинальные шаги позволили отказаться от режима интерфейса, который уже не поддерживается всеми современными браузерами.

Какой практический вывод можно сделать из этой информации? А вывод довольно простой – если по какой-то причине в вашей конфигурации до сих пор существуют модальные вызовы, то в этих местах в в веб-клиенте будет выдаваться окно с сообщением об ошибке. Хочется предостеречь от попыток “нагуглить” какое-то быстрое решение данной проблемы, т.к. основная масса советов сводится к такому рецепту: в конфигураторе на уровне конфигурации в свойстве «Режим использования модальности» поставить значение «Использовать». Естественно, в данный момент, это работать не будет только из-за того, что сами современные браузеры уже не поддерживают модальные вызовы.

И у вас есть всего два пути, каким образом решить описанную выше проблему:

  1. Обновить платформу до релиза 8.3.10+ (8.3.11), установить свойство конфигурации «Режим совместимости» в «Не использовать» и переписать фрагменты кода, использующие модальные методы на асинхронную модель построения бизнес-логики
  2. Рекомендовать вашим клиентам пользоваться устаревшими браузерами, где модальные вызовы еще поддерживались (Mozilla Firefox версии 37 и ниже, Chrоme ниже 37 версии и т.д.).

Кстати, начиная с релиза 8.3.11, больше не поддерживаются веб-браузеры Microsoft Internet Explorer версий 8 и 9.

С веб-браузерами в свете модальности мы разобрались, теперь настала пора прояснить ситуацию и с остальными клиентами.

Начиная с версии 8.3.5 свойство «Режим использования модальности» в тонком и толстом клиентах учитывается, только если указан параметр командной строки /EnableCheckModal. Этот параметр автоматически подставляется в командную строку только при запуске приложения из конфигуратора. Если же этот параметр не указан, то генерация исключений не происходит и соответствующие предупреждения не показываются. Т.е. на практике в случае использования толстого и тонкого клиента никакого кардинального изменения в работе при использовании режима модальности не наблюдается – модальные вызовы будут работать так же, как и работали ранее, при этом не выдавая никаких предупреждений, как в веб-клиенте.

Чтобы расставить все точки над “i”, заметим, что начиная с редакции 8.3.9 в толстом клиенте игнорируется свойство конфигурации «Режим использования синхронных вызовов расширений платформы и внешних компонент», при этом соответствующие синхронные методы работают без генерации исключений и вывода предупреждений. Указанное игнорируемое свойство было добавлено в редакции 8.3.5 с целью поддержки асинхронной работы с внешними компонентами, криптографией и расширениями для работы с файлами в веб-браузере Google Chrome. Понятно, что к толстому клиенту это никакого отношения не имеет, и поэтому “тихое” игнорирование данного свойства просто исключило лишние проверки использования синхронных методов при использовании конфигурации.

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

Коллеги, существуют две вещи которые можно читать бесконечно: ленту вконтакте и список изменений в очередном релизе платформе, поэтому, давайте подводить окончательные итоги ;)

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

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

Вместо заключения

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

На специализированных интернет-ресурсах часто можно прочесть просьбы от начинающих программистов и их более зрелых коллег посоветовать им материалы, которые помогли бы им разобраться в обширных и порой кажущихся бесконечными, возможностях платформы 1С. Мы, по традиции, рекомендуем обратить ваше внимание на наши курсы по программированию. Это сотни часов видео по самым актуальным темам от признанных гуру-разработки ;)

А как же «не переключайтесь»? Естественно! У нас еще тонны интересного и полезного материала по разработке, оптимизации и еще многому чему. Так что, изучайте, применяйте и да прибудет с вами сила ;)

PDF-версия статьи для участников группы ВКонтакте

Мы ведем группу ВКонтакте – http://vk.com/kursypo1c.

Если Вы еще не вступили в группу – сделайте это сейчас и в блоке ниже (на этой странице) появятся ссылка на скачивание материалов.

Статья по программированию - в PDF-формате

Ссылка доступна для зарегистрированных пользователей)
Ссылка доступна для зарегистрированных пользователей)
Ссылка доступна для зарегистрированных пользователей)

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

Ошибки, возникающие у меня иногда

Платформа: 1С:Предприятие 8.3 (8.3.15.1778)
Конфигурация: ADD/BDD, ver. 6.6.5 (6.6.5)
Режим: Файловый (без сжатия)
Приложение: Тонкий клиент

Ошибки:
--------------------------------------------------------------------------------
5/13/2020 6:37:38 PM
Помещение файла невозможно, повторите попытку позднее.
{(1)}:НачатьПомещениеФайла(ОписаниеОповещенияОЗавершении, АдресХранения, ПомещаемыйФайл, Интерактивно, ВладелецФормы.УникальныйИдентификатор)
{ВнешняяОбработка.xddTestRunner.Форма.МодульАсинк.Форма(721)}:				Выполнить("НачатьПомещениеФайла(ОписаниеОповещенияОЗавершении, АдресХранения, ПомещаемыйФайл, Интерактивно, ВладелецФормы.УникальныйИдентификатор)");
{ВнешняяОбработка.xddTestRunner.Форма.УправляемаяФорма.Форма(1793)}:		АСинк().смв_ПоместитьФайл(Оповещение, АдресХранилища, ФайлОбработки.ПолноеИмя, Ложь);
{ВнешняяОбработка.ЗагрузчикФайла.Форма.Форма.Форма(576)}:		КонтекстЯдра.ПодключитьВнешнююОбработку(ФайлОбработки);
{ВнешняяОбработка.ЗагрузчикФайла.Форма.Форма.Форма(157)}:	ПодключитьВнешнююОбработку(КонтекстЯдра, ФайлОбработки);
{ВнешняяОбработка.ЗагрузчикФайла.Форма.Форма.Форма(143)}:		Контекст = ПолучитьКлиентскийКонтекст(КонтекстЯдра, Путь);
{ВнешняяОбработка.ЗагрузчикКаталога.Форма.Форма.Форма(151)}:	Контекст = ЗагрузчикФайла.ПолучитьКонтекстПоПути(КонтекстЯдра, Путь);
{ВнешняяОбработка.xddTestRunner.Форма.УправляемаяФорма.Форма(757)}:	КонтекстВыполнения = Загрузчик.ПолучитьКонтекстПоПути(ЭтаФорма, Путь);
{ВнешняяОбработка.xddTestRunner.Форма.УправляемаяФорма.Форма(657)}:		КонтекстВыполненияДляКонтейнера = ПолучитьКонтекстВыполненияПоПути(Загрузчик, ПутьИзКонтейнера);
{ВнешняяОбработка.xddTestRunner.Форма.УправляемаяФорма.Форма(669)}:			ДочернийРезультатТестирования = ВыполнитьТесты(Загрузчик, ДочернийУзел, ФильтрДляДочернихУзлов, Подписчик, Родитель, ПараметрыПотоковыхОтчетов);
{ВнешняяОбработка.xddTestRunner.Форма.УправляемаяФорма.Форма(669)}:			ДочернийРезультатТестирования = ВыполнитьТесты(Загрузчик, ДочернийУзел, ФильтрДляДочернихУзлов, Подписчик, Родитель, ПараметрыПотоковыхОтчетов);
{ВнешняяОбработка.xddTestRunner.Форма.УправляемаяФорма.Форма(669)}:			ДочернийРезультатТестирования = ВыполнитьТесты(Загрузчик, ДочернийУзел, ФильтрДляДочернихУзлов, Подписчик, Родитель, ПараметрыПотоковыхОтчетов);
{ВнешняяОбработка.xddTestRunner.Форма.УправляемаяФорма.Форма(141)}:		РезультатыТестирования = ВыполнитьТесты(Плагин(ИдентификаторЗагрузчика), ЭтаФорма.ДеревоОтЗагрузчика, Фильтр, ЭтаФорма);
{ВнешняяОбработка.xddTestRunner.Форма.УправляемаяФорма.Форма(160)}:		ВыполнитьТестыНаКлиенте(Фильтр);

по причине:
Помещение файла невозможно, повторите попытку позднее.

Заметки из Зазеркалья

Данная статья является анонсом новой функциональности.
Не рекомендуется использовать содержание данной статьи для освоения новой функциональности.
Полное описание новой функциональности будет приведено в документации к соответствующей версии.
Полный список изменений в новой версии приводится в файле v8Update.htm.

Реализовано в версии 8.3.13.1513.

Мы расширяем возможности работы с файлами в веб-клиенте. Мы реализовали перетаскивание файлов «извне» и увеличили возможности, доступные без установки специального расширения работы с файлами.

Метод НачатьПомещениеФайлов() больше не требует расширения работы с файлами

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

Теперь мы «научили» метод НачатьПомещениеФайлов() работать и без расширения. При этом он использует новый «собственный» диалог выбора файлов, который позволяет выбирать сразу несколько файлов. Если расширение работы с файлами установлено, тогда используется диалог выбора файлов операционной системы.

Новый диалог выбора файлов

Мы значительно изменили диалог выбора файлов в веб-клиенте.

Начатьпомещениефайла несоответствие типов параметр номер 3

Теперь он позволяет выбирать несколько файлов перетаскиванием.

Начатьпомещениефайла несоответствие типов параметр номер 3

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

Начатьпомещениефайла несоответствие типов параметр номер 3

Настройка диалога выбора файла

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

Контроль характеристик загружаемых файлов

Теперь, прежде чем загружать файлы на сервер, вы можете проверить их характеристики, например, размер. Если размер превышает допустимые значения, вы можете отменить загрузку.

Перетаскивание файлов на картинку и на таблицу

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

Начатьпомещениефайла несоответствие типов параметр номер 3

Открытие файлов перетаскиванием

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

Начатьпомещениефайла несоответствие типов параметр номер 3

Файлы будут открываться в рабочей области веб-клиента.

Источник

Универсальный обмен данными XML (2.1.8) с отбором в управляемых формах для 1С: Предприятие 8.3

Данная обработка предназначена для переноса данных из конфигурации на платформе 1С8 в другую конфигурацию на платформе 1С8, по правилам обмена. Для конфигураций, которые используют управляемые формы.
Сделана на базе типовой обработки Универсальный обмен данными XML (2.1.8).
Добавлена возможность отбора объектов при выгрузке.

Правила рабочие, в стандартном обмене (без отбора) работают без ошибок

(2)На типовом ЗУПе тоже самое, без отбора выгружается, с отбором ошибка. Собственно и в списке фильтров тоже далеко не все ресурсы доступны(в моем случае «должность» там нет

Ошибка:
Несоответствие типов (параметр номер ‘3’)
<ВнешняяОбработка.УниверсальныйОбменДаннымиXML.Форма.УправляемаяФорма.Форма(676)>: НачатьПомещениеФайла(ОписаниеОповещения, АдресФайлаПравилВХранилище,Нстр(«ru = ‘Файл правил обмена’»),, УникальныйИдентификатор);

по причине:
Несоответствие типов (параметр номер ‘3’)

Ошибка при попытке прочитать файл правил на клиенте

Несоответствие типов (параметр номер ‘3’)
<ВнешняяОбработка.УниверсальныйОбменДаннымиXML.Форма.УправляемаяФорма.Форма(676)>: НачатьПомещениеФайла(ОписаниеОповещения, АдресФайлаПравилВХранилище,Нстр(«ru = ‘Файл правил обмена’»),, УникальныйИдентификатор);

по причине:
Несоответствие типов (параметр номер ‘3’)

1С:Предприятие 8.3 (8.3.18.1208)
Бухгалтерия предприятия, редакция 3.0 (3.0.89.43)

(10) В режиме «На сервере» файл не найден, потому что файл ищется на сервере, а Вы файл подставляете с клиента.

Чтобы обработка «читала» на клиенте, замените строку с ошибкой на

НачатьПомещениеФайла(ОписаниеОповещения, АдресФайлаВоВременномХранилище,ИмяФайлаЗагрузки,Ложь, УникальныйИдентификатор);

только перед загрузкой укажите имя файла (поставить переключатель на «Из файла на сервере», указать файл, затем переключиться на «С клиентского компьютера» и нажать «Загрузить данные».

Источник

НачатьПомещениеФайла()

Глобальный контекст.НачатьПомещениеФайла (Global context.BeginPutFile)
Глобальный контекст (Global context)
НачатьПомещениеФайла (BeginPutFile)
Синтаксис:

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

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

Тип: УникальныйИдентификатор.
Уникальный идентификатор формы, который можно получить с помощью свойства УникальныйИдентификатор управляемой формы. Файл помещается во временное хранилище и автоматически удаляется после удаления объекта формы.
Если параметр не указан, то помещенное значение будет удалено после очередного запроса сервера из общего модуля, при контекстном и неконтекстном серверном вызове из формы, при серверном вызове из модуля команды или при получении формы.
Возвращаемое значение:

Помещает файл из локальной файловой системы во временное хранилище.

Тонкий клиент, веб-клиент, толстый клиент.
Примечание:

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

Источник

Несоответствие типов в 1С 8.3

Ошибка Несоответствие типов в 1С 8.3 связана с передачей параметров в командах и запросах 1С.

Несоответствие типов в 1С 8.3

Как правило, параметры в командах 1С идут в определенной очередности и ссылаются на данные конкретного типа. Ошибка в указании параметра не на том месте или не того типа приводит к появлению сообщения о несоответствии типов:

Начатьпомещениефайла несоответствие типов параметр номер 3

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

Получите понятные самоучители 2021 по 1С бесплатно:

Рассмотрим причины ее возникновения и исправление на конкретном примере.

Ошибка в таблице запроса

При чтении цен номенклатуры по регистру сведений Цены номенклатуры из внешнего отчета появляется ошибка Неоднозначное поле «ТипЦен.Номенклатура».

Начатьпомещениефайла несоответствие типов параметр номер 3

В окне сообщений уже указано место возникновения ошибки: Параметр номер «1» в строке Регистр сведений.ЦеныНоменклатуры.СрезПоследних(&&ТипЦен,) КАК ЦеныНоменклатурыСрезПоследних.

Для исправления ошибки необходимо открыть отчет в Конфигураторе 1С и найти в модуле формы указанную строчку.

Начатьпомещениефайла несоответствие типов параметр номер 3

Правильность написания команды проверьте по выделенной кнопке Синтаксис-Помощник в меню 1С:

Начатьпомещениефайла несоответствие типов параметр номер 3 Начатьпомещениефайла несоответствие типов параметр номер 3

Из описания видно, что команда СрезПоследних имеет 2 параметра:

Если параметр Период не указывается, место в команде остается пустым, а через запятую указывается параметр отбора, в нашем случае: ТипЦен. Исправленная команда выглядит следующим образом: СрезПоследних(, ТипЦен = &ТипЦен ).

Начатьпомещениефайла несоответствие типов параметр номер 3

После исправления команды запустите отчет в 1С по кнопке Главное меню — Файл — Открыть :

Начатьпомещениефайла несоответствие типов параметр номер 3

Теперь отчет формируется правильно!

Начатьпомещениефайла несоответствие типов параметр номер 3

Исправление ошибки в команде 1С

При поиске ссылок на контрагента в отчете 1С появляется ошибка Несоответствие типов (параметр номер 2) :

Начатьпомещениефайла несоответствие типов параметр номер 3

Начатьпомещениефайла несоответствие типов параметр номер 3

Правильность написания команды проверьте по выделенной кнопке Синтаксис-Помощник в меню 1С:

Начатьпомещениефайла несоответствие типов параметр номер 3Начатьпомещениефайла несоответствие типов параметр номер 3

Из описания идно, что команда НайтиПоСсылкам имеет 4 параметра:

Начатьпомещениефайла несоответствие типов параметр номер 3

После исправления команды запустите внешний отчет в 1С по кнопке Главное меню — Файл — Открыть :

Начатьпомещениефайла несоответствие типов параметр номер 3

Теперь команда поиска ссылок на контрагента отрабатывает правильно.

Начатьпомещениефайла несоответствие типов параметр номер 3

См. также:

Если Вы еще не подписаны:

После оформления подписки вам станут доступны все материалы Бухэксперт8, записи поддерживающих эфиров и вы сможете задавать любые вопросы по программе 1С.

Получите еще секретный бонус и полный доступ к справочной системе БухЭксперт8 на 14 дней бесплатно

Карточка публикации

Добавить комментарий Отменить ответ

Для отправки комментария вам необходимо авторизоваться.

Вы можете задать еще вопросов

Доступ к форме «Задать вопрос» возможен только при оформлении полной подписки на БухЭксперт8

Нажимая кнопку «Задать вопрос», я соглашаюсь с
регламентом БухЭксперт8.ру >>

Еще раз большое спасибо за сайт. Для тех, кто работает с 1С вы НЕЗАМЕНИМЫЕ помощники по всем вопросам, начиная с Законодательства и заканчивая техническими вопросами по 1С!

Источник

Вроде не пятница 13. Ошибка СКД

Коллеги привожу ошибку исполнения СКД, ниже код запроса. По факту параметра ПЗ нигде нет(

Ошибка при исполнении запроса набора данных
по причине:
<(40, 4)>: Ошибка обработки представления «РегистрСведений.ОсновныеСпецификацииНоменклатуры.СрезПоследних:Несоответствие типов (Параметр номер «»1″»)»
>РегистрСведений.ОсновныеСпецификацииНоменклатуры.СрезПоследних(&П3, ) КАК ОсновныеСпецификацииНоменклатурыСрезПоследних

В общем други давайте думать вместе. После того как создал новый отчет и вставил в него работающий запрос с вынесением в структуру данных полей всё заработало. Но. в СКД упорно появляется параметр «Период» и тянется он из регистра сведений

РегистрСведений.ОсновныеСпецификацииНоменклатуры.СрезПоследних. И начинается следующее..вешаю на «Период» стандартный период и параметры НачалоПериода и КонецПериода, после этого начинает появляться вышеописанная ошибка. В параметрах СКД создаю параметр «ПериодОтчета» делаю стандартным периодом и соответственно привязываю НачалоПериода и КонецПериода. Но возникает одно большое НО. Регистр сведений никак не хочет видить параметр КонецПериода который у него указан в виртуальной таблице и запрашивает свой. Если указываю стандартный период равный месяцу, а параметр «Период» = КонецПериода то всё работает. Но спрашивается зачем мне его указывать явно((. В чем трабла?

в параметрах СКД у параметра в выражение написал «&ПериодОтчета.ДатаОкончания» и поставил ограничение на параметр.

Но не понятно почему всё же не видит параметр из виртуальной таблицы

Источник

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

Исправляем ситуацию

Чтобы избавиться от этого неприятного сообщения об ошибке при вызове метода контекста, следует понимать, что контекстом называют методы платформы 1С. Значит в определенной строке кода воспользовались методом с неверными параметрами или вызвали его не от того владельца. Всегда внимательно и полностью читайте сообщения об ошибках – часто в них содержится указание на строку и метод, вызвавший ошибку. Это поможет сэкономить время на отладку и поиск проблемного места в коде.

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


	 Запрос = Новый Запрос;
	 Запрос.Текст =
	         "ВЫБРАТЬ
	          |        Номенклатура.Ссылка КАК Ссылка,
	          |        Номенклатура.ВерсияДанных КАК ВерсияДанных,
	          |        Номенклатура.ПометкаУдаления КАК ПометкаУдаления,
	          |        Номенклатура.Родитель КАК Родитель,
	          |        Номенклатура.ЭтоГруппа КАК ЭтоГруппа,
	          |        Номенклатура.Код КАК Код,
	          |        Номенклатура.Наименование КАК Наименование,
	          |        Номенклатура.Артикул КАК Артикул,
	          |        Номенклатура.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
	          |        Номенклатура.ТипНоменклатуры КАК ТипНоменклатуры,
	          |        Номенклатура.Предопределенный КАК Предопределенный,
	          |        Номенклатура.ИмяПредопределенныхДанных КАК ИмяПредопределенныхДанных
	          |ИЗ
	          |        Справочник.Номенклатура КАК Номенклатура
	          |ГДЕ
	          |         ";
	 РезультатЗапроса = Запрос.Выполнить();
	 ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
	 Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
	 КонецЦикла;
Рис.1 Запускаем на исполнение нижеприведенный кусок кода с запросом, в котором забыли дописать условие отбора
Рис.1 Запускаем на исполнение нижеприведенный кусок кода с запросом, в котором забыли дописать условие отбора

Приведенный текст ошибки программисту 1С скажет, что в модуле формы обработки «ЧтениеЗаписьXML на 152 строчке кода не может выполниться запрос. Причина в том, что на 17 строчке запроса нет чего-то, что ждал компилятор. Таким образом, чтобы убрать подобное сообщение, необходимо выяснить, что там должно быть и написать недостающий код.

Увидев вышеприведенный кусок кода, разработчик заметит, что в запросе есть служебное слово «ГДЕ», дающее сигнал 1С, что дальше будет условие. Но мы забыли дописать его и, естественно, система с помощью сообщения об ошибке спрашивает нас – «а где условие?». Чтобы исправить эту ситуацию необходимо либо убрать оператор «ГДЕ» из запроса, либо добавить условие.

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


	 Запрос = Новый Запрос;
	            Запрос.Текст =
	                       "ВЫБРАТЬ
	                        |          Номенклатура.Ссылка КАК Ссылка,
	                        |          Номенклатура.ВерсияДанных КАК ВерсияДанных,
	                        |          Номенклатура.ПометкаУдаления КАК ПометкаУдаления,
	                        |          Номенклатура.Родитель КАК Родитель,
	                        |          Номенклатура.ЭтоГруппа КАК ЭтоГруппа,
	                        |          Номенклатура.Код КАК Код,
	                        |          Номенклатура.Наименование КАК Наименование,
	                        |          Номенклатура.Артикул КАК Артикул,
	                        |          Номенклатура.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
	                        |          Номенклатура.ТипНоменклатуры КАК ТипНоменклатуры,
	                        |          Номенклатура.Предопределенный КАК Предопределенный,
	                        |          Номенклатура.ИмяПредопределенныхДанных КАК ИмяПредопределенныхДанных
	                        |ИЗ
	                        |          Справочник.Номенклатура КАК Номенклатура
	                        |ГДЕ
	                        |          НЕ Номенклатура.ЭтоГруппа ";
	 НужнаяГруппаЭлементов = Справочники.Номенклатура.НайтиПоНаименованию("Мебель");
	 РезультатЗапроса = Запрос.Выполнить();
	 ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
	 Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
	 Сообщить(ВыборкаДетальныеЗаписи.Ссылка.ПринадлежитЭлементу("НужнаяГруппаЭлементов"));
	 КонецЦикла;
Рис.2 Мы опять допускаем ошибку и вместо ссылки в параметр метода помещаем строку, содержащую имя переменной
Рис.2 Мы опять допускаем ошибку и вместо ссылки в параметр метода помещаем строку, содержащую имя переменной

1С выдает настолько же информативное сообщение, из которого мы понимаем, что на 158 строке у 1 параметра неправильный тип. Но что же делать, если мы не знаем, какой тип должен быть? В этом нам поможет Синтакс-помощник, встроенный в платформу 1С.

Рис.3 Синтакс-помощник
Рис.3 Синтакс-помощник

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

Рис.4 Сверив пример с нашим кодом, приходит понимание, что кавычки не нужны и без них все работает
Рис.4 Сверив пример с нашим кодом, приходит понимание, что кавычки не нужны и без них все работает

Чаще всего причиной подобных ошибок выступают следующие факторы:

  1. Невнимательность;
  2. Отсутствие опыта или знаний;
  3. Несогласованность действий разработчиков друг с другом;
  4. Изменения в методах контекста в новых версиях платформы.

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

1С 8.3 ПоместитьФайл(): Использование модальных окон в данном режиме запрещено

Возникает после установки свойства конфигурации «Режим использования модальности» в «Не использовать«. Рекомендуется перейти к асинхронному методу НачатьПомещениеФайла()

Порядок решения

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

В моем случае был код:

&НаКлиенте
Функция ПередатьНаСервер(ПутьКФайлу)
	Перем АдресХранилища;
	
	ПоместитьФайл(АдресХранилища, ПутьКФайлу, ПутьКФайлу, Ложь, УникальныйИдентификатор);
	Возврат АдресХранилища;
КонецФункции

Стало:

&НаКлиенте
Процедура ПередатьНаСервер(ПутьКФайлу)
	Перем АдресХранилища;
	Оп = Новый ОписаниеОповещения("ВыполнитьПосле", ЭтотОбъект,мШиринаКолонокПоУмолчанию);
	НачатьПомещениеФайла(Оп,АдресХранилища, ПутьКФайлу,Ложь,УникальныйИдентификатор);
КонецПроцедуры 

Процедура ВыполнитьПосле(Выбрано, АдресХранилища, Результат, мШиринаКолонокПоУмолчанию)
      ВызовПолучитьДерево(АдресХранилища, мШиринаКолонокПоУмолчанию); 
КонецПроцедуры

Полный список проблемных методов

Модальный метод Немодальный метод
Глобальный контекст
Вопрос ПоказатьВопрос
Предупреждение ПоказатьПредупреждение
ОткрытьЗначение ПоказатьЗначение
ВвестиДату ПоказатьВводДаты
ВвестиЗначение ПоказатьВводЗначения
ВвестиСтроку ПоказатьВводСтроки
ВвестиЧисло ПоказатьВводЧисла
УстановитьВнешнююКомпоненту НачатьУстановкуВнешнейКомпоненты
УстановитьРасширениеРаботыСФайлами НачатьУстановкуРасширенияРаботыСФайлами
УстановитьРасширениеРаботыСКриптографией НачатьУстановкуРасширенияРаботыСКриптографией
ПоместитьФайл НачатьПомещениеФайла
ОткрытьФормуМодально ОткрытьФорму
ДиалогРедактированияСтандартногоПериода
Редактировать Показать
КонструкторФорматнойСтроки
ОткрытьМодально Показать
ДиалогРасписанияРегламентногоЗадания
ОткрытьМодально Показать
ДиалогВыбораШрифта
Выбрать Показать
ДиалогВыбораЦвета
Выбрать Показать
ОбработкаРасшифровкиКомпоновкиДанных
ВыбратьДействие ПоказатьВыборДействия
СписокЗначений
ОтметитьЭлементы ПоказатьОтметкуЭлементов
ВыбратьЭлемент ПоказатьВыборЭлемента
УправляемаяФорма
ВыбратьИзМеню ПоказатьВыборИзМеню
ВыбратьИзСписка ПоказатьВыборИзСписка
ОткрытьМодально Открыть

Изобилие товаров устраняет дефицит, широкой рекламой устраняется психическая неустойчивость.

Понравилась статья? Поделить с друзьями:
  • Ошибка предоставления общего доступа к папке
  • Ошибка при вызове метода контекста начатьзапись
  • Ошибка при воспроизведении wink на приставке
  • Ошибка преднатяжителя ремня безопасности
  • Ошибка при вызове метода контекста найтистроки