gifts2017

Глюк в 1С 8 с зависанием (кешированием/буферизированием) обработки в памяти (не обновляется код)

Опубликовал Олег Шалимов (CaSH_2004) в раздел Программирование - Практика программирования

Описание глюка с зависанием (кешированием/буфферизированием) обработки/формы в памяти (не обновляется код)

Ключевые слова: баг, глюк, фича, не обновляется код, циклические ссылки

1С:Предприятие 8.2 (8.2.13.219), Win XP, Win Seven
Из-за незнания этого бага я потратил пол дня: чистил кэши, перустановил несколько раз 1С на самый последний релиз, переустановил Windows, и эксерементировал с разными базами, разным обработками пытаясь вычислить в чем причина следующей проблемы: есть внешняя обработка, после ее выполнения закрываю ее, но 1С не закрываю, после этого что то меняем в коде, запускаем ее и пытаюсь выполнить новый код. Но не тут-то было!!! Обработка не видит новый код! Даже в отладчике становяь на нужный код я получаю что если передана например переменная - то ее проверка через "Вычислить выражение" показывает что переменной просто нет. Ощущение что обработка вызывается из виртуальной памяти, а не с диска. Эксперименты выявили что это происходит если в модуле обработки открыть произвольную форму данной обработки, например:
Форма = ПолучитьФорму("ДопФорма");
Форма.Открыть();

И все! Обработка с данным именем зависла в памяти! Если ее переименовать или перезапустить сеанс 1С то все нормально пока этот код не отработает
Если тот же код запустить из формы (пробоавал ту что по умолчанию) то все нормально будет.
Самое интересное однако дальше! Если сократить код в модуле обработке до такого:
ПолучитьФорму("ДопФорма").Открыть();
То все тоже будет нормально. Итак приходим к выводу что виновата переменная "Форма", и действительно стоит ее обнулить, и все опять нормально! Вот так:
Форма = ПолучитьФорму("ДопФорма");
Форма.Открыть();
Форма = "";

Удивительно что в 1С приходится следить за чисткой переменных после работы, даже Бэйсик в этом плане работает лучше. Похожее на это я встречал на 7.7 при использовании внешних компонент, но на это претензий нет, т.к. вроде бесплатно и не от производителя, к тому-же часто авторы говорят что созданные объекты нужно обнулять.

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

Кстати с данной ошибкой я познакомился впервые в продукте "АСДОБ v.1.0.26" от фирмы ООО "Аудит - новые технологии" в одной газовой компании. Пока еще не копался глубоко, но если она не в закрытом модуле то попробую исправить и вышлю разработчикам информацию об этом.

Продолжение от 30.05.2015:

Неожиданно вопрос повторился, на этот раз на грабли наступил более именитый разработчик "1С-Рарус" в своей обработке "Загрузка данных в "Бухгалтерия предприятия редакция 2.0" версий 2.0" - аналогично завели экспортные переменные "ФормаПараметров" и "ФормаСоответстий".

Итог: разработчики обнуляйте переменные с формами хотя бы в обработчике ПриЗакрытии()


Благодаря помощи сообщества, а именно пользователя Lara.Builova установлено что данная проблема описана в разделе ИТС "Методические рекомендации по конфигурированию" (46) из подраздела "Прочие", (50) - "Встроенный язык".

Вот выдержки присланные Lara.Builova:
Методика решения проблемы с открытием старой версии внешней обработки
В процессе разработки конфигураций иногда может возникнуть следующая ситуация.

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

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

Рассмотрим ситуацию несколько подробнее. В режиме исполнения (1С:Предприятие) объект обработка существует в памяти в качестве реквизита формы обработки. При закрытии формы обработка прекращает свое существование.

Данная схема нарушается в двух случаях. На саму обработку возникла дополнительная ссылка, либо ссылка возникла на форму, в этом случае закрытие окна формы не означает уничтожение объекта - формы. Соответственно, остается в памяти и обработка.

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

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

Если "обратная связь" между обработкой и формой все же необходима, следует явным образом позаботиться о ее разрыве. Это можно сделать, например, в обработчике закрытия формы.

Методика устранения проблемы
Даже следование всем рекомендациям не может застраховать от возникновения подобной проблемы.

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

Еще про циклические ссылки с ИТС:

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

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

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

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

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

Ссылки в тему:
http://infostart.ru/public/63392 - Кольцевые ссылки в скриптах 1С 

См. также

Подписаться Добавить вознаграждение

Комментарии

1. red 80 (red80) 03.09.11 22:56
Тоже наблюдал подобное, решал проблему перезагрузкой, не копался в причинах. Теперь буду знать, спасибо.
2. Олег Шалимов (CaSH_2004) 03.09.11 23:00
(1)Я тоже на работе неделю назад с таким познакомился, но там было некогда. Зато когда такой глюк отловил дома тут я уж не стерпел и бросил все силы на отлов бага, в итоге весь ПК перетряхнул:)
Сильно напомнило о притче http://infostart.ru/public/57360/
3. Александр Медведев (anig99) 04.09.11 00:37
Плюс за решение, но не баг. Баг известен ещё с 8.0 Именно поэтому у меня есть привычка часто менять номер версии обработки в заголовке окна.
4. Олег Шалимов (CaSH_2004) 04.09.11 11:42
(3)Восхититеьно! К сожалению я, как и многие, не знал об этом. А это написано в официальном перечне ошибок 1С прилагаемый к платформе? Если нет, то повторения наступления на грабли неизбежны. Если да то удивляет почему разработчики считают что это не нужно исправлять? Так это решение было известно или только баг был известен?
5. Александр Медведев (anig99) 04.09.11 20:53
(4) в официальных багах ошибки этой не видел. Видимо из разряда "видели, знаем почему, исправить не можем". Кроме того, само 1с редко балуется внешними обработками.

