|   |   | 
| 
 | Поле объекта недоступно для записи. На сервере. | ☑ | ||
|---|---|---|---|---|
| 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) спасибо теперь понял.
 а это то зачем? Если Ложь Тогда Объ = Справочники.Номенклатура.СоздатьЭлемент(); КонецЕсли; | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |