Кольцевые ссылки в скриптах 1С

18.02.10

Разработка - Механизмы типовых конфигураций

старое, неправильное, название публикации "Перем Форма Экспорт;"

Памяти много не бывает. Для того, чтобы памяти все-таки хватало, «взрослые» программисты, такие как разработчики среды программирования (платформы), обычно заботятся о так называемых «сборщиках мусора» - механизмах, освобождающих оперативку от отработавших кусков кода. Ну, они должны это делать… Ну, по крайней мере, они нам говорят, что делают это. К сожалению, это у них не всегда получается одинаково хорошо. А кто совершенен?

Скачать файлы

Наименование Файл Версия Размер
РоскошныйГлюк.epf
.epf 6,28Kb
53
.epf 6,28Kb 53 Скачать

Внимание! Нападки автора на Экспорт вызваны необъяснимой невнимательностью при исследовании казуса. К правильному пониманию явления подвигают комменты  (поставил все-таки минус :))

 

Предлагаемая обработка иллюстрирует тезис. Просто отройте её и закройте.

Рис.1 

Ничего страшного не произойдет (правда, правда, модуль открыт, можете убедиться сами).

Рис.2

Конечно, чтобы всё-таки избавиться от формы, придётся закрыть платформу (каламбурчик!), но перезагружать виндовс не надо.

 

Казус возникает, если экспортной переменной модуля (формы или объекта, все равно) присвоить значение самой формы. потому, что разработчики не стали решать существующую во "взрослых" средах проблему чистки мусора, а просто переложили ее на плечи скриптописателей.

 

Обнаруженные эффекты:

 

  1. если вызвать контекстное меню на кнопке окна предприятия в панели окон виндовса, форма затаится

Рис. 3

, но если не закрыть окно, продолжит виртуально быть.

 

  1. если открыть/закрыть форму еще раз, они будут в памяти обе две

Рис. 4

Можно было бы еще поковыряться, пофантазировать о полезном использовании фичи (или бага?), но с отличной от нуля вероятностью «взрослые дяди» могут подрихтовать свою продукцию, так что в сухом остатке публикации – только бесплатный совет:

Постарайтесь как можно меньше использовать в своей работе ключевое слово Экспорт.

Или убивайте их нах, чисто не там, где убирает 1с, а там, где не мусорят 1сники.

См. также

Расширяем возможности дополнительных обработок и настраиваем их отладку

БСП (Библиотека стандартных подсистем) Механизмы типовых конфигураций Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Уже не одна веб-страница исписана знаниями о дополнительных обработках, как создать, как подключить. Есть масса вариантов, как их можно отладить. Я разобрался в кишках работы библиотеки и покажу, как можно расширить возможности дополнительных отчетов, а также покажу удобный способ отладки.

07.02.2024    2347    YA_418728146    11    

40

Регистры накопления в 1С:КА2 и 1С:ERP для расчета НДФЛ, страховых взносов и взаиморасчетов с сотрудниками на январь 2024 года. Краткое описание

Зарплата Механизмы типовых конфигураций Платформа 1С v8.3 1С:ERP Управление предприятием 2 1С:Комплексная автоматизация 2.х Россия Бухгалтерский учет НДФЛ Абонемент ($m)

Для расчета зарплаты и соответствующих налогов в конфигурациях 1С:КА2 и 1С:ERP используется 22 регистра накопления, 7 регистров сведений, 1 регистр расчета и бухгалтерские проводки. В таблице приведены названия этих регистров, указаны основные регистраторы и виды движений приход/расход. В описании приводится краткое функциональное назначение регистров в основных зарплатных процессах. Описание регистров родилось из черновиков при написании различных отчетов и обработок при эксплуатации 1С-овских конфигураций и исправлении ошибок по НДФЛ, взаиморасчетов с сотрудниками и прочих. Информация не претендует на полноценное описание работы регистров, скорее это дискуссионный материал. Но, возможно, кому-то пригодится и сократит время при подготовке отчетности за непростой (в плане учета зарплаты) 2023 год. А возможно, кто-то поделится своим опытом.

1 стартмани

10.01.2024    1013    6    2ncom    3    

8

Шаблоны новых объектов 1С для 1С:Бухгалтерии предприятия

Инструментарий разработчика БСП (Библиотека стандартных подсистем) Механизмы типовых конфигураций Платформа 1С v8.3 1С:Бухгалтерия 3.0 Бесплатно (free)

Используются для создания новых объектов в конфигурации, чтобы не забыть, что нужно сделать. Сделано на примере 1С:Бухгалтерия предприятия, в других конфигурациях могут быть другие, а могут быть и похожие объекты.

28.12.2023    4823    mrXoxot    11    

99