Есть ещё одна ошибка, которую не пишут. Иногда при открытии формы (отчета, справочника, документов и т.д.) она не выводится на экран. В списке окон появляется, на панели окон тоже. Но можно тыкать на название до посинения, но ничего не появится. Пока не нажмешь правой кнопкой на названии окна в панели окон и не выберешь пункт "Восстановить положение".
6. Ийон Тихий (cool.vlad4) 04.09.11 21:27
(5) Ну, глюки с формами у 1С периодические. Довольно часто встречался глюк с подбором(в типовой), неправильные внутренние размеры формы по сравнению с внешними (как будто неправильная привязка), также решается с помощью "восстановить положение".
7. Аркадий Кучер (Abadonna) 05.09.11 03:45
Баг вполне прогнозируемый. Модуль формы работает в адресном пространстве самой формы, форма при закрытии за собой подчищает. Модуль обработки работает в адресном пространстве всего приложения, там недочистили.
Другой вопрос: если надо просто открыть форму, зачем создавать промежуточную переменную? Для красоты?
ПолучитьФорму("ФормаБлаБла").Открыть() - никакого подвисания не вызовет.
Тут больше баг "чистых одноэснегов", вообще плохо представляющих как работает память.
Если просто открываем форму, то имеем при раскладе, описанном у автора:
Форма=ПолучитьФорму("ФормаБлаБла"); // получили беспонтновый указатель, который и будем хранить неизвестно зачем (и, как выяснилось, неизвестно сколько)
Если он нам еще может понадобиться - куда ни шло, а если только для Форма.Открыть() - просто расточительное программирование.
_______________________________
В сухом остатке:
За то, что автор разобрался в чем дело - плюс.
За что что ему вообще пришло в голову использовать конструкцию
Форма=ПолучитьФорму(); Форма.Открыть() - минус.
Итого: нейтралитет ;)
8. Владимир (hogik) 05.09.11 04:23
(7)
Аркадий.
А "Форма", случайно, не является ключевым словом? А если объявить эту переменную явно в модуле обработки - глюк остаётся?
9. Аркадий Кучер (Abadonna) 05.09.11 04:28
(8) Остается, потому что это почти "глобальный" модуль.
Получили (и запомнили )указатель в системе, после закрытия обработки указатель не подчистился (это уж разработчиков косяк), так и завис
В явном виде Форма=""; чистит этот указатель после Форма.Открыть(), ссылок не остается, и все ОК.
10. Владимир (hogik) 05.09.11 04:37
(9)
Чистит при Форма="" - понятно. Но если её объявить явно - что будет? Или в модуле обработки написать и вызывать функцию, а в ней уже делать вызов ПолучитьФорму() - должно, вроде, зачистить при завершении функции. Или - нет?
11. Аркадий Кучер (Abadonna) 05.09.11 04:38
(10)
Но если её объявить явно - что будет?

Вова, я ж, как-никак, НС бывший, любопытный :D
Проверил: ОСТАЁТСЯ
Да! А в процедуре локальную - надо попробовать
12. Владимир (hogik) 05.09.11 04:44
(11)
"НС бывший" - и это чувствуется. Типа, сам уже проверил, и никому не скажу... :-)
Проверяй дальше. Жду результат... ;-)
13. Аркадий Кучер (Abadonna) 05.09.11 04:45
+(11) Для особых извращенцев :D
Процедура ОткрытьМоюФорму()
Перем Форма; // эта переменная локальная внутри процедуры
Форма=ПолучитьФорму("Форма1");
Форма.Открыть();

КонецПроцедуры


Сообщить("РазДваТри555666");// а это, чтобы проверять, что код меняется...
ОткрытьМоюФорму();
____________________
Вот так (тоже прогнозируемо) - переменная чистится, зависания нет

И еще интереснее: можно в процедуре и не объявлять переменную, т.е просто убрать там Перем Форма;

Вывод: не надо баловаться с переменными в теле модуля, они могут и не подчиститься, а вот внутри процедур модуля - сколько угодно.
14. Владимир (hogik) 05.09.11 04:51
(13)
Сам ты извращенец после таких слов: "это почти "глобальный" модуль". ;-)
Спасибо НС-у от СНС-а за проведенное научное исследование... :-)
15. Аркадий Кучер (Abadonna) 05.09.11 04:53
(14)
от СНС-а

СНС, ваще-то я завлабом был :D
16. Владимир (hogik) 05.09.11 04:57
(15)
Ну, вот, опять. Все МЫ - были... Забудь...
17. Алексей Константинов (alexk-is) 05.09.11 06:21
Вот ещё ситуация, которая не подчищается во внешних отчетах и обработках.
Прикрепленные файлы:
18. Александр Медведев (anig99) 05.09.11 06:50
Дааааа... Кстати. Чуть не забыл. Чистить переменную форма можно только если она задана явно... А если форма открывается как основная, то помогают только спец маркеры на форме. Например, регулярно меняемые номер версии в заголовке окна.
19. Илья (i132) 05.09.11 10:33
по моему это где-то описывалась на ИТС - про кэширование объектов
20. Александр Окулов (PowerBoy) 05.09.11 11:55
Люди вы что никогда не слышали термина "Циклическая ссылка"!!! Это азы!!! Описано и в документации и на ИТС еще с 8.0.
21. Аркадий Кучер (Abadonna) 05.09.11 12:01
(20) Как бы они ее там не называли, нормальная прога (обработка) обязана за собой всё почистить в секции Finalization- вот это АЗЫ
22. Ийон Тихий (cool.vlad4) 05.09.11 12:02
(20) Ну, глюк из 6 это никакая не "Циклическая ссылка". Замечено при изменении размера окна (обычно, когда пользователь работал совместно другим окном - например icq).
23. Александр Окулов (PowerBoy) 05.09.11 12:02
(21) В Экселе сделай циклическую формулу - и объяви что баг нашел. :)
24. Аркадий Кучер (Abadonna) 05.09.11 12:07
(23)Я-то как раз и не объявлял, что баг нашел. Мало того, четко написал, что он прогнозируемый.
Но: покажи-ка на пальцах чего тут циклического? Обе формы закрылись, ничего не ругнулось.
В каком адресном пространстве заторчала эта ссылка? Почему после закрытия всех форм обработки она не самоликвидировалась?
А ДОЛЖНА была
/13/ читал?
25. Артур Аюханов (artbear) 05.09.11 12:13
А (0) случайно, не объявлена в начале модуля обработки, т.е. время ее жизни не равно ли времени работы обработки?
Тогда это точно циклическая ссылка.
(13) косвенно подтверждает это предположение.
26. Александр Окулов (PowerBoy) 05.09.11 12:14
(24)
1.Сам вызов формы из модуля объекта я считаю ошибкой.
2.1с не может удалить объект, если у него есть ссылка на подчиненные себе объекты, конкретно как это реализуется у 1С надо смотреть ИТС.
27. Аркадий Кучер (Abadonna) 05.09.11 12:15
(25)
случайно, не объявлена в начале модуля обработки

Когда я проверял, они у меня и случайно не была объявлена, и специально потом объявлял. Без разницы - висняк. Время жизни - до перевключения 1С.
Внутри процедуры - благополучно дохнет, как и должна
28. Аркадий Кучер (Abadonna) 05.09.11 12:17
1.Сам вызов формы из модуля объекта я считаю ошибкой.
2.1с не может удалить объект, если у него есть ссылка на подчиненные себе объекты, конкретно как это реализуется у 1С надо смотреть ИТС.

Еще раз повторю: всякая уважающая себя прога (обработка) ОБЯЗАНА чистить за собой. Если не чистит - баг
29. Александр Окулов (PowerBoy) 05.09.11 12:17
(26) + То бишь "родитель" формы является тем же объектом, кому принадлежит модуль объекта. :)
30. Александр Окулов (PowerBoy) 05.09.11 12:20
(28) Если баг описан в документации, то это фича. :)
31. Аркадий Кучер (Abadonna) 05.09.11 12:21
(29) Значит, 13 ты все-таки не прочел.
Там те же условия:
"родитель" формы является тем же объектом

но с маленькой разницей - жизнь переменной только внутри процедуры. И НЕ ВИСНЕТ
А так: все та же "циклическая"
32. Олег Шалимов (CaSH_2004) 05.09.11 13:06
(7)Abadonna пишет: если надо просто открыть форму, зачем создавать промежуточную переменную? Для красоты?

