Имя: Пароль:
1C
1С v8
1с выгрузка в excel по меткам
, ,
0 Олеся92
 
23.12.14
10:55
Есть обработка в которой постоянно нужно указывать с какой по какую строку нужно строку нужно выгружать табличный документ (например  с 7 по 122 ) Нажимаем загрузить и внешняя таблица выгружается в справочник.
Можно ли как то сделать так, что бы выгрузка проходила по меткам например если во внешней таблице написать Старт ->Интересующий нас фрагмент таблицы<- Стоп . И когда мы зайдем в обработку нажмем загрузить. у нас загрузится тот самый, "Интересующий нас фрагмент таблицы". ?
4 Олеся92
 
23.12.14
11:05
Объект.НастройкиЭксель.Очистить();
    
    СтрокаНастройки=Объект.НастройкиЭксель.Добавить();
    СтрокаНастройки.Параметр  = "Номер листа";
    СтрокаНастройки.Значение  = 1;
    
    СтрокаНастройки=Объект.НастройкиЭксель.Добавить();
    СтрокаНастройки.Параметр  = "Первая строка";
    СтрокаНастройки.Значение  = 1; (ПИШЕМ НОМЕР СТРОКИ С КАКОЙ)
    
    СтрокаНастройки=Объект.НастройкиЭксель.Добавить();
    СтрокаНастройки.Параметр  = "Последняя строка";
    СтрокаНастройки.Значение  = 1;(ПИШЕМ НОМЕР СТРОКИ ПО КАКУЮ)
5 Cube
 
23.12.14
11:12
(4) Видишь, уже больше половины дела сделала, осталась самая малость:
- Подключиться к файлу.
- Найти метку "Старт ->" и запомнить номер первой строки.
- Найти метку "<- Стоп" и запомнить номер последней строки.
- Подставить номера первой и последней строки в код (4).
6 Олеся92
 
23.12.14
11:19
(5)Ну так это понятно, просто что место 1 писать то нужно ?
  СтрокаНастройки.Значение  = 1; (ПИШЕМ НОМЕР СТРОКИ С КАКОЙ)
7 Cube
 
23.12.14
11:20
(6) Вопрос понятен, отвечаю: Вместо "1" нужно писать номер строки, следующей за меткой "Старт ->" =))
8 Олеся92
 
23.12.14
11:26
9 Олеся92
 
23.12.14
11:27
Например вот этот загрузить нужно
  СтрокаНастройки=Объект.НастройкиЭксель.Добавить();
    СтрокаНастройки.Параметр  = "Первая строка";
    СтрокаНастройки.Значение  = "Старт";
    
    СтрокаНастройки=Объект.НастройкиЭксель.Добавить();
    СтрокаНастройки.Параметр  = "Последняя строка";
    СтрокаНастройки.Значение  = "Стоп";
Так что ли ?
10 Cube
 
23.12.14
11:32
(9) "Так что ли ?"
Эх, не было бы у тебя фотки, я б давно тебя бросил)))

В "СтрокаНастройки.Значение" надо передать ЧИСЛО, номер строки. А ты что туда пихаешь? :)

Из алгоритма (5) что ты сделала? Ничего... А зря. Иди по пунктам и всё получится.
11 Олеся92
 
23.12.14
11:37
(10)Да я же только учусь так что не судите строго:)
А как написать  алгоритм ? дело в том что "старт" и "стоп" то переменные.  Как сделать так чтобы они автоматически присваивали значение, номер строки, на которой они содержатся
12 Cube
 
23.12.14
11:39
(11) Ты где эту обработку по загрузке взяла-то? :)
13 1976vas
 
23.12.14
11:42
Метки Старт и Стоп сначала надо найти, наверное, потом посмотреть номер, указать что считывать будет с НомерСтарт + 1,а заканчивать НомерСтоп-1
14 Cube
 
23.12.14
11:46
(13) Я рад, что ты сегодня перешел из клана "потребители" в клан "советчики" :)
15 Олеся92
 
23.12.14
11:46
Инфостарт ну я переделала её под управляемые формы и там еще кое что переделала
16 Олеся92
 
23.12.14
11:47
(13) Ну есть пример как это сделать? :)
17 Cube
 
