Имя: Пароль:
1C
1C 7.7
v7: При выполнении транзакции произошла ошибка! Объект заблокирован:
,
0 ---Fix---
 
24.02.22
14:59
Не давно словили 310 ошибку в файловой БД и пришлось перейти на MS SQL 2008 + Секр. релиз.
Наткнулся на ошибку "При выполнении транзакции произошла ошибка! Объект заблокирован: Основной набор параметров. Повторить попытку выполнить транзакцию?"
В базе только я один сижу. Даже не знаю уже куда копать, кто сталкивался? помогите избавиться от ошибки...
1 ---Fix---
 
24.02.22
16:19
UPD: Откатился на два дня назад, до возникновения ошибки.
Алгоритм заведения таков:
1) создается новый договор
2) в нем должен указываться элемент справочника "Справочник.ПараметрыДляФормированияПлатежныхДокументов". По умолчанию поле пустое
3) Открываю выбор элемента, создаю его, записываю, произвожу выбор.
И вот тут самое интересное, выбор не производится, т.е поле в договоре остается пустым.
А если после этой попытки создать другой договор и в нем попытаться повторить алгоритм. Тогда вылезет ошибка, указанная в названии темы.
2 vde69
 
24.02.22
16:20
>>> MS SQL 2008 + Секр. релиз.

думаю дело в этом, где-то что-то не досекретил :)
3 Злопчинский
 
24.02.22
16:50
В коде работа с транзакциями присутсвует?
"выбор не производится, т.е поле в договоре остается пустым." - проверить соответствие типов, а то может ты в реквизит с типом Спр.Договор пихаешь что нить типа постороненее типа "Спр.Контрагент" или число, или строку...
4 ---Fix---
 
24.02.22
17:19
(3) Выбор старых, заведенных ранее еще до перехода на MS SQL, производится нормально. Выбор Новой записи не производится, более одной новых записей создать не получается. Тип Данных совпадает, проверил еще раз на всякий случай. Присутствуют проверки заполнения реквизитов и их уникальности, кроме запроса на уникальность, транзакций в коде нет.
5 Злопчинский
 
24.02.22
21:04
Новую запись выбрать невозможно, она ещё не записана.
Варианта всего два
- криво код
- проблемы со скулем и 1сой
6 Харлампий Дымба
 
24.02.22
21:46
(5) Не, там есть третий вариант: падение 1С при некоторых условиях при вводе новых объектов через форму подбора. Проскакивало несколько раз в обсуждениях, зови Ёпрста, мне кажется он объяснял.
В 7.7 был лет 5 назад релиз отчетности с подобной ошибкой - при выборе единицы измерения 1С падала.
Так что может у ТС такой вариант. Как лечить не знаю, как избегать - не вводить новые элементы из формы подбора, а вводить их заранее и выбирать уже введённые.
7 Kigo_Kigo
 
25.02.22
08:38
(6) Или вводить програмно, по кнопке например
8 ---Fix---
 
25.02.22
09:46
В общем пока я сделал так:
первый созданный элемент, после которого начались проблемы, которые не выбирался я удалил. Потом создал его заново и выбрал. Дальше все пошло нормально. Но конечно уже страшно, т.к. не знаешь, можно ли будет исправить, когда в следующий раз вылезет...
Про проблемы вызываемые при создании элементов в форме выбора впервые услышал. Это догадки или подтвержденная закономерность? Просто переписывать тогда довольно много придется.
9 Злопчинский
 
25.02.22
13:18
(8) создавать элементы в форме выбора/подбора - это адский трэш. просто по логике работы.
то есть типа выбираем множество товаров куда-то, но при этом это множестов не определено заранее.. херачим по ходу..
.
прсото интересно:: что за процесс такой?
по уму - надо под другим углом посмотреть...
10 ---Fix---
 
