Сохранение (чтение) настроек внешней обработки в файл (управляемые формы)

29.06.21

Интеграция - Файловый обмен (TXT, XML, DBF), FTP

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

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
СохранениеЧтениеНастроекФайл
.epf 10,30Kb ver:1.0
47
47 Скачать (1 SM) Купить за 1 850 руб.

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

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

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

Пробуем сначала сохранить значения всех реквизитов формы в файл. Поиски в интернете приводят нас к процедуре ЗначениеВФайл и функции ЗначениеВСтрокуВнутр, приём последней пользоваться как бы не рекомендуется, якобы она предназначена для обмена с 7.7. Обе конструкции языка доступны только на сервере и толстом клиенте, поэтому возникает вопрос, как бы обойти значения всех реквизитов формы &НаСервере.

Ведь цикл

Для Каждого Реквизит Из Объект Цикл
КонецЦикла;

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

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

Для Каждого Реквизит Из ЭтаФорма.ПолучитьРеквизиты("Объект") Цикл
   ЗначениеРеквизита = Объект[Реквизит.Имя];
КонецЦикла;

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

В результате этого знания получаем:

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

// Выбор файла для сохранения настроек и вызов серверной процедуры сохранения файла
&НаКлиенте
Процедура ЭкспортНастроекВФайл(Команда)
	
	ДиалогСохраненияФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение);
	Фильтр = НСтр("ru = 'Файлы TXT'") + "(*.txt)|*.txt|";
	ДиалогСохраненияФайла.Фильтр = Фильтр;
	ДиалогСохраненияФайла.МножественныйВыбор = Ложь;

	Если ДиалогСохраненияФайла.Выбрать() Тогда
		ЭкспортНастроекВФайлНаСервере(ДиалогСохраненияФайла.ПолноеИмяФайла);
	КонецЕсли; 
	
КонецПроцедуры

 

Это даже работает, но радоваться рано - этот код неправильный! Мы допустили одну из самых распространенных ошибок при написании кода на управляемых формах. Выбрав имя файла на клиенте, а потом передав его на сервер, мы забыли, что при клиент-серверном режиме работы код, выполняемый на стороне сервера, будет запущен под другим пользователем. И далеко не факт, что этот пользователь будет иметь доступ туда (например, локальный диск терминальной сессии по RDP), куда мы сохраняем файл.

Поэтому переписываем код, сохраняем файл теперь на клиенте, правда придётся воспользоваться не очень рекомендуемой функцией ЗначениеВСтрокуВнутр:

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

// Выбор файла для сохранения настроек и сохранение файла используя данные полученные на сервере
&НаКлиенте
Процедура ЭкспортНастроекВФайл(Команда)
	
	ДиалогСохраненияФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение);
	Фильтр = НСтр("ru = 'Файлы TXT'") + "(*.txt)|*.txt|";
	ДиалогСохраненияФайла.Фильтр = Фильтр;
	ДиалогСохраненияФайла.МножественныйВыбор = Ложь;

	Если ДиалогСохраненияФайла.Выбрать() Тогда
		
		СтрокаНастроек = ЭкспортНастроекВСтрокуНаСервере();
		Если СтрокаНастроек <> "" Тогда
			Попытка
				ФайлНастроек = Новый ЗаписьТекста(ДиалогСохраненияФайла.ПолноеИмяФайла);
				ФайлНастроек.Записать(СтрокаНастроек);
				ФайлНастроек.Закрыть();
			Исключение
				Сообщить("Ошибка при сохранении настроек на клиенте: " + ОписаниеОшибки());
			КонецПопытки;
		КонецЕсли;
		
	КонецЕсли; 
	
КонецПроцедуры

 

 

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

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


// Выбор файла для загрузки настроек и вызов серверной процедуры загрузки файла
&НаКлиенте
Процедура ИмпортНастроекИзФайла(Команда)
	
	ДиалогСохраненияФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
	Фильтр = НСтр("ru = 'Файлы TXT'") + "(*.txt)|*.txt|";
	ДиалогСохраненияФайла.Фильтр = Фильтр;
	ДиалогСохраненияФайла.МножественныйВыбор = Ложь;

	Если ДиалогСохраненияФайла.Выбрать() Тогда
		ИмпортНастроекИзФайлаНаСервере(ДиалогСохраненияФайла.ПолноеИмяФайла);
	КонецЕсли; 
	
