Загрузка данных из Excel в 1С

20.10.25

Интеграция - Загрузка и выгрузка в Excel

Предоставление разработчикам универсального механизма для создания обработок по загрузке данных в 1С из Excel. Ключевые компоненты: Общий модуль экс_Клиент: Содержит программный интерфейс (API) для настройки структуры загружаемых данных. Он позволяет определять колонки, их типы, заголовки и другие параметры. Общая форма экс_ФормаПолученияДанных: Представляет собой универсальный пользовательский интерфейс для загрузки данных. Форма позволяет пользователю выбрать файл, указать диапазон строк для загрузки, сопоставить колонки файла с реквизитами в 1С и просмотреть загружаемые данные. Также форма умеет сохранять и восстанавливать пользовательские настройки для каждой конкретной загрузки.

Файлы

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

Наименование Скачано Купить файл
Загрузка данных из Excel в 1С
.cfe 25,83Kb
10 1 850 руб. Купить

Подписка PRO — скачивайте любые файлы со скидкой до 85% из Базы знаний

Оформите подписку на компанию для решения рабочих задач

Оформить подписку и скачать решение со скидкой

Общее описание расширения "Excel"

Расширение Excel представляет собой универсальный механизм для загрузки данных из файлов Microsoft Excel в систему 1С. Это не просто обработка для импорта, а полноценный фреймворк, который позволяет разработчикам легко встраивать функцию загрузки данных из Excel в любые объекты конфигурации (обработки, документы и т.д.).

Основная идея расширения — предоставить гибкий и переиспользуемый инструмент, который можно настроить для загрузки различных данных без необходимости каждый раз писать код для чтения Excel-файла, сопоставления колонок и отображения пользовательского интерфейса.

Ключевые компоненты и их назначение

  1. Общий модуль экс_Клиент:
  • Это клиентский программный интерфейс (API) расширения. Он содержит набор экспортных процедур и функций, которые позволяют разработчику описать структуру данных, ожидаемых из Excel-файла.
  • С помощью функций СоздатьМассивСтруктур и ДобавитьСтруктуруКолонки можно определить, какие колонки должны быть в файле, их заголовки, типы данных и какие из них являются ключевыми.
  • Также модуль позволяет определять дополнительные поля (ДопПоля), которые могут понадобиться для передачи в форму загрузки и обратно.
  1. Общая форма экс_ФормаПолученияДанных:
  • Это главный пользовательский интерфейс расширения. Форма является универсальной и динамически настраивается на основе параметров, переданных при ее открытии.
  • Функционал формы:
  • Выбор Excel-файла (.xls, .xlsx).
  • Предварительный просмотр содержимого выбранного листа.
  • Выбор листа для загрузки.
  • Указание диапазона строк для импорта ("Первая строка", "Последняя строка").
  • Динамическое создание полей для сопоставления колонок. Разработчик определяет, какие данные нужны (например, "Код номенклатуры", "Количество"), а форма автоматически создает поля, где пользователь может указать номера соответствующих колонок в Excel-файле.
  • Возможность добавления на форму дополнительных полей для ввода параметров загрузки.
  • Сохранение настроек: форма автоматически сохраняет последние использованные настройки (путь к файлу, номера колонок) для каждого сценария загрузки, что очень удобно при повторных операциях.
  1. Обработка экс_ПримерЗагрузки:
  • Это пример, демонстрирующий, как использовать фреймворк.
  • В модуле формы этой обработки показано, как:
  1. С помощью общего модуля экс_Клиент описать необходимую структуру колонок (например, для загрузки контрагентов и счетов учета или для загрузки номенклатуры).
  1. Передать эту структуру в общую форму экс_ФормаПолученияДанных.
  1. Получить результат из общей формы (уже готовую таблицу данных).
  1. Реализовать функцию обратного вызова ОбработатьЗаполнениеТабличнойЧасти. Эта функция вызывается из общей формы после считывания данных, но до их возврата. В ней можно выполнить предварительную проверку и обработку данных (например, найти контрагента по коду и сообщить об ошибке, если он не найден).
  1. Обработать полученные данные и загрузить их в табличные части своей обработки.

Сценарий использования

  1. Разработчик создает свою обработку (или дорабатывает существующий объект).
  1. На форму обработки он добавляет кнопку, например, "Загрузить из Excel".
  1. В обработчике нажатия этой кнопки он с помощью функций модуля экс_Клиент описывает, какие данные ему нужны.
  1. Затем он открывает общую форму экс_ФормаПолученияДанных, передавая ей созданную структуру колонок и имя для сохранения настроек.
  1. Пользователь в открывшейся форме выбирает файл, сопоставляет колонки и нажимает "ОК".
  1. Обработка-владелец получает готовую таблицу значений с данными из файла и может дальше использовать их по своему усмотрению.

