Загрузка из EXCEL в 1С на платформе 8.3.6/8.3.7/8.3.8/8.3.9/8.3.10 (с картинками)

Публикация № 341855

Разработка - Практика программирования

MS Microsoft EXCEL Импорт Загрузка ТабличныйДокумент ТаблицаЗначений Картинка Изображение OpenOffice LibreOffice 8.3.6 8.3.7 8.3.8 8.3.9 8.3.10

323
Импорт содержимого из файлов в форматах XLS (Microsoft Excel 97), Microsoft Office OpenXML (Microsoft Excel 2007- 2010) и ODS (OpenDocument) в таблицу значений.

При написании публикации использовалась версия платформы 8.3.6.1760.
Модифицирована на версии платформы 8.3.10.2168.

Заметки из Зазеркалья: http://v8.1c.ru/o7/


Одним из полезных нововведений на платформе 8.3.6 стала возможность возможность импорта содержимого из файлов в форматах XLS (Microsoft Excel 97), Microsoft Office OpenXML (Microsoft Excel 2007- 2010) и ODS (OpenDocument) в табличный документ.
На платформе 8.3.10 появилась возможность считывания данных с отдельных листов книги EXCEL.
Данная возможность доступна как в интерактивном режиме, так и из встроенного языка.
Реализована поддержка вставки из буфера обмена областей, скопированных из Microsoft Excel и OpenOffice Calc.
Реализация импорта из EXCEL на встроенном языке стала возможна в результате нововведений в функционал объекта "ТабличныйДокумент":
Для метода "Прочитать" объекта "ТабличныйДокумент" реализован параметр "СпособЧтенияЗначений" (Новое системное перечисление "СпособЧтенияЗначенийТабличногоДокумента").

В данной публикации приводится пример реализации функционала импорта из файлов EXCEL (xlsx, xls, ods) в таблицу значений в режиме 1С:Предприятие на платформе 8.3.6.


Методы загрузки из внешнего источника:
- Метод "MS ADO" (Чтение файлов xls, xlsx, xlsb средствами Microsoft ADO): //shop.azhur-c.ru/public/163640/
- Метод "MS EXCEL" (Чтение файлов xls, xlsx, xlsb с картинками средствами Microsoft Office): //shop.azhur-c.ru/public/163641/
- Метод "LO CALC" (Чтение файлов xls, xlsx, xlsb, ods, sxc с картинками средствами LibreOffice): //shop.azhur-c.ru/public/163642/
- Метод "NativeXLSX" (Чтение файлов xlsx с картинками средствами 1С. ПостроительDOM): //shop.azhur-c.ru/public/300092/
- Метод "NativeXLSX". Предыдущий вариант (Чтение файлов xlsx средствами 1С. ЧтениеXML):
//shop.azhur-c.ru/public/225624/
- Метод "Excel1C" (Загрузка на платформе 8.3.6 с картинками. Чтение файлов xls, xlsx, ods): //shop.azhur-c.ru/public/341855/
- Список листов файла: //shop.azhur-c.ru/public/163724/


Данный функционал включен в обработку:
Импорт из EXCEL и др.источников (xls,xlsx,ods,sxc,dbf,mxl,csv,sql) в 1С: //shop.azhur-c.ru/public/120961/


О файле EXCEL:
В общем случае файл EXCEL содержит несколько листов с данными.
Метод табличного документа "Прочитать" читает все листы в 1 (один) табличный документ на платформах 8.3.6-8.3.9, а на платформе 8.3.10 можно считать отдельные листы файла EXCEL.
Поэтому для использования данного функционала на версиях платформы 8.3.6-8.3.9 необходимо использовать файлы EXCEL, содержащие 1 (один) лист с данными, для платформы 8.3.10, такого ограничения нет.
О листе файла EXCEL:
Содержимое на листе должно быть разнесено по соответствующим колонкам по назначению.
В качестве примера содержимого листа может служить обычный прайс.
Рекомендутся ячейки таблицы на листе файла оформлять рамкой  "Все границы".
Колонки результирующей таблицы значений формируются по количеству, определяемому свойством "ШиринаТаблицы" табличного документа.
В последствии для удобства пустые колонки удаляются из результирующей таблицы значений.
О типах значений файла EXCEL:
Числа - как "число", даты - как "дата", Стоки - как "строка", Булево - как "строка" вида "ИСТИНА" ("TRUE") или "ЛОЖЬ" ("FALSE").
В результирующую таблицу значений записываются типизованные значения.
О картинках файла EXCEL:
В исходном файле EXCEL это могут быть как ссылки на файлы, разделенные между собой символом "Перевод строки" в пределах одной ячейки, так и собственно картинки.
Картинки должны находиться в пределах ячейки. В одной ячейке может быть несколько картинок.
В результирующую таблицу значений записываются ссылки на файлы картинок.
Каждая ячейка колонки может, в общем случае, содержать несколько ссылок на файлы, разделенные между собой символом "Перевод строки".

Перем ВерсияПриложенияБезНомераСборки;

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
	Перем СистемнаяИнформация, СписокЛистов;
	
	СистемнаяИнформация = Новый СистемнаяИнформация;
	ВерсияПриложенияБезНомераСборки = ВерсияБезНомераСборки(СистемнаяИнформация.ВерсияПриложения);
	
	// Чтение в реквизит обработки, который может быть выведен на форму обработки.
	// Объект.ТабличныйДокумент.Прочитать(ИмяФайла, СпособЧтенияЗначенийТабличногоДокумента.Значение);
	
	// Запись табличного документа в файл на диске.
	// Для работы с табличным документом предусмотрена утилита 1С http://v8.1c.ru/metod/fileworkshop.htm
	// Объект.ТабличныйДокумент.Записать("D:\Товар1Лист.MXL", ТипФайлаТабличногоДокумента.MXL); 
	
	// Примеры вызова:
	Если ВерсияПриложенияМеньше8310() Тогда
		// Платформа 8.3.9 и более ранние (Файл EXCEL как 1 лист).
		ИмяФайла = "D:\1_LIST.xlsx";
		ТЗ = ЗагрузитьМетодом_EXCEL1C(ИмяФайла, "");              			// Считать весь файл.
		ТЗ = ЗагрузитьМетодом_EXCEL1C(ИмяФайла, "", 1, 3, 4);				// Считать с 3-ой до 4-ой строки всего файла.
	Иначе
		// Платформа 8.3.10 (Облать = Лист данных).
		ИмяФайла = "D:\N_LIST.xlsx";
		СписокЛистов = ПолучитьСписокЛистов_EXCEL1C(ИмяФайла);
		ТЗ = ЗагрузитьМетодом_EXCEL1C(ИмяФайла, СписокЛистов[0].Значение);	// Считать 1-ый лист из списка по алфавиту.
		ТЗ = ЗагрузитьМетодом_EXCEL1C(ИмяФайла, СписокЛистов[1].Значение);	// Считать 2-ой лист из списка по алфавиту.
		ТЗ = ЗагрузитьМетодом_EXCEL1C(ИмяФайла, СписокЛистов[1].Значение, 1, 3, 4);	// Считать с 3-ой до 4-ой строки 2-го листа из списка по алфавиту.
	КонецЕсли;
	
КонецПроцедуры

&НаСервере
Функция ПолучитьСписокЛистов_EXCEL1C(Знач ФайлEXCEL)
	Перем ТабличныйДокумент, ОбластьТД;
	Перем СписокЛистов;

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

