Фреймворк "Простые задачи" - разработка интерактивных инструментов загрузки и обработки табличных данных

27.01.25

Разработка - Инструментарий разработчика

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

Скачать файл

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

Наименование По подписке [?] Купить один файл
Фреймворк "Простые задачи" - разработка интерактивных инструментов загрузки и обработки табличных данных :
.epf 29,84Kb
8
8 Скачать (1 SM) Купить за 1 850 руб.

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

Задачи могут быть:

  • простыми — состоять из одного шага;
  • составными — состоять из нескольких шагов.

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

#Область Инициализация

&НаСервере
Процедура Инициализировать()
	
	ДобавитьЗадачуЗагрузкиДанных("Товары", "Загрузка товаров");
	
КонецПроцедуры

#КонецОбласти

Функция ДобавитьЗадачуЗагрузкиДанных принимает 2 параметра:

  1. ИмяЗадачи — обязательный параметр, будет использоваться в коде.
  2. Синоним задачи — необязательный параметр для представления названия задачи в списке задач. Если синоним не указан, система сформирует представление из имени задачи, заменив все "_" на пробелы.

Провило замены "_" на " " работает для синонимов задач, шагов, параметров, колонок и таблиц.

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

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

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

Функция ДобавитьЗадачуОбработкиДанных(ИмяЗадачи)

 

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

ОписаниеЗадачи = "Имя задачи, Синоним";
ОписаниеЭтапов = "
    |Имя этапа, Синоним, Название кнопки, Запрос + Процедура, Стоп сообщение";

ЗадачиИЭтапы_ДобавитьЗадачуСЭтапами(ОписаниеЗадачи, ОписаниеЭтапов);

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

#Область Товары

&НаСервере
Процедура Товары_ПриВыбореЗадачи()
…
КонецПроцедуры

&НаСервере
Функция Товары_ТекстЗапроса()
…
КонецФункции

&НаСервере
Процедура Товары()
…
КонецПроцедуры

#КонецОбласти

 

Процедура ИмяЗадачи_ПриВыбореЗадачи не является обязательной. Система будет пытаться ее вызвать, когда задача выбрана. Это может быть полезано для добавления параметров задачи. Например:

&НаСервере
Процедура Товары_ПриВыбореЗадачи()
	
	ТипыПараметра = Новый Массив;
	ТипыПараметра.Добавить(Тип("СправочникСсылка.Товары"));

	ОписаниеТиповПараметра = Новый ОписаниеТипов(ТипыПараметра);
	ДобавитьПараметрЗадачи("Группа", ОписаниеТиповПараметра, , , Истина);

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

Добавит параметр:

 

 

Мы использовали ДобавитьПараметрЗадачи для добавления параметра. Вот ее объявление:

&НаСервере
Процедура ДобавитьПараметрЗадачи(Имя, Тип, Заголовок = Неопределено, Невидимый = Ложь, ВыборГруппы = Ложь)

Для получения значения параметра, установленного пользователем, используйте функцию ПолучитьЗначениеПараметраПользователя:

ГруппаТоваров = ПолучитьЗначениеПараметраПользователя("Группа");

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

 

Обязательная функция ИмяЗадачи_ТекстЗапроса отвечает за формирование текста запроса. Данные табличного документа доступны через обращение к временной таблице ДанныеТабличногоДокумента. В общем случае запрос должен состоять из трех частей:

  1. Обращение к табличному документу
  2. Оработка данных (получение ссылок, расчеты)
  3. Описание выводимых таблиц

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

