Имя: Пароль:
1C
1С v8
Выгрузка в ТЧ (не изменяются данные)
0 radonn17
 
01.04.12
10:17
Здравствуйте!У меня тут не большая проблема...Есть справочник в нем создаётся множество других справочников (т.е. они созданы и  могут быть как пустые так и заполненные  в данные момент)и в их табличные части должны загружаться данные из Excel,но у меня тут какой-то баг выходит данные не заносятся и не изменяются не пойму почему...Заранее благодарен за помощь.
&НаКлиенте
Процедура ЗагрузитьИзExcel(Команда)
  Эксель = Новый COMОбъект("Excel.Application");
          Книга = Эксель.WorkBooks.Open("C:\Users\Администратор\Downloads\1с");
  Лист = Книга.WorkSheets(1);  
          ВсегоКолонок = Лист.Cells(1,1).SpecialCells(11).Column;
  ВсегоСтрок = Лист.Cells(1,1).SpecialCells(11).Row;      
 
  Док = Справочники.Журнал.Выбрать();  
  Пока Док.Следующий() Цикл    
       
     ТЧ = Док.Ведомость;    
     Для каждого Стр из ТЧ Цикл    
       
     КонецЦикла;  
  КонецЦикла;      
  Для Строка = 1 По ВсегоСтрок Цикл
     
     Для Колонка = 1 По ВсегоКолонок Цикл
     Студент = Справочники.Студенты.НайтиПоНаименованию(СокрЛП(Лист.Cells(Строка,Колонка).Value));      
     Если Студент.Пустая() Тогда
        Сообщить("В строке "+ Строка+ " введен неверно студент.")
     Иначе  
        ТЧ.Студент = Студент;
     КонецЕсли;    
     Попытка
        ТЧ.Понедельник = Перечисления.Оценки.Получить(Лист.Cells(Строка,2).Value);
     Исключение
     КонецПопытки;
     Попытка
        ТЧ.Вторник = Перечисления.Оценки.Получить(Лист.Cells(Строка,3).Value);
     Исключение
     КонецПопытки;
     Попытка
        ТЧ.Среда = Перечисления.Оценки.Получить(Лист.Cells(Строка,4).Value);
     Исключение
     КонецПопытки;
     Попытка
        ТЧ.Пятница = Перечисления.Оценки.Получить(Лист.Cells(Строка,5).Value);
     Исключение
     КонецПопытки;
     Попытка
        ТЧ.Суббота = Перечисления.Оценки.Получить(Лист.Cells(Строка,6).Value);
     Исключение
     КонецПопытки;
     Попытка
        ТЧ.Воскресенье = Перечисления.Оценки.Получить(Лист.Cells(Строка,7).Value);
     Исключение;
     КонецПопытки;
       
 
     КонецЦикла;      
      КонецЦикла;
      Док.Записать();

КонецПроцедуры
1 wade25
 
01.04.12
10:18
Док = Справочники.Журнал.Выбрать(); А где получить объект?)
2 НикДляЗапросов
 
01.04.12
10:18
так на клиенте то... на сервере
3 wade25
 
01.04.12
10:19
Студент = Справочники.Студенты.НайтиПоНаименованию(СокрЛП(Лист.Cells(Строка,Колонка).Value));  Вот тут тоесть
4 aleks-id
 
01.04.12
10:19
>>Книга = Эксель.WorkBooks.Open("C:\Users\Администратор\Downloads\1с");
это вроде путь к папке. а где сам файл xls ??
5 wade25
 
01.04.12
10:19
А ну да) + на клиенте)
6 radonn17
 
01.04.12
10:40
(4) не обязательно помоему писать расширение..
(3) не пойму ничего....
7 wade25
 
01.04.12
10:44
(6) В той строчке находит в отладчике справочник? Если находит, то что бы в дальнейшем получить доступ к записи, нужно для начала получить объект.
8 radonn17
 
