Имя: Пароль:
1C
1С v8
8.1 как из экселя в ТабЧ перенести строки и упорядочить?
,
0 Artemy55
 
01.09.15
07:29
Добрый день.
Как примерно в 8.1 перенести из экселя строки во временную таблицу, упорядочить и потом разнести в разные таб.части нескольких документов.
1 Maniac
 
01.09.15
07:30
Помочь с платной разработкой?
2 Maniac
 
01.09.15
07:30
а что разнести то? И зачем.
3 Cube
 
01.09.15
07:30
(0) Вот здесь http://www.forum.mista.ru/find.php напиши то же самое и нажми "Найти".
7 Maniac
 
01.09.15
07:37
(0)

1) Выгружаешь ТЗ где все данные во временную таблицу.

Объект.ОбработкаЗаказаПокупателя.Сортировать("Поле_Контрагент,Размещение,КлючСтроки");
    
    ТаблицаРазделения = Объект.ОбработкаЗаказаПокупателя.Выгрузить();



2) Сворачиваешь ее по ключевым полям по которым делаешь разделение

    ТаблицаРазделения.Свернуть("Поле_Контрагент");

3) теперь бежишь циклом по ТЗ с ключевыми полями.

Получаешь значения строки и используешь Отбор и НайтиСтроки из всей общей таблицы где все данные.

Для Каждого Шапка Из ТаблицаРазделения Цикл        
        ПараметрыОтбора = Новый Структура;
        ПараметрыОтбора.Вставить("Поле_Контрагент", Шапка.Поле_Контрагент);
        
        ТаблЧасть = Объект.ОбработкаЗаказаПокупателя.НайтиСтроки(ПараметрыОтбора);


4) в этом цикле создаешь документ а табличную часть заполняешь из полученных данных

ТаблЧасть = Объект.ОбработкаЗаказаПокупателя.НайтиСтроки(ПараметрыОтбора);
8 Maniac
 
01.09.15
07:39
Полная функция которая создает массив документов из одной большой таблицы, в которой например нужно создать множество документов по колонке Контрагент.

Могут быть и множество полей по которым создавать больше документов. Для этого просто сворачиваешь общую таблицы по большему количеству полей и в методе НайтиСтроки используешь в отборе несколько ключевых полей.





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

        НеПересчитыватьСуммуЕслиНетЦены = Ложь;
        
        Для Каждого Стр из ТаблЧасть Цикл    
            Если НЕ ЗначениеЗаполнено(Стр.Номенклатура) Тогда
                Продолжить;
            КонецЕсли;
            
            Если Стр.Количество = 0 Тогда
                Продолжить;
            КонецЕсли;
            
            СтрокаТЧ = НовыйДокумент.Товары.Добавить();
            СТрокаТЧ.ВариантОбеспечения = ВариантОбеспечения;
            СтрокаТЧ.Номенклатура     = Стр.Номенклатура;
            СтрокаТЧ.Характеристика   = Стр.ХарактеристикаНоменклатуры;
            СтрокаТЧ.Упаковка         = Стр.Упаковка;
            СтрокаТЧ.Количество       = Стр.Количество;
            
            КоэффициентУпаковки = ПолучитьКоэффициентУпаковки(Стр.Упаковка);
            
            СтрокаТЧ.КоличествоУпаковок = Стр.Количество / КоэффициентУпаковки;
            СтрокаТЧ.ВидЦены          = Объект.ВидЦенНоменклатурыПродажи;
            СтрокаТЧ.Склад            = ?(ЗначениеЗаполнено(Стр.Размещение),Стр.Размещение,ОсновнойСклад);
            СтрокаТЧ.ДатаОтгрузки     = ДатаОтгрузки;
            
            Если Стр.Поле_Сумма > 0 Тогда    
                НеПересчитыватьСуммуЕслиНетЦены = Истина;
                
                СтрокаТЧ.Сумма = Стр.Поле_Сумма;
                СтрокаТЧ.Цена  = Стр.Поле_Сумма/СтрокаТЧ.КоличествоУпаковок;
            Иначе
                СтрокаТЧ.Цена  = Стр.Поле_ЦенаПродажи;        
                СтрокаТЧ.Сумма = Стр.Поле_ЦенаПродажи*СтрокаТЧ.КоличествоУпаковок;
            КонецЕсли;
        КонецЦикла;
        
        СтруктураПересчетаСуммы = ОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруПересчетаСуммыНДСВСтрокеТЧ(НовыйДокумент);
        
        СтруктураДействий = Новый Структура;
        СтруктураДействий.Вставить("ЗаполнитьСтавкуНДС", НовыйДокумент.НалогообложениеНДС);
        СтруктураДействий.Вставить("ЗаполнитьСодержание", ОбработкаТабличнойЧастиКлиентСервер.ПолучитьСтруктуруЗаполненияСодержанияУслугиВСтрокеТЧ(НовыйДокумент, Ложь));
        СтруктураДействий.Вставить("ПересчитатьКоличествоЕдиниц");
        СтруктураДействий.Вставить("ПересчитатьСуммуНДС", СтруктураПересчетаСуммы);
        СтруктураДействий.Вставить("ПересчитатьСуммуСНДС", СтруктураПересчетаСуммы);
        
        Если НЕ НеПересчитыватьСуммуЕслиНетЦены Тогда
            СтруктураДействий.Вставить("ПересчитатьСумму");
        КонецЕсли;
        
        ОбработкаТабличнойЧастиСервер.ОбработатьТЧ(НовыйДокумент.Товары, СтруктураДействий,Неопределено);
        
        НовыйДокумент.ЗаполнитьЭтапыГрафикаОплаты();
        
        НовыйДокумент.СуммаДокумента = НовыйДокумент.Товары.Итог("Сумма");
        
        НовыйДокумент.Записать();
        МассивДокументов.Добавить(НовыйДокумент.Ссылка);
        
    КонецЦикла;
    
    Возврат МассивДокументов;
    
КонецФункции
10 aka AMIGO
 
модератор
01.09.15
09:15
(9) реклама на Мисте платная.
11 Vladal
 
модератор
01.09.15
10:33
В тематике флуд запрещен.