Заключение

Расширение Excel — это мощный и гибкий инструмент для разработчиков, который значительно упрощает и стандартизирует задачи по импорту данных из Excel. Оно позволяет сосредоточиться на бизнес-логике обработки данных, а не на рутинных операциях чтения файла и настройки интерфейса.

 

Пример кода из формы обработки загрузки из Excel. В форме пример загрузки в две разные табличные части. Определяется состав загружаемых колонок и способы распознавания.

 

// Процедура открывает форму загрузки данных из Excel для контрагентов и счетов учета.
// Настраивает колонки для загрузки контрагентов, счетов учета и дополнительных полей.
//
// Параметры:
//  Команда - КомандаФормы - команда формы, вызвавшая процедуру
//
&НаКлиенте
Процедура Заполнить(Команда)
	
	// Создание массива колонок для загрузки данных
	// Колонка 1: Код контрагента (обязательное поле, приоритет 1)
	МассивКолонок = экс_Клиент.СоздатьМассивСтруктур("КодКонтрагента", "Код Контрагента", "Контрагент Ссылка", Новый ОписаниеТипов("СправочникСсылка.Контрагенты"), 1);
	// Колонка 2: Код счета учета (обязательное поле, приоритет 1)
	экс_Клиент.ДобавитьСтруктуруКолонки(МассивКолонок, "КодСчетаУчета", "Код Счета учета", "Счет учета ссылка", Новый ОписаниеТипов("ПланСчетовСсылка.Хозрасчетный"),1);
	
	// Добавление дополнительных полей (приоритет 2 - необязательные)
	экс_Клиент.ДобавитьСтруктуруКолонки(МассивКолонок, "Поле1", "Поле 1",,, 2);
	экс_Клиент.ДобавитьСтруктуруКолонки(МассивКолонок, "Поле2", "Поле 2",,, 2);
	
	// Настройка дополнительных полей для формы загрузки
	ДопПоля = Новый Массив;
	ДопПоля.Добавить(экс_Клиент.ПолучитьСтруктуруДопПолейЗначения("Параметр1", "Параметр 1", Новый ОписаниеТипов("СправочникСсылка.Номенклатура")));
	ДопПоля.Добавить(экс_Клиент.ПолучитьСтруктуруДопПолейЗначения("Параметр2", "Параметр 2", Новый ОписаниеТипов("Булево")));
	
	// Формирование параметров для формы загрузки
	Пар = экс_Клиент.ПолучитьСтруктуруПараметровЗначения(МассивКолонок, Истина, "Обработка_ЗагрузкаЗастрахованныхОС", ДопПоля);
	
	// Открытие формы получения данных из Excel с оповещением о завершении
	Оповещение = Новый ОписаниеОповещения("ПолучитьДанныеЭксельЗавершение", ЭтотОбъект, Пар);
	ОткрытьФорму("ОбщаяФорма.экс_ФормаПолученияДанных", Пар, ЭтотОбъект,,,,Оповещение, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);

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

// Процедура открывает форму загрузки данных из Excel для номенклатуры и количества.
// Настраивает колонки для загрузки номенклатуры с количественными показателями.
//
// Параметры:
//  Команда - КомандаФормы - команда формы, вызвавшая процедуру
//
&НаКлиенте
Процедура Заполнить2(Команда)
	
	// Создание массива колонок для загрузки номенклатуры
	МассивКолонок = экс_Клиент.СоздатьМассивСтруктур("КодНоменклатуры", "Код номенклатуры", "Номенклатура Ссылка", Новый ОписаниеТипов("СправочникСсылка.Номенклатура"));
	экс_Клиент.ДобавитьСтруктуруКолонки(МассивКолонок, "Количество", "Количество", "Количество Число", Новый ОписаниеТипов("Число"));
	
	// Настройка дополнительных полей для формы загрузки
	ДопПоля = Новый Массив;
	ДопПоля.Добавить(экс_Клиент.ПолучитьСтруктуруДопПолейЗначения("Параметр1", "Параметр 1", Новый ОписаниеТипов("Число")));
	ДопПоля.Добавить(экс_Клиент.ПолучитьСтруктуруДопПолейЗначения("Параметр2", "Параметр 2", Новый ОписаниеТипов("Булево")));
	
	// Формирование параметров для формы загрузки номенклатуры
	Пар = экс_Клиент.ПолучитьСтруктуруПараметровЗначения(МассивКолонок, Истина, "Обработка_ЗагрузкаЗастрахованныхОС_ЗагрузкаНоменклатуры", ДопПоля);
	
	// Открытие формы получения данных из Excel с оповещением о завершении
	Оповещение = Новый ОписаниеОповещения("ПолучитьДанныеЭксельЗавершение", ЭтотОбъект, Пар);
	ОткрытьФорму("ОбщаяФорма.экс_ФормаПолученияДанных", Пар, ЭтотОбъект,,,,Оповещение, РежимОткрытияОкнаФормы.БлокироватьОкноВладельца);

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

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

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

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

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

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

 

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

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

Вступайте в нашу телеграмм-группу Инфостарт

фреймворк библиотека Excel

См. также

SALE! 10%

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

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

8000 руб.

09.11.2016    261377    1157    940    

1083

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

Загрузка номенклатуры из файлов Excel (xls, xlsx, ods, csv, mxl) в УТ11, КА 2, ERP 2, Розница 2. Задействованы все возможности конфигурации - заполнение реквизитов номенклатуры, дополнительных реквизитов и сведений, характеристики, доп.реквизиты и сведения характеристик. Дополнительные обработки для расширения возможностей.

11100 руб.

29.10.2014    226309    711    528    

480

Загрузка и выгрузка в 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С:ERP Управление предприятием.

5400 руб.

12.08.2021    42650    495    71    

201

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

19200 руб.

20.11.2015    168516    418    389    

538

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

Обработки загрузки данных о продажах WildBerries предназначены для следующих конфигураций: Бухгалтерия предприятия, редакция 3.0; Управление нашей фирмой, редакция 3.0; Розница, редакция 3.0; Управление торговлей, редакция 11; Управление торговлей, редакция 10.3

6000 руб.

11.12.2019    62536    1063    3    

281

Загрузка и выгрузка в Excel 1С v8.3 1C:Бухгалтерия Платные (руб)

Загрузка в 1С от А до Я - настройка полной автоматической загрузки в 1С прайсов-листов поставщиков Загрузка номенклатуры, характеристик, свойств, картинок, штрихкодов, групп, видов номенклатуры. Поиск, сравнение, подбор соответствий номенклатуры поставщиков.  Загрузка прайсов в форматах Excel, csv, xml, yml, ods. Загрузка многостраничных прайсов. Умеет загружать прайсы из почты, по ссылкам, по Api. Фильтровать, отбирать, менять строки, колонки, применять формулы для цен. Самая быстрая загрузка в 1С - 100 000 товаров менее 1 минуты. Содержит отчеты - по номенклатуре, изменение цен, сравнение прайсов, товары к закупке.  Расширение имеет комплектацию из большого количества разработок!

42000 руб.

25.07.2010    50015    153    105    

219
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. rnobody 4 21.10.25 09:33 Сейчас в теме
В музыке, пока исполнитель не научится исполнять классические произведения - исполнителем считаться не может.

Замечания
по статье
:
не освещен вопрос преимущества продукта перед аналогами;
остался за кадром механизм чтения файла-источника - платформа, COM или прямая обработка двоичных данных файла;
не указано - учитывает ли предлагаемый инструмент структурированные таблицы эксель - с группировками, объединениями, пропущенными строками, промежуточными строками (с итогами или комментариями, к примеру);
не указано - есть ли сценарий полностью автоматической работы - без открытия общей формы;
не рассмотрена производительность подсистемы - замеры скорости, прогрессия в зависимости от объема данных.

По примеру:
Функция "Заполнить2" - лишняя;
&НаКлиенте, &НаСервере - обязательно, как и указание расположения МодульФормы, МодульОбъекта;
ОбработатьДанныеЕксель - описание параметров не соответствует коду - адрес временного хранилища не используется;
код не пропущен через BSL.

По коду:
очевидные комментарии излишни.

Нейминг:
синтаксические ошибки недопустимы;
не соблюдается CamelCase;
нижнее подчеркивание в именах переменных и модулей применять не надо;
"стр", "Рез", "Пар" и т.п. - сокращения применять не надо, "й" - допустимое исключение;
"МассивОшибок", "ТаблицаФайла" - типизировать имена не надо.

Программирование:
"Попытка стр.Количество_Расчет = Число(стр.Количество)…" - неправильно так как, если можно обойтись без попытки, надо обходится без попытки, и проверка исходных данных должна производиться при чтении;
в функции "ОбработатьЗаполнениеТабличнойЧасти"
- не-возвращаемый параметр не помечен как "Знач",
- фрагмент "Если ДанныеОбработки…" содержится дублирование кода,
- фрагмент "Если ДанныеОбработки…" - не содержит "Иначе" где оно, в данном случае, необходимо так как процедура экспортная;
"ТекстОшибки = ... + ... + ..." - конкатенацию строк рекомендуется избегать;
"ПланыСчетов.Хозрасчетный.НайтиПоКоду(КодСчетаУчета);" - объектный доступ к данным информационной базы, да еще и в цикле, да еще и не кэшированный - крайне непрофессионально;
В процедуре "ОбработатьДанныеЭксель_ЗагрузкаНоменклатуры" - проверка входящих данных "не на месте", поскольку процедура локальная и проверку данных надо выполнять перед обработкой;
Фрагменты "Если Количество = 0" и "Для й = 0 по Количество" избыточны, правильнее "Для каждого" (в частности - дублирование вызова ".Количество()");
флаг ЕстьОщибка эквивалентен "МассивОшибок.Количество() <> 0" - нет необходимости устанавливать его внутри цикла.

