gifts2017

Универсальная загрузка из файла (без разрывов станиц)

Опубликовал Матти Нюкянен (Nykyanen) в раздел Программирование - Практика программирования

В реальной жизни документы, которые присылаю в электронном виде сформированных в других информационных системах, в формате для печати на принтер (вставлены разрывы страниц, пустые строки, промежуточные итоги, шапки таблиц на новых листах и тд и тп).
Загружает В Справочники, Табличные части документов, Регистр сведений.

Конечно, есть много статей в интернете как загрузить из файлов различных форматов в табличную часть документа. Даже 1С на диске ИТС «\1CIts\EXE\EXTREPS\UNIREPS81\UploadFromTableDocument.epf». Но обычно все они оторваны от жизни или требуют дополнительные ручные манипуляции.

 

Инструкция по доработке обработки от 1С.

 

1. Добавляем кнопку на форме, например, «УбратьРазрывы». В обработчик «нажатия» вставляем текст и добавляем свою процедуру в модуле формы:

 
Процедура КоманднаяПанельТабличногоДокументаУбратьРазрывы(Кнопка)
        ПерваяСтрока = ПерваяСтрокаДанныхТабличногоДокумента;
        ТабличныйДокумент = ЭлементыФормы.ТабличныйДокумент;
        КоличествоСтрок = 999;         //Максимальная строка в документе
        КоличествоКолонок = 255;       //Максимальная колонка в документе 
        КолонкаНумерацииСписок = Новый Массив;
        КолонкаНумерации = 0;
        А = 1;
        
        Пока КолонкаНумерации = 0 Цикл 
               ПоискКолонкиНумерации(ТабличныйДокумент, ПерваяСтрока + А - 1, А, КолонкаНумерацииСписок);
               Если КолонкаНумерацииСписок.Количество() = 0 Тогда 
                       Прервать;                      
               ИначеЕсли КолонкаНумерацииСписок.Количество() = 1 Тогда 
                       КолонкаНумерации = КолонкаНумерацииСписок[0];
                       Прервать;
               КонецЕсли;
               А = А + 1
        КонецЦикла;;
        
        Если КолонкаНумерацииСписок.Количество() = 0 Тогда 
               Сообщить("Не удалось определить колонку нумерации.");
               Возврат;
        Иначе 
               КолонкаНумерации = КолонкаНумерацииСписок[0];
               //Сообщить("Колонка нумерации = " + КолонкаНумерации);
        КонецЕсли;
        
        ТаблицаРазрывов = Новый ТаблицаЗначений;
        ТаблицаРазрывов.Колонки.Добавить("НачалоРазрыва");
        ТаблицаРазрывов.Колонки.Добавить("КонецРазрыва");
        ТекущаяСтрока = 1;
        НачалоРазрыва = 0;
        КонецРазрыва = 0;
        
        Для А = ПерваяСтрока По КоличествоСтрок Цикл 
               Попытка
                       ТекущаяЯчейка = Число(ТабличныйДокумент.Область("r" + А + "c" + КолонкаНумерации).Текст);      
               Исключение
                       Если НачалоРазрыва = 0 Тогда 
                               НачалоРазрыва = А;     
                       КонецЕсли;
               КонецПопытки;
               
               Если ТекущаяЯчейка = ТекущаяСтрока Тогда 
                       Если НачалоРазрыва <> 0 Тогда 
                               КонецРазрыва = А - 1;
                               Строка = ТаблицаРазрывов.Добавить();
                               Строка.НачалоРазрыва = НачалоРазрыва;
                               Строка.КонецРазрыва = КонецРазрыва;
                               НачалоРазрыва = 0;
                       КонецЕсли;
                       ТекущаяСтрока = ТекущаяСтрока + 1;                           
               КонецЕсли;
        КонецЦикла;
        
        Если ТекущаяСтрока <> ТекущаяЯчейка Тогда 
               Строка = ТаблицаРазрывов.Добавить();
               Строка.НачалоРазрыва = НачалоРазрыва;
               Строка.КонецРазрыва = 0;
        КонецЕсли;     
        
        Если ТаблицаРазрывов.Количество() <> 0 Тогда 
               ТабличныйДокумент2 = Новый ТабличныйДокумент;
               Начало = 1;
               Для Каждого Элемент Из ТаблицаРазрывов Цикл 
                       Секция = ТабличныйДокумент.ПолучитьОбласть("R" + Начало + ":R" + (Элемент.НачалоРазрыва - 1));
                       ТабличныйДокумент2.Вывести(Секция);
                       Начало = Элемент.КонецРазрыва + 1;
               КонецЦикла;
               ТабличныйДокумент.Очистить();
               Секция = ТабличныйДокумент2.ПолучитьОбласть("R1:R" + (ПерваяСтрока - 1 + ТекущаяСтрока - 1));
               ТабличныйДокумент.Вывести(Секция);
        КонецЕсли;
КонецПроцедуры
 
Процедура ПоискКолонкиНумерации(ТабличныйДокумент, ПерваяСтрока, Значение, КолонкаНумерацииСписок)
        КолонкаНумерацииСписок2 = Новый Массив;
        
        Для а = 1 По 100 Цикл 
               Попытка
                       ТекущаяЯчейка = Число(ТабличныйДокумент.Область("r" + ПерваяСтрока + "c" + а).Текст);       
               Исключение
                       Продолжить;
               КонецПопытки;
               
               Если ТекущаяЯчейка = Значение Тогда 
                       КолонкаНумерацииСписок2.Добавить(а);                         
               КонецЕсли;
        КонецЦикла;
        
        Если КолонкаНумерацииСписок.Количество() = 0 Тогда 
               КолонкаНумерацииСписок = КолонкаНумерацииСписок2;
        Иначе 
               КолонкаНумерацииСписок3 = Новый Массив;
               Для Каждого Элемент из КолонкаНумерацииСписок2 Цикл 
                       Строка = КолонкаНумерацииСписок.Найти(Элемент);
                       Если Строка <> Неопределено Тогда 
                               КолонкаНумерацииСписок3.Добавить(Строка);     
                       КонецЕсли;
               КонецЦикла;
               КолонкаНумерацииСписок.Очистить();
               КолонкаНумерацииСписок = КолонкаНумерацииСписок3;
        КонецЕсли;
КонецПроцедуры
 
 

2. Инструкция по эксплуатации стандартной обработки http://infostart.ru/public/97416/

 

Скачать файлы

Наименование Файл Версия Размер
ЗагрузкаДанныхИзТД81+.epf 23
.epf 62,21Kb
27.06.12
23
.epf 62,21Kb Скачать
ЗагрузкаДанныхИзТД82+.epf 9
.epf 64,36Kb
28.06.12
9
.epf 64,36Kb Скачать

См. также

Подписаться Добавить вознаграждение
В этой теме еще нет сообщений.