25.02.22
14:08
У нас полностью самописная конфа, кое-что взято с глобальника, скорей всего с УПП. Выбор множества не происходит, все ссылки, что создаются в форме выбора имеют связь один к одному, хотя элементов "ПараметрыДляФормированияПлатежныхДокументов" у контрагента теоретически может быть несколько (например для каждого договора свой), издревне (до меня еще) он заводится только один. Однако в данном конкретном примере было вот так в форме документа договора:
Процедура ПриНачалеВыбораЗначения(ИД, Флаг)
    Если ИД = "ПараметрыДляФормированияПлатежныхДокументов" Тогда
        Флаг = 0;
        СЗ = СоздатьОбъект("СписокЗначений");
        СЗ.Установить("ЗапретитьОтбор", 1);
        СЗ.Установить("УстановитьОтбор_Вид", "Контрагент");
        СЗ.Установить("УстановитьОтбор_Значение", Контрагент);
        ОткрытьФорму("Справочник.ПараметрыДляФормированияПлатежныхДокументов#" + Контрагент, СЗ);
    КонецЕсли;
КонецПроцедуры //ПриНачалеВыбораЗначения

Самое интересное что нет нигде кода, который устанавливает открываемую форму, как форму для выбора значения. Платформа сама как я понял это делает.

Форма списка "ПараметрыДляФормированияПлатежныхДокументов"
//------------------------------------------------------------------------------------------------------------------------
//    Предопределенная процедура
//
Процедура ПриОткрытии()
    Если глПриОткрытииФормыСписка(Контекст) = 1 Тогда
        СтатусВозврата(0);
        Возврат;
    КонецЕсли;
КонецПроцедуры //ПриОткрытии

Полностью думаю не стоит выкладывать 150 строк, вот описание функции
//    Функция глПриОткрытииФормыСписка(Конт, Знач ТолькоПросмотр = 0, Знач ВидОтбора = "", Знач ЗначениеОтбора = "") Экспорт
//    Параметры
//    Конт - контекст модуля формы списка справочника
//    ТолькоПросмотр - число (0 или 1), управляет режимом доступа (редактирование или просмотр)
//    ВидОтбора - строка с видом устанавливаемого отбора
//    ЗначениеОтбора - значение, по которому нужно установить отбор
//
//    Описание
//    Вызывается в начале процедуры ПриОткрытии() модуля формы списка справочника строго следующим образом:
//    Если глПриОткрытииФормыСписка(Контекст) = 1 Тогда
//        СтатусВозврата(0);
//        Возврат;
//    КонецЕсли;
//
//    Заполняется список доступных видов отбора, если этот элемент диалога использован
//    Обрабатывается параметр, переданный в форму
//        АктивизироватьОбъект - активизирует объект в открываемой форме
//        УстановитьОтбор - устанавливает отбор в открываемой форме
//        Фильтр по списку элементов справочника
//    Устанавливается отбор <ВидОтбора> по значению <ЗначениеОтбора>
//    Устанавливается режим доступа к справочнику, в зависимости от значения переменной <ТолькоПросмотр>
//    Выполняются общие действия при открытии форм списков
//
//    Возвращаемое значение
//    0 - продолжить открытие
//    1 - прервать открытие
11 vde69
 
25.02.22
14:17
(8) на sql2000 этих проблем нет.

короче тут проблема в уровне изоляции транзакции и/или параллелизме. надо sql настроить и будет работать нормально
12 Злопчинский
 
25.02.22
17:47
(10) "который устанавливает открываемую форму, как форму для выбора значения. Платформа сама как я понял это делает."
а это смотря как ты это открываешь.
если открывается интерактивно выбор - открывается на выбор та форма, которая назначена для справочника именно как форма выбора
https://www.screencast.com/t/ZqipBiiPA
.
а когда открываешь через ОткрытьФорму() - там есть параметр в котором можно задать имя формы
13 Злопчинский
 
25.02.22
17:50
(8) страшного в этом нет.
такие ошибки весьма редки и это скорее всего как-то связано с внутренним устройством/механизмами.
Почему не страшно - да потому что здесь у тебя явный отлуп вылазит. и его будет видно сразу. и его устранить - это техническая проблема.
а вот когда у тебя в коде
ХреньКакаяТо = Чтото*Кф, и вместо Кф ожидаемого 1.234 почему-то отрабатывает 1.198 - такая ошибка хз когда будет замечена и будет ли замечена вообще. и каковы последствия будут - еще хзовее
Программист всегда исправляет последнюю ошибку.