КонецПроцедуры

 

А напишем другой вариант, например, используя временное хранилище:

// Заполняет значения всех реквизитов формы из временого хранилища, адрес которого указан в АдресВременногоХранилища
Процедура ИмпортНастроекИзВременногоХранилищаНаСервере(АдресВременногоХранилища)
	
	Если НЕ ЭтоАдресВременногоХранилища(АдресВременногоХранилища) Тогда
		Возврат;
	КонецЕсли;
	
	ИмяВременногоФайлаНаСервере = ПолучитьИмяВременногоФайла();
	Попытка
		ПолучитьИзВременногоХранилища(АдресВременногоХранилища).Записать(ИмяВременногоФайлаНаСервере);
		Настройки = ЗначениеИзФайла(ИмяВременногоФайлаНаСервере);
		УдалитьФайлы(ИмяВременногоФайлаНаСервере);
	Исключение
		Сообщить("Ошибка при загрузке настроек на сервере: " + ОписаниеОшибки());
		УдалитьФайлы(ИмяВременногоФайлаНаСервере);
		Возврат;
	КонецПопытки;
  
	Для Каждого ЭлементНастройки Из Настройки Цикл
	  
		Попытка
			Если ТипЗнч(Объект[ЭлементНастройки.Ключ]) = Тип("ДанныеФормыКоллекция") Тогда
				Объект[ЭлементНастройки.Ключ].Загрузить(ЭлементНастройки.Значение);
				Продолжить;
			КонецЕсли;
	    	Объект[ЭлементНастройки.Ключ] = ЭлементНастройки.Значение;
		Исключение
			Сообщить("Ошибка при импорте настроек: " + ОписаниеОшибки());
		КонецПопытки;
	
  	КонецЦикла;                          
  
КонецПроцедуры

// При выборе файла вызов серверной процедуры загрузки файла из временного хранилища
&НаКлиенте
Процедура ОбработатьВыборФайлаИмпорта(Результат, Адрес, ВыбранноеИмяФайла, ДополнительныеПараметры) Экспорт
	
	Если НЕ Результат Тогда
		Возврат;
	КонецЕсли;
	
	ИмпортНастроекИзВременногоХранилищаНаСервере(Адрес);
	
КонецПроцедуры


// Выбор файла для загрузки настроек
&НаКлиенте
Процедура ИмпортНастроекИзФайла(Команда)
	
	ДиалогСохраненияФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
	Фильтр = НСтр("ru = 'Файлы TXT'") + "(*.txt)|*.txt|";
	ДиалогСохраненияФайла.Фильтр = Фильтр;
	ДиалогСохраненияФайла.МножественныйВыбор = Ложь;

	Если ДиалогСохраненияФайла.Выбрать() Тогда
		Оповещение = Новый ОписаниеОповещения("ОбработатьВыборФайлаИмпорта", ЭтаФорма);
		НачатьПомещениеФайла(Оповещение, , ДиалогСохраненияФайла.ПолноеИмяФайла, Ложь, УникальныйИдентификатор);
	КонецЕсли; 
	
КонецПроцедуры

 

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

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

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

// Выбор файла для загрузки настроек и вызов серверной процедуры загрузки
&НаКлиенте
Процедура ИмпортНастроекИзФайла(Команда)
	
	ДиалоЧтенияФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
	Фильтр = НСтр("ru = 'Файлы TXT'") + "(*.txt)|*.txt|";
	ДиалоЧтенияФайла.Фильтр = Фильтр;
	ДиалоЧтенияФайла.МножественныйВыбор = Ложь;

	Если ДиалоЧтенияФайла.Выбрать() Тогда
		
		Попытка
			ФайлНастроек = Новый ЧтениеТекста(ДиалоЧтенияФайла.ПолноеИмяФайла);
			СтрокаНастроек = ФайлНастроек.Прочитать();
			ФайлНастроек.Закрыть();
		Исключение
			Сообщить("Ошибка при чтении настроек на клиенте: " + ОписаниеОшибки());
			Возврат;	
		КонецПопытки;
			
		ИмпортНастроекИзСтрокиНаСервере(СтрокаНастроек);
		
	КонецЕсли; 
	