01.04.12
10:45
(7) а как получить объект?
9 Мимохожий Однако
 
01.04.12
11:04
Док = Справочники.Журнал.Выбрать();  
  Пока Док.Следующий() Цикл    
       
     ТЧ = Док.Ведомость;    
     Для каждого Стр из ТЧ Цикл    
       
     КонецЦикла;  
  КонецЦикла;      
Этот кусок лишний.
10 Мимохожий Однако
 
01.04.12
11:11
Если Студент.Пустая() Тогда
        Сообщить("В строке "+ Строка+ " введен неверно студент.")
        Продолжить;
     Иначе
        ТЧ = Док.Ведомость.Добавить();
        ТЧ.Студент = Студент;
     КонецЕсли;
11 radonn17
 
01.04.12
11:38
(10) лишний?
12 Мимохожий Однако
 
01.04.12
12:08
(11)Нет смысла в этих двух циклах, т.к. внутри них ничего не происходит.
13 radonn17
 
01.04.12
12:13
(9) получаем справочники перебираем их получаем тч читаем строки и в них записываем...
(11)если я их уберу то как буду загружать в тч
14 Мимохожий Однако
 
01.04.12
12:23
(13)Смотри внимательнее... второе применение КонецЦикла закрывает твой перебор справочников. Перенести Фрагмент " КонецЦикла;  
  КонецЦикла;  " в самый низ твоего кода, если так задумал.
Тогда внутри цикла табличной части справочника будешь перебирать свою таблицу в экселе. Я немного в шоке от этого кода. Но тебе виднее.
15 radonn17
 
01.04.12
12:26
(14) сильно косячный код?))
16 radonn17
 
01.04.12
12:30
(14)куда в конец?после закрытия цикла по справочникам там циклы начинаются по строкам и колонкам..
17 Мимохожий Однако
 
01.04.12
12:30
(15) Благодаря этому коду, ты умножаешь количество циклов по экселю на количество строк всех элементов справочника.
18 Мимохожий Однако
 
01.04.12
12:31
Включи отладчик и убедишься.
19 Мимохожий Однако
 
01.04.12
12:32
Попытайся описать словами, как ты хочешь реализовать свой алгоритм.
20 radonn17
 
01.04.12
13:21
(19) при нажатии на кноку у меня автоматически создаются справочники( пустые), в их табличные части должны загружаться данные из экселя. 1 справочник равен одному листу экселя( их количество совпадает)
21 Мимохожий Однако
 
01.04.12
13:38
Надо сначала читать данные. Только потом создавать элементы справочника по полученным данным.
22 radonn17
 
01.04.12
13:42
(21) Ну как бы система такая..создаю я эти справочники заполняю (частично к примеру) выгружаю их в ексель (процедура есть такая все работает ок) там редактирую и загружаю обратно...т.е я уже делал подобное и оно раотало) ни каких проблем не было, но здесь как бы подругому нужно пройтись по всем справочникам и записать в их табличные части
23 radonn17
 
01.04.12
15:32
ни кто не поможет7
24 GROOVY
 
01.04.12
15:38
Чем помочь то? Код в (0) бредовый.

Полнейший бред, начиная с директивы компиляции, заканчивая обращением к перечислению...
25 GROOVY
 
01.04.12
15:41
Для Строка = 1 По ВсегоСтрок Цикл
     
     Для Колонка = 1 По ВсегоКолонок Цикл
     Студент = Справочники.Студенты.НайтиПоНаименованию(СокрЛП(Лист.Cells(Строка,Колонка).Value));      
     Если Студент.Пустая() Тогда
        Сообщить("В строке "+ Строка+ " введен неверно студент.")

То бишь получаем студентов которые должны быть во всех ячейках файла?
26 radonn17
 
01.04.12
15:45
(24) ну как смог...
(25) ну когда я это писал я хотел чтобы имена студентов совпадали с теми которые в справочники.студенты
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.