Решение задачи 5.2 из Сборника задач для подготовки к экзамену 1С:Специалист по платформе

21.11.21

Разработка - Подготовка к аттестации

Применены методы помещения файлов, рекомендуемые начиная с платформы 8.3.15. Реализовано на 8.3.17.1496.

Скачать исходный код

Наименование Файл Версия Размер
Задача5_2
.cf 127,34Kb
32
.cf 127,34Kb 32 Скачать бесплатно

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

Актуальная версия "каркасной конфигурации" доступна для скачивания со страницы с примерами https://1c.ru/spec/questions.htm. Судя по имени файла, предназначена она для платформы 8.3.17.1496.

Описание решения:

1. Добавлена подсистема УправляемыеФормы; добавлена константа ПутьКТомуНаСервере; изменено имя справочника ФизическиеЛица на Сотрудники (как по условию); в справочник добавлены реквизиты ИмяФайлаИсходное, ИмяФайлаВТоме - Строка(0), Фотография - ХранилищеЗначения; добавлена ФормаЭлемента.
По условию требуется обеспечить два варианта хранения в базе и в файле: реквизит Фотография для хранения в базе, комбинация константы ПутьКТомуНаСервере и реквизита ИмяФайлаВТоме для хранения в файле.

 

 

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

 

 

Чтобы в элементе АдресФотографии было изображение в свойствах установлено Вид = Поле картинки, для срабатывания нажатия Гиперссылка = Истина, чтобы не растягивалось на всю форму РастягиватьПоГоризотнали, РастягиватьПоВертикали = Ложь.

3. Добавлен обработчик нажатия на кнопку ЗагрузитьФотографию(), и обработчик нажатия на поле картинки АдресФотографииНажатие(). Код при интерактивной загрузке фотографии:

&НаКлиенте
Процедура ПослеЗакрытияВопроса(Результат, ДополнительныеПараметры) Экспорт

	Модифицированность = Истина;
	Объект.ИмяФайлаИсходное = ДополнительныеПараметры.СсылкаНаФайл.Имя;
	АдресФотографии = ДополнительныеПараметры.Адрес;
	
	Если Результат = КодВозвратаДиалога.Да Тогда
		ТипХраненияФайла = "ВБазе";
	Иначе
		ТипХраненияФайла = "ВТоме";
	КонецЕсли;

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

&НаКлиенте
Процедура ЗавершениеПомещенияФайла(ОписаниеПомещенногоФайла, ДополнительныеПараметры) Экспорт

	Если ОписаниеПомещенногоФайла <> Неопределено Тогда
		Оповещение = Новый ОписаниеОповещения("ПослеЗакрытияВопроса", ЭтотОбъект, ОписаниеПомещенногоФайла);
		ПоказатьВопрос(Оповещение, НСтр("ru = 'Хранить фотографию в базе?'"), РежимДиалогаВопрос.ДаНет, 0);
	КонецЕсли;

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

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

&НаКлиенте
Процедура АдресФотографииНажатие(Элемент, СтандартнаяОбработка)
	СтандартнаяОбработка = Ложь;
	ВыборФайлаДляЗагрузки();
КонецПроцедуры

&НаКлиенте
Процедура ЗагрузитьФотографию(Команда)
	ВыборФайлаДляЗагрузки();
КонецПроцедуры

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

Выбор файла и уточнение "желания пользователя". В зависимости от ответа пользователя устанавливается ТипХраненияФайла, который будет использован "при записи самого элемента справочника" (см. код).

 

 

4. Добавлен обработчик ПередЗаписьюНаСервере(). Запись загруженного файла фотографии в реквизит справочника или в файл в зависимости от ТипХраненияФайла. Работать будет как в файловом, так и в клиент-серверном варианте.