Ключи аналитик учета в ЕРП, КА, УТ

Механизмы типовых конфигураций Платформа 1С v8.3 1С:ERP Управление предприятием 2 Россия Управленческий учет Бесплатно (free)

Разбираемся, зачем в системе ЕРП созданы справочники: ключи аналитик учета, зачем созданы аналогичные по набору измерений регистры сведений. Какие проблемы они решают, какие создают новые и что с этим делать.

08.11.2023    7028    ids79    25    

74

Распределение по базе среднего в ЗИКГУ 3.1

Зарплата Механизмы типовых конфигураций Платформа 1С v8.3 1С:Зарплата и кадры государственного учреждения 3 Россия Бюджетный учет Абонемент ($m)

Результат расчета начислений (отпуск, БЛ и т.д.) может распределятся по базе среднего заработка. У таких начислений на вкладке "Налоги, взносы, бухучет" стоит галка "По базе среднего заработка". Но бывают случаи, что данное распределение необходимо скорректировать.

1 стартмани

14.09.2023    445    2    Vlx    0    

1

Расширение типового механизма настройки заполнения бухгалтерской отчетности (на примере конфигурации 1С:ERP. Управление холдингом 3.1.8.15)

Механизмы типовых конфигураций Платформа 1С v8.3 1С:Управление холдингом 1С:Франчайзи, автоматизация бизнеса Россия Бесплатно (free)

В статье приведен алгоритм доработок типового механизма настройки заполнения бухгалтерской отчетности на примере конфигурации 1С:ERP. Управление холдингом (3.1.8.15). Цель доработок - сделать процесс настроек более гибким и удобным для пользователей

11.09.2023    1925    ICL-Soft    3    

12

Разбор механизма "Настройки полей формы" в 1С:ERP. Управление холдингом

Механизмы типовых конфигураций Платформа 1С v8.3 1С:ERP Управление предприятием 2 Бесплатно (free)

В данной статье я постараюсь разобрать механизм, который Вам может встретиться на просторах типовой конфигурации 1С:ERP. Управление холдингом. Я не могу гарантировать, что этот механизм не исключат из следующих версий конфигурации (как, собственно, и любой другой). К сожалению, мне не удалось найти его ни в одном модуле конфигурации "Библиотеки стандартных подсистем". Мне он показался интересным, и захотелось более детально во всем этом разобраться.

18.07.2023    2154    it_box    1    

7

Работа с контактной информацией. Часть 2

Механизмы типовых конфигураций Платформа 1С v8.3 Конфигурации 1cv8 Бесплатно (free)

Во второй части статьи рассмотрим вопрос преобразования адреса из старого формата в новый. Рассмотрим реальные задачи, связанные с контактной информацией.

05.06.2023    6948    biimmap    4    

41
Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. Арчибальд 2706 28.12.09 09:54 Сейчас в теме
Вообще-то оставление "висячих ссылок" всегда считалось у программистов моветоном. К сожалению, зачастую сейчас смешиваются понятия программиста и пользователя программной платформы...
2. tango 506 28.12.09 10:03 Сейчас в теме
Арчи, одно дело, когда "висячая ссылка" - "в никуда", точнее - туда, где уже совсем другое, другое - когда и ссылки-то уже нет (попробуй ка подцепить незавершившийся процесс "закрытой" формы) а кусок кода - живет и здравствует, мало того - не только память занимает, но и процессор грузит в забытом цикле...
Вот, думается, не потому ли конфигуратор время от времени схлопывается, что 1сина так же грязно работает и в этом режиме?
3. Арчибальд 2706 28.12.09 10:17 Сейчас в теме
(2) Я это и имел в виду. Не просто убить ссылку, но сначала убить то, на что она ссылается. Помню, была в Эльбрусе процедурка с двусмысленным именем ВернутьПамЯть :D
4. tango 506 28.12.09 10:25 Сейчас в теме
А как?
Сделаем в ПриЗакрытии
Фрм = "";
Допустим (не факт), это убъет ее циклы и даже созданные в ней локальные переменные.
Сама-то она останется в памяти как пустая строка (или нет?)!
Если же обращение к такой форме происходит достаточно часто (в большом цикле), то ссылки даже на пустую строку в конце концов забьют сколь угодно большой, но конечный, объем.
6. Арчибальд 2706 28.12.09 10:53 Сейчас в теме
(4) "Как" - вопрос другой. Подозреваю, что ответ на него может варьироваться в зависимости от всяких сопутствующих факторов. Вон, лисповцы только и делают, что совершенствуют сбор мусора.
Важно то, что разработчик должен учитывать возможность появления мусора. А предупрежден - значит, вооружен.
marsohod; +1 Ответить
5. steban 73 28.12.09 10:46 Сейчас в теме
1С использует подсчет ссылок (reference counting) а не сборку мусора. Так что надеяться на уничтожение объектов, на которые не осталось внешних ссылок, не стОит. При достаточной изворотливости можно наделать циклических ссылок и утечек памяти.
antonio22; artbear; Арчибальд; +3 Ответить
7. tango 506 28.12.09 11:36 Сейчас в теме
(5) значит ли это, что 1с в обозримом будущем от сабжа не избавится, и это фича, а не баг, и можно смотреть на полезное использование?
8. tango 506 28.12.09 11:40 Сейчас в теме
Определение: reference counting