КонецПроцедуры 


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

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

Внешняя обработка сохранить настройки в файл чтение настроек из файла

См. также

SALE! 20%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист Платформа 1С v8.3 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Россия Платные (руб)

Правила в универсальном формате обмена для ERP 2.5, КА 2.5, УТ 11.5, БП 3.0, Розница, УНФ, для последних версий конфигураций. Ссылки на другие конфигурации в описании публикации. Правила совместимы со всеми другими версиями конфигураций новыми и старыми, поддерживающими обмен и синхронизацию в формате EnterpriseData. Не требуется синхронного обновления правил после обновления другой конфигурации, участвующей в обмене. Типовой обмен через планы обмена кнопкой Синхронизация вручную или автоматически по расписанию, или вручную обработкой.

26280 22338 руб.

12.06.2017    141454    798    297    

419

SALE! 10%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист Платформа 1С v8.3 1С:Управление производственным предприятием 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Управленческий учет Платные (руб)

Перенос данных из 1С:Управление производственным предприятием 1.3 в 1С:Бухгалтерия предприятия 3.0 с помощью правил обмена. Переносятся остатки, документы (обороты за период), справочная информация. Правила проверены на конфигурациях УПП 1.3 (1.3.234.x) и БП 3.0 (3.0.161.x). Правила подходят для версии ПРОФ и КОРП.

35000 31500 руб.

15.12.2021    23981    169    51    

127

SALE! 10%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист Платформа 1С v8.3 Оперативный учет 1С:Управление торговлей 10 Россия Управленческий учет Платные (руб)

Перенос данных из 1С:Управление торговлей 10.3 в 1С:Управление торговлей 11.5 с помощью правил обмена. Переносятся остатки, документы (обороты за период), справочная информация. Правила проверены на конфигурациях УТ 10.3 (10.3.88.x) и УТ 11.5 (11.5.19.x).

35000 31500 руб.

23.07.2020    51172    228    69    

184

SALE! 10%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Программист Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Комплексная автоматизация 2.х 1С:Зарплата и Управление Персоналом 3.x Россия Бухгалтерский учет Управленческий учет Платные (руб)

Перенос данных из ERP в ЗУП 3 | из КА 2 в ЗУП | Готовые правила конвертации данных (КД 2) для переноса остатков, документов с движениями и справочной информации 3 | Есть перенос начальной задолженности по зарплате и начальной штатной расстановки на выбранную дату | Обороты за прошлые годы (данные для расчета среднего) переносятся свернуто в документ "Перенос данных" | Есть фильтр по организациям | Документы за текущий период переносятся сразу с движениями, поэтому не потребуется делать перерасчеты | Перенос можно проверить перед покупкой, обращайтесь!

53111 47800 руб.

03.12.2020    36564    94    66    

89

SALE! 10%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист Платформа 1С v8.3 1С:Комплексная автоматизация 1.х 1С:Управление производственным предприятием 1С:Бухгалтерия 3.0 Россия Бухгалтерский учет Платные (руб)

Перенос данных из 1С:Управление производственным предприятием 1.3 в 1С:Бухгалтерия предприятия 3.0 с помощью правил обмена | Можно выполнить переход с УПП на БП 3 или запускать выгрузку данных за выбранный период времени | Переносятся документы, начальные остатки и вся справочная информация | Есть фильтр по организации и множество других параметров выгрузки | Поддерживается несколько сценариев работы: как первичный полный перенос, так и перенос только новых документов | Перенос данных возможен в "1С: Бухгалтерия 3.0" версии ПРОФ, КОРП или базовую | Переход с "1С: УПП1.3" / "1С:КА 1.1" на "1С:БП3.0" с помощью правил конвертации будет максимально комфортным! | Можно бесплатно проверить перенос на вашем сервере!

48278 43450 руб.

25.02.2015    171151    303    257    

378

SALE! 15%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист Платформа 1С v8.3 Платформа 1C v8.2 1С:Комплексная автоматизация 1.х 1С:Управление торговлей 10 1С:Управление производственным предприятием Россия Платные (руб)

Регулярный обмен, выгрузка, перенос из КА 1.1, УПП 1.3, УТ 10.3 для обмена с любыми конфигурациями, поддерживающими обмен в формате EnterpriseData (КД3) - БП 3.0, ERP, КА 2, УТ 11, Розница 2, УНФ 1.6 и другими. Правила для старых и доработанных конфигураций не требуют синхронного обновления и совместимы с новыми и будущими конфигурациями. Обмен по расписанию, через папку, FTP, почту.

15300 13005 руб.

18.02.2016    186850    589    509    

526

SALE! 10%

Перенос данных 1C Взаиморасчеты Оптовая торговля Логистика, склад и ТМЦ Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист Платформа 1С v8.3 1С:Управление торговлей 10 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Управленческий учет Платные (руб)

Можно проверить до покупки, оставьте заявку! Воспользовались более 268 компаний! Перенос данных из УТ 10.3 в УТ 11 | из УТ 10.3 в КА 2 | из УТ 10.3 в ERP. Предлагаем качественное и проверенное временем решение для перехода с УТ 10.3. Можно перенести начальные остатки, нормативно-справочную информацию и все возможные документы. При выгрузке можно установить отбор по периоду, организациям и складам. При выходе новых релизов конфигураций 1C оперативно выпускаем обновление переноса данных.

55778 50200 руб.

24.04.2015    194948    150    243    

280

SALE! 10%

Перенос данных 1C Файловый обмен (TXT, XML, DBF), FTP Системный администратор Программист Платформа 1С v8.3 1С:Комплексная автоматизация 1.х 1С:Управление торговлей 10 1С:Управление производственным предприятием 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Платные (руб)

Перенос данных из ERP в УПП 1.3 | из КА 2 в КА 1.1 | из КА 2 в УПП 1.3 | из КА 2 в УТ 10.3 | из ERP в КА 1.1 | из ERP в УТ 10.3 | из УТ 11 в УТ 10.3 | из УТ 11 в УПП 1.3 | из УТ 11 в КА 1.1 | Можно переносить только новые объекты, найденные в приемнике перезаписываться не будут | Есть фильтр по организации при выгрузке данных | Оперативно обновляем на новые релизы 1С

53111 47800 руб.

28.11.2015    83235    32    125    

64
Вознаграждение за ответ
Показать полностью
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. jobkostya1c_ERP 100 15.07.15 07:03 Сейчас в теме
Тема актуальная по сохранению и восстановлению настроек во временный для переноса собственных обработок. За приведенные шаблоны кода автору большой плюс - буду тестировать.
Вот даже столкнулся с интересной ситуацией: дорабатываешь типовой отчет для УТ 10.3 в дополнительной форме "настройки", куда выносятся собственные реквизиты-галочки или путь к сохранению в другие форматы (Excel, txt, xml...) и для удобства пользователя ставишь в обычной форме Сохранять значения и эти реквизиты в сохранение - нифига. Даже под полными правами пользователя. Главное и роли админские и все везде включено, а нужно шаманство в режиме предприятия для включения в группу админов.
Еще аналогичное тоже при всех админских "ролях и правах" что на УФ, что на обычных при вызове обработок из справочника внешних отчетов и обработок часть функционала не настраивается, кнопки "серые", а вызывать из главного меню не всегда удобно. Самый вроде бы оптимальный вариант сохранять и читать текстовый файл из каталога пользователя причем автоматически. Или тоже автоматически подстраиваться под чтение-запись в ХранилищеЗначения справочника.
По идее нужен универсальный кусок кода чтоб вставлять его даже в типовые внешние обработки и отчеты чтоб читал-записывал настройки и писал если что про ошибку и нужно уже в ручном режиме исправлять ситуацию (нет прав на запись в каталог пользователя и прочее). Или когда такой вариант не сработал чтоб были системные события СохранитьЗначение и ВосстановитьЗначение. Самое главное что даже в роли "ПолныеПрава" в конфигураторе стоит сохранение настроек пользователя. Может, где-то программно срабатывает обработчик в коде конфигурации, причем у каждой свой. У кого будут какие идеи по модификации предложенного автором решения. Делать диалог выбора файла и отсылать файл текста, можно, но не хотелось бы для массовых решений.
2. iodine 88 15.07.15 09:42 Сейчас в теме
(1) kostyaomsk, я считаю, что правильнее разобраться с правами, чем использовать сохранение и чтение настроек из файла. У меня нет под рукой УТ 10.3, поэтому не могу сказать как там правильно всё настроить, но в других достаточно легко. Например, в БП 3 достаточно добавить роль с правом "Сохранение данных пользователя" и назначить эту роль через профиль нужному пользователю.
jobkostya1c_ERP; +1 Ответить
3. pacas 9 26.10.15 12:25 Сейчас в теме
Спасибо! Помогла статья
4. aevdovin 7 23.02.16 15:29 Сейчас в теме
Большое спасибо!!!! Это очень полезная обработка!!! А главное - толковое объяснение проблемных моментов....ведь действительно при решении схожей задачи я прибегнул изначально к знаниям из спеца по платформе: ПриСохраненииДанныхВНастройкахНаСервере, ПриВыгрузке...... и т.д.. Затем немного работы с файлами, с хранилищами. Вроде уже не раз когда-то схожие задачи делал - и всегда натыкался на те же пороги - что и описано в статье. Очень рад, что нашелся специалист - который подробно описал возможные преграды при решении такой задачи, а в самой обработке показал пример выгрузки/загрузки настроек и данных реквизитов внеш.обработки. Спасибо!
5. xxx90 36 19.10.16 09:11 Сейчас в теме
Спасибо за объяснение и обработку(очень пригодилась)!
6. Alna 26.07.17 08:30 Сейчас в теме
Спасибо, пригодилась! Причем, действительно, много в сети, но как-то разрозненно, а здесь, спасибо автору за труд, - собрал в одном месте и не поленился прокомментировать.
7. ixijixi 1913 29.06.18 10:22 Сейчас в теме
Если внимательно посмотреть код, то легко заметить, что после получения данных из временного хранилища (с типом ДвоичныеДанные) мы вынуждены записать их во временный файл. Другого нормального способа получить данные с типом Строка из временного хранилища попросту нет.


Как это нет?

Глобальный контекст.ПолучитьСтрокуИзДвоичныхДанных (Global context.GetStringFromBinaryData)
Глобальный контекст (Global context)
ПолучитьСтрокуИзДвоичныхДанных (GetStringFromBinaryData)
Синтаксис:

ПолучитьСтрокуИзДвоичныхДанных(<ДвоичныеДанные>, <КодировкаТекста>) 
Параметры:

<ДвоичныеДанные> (обязательный)

Тип: ДвоичныеДанные. 
Двоичные данные, которые требуется преобразовать в строку. 
<КодировкаТекста> (необязательный)

Тип: КодировкаТекста; Строка. 
Кодировка текста может быть задана как в виде значения перечисления КодировкаТекста, так и в виде строки с указанием названия кодировки.
Значение по умолчанию: UTF8. 
Возвращаемое значение:

Тип: Строка. 

Описание:

Преобразует двоичные данные в строку с заданной кодировкой текста.

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

Тонкий клиент, веб-клиент, мобильный клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение(клиент), мобильное приложение(сервер). 
Показать
8. iodine 88 29.06.18 13:51 Сейчас в теме
(7)
ПолучитьСтрокуИзДвоичныхДанных


Вы на дату статьи посмотрите. В 8.3.11 появилась ПолучитьСтрокуИзДвоичныхДанных, до этого не было.
9. ixijixi 1913 29.06.18 15:00 Сейчас в теме
(8) Принято. Но статью можно и обновить ;)
10. strelvan 80 18.05.21 09:36 Сейчас в теме
Спасибо, идея хорошая. Но может кому пригодится В этой строке: Для Каждого Реквизит Из ЭтаФорма.ПолучитьРеквизиты("Объект") Цикл .... Лучше использовать так: Для Каждого Реквизит Из ЭтотОбъект.ПолучитьРеквизиты() Цикл
Ivan_777777; +1 Ответить
Оставьте свое сообщение