Странный ты спец! Я же ясно написал что это пример, ситуация была такая что это потребовалось, если любопытно то я делал для своей обработки аналог из типовых ЗУП ред.2.5 и КА ред.последняя "Обработка.СообщенияВыполняемыхДействий".

Abadonna пишет: ПолучитьФорму("ФормаБлаБла").Открыть() - никакого подвисания не вызовет.

Именно это я и расписал в статье

Abadonna пишет: Тут больше баг "чистых одноэснегов", вообще плохо представляющих как работает память.

Если так подходить то можно требовать от любого водителя знания как чинить мотрор машины и знание всех принципов машиностроения, а так я могу сказать что лучше езжу на машение чем авто-слесарь, так же как он лучше меня чинит ее. Это разделение обязанностей. 1С для того и придумали чтобы могли пользоваться люди которые не собираются кодить в 0-м цикле распределяя память и чистя все за собой:)

Abadonna пишет: Форма=ПолучитьФорму("ФормаБлаБла"); // получили беспонтновый указатель, который и будем хранить неизвестно зачем (и, как выяснилось, неизвестно сколько)
Если он нам еще может понадобиться - куда ни шло, а если только для Форма.Открыть() - просто расточительное программирование.


Спасибо что тут признал что ВОЗМОЖНО это мне нужно, а не просто фигней страдаю:)
33. Аркадий Кучер (Abadonna) 05.09.11 14:17
(32)
Именно это я и расписал в статье

Я и не утверждал, что ты это НЕ писал.
А вот действительно ли
это мне нужно
- откуда я знаю?
Может действительно "фигней страдаешь"?
А то я не знаю как копипастят "классический код"!
А его студентики корябали ;)
Вообще-то я не конкретно про тебя писал
"чистых одноэснегов"

_______________
то можно требовать от любого водителя знания как чинить мотрор машины

Вот когда ездили те, кто знал, как чинить мотор, можно было еще ездить. А сейчас на дорогах одни лодочники итальянские
:D Вот как раз сейчас из окна смотрю: как же можно было умудриться на регулируемом пешеходном переходе столкнуться под углом 90 градусов?
Всё, пробочка гарантирована
34. Андрей (AndrewEv) 05.09.11 21:57
Вот я, например, всегда все переменные небазового типа закрываю:
ValList = UnDefined;
Что по-русски
СпЗнач = НеОпределено;
Это мне не позволило познакомится с багом...
35. Lara.Builova 05.09.11 22:30
А я просто не выбираю имена переменных из списка зарезервированных системой.
Прикрепленные файлы:
36. Аркадий Кучер (Abadonna) 05.09.11 23:02
(35)
А я просто не выбираю имена переменных из списка зарезервированных системой.

Пришла Лора и сразу все проблемы решила.
Дело-то, оказывается, в имени переменной, а вовсе не в том, что тут все дурачки написали.
Для справки особо одаренным: когда я тестил, эта переменная у меня называлась "Ф".
Это тоже зарезервировано?
Надо написать в 1С, а то что они, дурачки, не следуют твоим рекомендациям?:
Форма (Form)
Открыть (Open)
Синтаксис:

Открыть()
Описание:

Открывает форму и делает ее окно активным.

Доступность:

Толстый клиент.
Пример:

Форма = Справочники.Номенклатура.ПолучитьФормуСписка();
Форма.Открыть();

37. Александр Зубцов (iov) 05.09.11 23:30
(34) Жил да был идеальный программист и написал он идеальный код. Но прошло время и надо было изменить идеальный код и пригласили программиста (хороший мальчик - знакомый студент) и сказал он что программист - плохой и переписал код - но глючил его код и мальчик переписал глобальный модуль, но и тогда не заработал код. И позвали они друго-го программиста и то дописал код и написал еще немного.... и длилось так годами и заработали программисты денег и ругали они предыдущих. Смысл в том что вокруг рыночные отношения и код писать грамотно-не всегда выгодно - порой быстренько на коленке выгодней... Я за хороший код но как вы объясните заказчику что ваш код круче но дороже потому что он гипотетически не содержит ошибок?

(33) И про машинки верно - вот не стукнись они не заработают люди денег а если все будут по правилам ездить? На чем производителям зарабатывать? У кого нефть отнимать чтоб ездить? Есть мнение что вечные вещи - убьют мир. Так вот 1С с её глюками и недоделками - прям свеча зажигания экономики - прогеры не так мало зарабатывают жеж.

(0) Ну вот теперь более мощный сервер тебе не светит - 1С же не виснет ;)
38. Александр Зубцов (iov) 05.09.11 23:33
(0) P.S. Всем спасибо - глюк смачный - вон как его обмусолили и облизали тарелку... Ищи еще... >громко стуча ложкой по столу<
39. Lara.Builova 06.09.11 00:11
(36) не знаю, откуда ты это берешь, в СП примеры такие:
Товары = Справочники.Номенклатура;
ФормаСписка= Товары.ПолучитьФорму("ФормаСписка");
Если Не ФормаСписка.Открыта() Тогда
    ФормаСписка.Открыть();
КонецЕсли;
...Показать Скрыть
ИЛИ
Клиенты = Справочники.Контрагенты;
НовыйКлиент= Клиенты.СоздатьЭлемент();
НовыйКлиент.ПолучитьФорму().Открыть(); 

И получить форму списка:
Товары = Справочники.Номенклатура;
ФормаСписка= Товары.ПолучитьФормуСписка();
Если Не ФормаСписка.Открыта() Тогда
    ФормаСписка.Открыть();
КонецЕсли;
...Показать Скрыть

Ни в одном примере не встретилось объявление переменной "Форма". Может плохо искала.
40. Аркадий Кучер (Abadonna) 06.09.11 03:29
(39) На! Смотри! Если это не СП, то я - папа Римский.
Движок 8.2.13.202. Не супер свежак, но все-таки...
Прикрепленные файлы:
41. Аркадий Кучер (Abadonna) 06.09.11 03:42
И еще смотри:

Может в твоем СП переменная вообще "шаршы пішін" названа?
А для полного тебе счастья (ты ж любишь, когда все стандартно-одноэсовски) - второй рисунок, поиск по типовой УТ
Прикрепленные файлы:
42. Аркадий Кучер (Abadonna) 06.09.11 04:23
(37)
как вы объясните заказчику что ваш код круче

Совсем недавно:
- В такой-то накладной неверно посчитан НДС!
-?
Смотрим: точно, блин, не тот, что должен быть.
Оказалось: франь, который работал до нас, приделал кнопку "Убрать автоматические скидки"
Скидки обнуляются, потом стоит:
ОбработкаТабличныхЧастей.РассчитатьСуммуТабЧасти(...)
А про то, что надо бы еще:
ОбработкаТабличныхЧастей.РассчитатьСуммуНДСТабЧасти(...) он "забыл"
Полтора года (!!!) они так работали, пока какой-то покупатель их носом не ткнул.
Благо эту кнопку не так часто нажимали, однако за 8 месяцев документов 80 набралось.
43. Олег Шалимов (CaSH_2004) 06.09.11 10:12
Lara.Builova пишет:

