Загрузка данных (справочник, документ) через буфер обмена
Первая в мире однокнопочная обработка, мечта юзера!
Расскажу, как я кардинально упростил загрузку разнообразных данных из Экселя…
- Описание
- Подробнее
Описание
Раньше как было? Берем обработку по загрузке, достаем из почты экселевский файл, кидаем его где-то на диск, указываем путь к файлу в обработке, нач.-кон. строки (файлы то разные бывают, где начало где конец автоматически не всегда определишь), номера колонок с данными, загружаешь… Короче, возня.
А с классом БуферОбмена из 1С++ все сильно упрощается!
Открываем экселевский файл, копируем в буфер нужные колонки, в обработке жмем «Сформировать», проверяем в ТЗ корректность загрузки, и готово!
Шаблон обработки у меня лежит в шаблонах текста, под нужный документ или справочник все дописывается быстро
// ===============================
Процедура УстановитьАтрибуты(Спр,ТЗ)
Для Инд=2 По ТЗ.КоличествоКолонок() Цикл
Имя=ТЗ.ПолучитьПараметрыКолонки(Инд);
Зн=ТЗ.ПолучитьЗначение(ТЗ.НомерСтроки,Инд);
тСообщ="";
Если ПустоеЗначение(Зн)=0 Тогда
Попытка
Спр.УстановитьАтрибут(Имя,Зн);
тСообщ=тСообщ+СимволТабуляции+Имя+" = "+Зн;
Исключение КонецПопытки;
КонецЕсли;
КонецЦикла;
Сообщить(""+Спр+тСообщ);
КонецПроцедуры //УстановитьАтрибуты
// ===============================
Функция ВернутьЧисло(Стр,Ном)
Возврат Число(СтрЗаменить(СокрЛП(СтрПолучитьСтроку(Стр,Ном)),",","."));
КонецФункции //ВернутьЧисло
// ===============================
Функция ВернутьСтроку(Стр,Ном)
Возврат СокрЛП(СтрПолучитьСтроку(Стр,Ном));
КонецФункции //ВернутьЧисло
//*******************************************
Процедура Сформировать()
Буф=СоздатьОбъект("БуферОбмена");
БуферОбмена=Буф.Получить();
Спр=СоздатьОбъект("Справочник.Товары");
ТЗ =СоздатьОбъект("ТаблицаЗначений");
ТЗ.НоваяКолонка("Товар","Справочник.Товары");
ТЗ.НоваяКолонка("Вес","Число",10,3);
Для Сч=1 По СтрКоличествоСтрок(БуферОбмена) Цикл
Стр = СтрЗаменить(СтрПолучитьСтроку(БуферОбмена,Сч),СимволТабуляции,РазделительСтрок);
Код = СокрЛП(СтрПолучитьСтроку(Стр,1));
Если Спр.НайтиПоРеквизиту("КодПроизводителя",Код,1)=1 Тогда
ТЗ.НоваяСтрока();
ТЗ.Вес = ВернутьЧисло(Стр,2);
Если ПустоеЗначение(ТЗ.Вес)=1 Тогда
ТЗ.УдалитьСтроку(ТЗ.НомерСтроки);
КонецЕсли;
Иначе
Сообщить("Не нашли "+Код,"!");
КонецЕсли;
КонецЦикла;
Если ТЗ.ВыбратьСтроку()<>1 Тогда
Возврат;
КонецЕсли;
НачатьТранзакцию();
ТЗ.ВыбратьСтроки();
Пока ТЗ.ПолучитьСтроку() = 1 Цикл
Если Спр.НайтиЭлемент(ТЗ.Товар)=1 Тогда
УстановитьАтрибуты(Спр,ТЗ);
Спр.Записать();
КонецЕсли;
КонецЦикла;
ЗафиксироватьТранзакцию();
КонецПроцедуры
Компоненту 1С++ брать тут http://www.1cpp.ru/images/3/32/Icpp-latest.rar