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

31.01.18

Разработка - Механизмы платформы 1С

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

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

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).

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

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

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

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

 

ЧАСТЬ 2.

Продолжения приключений Буратино в Стране Дураков

или зацикливание формы при ее программном переоткрытии

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

Шаг 1. обычно переоткрытие делается в форме обработке, поэтому мы сначала должны закрыть саму форму:

Закрыть();

Шаг 2. после закрытия открываем ту же самую форму той же самой обработки (слава богу обработка хранит в себе полное имя своего файла). Вроде очевидно что нужно делать так как делают сами разработчики 1С. В популярнейшей конфигурации Управление торговлей ред.10.3 самый очевидный пример мы найдем в механизме подключаемых внешних обработок/отчетов: Справочник.ВнешниеОбработки.Форма.ФормаСписка.Форма.Модуль в процедуре СправочникСписокВыбор() видим:

ИмяФайла = ПолучитьИмяВременногоФайла();
ДвоичныеДанные = ВыбраннаяСтрока.ХранилищеВнешнейОбработки.Получить();
ДвоичныеДанные.Записать(ИмяФайла);
Если ЭтоОбработка Тогда
	Форма = ВнешниеОбработки.ПолучитьФорму(ИмяФайла);
Иначе
	Форма = ВнешниеОтчеты.ПолучитьФорму(ИмяФайла);
КонецЕсли;
Если Не Форма = Неопределено Тогда
	Форма.Открыть(); // ВОТ ОНО! Получение в переменную формы и открытие ее!
Иначе // дальше нас не интересует, но переменная Форма не обнуляется и дальше вы поймете почему

Переработав получаем вот такой компактный вариант:

ВнешниеОбработки.ПолучитьФорму(ИспользуемоеИмяФайла).Открыть();

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

Итак пример 1С-ков не позволяет получить новый экземпляр обработки.

Однако выход тут есть и очень простой - используем 2-й вариант обращения к обработке - сначала создадим ее, а потом уже получим форму (опять таки обойдемся без переменных, хотя это и не критично):

ВнешниеОбработки.Создать(ИспользуемоеИмяФайла).ПолучитьФорму().Открыть(); 

Проверяем и вуаля! Все работает!

ВЫВОД: забудьте про метод ПолучитьФорму() для внешних обработок/отчетов т.к. создание обработки все равно происходит (хотя ожидаешь что этого и не произойдет - должна же быть разница в работе методов раз они разные!) в чем легко убедится написав любое оповещение в модуле обработки. От него только проблемы и никакого толку (буду рад если кто-то аргументированно поправит меня)

См. также

Поинтегрируем: сервисы интеграции – новый стандарт или просто коннектор?

Обмен между базами 1C Администрирование СУБД Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

В платформе 8.3.17 появился замечательный механизм «Сервисы интеграции». Многие считают, что это просто коннектор 1С:Шины. Так ли это?

11.03.2024    4487    dsdred    53    

71

Как готовить и есть массивы

Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

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

24.01.2024    5286    YA_418728146    25    

63

Планы обмена VS История данных

Обмен между базами 1C Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

Вы все еще регистрируете изменения только на Планах обмена и Регистрах сведений?

11.12.2023    6401    dsdred    36    

111

1С-ная магия

Механизмы платформы 1С Бесплатно (free)

Язык программирования 1С содержит много нюансов и особенностей, которые могут приводить к неожиданным для разработчика результатам. Сталкиваясь с ними, программист начинает лучше понимать логику платформы, а значит, быстрее выявлять ошибки и видеть потенциальные узкие места своего кода там, где позже можно было бы ещё долго медитировать с отладчиком в поисках источника проблемы. Мы рассмотрим разные примеры поведения кода 1С. Разберём результаты выполнения и ответим на вопросы «Почему?», «Как же так?» и «Зачем нам это знать?». 

06.10.2023    18467    SeiOkami    46    

118

Дефрагментация и реиндексация после перехода на платформу 8.3.22

Механизмы платформы 1С Платформа 1С v8.3 Бесплатно (free)