&НаСервере
Функция Товары_ТекстЗапроса()
	
	Результат = "";
	
	//ОписаниеКолонок = "
	//		|	ИмяПоляЗапроса (будет доступно как поле запроса),
	//				НомерКолонкиТабличногоДокумента или ПсевдонимПоляВводаНомера,
	//				Тип (Число, Дата, Булево, Если не указано -- Строка);";

	ОписаниеКолонок = "
						|Код, 1
						|Наименование, 2
						|ПометкаУдаления, 3, Булево
						|ПоставщикКод, 4
						|Описание, 5
						|";
	
	// Запрос к табличному документу
	Результат = Запрос_ТекстОбращенияКТабличномуДокументу(ОписаниеКолонок);
	
	// Разделитель таблиц
	Результат = Результат + Запрос_РазделительТаблиц();	
	
	// Запрос обработки данных
	//Результат = Результат + "ВЫБРАТЬ ... " -- текст запросов пакета: получение ссылочных данных, расчеты, группировки, сортировки.
	Результат = Результат + "ВЫБРАТЬ
	|	ДанныеТабличногоДокумента.Код КАК Код,
	|	ДанныеТабличногоДокумента.Наименование КАК Наименование,
	|	ДанныеТабличногоДокумента.ПометкаУдаления КАК ПометкаУдаления,
	|	ДанныеТабличногоДокумента.ПоставщикКод КАК ПоставщикКод,
	|	ДанныеТабличногоДокумента.Описание КАК Описание
	|ПОМЕСТИТЬ ВТ_ДанныеТабличногоДокумента
	|ИЗ
	|	ДанныеТабличногоДокумента КАК ДанныеТабличногоДокумента
	|ГДЕ
	|	(ДанныеТабличногоДокумента.Код <> """")
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ
	|	Товары.Ссылка,
	|	ВТ_ДанныеТабличногоДокумента.Код,
	|	ВТ_ДанныеТабличногоДокумента.Наименование,
	|	ВТ_ДанныеТабличногоДокумента.ПометкаУдаления,
	|	ВТ_ДанныеТабличногоДокумента.ПоставщикКод,
	|	Контрагенты.Ссылка КАК Поставщик,
	|	ВТ_ДанныеТабличногоДокумента.Описание
	|ИЗ
	|	ВТ_ДанныеТабличногоДокумента КАК ВТ_ДанныеТабличногоДокумента
	|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Товары КАК Товары
	|		ПО ВТ_ДанныеТабличногоДокумента.Код = Товары.Код
	|		И (&Искать_только_по_коду
	|		ИЛИ ВТ_ДанныеТабличногоДокумента.Наименование = Товары.Наименование)
	|		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Контрагенты КАК Контрагенты
	|		ПО ВТ_ДанныеТабличногоДокумента.ПоставщикКод = Контрагенты.Код
	|";

							
	// Разделитель таблиц
	Результат = Результат + Запрос_РазделительТаблиц();	
	
	//ОписаниеВыводимыхТаблиц = "
	//		|ИмяТаблицы (будет доступна, как реквизит формы ЭтотОбъект.ПолученныеДанные_ИмяТаблица), 
	//			НомерРезультатаВПакете (если < 0, то считать с конца), Синоним (название страницы)
			
	ОписаниеВыводимыхТаблиц = "
		|Товары, -1
		|";
	
	// Выводимые таблицы
	Результат = Результат + Запрос_ТекстСхемыВывода(ОписаниеВыводимыхТаблиц);
	
	Возврат Результат;
	
КонецФункции

 

Функция Запрос_ТекстОбращенияКТабличномуДокументу формирует текст запроса обращения к табличному документу. В качестве параметра она принимает текст описания колонок табличного документа, из которых необходимо получить данные. Каждая строка описания отвечает за одну колонку и содержит через запятую: ИмяПоляЗапроса (будет доступно как поле запроса), НомерКолонкиТабличногоДокумента или ПсевдонимПоляВводаНомера и тип, к которому система будет пытаться приводить значения колонки.

	ОписаниеКолонок = "
						|Код, 1
						|Наименование, 2
						|ПометкаУдаления, 3, Булево
						|";

Скажет системе, что данные надо брать из 1, 2 и 3 колонок при этом назначить полям временной таблицы имена соответственно: Код, Наименование, ПометкаУдаления. Данные третьей колонки система будет конвертировать в тип Булево, так же доступны: Число, Дата.

 

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

	ОписаниеКолонок = "
						|Код, Код_товара
						|Наименование, ?2
						|ПометкаУдаления, , Булево
						|";

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

 

 

Знак "?" обозначает, что скорее всего данные находятся в конкретной колонке, но необходимо пользователю дать возможность редактировать ее номер.

При изменении номера колонок сохраняются в хранилище общих настроек.

 

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

	Результат = Результат + "ВЫБРАТЬ
	|	ДанныеТабличногоДокумента.Код КАК Код,
	|	ДанныеТабличногоДокумента.Наименование КАК Наименование,
	|	ДанныеТабличногоДокумента.ПометкаУдаления КАК ПометкаУдаления,
	|	ДанныеТабличногоДокумента.ПоставщикКод КАК ПоставщикКод
	|ПОМЕСТИТЬ ВТ_ДанныеТабличногоДокумента
	|ИЗ
	|	ДанныеТабличногоДокумента КАК ДанныеТабличногоДокумента
	|ГДЕ
	|	(ДанныеТабличногоДокумента.Код <> """"
	|	И ДанныеТабличногоДокумента.Наименование <> """")
	|;
	|
	|////////////////////////////////////////////////////////////////////////////////
	|ВЫБРАТЬ
	|	Товары.Ссылка,
	|	ВТ_ДанныеТабличногоДокумента.Код,
	|	ВТ_ДанныеТабличногоДокумента.Наименование,
	|	ВТ_ДанныеТабличногоДокумента.ПометкаУдаления,
	|	ВТ_ДанныеТабличногоДокумента.ПоставщикКод,
	|	Контрагенты.Ссылка КАК Поставщик
	|ИЗ
	|	ВТ_ДанныеТабличногоДокумента КАК ВТ_ДанныеТабличногоДокумента
	|		ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Товары КАК Товары
	|		ПО ВТ_ДанныеТабличногоДокумента.Код = Товары.Код
	|		И (&Искать_только_по_коду
	|		ИЛИ ВТ_ДанныеТабличногоДокумента.Наименование = Товары.Наименование)
	|		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Контрагенты КАК Контрагенты
	|		ПО ВТ_ДанныеТабличногоДокумента.ПоставщикКод = Контрагенты.Код
	|";

При этом для параметров запроса система выведет поля для указания значений. Например, в запросе выше мы используем параметр Искать_только_по_коду. Система сделает для него поле ввода:

 

 

Значения параметров шагов также хранятся в хранилище общих настроек.

 

Часть с описанием выводимых таблиц говорит системе какие таблицы запроса мы будем использовать в дальнейшем. Здесь нам помогает функция Запрос_ТекстСхемыВывода. Например:

	ОписаниеВыводимыхТаблиц = "
		|Товары, -1
		|";
	
	// Выводимые таблицы
	Результат = Результат + Запрос_ТекстСхемыВывода(ОписаниеВыводимыхТаблиц);

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

 

 

Для простой задачи загрузки необходимо наличие процедура ИмяЗадачи. Она нужна для реализации записи данных. Например:

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

	КонецЦикла;
		
КонецПроцедуры

Вот собственно и все, что надо для реализации простой загрузки

 

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

#Область Инициализация

&НаСервере
Процедура Инициализировать()

	//Добавление простой задачи
	ДобавитьЗадачуЗагрузкиДанных("Товары", "Загрузка товаров");
	
	//Добавление составной задачи
	ОписаниеЗадачи = "Приходы_товаров, , , Файл";
	ОписаниеЭтапов = "
		|Получить_данные, , , Запрос, Выберите документы для записи
		|Записать, , , Процедура, 
		|";

	ЗадачиИЭтапы_ДобавитьЗадачуСЭтапами(ОписаниеЗадачи, ОписаниеЭтапов);
	
КонецПроцедуры

#КонецОбласти

При этом система добавит кнопку выполнения шага (этапа) и поле выбора текущего шага (этапа):

 

 

Названия методов шагов составных задач должны начинаться с ИмяЗадачи_ИмяШага_. Например:

Функция Приходы_товаров_Получить_данные_ТекстЗапроса()
Процедура Приходы_товаров_Записать()

 

После выполнения шага, у которого есть стоп-сообщение, система выведет стоп-собщение и приостановит выполнение задачи:

 

 

При нажатии кнопки шага система выполнит один шаг.

Для дальнейшего выполнения можно использовать как кнопку задачи, так и кнопку шага:

 

 

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

Проверено на следующих конфигурациях и релизах:

  • 1С:Библиотека стандартных подсистем, редакция 3.1, релизы 3.1.2.264

Обработка Загрузка Импорт Конструктор

См. также

Инструментарий разработчика Роли и права Запросы СКД Программист Руководитель проекта Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Платные (руб)

Инструменты для разработчиков 1С 8.3: Infostart Toolkit. Автоматизация и ускорение разработки на управляемых формах. Легкость работы с 1С.

15500 руб.

02.09.2020    177055    981    403    

940

Инструментарий разработчика Чистка данных Свертка базы Инструменты администратора БД Системный администратор Программист Руководитель проекта Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Россия Платные (руб)

Инструмент представляет собой обработку для проведения свёртки или обрезки баз данных. Работает на ЛЮБЫХ конфигурациях (УТ, БП, ERP, УНФ, КА и т.д.). Поддерживаются серверные и файловые базы, управляемые и обычные формы. Может выполнять свертку сразу нескольких баз данных и выполнять их автоматически без непосредственного участия пользователя. Решение в Реестре отечественного ПО

8400 руб.

20.08.2024    18291    124    63    

127

Загрузка и выгрузка в Excel Оптовая торговля Печатные формы Бухгалтер Пользователь Платформа 1С v8.3 Управляемые формы Платформа 1C v8.2 1C:Бухгалтерия 1С:Комплексная автоматизация 1.х 1С:Бухгалтерия 2.0 1С:Управление торговлей 10 1С:Розница 2 1С:Управление производственным предприятием 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Управление холдингом 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 1С:Розница 3.0 Бухгалтерский учет Управленческий учет Платные (руб)

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

6000 руб.

09.11.2016    241309    1107    906    

1035

Загрузка и выгрузка в Excel Маркетплейсы Программист Бухгалтер Пользователь Платформа 1С v8.3 Бухгалтерский учет 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Бухгалтерский учет Управленческий учет Платные (руб)

Реальный помощник, с помощью которого Вы преобразуете необходимые документы для Wildberries, OZON, ЯндексМаркет, Мегамаркет, Aliexpress, Детский мир, МагнитЭкспресс (быв.Казань-Экспресс), Леруа Мерлен, ЭНФАНТА (Акушерство), ЛаМода, Летуаль, Твой дом, Золотое Яблоко в документы "Отчет комиссионера (агента) о продажах" и другие. Работает в 1С:БП 3.0, 1С:БП 3.0 КОРП, 1С:УТ 11, 1С:УНФ, 1С:КА 2, 1С:ERP Управление предприятием. Возможность подключить любые маркетплейсы. Анализ продаж ОZON. 30 дней БЕСПЛАТНОГО пользования!

5400 руб.

12.08.2021    37616    402    68    

172

Пакетная печать Печатные формы Инструментарий разработчика Программист Платформа 1С v8.3 Запросы 1С:Зарплата и кадры бюджетного учреждения 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Платные (руб)

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

22200 руб.

06.10.2023    18607    49    19    

83

Инструментарий разработчика Программист Платформа 1С v8.3 Платные (руб)

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

9360 руб.

17.05.2024    28780    100    48    

146

Инструменты администратора БД Инструментарий разработчика Роли и права Программист Платформа 1С v8.3 1C:Бухгалтерия Россия Платные (руб)

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

15000 руб.

10.11.2023    12726    49    33    

72

Загрузка и выгрузка в 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 1С:Розница 3.0 Платные (руб)

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

16800 руб.

20.11.2015    158941    387    378    

517
Отзывы
1. Sam13 358 27.01.25 21:05 Сейчас в теме
наверное такая обработка актуально только для тех, у кого часто и много импорта из внешних файлов разного формата. так сразу не могу сообразить в каких случаях еще это можно использовать.
Я так понимаю это шаблон для создания обработок.
Остальные комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Sam13 358 27.01.25 21:05 Сейчас в теме
наверное такая обработка актуально только для тех, у кого часто и много импорта из внешних файлов разного формата. так сразу не могу сообразить в каких случаях еще это можно использовать.
Я так понимаю это шаблон для создания обработок.
2. dedkov 219 27.01.25 21:46 Сейчас в теме
(1) спасибо за коммент, тут точно незаменимо.
Оставьте свое сообщение