Подсчёт ссылок. Алгоритм сборки мусора, ведущий для каждого объекта программы подсчёт текущего числа других объектов, которые на него ссылаются. Если это число становится равным нулю, память соответствующего объекта можно безопасно освободить, а общее число ссылок каждого из ссылающихся на него других объектов уменьшить на единицу. У этого алгоритма возникают проблемы с объектами, ссылающимися друг на друга по кольцу, так как у них число ссылок никогда не бывает меньше 1.

http://www.pcmag.ru/encyclopedia/term.php?ID=4091
9. tango 506 28.12.09 11:43 Сейчас в теме
Для понимания того, как Python находит значение некоторой переменной, необходимо ввести понятие блока кода. В Python блоком кода является то, что исполняется как единое целое, например, тело определения функции, класса или модуля.

Локальные имена - имена, которым присвоено значение в данном блоке кода. Глобальные имена - имена, определяемые на уровне блока кода определения модуля или те, которые явно заданы в операторе global. Встроенные имена - имена из специального словаря __builtins__.

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

Так как переменную можно связать с объектом в любом месте блока, важно, чтобы это произошло до ее использования, иначе будет возбуждено исключение NameError. Связывание имен со значениями происходит в операторах присваивания, for, import, в формальных аргументах функций, при определении функции или класса, во втором параметре части except оператора try-except.

С областями видимости и связыванием имен есть много нюансов, которые хорошо описаны в документации. Желательно, чтобы программы не зависели от таких нюансов, а для этого достаточно придерживаться следующих правил:

Всегда следует связывать переменную со значением (текстуально) до ее использования.
Необходимо избегать глобальных переменных и передавать все в качестве параметров. Глобальными на уровне модуля должны остаться только имена-константы, имена классов и функций.
Никогда не следует использовать from модуль import * - это может привести к затенению имен из других модулей, а внутри определения функции просто запрещено.
Предпочтительнее переделать код, нежели использовать глобальную переменную. Конечно, для программ, состоящих из одного модуля, это не так важно: ведь все определенные на уровне модуля переменные глобальны.

Убрать связь имени с объектом можно с помощью оператора del. В этом случае, если объект не имеет других ссылок на него, он будет удален. Для управления памятью в Python используется подсчет ссылок (reference counting), для удаления наборов объектов с зацикленными ссылками - сборка мусора (garbage collection).
http://www.intuit.ru/department/pl/python/1/7.html
10. tango 506 28.12.09 11:45 Сейчас в теме
Главное достоинство подсчета ссылок перед отслеживающими сборщиками мусора в том, что объекты удаляются сразу как только на них нельзя сослаться, и в инкрементальной манере, без долгих пауз для циклов сборки и с ясно определенным временем жизни каждого объекта.
http://ru.wikipedia.org/wiki/%D0%9F%D0%BE%D0%B4%D1%81%D1%87%D1%91%D1%82_%D1%81%D­1%81%D1%8B%D0%BB%D0%BE%D0%BA
12. tango 506 28.12.09 11:49 Сейчас в теме
(10) vs (5)
если 1с - это подсчет ссылок (5), то, по определению (10), на неудалившуюся, но закрытую форму должна быть возможность сослаться.
Вопрос - как?
14. steban 73 28.12.09 12:05 Сейчас в теме
(12)
по определению (10), на неудалившуюся, но закрытую форму должна быть возможность сослаться.
из (10) не следует возможность сослаться на неудаленный объект, на который нет внешних ссылок
15. steban 73 28.12.09 12:10 Сейчас в теме
+(14) то, что я назвал "внешними ссылками", в (11) описано как rootset
11. tango 506 28.12.09 11:46 Сейчас в теме
Основные понятия сборки мусора. Для системы управления памятью работа приложения может быть представлена как последовательность обращений к памяти. Связанная совокупность данных, создаваемая в результате размещения объектов, назначения и модификации указателей, может рассматриваться как направленный граф достижимости, узлами которого являются используемые объекты в куче, а связями – указатели. Исходное множество ссылок (root set), задается набором ячеек памяти, хранящихся вне области кучи и содержащих указатели на объекты в куче. Root set может состоять из статических переменных, объектов системных классов, локальных переменных процедур, регистров и т.д.