Начиная с версии платформы 8.3.22 1С снимает стандартные блокировки БД на уровне страниц. Делаем рабочий скрипт, как раньше.

14.09.2023    12086    human_new    27    

74

Валидация JSON через XDTO (включая массивы)

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

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

28.08.2023    8807    YA_418728146    6    

141

Внешние компоненты Native API на языке Rust - Просто!

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

Внешние компоненты для 1С можно разработывать очень просто, пользуясь всеми преимуществами языка Rust - от безопасности и кроссплатформенности до удобного менеджера библиотек.

20.08.2023    6274    sebekerga    54    

94

Все скопируем и вставим! (Буфер обмена в 1С 8.3.24)

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

Рассмотрим новую возможность 8.3.24 и как её можно эффективно использовать

27.06.2023    15976    SeiOkami    31    

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

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

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

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


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

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

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

СНС, ваще-то я завлабом был :D
16. hogik 443 05.09.11 04:57 Сейчас в теме
(15)
Ну, вот, опять. Все МЫ - были... Забудь...
32. CaSH_2004 372 05.09.11 13:06 Сейчас в теме
(7)Abadonna пишет: если надо просто открыть форму, зачем создавать промежуточную переменную? Для красоты?

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

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

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

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

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

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


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

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

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

Вот когда ездили те, кто знал, как чинить мотор, можно было еще ездить. А сейчас на дорогах одни лодочники итальянские
:D Вот как раз сейчас из окна смотрю: как же можно было умудриться на регулируемом пешеходном переходе столкнуться под углом 90 градусов?
Всё, пробочка гарантирована
44. CaSH_2004 372 06.09.11 10:26 Сейчас в теме
(33)Удивительно! Почему же если не знаеш надо сразу худшее предпологать, и при этом об этом тут-же объявлять вслух?
45. Abadonna 3958 06.09.11 11:40 Сейчас в теме
(44)
Удивительно, что ты именно на меня имеешь какие-то обиды. На того, кто последовательно как раз и защищает мысль, что это баг 1С
В отличие от:

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


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

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

На первые два лично я как раз бы жестоко оскорбился.
Воистину: ни одно доброе дело не останется безнаказанным! :D
47. CaSH_2004 372 06.09.11 12:19 Сейчас в теме
(45) Ну у тебя на мой взгляд получилось жестче. Хотя я не в обиде, просто странно что это тут все так друг другу тычат носом кто чего не знает. Вроде сайт предназначен чтобы узнавать новое с минимумом усилий. А получается тыкалово. Как-то неприятно. Естественно не все все знают, но можно же промолчать или посоветовать куда рыть. Нет же - все начинают вопить, да ты ниче не знаеш, да это азы, ты страдаеш фигней! Это как-то унижает знате-ли. Когда вы у прохожего спрашиваете как кудато пройти - такого вы не услышите, а представььте себе аналагичный ответ, какая будет ваша реакция - возможно вы даже физически ответите, а не только устно.
Почему-то все думают раз разговор происходит не в реале, можно спокойно друг-друга оскорблять, типа анонимно это не так болезненно другой стороне, но так же приятно и безопасно нам.
Ладно это все лирика, размышления вслух.
(46) Действительно, повидимому все есть. Виноват, не читалю ИТС, хотя и есть они, код действительно содержит ситуацию описанную в ИТС, и повидимому попадает под понятие "возникновение циклических ссылок", я отмечу это в посте чтобы другим таким же "гениям" как я было легче найти проблему.
Есть же такие трудолюбивые спецы которые читают все что написано на ИТС, и помнят и понимают все что там написано! Завидую вам от души
50. Lara.Builova 06.09.11 12:28 Сейчас в теме
(47) Еще про циклические ссылки с ИТС:
Особенности хранения значений в переменных модулей объектов и форм
В платформе 1С:Предприятие 8 используется стратегия управления временем жизни объектов, основанная на подсчете ссылок на объекты - reference counting. Данная стратегия заключается в следующем. Каждый объект платформы содержит счетчик ссылок. При появлении ссылки на объект (объект присваивается какой-либо переменной) происходит увеличение счетчика на единицу, при уничтожении подобной ссылки - значение счетчика на единицу уменьшается. Объект автоматически уничтожается, и память, занимаемая им, освобождается в момент, когда счетчик ссылок объекта становится равен нулю.

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

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

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

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

Если циклические ссылки не случайны, а необходимы по замыслу разработчика, то переменные нужно очищать, но при этом
необходимо определить момент для ее разрыва, чтобы объекты могли быть уничтожены нормальным образом
afk; Spartan; +2 Ответить
52. CaSH_2004 372 06.09.11 12:32 Сейчас в теме
(50)Дайте хотя бы ссылку где об этом почитать? На каком ИТС в каком разделе и какая статья, я хоть в статье это укажу, всем полезно будет
59. Lara.Builova 06.09.11 12:57 Сейчас в теме
(52) Раздел ИТС "Методические рекомендации по конфигурированию" (46) из подраздела "Прочие", (50) - "Встроенный язык". Названия статей выделены жирным в цитатах.
51. Abadonna 3958 06.09.11 12:31 Сейчас в теме
(47)
Есть же такие трудолюбивые спецы которые читают все что написано на ИТС, и помнят и понимают все что там написано! Завидую вам от души

Да, офигеть! Они и ЖКК, наверное, читают :D
Знавал я одного такого читальца - выгнали за профнепригодность.
54. anig99 2843 06.09.11 12:37 Сейчас в теме
(51) на ИТС тоже полезное иногда печатают (:
84. AlexO 135 17.10.13 10:29 Сейчас в теме
(54) anig99,
на ИТС тоже полезное иногда печатают

Иногда у меня впечатление - что платформу пишут одни "студенты", а потом более опытные описывают работу такой платформы на ИТС - с багами, как обойти, что делать, чтобы "не вляпаться"... Но, видимо, или "более опытных" не подпускают к разработке платформы и исправлению всех этих косяков, и дают им "порезвиться" только в статьях на ИТС, или первые махнули рукой на вторых - "пусть делают, что хотят, это уже клиника".
А справку к платформе, похоже, не дописывают пишут совсем третьи "лица студенческого типа" :)
CaSH_2004; +1 Ответить
55. CaSH_2004 372 06.09.11 12:38 Сейчас в теме
(51)Несмотря на правду это слишком саркастично. Стиль знакомый.
Думаю стоит иметь ввиду мировую практику, а именно: бывают голые теоретики и есть практики. Это как и любой перегиб ведет к проблемам, но если использовать таланты людей правильно то результат неплохой. Сходу не приведу примеры т.к. не компьютер, но есть же много открытий которые сделаны теоретиками но внедрены практиками, так что каждая работа важна, а чем заниматься самому - на то и дана жизнь, чтобы разобраться как получить от нее кайф! Прыгать как ямакаси по домам с риском для шеи или изучать космос. На мой взглаяд это дело каждого - лишбы была хоть какая-то отдача, а не просто паразитическое существование.
17. alexk-is 6533 05.09.11 06:21 Сейчас в теме
Вот ещё ситуация, которая не подчищается во внешних отчетах и обработках.
Прикрепленные файлы:
18. anig99 2843 05.09.11 06:50 Сейчас в теме
Дааааа... Кстати. Чуть не забыл. Чистить переменную форма можно только если она задана явно... А если форма открывается как основная, то помогают только спец маркеры на форме. Например, регулярно меняемые номер версии в заголовке окна.
19. i132 122 05.09.11 10:33 Сейчас в теме
по моему это где-то описывалась на ИТС - про кэширование объектов
20. PowerBoy 3350 05.09.11 11:55 Сейчас в теме
Люди вы что никогда не слышали термина "Циклическая ссылка"!!! Это азы!!! Описано и в документации и на ИТС еще с 8.0.
21. Abadonna 3958 05.09.11 12:01 Сейчас в теме
(20) Как бы они ее там не называли, нормальная прога (обработка) обязана за собой всё почистить в секции Finalization- вот это АЗЫ
23. PowerBoy 3350 05.09.11 12:02 Сейчас в теме
(21) В Экселе сделай циклическую формулу - и объяви что баг нашел. :)
24. Abadonna 3958 05.09.11 12:07 Сейчас в теме
(23)Я-то как раз и не объявлял, что баг нашел. Мало того, четко написал, что он прогнозируемый.
Но: покажи-ка на пальцах чего тут циклического? Обе формы закрылись, ничего не ругнулось.
В каком адресном пространстве заторчала эта ссылка? Почему после закрытия всех форм обработки она не самоликвидировалась?
А ДОЛЖНА была
/13/ читал?
26. PowerBoy 3350 05.09.11 12:14 Сейчас в теме
(24)
1.Сам вызов формы из модуля объекта я считаю ошибкой.
2.1с не может удалить объект, если у него есть ссылка на подчиненные себе объекты, конкретно как это реализуется у 1С надо смотреть ИТС.
29. PowerBoy 3350 05.09.11 12:17 Сейчас в теме
(26) + То бишь "родитель" формы является тем же объектом, кому принадлежит модуль объекта. :)
31. Abadonna 3958 05.09.11 12:21 Сейчас в теме
(29) Значит, 13 ты все-таки не прочел.
Там те же условия:
"родитель" формы является тем же объектом

но с маленькой разницей - жизнь переменной только внутри процедуры. И НЕ ВИСНЕТ
А так: все та же "циклическая"
22. cool.vlad4 2 05.09.11 12:02 Сейчас в теме
(20) Ну, глюк из 6 это никакая не "Циклическая ссылка". Замечено при изменении размера окна (обычно, когда пользователь работал совместно другим окном - например icq).
25. artbear 1448 05.09.11 12:13 Сейчас в теме
А (0) случайно, не объявлена в начале модуля обработки, т.е. время ее жизни не равно ли времени работы обработки?
Тогда это точно циклическая ссылка.
(13) косвенно подтверждает это предположение.
27. Abadonna 3958 05.09.11 12:15 Сейчас в теме
(25)
случайно, не объявлена в начале модуля обработки

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

Еще раз повторю: всякая уважающая себя прога (обработка) ОБЯЗАНА чистить за собой. Если не чистит - баг
30. PowerBoy 3350 05.09.11 12:20 Сейчас в теме
(28) Если баг описан в документации, то это фича. :)
34. AndrewEv 18 05.09.11 21:57 Сейчас в теме
Вот я, например, всегда все переменные небазового типа закрываю:
ValList = UnDefined;
Что по-русски
СпЗнач = НеОпределено;
Это мне не позволило познакомится с багом...
37. iov 406 05.09.11 23:30 Сейчас в теме
(34) Жил да был идеальный программист и написал он идеальный код. Но прошло время и надо было изменить идеальный код и пригласили программиста (хороший мальчик - знакомый студент) и сказал он что программист - плохой и переписал код - но глючил его код и мальчик переписал глобальный модуль, но и тогда не заработал код. И позвали они друго-го программиста и то дописал код и написал еще немного.... и длилось так годами и заработали программисты денег и ругали они предыдущих. Смысл в том что вокруг рыночные отношения и код писать грамотно-не всегда выгодно - порой быстренько на коленке выгодней... Я за хороший код но как вы объясните заказчику что ваш код круче но дороже потому что он гипотетически не содержит ошибок?

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

(0) Ну вот теперь более мощный сервер тебе не светит - 1С же не виснет ;)
42. Abadonna 3958 06.09.11 04:23 Сейчас в теме
(37)
как вы объясните заказчику что ваш код круче

Совсем недавно:
- В такой-то накладной неверно посчитан НДС!
-?
Смотрим: точно, блин, не тот, что должен быть.
Оказалось: франь, который работал до нас, приделал кнопку "Убрать автоматические скидки"
Скидки обнуляются, потом стоит:
ОбработкаТабличныхЧастей.РассчитатьСуммуТабЧасти(...)
А про то, что надо бы еще:
ОбработкаТабличныхЧастей.РассчитатьСуммуНДСТабЧасти(...) он "забыл"
Полтора года (!!!) они так работали, пока какой-то покупатель их носом не ткнул.
Благо эту кнопку не так часто нажимали, однако за 8 месяцев документов 80 набралось.
60. iov 406 06.09.11 14:46 Сейчас в теме
(42) истории из жизни - это хорошо... но ведь врать тоже их расказывал прежде чем хрень написать - и денег он срубил - и ты потом срубил... А напиши он правильно тыб и не заработал- верно?
61. Abadonna 3958 06.09.11 15:02 Сейчас в теме
(60)
и денег он срубил - и ты потом срубил.

Хм... Да я ж всегда и утверждал, что все МЫ (одноэснеги) - беспонтовая хрень, существующая благодаря идиотской политике государства.
Ничего не производим, плодим баги, исправляем свои и чужие и т.д...
От нас, бухов и налоговиков обществу пользы ноль. Зато все при деле и при бабках ;)
62. iov 406 06.09.11 15:04 Сейчас в теме
(61) как в принципе от множества других профессий (типа Ахранников и кучи пилиционеров ) мы хоть что-то производим (баги тоже продукт - полуфабрикат)
63. iov 406 06.09.11 15:11 Сейчас в теме
(61) Предлагаю собраться где нить с чашкой пива и посыпать голову пеплом и покаяться :)
35. Lara.Builova 05.09.11 22:30 Сейчас в теме
А я просто не выбираю имена переменных из списка зарезервированных системой.
Прикрепленные файлы:
36. Abadonna 3958 05.09.11 23:02 Сейчас в теме
(35)
А я просто не выбираю имена переменных из списка зарезервированных системой.

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

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

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

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

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

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

Показать
39. Lara.Builova 06.09.11 00:11 Сейчас в теме
(36) не знаю, откуда ты это берешь, в СП примеры такие:
Товары = Справочники.Номенклатура;
ФормаСписка= Товары.ПолучитьФорму("ФормаСписка");
Если Не ФормаСписка.Открыта() Тогда
    ФормаСписка.Открыть();
КонецЕсли;
ИЛИ
Клиенты = Справочники.Контрагенты;
НовыйКлиент= Клиенты.СоздатьЭлемент();
НовыйКлиент.ПолучитьФорму().Открыть(); 

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

Ни в одном примере не встретилось объявление переменной "Форма". Может плохо искала.
40. Abadonna 3958 06.09.11 03:29 Сейчас в теме
(39) На! Смотри! Если это не СП, то я - папа Римский.
Движок 8.2.13.202. Не супер свежак, но все-таки...
Прикрепленные файлы:
38. iov 406 05.09.11 23:33 Сейчас в теме
(0) P.S. Всем спасибо - глюк смачный - вон как его обмусолили и облизали тарелку... Ищи еще... >громко стуча ложкой по столу<
41. Abadonna 3958 06.09.11 03:42 Сейчас в теме
И еще смотри:

Может в твоем СП переменная вообще "шаршы пішін" названа?
А для полного тебе счастья (ты ж любишь, когда все стандартно-одноэсовски) - второй рисунок, поиск по типовой УТ
Прикрепленные файлы:
43. CaSH_2004 372 06.09.11 10:12 Сейчас в теме
Lara.Builova пишет:

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

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

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

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

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

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

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

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

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

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

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

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

Так что может лучше проанализировать код еще раз... :oops:
inanity; Yasen; Spartan; +3 Ответить
53. anig99 2843 06.09.11 12:36 Сейчас в теме
(46) а ведь эту статью с ИТС здесь уже на форуме выкладывали. Только сейчас и вспомнил.
48. Abadonna 3958 06.09.11 12:20 Сейчас в теме
(0) Во! А ты на меня обижаешься. :D
В /13/ код проанализирован, показано, что именно такой код, но со временем жизни переменной в пределах процедуры никаких проблем не вызывает.
А они тебе так и будут талдычить про "проанализировать".
49. CaSH_2004 372 06.09.11 12:24 Сейчас в теме
Кстати не тольько я не знаю про "цикличексие ссылки", я нескольких знакомых перед этим опросил - все тоже без понятия были, а читать горы ИТС и другой документации не зная даже какие слова ключевые - бесполезное дело как показывает практика, ну в 20% получалось остальное быстрее самому вычислить.
(48) Да я без обид конкретно на тебя, т.к. ты не один такой, вы все тут как с одной сковородки слезли :) ошпаренные какие-то
56. Abadonna 3958 06.09.11 12:47 Сейчас в теме
:D вот вам, плиз. Типовая УТ, модуль ОБЪЕКТА Отчет.РапортРуководителю
// Процедура расшифровки показателя "Количество неисполненных заказов покупателей"
//
Процедура Заказы_НеисполненныеЗаказыПокупателейРасшифровка(Параметры)

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

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

Правда, как и в /13/, внутри процедуры.
Что как раз и подтверждает то, что я (в жизни не читавший никаких ИТС-ов) изложил:
Вывод: не надо баловаться с переменными в теле модуля, они могут и не подчиститься, а вот внутри процедур модуля - сколько угодно.
57. CaSH_2004 372 06.09.11 12:54 Сейчас в теме
(56)Вот упертый, да не баловался я, мне как раз нужно было чтобы переменная "Форма" жила все время жизни обработки, а не во время отработки процедуры. Оказалось что нужно явно убивать такую переменную - все КОНЕЦ ВОПРОСА! Спасибо всем за внимание и понимание.
58. Abadonna 3958 06.09.11 12:57 Сейчас в теме
(57)Это ты упертый!!!!!!!!!!!!!!!! Или у тебя мания величия - всё на себя примеряешь?
Вообще не о тебе конкретно разговор идет
64. Spartan 365 06.09.11 15:18 Сейчас в теме
(56) В статье написано "нельзя помещать в реквизит обработки или нелокальную переменную ее модуля", "хранение в переменной модуля объекта". В твоем примере переменная - локальная, время жизни - процедура.
Но баг неочевидный, согласен - я тож ИТС не читаю... :D
65. LeaNaeD 06.09.11 17:35 Сейчас в теме
Парни, там все сложнее с этим багом, не в форме дело. Точнее не только в форме.

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

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

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

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

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


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


Извиняюсь за стиль написания, уставший малость. Последние комментарии не читал, извиняюсь также если кто-то подобное уже описал ранее.
71. Yashazz 4709 14.09.11 00:51 Сейчас в теме
(65) Такое и на 8.1 бывало, и на 8.2 бывает. Иногда действительно виновата сеть - отваливается логический диск, что на некоей машине в сети, путём по которому открывали в конфигураторе и/или предприятии внешку, и вуаля. Приходится переоткрывать по полному сетевому пути.
А вообще, у нас этот глюк легко парируется загрузкой обработки/отчёта в справочник "Внешние..", благо он сейчас почти везде в той или иной форме бывает, и запуском оттуда. Глюк исчезает напрочь. Ну и версификация, написанная прямо в заголовке формы, чтоб проверить, с кем имеешь дело в данном запуске - наше всё при отладке.
66. cool.vlad4 2 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 372 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 работала как часики, очень доволен был последними релизами.
А насчет работы без терминалки :) кто-то тут где-то на полном серьезе советовал не сохранять (динамично) изменения при работе в базе других пользователей, типа конфа может не обновиться у тех. На мой взгляд - это то же самое что не выходить на улицу, а вдруг машина переедет!
Ребята от всего не убережешся, можно констатировать глюк, но жить и работать надо, а не рассказывать друг-другу страшные сказки что с кем приключилось.
85. AlexO 135 17.10.13 10:37 Сейчас в теме
(68)
кто-то тут где-то на полном серьезе советовал не сохранять (динамично) изменения при работе в базе других пользователей

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

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

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

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

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

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

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

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

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

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

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

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

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

База у Вас маленькая? Иначе бы не рассуждали так радужно, если в альтернативе - несколько часов грузить базу из архива, да плюс потерянные часы набранных документов, за которые тоже кто-то должен нести ответственность.
92. CaSH_2004 372 17.10.13 14:42 Сейчас в теме
(90)
База у Вас маленькая

Для SQL - да, для файлового возможно и нет - 2-3 Гб.
Ну так я про то и говорю в который раз что все зависит от СИТУАЦИИ - а вы говорите про ВООБЩЕ. А потом начинаете на нюансы ссылатся. Это неверно в корне.
93. CaSH_2004 372 17.10.13 14:45 Сейчас в теме
+ (92) А в SQL базе порядка 20 Гб (500 доков в день в основном офисе и еще 2 узла РБД) - тоже плевал я на предостарожности, иначе я буду всю жизнь вносить изменения и меня выгонят как неудачный пример программиста если я буду ждать до ночи пока все выйдут (фирма работает в режиме 8-00 по 20-00 7/7 и 365/365 :)
91. CaSH_2004 372 17.10.13 14:41 Сейчас в теме
(88)
И брать пример в этом с немцев.

Уважаю немцев за их четкость (по слухам), однако у кажжой нации свои плюсы. Войну с ними (и другими) мы выиграли именно потому что плевали на все, в том числе и на слово "нельзя" и "невозможно". Просто делаем и все. А если бы сильно задумывались то наверно и не делали бы этого, и не выиграли бы там где все проигрывали.
95. AlexO 135 18.10.13 10:20 Сейчас в теме
(91)
мы выиграли именно потому что плевали на все, в том числе и на слово "нельзя" и "невозможно".

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

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

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

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

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

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

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

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


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

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

Ну не знаю, у меня в клиентах были и "КраснодарКрайГаз" (дочка Газпрома), в постоянном обслуживании самые мелкиеи и достаточно крупные игроки в торговле различной направленности. Качеством все довольны, недовольство вызывает только оперативность (сильно загружен т.к. берусь почти за все). Клиентов активных порядка 30 со 100 базами (таких что каждый месяц по несколько раз), неактивных еще в 2 раза больше.
Глюков всяких перевидал, хотя думаю их еще больше, но желания увидеть их все что-то нет. Помошников почти нет, все в основном сам делаю.
Как думаете есть мне с чем сравнивать? Или опыт маловат и кругозор узенький?
101. AlexO 135 18.10.13 15:59 Сейчас в теме
(97)
У вас прямо какой-то заповедник 1С там :))
- опыт позволяет предвидеть кучу всяких проблем и предотвращать их

Вы - первый и единственный, кому опыт позволяет ПРЕДВИДЕТЬ проблемы клиента, даже не видя ни самого клиента, ни его базы.
- стараюсь не ставить ничего лишнего и нового - это всегда новый гиморой который ни мне ни клиенту не нужен

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

У вас, видимо, великолпный тайм-менеджемент - еще никому не удавалось делать быстро, качественно и универсально ВСЕ и ВСЯ в 1С.
- никуда не езжу, не трачу время на пробки, все по телефону и удаленно - ну 90%

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

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

Ну, я уже не удивляюсь - что клиенты позволяют вносить в свои базы фрилансеру (!) такие серьезные изменения, им, наверняка, совсем непонятные.
Уникальные экосистемы: в Москве не знают, сколько платить, поэтому платят, сколько унесешь; у вас - программистов 1С носят на руках и считают не меньше родственников раджи. И где-то близко к исполнительной госструктуре.
104. CaSH_2004 372 18.10.13 16:06 Сейчас в теме
(101)Ну ладно тебе завидовать, плохо спать будеш и пищеварение может нарушится. Каждому свое. Не умееш это попробуй на базаре торговать семячками, или в лотерею сыграй - вдруг повезет :) Мне вот никогда не везло на азартные игры. Может тебе не везет на 1С?
106. AlexO 135 19.10.13 20:25 Сейчас в теме
(104)
Мне вот никогда не везло на азартные игры.

Ну тогда вам и в 1С не повезет. Ведь что казино, что 1С - везде русская рулетка и вера в чудо "но мне-то повезет сорвать куш!".
Хотя если 1С - это даже не однорукий, а безрукий бандит, то и ставки намного выше, чем в казино ))
107. CaSH_2004 372 21.10.13 00:19 Сейчас в теме
(106)Я так понял это треп не о чем, просто скучаете?
Ну тогда вам и в 1С не повезет.

Опять собственные домыслы выставляем за факты? Продолжайте в том же духе, а мне как-то надоело общатся когда вместо внятного диалога вы ведете какой-то монолог высказывая домыслы и доказывая зачем то их мне когда они априори не соответствуют действительности.
94. CaSH_2004 372 17.10.13 14:47 Сейчас в теме
(88)Зачем вы связались с 1С? Чтобы мучатся? Вы мазохист? Если нет взгляните на вещи проще и не хайте тот продукт на котором работаете. У него куча недостатков, но вся жизнь их полна. Я на них ругаюсь только когда они встречаются, а вы при любом удобном случае.
Или не работайте с 1С, а выбирите свой идеал чтобы получать удовольствие от работы.
96. AlexO 135 18.10.13 15:22 Сейчас в теме
(94)
а выбирите свой идеал чтобы получать удовольствие от работы

Вы, москвичи, как из одного инкубатора - мысли одни на всех, оторванность от жизни, и побег от реальности ))
Ну, или украинцы - все далеки от русского народа.
98. CaSH_2004 372 18.10.13 15:38 Сейчас в теме
(96)
Вы, москвичи, как из одного инкубатора - мысли одни на всех, оторванность от жизни, и побег от реальности ))

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

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

Так вот вы куда себя приписали ))
Ты готов за весь город отвечать?

Ну, удачно не провалиться куда-нибудь на олимпиаде ))
103. CaSH_2004 372 18.10.13 16:01 Сейчас в теме
+(100) А совсем забыл в тот же список:
- соскакивание с темы которую не можеш внятно закрыть и вместо нее поднимание новой темы, желательно такой чтобы перекрыть предыдущую
- игнорирование неудобных вопросов и собственных промашек
Собственно диалог тихо скатывается к типа "сам дурак". Давай завершим его. Не нравится и нет желания конструктивно говорить - поставь минус и не заходи больше сюда.
105. AlexO 135 19.10.13 20:22 Сейчас в теме
(103)
соскакивание с темы которую не можеш внятно закрыть

да, особенно невнятно получается на фоне оппонента, который от аргументов быстро перешел к "тыканью". Наверняка, такая практика складывалась годами от ответов на удобные вопросы и неимения собственных промашек.
70. CaSH_2004 372 08.09.11 09:19 Сейчас в теме
Кстати с данной ошибкой я впервые познакомился недавно в продукте "АСДОБ v.1.0.26" от фирмы ООО "Аудит - новые технологии" в одной газовой компании. Пока еще не копался глубоко, но если она не в закрытом модуле то попробую исправить и вышлю разработчикам информацию об этом.
72. demanru 28 15.09.11 13:48 Сейчас в теме
Abadonna чётко ответил, ему + :) Есть "косяк" похуже - для заполненного табличного поля всегда вызываются события ...ПриПолученииДанных(), ...ПриВыводеСтроки() тогда как этого и не требуется,
например, при изменении флажков, переключателей и полей ввода на форме (не элементы управления табличного поля!).
Вы можете в этом убедиться, поставив точку останова в приложенной обработке до изменения состояния флажка в процедуре:
Процедура ТабличноеПоле1ПриВыводеСтроки(Элемент, ОформлениеСтроки, ДанныеСтроки)

1С мне ответить не пожелала, может кто-то объяснить как обойти сие?
73. demanru 28 15.09.11 13:50 Сейчас в теме
demanru пишет:

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

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

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

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



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