23.12.14
11:49
(15) Ну так переделай ещё: пусть обработка начинает читать файл с первой строки и как найдет метку "Старт ->", то обработка будет записывать данные в документ. А как дойдет до метки "<- Стоп" - перестанет считывать.
18 1976vas
 
23.12.14
11:51
(14) )), плохой бы не дать.
19 Cube
 
23.12.14
11:52
(18) Не ошибается тот, кто ничего не делает. (с)тырено.
20 1976vas
 
23.12.14
11:57
Вот пример кода (не мой, моего начальника) - загрузка накладных, там только нет поиска метки.

Процедура ЗагрузитьДокумент()
        НачатьТранзакцию();
    
    //    СписокФайлов=НайтиФайлы(ПутьКФайлу,"*.xls");
    //    Для каждого текстрока из СписокФайлов Цикл
    ExcelApp = Новый COMОбъект("Excel.Application");
    //    Книга = ExcelApp.Workbooks.Open(текстрока.ПолноеИмя);
    Книга = ExcelApp.Workbooks.Open(Объект.ПутьКФайлу);
    Страница = Книга.Worksheets(1);
    //Сообщить("Загружается файл "+Строка(Объект.ПутьКФайлу));
    НомерСтроки     = 25;
    НомерКолонки = 1;
    Док=Документы.ПоступлениеТоваров.СоздатьДокумент();
    Док.Дата=Объект.ДатаДокумента;
    Док.Контрагент=Объект.Контрагент;
    Док.Организация=Справочники.Организации.НайтиПоНаименованию("ИП Назаров Д.С").Ссылка;
    Док.Магазин=Справочники.Магазины.НайтиПоНаименованию("ИП Назаров Д.С. (Магазин ");
    Док.Склад=Объект.Склад;
    Пока Не ПустаяСтрока(Страница.Cells(НомерСтроки,2).Value) Цикл
        ЕдСтрока=Сокрлп(Страница.Cells(НомерСтроки,14).Value);
        НоменклатураСтрока=Сокрлп(Страница.Cells(НомерСтроки,3).Value);
        Количество=Число(Страница.Cells(НомерСтроки,18).Value);
        //Цена=Число(Страница.Cells(НомерСтроки,26).Value);
        Сумма=Число(Страница.Cells(НомерСтроки,39).Value);
        ШтрихКод = Сокрлп(Страница.Cells(НомерСтроки,8).Value);
                
        Нстрока=Док.Товары.Добавить();
        
        ПоискЕд=Справочники.БазовыеЕдиницыИзмерения.НайтиПоНаименованию(ЕдСтрока);
        Если ПоискЕд=Справочники.БазовыеЕдиницыИзмерения.ПустаяСсылка() Тогда
            Ед=Справочники.БазовыеЕдиницыИзмерения.СоздатьЭлемент();
            Ед.Наименование=ЕдСтрока;
            //Ед.ТипБазовойЕдиницыУпаковки=Перечисления.ТипыЕдиницИзмеренияНоменклатуры.Штучная;
            Ед.Записать();
        Иначе
            Ед=ПоискЕд.ссылка;
        КонецЕсли;
        
        Поиск=Справочники.Номенклатура.НайтиПоНаименованию(НоменклатураСтрока);
        Если Поиск=Справочники.Номенклатура.ПустаяСсылка() Тогда
            Номенклатура=Справочники.Номенклатура.СоздатьЭлемент();
                
            номенклатура.ЕдиницаИзмерения=Ед.ссылка;
            номенклатура.СтавкаНДС=Перечисления.СтавкиНДС.БезНДС;
            номенклатура.Наименование= НоменклатураСтрока;
            номенклатура.НаименованиеПолное= НоменклатураСтрока;
            номенклатура.ВидНоменклатуры=Справочники.ВидыНоменклатуры.НайтиПоНаименованию("товары");
            номенклатура.Записать();
            НаборЗаписей = РегистрыСведений.Штрихкоды.СоздатьМенеджерЗаписи();
            НаборЗаписей.владелец = Номенклатура.Ссылка;
            НаборЗаписей.Штрихкод = Штрихкод;
            НаборЗаписей.ТипШтрихкода = ПланыВидовХарактеристик.ТипыШтрихкодов.EAN13;
            НаборЗаписей.Записать();
        Иначе    
            Номенклатура=поиск.ссылка;
        КонецЕсли;

          Нстрока.Номенклатура =Номенклатура.Ссылка;
           Нстрока.Количество= Количество;
          Нстрока.КоличествоУпаковок=Количество;
          Нстрока.Цена= Окр(Сумма/Количество,2);
          Нстрока.СтавкаНДС=Перечисления.СтавкиНДС.БезНДС;
          Нстрока.Сумма=Сумма;
          Нстрока.Упаковка=Ед;
         НомерСтроки=НомерСтроки+1;    
     КонецЦикла;
    Док.СуммаДокумента=Док.Товары.Итог("Сумма");
    Док.ДатаВходящегоДокумента=Дата(Прав(Страница.Cells(19,16).Value,4),Сред(Страница.Cells(19,16).Value,5,2),Сред(Страница.Cells(19,16).Value,7,2));
    Док.НомерВходящегоДокумента=строка(Страница.Cells(19,12).Value);
    Док.Ответственный=Справочники.Пользователи.НайтиПоНаименованию("Администратор");
    Док.Записать(РежимЗаписиДокумента.Проведение);