// Метод "EXCEL1C" для файлов EXCEL с расширениями: xlsx, xls, ods.
//
// Параметры:
//		ФайлEXCEL - Полное имя файла (путь к файлу с именем файла и расширением).
//      ИмяЛиста - Имя листа файла (платформа 8.3.10).
//		СтрокаЗаголовка (по умолчанию = 1) - Номер строки файла типа MXL, в которой расположены заголовки колонок.
//		Не используется. 
//		В обработке 1-я строка анализируется для сопоставления колонок файла с реквизитами объектов 1С.
//		НачСтрока (по-умолчанию = 0) - Номер начальной строки, начиная с которой считываются данные из файла.
//		КонСтрока (по-умолчанию = 0) - Номер конечной строки, которой заканчиваются считываемые данные из файла.
//		Если НачСтрока=0 и КонСтрока=0, то считывается вся таблица, находящаяся в файле.
//		КолвоСтрокФайла - Количество строк в файле. Возвращается в вызвавшую процедуру.
//
// Возвращаемые значения:
//         ТаблицаРезультат - Результат считывания данных из файла.
//
&НаСервере
Функция ЗагрузитьМетодом_EXCEL1C(Знач ФайлEXCEL, Знач ИмяЛиста = "", Знач СтрокаЗаголовка = 1, НачСтрока = 0, КонСтрока = 0, КолвоСтрокФайла = 0)
	Перем ТабличныйДокумент, ОбластьФайла, КолВоКолонокФайла, ИмяКолонки, Область, ТекущаяОбласть, нСтрока, нКолонка, НоваяСтрокаТФ, ЗначениеЯчейки;
	Перем ТаблицаРезультат;
	
	ТабличныйДокумент = Новый ТабличныйДокумент;
	Попытка
		// Выполняется долго на больших файлах.
		ТабличныйДокумент.Прочитать(ФайлEXCEL, СпособЧтенияЗначенийТабличногоДокумента.Значение);    // СпособЧтенияЗначенийТабличногоДокумента - новый параметр платформы 8.3.6. Второе значение "Текст".
	Исключение
		Сообщить(ОписаниеОшибки(), СтатусСообщения.Внимание);
		Возврат Новый ТаблицаЗначений;
	КонецПопытки;
	
	ОбластьФайла = ТабличныйДокумент;
	Если ВерсияПриложенияМеньше8310() Тогда
		// Платформа 8.3.9 и более ранние (Файл EXCEL как 1 лист).
		КолвоСтрокФайла = ОбластьФайла.ВысотаТаблицы;
		КолВоКолонокФайла = ОбластьФайла.ШиринаТаблицы;
	Иначе
		// Платформа 8.3.10 (Облать = Лист данных).
		ОбластьФайла = ТабличныйДокумент.ПолучитьОбласть(ИмяЛиста);
		КолВоСтрокФайла = ОбластьФайла.ПолучитьРазмерОбластиДанныхПоВертикали();
		КолВоКолонокФайла = ОбластьФайла.ПолучитьРазмерОбластиДанныхПоГоризонтали();
	КонецЕсли;
	
	// Проверка заполненности листа.
	Если КолвоСтрокФайла = 0 Тогда
		// Завершение работы.
		// Закрытие Объектов.
		ТабличныйДокумент = Неопределено;
		Возврат Новый ТаблицаЗначений;    // В случае ошибки возвращаем пустую таблицу значений.
	КонецЕсли;
	
	// Создание результирующей таблицы, в которую будут записываться считанные из файла данные.
	ТаблицаРезультат = Новый ТаблицаЗначений;
	
	// Формирование колонок результирующей таблицы.
	
	// "НомерСтроки" - для наглядности и удобства.
	// В зависимости от разрабатываемой обработки.
	// "Сопоставлено" - может быть другим.
	// Здесь же могут быть добавлены другие колонки, не формируемые из содержимого файла.
	ТаблицаРезультат.Колонки.Добавить("НомерСтроки", Новый ОписаниеТипов("Число"), "№", 4);
	ТаблицаРезультат.Колонки.Добавить("Сопоставлено", Новый ОписаниеТипов("Булево"), "Сопоставлено", 1);
	
	Для ит = 1 ПО КолВоКолонокФайла Цикл
		нКолонка = СтрЗаменить(ит, Символы.НПП, "");
		ИмяКолонки = "N" + нКолонка;
		ТаблицаРезультат.Колонки.Добавить(ИмяКолонки);
	КонецЦикла;
	
	// 1-я строка. Заголовки.
	НоваяСтрокаТФ = ТаблицаРезультат.Добавить();
	НоваяСтрокаТФ.НомерСтроки = 1;
	Для ит=1 ПО КолВоКолонокФайла Цикл
		нКолонка = СтрЗаменить(ит, Символы.НПП, "");
		ИмяКолонки = "N" + нКолонка;
		НоваяСтрокаТФ[ИмяКолонки] = ОбластьФайла.ПолучитьОбласть("R1" + "C"+нКолонка).ТекущаяОбласть.Текст;
		
		// Используется при формировании таблицы на форме обработки.
		ШиринаКолонки = ТаблицаРезультат.Колонки[ИмяКолонки].Ширина;
		ДлинаСтроки    = СтрДлина(СокрЛП(НоваяСтрокаТФ[ИмяКолонки]));
		ТаблицаРезультат.Колонки[ИмяКолонки].Ширина = ?(ШиринаКолонки < ДлинаСтроки, ДлинаСтроки, ШиринаКолонки);
	КонецЦикла;
	
	НачСтрока = ?(НачСтрока = 0, 2, НачСтрока);
	КонСтрока = ?(КонСтрока = 0, КолвоСтрокФайла, КонСтрока);
	
	Для нСтрокаТФ = НачСтрока ПО КонСтрока Цикл
		НоваяСтрокаТФ = ТаблицаРезультат.Добавить();
		НоваяСтрокаТФ[0] = нСтрокаТФ;
		нСтрока = СтрЗаменить(нСтрокаТФ, Символы.НПП, "");
		Для нКолонкаТФ = 1 ПО КолВоКолонокФайла Цикл
			нКолонка = СтрЗаменить(нКолонкаТФ, Символы.НПП, "");
			Область = ОбластьФайла.ПолучитьОбласть("R"+нСтрока+"C"+нКолонка);
			ТекущаяОбласть = Область.ТекущаяОбласть;
			Попытка
				ЗначениеЯчейки = ТекущаяОбласть.Значение;        // Число, Дата.
			Исключение
				ЗначениеЯчейки = СокрЛП(ТекущаяОбласть.Текст);    // Строка, Булево. (Булево как строка "ИСТИНА"/"ЛОЖЬ")
				Если ЗначениеЗаполнено(ЗначениеЯчейки) Тогда
					ЗначениеЯчейки = ПреобразоватьПростоеЗначениеИзСтрокиВТипизованноеЗначение1С(ЗначениеЯчейки);
					Если ТипЗнч(ЗначениеЯчейки) = Тип("Строка") Тогда
						ЗначениеЯчейки = СокрЛП(ЗначениеЯчейки);
					КонецЕсли;
				Иначе
					ЗначениеЯчейки = Неопределено;
					Если Область.Рисунки.Количество() > 0 Тогда    // Изображение.
						ЗначениеЯчейки = ПолучитьЗначениеЯчейкиОбластиТабличногоДокументаСКартинками(Область, нСтрока, нКолонка, "УИД");
					КонецЕсли;
				КонецЕсли;
			КонецПопытки;
			
			ИмяКолонки = "N" + нКолонка;
			НоваяСтрокаТФ[ИмяКолонки] = ЗначениеЯчейки;
			
			// Используется при формировании таблицы на форме обработки.
			ШиринаКолонки = ТаблицаРезультат.Колонки[ИмяКолонки].Ширина;
			ДлинаСтроки    = СтрДлина(СокрЛП(НоваяСтрокаТФ[ИмяКолонки]));
			ТаблицаРезультат.Колонки[ИмяКолонки].Ширина = ?(ШиринаКолонки < ДлинаСтроки, ДлинаСтроки, ШиринаКолонки);
		КонецЦикла;
	КонецЦикла;
	
	// Юзабилити. Удалить пустые колонки.
	УдалитьКолонкиСНулевойШириной(ТаблицаРезультат);
	
	Возврат ТаблицаРезультат;
	
КонецФункции

