8.х Таблица значений

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем Dem0lisher, 26 май 2010.

  1. TopicStarter Overlay
    Dem0lisher
    Offline

    Dem0lisher Профессионал в 1С

    Регистрация:
    4 авг 2009
    Сообщения:
    1.028
    Симпатии:
    51
    Баллы:
    54
    Здравствуйте!
    Скажите пожалуйста, как обогнуть ситуацию с повторным созданием колонок таблицы значений:
    Выдает ошибку "неверное имя колонки" когда повторно запускается процедура. Раньше делали так: Описывали ТЗ и ее колонки в процедуре "Приоткрытии", но тогда ТЗ была на форме, и не возникало ошибок при обращении к ТЗ а сейчас среди элементов формы нет ТЗ, и незнаю что делать. Объявляю ТЗ и ее колонки в процедуре сформировать-ругается "неверное имя колонки", а если описываю тз и колонки ПРИОткрытии, тогда в процедуре "сформировать" ругается на обращение ТЗ.контрагент. Помогите!
  2. shurikvz
    Offline

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

    Регистрация:
    1 окт 2009
    Сообщения:
    8.410
    Симпатии:
    316
    Баллы:
    104
    Непонятно. Код покажите.
  3. Requin
    Offline

    Requin Опытный в 1С

    Регистрация:
    10 май 2010
    Сообщения:
    1.911
    Симпатии:
    2
    Баллы:
    29
    А почему решили, что колонки создаются повторно?

    Хотелось бы код "ПриОткрытии", "Сформировать" увидеть. Что в переменных модуля формы? Что в реквизитах формы?
  4. TopicStarter Overlay
    Dem0lisher
    Offline

    Dem0lisher Профессионал в 1С

    Регистрация:
    4 авг 2009
    Сообщения:
    1.028
    Симпатии:
    51
    Баллы:
    54
    Это модуль формы отчета.
    реквизиты Нач и Кон типа дата(Для выборки)
    Код:
        ТЗ=Новый ТаблицаЗначений;
    
    Процедура КнопкаСформироватьНажатие(Кнопка)
    ТЗ=Новый ТаблицаЗначений;
    ТЗ.Колонки.Добавить("Материал");
    ТЗ.Колонки.Добавить("Цена");
    ТЗ.Колонки.Добавить("Количество");
    ТЗ.Колонки.Добавить("Сумма");
    
    Док=Документы.ПоступлениеМатериалов.Выбрать(Нач,Кон);
    Пока Док.Следующий() Цикл
    Для каждого ТС ИЗ Док.Мат Цикл
    К=ТЗ.Добавить();
    ТЗ.Материал=ТС.Материал;
    ТЗ.Цена=ТС.Цена;
    ТЗ.Количество=ТС.Количество;
    ТЗ.Сумма=ТС.Сумма;    
    КонецЦикла;
    КонецЦикла;
    ТЗ.Свернуть("Материал","Количество,Сумма");
    Д=Документы.Итог.СоздатьДокумент();
    Д.Дата=ТекущаяДата();
    Для каждого ТС ИЗ ТЗ Цикл    
    ИК=Д.Материал.Добавить();
    ИК.Материал=ТЗ.Материал;
    ИК.Количество=ТЗ.Количество;
    ИК.Сумма=ТЗ.Сумма;
    КонецЦикла;
    Д.Записать();
    КонецПроцедуры
    
    
    
    

    ПриОткрытии нет ничего сейчас
    Суть процедуры-это простая задачка по формированию итогов по документам "поступлениематериалов " за период и програмной записи документа с итогами.
    Сейчас ругается на "Поле объекта не обнаружено. Материал"
  5. TopicStarter Overlay
    Dem0lisher
    Offline

    Dem0lisher Профессионал в 1С

    Регистрация:
    4 авг 2009
    Сообщения:
    1.028
    Симпатии:
    51
    Баллы:
    54
    Так, я попутал-дело было не в этом.. тут в коде слишком много ошибок, чтобы это работало!
    А вообще бывает такая проблема с повторным добавлением, даже препод наш писал в своей методичке по этому поводу..
    Ошибка найдена!
  6. shurikvz
    Offline

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

    Регистрация:
    1 окт 2009
    Сообщения:
    8.410
    Симпатии:
    316
    Баллы:
    104
    На какой строке ругается? Не на этой? ИК=Д.Материал.Добавить();? "Материал" в документе Итог это у вас что такое?
  7. TopicStarter Overlay
    Dem0lisher
    Offline

    Dem0lisher Профессионал в 1С

    Регистрация:
    4 авг 2009
    Сообщения:
    1.028
    Симпатии:
    51
    Баллы:
    54
    Нет, ругался на строке ТЗ.Материал=ТС.Материал;
    ну тут я сам че-то затупил, строкой выше обозначил К=ТЗ.Добавить, а добавляю ТЗ.Материал, вместо К.Материал.. Всем спасибо!
  8. shurikvz
    Offline

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

    Регистрация:
    1 окт 2009
    Сообщения:
    8.410
    Симпатии:
    316
    Баллы:
    104
    Так уж, в общем: вы все-таки осмысленные наименования давайте, вам же потом самому легче читать свой код будет. Т.е. не Д=Документы.Итог.СоздатьДокумент(); а ДокументИтог=Документы.Итог.СоздатьДокумент(); или хотя бы НовыйДокумент=Документы.Итог.СоздатьДокумент(); ну и т.д.

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