А я просто не выбираю имена переменных из списка зарезервированных системой.

Да что же вы все так вцепились в то что я написал как ПРИМЕР!!! В рабочей ситуации все работает совсем по другому, совсем другие условия, другие переменные, только смысл тот-же.
44. Олег Шалимов (CaSH_2004) 06.09.11 10:26
(33)Удивительно! Почему же если не знаеш надо сразу худшее предпологать, и при этом об этом тут-же объявлять вслух?
45. Аркадий Кучер (Abadonna) 06.09.11 11:40
(44)
Удивительно, что ты именно на меня имеешь какие-то обиды. На того, кто последовательно как раз и защищает мысль, что это баг 1С
В отличие от:

Люди вы что никогда не слышали термина "Циклическая ссылка"!!! Это азы!!!


А (0) случайно, не объявлена в начале модуля обработки, т.е. время ее жизни не равно ли времени работы обработки?

А я просто не выбираю имена

На первые два лично я как раз бы жестоко оскорбился.
Воистину: ни одно доброе дело не останется безнаказанным! :D
46. Lara.Builova 06.09.11 12:04
(43) Вообще то (35) постом я отвечала на (34) :)
Что касается самой статьи:
есть внешняя обработка, после ее выполнения закрываю ее, но 1С не закрываю, после этого что то меняем в коде, запускаем ее и пытаюсь выполнить новый код. Но не тут-то было!!! Обработка не видит новый код! Даже в отладчике становяь на нужный код я получаю что если передана например переменная - то ее проверка через "Вычислить выражение" показывает что переменной просто нет

Ситуация описана на ИТС как последствие циклической ссылки. Простите за простынь:
Методика решения проблемы с открытием старой версии внешней обработки
В процессе разработки конфигураций иногда может возникнуть следующая ситуация.

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

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

Рассмотрим ситуацию несколько подробнее. В режиме исполнения (1С:Предприятие) объект обработка существует в памяти в качестве реквизита формы обработки. При закрытии формы обработка прекращает свое существование.

Данная схема нарушается в двух случаях. На саму обработку возникла дополнительная ссылка, либо ссылка возникла на форму, в этом случае закрытие окна формы не означает уничтожение объекта - формы. Соответственно, остается в памяти и обработка.

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

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

Если "обратная связь" между обработкой и формой все же необходима, следует явным образом позаботиться о ее разрыве. Это можно сделать, например, в обработчике закрытия формы.

Методика устранения проблемы
Даже следование всем рекомендациям не может застраховать от возникновения подобной проблемы.

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

Так что может лучше проанализировать код еще раз... :oops:
inanity; Yasen; Spartan; +3 Ответить 3
47. Олег Шалимов (CaSH_2004) 06.09.11 12:19
(45) Ну у тебя на мой взгляд получилось жестче. Хотя я не в обиде, просто странно что это тут все так друг другу тычат носом кто чего не знает. Вроде сайт предназначен чтобы узнавать новое с минимумом усилий. А получается тыкалово. Как-то неприятно. Естественно не все все знают, но можно же промолчать или посоветовать куда рыть. Нет же - все начинают вопить, да ты ниче не знаеш, да это азы, ты страдаеш фигней! Это как-то унижает знате-ли. Когда вы у прохожего спрашиваете как кудато пройти - такого вы не услышите, а представььте себе аналагичный ответ, какая будет ваша реакция - возможно вы даже физически ответите, а не только устно.
Почему-то все думают раз разговор происходит не в реале, можно спокойно друг-друга оскорблять, типа анонимно это не так болезненно другой стороне, но так же приятно и безопасно нам.
Ладно это все лирика, размышления вслух.
(46) Действительно, повидимому все есть. Виноват, не читалю ИТС, хотя и есть они, код действительно содержит ситуацию описанную в ИТС, и повидимому попадает под понятие "возникновение циклических ссылок", я отмечу это в посте чтобы другим таким же "гениям" как я было легче найти проблему.
Есть же такие трудолюбивые спецы которые читают все что написано на ИТС, и помнят и понимают все что там написано! Завидую вам от души
48. Аркадий Кучер (Abadonna) 06.09.11 12:20
(0) Во! А ты на меня обижаешься. :D
В /13/ код проанализирован, показано, что именно такой код, но со временем жизни переменной в пределах процедуры никаких проблем не вызывает.
А они тебе так и будут талдычить про "проанализировать".
49. Олег Шалимов (CaSH_2004) 06.09.11 12:24
Кстати не тольько я не знаю про "цикличексие ссылки", я нескольких знакомых перед этим опросил - все тоже без понятия были, а читать горы ИТС и другой документации не зная даже какие слова ключевые - бесполезное дело как показывает практика, ну в 20% получалось остальное быстрее самому вычислить.
(48) Да я без обид конкретно на тебя, т.к. ты не один такой, вы все тут как с одной сковородки слезли :) ошпаренные какие-то
50. Lara.Builova 06.09.11 12:28
(47) Еще про циклические ссылки с ИТС:
Особенности хранения значений в переменных модулей объектов и форм
В платформе 1С:Предприятие 8 используется стратегия управления временем жизни объектов, основанная на подсчете ссылок на объекты - reference counting. Данная стратегия заключается в следующем. Каждый объект платформы содержит счетчик ссылок. При появлении ссылки на объект (объект присваивается какой-либо переменной) происходит увеличение счетчика на единицу, при уничтожении подобной ссылки - значение счетчика на единицу уменьшается. Объект автоматически уничтожается, и память, занимаемая им, освобождается в момент, когда счетчик ссылок объекта становится равен нулю.

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

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

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

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

Если циклические ссылки не случайны, а необходимы по замыслу разработчика, то переменные нужно очищать, но при этом
необходимо определить момент для ее разрыва, чтобы объекты могли быть уничтожены нормальным образом
afk; Spartan; +2 Ответить 2
51. Аркадий Кучер (Abadonna) 06.09.11 12:31
(47)
Есть же такие трудолюбивые спецы которые читают все что написано на ИТС, и помнят и понимают все что там написано! Завидую вам от души