&НаСервере
Функция ПолучитьПутьКТомуНаСервере()

	ПутьКТомуНаСервере = Константы.ПутьКТомуНаСервере.Получить();
	
	мсКаталог = НайтиФайлы(ПутьКТомуНаСервере);
	Если Не (мсКаталог.Количество() = 1 И мсКаталог[0].ЭтоКаталог()) Тогда
		ПутьКТомуНаСервере = КаталогВременныхФайлов();
		
		// в случае ЗаписатьИЗакрыть сообщение не будет видно, можно сделать вывод в родительской форме, но это сосем далеко за рамками задачи
		Сообщение = Новый СообщениеПользователю;
		Сообщение.Текст = "Не найден каталог для хранения фотографий - 'Путь к тому на сервере', будет использован каталог временных файлов.";
		Сообщение.Сообщить();
	КонецЕсли;
	
	Разделитель = ПолучитьРазделительПути();
	Если Прав(ПутьКТомуНаСервере, 1) <> Разделитель Тогда
		ПутьКТомуНаСервере = ПутьКТомуНаСервере + Разделитель;
	КонецЕсли;
	
	Возврат ПутьКТомуНаСервере;

КонецФункции

&НаСервере
Функция ПоместитьФайлВТом()

	ПутьКТомуНаСервере = ПолучитьПутьКТомуНаСервере();
	ПутьКФайлуВТоме = ПутьКТомуНаСервере;
	Пока НайтиФайлы(ПутьКФайлуВТоме).Количество() > 0 Цикл // на случай если файл с таким именем уже есть
		ИмяФайлаВТоме = Строка(Новый УникальныйИдентификатор);
		ПутьКФайлуВТоме = ПутьКТомуНаСервере + ИмяФайлаВТоме;
	КонецЦикла;
	
	ДвоичныеДанные = ПолучитьИзВременногоХранилища(АдресФотографии);
	ДвоичныеДанные.Записать(ПутьКФайлуВТоме);
	
	Возврат ИмяФайлаВТоме;

КонецФункции

&НаСервере
Процедура ПередЗаписьюНаСервере(Отказ, ТекущийОбъект, ПараметрыЗаписи)

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

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

КаталогВременныхФайлов() используется для того, чтобы при проверке у экзаменатора не возникло ошибки, перед сдачей базы на проверку нужно будет очистить значение константы ПутьКТомуНаСервере.

5. Добавлен обработчик ПриСозданииНаСервере(). Реквизит ИмяФайлаВТоме выполняет дополнительную функцию указания того, где хранится фотография.

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

	Если Объект.ИмяФайлаВТоме = "" Тогда
		АдресФотографии = ПолучитьНавигационнуюСсылку(Объект.Ссылка, "Фотография");
	Иначе
		ПутьКФайлуВТоме = ПолучитьПутьКТомуНаСервере() + Объект.ИмяФайлаВТоме;
		Если НайтиФайлы(ПутьКФайлуВТоме).Количество() > 0 Тогда
			АдресФотографии = ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные(ПутьКФайлуВТоме), УникальныйИдентификатор);
		Иначе
			Сообщение = Новый СообщениеПользователю;
			Сообщение.Текст = "Не удалось найти файл фотографии в томе.";
			Сообщение.Сообщить();
		КонецЕсли;
	КонецЕсли;

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

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

Ограничение ответственности.

Материалы этой публикации предоставляются "как есть". Вы можете пользоваться ими, вносить изменения.

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

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

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

Решение задачи 1С:Специалист платформа 8.3

См. также

Запросы 1С OnLine. Интерактивная обучающая программа.

Подготовка к аттестации Платформа 1С v8.3 Конфигурации 1cv8 Платные (руб)

Интерактивное изучение языка запросов с самого начала: - 50 практических заданий с различным уровнем сложности; - Методические материалы по практике написания запросов; - Описание назначения таблиц и индексов 1С Предприятие 8; - Методика решения реальных задач запросом 1С; - Автоматическая система проверки решений с указанием ошибок; - Инструкции по решению задач с разъяснениями; - Техническая поддержка пользователей. Подходит для начинающих и действующих разработчиков 1С

1800 руб.

11.02.2014    74044    678    13    

166