Существующие методы сборки мусора делятся на трассирующие и использующие счетчики ссылок.

Трассирующие методы сборки мусора основаны на определении полного графа достижимости. Сборка начинается со сканирования исходного набора указателей, далее происходит обход графа с обработкой достижимых объектов. В конце обхода, когда все достижимые объекты определены, память, занятая недостижимыми объектами, считается свободной. Достижимые объекты считаются живыми, а недостижимые относят к множеству свободных.

Основной идеей сборщиков с подсчетом ссылок является отслеживание числа указателей на каждый объект в куче. Если в некоторый момент выполнения приложения счетчик ссылок объекта стал равным нулю, это означает, что такой объект больше не нужен приложению (на него не ссылается ни один другой), и место в памяти, которое он занимал, может быть отнесено к множеству свободных блоков. Основным недостатком такой схемы управления памятью является невозможность обработки циклических структур, какими, например, являются двусвязные списки, так как в таких структурах на каждый объект всегда существует хотя бы одна ссылка.

http://www.swsys.ru/index.php?page=article&id=963
13. marsohod 123 28.12.09 11:55 Сейчас в теме
(0) :o :o :o
(6)
предупрежден - значит, вооружен
как это верно...
16. tango 506 28.12.09 12:15 Сейчас в теме
т.е., назначив форме обработчик ожидания, мы создали кольцо взаимных "внутренних" ссылок?
17. steban 73 28.12.09 12:26 Сейчас в теме
(16)нет.
вот эта строка приводит к созданию циклических ссылок:
Фрм = ПолучитьФорму("Форма")
Если ее убрать, то "роскошный глюк" таковым быть перестанет
19. tango 506 28.12.09 12:48 Сейчас в теме
(17) если Фрм не назначать Экспорт, то Фрм = ПолучитьФорму("Форма") не дает сабжа.
Наверное, кольца ссылок все-таки нет, есть некая "внутренняя", которая порождается Экспротом
**
и не очищается при закрытии формы
18. steban 73 28.12.09 12:38 Сейчас в теме
значит ли это, что 1с в обозримом будущем от сабжа не избавится, и это фича, а не баг
скорее всего - да
20. steban 73 28.12.09 12:52 Сейчас в теме
если Фрм не назначать Экспорт, то Фрм = ПолучитьФорму("Форма") не дает сабжа
убрал Экспорт. Форма не умерла.
Движок 8.1.14
22. tango 506 28.12.09 12:58 Сейчас в теме
(20) упс... сейчас посмотрю, умиралажже
21. steban 73 28.12.09 12:55 Сейчас в теме
При внимательном чтении описания метода "ПолучитьФорму" в синтакс-помощнике, можно сделать вывод, что Фрм=ПолучитьФорму("Форма") эквивалентно Фрм=ЭтаФорма
23. steban 73 28.12.09 13:00 Сейчас в теме
Фрм = ПолучитьФорму("Форма",,3)

возвращается новая форма, циклических ссылок нет, все умирают.
24. steban 73 28.12.09 13:03 Сейчас в теме
Создай новую внешнюю обработку, в ее модуле напиши
Перем Т;

Т=Новый ТаблицаЗначений();
Т.Колонки.Добавить("т");
Для Сч=1 По 1000000 Цикл
	Стр=Т.Добавить();
	Стр.Т=Т;
КонецЦикла; 

При каждом открытии обработки количество памяти, используемой процессом 1с, будет расти. Это является косвенным подтверждением того, что в 1с именно "подсчет ссылок", а не "сборка мусора"
26. tango 506 28.12.09 13:07 Сейчас в теме
(24) ок, верю, что так и будет. Однакож, здесь-то где закольцованная ссылка? Т в Т? и, получается, собственно форма как таковая не важна?
25. tango 506 28.12.09 13:03 Сейчас в теме
Вот Ой! так Ой!
правда, не умирает.
стало быть, фрм=ЭтаФорма...
27. steban 73 28.12.09 13:12 Сейчас в теме
Однакож, здесь-то где закольцованная ссылка? Т в Т?

после окончания цикла счетчик ссылок на Т будет равен 1000001 (переменная модуля ссылается на Т + миллион ссылок внутри самой Т).
При разрушении объекта обработки счетчик ссылок на Т будет уменьшен на 1, и т.к. он все еще положителен, то Т уничтожена не будет
28. steban 73 28.12.09 13:13 Сейчас в теме
1. "взрослые дяди" оказались обруганы ни за что,
2.
Постарайтесь как можно меньше использовать в своей работе ключевое слово Экспорт

сомнительная рекомендация, основанная на ложных выводах
3. "Роскошный глюк" оказался ожидаемым поведением
30. tango 506 28.12.09 13:15 Сейчас в теме
(28) текст публикации уже поправил, см. первый абзац
49. tango 506 29.12.09 09:12 Сейчас в теме
(28) Нет, это НЕ ожидаемое поведение. Ожидаемое - это закрыли, значит закрыли.
И то, что нам задним числом, за отдельную плату, объяснили (44), чего они НЕ сделали, дела не меняет.
29. tango 506 28.12.09 13:14 Сейчас в теме
Ок, я сообразил, почему на Экспорт погрешил: эксперементировал, когда Фрм была в модуле объекта.
31. tango 506 28.12.09 13:16 Сейчас в теме
сабж, тем не менее, остается в силе, так или иначе, 1снику надо следить за спиной
32. steban 73 28.12.09 13:18 Сейчас в теме
(31) рекомендация использовать голову никогда лишней не будет ;)
DMSDeveloper; Арчибальд; +2 Ответить
33. tango 506 28.12.09 13:18 Сейчас в теме
блин, сними минус, steban, поправилж
34. steban 73 28.12.09 13:20 Сейчас в теме
35. пользователь 28.12.09 13:42
Сообщение было скрыто модератором.
...
36. пользователь 28.12.09 13:45
Сообщение было скрыто модератором.
...
37. пользователь 28.12.09 13:58
Сообщение было скрыто модератором.
...
38. tango 506 28.12.09 14:38 Сейчас в теме
Имхо, фи к "взрослым" так же остаются в силе.
1. Программеры камней (базовый ввод-вывод)
2. Программеры ОС (виндовс, люникс, etc)
3. Программеры "взрослых" языков (си, паскаль, ява,..)
4. Программеры прикладных пакетов (1с,..)
5. Программеры скриптов (веб-дизайнеры, 1сники,...)
Очевидно, проблема циклических ссылок органично существует на 3. уровне (может быть, и на 1.,2.)).
Но не менее очевидно, что на уровнях 3.-4. эта проблема ДОЛЖНА быть решена уже и НЕ транслироваться на уровень 5.
39. Душелов 4013 28.12.09 14:49 Сейчас в теме
(38) В C# при возникновении бесконечного цикла срабатывает исключение.
40. steban 73 28.12.09 15:26 Сейчас в теме
(38)
Очевидно, проблема циклических ссылок органично существует на 3. уровне (может быть, и на 1.,2.))
Но не менее очевидно, что на уровнях 3.-4. эта проблема ДОЛЖНА быть решена

Я бы не сказал, что она ДОЛЖНА быть решена.
Выбор между RC и GC - это выбор между накладными расходами на сборку мусора или возможными утечками памяти (которых можно избежать). Те, кто проектировал 1С, сделали свой выбор в пользу "возможных утечек".
41. steban 73 28.12.09 15:29 Сейчас в теме
рискуем скатиться в холивар C++ vs С# :)
43. tango 506 28.12.09 15:31 Сейчас в теме
(41) вот, вот. 1сниковское ли это дело?
42. tango 506 28.12.09 15:30 Сейчас в теме
Свой выбор они сделали. Однако в мануалах написать об этом забыли.
44. steban 73 28.12.09 15:42 Сейчас в теме
(42)
Свой выбор они сделали. Однако в мануалах написать об этом забыли.

Диск ИТС.
Методическая поддержка 1С:Предприятия 8.1 -> Методические рекомендации по конфигурированию -> Встроенный язык -> Особенности хранения значений в переменных модулей объектов и форм
В платформе 1С:Предприятие 8 используется стратегия управления временем жизни объектов, основанная на подсчете ссылок на объекты - reference counting. Данная стратегия заключается в следующем. Каждый объект платформы содержит счетчик ссылок. При появлении ссылки на объект (объект присваивается какой-либо переменной) происходит увеличение счетчика на единицу, при уничтожении подобной ссылки -
значение счетчика на единицу уменьшается. Объект автоматически уничтожается, и память, занимаемая им, освобождается в момент, когда счетчик ссылок объекта становится равен нулю.

Особенностью подсчета ссылок на объекты является возможность организации "циклической ссылки". Циклическая ссылка возникает, когда объекты начинают ссылаться друг на друга. Это приводит к ситуации, при которой ни один из объектов, участвующих в циклической ссылке, не будет уничтожен. В свою очередь это является причиной возникновения утечек памяти (memory leaks).

Необходимо, по возможности, избегать появления циклических ссылок. Соблюдение достаточно простых правил при разработке конфигураций позволит избежать проблем связанных с циклическими ссылками. В случае появления подобной ссылки необходимо определить момент для ее разрыва, чтобы объекты могли быть уничтожены нормальным образом.