Да, офигеть! Они и ЖКК, наверное, читают :D
Знавал я одного такого читальца - выгнали за профнепригодность.
52. Олег Шалимов (CaSH_2004) 06.09.11 12:32
(50)Дайте хотя бы ссылку где об этом почитать? На каком ИТС в каком разделе и какая статья, я хоть в статье это укажу, всем полезно будет
53. Александр Медведев (anig99) 06.09.11 12:36
(46) а ведь эту статью с ИТС здесь уже на форуме выкладывали. Только сейчас и вспомнил.
54. Александр Медведев (anig99) 06.09.11 12:37
(51) на ИТС тоже полезное иногда печатают (:
55. Олег Шалимов (CaSH_2004) 06.09.11 12:38
(51)Несмотря на правду это слишком саркастично. Стиль знакомый.
Думаю стоит иметь ввиду мировую практику, а именно: бывают голые теоретики и есть практики. Это как и любой перегиб ведет к проблемам, но если использовать таланты людей правильно то результат неплохой. Сходу не приведу примеры т.к. не компьютер, но есть же много открытий которые сделаны теоретиками но внедрены практиками, так что каждая работа важна, а чем заниматься самому - на то и дана жизнь, чтобы разобраться как получить от нее кайф! Прыгать как ямакаси по домам с риском для шеи или изучать космос. На мой взглаяд это дело каждого - лишбы была хоть какая-то отдача, а не просто паразитическое существование.
56. Аркадий Кучер (Abadonna) 06.09.11 12:47
:D вот вам, плиз. Типовая УТ, модуль ОБЪЕКТА Отчет.РапортРуководителю
// Процедура расшифровки показателя "Количество неисполненных заказов покупателей"
//
Процедура Заказы_НеисполненныеЗаказыПокупателейРасшифровка(Параметры)

Расшифровка = Параметры["Расшифровка"];
.......................
Форма = ОтчетРасшифровка.ПолучитьФорму();
Форма.ОбновитьОтчет();
Форма.Открыть();

КонецПроцедуры // Заказы_НеисполненныеЗаказыПокупателейРасшифровка()

Правда, как и в /13/, внутри процедуры.
Что как раз и подтверждает то, что я (в жизни не читавший никаких ИТС-ов) изложил:
Вывод: не надо баловаться с переменными в теле модуля, они могут и не подчиститься, а вот внутри процедур модуля - сколько угодно.
57. Олег Шалимов (CaSH_2004) 06.09.11 12:54
(56)Вот упертый, да не баловался я, мне как раз нужно было чтобы переменная "Форма" жила все время жизни обработки, а не во время отработки процедуры. Оказалось что нужно явно убивать такую переменную - все КОНЕЦ ВОПРОСА! Спасибо всем за внимание и понимание.
58. Аркадий Кучер (Abadonna) 06.09.11 12:57
(57)Это ты упертый!!!!!!!!!!!!!!!! Или у тебя мания величия - всё на себя примеряешь?
Вообще не о тебе конкретно разговор идет
59. Lara.Builova 06.09.11 12:57
(52) Раздел ИТС "Методические рекомендации по конфигурированию" (46) из подраздела "Прочие", (50) - "Встроенный язык". Названия статей выделены жирным в цитатах.
60. Александр Зубцов (iov) 06.09.11 14:46
(42) истории из жизни - это хорошо... но ведь врать тоже их расказывал прежде чем хрень написать - и денег он срубил - и ты потом срубил... А напиши он правильно тыб и не заработал- верно?
61. Аркадий Кучер (Abadonna) 06.09.11 15:02
(60)
и денег он срубил - и ты потом срубил.

Хм... Да я ж всегда и утверждал, что все МЫ (одноэснеги) - беспонтовая хрень, существующая благодаря идиотской политике государства.
Ничего не производим, плодим баги, исправляем свои и чужие и т.д...
От нас, бухов и налоговиков обществу пользы ноль. Зато все при деле и при бабках ;)
62. Александр Зубцов (iov) 06.09.11 15:04
(61) как в принципе от множества других профессий (типа Ахранников и кучи пилиционеров ) мы хоть что-то производим (баги тоже продукт - полуфабрикат)
63. Александр Зубцов (iov) 06.09.11 15:11
(61) Предлагаю собраться где нить с чашкой пива и посыпать голову пеплом и покаяться :)
64. Иван (Spartan) 06.09.11 15:18
(56) В статье написано "нельзя помещать в реквизит обработки или нелокальную переменную ее модуля", "хранение в переменной модуля объекта". В твоем примере переменная - локальная, время жизни - процедура.
Но баг неочевидный, согласен - я тож ИТС не читаю... :D
65. Неран Гкреси (LeaNaeD) 06.09.11 17:35
Парни, там все сложнее с этим багом, не в форме дело. Точнее не только в форме.

В общем сейчас невольно воспроизвел этот баг.

Беру стандартный отчет "Продажи" из конфигурации (УТ 10.3, платформа 8.2.14.519), сохраняю как внешний отчет, открываю его в конфигураторе, делаю маленькую приписку - новый показатель, рассчитывающийся по некоей формуле с использованием переменной в запросе. Ну и, как полагается, косячу (куда уж без этого)- устанавливаю построителю отчета значение переменной уже после того, как отчет, собственно формируется и выводится в форму отчета. Запускаю предприятие, проверяю отчет - бабах выскакивает ошибка. Екарный бабай, надо же было такую ошибку сделать. Перехожу в конфигуратор (он все еще открыт в соседнем окне, обработка тоже не закрыта, в предприятии ни на какие кнопки в окне с ошибкой отчета не нажимал - пусть висит, не мешает же). Исправляю ошибку, сохраняю отчет. Понятное дело, без перезапуска запускается все та же старая косячная версия. Перезапускаю предприятие. Чу! Все та же ошибка выскакивает! Ладно, выхожу из предприятия, выхожу из конфигуратора, снова захожу в конфигуратор и предприятие. И опять та же самая ошибка!

Теперь внимание, самое главное - открываю мой отчет в конфигураторе и вуаля! В этом отчете ОТСУТСТВУЮТ последние изменения, связанные с исправлением косяка в коде! Снова правлю отчет, сохраняю, опять выхожу из предприятия и захожу снова, запускаю отчет - работает!

А вы говорите - формы, формы. Тут какой-то комплексный косяк платформы.

Вчера было еще хлеще, мудрил несколько часов с отчетом (тоже работающим от универсального), так когда сохранял, сначала файл отчета был со всеми доработками, все работало качественно, потом тыркнул на расшифровку отчета, естесственно вывалилась ошибка, после этого я что-то там разбирал и пересохранил отчет => в файле после этого был код, словно я вообще не приступал к работе!


Ужос, товарищи. На 13 версии платформы достаточно редко встречалось примерное такое (по крайней мере, у меня), и то это было связано с отладкой - тоже какой-то древний баг, когда в режиме отладки версия отчета или обработки не совпадает с версией, сохраненной в файл в конфигураторе. Но чтобы постоянно, да еще и файл сохранялся неведомо какой (не иначе, из кеша в файл, а не из открытой в конфигураторе внешней обработкой/отчетом), такого не припомню. Перехимичили с увеличением производительности в 8.2, не иначе.


Извиняюсь за стиль написания, уставший малость. Последние комментарии не читал, извиняюсь также если кто-то подобное уже описал ранее.
66. Ийон Тихий (cool.vlad4) 06.09.11 17:47
не иначе, из кеша в файл, а не из открытой в конфигураторе внешней обработкой/отчетом
Сообственно вы описали всем известный, даже не знаю, баг ли? Формы сабжа , точно здесь не причем. Вы базу по сети гоняете? Если да, то не рекомендую работать в режиме конфигуратора по сети, - либо напрямую, либо через терминал(но не сервере 1С предприятия, где все работают). ...ну и чистить каталоги...
67. Неран Гкреси (LeaNaeD) 06.09.11 18:02
(66)

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