Оптимизация запросов 1С - от теории к практике

Подготовка к аттестации Запросы Конфигурации 1cv8 Платные (руб)

Желаете повысить свой уровень разработки? Не знаете, как оптимизировать работу тяжелых запросов 1С? Или знаете методы оптимизации, но на практике не получаете результат? Тогда эта интерактивная обучающая программа для Вас! Оптимизация запросов прямо в программе 1С:Предприятие 8. Несколько десятков практических заданий, рассматривающих методы оптимизации на практике. От Вас требуются реальные решения - оптимизация представленных запросов. Автоматизированная система оценит Ваш запрос и представит результат проверки.

1800 руб.

06.07.2015    70956    118    9    

128

Экзамен "1С:Специалист-консультант" по внедрению подсистем управленческого учета в 1С:ERP. Полные и правильные решения билетов

Подготовка к аттестации Платформа 1С v8.3 1С:ERP Управление предприятием 2 Россия Абонемент ($m)

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

10 стартмани

08.04.2024    824    7    user1988637    0    

8

Программист 1С: как начать с нуля с минимальными затратами

Подготовка к аттестации Платформа 1С v8.3 Россия Бесплатно (free)

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

18.03.2024    2085    AlOkt    4    

6

Как я готовилась к экзамену на Специалиста по платформе 1С

Подготовка к аттестации Платформа 1С v8.3 Россия Бесплатно (free)

Готовилась три месяца, сдала с первого раза. Делюсь опытом, лайфхаками и ресурсами, по которым учила материал.

14.03.2024    10838    PROSTO-1C    46    

82

Как я стал Экспертом по технологическим вопросам за 3 месяца. Часть 2 (обновлена)

Подготовка к аттестации Бесплатно (free)

Мой опыт подготовки и сдачи к экзамену 1С: Эксперт по технологическим вопросам. Часть 2.

04.02.2024    6033    shuhratsj    16    

74

Как я стал Экспертом по технологическим вопросам за 3 месяца

Подготовка к аттестации Бесплатно (free)

Мой опыт подготовки и сдачи к экзамену 1С: Эксперт по технологическим вопросам за 3 месяца. Часть 1.

29.01.2024    13653    shuhratsj    102    

154

1С: Специалист-консультант ЗУП 8. Решения из сборника задач для подготовки к экзамену «1С:Специалист-консультант» по внедрению прикладного решения „1С:Зарплата и управление персоналом 8“, редакция сентябрь 2023. Часть 6

Подготовка к аттестации Зарплата Кадровый учет Платформа 1С v8.3 Сложные периодические расчеты 1С:Зарплата и Управление Персоналом 3.x Россия Бухгалтерский учет Абонемент ($m)

Часть шестая. Делюсь сквозным решением 15-ти задач из сборника задач для подготовки к экзамену «1С:Специалист-консультант» по внедрению прикладного решения „1С:Зарплата и управление персоналом 8“, редакция сентябрь 2023.

5 стартмани

01.12.2023    1469    18    Ocherkcons    0    

6
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. ivanov660 4344 21.11.21 18:10 Сейчас в теме
Хоть условие задачи приведите.
+
2. mcgoblin 3 21.11.21 18:48 Сейчас в теме
(1)Нельзя, 1С ругаться будет
+
3. ivanov660 4344 21.11.21 18:52 Сейчас в теме
(2) А вы своими словами, если точь в точь нельзя. (Делаем форму ввода сотрудников с контролем заполнения обязательных реквизитов)
+
4. mcgoblin 3 21.11.21 18:55 Сейчас в теме
(3)псс, автор статьи не я))) Номер задачи есть, сборник если есть в наличии, то можно посмотреть
+
5. MaGn 36 21.11.21 21:33 Сейчас в теме
6. MaGn 36 21.11.21 21:34 Сейчас в теме
(1)предполагаю, что поможет yandex.ru/search/?text=задача+5.2+1с+специалист
ivanov660; +1
Внимание! Тема сдана в архив