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

27.01.25

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

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

Скачать файл

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

Наименование По подписке [?] Купить один файл
Фреймворк "Простые задачи" - разработка интерактивных инструментов загрузки и обработки табличных данных :
.epf 29,84Kb
5
5 Скачать (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С.

12000 руб.

02.09.2020    171406    960    403    

923

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

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

8400 руб.

20.08.2024    13897    107    46    

107

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

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

9360 руб.

17.05.2024    27158    96    48    

137

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

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

22200 руб.

06.10.2023    17186    43    15    

75

SALE! 20%

Загрузка и выгрузка в 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 5100 руб.

09.11.2016    238486    1084    905    

1020

Загрузка и выгрузка в 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 дней БЕСПЛАТНОГО пользования!

3600 руб.

12.08.2021    36776    377    68    

164

Загрузка и выгрузка в 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 форматов без офиса, на любом сервере! Визуальное связывание колонок файла и реквизитов простым перетаскиванием колонок. Создание или обновление номенклатуры с иерархией, характеристик, доп. реквизитов, упаковок, загрузка практически неограниченного количества картинок на одну номенклатуру (с возможностью загрузки в несколько потоков одновременно), с хранением в томах или в базе. Загрузка номенклатуры поставщиков или поиск по их данным номенклатуры. Загрузка доп. реквизитов в характеристики. Загрузка штрихкодов с генерацией новых. Создание элементов справочников и ПВХ "на лету" для выбранных реквизитов. (Обновление от 22.01.2025, версия 9.9 - 9.14)

16800 руб.

20.11.2015    157627    384    378    

516

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

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

15000 руб.

10.11.2023    11846    45    27    

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