Было бы ни при чем, если бы проблема (точнее, комбинация описанной в теме проблемы с описанной мной) не начала повторяться с таким упорством как раз после перехода на указанную выше версию платформы. Режим совместимости с 8.1 на 8.2 меняли еще на 13 релизе, насколько я помню. До этого года 1,5-2 на платформе 8.1 все работало отлично, уж таких выкрутасов не замечал.
68. Олег Шалимов (CaSH_2004) 07.09.11 00:25
(67)Поддерживаю насчет возникновения глюков при переходе к 8.2, у меня они начались при переходе на 8.2 в принципе - вываливалась с ошибкой дампа 1С при сохранении неправильного кода, т.е. если есть ошибка кода и нажимаеш "записать", проверяется синтаксис, если есть ошибки предлагается их исправить, если жмеш "нет" то нормально работаем дальше, если "да" - то спокойно возникает ошибка с записью в дамп - и досвидания - вся работа потеряна. Причем это не в 100% случаях а где то в 70%, в остальных все нормально было, при этм 8.1 работало прекрасн. со временем менялись релизы платформы, и вроде поутихла проблема, зато иногда начала 8.1 так же себя вести, правда редко 8-10% при записи или работе. Складывалось впечатление что 8-ка становится глюком как Винда, ложится на ура, и очень нестабильна. Счас слава-богу вот уже полгода как стабильна на 90%. Но скажем 1С 7.7 стабильна на железно на 95%, для меня. Хотя если с компонентами играться то всякое получалось. А 8.1 до 8.2 работала как часики, очень доволен был последними релизами.
А насчет работы без терминалки :) кто-то тут где-то на полном серьезе советовал не сохранять (динамично) изменения при работе в базе других пользователей, типа конфа может не обновиться у тех. На мой взгляд - это то же самое что не выходить на улицу, а вдруг машина переедет!
Ребята от всего не убережешся, можно констатировать глюк, но жить и работать надо, а не рассказывать друг-другу страшные сказки что с кем приключилось.
70. Олег Шалимов (CaSH_2004) 08.09.11 09:19
Кстати с данной ошибкой я впервые познакомился недавно в продукте "АСДОБ v.1.0.26" от фирмы ООО "Аудит - новые технологии" в одной газовой компании. Пока еще не копался глубоко, но если она не в закрытом модуле то попробую исправить и вышлю разработчикам информацию об этом.
71. Яков Коган (Yashazz) 14.09.11 00:51
(65) Такое и на 8.1 бывало, и на 8.2 бывает. Иногда действительно виновата сеть - отваливается логический диск, что на некоей машине в сети, путём по которому открывали в конфигураторе и/или предприятии внешку, и вуаля. Приходится переоткрывать по полному сетевому пути.
А вообще, у нас этот глюк легко парируется загрузкой обработки/отчёта в справочник "Внешние..", благо он сейчас почти везде в той или иной форме бывает, и запуском оттуда. Глюк исчезает напрочь. Ну и версификация, написанная прямо в заголовке формы, чтоб проверить, с кем имеешь дело в данном запуске - наше всё при отладке.
72. Мансур Девятияров (demanru) 15.09.11 13:48
Abadonna чётко ответил, ему + :) Есть "косяк" похуже - для заполненного табличного поля всегда вызываются события ...ПриПолученииДанных(), ...ПриВыводеСтроки() тогда как этого и не требуется,
например, при изменении флажков, переключателей и полей ввода на форме (не элементы управления табличного поля!).
Вы можете в этом убедиться, поставив точку останова в приложенной обработке до изменения состояния флажка в процедуре:
Процедура ТабличноеПоле1ПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)

1С мне ответить не пожелала, может кто-то объяснить как обойти сие?
73. Мансур Девятияров (demanru) 15.09.11 13:50
demanru пишет:

Abadonna чётко ответил, ему + :) Есть "косяк" похуже - для заполненного табличного поля всегда вызываются события ...ПриПолученииДанных(), ...ПриВыводеСтроки() тогда как этого и не требуется,

например, при изменении флажков, переключателей и полей ввода на форме (не элементы управления табличного поля!).

Вы можете в этом убедиться, поставив точку останова в приложенной обработке до изменения состояния флажка в процедуре:

Процедура ТабличноеПоле1ПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)



1С мне ответить не пожелала, может кто-то объяснить как обойти сие?
Прикрепленные файлы:
ВнешняяОбработка1_1.epf
75. Аркадий Кучер (Abadonna) 24.09.11 11:26
(74) Сам-то понял, что сказал?
76. Гость 22.12.11 14:51
Возможно циклическая ссылка - это моя ошибка. Мне обязательно в обработке нужно помнить несколько форм, регулярно проверять на то открыты они или нет, вызывать процедуры. Глюк с зависанием обработки в памяти наблюдался давно, но на днях обнаружился глюк покруче вызванный зависанием в памяти: обработка оповещения срабатывает столько раз, сколько форм было создано в сеансе 1СПредприятия.
При этом в синтаксис-помощнике сказано, что обработка оповещения срабатывает только для закрытых форм. Не тут то было! Проверка самым простым способом - ЭтаФорма.Открыта(); - показывает что процедура выполняется даже если форма закрыта.
Спасибо автору - решила заодно и проблему с оповещением и облегчила себе жизнь - каждый раз перезапускать предприятие чтобы протестить измененную обработку достало однако))
77. Вера Белевич (integragirl) 22.02.12 08:09
Столько обсуждений! а КАК бороться то с этим??
Не могу работать, внешняя обработка не обновляется и все, хоть убей.

А вообще, у нас этот глюк легко парируется загрузкой обработки/отчёта в справочник "Внешние..", благо он сейчас почти везде в той или иной форме бывает, и запуском оттуда. Глюк исчезает напрочь. Ну и версификация, написанная прямо в заголовке формы, чтоб проверить, с кем имеешь дело в данном запуске - наше всё при отладке.

Ничего подобного, ничего парируется.

Циклические ссылки

господи, куда? если это открытие обычной внешней обработки, просто из файл-открыть.

Помогите, кто решил этот бредовый трабл?
78. Олег Шалимов (CaSH_2004) 23.02.12 07:09
(77)Странно что у вас какие-то проблемы остались, все же разжованно. Уточните ситуацию, попробую помочь, для начала хотя бы следующее: у вас после перезапуска базы появляются измненения? Или вы о чем то другом?
79. Вера Белевич (integragirl) 26.02.12 20:46
(78) После перезапуска изменения не появляются. Уже и пробовали чистить кэш, справочник внешние отчеты, циклические ссылки (если я правильно поняла что это такое, то таковых не имеется)... ничего из вышеперечисленного не помогло.
Сейчас приходиться извращаться через сервер и основную конфу =( что вообще неудобно, не мне одной нужен конфигуратор в конторе.
80. Олег Шалимов (CaSH_2004) 27.02.12 14:53
(79) Попробуйте с другого ПК зайти в базу, или скопируйте базу и в ней проверьте, если не помогло - значит вы не то что-то редактируете, бывает что вносиш код не в то место которое используеш
81. Брест Беларусь (zhleonid8) 27.02.12 17:06
возникает чувство, что мы можем 1С как линукс сами сделать удаленно собрать и ошибки исправить, будет работать , а фирма не может уже много лет...
82. Вера Белевич (integragirl) 28.02.12 20:56
(80) вот с другого пк все работает, давно проверенный факт.
значит вы не то что-то редактируете, бывает что вносиш код не в то место которое используешь

ой, я Вас умоляю )))))
83. Гость 24.03.12 17:33
Спасибо, обработка хорошая, пока не применяли, но думаю в дальнейшем пригодится.
84. Алекс Ю (AlexO) 17.10.13 10:29
(54) anig99,
на ИТС тоже полезное иногда печатают