&НаСервере
Процедура УдалитьКолонкиСНулевойШириной(ТаблицаРезультат)
	Перем МассивПустыхКолонок;
	
	// Найдем пустые колонки.
	МассивПустыхКолонок = Новый Массив;
	Для Каждого Колонка ИЗ ТаблицаРезультат.Колонки Цикл
		Если Колонка.Ширина = 0 Тогда
			МассивПустыхКолонок.Добавить(Колонка.Имя);
		КонецЕсли;
	КонецЦикла;
	
	// Удалим пустые колонки.
	Для Каждого ПустаяКолонка ИЗ МассивПустыхКолонок Цикл
		ТаблицаРезультат.Колонки.Удалить(ПустаяКолонка);
	КонецЦикла;
	
КонецПроцедуры

// ПРЕОБРАЗОВАНИЕ СТРОКИ К ТИПИЗОВАННОМУ ЗНАЧЕНИЮ 1С.

&НаСервере
Функция ПреобразоватьПростоеЗначениеИзСтрокиВТипизованноеЗначение1С(Знач ИсходноеЗначение)
	
	Если НЕ ИсходноеЗначение = "" Тогда
		Если ТолькоЦифрыИЗапятаяВСтроке(ИсходноеЗначение, Истина, Ложь) Тогда
			Попытка
				Возврат Число(ИсходноеЗначение);
			Исключение
				Возврат ИсходноеЗначение
			КонецПопытки;
		Иначе
			Если ВРег(ИсходноеЗначение) = "ИСТИНА" ИЛИ ВРег(ИсходноеЗначение) = ("ИСТИНА"+Символы.ПС) ИЛИ ВРег(ИсходноеЗначение) = "TRUE" ИЛИ ВРег(ИсходноеЗначение) = ("TRUE"+Символы.ПС) Тогда
				Возврат Истина;
			ИначеЕсли ВРег(ИсходноеЗначение) = "ЛОЖЬ" ИЛИ  ВРег(ИсходноеЗначение) = ("ЛОЖЬ"+Символы.ПС) ИЛИ ВРег(ИсходноеЗначение) = "FALSE" ИЛИ ВРег(ИсходноеЗначение) = ("FALSE"+Символы.ПС) Тогда
				Возврат Ложь;
			Иначе
				Возврат ПреобразоватьИзСтрокиВДату(ИсходноеЗначение);
			КонецЕсли;
		КонецЕсли;
	КонецЕсли;
	
	Возврат ИсходноеЗначение
	
КонецФункции

// Проверяет, содержит ли строка только цифры и запятую.
//
// Параметры:
//  СтрокаПроверки          - Строка - Строка для проверки
//  УчитыватьЛидирующиеНули - Булево - Флаг учета лидирующих нулей, если Истина, то ведущие нули пропускаются
//  УчитыватьПробелы        - Булево - Флаг учета пробелов, если Истина, то пробелы при проверке игнорируются
//
// Возвращаемое значение:
//   Булево - Истина - строка содержит только цифры или пустая, Ложь - строка содержит иные символы.
//
&НаСервере
Функция ТолькоЦифрыИЗапятаяВСтроке(Знач СтрокаПроверки, Знач УчитыватьЛидирующиеНули = Истина, Знач УчитыватьПробелы = Истина)
	
	Если ТипЗнч(СтрокаПроверки) <> Тип("Строка") Тогда
		Возврат Ложь;
	КонецЕсли;
	
	Если НЕ УчитыватьПробелы Тогда
		СтрокаПроверки = СтрЗаменить(СтрокаПроверки, " ", "");
	КонецЕсли;
	
	Если Сред(СтрокаПроверки, 1, 1) = "-" Тогда
		СтрокаПроверки = Сред(СтрокаПроверки, 2, СтрДлина(СтрокаПроверки));
	КонецЕсли;
	
	Если ПустаяСтрока(СтрокаПроверки) Тогда
		Возврат Истина;
	КонецЕсли;
	
	Если НЕ УчитыватьЛидирующиеНули Тогда
		Позиция = 1;
		// Взятие символа за границей строки возвращает пустую строку
		Пока Сред(СтрокаПроверки, Позиция, 1) = "0" Цикл
			Позиция = Позиция + 1;
		КонецЦикла;
		СтрокаПроверки = Сред(СтрокаПроверки, Позиция);
	КонецЕсли;
	
	// Если содержит только цифры, то в результате замен должна быть получена пустая строка
	// Проверять при помощи ПустаяСтрока нельзя, так как в исходной строке могут быть пробельные символы
	Возврат СтрДлина(
	СтрЗаменить( СтрЗаменить( СтрЗаменить( СтрЗаменить( СтрЗаменить(
	СтрЗаменить( СтрЗаменить( СтрЗаменить( СтрЗаменить( СтрЗаменить( СтрЗаменить( 
	СтрокаПроверки, "0", ""), "1", ""), "2", ""), "3", ""), "4", ""), "5", ""), "6", ""), "7", ""), "8", ""), "9", ""), ",", "")
	) = 0;
	
КонецФункции

