|
Поле объекта недоступно для записи. На сервере. | ☑ | ||
---|---|---|---|---|
0
tabarigen
25.11.15
✎
17:46
|
Пытаюсь для всей номенклатуры заполнить Наименование для печати на основании его Наименования. Написал простую обработку.
Вот код. &НаСервере Процедура ЗаполнитьНаименованиеДляПечатиНаСервере() // Вставить содержимое обработчика. //{{КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА // Данный фрагмент построен конструктором. // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!! Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Номенклатура.Ссылка |ИЗ | Справочник.Номенклатура КАК Номенклатура"; РезультатЗапроса = Запрос.Выполнить(); ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать(); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл // Вставить обработку выборки ВыборкаДетальныеЗаписи НаименованиеДляПечати = ВыборкаДетальныеЗаписи.Ссылка.Наименование; ВыборкаДетальныеЗаписи.Ссылка.НаименованиеПолное = НаименованиеДляПечати; КонецЦикла; Сообщить("Наименование для печати заполнены!"); //}}КОНСТРУКТОР_ЗАПРОСА_С_ОБРАБОТКОЙ_РЕЗУЛЬТАТА КонецПроцедуры &НаКлиенте Процедура ЗаполнитьНаименованиеДляПечати(Команда) ЗаполнитьНаименованиеДляПечатиНаСервере(); КонецПроцедуры При выполении обработки выдается ошибка: {Форма.Форма.Форма(23)}: Поле объекта недоступно для записи (НаименованиеПолное) ВыборкаДетальныеЗаписи.Ссылка.НаименованиеПолное = НаименованиеДляПечати; Где напортачил ребята? |
|||
1
ale-sarin
25.11.15
✎
17:48
|
ПолучитьОбъект()
|
|||
2
Nuobu
25.11.15
✎
17:49
|
(1) + Записать();
|
|||
3
ale-sarin
25.11.15
✎
17:50
|
+1
Об = ВыборкаДетальныеЗаписи.Ссылка.ПолучитьОбъект() Об.НаименованиеПолное = ВыборкаДетальныеЗаписи.Ссылка.Наименование; Об.Записать() |
|||
4
VikingKosmo
25.11.15
✎
17:52
|
и наименование получай в том же запросе, что и ссылку, а не через точу
|
|||
5
tabarigen
25.11.15
✎
18:16
|
(3) Сделал так, выдается ошибка. Вероятно из за того что номенклатуры много около 16к
|
|||
6
tabarigen
25.11.15
✎
18:17
|
(4) сейчас попробую
|
|||
7
VikingKosmo
25.11.15
✎
18:18
|
(5) ошибку предлагаешь угадать?
|
|||
8
tabarigen
25.11.15
✎
18:20
|
(7) Нет можно и просмотреть
{Форма.Форма.Форма(27)}: Ошибка при вызове метода контекста (Записать) НоменклатураОбъект.Записать(); по причине: Ошибка при выполнении обработчика - 'ПриЗаписи' по причине: {ПланОбмена.УТР_РМК.МодульМенеджера(1410)}: Ошибка при вызове метода контекста (ЗарегистрироватьИзменения) ПланыОбмена.ЗарегистрироватьИзменения(л_Узлы,Источник.Ссылка); по причине: Конфликт блокировок при выполнении транзакции: Не удалось заблокировать таблицу '_REFERENCECHNGR4016' по причине: Не удалось заблокировать таблицу '_REFERENCECHNGR4016' |
|||
9
tabarigen
25.11.15
✎
18:20
|
Отлаживаю на файловой
|
|||
10
VikingKosmo
25.11.15
✎
18:20
|
забористая ошибка
|
|||
11
tabarigen
25.11.15
✎
18:21
|
(10) породиста сказал бы даже)
|
|||
12
VikingKosmo
25.11.15
✎
18:21
|
отключи регистрацию на этом плане обмена, или для этого обмена все и делается?
|
|||
13
Cyberhawk
25.11.15
✎
18:21
|
Приостанови регл. задания в базе и тестируй сколько влезет
|
|||
14
Живой Ископаемый
25.11.15
✎
18:23
|
Об = ВыборкаДетальныеЗаписи.Ссылка.ПолучитьОбъект()
Об.НаименованиеПолное = ВыборкаДетальныеЗаписи.Ссылка.Наименование; Об.Обменданными.Загрузка = Истина; Об.Записать() но может нужно и отключить регистрацию но может и просто выйти-зайти в базу |
|||
15
tabarigen
25.11.15
✎
18:25
|
(12) план обмена вообще не причем. При помощи КД переносил данные НаименованиеПолное забыл перенести, теперь в Печатных формах наименование не отображается. вот и решил поправить это дело.
|
|||
16
Cyberhawk
25.11.15
✎
18:26
|
(14) по-хорошему регистрация изменений никак не должна зависеть от того, включен или нет режим ОбменДанными.Загрузка
|
|||
17
VikingKosmo
25.11.15
✎
18:26
|
(16) в БСП он и не зависит
|
|||
18
Cyberhawk
25.11.15
✎
18:27
|
(17) Да, и в типовых этот момент слава богу управляем (через доп. свойство)
|
|||
19
VikingKosmo
25.11.15
✎
18:27
|
(14) для обмена БСП не взлетит ни разу
|
|||
20
tabarigen
25.11.15
✎
18:29
|
(14) Ископае,
о какой регистрации вы говорите? Что то не в курю. |
|||
21
Живой Ископаемый
25.11.15
✎
18:32
|
да просто выйди-зайди в базу. Если ты монопольно, то скорее всего это прсто артефакт какой-то
|
|||
22
VikingKosmo
25.11.15
✎
18:32
|
(20) сделай Объект.ДополнительныеСвойства.Вставить("ОтключитьМеханизмРегистрацииОбъектов", Истина)
|
|||
23
Cyberhawk
25.11.15
✎
18:33
|
(22) скорее всего не взлетит, у него регистрация в модуле ПланОбмена.УТР_РМК.МодульМенеджера(1410) :)
|
|||
24
VikingKosmo
25.11.15
✎
18:34
|
(23) я хочу верить в чудо ;)
|
|||
25
Cyberhawk
25.11.15
✎
18:39
|
Короче кроме (12) или программного добавления возможности отключения механизма регистрации не вижу способов в файловой побороть ошибку из (8)
|
|||
26
Живой Ископаемый
25.11.15
✎
18:42
|
2(25) Так почему вообще должна возникать блокировка? Он монопольно в файловой, перезаписывает элементы справочника. ну пусть они регистрируются в плане обмена для всех существующих узлов. Какие предпосылки для блокировки?
|
|||
27
VikingKosmo
25.11.15
✎
18:43
|
(26) а может вовсе и не монопольно?
|
|||
28
VikingKosmo
25.11.15
✎
18:44
|
(26) как вариант, у него висит еще один его же сеанс, который меняет наименования
|
|||
29
Живой Ископаемый
25.11.15
✎
18:57
|
Или просто памяти мало, и винде приходится действительно писать а диск. И в этом случае тоже возникают блокировки
|
|||
30
Cyberhawk
25.11.15
✎
18:59
|
(26) Одно известно точно: что в этот момент где-то вне текущей транзакции была наложена блокировка на таблицу изменений того же справочника.
С учетом того, что база файловая, достаточно любой записи объекта (версия в (28)). Либо какие-нибудь регл. задания. Обмен, вроде, мешать не должен (НачатьЧтение при загрузке или НачатьЗапись при выгрузке) - там блокируется узел плана обмена вроде только |
|||
31
Cyberhawk
25.11.15
✎
19:00
|
А, ну а вот если выполняется обмен (выгрузка), то НачатьЗапись() заблокирует всю таблицу объекта данных
|
|||
32
Cyberhawk
25.11.15
✎
19:01
|
+(31) не "НачатьЗапись()" а "Записать()"
|
|||
33
tabarigen
25.11.15
✎
19:10
|
(30) в Базу перезашел, результат такой же. Сижу в базк монопольно.
|
|||
34
tabarigen
25.11.15
✎
19:10
|
(29) памяти всего 8Гб ОЗУ.
|
|||
35
tabarigen
25.11.15
✎
19:12
|
(25) Если база на поддержке могу ли я отключить регистрацию для этого плана обмена?
|
|||
36
Cyberhawk
25.11.15
✎
19:15
|
(35) если на корне конфигурации замок, то нельзя
(33) Регл. задания проверь и отключи |
|||
37
Fragster
гуру
25.11.15
✎
19:21
|
&НаСервереБезКонтекста
Процедура СделатьВсеНаСервере() Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Номенклатура.Ссылка |ИЗ | Справочник.Номенклатура КАК Номенклатура |ГДЕ | Номенклатура.НаименованиеПолное = """" | И НЕ Номенклатура.ЭтоГруппа"; Результат = Запрос.Выполнить(); Выборка = Результат.Выбрать(); Пока Выборка.Следующий() Цикл Объ = Выборка.Ссылка.ПолучитьОбъект(); Если Ложь Тогда Объ = Справочники.Номенклатура.СоздатьЭлемент(); КонецЕсли; Объ.НаименованиеПолное = Объ.Наименование; ОбщегоНазначенияКлиентСервер.СообщитьПользователю(Объ.Наименование, Объ.Ссылка); Объ.ОбменДанными.Загрузка = Истина; Объ.Записать(); КонецЦикла; КонецПроцедуры &НаКлиенте Процедура СделатьВсе(Команда) СделатьВсеНаСервере(); КонецПроцедуры |
|||
38
Cyberhawk
25.11.15
✎
19:23
|
(37) 1. У него вроде тоже код на сервере выполняется.
2. Почему ты считаешь, что это поможет избежать ошибки из (8)? |
|||
39
tabarigen
25.11.15
✎
19:26
|
(37) ваш код сработал. Проверю сейчас. еще раз удалив наименование для печати у нескольких позиций номеклатуры.
|
|||
40
tabarigen
25.11.15
✎
19:27
|
(37) Проверил работает..)) Теперь объясните чем ваш код отличается от моего.
|
|||
41
Cyberhawk
25.11.15
✎
19:34
|
(40) а теперь свой код еще раз проверь и выложи ошибку
|
|||
42
tabarigen
25.11.15
✎
19:36
|
(41) ошибка та же
|
|||
43
Cyberhawk
25.11.15
✎
19:39
|
(42) какая блин? У тебя их в этой теме перечислено две
|
|||
44
tabarigen
25.11.15
✎
21:18
|
(43) та что в (8)
|
|||
45
tabarigen
25.11.15
✎
21:25
|
Непонтяно для чего этот кусок кода
Если Ложь Тогда Объ = Справочники.Номенклатура.СоздатьЭлемент(); КонецЕсли; и этот тоже Объ.ОбменДанными.Загрузка = Истина; Объясните пожалуйста что еще за ОбменДанными? |
|||
46
Живой Ископаемый
25.11.15
✎
23:08
|
западло, куча книг про это написано, гугл есть... типовые, "Если нужно объяснять - то не нужно объяснять"
|
|||
47
Cyberhawk
26.11.15
✎
06:04
|
А, по-видимому все-таки регистрация не выполняется у парня, если ОбменДанными.Загрузка = Истина, и значит до сути не докопались (почему возникает блокировка)
|
|||
48
ЧеловекДуши
26.11.15
✎
06:32
|
(45) Первое, если чисто для программиста, жимкать "Ctrl + Space". В некоторых случаях удобно для написания чего либо незначительного. А так, лишний код.
Второе. Для того что бы записать то, что обычно не пишется. Обычно в Процедуры Объекта пишут строчки: Если ОбменДанными.Загрузка Тогда Возврат; КонецЕсли; Для того, что бы не выполнять какой либо проверочный код, или заполнение каких либо данных :) |
|||
49
tabarigen
26.11.15
✎
10:38
|
(48) спасибо теперь понял.
а это то зачем? Если Ложь Тогда Объ = Справочники.Номенклатура.СоздатьЭлемент(); КонецЕсли; |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |