Передача ТЗ по значению не работает

  1. 9 г. назад
    Функция ПодготовитьНДСРаст(Знач ТабЗаполнения)
    	ТабЗаполнения.Свернуть("НоменклатурнаяГруппаР");
    	НомГруппы = ТабЗаполнения.ВыгрузитьКолонку("НоменклатурнаяГруппаР");
    КонецФункции
    
    ПодготовитьНДСРаст(ТабЗатрат);

    Почему в итоге ТабЗатрат оказывается свернутой? Она же передана в функцию по значению.

    Ответы: (4) (19)
  2. тебе это лучше спрашивать на сайте 1С

    Ответы: (3)
  3. передача по значению работает только для примитивных типов. КЭП.

    Ответы: (5)
  4. (1) Я знаю, как это обойти. Но почему не работает, как ожидается?
    Может я где-то не дочитал?

  5. (0) По значению передаются только значения примитивных типов. Объекты передаются всегда по ссылке. Без вариантов.

    Ответы: (6)
  6. (2) Вот это спасибо, объяснили :)

    Ответы: (7)
  7. (4) И тебе тоже спасибо.

  8. (5) я сам узнал относительно недавно. никогда знач использовал

    Ответы: (8)
  9. (7) Точно так-же, решил попробовать :), и сразу на ТЗ :)

  10. Еще задумался, если ТЗ размером 500 Мб, то по значению надо еще +500 Мб.
    Дешевле скопировать колонку, а потом свернуть.

    Ответы: (10) (17) (21)
  11. (9) Я наверное год на третий работы с 1с начал задумываться над такими вещами =)

    Ответы: (11)
  12. (10) Я рисовал программы для 286-й, поэтому над ресурсами задумываюсь всегда :)

  13. Когда на Васике перевалил за 64 кб - задумался. А программа еще на 10% не готова.

  14. ПодготовитьНДСРаст(Знач ТабЗаполнения)
    По значению передается ссылка на кусок памяти где хранится тз.
    Теперь есть 2 ссылки на этот участок памяти.
    В теле фукнкции и там откуда функция вызывалась.

    Ответы: (14)
  15. (13) Так функция то портит исходную ТЗ, а не хотелось...

    Ответы: (15) (16)
  16. (14) Достаточно изменить одну строчку

    ПодготовитьНДСРаст(ТабЗатрат.Скопировать());

    Ответы: (17)
  17. (14) По моей версии получается 2 ссылки на 1 участок памяти , одну ТЗ.

  18. (15) Нет, не так:
    Функция ПодготовитьНДСРаст(Знач ТабЗаполнения)
    ТЗ = ТабЗаполнения.Скопировать(,"НоменклатурнаяГруппаР");
    ТЗ.Свернуть("НоменклатурнаяГруппаР");
    КонецФункции
    Ресурсов меньше жрет. Ты создаешь вторую ТЗ а это см (9)

    Ответы: (18) (19)
  19. (17) А ты уверен, что не создаешь вторую ТЗ ?

    Ответы: (20)
  20. (17) Ну я в смысле аналог (0) работающий.

    Ответы: (21)
  21. (18) Я был невнимателен. Все понял.

    Ответы: (21)
  22. (20) У меня в этой ТЗ около 50 колонок и тысячи строк. Зачем ПОЛНАЯ копия, если мне нужна одна колонка.
    (19) а вот и получаются грабли как в (9) и помножь на количество экономистов :)

  23. Из той же оперы:
    В отчете около 50 запросов. Объявляем один объект Запрос и юзаем. Параметры дозаполняются по мере поступления. В конце отчета инициализируем Запрос заново (подчищаем память). Экономия примерно 48 х Запрос = Новый Запрос()-ов.

    Ответы: (23) (24)
  24. +(22) Меняю только Запрос.Текст

  25. (22) это ппц )

    Ответы: (25)
  26. 25.06.2015 14:50:58 отредактировано alex_shkut

    (24) Чего ппц, обычный отчет - ФинансовыйРезультат :)
    Время выполнения за период - год 352 сек.

или зарегистрируйтесь чтобы ответить!