Иногда у меня впечатление - что платформу пишут одни "студенты", а потом более опытные описывают работу такой платформы на ИТС - с багами, как обойти, что делать, чтобы "не вляпаться"... Но, видимо, или "более опытных" не подпускают к разработке платформы и исправлению всех этих косяков, и дают им "порезвиться" только в статьях на ИТС, или первые махнули рукой на вторых - "пусть делают, что хотят, это уже клиника".
А справку к платформе, похоже, не дописывают пишут совсем третьи "лица студенческого типа" :)
CaSH_2004; +1 Ответить
85. Алекс Ю (AlexO) 17.10.13 10:37
(68) CaSH_2004,
кто-то тут где-то на полном серьезе советовал не сохранять (динамично) изменения при работе в базе других пользователей

Вообще-то, правильно советовали - это может привести (и очень часть приводит) к ошибкам в работе вплоть до краха структуры конфы. Т.к. работа с временными файлами (которые пользуются активно 1С везде и всюду - и при сохранении/обновлении конфигурации в том числе) до сих пор не освоена 1С даже до уровня "чтоб работало".
Все-таки, динмическое обновление не зря называют "демоническим", и его использование - почти всегда выходит боком. Особенно на платформе 8.2 и всех остальных.
86. Алекс Ю (AlexO) 17.10.13 11:37
А вот вопрос все равно остается:
Почему при закрытии самой внешней обработки/отчета - не происходит его уничтожение как ранее открытого и "зацикленного" объекта (сиречь зацикленного через вызов Формы этого же объекта в модуле объекта в данном случае)?
Так как по-факту мы-то "родительский" объект "очистили" выходом из него, и, следовательно, "вызывающий" указатель тоже должен обнулиться, что должно вызвать сброс счетчика ссылок на объект, и в итоге полное уничтожение этого объекта.
Т.е. закрытие объекта - не влечет за собой уничтожение его ссылочных указателей, и платформа всегда считает, что количество ссылок равно +1 и отлично от 0 (если была одна переменная с зацикленной ссылкой), "не видя", что вызов указателя (увеличение счетчика ссылок) генерирует сам уничтожаемый объект.
Так что на лицо - полнейший глюк и недоработка, а никакая не "фича" работы платформы.
1Свитер; +1 Ответить
87. Олег Шалимов (CaSH_2004) 17.10.13 13:35
(85) Ну а меня мама учила в детстве не переходить дорогу на красный свет, однако когда я вырос и вижу что машин нет я спокойно перехожу - я не прав? А вы как поступаете в таком случае?
Если исходить из рекомендаций типа - "это опасно так не делайте", то:
1. нельзя во первых пользоватся 1С - можно потерять базу
2. нельзя пользоватся ПК - можно потерять все данные
3. нельзя пить, курить, и все такое - можно повредить здоровью
Ну а вывод: нельзя жить - это смертельно - никто еще не выжил :)

Так на каком "нельзя" остановится? Я предпочитаю смотреть по ситуации - насколько это критично. Если для меня важнее внести изменения динамически, то и фиг с ними рисками - если они этак 0,0001%, если будет 1% я подумаю, если 10% я перестрахуюсь полюбому
88. Алекс Ю (AlexO) 17.10.13 13:50
(87) CaSH_2004,
я спокойно перехожу - я не прав?

да, не прав, потому как машина движется намного быстрее, и оценка "она еще далеко" может быть очень субъективна. А вообще лучше всегда дожидаться "своего" света светофора. И брать пример в этом с немцев.
А вы как поступаете в таком случае?

Прехожу почти в гордом одиночестве в хвосте "быстроперебегающих-недождавшихся" зеленого сигнала.
1. нельзя во первых пользоватся 1С - можно потерять базу

Вот кто бы прислушался, а не к агитации 1С...
2. нельзя пользоватся ПК - можно потерять все данные

Для этого есть сервера, резервное копирвоание, ИБП и прочая, и прочая.
3. нельзя пить, курить, и все такое - можно повредить здоровью

Ну это совсем к 1С не имеет отношения. Даже косвенного :)
Ну а вывод: нельзя жить - это смертельно - никто еще не выжил

Вот именно такой лозунг надо повесить на всех продуктах 1С :)
то и фиг с ними рисками - если они этак 0,0001%

Дело не в процентах, а в недоработках "любимой фирмы": бьются временные файлы, отслеживания их корректности и правильности структуры нет и не было, в результате - вне зависимсоти от процента изменений портится вся конфа с данными, так как все идет одним куском.
89. Олег Шалимов (CaSH_2004) 17.10.13 14:37
(88)
да, не прав, потому как машина движется намного быстрее, и оценка "она еще далеко" может быть очень субъективна.

Уважаемый - не передергивайте, я специально указал что МАШИН НЕТУ чтобы вы не придрались, вы благоволучно это проигнорировали
Являясь водителем в густонаселенном городе (3-й в России по количесту машин на 1000 чел.) и ездя бстрее среднего я со своей СУБЪЕКТИВНОСТЬЮ умудряюсь рассчитать время реакции до 1 сек. другого водителя, и спокойно уворачиваюсь от некоторых "неадекватных" поэтому ходя пешком я прекрасно знаю на что способна машина и на что способен я. Случайно на вас может упасть кирпич с крыши дома т.к. вы ее не видите когда идете рядом, но переехать случайно машина не может если вы смотрите по сторонам и при этом думаете чтобы под нее не попасть.

вне зависимсоти от процента изменений портится вся конфа с данными, так как все идет одним куском.

Опять же вернусь к машинам (люблю сравнивать) - они тоже бьются, водители пассажиры умирают в авариях! Вас интересует процент смертельных и других случаях когда вы едете на своей машине или вас подвозят пасажиром? Сомневаюсь. Думаю спокойно ездите не учитывая тот факт что через секунду вы можете лишится ноги или руки в результате того что "неадекват" с соседней полосы заболтался по телефону и решил перестроится не посмотрев есть ли для него место.

Так же и я спокойно делаю динамическое обновление и радуюсь жизни не обращая внимание на грозные причитания "перестраховщиков по жизни". Бэкапы делаются, от всего не перестрахуешся - так чего настаивать на усложнении жизни?
90. Алекс Ю (AlexO) 17.10.13 14:39
(89) CaSH_2004,
Так же и я спокойно делаю динамическое обновление