Полный перечень случаев возникновения циклической ссылки привести невозможно, приведем лишь некоторые примеры:
1 хранение в переменной модуля объекта (набора записей, формы) ссылки на данный объект (набор записей, форму) - ситуация приводит к появлению циклической ссылки - объект (набор записей, форма) никогда не будет уничтожен;
2 хранение ссылки на владеемый объект в объекте-владельце и ссылки на объект-владелец во владеемом объекте - оба объекта никогда не будут уничтожены.

Следует обратить внимание, что, помимо переменных модулей, ссылки на объекты могут образовываться при передаче их в методы встроенного языка. Например, добавление в список значений нового значения - этого же списка значений, приведет к появлению циклической ссылки.
JohnyDeath; +1 Ответить
45. tango 506 28.12.09 16:02 Сейчас в теме
(44) ок, дурак, ваше благородие :)
46. tango 506 28.12.09 16:08 Сейчас в теме
хм. Выходит, если ты купил 1с, но не подписался на итс, можешь никогда и не узнать всю правду о том, что купил?
53. Dementor 1015 30.12.09 11:09 Сейчас в теме
(46) Не купил, а украл. Практически со всеми конфами (типовыми так точно) идет подписка ИТС на 6 месяцев. Но даже если платформа идет не совсем законным путем, то что мешает "от туда" взять и образ ИТС?

За напоминание про циклические ссылки - спасибо.
47. steban 73 28.12.09 16:33 Сейчас в теме
Написал бы лучше практический рецепт по нахождению утечек при помощи технологического журнала вместо нападок на разработчиков платформы.
48. tango 506 28.12.09 16:49 Сейчас в теме
Технологических журналов в кадетском корпусе не проходили.
Собственно разработчики (типа коллеги) как бы вне критики, ответственность за косяки несут потребители нераспределенной прибыли от продажи продукта ("правообладатели", если можно так выразиться). А уж разработчиков пусть пинают те самые потребители, работа у них такая.
50. tango 506 29.12.09 10:04 Сейчас в теме
51. artbear 1448 30.12.09 10:12 Сейчас в теме
Для выравнивания ситуации также минусану.
Давным-давно известная проблема, со времен 7.7 ничего не изменилось :(
Как уже steban написал, 1С выбрала наиболее простой, определенный и быстрый метод.
59. пользователь 17.02.10 18:16
Сообщение было скрыто модератором.
...
52. artbear 1448 30.12.09 10:15 Сейчас в теме
Последние абзацы в описании вообще не понятны - кого убивать-то?
54. steban 73 30.12.09 11:38 Сейчас в теме
2tango
Расскажи мне, пожалуйста, почему выставление минуса публикации ты посчитал личным оскорблением и решил ответить личным оскорблением в описании публикации?
56. steban 73 13.01.10 11:51 Сейчас в теме
55. iceflash 4 30.12.09 16:23 Сейчас в теме
Странный "спор". В данном контексте - то, как отрабатывает 1с все верно с точки зрения подсчета ссылок И сборщика мусора.
Всегда поражало, то свойство большинства программистов под платформу 1с незнание основы основ, это печально. Нужно лишь знать мат часть.
Слава богу,что в свое время начинал с низкоуровневых языков, и использую 1с только для разработки решений в силу популярности платформы и соответственно монетизации. Не сочтите никто за оскорбление, просто мнение сформированное на фактах.
DMSDeveloper; Abadonna; +2 Ответить
58. tango 506 17.02.10 18:14 Сейчас в теме
(55) ты непоследователен. либо 1с подобна тому, с чего ты "начинал", и тогда "отрабатывает 1с все верно", либо это облочка для 1снегов, и тогда закрытие формы должно убивать всё в/из этой формы, есть там где-то какие-то ссылки или нет.

разработчики не стали (поленились, недопёрли) этого сделать. это плохо. в смысле - недостаток оболочки для 1снегов.
57. tango 506 17.02.10 18:09 Сейчас в теме
(54, 56) да ну, какие мелочи между друзьями!
61. пользователь 18.02.10 09:34
Сообщение было скрыто модератором.
...
62. artbear 1448 18.02.10 09:41 Сейчас в теме
(0) Имей уважение к оппонентам.
Пиши имени/ники оппонентов правильно, а не как тебе хочется.

Некоторые твои сообщения скрыты из-за нарушения п.3 и п.4. правил
63. tango 506 18.02.10 10:19 Сейчас в теме
ок, исправлю в публикации своё фырканье в адрес оппонента. тем более, что он фактически соавтор оной :)
64. pencroff 123 11.03.10 15:01 Сейчас в теме
Здесь все обсуждают то что могут быть кольцевые ссылки и утечки памяти. Подскажите как бороться с этими самыми утечками памяти в скрещенной конфигурации. Скрестили так что месячный документооборот при перепроведени = 1Gb оперативки. Как работать с технологическим журналом? Кто сталкивался с такими вопросами?
65. пользователь 27.09.12 12:54
Сообщение было скрыто модератором.
...
66. AlexO 135 27.09.12 13:11 Сейчас в теме
Не знаю, что тут такого сложного, но если на форму есть ссылка (её владелец еще не "отпустил") - она будет "жива".
Соответственно, разработчики пошли по простейшему пути (что не удивительно для разработчиков 1С) и сделали подсчет ссылок "до победного" (пока таковых не останется вовсе - вот тогда объект и уничтожится).
Кто сможет так извернуться, что и владелец не "закроется", д еще и ссылки в цикле начнут плодится от него - ну, молодец значит, такое просто так не сделаешь, значит, так и задумывал изначально.
67. tango 506 27.09.12 13:27 Сейчас в теме
(66) AlexO,
такое просто так не сделаешь

