Имя: Пароль:
1C
 
Загрузка, отбор загружаемого файла в список значений!
,
0 anisa8310
 
08.08.14
13:21
Всем привет!
Процедура ПрочитатьExcelПоставщики()
    ExcelApplication    = NewExcelApplication();    // Открываем соединение, получаем Excel.Application

        // Проверяем наличие COM объекта
    Если ExcelApplication = Неопределено Тогда
        Возврат
    КонецЕсли;

    Версия                = Лев(ExcelApplication.Version,Найти(ExcelApplication.Version,".")-1);    // версия EXCEL
    Book                = ExcelApplication.WorkBooks.Open(ФайлПоставщикиEXCEL);                    // открываем файл
    SheetsCount            = Book.WorkSheets.Count;                                                // получаем количество листов
    Sheet                = Book.WorkSheets(1);                                                    // получаем указанный лист
    ИмяЛиста            = Book.WorkSheets(1).Name;                                                // имя листа
    
        // Определяем количество строк и колонок в зависимости от версии Excel
    Если Версия = "8" Тогда
        КонечнаяКолонка        = Sheet.Cells.CurrentRegion.Columns.Count;
        КонечнаяСтрока        = Sheet.Cells.CurrentRegion.Rows.Count;
    Иначе
        КонечнаяКолонка        = Sheet.Cells.SpecialCells(11).Column;
        КонечнаяСтрока        = Sheet.Cells.SpecialCells(11).Row;
    КонецЕсли;

    НачальнаяСтрока            = 3; // Начальная строка
    НачальнаяКолонка        = 1; // Начальная колонка

        // Проверка заполненности листа
    Если КонечнаяСтрока <= 1 И КонечнаяКолонка <= 1 Тогда
        Сообщить(НСтр("ru = 'Лист №1: не содержит данных.'"), СтатусСообщения.Внимание);
        сзСообщения.Добавить(НСтр("ru = 'Лист №1: не содержит данных.'"), ТекущаяДата());
        QuitExcelApplication(ExcelApplication, Book); // закрываем соединение
        Возврат; // В случае ошибки возвращаем пустую таблицу значений
    КонецЕсли;

        // Считываем диапазоны данных с заголовками
    ДиапазонДанных            = Sheet.Range(Sheet.Cells(НачальнаяСтрока, НачальнаяКолонка), Sheet.Cells(КонечнаяСтрока, КонечнаяКолонка));
    СтрокДиапазона            = ДиапазонДанных.Rows.Count;

    тзТмпПоставщики            = Новый ТаблицаЗначений;                                        // Таблица значений, в которую будут записываться поставщики
    МассивИменКолонок        = Новый Массив;                                                    // Массив с именами колонок
    тзТмпПоставщики.Колонки.Добавить("НомерСтроки", Новый ОписаниеТипов("Число"), "№", 4);    // Добавляем колонку "Номер строки" в таблицу поставщиков

        // Формируем колонки в таблицах
    Для Колонка = 1 ПО КонечнаяКолонка Цикл
        МассивИменКолонок.Добавить(Колонка);

            // Пропускаем скрытые колонки
        Если ДиапазонДанных.Columns(Колонка).Hidden Тогда
            Продолжить;
        КонецЕсли;

        ИмяКолонки            = "К_" + Колонка;
        ЗаголовокКолонки    = Sheet.Cells(НачальнаяСтрока-1, Колонка).Value;                // Заголовок колонки из 1-ой строки
        тзТмпПоставщики.Колонки.Добавить(ИмяКолонки, , ЗаголовокКолонки);
    КонецЦикла;

        // Формируем строки в тзТмпПоставщики
    ДиапазонДанных    = ДиапазонДанных.Value;
    нСтроки            = НачальнаяСтрока - 1;
    
    
    Для НомерСтроки = 1 ПО СтрокДиапазона Цикл
        нСтроки                    = нСтроки + 1;
        НоваяСтрока                = тзТмпПоставщики.Добавить();
        НоваяСтрока.НомерСтроки    = нСтроки;

        Для НомерКолонки = 1 ПО КонечнаяКолонка Цикл
            ИмяКолонки    = "К_" + МассивИменКолонок[НомерКолонки-1];
            Колонка        = тзТмпПоставщики.Колонки.Найти(ИмяКолонки);
                // Если имена скрытых колонок отсутствуют в массиве
            Если Колонка = Неопределено Тогда
                Продолжить;
            КонецЕсли;

            ЗначениеЯчейки = Формат(ДиапазонДанных.GetValue(НомерКолонки, НомерСтроки), "ЧГ=0");        // Считывание данных в соответствии с их типом

            Если ЗначениеЗаполнено(ЗначениеЯчейки) Тогда
                НоваяСтрока[ИмяКолонки] = ЗначениеЯчейки;
            КонецЕсли;
        КонецЦикла;
    КонецЦикла;
     тзПоставщики.Загрузить(тзТмпПоставщики);
    
    // Сохраняем получившуюся таблицу в тзПоставщики
    
    QuitExcelApplication(ExcelApplication, Book);                                                // Закрываем соединение

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




Но в этом файле есть имя поставщика(контрагента) который имеет реквизит"Освобождать от НДС" -булево, как мне в этой процедуре отбор сделать с тзПоставщики, если  в файле только имя контрагента и номер колонки 15, признака освобождения от НДС в файле нет...
1 User_Agronom
 
08.08.14
13:22
Конструкцию
Если <условие> тогда

...

Иначе

...

КонецЕсли;

не предлагать?
2 mexanik_96
 
08.08.14
13:24
Перед тзПоставщики.Загрузить(тзТмпПоставщики) проверить в базе по наличию поставщика с отбором по реквизиту
3 anisa8310
 
08.08.14
13:25
(2) ПоставщикНДСник=Справочники.Контрагенты.НайтиПоНаименованию("К_15");
        ПоставщикНДСник.ОсвобождениеОтНДС;
4 anisa8310
 
08.08.14
13:26
(1) Предлагать не пойму как найти таких и ещё выгрузить тех токль у кого этот признак ложь.
5 anisa8310
 
08.08.14
13:26
Файл весь читает а условие никак не получается
6 mexanik_96
 
08.08.14
13:26
признак ложь то где в 1с?
7 anisa8310
 
08.08.14
13:27
(2) КАк? вот так?ПоставщикНДСник=Справочники.Контрагенты.НайтиПоНаименованию("К_15");
        ПоставщикНДСник.ОсвобождениеОтНДС;
8 anisa8310
 
08.08.14
13:27
К_15 -содержит имя контрагента
9 mexanik_96
 
08.08.14
13:28
ну дык ищи по наименованию не ("К_15") А где К_15 = ЗначениеЯчейки
10 anisa8310
 
08.08.14
13:28
(6) тех кто не имеет такой галочки - Освобождать от НДС , чтоб потом документ загрузить а счет фактуру не формировать
11 anisa8310
 
08.08.14
13:30
(9) Обработка.Загрузка_данных_FDD_Excel1.Форма.Форма.Форма(859,63)}: Переменная не определена (К_15)
        ПоставщикНДСник=Справочники.Контрагенты.НайтиПоНаименованию(<<?>>К_15); (Проверка: Толстый клиент (обычное приложение))
Программист всегда исправляет последнюю ошибку.