Сообщить("Создан документ "+Строка(Док.Ссылка));    
    ExcelApp.Quit();
    ЗафиксироватьТранзакцию();

21 Shrek_yar
 
23.12.14
12:07
(0)Сначало ищи в экселе метки и это будет твой диапазон считывания, потом как обычно
п.с Фотка зачет))
22 Shrek_yar
 
23.12.14
12:09

ВыбФайл = Новый Файл(ИмяФайла);
    Если НЕ ВыбФайл.Существует() или НЕ ЗначениеЗаполнено(Документ) Тогда
        Сообщить("Файл не существует! ил документ");
        Возврат Ложь;
    КонецЕсли;
    
    Попытка
        Excel = Новый COMОбъект("Excel.Application");
        Excel.WorkBooks.Open(ИмяФайла);
        Состояние("Обработка файла...");
        ExcelЛист = Excel.Sheets(НомерЛистаExcel);
    Исключение
        Сообщить("Ошибка. Не получилось прочитать файл.");
        Возврат ложь;
        
    КонецПопытки;
    
    ActiveCell = Excel.ActiveCell.SpecialCells(xlLastCell);
    RowCount = ActiveCell.Row;
    ColumnCount = ActiveCell.Column;
    НомерСтроки = ПерваяСтрока;
    
    ДиапазонДанных = ExcelЛист.Range(ExcelЛист.Cells(1, 1), ExcelЛист.Cells(RowCount, ColumnCount));
    
    // чтение файла эксель по колонкам
    ИскомоеЗначение = СокрЛП(СуммаВРубНазвание);//"сумма в руб.коп.";
    НайденнаЯчейка = ДиапазонДанных.Find(ИскомоеЗначение);
    
    ИскомоеЗначение = "итого";
    КонецТабл =   ДиапазонДанных.Find(ИскомоеЗначение);
    
    
    Попытка
        
        НайденаяСтрока = НайденнаЯчейка.Row;
        ПерваяСтрока = НайденаяСтрока + 1;
        Сообщить("Номер с первой строкой определенный автоматиччески");
        
        НомерКолСуммы = НайденнаЯчейка.Column;
        
    
        
    Исключение
        Сообщить("в файле отсутствует колонка с названием " + ИскомоеЗначение);
        Excel.WorkBooks.Close();
        //ExcelApplication.Application.Quit();
        Excel = Неопределено;
        Возврат ложь;
    КонецПопытки;

23 Shrek_yar
 
23.12.14
12:10
твой код
ДиапазонДанных = ExcelЛист.Range(ExcelЛист.Cells(1, 1), ExcelЛист.Cells(RowCount, ColumnCount));
    
    // чтение файла эксель по колонкам

    ИскомоеЗначение = СокрЛП(СуммаВРубНазвание);//"сумма в руб.коп.";

    НайденнаЯчейка = ДиапазонДанных.Find(ИскомоеЗначение);
24 dk
 
