Имя: Пароль:
1C
 
Внешняя обработка.
0 dos
 
02.12.18
22:07
Помогите плиз начинающему или подскажите ход действий как сделать надо. Есть задание:Создать внешнюю обработку в базе  которая будет выводить в табличном документе 1С (через макет) остаток количества и счет по заданному товару (из *.xls) на определенную дату.

Документ *.xls:
В 1 колонку  с 1 строки. Содержимое - "КодТовара".

Форма:
-Поле выбора файла *.xls;
-дата;
-кнопка.
Заранее спасибо огромное.
1 Полбатона
 
02.12.18
22:10
Это задание на собеседование?
2 dos
 
02.12.18
22:11
Тут просто печатную форму надо сделать?
3 dos
 
02.12.18
22:11
Нет...
4 dos
 
02.12.18
22:14
Я с начало сделал процедуру которая считывает данные из Excel...через con объекты Вроде работает что то выводит. Но вот как связать остальное я хз
5 dos
 
02.12.18
22:17
Как привязать чтобы в макете выводилось? Одно дело из справочника или документа это сделать понятно как. А из Excel не ясно как.
6 hhhh
 
02.12.18
22:39
(5) ну, ничем не отличается. Что из справочника берешь данные, что из excel. Главное, что у тебя эти данные есть. На втором этапе выводишь их в макет.
7 dos
 
03.12.18
11:57
как сделать выбор сортировки по дате?

Процедура ИмяФайлаНачалоВыбора(Элемент, СтандартнаяОбработка)
    
    ДиалогВыбора = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
    ДиалогВыбора.Заголовок = "Выберите файл";
    
    Если ДиалогВыбора.Выбрать() Тогда
        ИмяФайла = ДиалогВыбора.ПолноеИмяФайла;
    КонецЕсли;
    
КонецПроцедуры

Процедура ПрочитатьНажатие(Элемент)
    
        Таблица.Очистить();
    Таблица.Колонки.Очистить();
    ЭлементыФормы.Таблица.Колонки.Очистить();
    
    

    Попытка
        Excel = Новый COMОбъект("Excel.Application");
        Excel.WorkBooks.Open(ИмяФайла);
        Состояние("Обработка файла Microsoft Excel...");
    Исключение
        Сообщить("Ошибка при открытии файла с помощью Excel! Загрузка не будет произведена!");
        Сообщить(ОписаниеОшибки());
        Возврат;
    КонецПопытки;
        
    Попытка
                Excel.Sheets(1).Select();  
    Исключение
                Excel.ActiveWorkbook.Close();     
        Excel = 0;
        Сообщить("Файл "+Строка(ИмяФайла)+" не соответствует необходимому формату! Первый лист не найден!");
        ОтменитьТранзакцию();
        Возврат;
    КонецПопытки;    
    

    
    
    Версия = Лев(Excel.Version,Найти(Excel.Version,".")-1);
    Если Версия = "8" тогда
        ФайлСтрок   = Excel.Cells.CurrentRegion.Rows.Count;
        ФайлКолонок = Макс(Excel.Cells.CurrentRegion.Columns.Count, 13);
    Иначе
        ФайлСтрок   = Excel.Cells(1,1).SpecialCells(11).Row;
        ФайлКолонок = Excel.Cells(1,1).SpecialCells(11).Column;  
    Конецесли;
    
    
        
    Сч = 1;    
    Пока ЗначениеЗаполнено(Excel.Cells(1, Сч).Text) Цикл
        ИмяКолонки = Excel.Cells(1, Сч).Text;
        ИмяБезПробелов = СтрЗаменить(ИмяКолонки," ","");
        Таблица.Колонки.Добавить(ИмяБезПробелов,,ИмяКолонки);         
        НоваяКолонка = ЭлементыФормы.Таблица.Колонки.Добавить(ИмяБезПробелов, ИмяКолонки);
        НоваяКолонка.Данные = ИмяБезПробелов;
        Сч = Сч + 1;
    КонецЦикла;
    
    
    Для НС = 2 по ФайлСтрок Цикл        
        
        Состояние("Файл "+Строка(ИмяФайла)+": Обрабатывается первый лист "+Строка(Формат(?(ФайлСтрок=0,0,((100*НС)/ФайлСтрок)),"ЧЦ=3; ЧДЦ=0"))+" %");
        
        ОбработкаПрерыванияПользователя();
        
        НоваяСтрока = Таблица.Добавить();        
            
        Для НомерКолонки = 1 по Таблица.Колонки.Количество() Цикл
                        ТекущееЗначение = Excel.Cells(НС, НомерКолонки).Text;
            ИмяКолонки = Таблица.Колонки[НомерКолонки-1].Имя;             
            НоваяСтрока[ИмяКолонки] = ТекущееЗначение;            
        КонецЦикла;
        
    КонецЦикла;  
    
    

    
КонецПроцедуры


Функция ЗагрузитьExcelФайлВМассивЛистов(ИмяФайла, ЗНАЧ СоответствиеФильтраЛистов = Неопределено)

    Перем МассивЛистов;

    МассивЛистов = Новый Массив();

    Эксель    = New COMObject("Excel.Application");
    Эксель.visible = false;
    Книга = Эксель.Workbooks.Open(ИмяФайла);

    Для НомерЛиста = 1 To Книга.Sheets.Count Цикл
        Лист = Книга.Sheets(НомерЛиста);
        ИмяЛиста = Лист.Name;
        Если СоответствиеФильтраЛистов <> Неопределено Тогда
            Если СоответствиеФильтраЛистов[НомерЛиста] = Неопределено
                И СоответствиеФильтраЛистов[ИмяЛиста] = Неопределено
            Тогда
                Продолжить; //Если лист грузить не надо
            КонецЕсли;
        КонецЕсли;

        КоличествоСтрок = Лист.UsedRange.Rows.Count;
        КоличествоКолонок = Лист.UsedRange.Columns.Count;


        Ячейки = Новый Массив(КоличествоСтрок, КоличествоКолонок);
        Для Строка = 1 По КоличествоСтрок Цикл
            Для Колонка = 1 По КоличествоКолонок Цикл
                Ячейки[Строка - 1][Колонка - 1] = Лист.Cells(Строка, Колонка).Value;
            КонецЦикла;
        КонецЦикла;

        СтруктураЛиста = Новый Структура();
        СтруктураЛиста.Вставить("Строк", КоличествоСтрок);
        СтруктураЛиста.Вставить("Колонок", КоличествоКолонок);
        СтруктураЛиста.Вставить("Ячейки", Ячейки);
        СтруктураЛиста.Вставить("Номер", НомерЛиста);
        СтруктураЛиста.Вставить("Имя", ИмяЛиста);

        МассивЛистов.Добавить(СтруктураЛиста);

    КонецЦикла;

    Книга.Close();

    Возврат МассивЛистов;



КонецФункции
8 hhhh
 
03.12.18
12:18
надо определиться какая из колонок у вас колонка даты.