gifts2017

Загрузка данных (справочник, документ) через буфер обмена

Опубликовал MIK В (mikukrnet) в раздел Программирование - Практика программирования

Первая в мире однокнопочная обработка, мечта юзера!

Расскажу, как я кардинально упростил загрузку разнообразных данных из Экселя...

Раньше как было? Берем обработку по загрузке, достаем из почты экселевский файл, кидаем его где-то на диск, указываем путь к файлу в обработке, нач.-кон. строки (файлы то разные бывают, где начало где конец автоматически не всегда определишь), номера колонок с данными, загружаешь... Короче, возня.

А с классом БуферОбмена из 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


См. также

Подписаться Добавить вознаграждение
Комментарии
1. Владислав Чинючин (vcv) 01.03.10 15:27
Мелочь - а приятно. Плюс.
2. Алексей Плутенко (Noy) 01.03.10 17:13
Плюс за правильную идею.
3. Антон (anton.fly7) 02.03.10 09:26
а класс где мона взять?
хотелось бы попробовать
4. AlexsisIT (Alexsisit) 03.03.10 06:00
класс не скачиваеться ((. кодировка какая-то открываеться и все
5. Николай Полубаров (prolog) 03.03.10 09:40
А возможно что-то подобное в 1C Предприятие 8? :|
6. Павел (Pasha-Buh) 03.03.10 09:47
За идею, может быть очень полезна.
7. MIK В (mikukrnet) 03.03.10 10:36
(4) Качаете http://www.1cpp.ru/images/3/32/Icpp-latest.rar, устанавливаете, там же на сайте есть документация. Компонента бесподобная, пригодится еще 100 раз
8. MIK В (mikukrnet) 03.03.10 10:38
(5) Видел тут компоненту с исходниками реализующую работу с буфером обмена. Наверняка можно заставить ее работать в 8-ке
9. Степашка Никулин (Styvi) 17.03.10 18:58
Не пользуюсь буфером (нет возможности при нашем объёме данных), но вещь полезная :)
Плюс...
10. MIK В (mikukrnet) 19.03.10 14:05
А как тут раскрашивать текст?

В каментах - легко, а в статье?
11. Алексей Чухланцев (AvalonE2008) 02.04.10 10:03
И все таки про 8-ку ответа не последовало. Никто не сталкивался?