23.12.14
12:11
никогда не понимал эти начтрока, констрока
---
пусть пользователь удалит перед загрузкой ненужные строки
25 Олеся92
 
23.12.14
12:15
(23)спасибо :) а его в какую процедуру пихать при открытии?

вот модуль  обработки

&НаКлиенте
Процедура ПриОткрытии(Отказ)
    //список справочников базы
    ЭтаФорма.Элементы.Справочник.СписокВыбора.Очистить();
    
    МассивСправочников=ПолучитьСписокСправочников();
    
    Для Каждого Спр Из МассивСправочников Цикл
        ЭтаФорма.Элементы.Справочник.СписокВыбора.Добавить(Спр);
    КонецЦикла;
    
    //добавить основные параметры
    Объект.НастройкиЭксель.Очистить();
    
    СтрокаНастройки=Объект.НастройкиЭксель.Добавить();
    СтрокаНастройки.Параметр  = "Номер листа";
    СтрокаНастройки.Значение  = 1;
    
    СтрокаНастройки=Объект.НастройкиЭксель.Добавить();
    СтрокаНастройки.Параметр  = "Первая строка";
    СтрокаНастройки.Значение  = 1;
     Объект.НастройкиЭксель.НайтиСтроки(Старт)         
            
    СтрокаНастройки=Объект.НастройкиЭксель.Добавить();
    СтрокаНастройки.Параметр  = "Последняя строка";
    СтрокаНастройки.Значение  = 1;

Объект.СоответствиеПолей[0].КолонкаВЭксель = 4;
Объект.СоответствиеПолей[1].КолонкаВЭксель=  5 ;
Объект.СоответствиеПолей[2].КолонкаВЭксель = 6 ;
    
КонецПроцедуры

&НаСервере
Функция ПолучитьСписокСправочников()
    
    МассивСправочников=Новый Массив;
    
    Для Каждого Спр Из Метаданные.Справочники Цикл
        МассивСправочников.Добавить(Спр.Имя);
    КонецЦикла;
    
    Возврат МассивСправочников;
    
КонецФункции

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

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

&НаКлиенте
Процедура СправочникПриИзменении(Элемент)
    
    
    Объект.СоответствиеПолей.Очистить();
    
    
    Возврат;
    
    СписокРеквизитов1=ПолучитьРеквизитыСправочника();
    
    Для Каждого Рекв Из СписокРеквизитов1 Цикл
        НоваяСтр=Объект.СоответствиеПолей.Добавить();
        НоваяСтр.РеквизитВ1С=Рекв;
    КонецЦикла;

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

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

&НаСервере
Функция ПолучитьРеквизитыСправочника()
    
    Рекв=Новый Массив;
    Для Каждого Стр Из Метаданные.Справочники[Объект.ТекСправочник].Реквизиты Цикл
     // Для Каждого Стр Из Метаданные.Справочники.СпецификацияТК.ТабличныеЧасти.ТаблицаSMD.Реквизиты Цикл

        Рекв.Добавить(Стр.Имя);
    КонецЦикла;
        
    Возврат Рекв;
    
КонецФункции

&НаКлиенте
Процедура Загрузить(Команда)
    Элементы.Загрузить.ЦветФона=WebЦвета.Зеленый;    

    // Вставить содержимое обработчика.
    Если Не ЗначениеЗаполнено(Объект.ПутьКФайлу) Тогда
        Сообщить("Не выбран файл для загрузки!",СтатусСообщения.ОченьВажное);
        Возврат;
    КонецЕсли;
    
    НомерЛиста=Объект.НастройкиЭксель[0].Значение;
    Если Не ЗначениеЗаполнено(НомерЛиста) Тогда
        Сообщить("На закладке *Настройки эксель* не выбран номер листа",СтатусСообщения.ОченьВажное);    
        Возврат;    
    КонецЕсли;
    
    ПерваяСтрока=Объект.НастройкиЭксель[1].Значение;
    Если Не ЗначениеЗаполнено(ПерваяСтрока) Тогда
        Сообщить("На закладке *Настройки эксель* не выбрана первая строка",СтатусСообщения.ОченьВажное);    
        Возврат;    
    КонецЕсли;
    
    ПоследняяСтрока=Объект.НастройкиЭксель[2].Значение;
    Если Не ЗначениеЗаполнено(ПоследняяСтрока) Тогда
        Сообщить("На закладке *Настройки эксель* не выбрана последняя строка",СтатусСообщения.ОченьВажное);    
        Возврат;    
    КонецЕсли;
    
    Если Не ЗначениеЗаполнено(Объект.ТекСправочник) Тогда
        Сообщить("Не выбран справочник!",СтатусСообщения.ОченьВажное);
        Возврат;
    КонецЕсли;

    ИмяОбъекта = Объект.ТекСправочник;
    
    //ФайлЭксель = ПолучитьCOMОбъект(Объект.ПутьКФайлу);
    //Лист = ФайлЭксель.Worksheets(НомерЛиста);
    
    ПрочитатьИСоздатьЭлементы(НомерЛиста,ПерваяСтрока,ПоследняяСтрока);
    //ПрочитатьИСоздатьЭлементы();
    
КонецПроцедуры

&НаСервере
Функция ЗаписатьСпецификацию()
    ЭлементСпец = Объект.ТекСправочник.ПолучитьОбъект();
    ЭлементСпец.ТаблицаSMD.Очистить();
    Для каждого Стр Из тзExcel Цикл
        НС = ЭлементСпец.ТаблицаSMD.Добавить();
        Для Каждого СтрС Из Объект.СоответствиеПолей Цикл
            НС[СтрС.РеквизитВ1С]    = Стр["Реквизит" + (СтрС.ПолучитьИдентификатор() + 1)];
        КонецЦикла;
    КонецЦикла;
    Попытка
        ЭлементСпец.Записать();
    Исключение
        Сообщение = Новый СообщениеПользователю;
        Сообщение.Текст = ОписаниеОшибки();
        Сообщение.Сообщить();
        Возврат Ложь;
    КонецПопытки;
    Возврат Истина;
КонецФункции


&НаКлиенте
Процедура ПрочитатьИСоздатьЭлементы(НомерЛиста,ПерваяСтрока,ПоследняяСтрока)
    
    ФайлЭксель = ПолучитьCOMОбъект(Объект.ПутьКФайлу);
    Лист = ФайлЭксель.Worksheets(НомерЛиста);
   Флаг=0;
Для ТекСтр = ПерваяСтрока По ПоследняяСтрока Цикл
      НС = тзExcel.Добавить();
        Для Каждого Стр Из Объект.СоответствиеПолей Цикл
   Если Не ЗначениеЗаполнено(Стр.КолонкаВЭксель) Тогда
                Продолжить;
            КонецЕсли;

   //         Попытка
                ТекЗначение = Лист.Cells(ТекСтр, Стр.КолонкаВЭксель).Value;
                  НС["Реквизит" + (Стр.ПолучитьИдентификатор() + 1)] = ТекЗначение;
                
          КонецЦикла;
    КонецЦикла;
   Ошибки = ЗаписатьСпецификацию();
КонецПроцедуры

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
    ЗаполнитьРеквизитыСправочника();
КонецПроцедуры
26 Любопытная
 
23.12.14
12:15
Вот хитрая какая. Все за нее сделали
27 Cube
 
23.12.14
12:16
(26) Удачное фото решает много вопросов здесь :)
28 Любопытная
 
23.12.14
12:17
(27) не всегда. А впрочем... я не знаю)
29 Cube
 
23.12.14
12:17
(26) Ты сама-то тут недавно у какого-то парня конфу качнула, по удаленке подключилась, разобралась и помогла. Всего-то навсего надо было всплакнуть в твою жилетку и ты уже поплыла... :)))
30 Любопытная
 
23.12.14
12:19
(29) Неа, со мной проходит другой фокус, а на слезы я реагирую нервно. Могу и в дыню дать, если дотянусь)
31 Cube
 
23.12.14
12:22
(30) Что вижу, то пою. За что купил - за то продал :)
32 Shrek_yar
 
23.12.14
12:23
(25)
В твой код
СтрокаНастройки=Объект.НастройкиЭксель.Добавить();
    СтрокаНастройки.Параметр  = "Первая строка";
    СтрокаНастройки.Значение  = 1;
Объект.НастройкиЭксель.НайтиСтроки(Старт)    