если что-то может быть сделано, кто-нибудь это сделает
68. a-novoselov 1155 22.03.13 15:47 Сейчас в теме
Сбор мусора, коллеги, это прошлый век!))
Посмотрите Win8 (специальные приложения на новом API) или Android - там память очищается всегда автоматически. Если не нужна программа, или форма программе, да и фиг с ней - пометили как не нужную и система сама заменит новыми данными, когда память нужна станет. И даже после закрытия программы, данные этой программы остаются в оперативной памяти. Зато при повторном запуске мгновенно открывается на том же месте, где закрыл. Сбор мусора - очень дорогостоящая и ни кому не нужная операция. Тем более сейчас даже на мобилках по 2 Гб оперативной памяти ставят, не говоря уж про десктопы. Мне кажется лет через пять программисты вообще забудут о том, что такое сборщик мусора, как о страшном сне. Так же, как когда-то забыли о необходимости встраивать драйвера для всех видео- и звуковых карт в свои приложения, когда вышел DirectX и OpenGL. А вы что думаете по этому поводу?
69. AlexO 135 22.03.13 16:16 Сейчас в теме
(68) a-novoselov,
пометили как не нужную и система сама заменит новыми данными

скажите об этом разработчикам 1С с их бесконечными утечками памяти.
И даже после закрытия программы она остается в оперативной памяти

После закрытия максимум, что останется от "программы" в ОП - это мусор, помеченный "на удаление".
Зато при повторном запуске мгновенно открывается на том же месте, где закрыл.

Вы имеете весьма и весьма отдаленное представление о работе копмьютера, ОС, программ и 1С.
В данном случае - перепутали очистку памяти (сборку мусора) с кэшированием/загрузкой памяти.
Мне кажется лет через пять программисты вообще забудут о том, что такое сборщик мусора

Среди повсеместной деградации все равно останутся люди, которые будут писать встроенные уборщики, чтобы те "не светились" и делали свое дело в "гаджетах, ОС, мобилках.."
Так же, как когда-то забыли о необходимости писать драйвера под все видео- и звуковые карты, когда вышел DirectX и OpenGL
без драйвера до сих пор и во веки, пока не сменится архитектура компьютера и логический принцип его построения, - не будет работать ни одна видео-звуко- и прочая "карта".
DirectX и OpenGL - это бибилиотеки API, к работе и взаимодействию самого устройства внутри/с другими устройствами (за что отвечает драйвер) отношения не имеющие. Названные графические API - отвечают за обработку изображения, и призваны унифицировать написание различнейших графических приложений.
А драйвера пишут те, кто занает, что это такое. Другое дело - многие драйвера все больше и больше встраиваются в ОС, а устройства - все больше унифицируются между собой в логике своей внутренней работы.
70. AlexO 135 22.03.13 16:18 Сейчас в теме
(68) a-novoselov,
Android - там память в принципе не очищается.

архивируется и самовоспроизводится в кремниевых кристаллах?
71. a-novoselov 1155 22.03.13 16:33 Сейчас в теме
(70) Что за привычка к словам цепляться...

Имелось ввиду память не очищается приложением, а очищается самой системой.
Так же как в Java память очищается средой исполнения а не конечной программой. И 1С сама память очищает, за редким исключением)

(69) А про OpenGL имелось ввиду не разработка драйверов в принципе, а то что их не нужно стало включать в каждую игру. Помните под ДОСом чтобы что-то запустить сперва конфигурируешь настройки встроенных драйверов через setup.exe... Прописываешь IRQ и DMA каналы для звуковой карты и т.д. Я не про производителей оборудования говорил, что им не нужно будет драйвера писать, а про разработчиков конечных приложений для пользователей.
72. AlexO 135 22.03.13 16:58 Сейчас в теме
(71) a-novoselov,
а то что их не нужно стало включать в каждую игру.

Так это и есть применение унификации через API, а не встройка драйверов устройств - в игры. Вы же пишите про драйвера к устройствам, а не к играм.
Прописываешь IRQ и DMA каналы для звуковой карты

Только лишь потому, что плата не предоставляла такую информацию драйверу, и приходилось их размещать вручную. Сейчас - предоставляет, и драйвер настраивается на "все те же прерывания" автоматически.
а про разработчиков конечных приложений для пользователей.

унификация работы драйверов с API ведет к унификации работы конечных приложений с этими API.
Т.е. ничего, по сути, не изменилось, а только приложения стали автоматически через API и драйвер устройства взаимодействовать с устройством и настраиваться.
Имелось ввиду память не очищается приложением, а очищается самой системой.

Посмотрите, что сами же и написали:
Посмотрите Win8 ... или Android - там память в принципе не очищается. Если не нужна программа, или форма программе, да и фиг с ней - пометили как не нужную и система сама заменит новыми данными, когда память нужна станет. И даже после закрытия программы она остается в оперативной памяти.
73. a-novoselov 1155 22.03.13 17:37 Сейчас в теме
(72) Изменил сообщение, чтобы сложнее было к словам придираться... Так что же, все таки, думаете по сути вопроса? а не про глубину и широту ваших познаний в области архитектуры ПК перед моими... Нужна будет забота об очистке памяти разработчикам конечных приложений для пользователей?
74. AlexO 135 22.03.13 17:40 Сейчас в теме
(73) a-novoselov,
Нужна будет забота об очистке памяти

А как вы представляете без этого? :)
Самоочищающийся модуль памяти? Так еще не изобрели такого.
75. tango 506 30.08.13 14:30 Сейчас в теме
Ладно. Тема, похоже, бессмертна, как перенумератор.
76. AlexO 135 17.10.13 11:21 Сейчас в теме
(75)
На самом деле, почему бы просто не написать:
- не пользуйте во внешних отчетах, обработках присвоение в переменной уровня модуля объекта - ссылки на какую-либо форму этой же обработки/отчета
Перем Форма; Форма = ПолучитьФорму("ДопФорма"); Форма.Открыть();
, т.е. не делать циклическую ссылку на сам объект (внешнюю обработку/отчет) через вызов формы как части этого объекта, а если есть в этом нужда - ПриЗакрытии явно очищать эту переменную Форма;
- не пользуйте во внешних отчетах, обработках присвоение переменной уровня модуля объекта/реквизиту объекта - установку ссылки на саму себя "любимую", тем более - в цикле а-ля пример из ( 24) (а для реквизита внешней обработки/отчета - избегать присвоение ему ссылки на него самого, как в коде, так и в задании Типданных "вручную" в "Свойствах").
Так как 1С не осилила разработать механизм разрешения ссылочных конфликтов и отследить, что ссылка закольцевалась на саму себя, и указатель в подсчете ссылок - создан ей же самой, и также подлежит стиранию, как и создавший этот указатель "родительский" объект, то все возложено на конечных программистов: либо избегать такой ссылочности, либо вовремя принудительно уничтожать объект, содержашщий "указатель" на себя самого, например, явным присвоением "Форма = Неопределено".
А то на ИТС это занимает целую страницу "мелким почерком", да еще и в разных местах, да еще и не все варинаты и неполное описание....
77. tango 506 17.10.13 11:29 Сейчас в теме
(76) AlexO, привет
почему бы просто ни написать

Потому что изначально - "доступно и всериоз"
Потому что до сих пор предмет гордости - прибыль на количество сотрудников
"пипл схавает"
**
да, еще: "Проблемы индейцев вендора не...". Ну то есть клиентами для флагмана являются франи, а не конечные юзеры
78. AlexO 135 17.10.13 11:40 Сейчас в теме
(77)
у меня вообще подозрение, что внутри 1С в части разработки платформы, методологии и написания справок/ИТС все еще более запутанно и "не по уму" :)
Об этом в этом сообщении.
79. tango 506 17.10.13 11:59 Сейчас в теме
(78) AlexO, Что творится в кишках вендора, можно только строить предположения.
Мое предположение такое, что кирпичи пирамиды вендора ориентированы более на "чего изволите", нежели на качество продукта.
80. AlexO 135 17.10.13 14:29 Сейчас в теме
(79)
Привет, конечно же :)
более на "чего изволите"

А кто вот предъявляет это "изволяю"?! Вот его и надо вывесить .... на всеобщее обозрение...
Оставьте свое сообщение