// Преобразование строки вида "01.01.13" или "01.01.2013" к значению типа "дата".
// Возможны друние форматы даты в файле EXCEL.
&НаСервере
Функция ПреобразоватьИзСтрокиВДату(Знач СтрокаДаты)
	Перем ScrptCtrl, OutDate;
	
	Попытка
		ScrptCtrl = Новый COMОбъект("MSScriptControl.ScriptControl");
		ScrptCtrl.Language="vbscript";
		OutDate = ScrptCtrl.Eval("CDate(""" + СтрокаДаты + """)");
		Возврат OutDate;
	Исключение
		//Сообщить(ОписаниеОшибки());
	КонецПопытки;
	
	Возврат СтрокаДаты;
	
КонецФункции 

// ПОЛУЧЕНИЕ ЗНАЧЕНИЯ ДЛЯ РЕКВИЗИТА ТИПА "ФАЙЛ КАРТИНКИ".

&НаСервере
Функция ПолучитьЗначениеЯчейкиОбластиТабличногоДокументаСКартинками(Знач Область, Знач нСтрока, Знач нКолонка, Знач ПравилоИмяФайлаКартинки = "УИД")
	Перем Рисунок, ит, ИмяФайлаРисунка;
	Перем ЗначениеЯчейки;
	
	ит = 0;
	ЗначениеЯчейки = "";
	Для Каждого Рисунок ИЗ Область.Рисунки Цикл
		ит = ит + 1;
		Если ПравилоИмяФайлаКартинки = "УИД" Тогда
			ИмяФайлаРисунка = КаталогВременныхФайлов() + Новый УникальныйИдентификатор() + ".jpg";
		Иначе
			ИмяФайлаРисунка = КаталогВременныхФайлов() + "С" + нСтрока + "К" + нКолонка + ".jpg";
		КонецЕсли;
		Попытка
			Рисунок.Картинка.Записать(ИмяФайлаРисунка);
			ЗначениеЯчейки = ЗначениеЯчейки + ИмяФайлаРисунка + ?(ит < Область.Рисунки.Количество(), Символы.ПС, "");
		Исключение
			// Поле картинки недоступно для чтения.
		КонецПопытки;
	КонецЦикла;
	
	Возврат ЗначениеЯчейки;
	
КонецФункции

// ОБЩЕГО НАЗНАЧЕНИЯ.

&НаКлиентеНаСервереБезКонтекста
Функция ВерсияБезНомераСборки(Знач Версия)
	Перем Массив, Результат;
	
	Массив = РазложитьСтрокуВМассивПодстрок(Версия, ".");
	
	Если Массив.Количество() < 3 Тогда
		Возврат Версия;
	КонецЕсли;
	
	Результат = "[Редакция].[Подредакция].[Релиз]";
	Результат = СтрЗаменить(Результат, "[Редакция]",    Массив[0]);
	Результат = СтрЗаменить(Результат, "[Подредакция]", Массив[1]);
	Результат = СтрЗаменить(Результат, "[Релиз]",       Массив[2]);
	
	Возврат Результат;
КонецФункции

&НаСервере
Функция ВерсияПриложенияМеньше8310()
	Перем Версия;
	Версия = СтрЗаменить(ВерсияПриложенияБезНомераСборки, ".", "");
	Версия = Число(Версия);
	Возврат Версия <= 839;
КонецФункции

&НаКлиентеНаСервереБезКонтекста
Функция РазложитьСтрокуВМассивПодстрок(Знач Стр, Разделитель = ",")
	Перем МассивСтрок;
	
	МассивСтрок = Новый Массив();
	Если Разделитель = " " Тогда
		Стр = СокрЛП(Стр);
		Пока 1 = 1 Цикл
			Поз = Найти(Стр, Разделитель);
			Если Поз = 0 Тогда
				МассивСтрок.Добавить(СокрЛП(Стр));
				Возврат МассивСтрок;
			КонецЕсли;
			МассивСтрок.Добавить(СокрЛП(Лев(Стр, Поз - 1)));
			Стр = СокрЛ(Сред(Стр, Поз));
		КонецЦикла;
	Иначе
		ДлинаРазделителя = СтрДлина(Разделитель);
		Пока 1 = 1 Цикл
			Поз = Найти(Стр, Разделитель);
			Если Поз = 0 Тогда
				Если (СокрЛП(Стр) <> "") Тогда
					МассивСтрок.Добавить(СокрЛП(Стр));
				КонецЕсли;
				Возврат МассивСтрок;
			КонецЕсли;
			МассивСтрок.Добавить(СокрЛП(Лев(Стр,Поз - 1)));
			Стр = Сред(Стр, Поз + ДлинаРазделителя);
		КонецЦикла;
	КонецЕсли;
	
	Возврат МассивСтрок;
	
КонецФункции

ВерсияПриложенияБезНомераСборки = "";

323

Специальные предложения

Комментарии
Избранное Подписка Сортировка: Древо
1. StepByStep 3272 04.04.15 18:24 Сейчас в теме
УДАЧНОГО ПРИМЕНЕНИЯ ...
Kinestetik; shvo65; Gang031; AlexK_2012; mchammer4; jaroslav.h; veiuper; jobkostya1c8; 256mb; fvadim; +10 Ответить
2. jobkostya1c8 07.04.15 05:49 Сейчас в теме
Где-то про схожее уже писали, но чтоб не возиться нужно быстро найти шаблоны кода когда есть экстренная необходимость. Может, про картинки разве что. Попадаются задачи парсинга сайтов с использованием 1С.
3. StepByStep 3272 07.04.15 09:52 Сейчас в теме
(2) kostyaomsk,
Почерпнул из описании нововведений к платформе 8.3.6.
4. qwinter 606 07.04.15 15:01 Сейчас в теме
Зачем здесь все кроме
ТабличныйДокумент.Прочитать(ФайлEXCEL, СпособЧтенияЗначенийТабличногоДокумента.Значение);
?????

Скоро синтаксис-помощник будут публиковать...
eact; silberRus; +2 1 Ответить
5. StepByStep 3272 07.04.15 18:07 Сейчас в теме
(4) qwinter,

В данной публикации приводится пример реализации функционала импорта из файлов EXCEL (xlsx, xls, ods) в таблицу значений в режиме 1С:Предприятие на платформе 8.3.6.


Приведенный функционал вполне подходит для примера, о чем и написано выше в тексте публикации..
AlexK_2012; maxopik2; purgin; +3 Ответить
6. strangers 18.05.15 18:26 Сейчас в теме
Не считывает картинки из excel
7. StepByStep 3272 19.05.15 12:52 Сейчас в теме
(6) strangers,
Картинки должны находиться в пределах ячейки. В одной ячейке может быть несколько картинок.
В результирующую таблицу значений записываются ссылки на файлы картинок.
В ячейке, содержащей какртинки не должно быть ничего другого (текст, число и т.д.).
8. mostovaya 29.05.15 11:32 Сейчас в теме
Чем данный очередной загрузчик из эксель выделяется на фоне многих других?
9. StepByStep 3272 29.05.15 19:16 Сейчас в теме
(8) mostovaya,
Тем, что построен на возможностях новой платформы 8.3.6.
64. N191119 10.10.18 13:28 Сейчас в теме
(8) ему не требуется драйвера майкрософта или установленный офис на компьютере
10. rasswet 82 05.06.15 11:31 Сейчас в теме
а заполнять именованные области без использования ком объекта Эксель можно будет?
11. StepByStep 3272 08.06.15 13:46 Сейчас в теме
(10) rasswet,
Можно, если формировать ТабличныйДокумент, а не ТаблицуЗначений как здесь.
EXCEL не нужен.
12. tesseract 10.06.15 10:31 Сейчас в теме

КонечнаяКолонка = ТабличныйДокумент.ШиринаТаблицы; // 8.3.6.1760 некорректно определяет количество колонок (например, >=1025 для xlsx, =256 для xls).


Все читается корректно. Просто ТД может содержать строки с разным количеством колонок. Поэтому правильный вариант :

КоличествоКолонок = ТабличныйДокумент.ПолучитьОбласть(1,,1).ШиринаТаблицы;


Так мы получим реальное количество колонок в строке.
13. StepByStep 3272 10.06.15 20:14 Сейчас в теме
(12) tesseract,
СПАСИБО.
И в качестве развития мысли предлагаю:
КолВоКолонокФайла = ТабличныйДокумент.ПолучитьОбласть().ШиринаТаблицы;

В этом случае получим реальное количество колонок, вне зависимости от заполнения 1-ой строки.
(последние колонки, не имеющие заполненной 1-ой строки также будут учтены.)
Danil.Potapov; +1 Ответить
14. shydla 18.06.15 14:14 Сейчас в теме
Из xlsx картинки грузится, из xls - на доступно для чтения(
19. StepByStep 3272 16.08.15 15:32 Сейчас в теме
(14) shydla,
На платформе 8.3.6.2152 читает.
15. GVasiliy 21 08.07.15 14:31 Сейчас в теме
Нашел маленькую ошибку.
Переменная "СтрокаЗаголовка" не используется.
Для цикла считывающего наименования колонок следует исправить на:


НоваяСтрокаТФ[ИмяКолонки] = ТабличныйДокумент.ПолучитьОбласть("R" + Формат(СтрокаЗаголовка,"") + "C"+нКолонка).ТекущаяОбласть.Текст;
20. StepByStep 3272 16.08.15 15:33 Сейчас в теме
16. alekseineputin 13.07.15 14:41 Сейчас в теме
ТабличныйДокумент.Прочитать(ФайлEXCEL, СпособЧтенияЗначенийТабличногоДокумента.Значение);

А почему никто не пишет, что при использовании директивы"&НаСервере" в клиент-серверном варианте файл должен располагаться либо по сетевому пути, либо на сервере, где установлен "Агент сервера 1С:Предприятия 8.3 (x86-64)"?
slayder; pavel_pss; irbis-auto; AGLux; NN2P; s03; dedicated; veiuper; RomaM; +9 Ответить
21. StepByStep 3272 16.08.15 15:34 Сейчас в теме
(16) mamanelli,
Да, так и есть. Это стандартно в клиент-серверном варианте.
25. kiv1c 526 02.09.15 17:35 Сейчас в теме
(16) mamanelli, то есть, в клиент-серверном варианте нет возможности прочитать файл с локального компьютера пользователя? и как быть?
26. TeMochkiN 04.09.15 10:21 Сейчас в теме
(25) kiv1c,
ТабличныйДокумент (SpreadsheetDocument)
Прочитать (Read)
Доступность:

Сервер, толстый клиент, внешнее соединение, мобильное приложение(сервер).
27. kiv1c 526 09.09.15 10:01 Сейчас в теме
(26) TeMochkiN, да, я разобрался, с клиента на сервер можно передать прочитанные из файла двоичные данные, потом на сервере их записать во временный эксель-файл и читать табличным документом из него.
17. urbanist 61 15.07.15 11:20 Сейчас в теме
Нужно ли для корректной работы этого функционала у "старых" конфигураций изменять режим совместимости?

А то не хочет работать в 8.3.6 (2076)

{Форма.Форма.Форма(26)}: Ошибка при вызове метода контекста (Прочитать)
ТабДок.Прочитать("D:\1.xls");
по причине:
Ошибка при выполнении файловой операции.

С любым параметром "СпособЧтенияЗначенийТабличногоДокумента" то же самое.



18. Samarin 96 16.07.15 14:19 Сейчас в теме
(17) urbanist, для использования данной возможности необходима платформа 8.3.6 с отключенным режимом совместимости.
Сейчас подобные вещи можно тестировать и смотреть на тестовых ЗУП 3.0.23 и БП 3.0.41, которые переводят на 8.3.6 со снятием режима совместимости (БСП версия 2.3).
22. StepByStep 3272 16.08.15 15:39 Сейчас в теме
(17) urbanist, (18) Samarin,
Режим совместимости не причем.
Не открыт ли файл в EXCEL?
Еще столкнулся с тем, что какая-то из версий LibreOffice коверкала файлы.
Поэтому рекомендую использовать MS EXCEL.
23. nytlenc 21.08.15 08:34 Сейчас в теме
В Функции
Функция ЗагрузитьМетодом_1C836(Знач ФайлEXCEL, Знач СтрокаЗаголовка = 1, НачСтрока = 0, КонСтрока = 0, КолвоСтрокФайла = 0)

замени строку:
Область = ТабличныйДокумент.ПолучитьОбласть("R"+нСтрока + "C"+нКолонка);

на:
Область = ТабличныйДокумент.ПолучитьОбласть("R"+Формат(нСтрока,"ЧГ=0") + "C"+Формат(нКолонка, "ЧГ=0"));

В противном случае когда итератор нСтрока или нКолонка достигнет значения 1000 будет подставляться как "1 000" соответственно
"R"+нСтрока + "C"+нКолонка
например будет равен значению "C1 000R1" или "C1R1 000" а такой области не существует. Будет ошибка в общем.
24. StepByStep 3272 01.09.15 12:55 Сейчас в теме
(23) nytlenc,
СПАСИБО. Правильно.
28. Morales 13.11.15 18:15 Сейчас в теме
Функция ТолькоЦифрыИЗапятаяВСтроке не отлавливает отрицательные числа
Надо добавить условие:
// Проверка на отрицательное число
Если Сред(СтрокаПроверки, 1, 1) = "-" Тогда
	СтрокаПроверки = Сред(СтрокаПроверки, 2, СтрДлина(СтрокаПроверки));
КонецЕсли; 
29. StepByStep 3272 15.11.15 18:36 Сейчас в теме
30. Lazerka 19.11.15 13:49 Сейчас в теме
Подскажите, а как загружать в 1с 8.3 из екселя формата xlsb это двоичные данные.
31. nofx 20.11.15 09:37 Сейчас в теме
(30) Lazerka, Также интересен этот вопрос.
32. StepByStep 3272 20.11.15 10:38 Сейчас в теме
(30) Lazerka, (31) nofx,
СПАСИБО.
Загрузка из XLSXB возможна черз ADODB.
Строка соединения = "Driver={Microsoft EXCEL Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};Dbq=" + ФайлEXCEL + ";ReadOnly=1;"
33. nofx 04.12.15 01:48 Сейчас в теме
34. ram8291 17.01.16 15:35 Сейчас в теме
Считываются все Листы Excel. Не понятно как считать только один Лист?
Наконец 1С родила долгожданный функционал!

35. StepByStep 3272 24.04.16 19:09 Сейчас в теме
(34) ram8291,
Из текста публикации:
О файле EXCEL:
В общем случае файл EXCEL содержит несколько листов с данными.
Метод табличного документа "Прочитать" читает все листы в 1 (один) табличный документ.
Поэтому в исходном файле EXCEL должен быть только один лист.
36. Гость 10.05.16 19:48
Проблема: числовые значения заполняются в Таблицу Значений правильно (как числа) из файла Эксель (через Табличный Документ), только если числа не содержат десятичной (дробной) части. Если есть дробная часть, то они записываются как текстовые значения, либо как тип Дата.

Пытался менять региональные настройки ("," или "." в качестве разделителей дробной части) и Региональные настройки базы данных 1С - безрезультатно.
37. StepByStep 3272 15.05.16 19:23 Сейчас в теме
(36) Гость,
Рекомендовал бы Вам обратить внимание на обработку Импорт из внешнего источника в 1С: infostart.ru
В ней механизм загрузки данным методом уточнен (несколько изменен функционал по типизации значений).
38. phil1n 20.07.16 14:46 Сейчас в теме
На платформе 8.3.6.2299 даты со временем в интервале 11:59:30 - 11:59:59 не считываются
39. StepByStep 3272 21.07.16 13:38 Сейчас в теме
(38) phil1n,
В том числе не берет и некоторые форматы даты (в общем-то "экзотические"), существующие в EXCEL.
40. borzyj 10.10.16 01:43 Сейчас в теме
Есть еще нюанс
при работе с файлами эксель формата офис 95 вызывается исключение, учтите это на коммерческих проектах
41. StepByStep 3272 30.10.16 17:41 Сейчас в теме
(40) borzyj,
Старый формат.
Можно пересохранить файл в более современном формате каким-либо офисом.
42. borzyj 20.11.16 04:11 Сейчас в теме
(41) StepByStep,
Была у меня задача, когда было необходимо загружать заказы от покупателей, приходящие в формате XL 95, база в клиент-серверном варианте, обработка на сервере, где офис не установлен, и никакого автоконвертера я не нашел, пришлось использовать другой способ обработки файла без установки мс Офис на сервер
43. Soikalv 16.12.16 12:37 Сейчас в теме
Очень интересная и полезная обработка. На 8.2. очень часто была нужна и нужна на 8.3. переход на 8.3 - вынужденный. Объясните, почвему ядолжна выкладывать 1200 рублей, если переход на 8.3. был вынужден? Меня все устраивало..
44. olegmedvedev 16.12.16 12:45 Сейчас в теме
(43) Вы о чем? это не обработка, это бесплатная статья, в которой рассказывается как можно загрузить из Экселя в 1С, приводится метод который автор предлагает воспользоваться.
Про переход с 8.2 на 8.3 тут ничего не говорится, денег автор тоже не требует за свою статью.
ilyaleontyev; +1 Ответить
45. logarifm 1052 09.05.17 12:06 Сейчас в теме
сделайте обработкой и залейте для скача. Спасибо!
47. StepByStep 3272 07.06.17 14:18 Сейчас в теме
(45)
Практическое применение:
"Импорт из EXCEL и других источников (xls, xlsx, xlsb, ods, sxc, dbf, mxl, csv, clipboard, sql) в 1С"
http://infostart.ru/public/120961/
46. lisrws 101 19.05.17 21:25 Сейчас в теме
с конструкцией для определения количества колонок "ОбластьФайла.ПолучитьРазмерОбластиДанныхПоГоризонтали()" будьте осторожны. она определяет количество колонок по первой строке. у меня в первой строке 6 колонок с данными, а с 7 строки уже 8 колонок. конструкция возвращает мне 6. если в первой строке добавить данные в 7 и 8 колонки, то вернет 8 как и должно быть. релиз "8.3.10.2252"
48. StepByStep 3272 07.06.17 14:21 Сейчас в теме
(46)
Совершенно верно, так и есть.
При загрузке предполагается, что исходная таблица должным образом оформлена, т.е. со всей заполненной 1-ой строкой.
49. aleksey.kubovtsov 73 19.09.17 22:18 Сейчас в теме
Спасибо за публикацию .

У меня была проблема, может кому поможет в решение:
Строку вида "01.02.2017" при чтение excel табличным документом воспринималась как 01.ММ.2017
помогло
ТабДокумент.Прочитать(ВременныйФайл,СпособЧтенияЗначенийТабличногоДокумента.Значение);
50. abrafaks 09.11.17 15:52 Сейчас в теме
Единственное, я бы вместо "Пока 1=1 Цикл" (так писали в 7.7), написал бы "Пока Истина Цикл".
51. ilp06 20.12.17 09:55 Сейчас в теме
Как считать 1-ый лист?
Опять в 1с всё через ..опу!
Нафига области сортировать! Порядок листов - от балды.
Жесть.
52. ilp06 20.12.17 10:15 Сейчас в теме
Есть решение:
Нужно сортировать по реквизиту Верх области.
Тогда порядок будет соответствовать порядку листов в Excel-файле.
user1073328; +1 Ответить
53. Daniayr 24.12.17 18:09 Сейчас в теме
Коллеги, подскажите как закрывать тот файл с которым работаешь (импорт), у меня закрыает все что открыто
использую LibreOffice
54. fedor40 687 22.01.18 10:16 Сейчас в теме
Вставил весь код в модуль внеш обработки. Работаю на 8.3.10.2580.
Выдает ошибку:{ВнешняяОбработка.ВнешняяОбработка1.МодульОбъекта(8,36)}: Процедура или функция с указанным именем не определена (ВерсияБезНомераСборки)
ВерсияПриложенияБезНомераСборки = <<?>>ВерсияБезНомераСборки(СистемнаяИнформация.ВерсияПриложения); (Проверка: Сервер).

Странно. Я так и не понял в чем ошибка.
55. vis_tmp 30 27.03.18 19:39 Сейчас в теме
Спасибо, очень полезная публикация!
56. It-developer 20 02.04.18 17:47 Сейчас в теме
Хороший шаблон для своего модуля работа с Эксель. Спасибо
57. Stradivari 147 12.04.18 14:41 Сейчас в теме
Спасибо. Статья выручила!
58. premierex 18.04.18 15:58 Сейчас в теме
(0) Статья отличная. Плюс, несомненно. Но вот от объекта MSScriptControl.ScriptControl я бы всё же отказался, потому как существует только 32-х битная реализация этой библиотеки и она просто не загрузится в 64-х битный серверный процесс. Выход, конечно, есть, но он уж очень похож на танец с бубнами.
59. KAV2 25.04.18 12:00 Сейчас в теме
Есть такой нюанс с использованием ТабличногоДокумента в тонком клиенте: если файл уже открыт в Excel, то не получается передать его на сервер для обработки с помощью метода ПоместитьФайлы - файл оказывается заблокированным другим приложением
60. premierex 29.04.18 09:31 Сейчас в теме
(0) Функционал чтения многостраничного документа можно значительно упростить. Вместо того, чтобы дважды читать документ для определения количества листов и их имен:
ОбластьФайла = ТабличныйДокумент.ПолучитьОбласть(ИмяЛиста);

можно использовать конструкцию:
ОбластьФайла = ТабличныйДокумент.Области[Мин(ИндексЛиста, ТабличныйДокумент.Области.Количество() - 1]);
61. vis_tmp 30 04.05.18 15:34 Сейчас в теме
(0)Не могу понять, загружается ли гиперссылка из ячейки Excel-а?
Гиперссылка представляет из себя URL на картинку на сайте (прилагаю для примера кусочек такого файла).
В блоке:
Если ЗначениеЗаполнено(ЗначениеЯчейки) Тогда
	ЗначениеЯчейки = ПреобразоватьПростоеЗначениеИзСтрокиВТипизованноеЗначение1С(ЗначениеЯчейки);
	Если ТипЗнч(ЗначениеЯчейки) = Тип("Строка") Тогда
		ЗначениеЯчейки = СокрЛП(ЗначениеЯчейки);
	КонецЕсли;
Иначе
	ЗначениеЯчейки = Неопределено;
	Если Область.Рисунки.Количество() > 0 Тогда    // Изображение.
		ЗначениеЯчейки = ПолучитьЗначениеЯчейкиОбластиТабличногоДокументаСКартинками(Область, нСтрока, нКолонка, "УИД");
	КонецЕсли;
КонецЕсли;
Показать

переменная "ЗначениеЯчейки" содержит просто текст "Изображение"...
Кому-нибудь удалось получить URL гиперссылки из подобного файла?
Прикрепленные файлы:
PRICE - сантехника MIN.xls
62. Redhatych 35 05.09.18 14:13 Сейчас в теме
(61) как получить URL гиперссылки.
может быть кому-то пригодится.
предварительно в файле Excel создайте макрос, вытягивающий URL из таких ячеек. и с этим столбцом работайте
подробности здесь: http://mindubaev.com/internet-marketing/seo/kak-vytashhit-giperssylku-iz-excel/
63. vis_tmp 30 05.09.18 20:01 Сейчас в теме
65. OlaIa 20.02.19 09:23 Сейчас в теме
Добрый день.
А как быть с чтением файла Excel, который защищен паролем?
В этом случае ТабличныйДокумент.Прочитать не работает.
66. vis_tmp 30 20.02.19 12:59 Сейчас в теме
(65)Тут уже, скорее всего, ничего не поделаешь...
67. DMSDeveloper 127 06.03.19 11:15 Сейчас в теме
По мне так механизм чтения Excel средствами платформы еще очень сырой.
Вот вам живой пример

Есть файл, формата Excel-97 (xls) с формой УПД, которую нам по почте присылает поставщик.

Ячейка "Всего к оплате" имеет числовое значение 27 191,66
Метод прочитать, табличного документа, с типом чтения "Значение" получает 27 192! Зачем это платформа 1С сделала округление?
При выборе типа чтения "Текст" выдает еще более интересный вариант - "General27192"! Это вообще откуда?


Все на скринах.
Веселый файл тоже во вложении.
З.Ы. Редактировать и пересохранять файл не предлагать! Он грузится автоматом при получении почты.
Прикрепленные файлы:
19012903157.xls
69. kn 94 08.10.19 11:49 Сейчас в теме
Автору спасибо за пример работы с листами в 8.3.10
(67) xls можно скриптом преобразовывать
&НаСервере
Процедура ЗагрузитьИзФайла(АдресФайла, ВыбИмяФайла)
	
	Расш = ПолучитьРасширениеФайла(ВыбИмяФайла);
	
	Если Расш = "xls"  Тогда
		
		Попытка
	     лДвоичДанные = ПолучитьИзВременногоХранилища(АдресФайла);
	     лФайл = ПолучитьИмяВременногоФайла(Расш);
	     лДвоичДанные.Записать(лФайл);
		Исключение
			Сообщить(ОписаниеОшибки());
			Возврат;
		КонецПопытки;
		
		Попытка
			Excel = Новый COMОбъект("Excel.Application");
			ОткрытаяКнига = Excel.WorkBooks.Open(лФайл);
			ИмяФайла = ПолучитьИмяВременногоФайла("xlsx");
			Excel.DisplayAlerts=0;
			ОткрытаяКнига.SaveAs(ИмяФайла, 51);
			Excel.DisplayAlerts = 1;
		Исключение
			Сообщить(ОписаниеОшибки());
			Возврат;
		КонецПопытки;
		
		Excel.DisplayAlerts = 0;
		Excel.WorkBooks.Close();
		Excel.DisplayAlerts = 1;
		Excel.Quit();
		Excel = Неопределено;
		
		ТабличныйДокумент.Очистить();
	    ТабличныйДокумент.Прочитать(ИмяФайла, СпособЧтенияЗначенийТабличногоДокумента.Значение);

	Иначе
		
	    Попытка
		 лФайл = ПолучитьИмяВременногоФайла(Расш);
	     лДвоичДанные = ПолучитьИзВременногоХранилища(АдресФайла);
	     лДвоичДанные.Записать(лФайл);
	    Исключение
			Сообщить(ОписаниеОшибки());
			Возврат;
		КонецПопытки;
		
	    ТабличныйДокумент.Очистить();
	    ТабличныйДокумент.Прочитать(лФайл, СпособЧтенияЗначенийТабличногоДокумента.Значение);
	
	КонецЕсли;
	
КонецПроцедуры
Показать
70. vis_tmp 30 08.10.19 16:42 Сейчас в теме
(69)Во что преобразуется?
Какой файл получится в результате?
71. kn 94 08.10.19 17:00 Сейчас в теме
(70)xls в xlsx, тот можно Прочитать(). Раньше xls не читался.
72. kn 94 08.10.19 17:10 Сейчас в теме
(67)да неправа, выдает тоже 27 192.
68. eact 08.04.19 14:50 Сейчас в теме
Странно преобразует числа... Например "16,9" преобразует в "16,899999999999999"...
Или "35,09" в "35,090000000000003"

Хотя в изначально в ексель четко число 35,09 и 16,9
Оставьте свое сообщение

См. также

Полезные процедуры и функции для программиста 142

Статья Программист Нет файла v8 1cv8.cf Россия Бесплатно (free) Практика программирования Универсальные функции

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

07.10.2019    9383    HostHost    23       

Агрегатные функции СКД, о которых мало кто знает 343

Статья Программист Нет файла v8 v8::СКД 1cv8.cf Бесплатно (free) Практика программирования

Пользуетесь ли Вы всеми возможными агрегатными функциями, которые предоставляет система компоновки данных? Если Вы используете только: СУММА, КОЛИЧЕСТВО, МИНИМУМ, МАКСИМУМ, СРЕДНЕЕ, то эта статья для Вас.

05.09.2019    13571    ids79    44       

Отслеживание выполнения фонового задания 141

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) Практика программирования Универсальные функции Разработка

Запуск фонового задания из модуля внешней обработки. Отслеживание выполнения задания в виде прогресса, расположенного на форме.

17.08.2019    10886    ids79    16       

Функции СКД: ВычислитьВыражение, ВычислитьВыражениеСГруппировкойМассив 254

Статья Программист Нет файла v8 v8::СКД 1cv8.cf Бесплатно (free) Практика программирования

Подробное описание и использование внутренних функций системы компоновки данных: Вычислить, ВычислитьВыражение, ВычислитьВыражениеСГруппировкойМассив, ВычислитьВыражениеСГруппировкойТаблицаЗначений.

08.08.2019    14819    ids79    30       

СКД - наборы данных и связи между ними, создание собственной иерархии, вложенные отчеты 131

Статья Программист Нет файла v8 v8::СКД 1cv8.cf Бесплатно (free) Практика программирования

Набор данных объект. Использование в схеме компоновки нескольких наборов данных. Различные варианты связи наборов: объединение, соединение. Использование иерархии в отчетах на СКД. Создание собственной иерархии, иерархия детальных записей. Использование вложенных схем в отчетах на СКД.

26.07.2019    13416    ids79    6       

СКД - использование расширений языка запросов, секция ХАРАКТЕРИСТИКИ 151

Статья Программист Нет файла v8 v8::СКД Бесплатно (free) Инструментарий разработчика Практика программирования

Автоматическое и не автоматическое заполнение полей компоновки данных. Использование расширений языка запросов для СКД «{…}», секция ВЫБРАТЬ, секция ГДЕ, параметры виртуальных таблиц. Автоматизированное использование дополнительных данных в запросе: секция ХАРАКТЕРИСТИКИ.

17.07.2019    11745    ids79    27       

Регистры сведений. За кулисами 129

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) Практика программирования Разработка

Небольшие заметки по внутреннему устройству регистров сведений.

09.07.2019    9187    YPermitin    12       

"Меньше копипаста!", или как Вася универсальную процедуру писал 183

Статья Программист Стажер Нет файла v8 v8::СКД 1cv8.cf Бесплатно (free) Практика программирования Разработка

Программист Вася разбирает подход создания универсальных методов на примере программного вывода СКД.

04.07.2019    8237    SeiOkami    49       

Создание отчетов с помощью СКД - основные понятия и элементы 209

Статья Программист Нет файла v8 v8::СКД Бесплатно (free) Практика программирования Математика и алгоритмы

Основные принципы работы СКД. Понятия схемы компоновки и макета компоновки. Описание основных элементов схемы компоновки: наборы данных, поля, вычисляемые поля, ресурсы, параметры.

25.06.2019    21549    ids79    17       

Многопоточное ускорение однопользовательских нагрузок в 1С + Microsoft SQL Server 2017 179

Статья Программист Нет файла v8 v8::Запросы Бесплатно (free) Практика программирования Разработка

Взаимодействие с Microsoft SQL Server нередко вызывает трудности у 1С-ников, а потому интересны любые моменты, связанные с его использованием. О своем опыте работы с новым SQL Server 2017 участникам конференции Infostart-2018 рассказал директор ООО «Аналитика софт» Дмитрий Дудин.

11.06.2019    12901    dmurk    134       

Регистры накопления. Структура хранения в базе данных 176

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) Практика программирования Разработка

Структура хранения регистров накопления в базе данных для платформы 1С:Предприятие 8.x. Первая часть в серии публикаций.

16.05.2019    19474    YPermitin    27       

Выполнение внешней обработки в фоновом задании 149

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) Практика программирования Разработка

Подробное описание подхода к созданию длительной операции на основе внешней обработки. Реализация протестирована на 1С 8.3.12.1714 (x64).

11.05.2019    11573    Eret1k    23       

Выгрузка документа по условию 5

Статья Программист Нет файла v8 Бесплатно (free) Практика программирования Разработка

Что делать, если документы нужно выгружать не все подряд, а по какому-то фильтру: статусу, дате, набору условий... А что если он соответствовал этим условиям, а потом перестал? А если потом опять начал? Такие ситуации заставили попотеть не одного программиста.

25.04.2019    6351    m-rv    2       

Преобразование EXCEL в таблицу значений без COM и других извращений 211

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) Загрузка и выгрузка в Excel

Получение таблицы значений из excel в 1С v8, без COM, внешних источников данных и т.д. EXCELВТаблицуЗначений() - За 10 строчек кода! Реализация протестирована на 1С 8.3.12.1714 (x64).

18.04.2019    13548    9    Eret1k    43       

Как прикрутить ГУИД к регистру сведений 23

Статья Программист Нет файла v8 Бесплатно (free) Практика программирования Перенос данных из 1C8 в 1C8 Разработка

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

16.04.2019    9018    m-rv    16       

О расширениях замолвите слово... 194

Статья Программист Стажер Нет файла v8 Бесплатно (free) Практика программирования Разработка

О чём стоит задуматься при принятии решения о создании расширения конфигурации…

07.04.2019    18021    ellavs    125       

Git-репозитории для 1С-кода (опыт использования при небольших проектах) 202

Статья Программист Стажер Нет файла v8 Windows Бесплатно (free) Практика программирования Разработка

Инструкции по взаимодействию с Git-репозиторием, которые писались для тех наших программистов, которые вообще никогда не работали с Git (руководства в духе "Как получить код из git-репозитория?", "Как отправить код в git-репозиторий")...

28.03.2019    14173    ellavs    83       

Трюки с внешними источниками данных 166

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) Практика программирования Разработка

Некоторые трюки для преодоления ограничений внешних источников данных.

14.03.2019    14619    YPermitin    52       

Возможности типовых шаблонов ограничения доступа на уровне записей (RLS) 166

Статья Программист Нет файла v8 v8::Права Бесплатно (free) Практика программирования БСП (Библиотека стандартных подсистем) Роли и права

Краткий обзор применения типовых шаблонов ограничения доступа на уровне записей в конфигурациях, созданных на базе БСП: #ПоЗначениям, #ПоНаборамЗначений, #ПоЗначениямРасширенный, #ПоЗначениямИНаборамРасширенный

03.02.2019    17680    ids79    9       

Копирование числовых ячеек из 1С в Excel 26

Статья Системный администратор Программист Нет файла v8 1cv8.cf Windows Бесплатно (free) Загрузка и выгрузка в Excel Администрирование данных 1С

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

15.01.2019    11865    itriot11    21       

Запись одной книги Excel на нескольких листах средствами 1С (без внешних компонент) 142

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) Загрузка и выгрузка в Excel

Пользователи часто просят сохранить им стопиццот отчетов в один файл Excel, чтобы отчеты были в одном файле. Ну или клиент хочет счет, накладную и счет-фактуру получить в одном документе. 1С умеет это делать без всяких там COM-объектов. Давайте разберемся, куда нажимать и что крутить.

14.01.2019    12835    starik-2005    24       

EnterpriseData – часть 2. Процесс выгрузки данных 127

Статья Программист Нет файла v8 v8::УФ Россия Бесплатно (free) Практика программирования Обмен через XML

Основные этапы выгрузки данных через ED, обработчики событий выгрузки, правила обработки данных, правила конвертации объектов, конвертация свойств первого и второго этапов, процедуры БСП, используемые при выгрузке данных, структура «КомпонентыОбмена».

26.12.2018    14059    ids79    27       

Новый подход к обмену данными EnterpriseData 207

Статья Программист Нет файла v8 v8::УФ Россия Бесплатно (free) Практика программирования Обмен через XML

Хочу предложить Вашему вниманию цикл статей, посвященных обмену данными через универсальный формат (EnterpriseData или ED).

14.12.2018    23488    ids79    72       

Программное заполнение пользовательских параметров и отборов СКД 136

Статья Программист Нет файла v8 v8::СКД 1cv8.cf Бесплатно (free) Практика программирования

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

13.11.2018    22537    Unk92    19       

Автоматические и управляемые блокировки применительно к типовым конфигурациям 1С 127

Статья Программист Нет файла v8 v8::blocking 1cv8.cf Бесплатно (free) Математика и алгоритмы Практика программирования

Основные принципы работы с режимами автоматических и управляемых блокировок в 1С Предприятие 8. Теория и применение в типовых конфигурациях: БП, УТ, ЕРП

10.11.2018    22514    ids79    40       

Вспомогательные инструкции в коде 1С 106

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) Практика программирования

Помогаем редактору кода 1С помогать нам писать и анализировать код.

15.10.2018    21689    tormozit    100       

Произвольный код в фоновом режиме 165

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) Практика программирования

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

03.09.2018    15946    nikita0832    42       

Основные понятия и механизмы оптимизации клиент-серверного взаимодействия в 1C 147

Статья Программист Нет файла v8 Россия Бесплатно (free) Математика и алгоритмы Практика программирования

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

23.08.2018    23197    Rain88    42       

Из Excel в 1С запросом 33

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) Загрузка и выгрузка в Excel

... ну, конечно, не прям так типовым языком запросов, а расширенным языком запросов. Речь пойдет о том, как "залить" данные в таблицы 1С и не пилить при этом бесконечного количества наколеночных обработок.

14.08.2018    14447    m-rv    5       

Повышаем эффективность разработки правил обмена 125

Статья Программист Нет файла v8 КД ОС Бесплатно (free) Практика программирования Перенос данных из 1C8 в 1C8

Как повысить скорость и качество разработки правил обмена? Как вести групповую разработку правил обмена? Как облегчить сопровождение правил обмена после передачи в эксплуатацию? Об этом и многом другом вы можете узнать из этой статьи.

25.06.2018    20452    olegtymko    47       

Введение в механизм представлений в ЗУП ред. 3 156

Статья Программист Нет файла v8 v8::СПР ЗУП3.x Бесплатно (free) Практика программирования

В нашей организации на первом же телефонном собеседовании на должность разработчика по ЗУП ред. 3 вас обязательно спросят о том, что такое "Представления".

04.06.2018    25844    xrrg    82       

Как сделать запрос на изменение данных 75

Статья Программист Нет файла v8 v8::Запросы 1cv8.cf Бесплатно (free) Практика программирования

В статье приведены особенности внутренней архитектуры и примеры работы с расширением языка запросов 1С.

01.06.2018    22396    m-rv    21       

Строим графы средствами 1С (без GraphViz) 43

Статья Программист Нет файла v8 Бесплатно (free) Практика программирования

Множество статей на Инфостарте описывают, как работать с компонентой GraphViz, чтобы построить ориентированный граф. Но практически нет материалов, как работать с такими графами средствами 1С. Сегодня я расскажу, как красиво строить графы с минимальным пересечением. Нам этот метод пригодился для отрисовки алгоритмов в БИТ.Финансе, т.к. типовой механизм не устраивал. Еще это может быть полезно для визуализации различных зависимостей: расчета себестоимости, графы аффилированности компаний и т.д. Надеюсь, эта статья поможет сделать мир 1С красивее и гармоничней:) Итак, поехали...

23.05.2018    18178    slozhenikin_com    19       

Распределение расходов пропорционально продажам 9

Статья Программист Пользователь Нет файла v8 v8::ОУ УТ10 УУ Финансовый учет и бюджетирование (FRP) Учет доходов и расходов Бесплатно (free) Практика программирования

Финансовая модель. Распределение административных расходов по подразделениям пропорционально продажам за месяц. Дополнительные реквизиты против бизнес-процессов!

13.05.2018    12195    Rustig    9       

Просмотр временных таблиц запроса в отладчике без изменения кода 130

Статья Программист Нет файла v8 v8::Запросы 1cv8.cf Бесплатно (free) Практика программирования

Данный способ можно использовать для просмотра содержимого временных таблиц запросов (менеджеров временных таблиц) без внесения изменений в код.

24.04.2018    26858    avfed@rambler.ru    19       

Выгрузка / Загрузка в EXCEL данных через ЗаписьXML / ЧтениеXML 5

Инструменты и обработки Программист Внешняя обработка (ert,epf) v8 1cv8.cf Абонемент ($m) Загрузка и выгрузка в Excel

Выгрузка/Загрузка данных в xlsx, xlsm файл заданного шаблона, не требующая наличия программы Excel на сервере и на клиенте. Осуществляется путем открытия файла как архива и чтения/записи определенных листов как файлов XML. Проверена на платформе 8.3.10.2466.

1 стартмани

22.03.2018    6531    15    Wern03    5       

Минимализмы 3 356

Статья Программист Нет файла v8 Бесплатно (free) Практика программирования Универсальные функции

Очередная серия "минимализмов" [http://infostart.ru/public/306536/, https://infostart.ru/public/460935/]. Также, как и в предыдущих статьях, здесь приведена подборка коротких оригинальных авторских решений некоторых задач. Ранее эти решения были разбросаны по моим комментариям к чужим публикациям.

19.02.2018    37397    ildarovich    44       

Этюды по программированию. Взаимодействие с Microsoft Word 109

Статья Программист Нет файла v8 Бесплатно (free) Практика программирования

Часто приходится заниматься созданием сложных документов Word с таблицами, вложенными фрагментами, хитрым оформлением и прочими радостями жизни. Это - попытка как-то структурировать полученный опыт, чтобы не приходилось перерывать ворох старых обработок в поисках крупиц истины. Надеюсь, эта статья будет полезна и Вам.

11.12.2017    26722    milkers    23       

Метод формирования движений в типовых регистрах нетиповыми регистраторами 31

Статья Программист Нет файла v8 1cv8.cf Бесплатно (free) Практика программирования

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

05.12.2017    22139    itriot11    34       

1С: Конвертация данных 3. Инструкции и примеры. EnterpriseData (универсальный формат обмена) 738

Статья Программист Нет файла v8 КД Бесплатно (free) Перенос данных из 1C8 в 1C8 Практика программирования Обмен через XML

Что такое КД3? Как начать использовать? Полезные дополнения к документации. Что нужно исправить в типовых обработках и конфигурации. Как изменить правила обмена не снимая конфигурацию с поддержки. Как отлаживать правила обмена?

19.11.2017    143517    MaxS    251       

Заполнение данных по ИНН контрагента с помощью альтернативного сервиса огрн.онлайн 131

Статья Программист Нет файла v8 Бесплатно (free) Практика программирования

Код для заполнения данных по ИНН контрагента из ЕГРЮЛ с сайта огрн.онлайн.

01.11.2017    23991    slava_1c    49       

Программные перечисления, ч.2: приемы кэширования при разработке 67

Статья Программист Нет файла v8 Бесплатно (free) Практика программирования

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

30.10.2017    22245    unichkin    18       

Разбираемся с настройками компоновки данных 161

Статья Программист Нет файла v8 v8::СКД 1cv8.cf Бесплатно (free) Практика программирования

Краткая шпаргалка по программной работе с настройками СКД

29.10.2017    25378    json    9