Объект.НастройкиЭксель.НайтиСтроки(Старт)

В модуле обработке, в процедуре поиска "НайтиСтроки" - что это за процедура????
А так

СтрокаНастройки.Параметр  = "Первая строка";
// Тут найти значение параметра
ДиапазонДанных = ExcelЛист.Range(ExcelЛист.Cells(1, 1), ExcelЛист.Cells(RowCount, ColumnCount));
ИскомоеЗначение = СтрокаНастройки.Параметр;
НайденнаЯчейка = ДиапазонДанных.Find(ИскомоеЗначение);
СтрокаНастройки.Значение  = НайденнаЯчейка.Row+1;
35 Олеся92
 
23.12.14
12:35
(32) Спасибо :))
    СтрокаНастройки=Объект.НастройкиЭксель.Добавить();
    СтрокаНастройки.Параметр  = "Первая строка";
    ДиапазонДанных = ExcelЛист.Range(ExcelЛист.Cells(1, 1), ExcelЛист.Cells(RowCount, ColumnCount));
    Старт = СтрокаНастройки.Параметр;
    НайденнаЯчейка = ДиапазонДанных.Find(Старт);
    СтрокаНастройки.Значение  = НайденнаЯчейка.Row+1;


СтрокаНастройки=Объект.НастройкиЭксель.Добавить();
    СтрокаНастройки.Параметр  = "Последняя строка";
ДиапазонДанных = ExcelЛист.Range(ExcelЛист.Cells(1, 1), ExcelЛист.Cells(RowCount, ColumnCount));

Пишет такие дела :{Форма.ФормаУпр.Форма(22,19)}: Переменная не определена (ExcelЛист)
    ДиапазонДанных = <<?>>ExcelЛист.Range(ExcelЛист.Cells(1, 1), ExcelЛист.Cells(RowCount, ColumnCount)); (Проверка: Тонкий клиент)
{Форма.ФормаУпр.Форма(22,35)}: Переменная не определена (ExcelЛист)
    ДиапазонДанных = ExcelЛист.Range(<<?>>ExcelЛист.Cells(1, 1), ExcelЛист.Cells(RowCount, ColumnCount)); (Проверка: Тонкий клиент)
{Форма.ФормаУпр.Форма(22,58)}: Переменная не определена (ExcelЛист)
    ДиапазонДанных = ExcelЛист.Range(ExcelЛист.Cells(1, 1), <<?>>ExcelЛист.Cells(RowCount, ColumnCount)); (Проверка: Тонкий клиент)
{Форма.ФормаУпр.Форма(22,74)}: Переменная не определена (RowCount)
    ДиапазонДанных = ExcelЛист.Range(ExcelЛист.Cells(1, 1), ExcelЛист.Cells(<<?>>RowCount, ColumnCount)); (Проверка: Тонкий клиент)
{Форма.ФормаУпр.Форма(22,84)}: Переменная не определена (ColumnCount)

    Стоп = СтрокаНастройки.Параметр;
    НайденнаЯчейка = ДиапазонДанных.Find(Стоп);
    СтрокаНастройки.Значение  = НайденнаЯчейка.Row+1;
37 Cube
 
23.12.14
12:36
(25) Просто внеси изменения в процедуру ПрочитатьИСоздатьЭлементы():

Процедура ПрочитатьИСоздатьЭлементы(НомерЛиста, ПерваяСтрока, ПоследняяСтрока)
    
    ФайлЭксель = ПолучитьCOMОбъект(Объект.ПутьКФайлу);
    Лист = ФайлЭксель.Worksheets(НомерЛиста);
    ПоследняяСтрока = Лист.Rows.Count;
    СчитываемДанные = Ложь;
    Флаг=0;
    Для ТекСтр = 1 По ПоследняяСтрока Цикл
        Если Лист.Cells(ТекСтр, 1).Value = ПерваяСтрока Тогда
            СчитываемДанные = Истина;
        ИначеЕсли Лист.Cells(ТекСтр, 1).Value = ПоследняяСтрока Тогда
            Прервать;
        КонецЕсли;
        Если СчитываемДанные Тогда
            НС = тзExcel.Добавить();
            Для Каждого Стр Из Объект.СоответствиеПолей Цикл
                Если Не ЗначениеЗаполнено(Стр.КолонкаВЭксель) Тогда
                    Продолжить;
                КонецЕсли;
                ТекЗначение = Лист.Cells(ТекСтр, Стр.КолонкаВЭксель).Value;
                НС["Реквизит" + (Стр.ПолучитьИдентификатор() + 1)] = ТекЗначение;
            КонецЦикла;
        КонецЕсли;
    КонецЦикла;
    Ошибки = ЗаписатьСпецификацию();
    
