Имя: Пароль:
1C
 
Ошибка при записи в регистр сведений.
,
0 Zareshivatel
 
10.10.16
20:36
Регистр независимый, периодический. Возникает ошибка времени выполнения: ошибка при вызове метода контекста(записать) в модуле...
Вот такой код:

Попытка
        
НачатьТранзакцию();
        


        НаборЗаписей = РегистрыСведений.озм_ИсполнителиЗаказов.СоздатьНаборЗаписей();
        НаборЗаписей.Отбор.Заказ.Установить(Заказ);
        НаборЗаписей.Отбор.Исполнитель.Установить(Исполнитель);
        НаборЗаписей.Отбор.Этап.Установить(Этап);
        НаборЗаписей.Прочитать();
        
        Если НаборЗаписей.Количество() = 0 Тогда
            НовыйИсполнитель                = НаборЗаписей.Добавить();
            НовыйИсполнитель.Заказ            = Заказ;
            НовыйИсполнитель.Исполнитель    = Исполнитель;
            НовыйИсполнитель.Комментарий    = Комментарий;
            НовыйИсполнитель.Этап            = Этап;
        ИначеЕсли НаборЗаписей.Количество() = 1 Тогда
            НовыйИсполнитель        = НаборЗаписей[0];
            НовыйИсполнитель.Комментарий    = Комментарий;
            ИзменитьСуществующуюЗадачу(Заказ, Исполнитель);
        КонецЕсли;
        
        НаборЗаписей.Записать();    
        
        ЗафиксироватьТранзакцию();
        
    Исключение
        
        ОтменитьТранзакцию();
        
    КонецПопытки;  

Ошибка возникает на строк НаборЗаписей.Записать();
Все отборы и присваиваемые значения по типам соответствуют измерениям (заказ, этап, исполнитель) и реквизиту (комментарий). В чем косяк, товарищи?
1 Zareshivatel
 
10.10.16
20:37
Если это вдруг важно: сейчас регистр пустой
2 shuhard
 
10.10.16
20:43
(0)[Исключение
        
        ОтменитьТранзакцию();]
убери
3 RomanYS
 
10.10.16
20:43
Викторина, угадай какой текст ошибки у ТС.
4 Zareshivatel
 
10.10.16
20:48
(3) я же написал "ошибка времени выполнения: ошибка при вызове метода контекста(записать) в модуле...". Там дальше ссылка на модуль и строку кода.
"По причине..." - этого нет.
5 RomanYS
 
10.10.16
20:50
(4) "Там дальше ссылка на модуль и строку кода. "
Так открой - ошибка в той самой строчке кода.
6 Zareshivatel
 
10.10.16
20:50
(2) Как же я уберу "исключение", если у меня вверху есть "Попытка"?) Или ты вообще предлагаешь эту конструкцию убрать?
7 hhhh
 
10.10.16
20:51
(4) ну проверь все процедуры ПередЗаписью и ПриЗаписи. Если их меньше десяти, можешь их сюда выложить.
8 Zareshivatel
 
10.10.16
20:52
(5) я же указал в (0), в какой строке выложенного кода ошибка..(!?)
9 Zareshivatel
 
10.10.16
20:56
(7) Ошибка возникает при записи в регистр сведений. Это модуль формы
10 hhhh
 
10.10.16
20:59
(9) какая разница? Вс1 равно по-полной вызываются всен 70 процедур при записи и перед записью. Или сколько их у вас?
11 Zareshivatel
 
10.10.16
21:01
(10) 0, например :)
12 hhhh
 
10.10.16
21:03
(11) ну если ты записываешь регистр, значит должна вызываться процедура при записи этого регистра. Правильно?
13 RomanYS
 
10.10.16
21:03
(8) тогда смотри модуль объекта и лови отладчиком Отказ = Истина в одном из обработчиков (перед/при записи)
14 Zareshivatel
 
10.10.16
21:09
(13) Это самописная обработка, модуль объекта пустой

(12) Регистр я сам создал, нет было у меня в модуле набора записей ничего. Подумал, что, быть может, обязано быть, скопировал процедуру "перед записью" из другого РС:

Процедура ПередЗаписью(Отказ, Замещение)
    
    Если ОбменДанными.Загрузка Тогда
        Возврат;
    КонецЕсли;

    ОбновлениеИнформационнойБазы.ПроверитьОбъектОбработан(ЭтотОбъект);

КонецПроцедуры


ничего не изменилось
15 Zareshivatel
 
10.10.16
21:10
Раньше подобные вещи делал уже - ошибок не было. Да и где им тут взяться, казалось бы. Единственный нюанс: у меня нет ресурсов в этом регистре. Как-то может влиять?
16 hhhh
 
10.10.16
21:11
(14) не у обработки. У регистра смотри.
17 RomanYS
 
10.10.16
21:13
(14) у регистра конечно. Может он(регистр) в какие-то общие подписки попал
18 hhhh
 
10.10.16
21:13
(14) подписки на события все проверь
19 Zareshivatel
 