Написано не ради пустой критики. Думаю, автор разместил свою работу для получения обратной связи - у меня появилась возможность ее предоставить. Если коллеги поддержат этот формат - будет еще лучше.
Award; diamond_nsk; Trucker; Viktor_Ermakov; h00k; qwinter; skeptik2105; +7 Ответить
2. P__Slava 21.10.25 15:38 Сейчас в теме
(1)
В музыке, пока исполнитель не научится исполнять классические произведения - исполнителем считаться не может.

Это очень спорное утверждение. Например в джазе, роке еtc. Кроме того, у вас в предложении 3 раза используется слово исполнитель, что не литературно и не очень логично: лицо, не научившееся исполнять классические произведения, нельзя назвать исполнителем.

Это не критика, все отлично расписано, но зачем было первое предложение?)
4. Spurk 42 22.10.25 08:29 Сейчас в теме
(1) Если делать расширение, то в любом случае нужна префиксация. Её обычно делают с нижним подчеркиванием. Возможно где то так не делают, но я если честно такого ни разу не видел. Ну и такой нейминг сразу позволяет хоть как то сгруппировать свои модули, в отсутствии папок в конфигурторе. Если префиксацию не делать вообще, то можно налететь на конфликт имен модулей.
По типизации имен: В отстутствии строгой типизации в 1с, считаю возможным типизировать имена, в том случае, если они куда то передаются. При этом важно, в принимающей процедуре, на входе эту переменную назвать также. Потому что если я буду дорабатывать модуль, то я буду понимать, что за сущность пришла в модуль. Например мне на вход пришла переменная Ошибки, а не МассивОшибок и нужно добавить ошибку. Мне придется бегать по коду и искать что это за переменная ошибки.это - Массив, Структура, ТЗ, Объект? Здесь же сразу понятно, что за объект, и как с ним работать.
В остальном согласен.

Автору.
1.Вместо попытки попробуйте проверить типзнч(строка.колонка) = тип("Число").
Попытка является тяжелой операцией, и гонять её в цикле не рекомендуется. Да и в общем подавление ошибок, обычно не приветствуется. Возможно вам нужно придумать валидирующую процедуру которая будет проверять спорные места на ошибки.
2.Конкатенацию в цикле лучше не использовать. Если разово, или редковызываемая процедура, то ок. Если цикл как у вас то не нужно. Это связано с особенностью хранения строк в памяти. Если вы тысячу раз прогоните " в этой строке ошибка" у вас в памяти будет 1000 таких строк. Когда вы начинаетете соединять начинаете с другими строками, другие строки тоже множаться и результаты сложения этих строк тоже множаться. И получается чем больше кусков соединяющихся, то тем больше захламляется память.
3."ПланыСчетов.Хозрасчетный.НайтиПоКоду(КодСчетаУчета);"
Вы либо за один запрос всё получите и положите в кэширующую структруру. (в вашем случае это структура или соотвествие, где ключ код, а значение ссылка) и обращайтесь к ней. Либо уж если вы обращаетесь в цикле, то тоже заполняйте кэш и ищите через него. Это связано с быстрой доступа к элементам таких структур.
diamond_nsk; +1 Ответить
3. erni 11 21.10.25 17:56 Сейчас в теме
Да, спасибо за обратную связь. Но, видимо, из описания не очень понятно, что это за доработка.
Представленный код - это образец как можно использовать расширение Загрузка данных из Excel в 1С.

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

В расширение ключевой объект - это общая форма экс_ФормаПолученияДанных, в которую надо передать параметры массив структур с описанием колонок, имя сохранения, структуру доп. полей.
экс_ФормаПолученияДанных сама нарисует поля ввода для номеров колонок, поля для ввода доп. параметров и сохранит эти значения в настройке с именем сохранения, чтобы в след. раз не вводить заново. Прочитает данные из Excel и передаст прочитанные данные с спец. процедуру ОбработатьЗаполнениеТабличнойЧасти, в которой нужно будет реализовать распознавание данных.
Т.е. разработчик будет сам разрабатывать такие процедуры как Заполнить, ОбработатьЗаполнениеТабличнойЧасти и т. д. Эти приведены в качестве примера как можно использовать расширение.
Процедура Заполнить2 сделана, чтобы продемонстрировать, что можно реализовать заполнение двух табличных частей из Excel на одной форме.
Для отправки сообщения требуется регистрация/авторизация