КонецПроцедуры


Всё, теперь можешь указывать первую и последнюю строку как ты делала в (9).
38 Cube
 
23.12.14
12:37
+(37) И больше никаких изменений из тех, что тебе насоветовали.
40 Cube
 
23.12.14
12:39
+(37) Ой, я там с переменными напутал, исправляюсь:

Процедура ПрочитатьИСоздатьЭлементы(НомерЛиста, ПерваяСтрока, ПоследняяСтрока)
    
    ФайлЭксель = ПолучитьCOMОбъект(Объект.ПутьКФайлу);
    Лист = ФайлЭксель.Worksheets(НомерЛиста);
    ВсегоСтрок = Лист.Rows.Count;
    СчитываемДанные = Ложь;
    Флаг=0;
    Для ТекСтр = 1 По ВсегоСтрок Цикл
        Если Лист.Cells(ТекСтр, 1).Value = ПерваяСтрока Тогда
            СчитываемДанные = Истина;
        ИначеЕсли Лист.Cells(ТекСтр, 1).Value = ПоследняяСтрока Тогда
            Прервать;
        КонецЕсли;
        Если СчитываемДанные Тогда
            НС = тзExcel.Добавить();
            Для Каждого Стр Из Объект.СоответствиеПолей Цикл
                Если Не ЗначениеЗаполнено(Стр.КолонкаВЭксель) Тогда
                    Продолжить;
                КонецЕсли;
                ТекЗначение = Лист.Cells(ТекСтр, Стр.КолонкаВЭксель).Value;
                НС["Реквизит" + (Стр.ПолучитьИдентификатор() + 1)] = ТекЗначение;
            КонецЦикла;
        КонецЕсли;
    КонецЦикла;
    Ошибки = ЗаписатьСпецификацию();
    
КонецПроцедуры
42 Shrek_yar
 
23.12.14
12:44
(40)У вас одна и та же обработка есть,что ли?
43 Cube
 
23.12.14
12:45
(42) Она весь код в (25) вывалила... :)
44 Shrek_yar
 
23.12.14
12:49
Если Лист.Cells(ТекСтр, 1).Value = ПерваяСтрока Тогда
Тогда она же передает число(номер строки) ведь в параметр "ПерваяСтрока", тут неправильное сравнение со значением из листа эксель,
45 Cube
 
23.12.14
12:51
(44) Читай последнюю строку поста (37)...
46 Shrek_yar
 
23.12.14
12:53
(45)Тогда ТекСтр+1 Надо, если вы нашли строку, ее номер будет ТекСтр, а данные начинаются со следующей
47 Shrek_yar
 
23.12.14
12:54
(45)со следующей со слова "старт"
48 Shrek_yar
 
23.12.14
12:55
(38)А так криво, но сгодится... Перебирать весь ексель в поисках строки-это не рационально. Тем более номер колонки может быть не первый.
49 Олеся92
 
23.12.14
12:56
А при открытие  так и  остсанется?

СтрокаНастройки=Объект.НастройкиЭксель.Добавить();
    СтрокаНастройки.Параметр  = "Первая строка";
    СтрокаНастройки.Значение  = 1;

    
    СтрокаНастройки=Объект.НастройкиЭксель.Добавить();
    СтрокаНастройки.Параметр  = "Последняя строка";
    СтрокаНастройки.Значение  = 1;
50 Cube
 
23.12.14
12:57
(46) (47) Ах, да, косяк, исправляюсь:

Процедура ПрочитатьИСоздатьЭлементы(НомерЛиста, ПерваяСтрока, ПоследняяСтрока)
    
    ФайлЭксель = ПолучитьCOMОбъект(Объект.ПутьКФайлу);
    Лист = ФайлЭксель.Worksheets(НомерЛиста);
    ВсегоСтрок = Лист.Rows.Count;
    СчитываемДанные = Ложь;
    Флаг=0;
    Для ТекСтр = 1 По ВсегоСтрок Цикл
        Если Лист.Cells(ТекСтр, 1).Value = ПоследняяСтрока Тогда
            Прервать;
        КонецЕсли;
        Если СчитываемДанные Тогда
            НС = тзExcel.Добавить();
            Для Каждого Стр Из Объект.СоответствиеПолей Цикл
                Если Не ЗначениеЗаполнено(Стр.КолонкаВЭксель) Тогда
                    Продолжить;
                КонецЕсли;
                ТекЗначение = Лист.Cells(ТекСтр, Стр.КолонкаВЭксель).Value;
                НС["Реквизит" + (Стр.ПолучитьИдентификатор() + 1)] = ТекЗначение;
            КонецЦикла;
        КонецЕсли;
        Если Лист.Cells(ТекСтр, 1).Value = ПерваяСтрока Тогда
            СчитываемДанные = Истина;
        КонецЕсли;
    КонецЦикла;
    Ошибки = ЗаписатьСпецификацию();
    
КонецПроцедуры
51 Cube
 
23.12.14
12:57
(49) Нет, тут пиши как в (9). То есть указывай не номера строк, а метки.
56 Shrek_yar
 
23.12.14
13:00
(49)Скинь процедуру модуля обработки
Объект.НастройкиЭксель.НайтиСтроки(Старт)
57 Любопытная
 
23.12.14
13:01
(49) выложи уже куда-нибудь всю обработку. А то они подерутся скоро))
58 Shrek_yar
 
23.12.14
13:01
(56)или что за переменая старт
59 Shrek_yar
 
23.12.14
13:01
(57)Да))
60 Vladal
 
модератор
23.12.14
13:03
Мальчики и девочки, флейм в тематике и ИТ недопустим.
62 Олеся92
 
23.12.14
13:04
67 Любопытная
 
23.12.14
13:08
(66) Это неважно.
(62) За "Для Каждого Стр Из Метаданные.Справочники.СпецификацияТК.ТабличныеЧасти.ТаблицаSMD.Реквизиты Цикл" вас по рукам бить надо. Мне за обращение через одну точку в цикле балл сняли на экзамене, а тут...
68 Любопытная
 
23.12.14
13:08
&НаКлиенте
Процедура СправочникПриИзменении(Элемент)
    
    
    Объект.СоответствиеПолей.Очистить();
    
    
    Возврат;
    
    СписокРеквизитов1=ПолучитьРеквизитыСправочника();
    
    Для Каждого Рекв Из СписокРеквизитов1 Цикл
        НоваяСтр=Объект.СоответствиеПолей.Добавить();
        НоваяСтр.РеквизитВ1С=Рекв;
    КонецЦикла;

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

Что это?
69 Cube
 
23.12.14
13:09
(67) (68) Это не она писала. Обработка с ИС.
70 Олеся92
 
23.12.14
13:10
(68) Да это было уже
71 Любопытная
 
23.12.14
13:11
(69) Это не она писала, а потом она не читала.
Так, ладно. Не мое это дело. Разбирайтесь сами, раз помогать взялись. За красивые глазки
72 Cube
 
23.12.14
13:12
Любопытная ревнует))
73 Олеся92
 
23.12.14
13:21
Написала как в(9) Но пустые строки и просит задавать первую и последнюю строку
74 Shrek_yar
 
23.12.14
14:00
(73) адрес почты напишите, щас скину
75 Shrek_yar
 
23.12.14
14:00
(74) а нет вижу
76 Олеся92
 
23.12.14
14:04
77 ejikbeznojek
 
23.12.14
14:14
Срочно надо такую же фотку себе поставить)))
78 Олеся92
 
23.12.14
14:24
(75) У меня вот так вот http://lvkr.ru/w2Q2V9.jpg
79 Shrek_yar
 
23.12.14
16:06
(78)Пусто т.к там тип число у значения, а вы пытаетесь присвоить слово "старт" и "стоп"
на посту отправил