База у Вас маленькая? Иначе бы не рассуждали так радужно, если в альтернативе - несколько часов грузить базу из архива, да плюс потерянные часы набранных документов, за которые тоже кто-то должен нести ответственность.
91. Олег Шалимов (CaSH_2004) 17.10.13 14:41
(88)
И брать пример в этом с немцев.

Уважаю немцев за их четкость (по слухам), однако у кажжой нации свои плюсы. Войну с ними (и другими) мы выиграли именно потому что плевали на все, в том числе и на слово "нельзя" и "невозможно". Просто делаем и все. А если бы сильно задумывались то наверно и не делали бы этого, и не выиграли бы там где все проигрывали.
92. Олег Шалимов (CaSH_2004) 17.10.13 14:42
(90)
База у Вас маленькая

Для SQL - да, для файлового возможно и нет - 2-3 Гб.
Ну так я про то и говорю в который раз что все зависит от СИТУАЦИИ - а вы говорите про ВООБЩЕ. А потом начинаете на нюансы ссылатся. Это неверно в корне.
93. Олег Шалимов (CaSH_2004) 17.10.13 14:45
+ (92) А в SQL базе порядка 20 Гб (500 доков в день в основном офисе и еще 2 узла РБД) - тоже плевал я на предостарожности, иначе я буду всю жизнь вносить изменения и меня выгонят как неудачный пример программиста если я буду ждать до ночи пока все выйдут (фирма работает в режиме 8-00 по 20-00 7/7 и 365/365 :)
94. Олег Шалимов (CaSH_2004) 17.10.13 14:47
(88)Зачем вы связались с 1С? Чтобы мучатся? Вы мазохист? Если нет взгляните на вещи проще и не хайте тот продукт на котором работаете. У него куча недостатков, но вся жизнь их полна. Я на них ругаюсь только когда они встречаются, а вы при любом удобном случае.
Или не работайте с 1С, а выбирите свой идеал чтобы получать удовольствие от работы.
95. Алекс Ю (AlexO) 18.10.13 10:20
(91) CaSH_2004,
мы выиграли именно потому что плевали на все, в том числе и на слово "нельзя" и "невозможно".

Им просто надо было подождать несколько десятилетий, и сейчас бы им продали все и вся. Даже без всякой войны.
(92) CaSH_2004,
А потом начинаете на нюансы ссылатся

Нюанс как раз у Вас. Что не отменяет разрушительного действия ДО. У нас даже кэш пользователя - и то бьется без всяких причин. Просто так, 1С, видите ли...
(93) CaSH_2004,
и меня выгонят как неудачный пример программиста

И я все время говорю о том же - только про неудачный пример "как не надо писать программы, а, тем более - платформы". А так полностью солидарен - абсолютно неправильный подход к программированию, в том числе - и при внесении изменений.
(94) CaSH_2004,
Я на них ругаюсь только когда они встречаются, а вы при любом удобном случае.

Думаю, Вы льстите себе, а мне - приписываете лишком много.
Именно, что проблемы и ПРОБЛЕМЫ в 1С лично мне встречаются на каждом шагу, практически всегда не давая сделать нормально, корректно и правильно, а только через одно место.
А вот Вы как раз хвалите и оправдываете 1С при любом удобном случае.
Наверное, Вам не с чем сравнивать?
96. Алекс Ю (AlexO) 18.10.13 15:22
(94) CaSH_2004,
а выбирите свой идеал чтобы получать удовольствие от работы

Вы, москвичи, как из одного инкубатора - мысли одни на всех, оторванность от жизни, и побег от реальности ))
Ну, или украинцы - все далеки от русского народа.
97. Олег Шалимов (CaSH_2004) 18.10.13 15:35
(95)
Именно, что проблемы и ПРОБЛЕМЫ в 1С лично мне встречаются на каждом шагу, практически всегда не давая сделать нормально, корректно и правильно, а только через одно место.
А вот Вы как раз хвалите и оправдываете 1С при любом удобном случае.

Как это мне знакомо: я как раз рассуждал так же года 4 назад. Однако сейчас все труднсти позади - все глюки изучены и уже не мешают на каждом шагу как раньше, может помогло следующее:
- опыт позволяет предвидеть кучу всяких проблем и предотвращать их
- стараюсь не ставить ничего лишнего и нового - это всегда новый гиморой который ни мне ни клиенту не нужен
- если делаю разработку - стараюсь делать универсально и продаю всем или переделываю с незначительными модификациями, очень экономит время
- никуда не езжу, не трачу время на пробки, все по телефону и удаленно - ну 90%
- работаю часто через агентов - они получают свое, я свое, за это они часто утрясают корнфликты с клиентами

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

Интересно это только я вижу тут противоречие?
Думаю, Вы льстите себе

А вот Вы как раз хвалите и оправдываете 1С при любом удобном случае.


Кстати хвалю 1С за то удобство что она дает, за то что я благодаря ей имею в жизни все что мне нужно, а это немало - запросы у меня нескромные.
Основная проблема в работе не 1С - а клиенты, человеческий фактор. Если я знаю глюк 1С, то я его могу предвидеть и обойти. А вот клиенты часто выкидывают такое что если таких игнорировать то и клиентов не останется - приходится делать психологическую разгрузку.
Думайте оптимистичнее.

Наверное, Вам не с чем сравнивать?

Ну не знаю, у меня в клиентах были и "КраснодарКрайГаз" (дочка Газпрома), в постоянном обслуживании самые мелкиеи и достаточно крупные игроки в торговле различной направленности. Качеством все довольны, недовольство вызывает только оперативность (сильно загружен т.к. берусь почти за все). Клиентов активных порядка 30 со 100 базами (таких что каждый месяц по несколько раз), неактивных еще в 2 раза больше.
Глюков всяких перевидал, хотя думаю их еще больше, но желания увидеть их все что-то нет. Помошников почти нет, все в основном сам делаю.
Как думаете есть мне с чем сравнивать? Или опыт маловат и кругозор узенький?
98. Олег Шалимов (CaSH_2004) 18.10.13 15:38
(96)
Вы, москвичи, как из одного инкубатора - мысли одни на всех, оторванность от жизни, и побег от реальности ))

Уважаемый, вы где тут москвичей нашли? Или москвичи перед вами так провинились что вы всех неугодных так именуете? Это какой то новый вид расизма - городизм что-ли :)
Я из Краснодара, может слыхали? город такой в одноименном крае, с Сочи под боком
99. Алекс Ю (AlexO) 18.10.13 15:45
(98) CaSH_2004,
Я из Краснодара

ну так вам москвичи как родные ))
Даже Сочи для вас покрасили ))
100. Олег Шалимов (CaSH_2004) 18.10.13 15:50
(99)И чем же это? Ты готов за весь город отвечать? Ты не сторонник случайно Жириновского? А то стиль больно смахивает: обсираеш все вокруг, цепляешся ко всему что видиш, выдвигаеш "доказательства" которые нормальный человек вообще не понимает, переворачиваеш все слова опонента на свой лад, а не так как было сказано.
Ладно тот хоть политик, а ты кто?
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа