Обсуждение накопленного

Автор Харлампий Дымба, 14 октября 2025, 01:31

« назад - далее »

Злоп

Еще если помните - почему UCHOICE падал с закрытием 1С при задании даты в условие отбора?

cr

Цитата: Харлампий Дымба от 01 ноября 2026, 02:07Не знаю как лучше классифицировать этот баг 1С
Что тут не понятного?
Эта форма подбора работает в специфическом режиме. ПриЗакрытии() отрабатывает процедуру переноса ТЗ подобранного в форму из которой вызван подбор. Если открыты оба окна (и сама форма и подбор), то Окна-Закрыть все окна сначала закрывает "родительскую" форму, вызвавшую подбор, а потом саму форму подбора, которая при закрытии пытается заполнить реквизиты "родительской" формы и неожиданно "обнаруживает", что "родительская" форма уже отсутствует и система валится, пытаясь заполнить не существующий реквизит не существующей формы.

Харлампий Дымба

Цитата: cr от 02 ноября 2026, 09:05Что тут не понятного?
В  точку. Именно так я и думал, и именно так же ошибся. Поэтому и не мог долгое время надежно воспроизвести глюк - он то появлялся, то исчезал. Так что - очень правдоподобно, но нет. Механизм проявления сложнее, поэтому и причина возникновения для меня теперь не столь очевидна.
Я же написал - для складов и фирм глюк не возникает, а для товаров и контрагентов - возникает. И ключевое различие там - п.3

Цитата: Злоп от 02 ноября 2026, 06:45почему UCHOICE падал с закрытием 1С при задании даты в условие отбора
Не увидел. Как воспроизвести? Попробовал из типовой обработку "ПодборОбъектов" (полный аналог UChoice), сделал подбор по документам с отбором по нескольким датам - всё нормально прошло.
Но вангую, что если ошибка есть, то она скорее всего связана с некорректным синтаксисом построенного запроса (там же UChoice пытается данные именно с помощью черного запроса получить. Мы разбирались здесь с подобной ерундой, возможно и с датой похожее.



Злоп

Цитата: cr от 02 ноября 2026, 09:05
Цитата: Харлампий Дымба от 01 ноября 2026, 02:07Не знаю как лучше классифицировать этот баг 1С
Что тут не понятного?
Эта форма подбора работает в специфическом режиме. ПриЗакрытии() отрабатывает процедуру переноса ТЗ подобранного в форму из которой вызван подбор. Если открыты оба окна (и сама форма и подбор), то Окна-Закрыть все окна сначала закрывает "родительскую" форму, вызвавшую подбор, а потом саму форму подбора, которая при закрытии пытается заполнить реквизиты "родительской" формы и неожиданно "обнаруживает", что "родительская" форма уже отсутствует и система валится, пытаясь заполнить не существующий реквизит не существующей формы.

Здесь при переносе надо видимо сделать просто проверку существования родительского контекста...

Злоп

Цитата: Злоп от 02 ноября 2026, 06:45Еще если помните - почему UCHOICE падал с закрытием 1С при задании даты в условие отбора?

Не, тут падает не всегда... Как-то выборочно\специфически тоже...

Харлампий Дымба

Цитата: Злоп от Вчера в 03:45надо видимо сделать просто проверку существования родительского контекста.
Да, не чего-то не получается ничего. Ну то есть интересно придумать латку, чтоб избегать такой ситуации, но пока у меня решения нет.

Кстати, выяснилась ещё одна деталь - обязательное условие:

п.6 в форме подбора должна быть процедура ПриЗакрытии()

на ней и валится. Пустая она или там есть код не важно - валится от её наличия. Если этой процедуры нет, то падения не происходит. Всё чудесатее и чудесатее.

cr

Чё как дети?
Есть 2 способа организации подбора. Обычный и специальный.
Можно просто ОткрытьПодбор() и здесь же (в "родительской" форме) в предопределенной процедуре ОбработкаПодбора() задать действия с выбранной строкой из списка подбора. Так чаще всего и делается, при этом если режим НЕполноэкранный и сделать видимыми в окне обе формы (и "родительскую" и форму списка), видно как при выборе строки в форме подбора, она сразу "попадает" в "родительскую" форму. В каком порядке эти формы будут закрываться - по барабану.
А можно иначе. Если в форме подбора в ПриОткрытии() установить ОбработкаВыбораСтроки() в 1, ОбработкаПодбора() в "родительской" форме срабатывать не будет, зато в форме подбора начнет срабатывать предопределенная процедура ПриВыбореСтроки(), в которой и задаются действия с выбранной строкой. В этом варианте подобранные значения из формы подбора автоматически "отправляются" в "родительскую" форму из ПриЗакрытии() (- а как еще-то?). 1С валится из ПриЗакрытии() формы подбора, когда совершает там недопустимую операцию с закрытой "родительской" формой.

Злоп

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

Харлампий Дымба

Цитата: cr от Вчера в 19:49Чё как дети?
Не, ОбработкаВыбораСтроки() тут тоже не причём.
Но и у меня чё-то поплыли все рассуждения тоже. Многоуровневость оказывается не обязательна, проблема возникает если форму подбора дернуть из родительской формы после ОткрытьПодбор() по любому поводу, а в форме подбора (обычная форма списка справочника) есть процедура ПриЗакрытии.

Стенд:
Справочник.Новый1 - все установки по умолчанию, форма списка со следующим модулем:
Процедура ПриЗакрытии() //если нет этой процедуры - ошибки не будет
//код есть или кода нет - не важно
КонецПроцедуры
Отчет.Новый1 - все установки по умолчанию, модуль формы:
Процедура Сформировать()
    Перем ФормаПодбора;
    ОткрытьПодбор("Справочник.Новый1",,ФормаПодбора,1);//если 0 - ошибки не будет
    ФормаПодбора.Сортировка("Код"); //если нет обращения к форме - ошибки не будет                                    
КонецПроцедуры

Запускаем Отчет.Новый1, нажимаем Сформировать, выводим форму отчета на передний план, Окна-Закрыть все, падаем.

Цитата: Злоп от Вчера в 21:57если выяснится что вход в ПриЗакрытии успешен - то дальше можно пытаться играться с контекстом родительской формы
Вход-то успешен, только вот родительской формы уже не существует, так что играться не с чем и мы в любом случае свалимся в ошибку. Есть вариант избежать, но абсолютно некрасивый.