Имя: Пароль:
1C
1С v8
Поле объекта недоступно для записи. На сервере.
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) спасибо теперь понял.
а это то зачем?
Если Ложь Тогда Объ = Справочники.Номенклатура.СоздатьЭлемент(); КонецЕсли;
Независимо от того, куда вы едете — это в гору и против ветра!