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

29.06.21

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

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

Скачать файлы

Наименование Файл Версия Размер
СохранениеЧтениеНастроекФайл
.epf 10,30Kb
47
.epf 1.0 10,30Kb 47 Скачать

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

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

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

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

Ведь цикл

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

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

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

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

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

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

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

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

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

 

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

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

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

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

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

 

 

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

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


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

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

 

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

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

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


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

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

 

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

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

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

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

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


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

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

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

См. также

SALE! 15%

[ED3] Обмен для ERP 2.5, КА 2.5, УТ 11.5 БП 3.0, Розница, УНФ и других с EnterpriseData (универсальный формат обмена), правила обмена

Обмен между базами 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. Не требуется синхронного обновления правил после обновления другой конфигурации, участвующей в обмене. Типовой обмен через планы обмена кнопкой Синхронизация вручную или автоматически по расписанию, или вручную обработкой.

25080 22572 руб.

12.06.2017    134937    723    291    

388

SALE! 20%

Перенос данных из ERP 2 / КА 2 / УТ 11 в БП 3.0. Переносятся документы, начальные остатки и справочники

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

Перенос данных из ERP в БП 3 | из КА 2 в БП 3 | из УТ 11 в БП 3 | из ЕРП в БП 3 | В продаже с 2019г. | Воспользовались более 176 предприятий! | Сэкономьте время - используйте готовое решение для перехода! | Перенос разработан в формате КД 2 (правила конвертации данных) | Переносятся все возможные виды документов, начальных остатков и нормативно-справочная информация| Можно опционально выгружать каждую пару "номенклатура+характеристика" как отдельную номенклатуру | Есть выгрузка настроек счетов учета и зарплатных данных из ERP / КА 2 | Можно проверить на вашем сервере перед покупкой, обращайтесь!

34650 27720 руб.

15.04.2019    68418    178    138    

111

SALE! 20%

Перенос данных из ERP 2 / КА 2 в ЗУП 3. Переносятся остатки, документы и справочники

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

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

43450 34760 руб.

03.12.2020    34169    80    58    

78

SALE! 10%

Перенос данных из УТ 10.3 в УТ 11.5. Переносятся документы (обороты за период), справочная информация и остатки

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

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

28000 25200 руб.

23.07.2020    46300    196    64    

158

Перенос данных из Парус 10 в ЗГУ ред.3

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

Обработка позволяет перенести кадровую информацию и данные по заработной плате, фактических удержаниях, НДФЛ, вычетах, страховых взносах из базы Парус 10 учреждений в конфигурацию 1С:Зарплата и кадры государственного учреждения ред. 3 (ЗГУ) и начать с ней работать с любого месяца года.

60000 руб.

05.10.2022    9208    9    8    

10

SALE! 10%

Перенос данных из УПП 1.3 в БП 3.0. Переносятся документы (обороты за период), справочная информация и остатки

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

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

28000 25200 руб.

15.12.2021    20251    132    38    

90

SALE! 10%

Перенос данных из БП 3.0 в УНФ 3.0 / УНФ 1.6. Переносятся остатки, документы и справочная информация

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

В продаже с 2018г. | Воспользовались более 41 предприятия! | Правила конвертации (КД 2) для переноса данных из БП 3 в УНФ | Переносятся все виды документов, начальные остатки и вся возможная справочная информация | Есть фильтр по организациям | Оперативно обновляем на новые релизы | Оказываем техподдержку | В комплект файлов входит инструкция, авторская версия обработки "Универсальный обмен...", актуальные правила переноса данных и архив старых версий переноса | Учет в БП 3 должен быть корректным, некорректные данные не переносятся | Можно бесплатно проверить на вашем сервере до покупки!

50722 45650 руб.

10.07.2018    67445    41    122    

46

Загрузка номенклатуры c картинками (несколько потоков одновременно) и сопутствующими данными в базу и любые документы из yml, xls, xlsx, xlsm, ods, ots, csv для УТ 10.3, УТ 11 (все), БП 3, КА 2, ERP 2, УНФ 1.6/3.0, Розница 2

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

Эволюция не стоит на месте - новая удобная версия функциональной обработки для Вашего бизнеса! Что же Вы получаете? Удобный и интуитивно понятный интерфейс с 3-мя этапами работы. 2 режима - автоматический и ручной. Чтение XLSX, XLSM, CSV, XML/YML форматов без офиса, на любом сервере! Визуальное связывание колонок файла и реквизитов простым перетаскиванием колонок. Создание или обновление номенклатуры с иерархией, характеристик, доп. реквизитов, упаковок, загрузка практически неограниченного количества картинок на одну номенклатуру (с возможностью загрузки в несколько потоков одновременно), с хранением в томах или в базе. Загрузка номенклатуры поставщиков или поиск по их данным номенклатуры. Загрузка доп. реквизитов в характеристики. Загрузка штрихкодов с генерацией новых. Создание элементов справочников и ПВХ "на лету" для выбранных реквизитов. (Обновление от 11.12.2023, версия 9.5 - 9.9)

13200 руб.

20.11.2015    150722    367    375    

501
Вознаграждение за ответ
Показать полностью
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
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 1775 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 1775 29.06.18 15:00 Сейчас в теме
(8) Принято. Но статью можно и обновить ;)
10. strelvan 70 18.05.21 09:36 Сейчас в теме
Спасибо, идея хорошая. Но может кому пригодится В этой строке: Для Каждого Реквизит Из ЭтаФорма.ПолучитьРеквизиты("Объект") Цикл .... Лучше использовать так: Для Каждого Реквизит Из ЭтотОбъект.ПолучитьРеквизиты() Цикл
Ivan_777777; +1 Ответить
Оставьте свое сообщение