10.10.16
21:13
(16) я и говорю: регистр этот мой. Модуль менеджера и модуль набора записей у него пустой. Соответственно, нет там процедур, связанных с записью
20 RomanYS
 
10.10.16
21:18
(19) остановись отладчиком на НаборЗаписей.Записать(); и включи замер производительности - увидишь весь код, который исполняется при обработке записи
21 Zareshivatel
 
10.10.16
21:23
(20) Ага. Ну вот смотрите:
Процедура ПередЗаписьюОбщихДанных(Объект, Отказ)
    
    Если Объект.ОбменДанными.Загрузка Тогда
        Возврат;
    КонецЕсли;
    
    ТолькоПросмотр = Ложь;
    АвтономнаяРаботаСлужебный.ОпределитьВозможностьИзмененияДанных(Объект.Метаданные(), ТолькоПросмотр);
    
    Если ТолькоПросмотр Тогда
        СтрокаОшибки = НСтр("ru = 'Изменение неразделенных данных (%1), загружаемых из приложения, в Автономном рабочем месте запрещено.
        |Обратитесь к администратору.'");
        СтрокаОшибки = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(СтрокаОшибки, Строка(Объект));
        ВызватьИсключение СтрокаОшибки;
    КонецЕсли;
    
КонецПроцедуры


И процедура из АвтономнаяРаботаСлужебный:

// Определяет возможность внесения изменений в объект
// Объект нельзя записать в Автономном рабочем месте, если он одновременно соответствует следующим условиям:
//    1. Это автономное рабочее место.
//    2. Это неразделенный объект метаданных.
//    3. Этот объект входит в состав плана обмена автономной работы.
//    4. Не входит в список исключений.
//
// Параметры:
//    ОбъектМетаданных - Метаданные проверяемого объекта
//    Только просмотр - Булево - Если Истина, то объект доступен только для просмотра.
//
Процедура ОпределитьВозможностьИзмененияДанных(ОбъектМетаданных, ТолькоПросмотр) Экспорт
    
    УстановитьПривилегированныйРежим(Истина);
    
    ТолькоПросмотр = ЭтоАвтономноеРабочееМесто()
        И (Не ОбщегоНазначенияПовтИсп.ЭтоРазделенныйОбъектМетаданных(ОбъектМетаданных.ПолноеИмя(),
            ОбщегоНазначенияПовтИсп.РазделительОсновныхДанных())
            И Не ОбщегоНазначенияПовтИсп.ЭтоРазделенныйОбъектМетаданных(ОбъектМетаданных.ПолноеИмя(),
                ОбщегоНазначенияПовтИсп.РазделительВспомогательныхДанных()))
        И Не ОбъектМетаданныхЯвляетсяИсключением(ОбъектМетаданных)
        И Метаданные.ПланыОбмена[ПланОбменаАвтономнойРаботы()].Состав.Содержит(ОбъектМетаданных);
    
КонецПроцедуры


В переменной ТолькоПросмотр  возвращается "Ложь". То есть вроде бы все норм
22 Zareshivatel
 
10.10.16
21:24
Блин, что же так криво вставляет код-то...извиняюсь
23 Zareshivatel
 
10.10.16
21:26
(18) Как это сделать, если в erp подписок не меньше сотни?)
24 Zareshivatel
 
10.10.16
21:31
Мужики, отбой)))
25 Zareshivatel
 
10.10.16
21:32
Я вот что-то предполагал, что период автоматически система должна поставить. А нет - попробовал вручную текущую дату присвоить, прокатило.

Спасибо!
26 RomanYS
 
10.10.16
21:32
(23) они все должны попасть в отладку
27 RomanYS
 
10.10.16
21:33
(25) и система ни слова не сказала по пустой период - не верю)
28 Zareshivatel
 
10.10.16
21:40
29 DrShad
 
10.10.16
21:42
(28) наборы записей в модуле формы!? ужас
30 RomanYS
 
10.10.16
21:43
(28) у тебя 1с плохая)), у меня говорит

{Обработка.Обработка5.Форма.Форма.Форма(6)}: Ошибка при вызове метода контекста (Записать)
    Набор.Записать();
по причине:
Запись не верна! Период не может быть пустым!: РегистрСведений3: 01.01.0001, sdsd (Регистр сведений: РегистрСведений3; Номер строки: 1)
31 Zareshivatel
 
10.10.16
21:46
(30) обновлю платформу)
(29) Чем это плохо? Правило дурного тона? Ухудшение производительности? Прошу объяснить или ссылку на статью хотя бы. От ваших пустых возгласов ума у меня не прибавиться))
32 Zareshivatel
 
10.10.16
21:47
Не прибавится* Брр, пора спать идти)
33 RomanYS
 
10.10.16
21:58
а если после "исключение" вставить
Сообщить(ОписаниеОшибки());
???
34 Zareshivatel
 
11.10.16
06:29
(33) Да, тогда то, что у тебя))
Закон Брукера: Даже маленькая практика стоит большой теории.