8.х Заполнить табличную часть из разных листов Excel

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем Роман_Н, 1 авг 2012.

  1. TopicStarter Overlay
    Роман_Н
    Offline

    Роман_Н Опытный в 1С

    Регистрация:
    3 июл 2012
    Сообщения:
    291
    Симпатии:
    0
    Баллы:
    26
    Подскажите, как правильно и логично решать такую задачу: В табличной части документа перечислены показания счетчиков для арендаторов здания.
    Список включает перечисления арендаторов и показатель электричество, далее снова список арендаторов с показателем водоснабжение. В файле Excel электр-во и водоснабжение - отдельные листы со списком арендаторов.

    Пока в проекте идея: для каждой строки документа по параметру определяем лист эксель, затем цикл по листу в поисках строки с арендатором.

    Но строк около 200 в документе, и для каждой запускать цикл поиска по файлу с почти таким же количетвом строк - это будет нереально долго.

    Есть идея листы перегнать в ТаблицуЗначений и по арендатору в ней обращаться к показателям?!

    P.S. Надеюсь понятно...
  2. Максим
    Offline

    Максим Опытный в 1С

    Регистрация:
    28 фев 2008
    Сообщения:
    686
    Симпатии:
    8
    Баллы:
    29
    Вообще-то не очень.

    Что в одной табличной части: Арендатор, Показатель электросчетчика и Показатель водоснабженя, причем список арендаторов повторяется дважды? Или там, все-таки, две табличные части или как? Реквизитный состав таб. части напишите по человечески и файлик Excel тоже было бы не плохо глянуть.
  3. TopicStarter Overlay
    Роман_Н
    Offline

    Роман_Н Опытный в 1С

    Регистрация:
    3 июл 2012
    Сообщения:
    291
    Симпатии:
    0
    Баллы:
    26
    Арендаторы повторяются.
    Таблица значений Колонки: Объект, ПоказНач, ПоказКон, Объем

    Вложения:

    • excel.jpeg
      excel.jpeg
      Размер файла:
      228,3 КБ
      Просмотров:
      38
  4. Tiger86
    Offline

    Tiger86 Модераторы Команда форума Модератор

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    а еще структуру вашей таб части дока представьте

    З.Ы. перегнать в ТЗ будет быстрее, чем шерстить xls
  5. TopicStarter Overlay
    Роман_Н
    Offline

    Роман_Н Опытный в 1С

    Регистрация:
    3 июл 2012
    Сообщения:
    291
    Симпатии:
    0
    Баллы:
    26
    Так и сделал!
  6. TopicStarter Overlay
    Роман_Н
    Offline

    Роман_Н Опытный в 1С

    Регистрация:
    3 июл 2012
    Сообщения:
    291
    Симпатии:
    0
    Баллы:
    26
    Хочу очистить таблицу от арендаторов с пустыми показателями. Но удаляются пустые строки как-то порциями - приходится раз пять нажать... Что в коде не так?
    Код:
    Для Каждого ТекСтрока1 Из Оборудование Цикл
    Если (ТекСтрока1.ПоказательКон = 0) И (ТекСтрока1.ПоказательНач = 0) Тогда
    Сообщить("Удалил "+ ТекСтрока1.Объект, СтатусСообщения.ОченьВажное);
    Оборудование.Удалить(ТекСтрока1);
    КонецЕсли;
    КонецЦикла;
    
  7. Tiger86
    Offline

    Tiger86 Модераторы Команда форума Модератор

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    удалять строки лучше другим циклом (обход не сверху вниз, а снизу вверх), тогда все ок будет.

    Код:
    сч = Оборудование.Количество();
    Пока сч >0 цикл
    //Для Каждого ТекСтрока1 Из Оборудование Цикл
    сч = сч - 1;
    текСтрока1 = оборудование[сч];
    Если (ТекСтрока1.ПоказательКон = 0) И (ТекСтрока1.ПоказательНач = 0) Тогда
    Сообщить("Удалил "+ ТекСтрока1.Объект, СтатусСообщения.ОченьВажное);
    Оборудование.Удалить(ТекСтрока1);
    КонецЕсли;
    КонецЦикла;
    З.Ы. код коленочный, проверьте работоспособность
  8. TopicStarter Overlay
    Роман_Н
    Offline

    Роман_Н Опытный в 1С

    Регистрация:
    3 июл 2012
    Сообщения:
    291
    Симпатии:
    0
    Баллы:
    26
    Дело, в индексе? При удалении сверху индекс строк меняется.
  9. Tiger86
    Offline

    Tiger86 Модераторы Команда форума Модератор

    Регистрация:
    24 мар 2011
    Сообщения:
    6.407
    Симпатии:
    108
    Баллы:
    104
    можно сказать и так. Получается вы удалили строку, остальные "поднялись вверх", из-за этого при переходе на следующую получается фактически прыжок через 1 запись. Поэтому удалять лучше всего проходом по таблице снизу вверх
  10. TopicStarter Overlay
    Роман_Н
    Offline

    Роман_Н Опытный в 1С

    Регистрация:
    3 июл 2012
    Сообщения:
    291
    Симпатии:
    0
    Баллы:
    26
    Код:
    ТекПараметр = СокрЛП(ТекСтрока.ПараметрВыработки.Наименование);
    ТекОбъект = СокрЛП(ВРег(ТекСтрока.Объект.Наименование));
    Если ТекПараметр = "Электрическая энергия" Тогда
    НайденнаяСтрока = ТЗЭлектро.Найти(ТекОбъект,"Секция");
    Если НайденнаяСтрока = Неопределено Тогда
    Сообщить("Арендатор '"+Секция+"' не найден! Возможно расхождение названий. Номер строки №"+ТекСтрока.НомерСтроки);
    Иначе
    ТекСтрока.ПоказательНач = НайденнаяСтрока.ПокНач;
    ТекСтрока.ПоказательКон = НайденнаяСтрока.ПокКон;
    ВсегоЭлектро = ВсегоЭлектро + (ТекСтрока.ПоказательКон - ТекСтрока.ПоказательНач);
    ПересчетТабчасти(ТекСтрока);
    Продолжить;
    КонецЕсли;
    КонецЕсли;
    Вот такой код не работает для арендатора:
    Код:
    ТекОбъект = "ACCESSORI ГОЛОВНЫЕ УБОРЫ"
    , в таблице значений точно есть ACCESSORI ГОЛОВНЫЕ УБОРЫ. В чем может быть загвоздка? Есть ли какие то ограничения на длину строки?
  11. TopicStarter Overlay
    Роман_Н
    Offline

    Роман_Н Опытный в 1С

    Регистрация:
    3 июл 2012
    Сообщения:
    291
    Симпатии:
    0
    Баллы:
    26
    При создании ТЗ в ОписанииТипов указал длинну 20. Поэтому строки больше 20с длинной не находились в ТЗ.

Поделиться этой страницей