7.7 Как изменить реквизиты табличной части документа

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 7.7"", создана пользователем eugene24, 4 мар 2011.

  1. TopicStarter Overlay
    eugene24
    Offline

    eugene24

    Регистрация:
    4 мар 2011
    Сообщения:
    5
    Симпатии:
    0
    Баллы:
    1
    Здравствуйте.
    Подскажите как изменить реквизит табличной части документа (у каждой строки отдельная) из модуля документа (при нажатии на кнопку на форме)?
    Я пытаюсь так:
    Код:
    Procedure ОстатокТовараНаСкладе1()
    ТовИБ2=ИБ2.CreateObject("Справочник.Товары");
    ВыбратьСтроки();
    Пока ПолучитьСтроку() = 1 Цикл
    ТовИБ2.НайтиПоКоду(Код);
    ОсФ=ИБ2.ОстатокТовараНаСкладе(ТовИБ2, ИБ2.ОсновнойСклад);
    КонецЦикла;
    EndProcedure;
    
    Но данный код заполняет реквизит всех строк одним числом (последним полученным).
    ОсФ - это реквизит табличной части, ОстатокТовараНаСкладе - функция в другой информационной базе, к которой я подключаюсь через OLE. Когда прохожу в отладчике по этому коду, то все высчитывает правильно, но в форме получается результат показанный на скриншоте:
    Посмотреть вложение 6644
    Заранее большое спасибо!

    Вложения:

    • problem.png
      problem.png
      Размер файла:
      28,4 КБ
      Просмотров:
      130
  2. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.523
    Симпатии:
    407
    Баллы:
    104
    Доступ к функциям/процедурам доступент только если у них стоит признак "Экспорт" + нужно для вызова использовать EvalExpr
  3. TopicStarter Overlay
    eugene24
    Offline

    eugene24

    Регистрация:
    4 мар 2011
    Сообщения:
    5
    Симпатии:
    0
    Баллы:
    1
    Да, код - это реквизит табличной части.
  4. ksanx
    Offline

    ksanx

    Регистрация:
    6 мар 2011
    Сообщения:
    2
    Симпатии:
    0
    Баллы:
    1
    Можно попробовать так:
    ТовИБ2.НайтиПоКоду(Код);
    Тэ = ТовИБ2.ТекущийЭлемент();
    Сообщить(СокрЛП(Тэ)); // для проверки
    ОсФ=ИБ2.ОстатокТовараНаСкладе(Тэ, ИБ2.ОсновнойСклад);
  5. ksanx
    Offline

    ksanx

    Регистрация:
    6 мар 2011
    Сообщения:
    2
    Симпатии:
    0
    Баллы:
    1
    Можно попробовать поменять в функции ОстатокТовараНаСкладе реквизит типа "Справочник" на код
    и передавать не текущий элемент справочника, а код. Так надежнее
  6. TopicStarter Overlay
    eugene24
    Offline

    eugene24

    Регистрация:
    4 мар 2011
    Сообщения:
    5
    Симпатии:
    0
    Баллы:
    1
    Пробовал - выдает OLE. К сожалению у меня нет возможности изменить код функции "ОсновнойСклад" в другой базе.
  7. Хряк
    Offline

    Хряк Профессионал в 1С

    Регистрация:
    26 сен 2007
    Сообщения:
    1.447
    Симпатии:
    37
    Баллы:
    54
    какая конфа ИБ2
    что там в функции ОстатокТовараНаСкладе

    мож не эту функцию надо вызывать
  8. alp
    Offline

    alp Опытный в 1С

    Регистрация:
    8 янв 2009
    Сообщения:
    432
    Симпатии:
    0
    Баллы:
    26
    Вы просто напишите :
    Код:
    Сообщить(Ост);
    
    
    И Сразу поймете где ошибка...
  9. TopicStarter Overlay
    eugene24
    Offline

    eugene24

    Регистрация:
    4 мар 2011
    Сообщения:
    5
    Симпатии:
    0
    Баллы:
    1
    Попробовал:
    В том то и дело что выводит все правильно, а в таблицу пишет только последнее значение.
  10. alp
    Offline

    alp Опытный в 1С

    Регистрация:
    8 янв 2009
    Сообщения:
    432
    Симпатии:
    0
    Баллы:
    26
    Попробуйте Так:

    Код:
    Табл = СоздатьОбъект("ТаблицаЗначений");
    ВыгрузитьТабличнуюЧасть(Табл); 
    Табл.ВыбратьСтроки(); 
    Пока Табл.ПолучитьСтроку() = 1 Цикл 
    ТовИБ2.НайтиПоКоду(Табл.Код);
    Табл.ОсФ = ИБ2.ОстатокТовараНаСкладе(ТовИБ2, ИБ2.ОсновнойСклад); 
    КонецЦикла; 
    ЗагрузитьТабличнуюЧасть(Табл);
    
  11. TopicStarter Overlay
    eugene24
    Offline

    eugene24

    Регистрация:
    4 мар 2011
    Сообщения:
    5
    Симпатии:
    0
    Баллы:
    1
    Спасибо большое, вот это помогло:
    Код:
    Табл = СоздатьОбъект("ТаблицаЗначений");
    ВыгрузитьТабличнуюЧасть(Табл); 
    Табл.ВыбратьСтроки(); 
    Пока Табл.ПолучитьСтроку() = 1 Цикл 
    ТовИБ2.НайтиПоКоду(Табл.Код);
    Табл.ОсФ = ИБ2.ОстатокТовараНаСкладе(ТовИБ2, ИБ2.ОсновнойСклад); 
    КонецЦикла; 
    ЗагрузитьТабличнуюЧасть(Табл);
    
    
    Нашел ошибку: ОсФ - был не реквизитом табличной части, а был вставлен в табличную часть визуально как компонент текст.

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