Имя: Пароль:
1C
1С v8
Изменение записи регистра сведений
0 Sayan_mi
 
30.05.18
08:23
Есть непериодический независимый регистр сведений.
В нем два измерения Физическое лицо и номер по порядку.
Пытаюсь изменить в нем ресурсы.
ткЗапись = РегистрыСведений.ТрудоваяДеятельностьФизическихЛиц.СоздатьМенеджерЗаписи();    
        ткЗапись.ФизическоеЛицо = Строка.ФизическоеЛицо;
        ткЗапись.НомерПоПорядку = Строка.НомерПоПорядку;
        ткЗапись.Прочитать();

        врДата = ткЗапись.ДатаНачала;
        ткЗапись.ДатаНачала = ткЗапись.ДатаОкончания;
        ткЗапись.ДатаОкончания = врДата;
        
        ткЗапись.Записать();

Вылетает по ошибке: Запись не верна! Значение поля не соответствует установленному отбору: ТрудоваяДеятельностьФизическихЛиц: Аввакумов Александр Васильевич, 1 (Регистр сведений: Трудовая деятельность; Поле: НомерПоПорядку)
Но я номер по порядку не менял. В какой момент он изменился. Перед записью смотрел НПП был равен 2.
Не подскажите что с этим сделать?
1 Tankur
 
30.05.18
08:37
ткЗапись = РегистрыСведений.ТрудоваяДеятельностьФизическихЛиц.СоздатьМенеджерЗаписи();    
        ткЗапись.ФизическоеЛицо = Строка.ФизическоеЛицо;
        ткЗапись.НомерПоПорядку = Строка.НомерПоПорядку;
        ткЗапись.Прочитать();
        ткЗапись.ФизическоеЛицо = Строка.ФизическоеЛицо;
        ткЗапись.НомерПоПорядку = Строка.НомерПоПорядку;

        врДата = ткЗапись.ДатаНачала;
        ткЗапись.ДатаНачала = ткЗапись.ДатаОкончания;
        ткЗапись.ДатаОкончания = врДата;
        
        ткЗапись.Записать();
2 Tankur
 
30.05.18
08:38
это если уж тебе надо действительно прочитать, что для менеджера записи не обязательно
3 Tankur
 
30.05.18
08:40
но тут нет проверки на пустые значения в измерениях. Если в твоем строка будут пустые значения - пеняй на себя )))
4 Tankur
 
30.05.18
08:46
ткЗапись = РегистрыСведений.ТрудоваяДеятельностьФизическихЛиц.СоздатьМенеджерЗаписи();    
ткЗапись.ФизическоеЛицо = Строка.ФизическоеЛицо;
ткЗапись.НомерПоПорядку = Строка.НомерПоПорядку;
ткЗапись.Прочитать();
ткЗапись.ФизическоеЛицо = Строка.ФизическоеЛицо;
ткЗапись.НомерПоПорядку = Строка.НомерПоПорядку;

врДата = ткЗапись.ДатаНачала;
ткЗапись.ДатаНачала = ткЗапись.ДатаОкончания;
ткЗапись.ДатаОкончания = врДата;
Если ткЗапись.ПроверитьЗаполнение() Тогда
    ткЗапись.Записать(Истина);
Иначе
    Сообщить("Ошибка ");
    Продолжить;
КонецЕсли;
5 catena
 
30.05.18
08:52
Пример из СП:

Курс = РегистрыСведений.КурсыВалют.СоздатьМенеджерЗаписи();
-->Курс.Валюта = ВыбВалюта;
-->Курс.Период = ТекущаяДата();
Курс.Прочитать();
Если Не Курс.Выбран() Тогда
-->    Курс.Период = ТекущаяДата();
-->    Курс.Валюта = ВыбВалюта;
    Курс.Курс = 41.35;
    Курс.Кратность = 1;
КонецЕсли;
Если ВвестиЧисло(Курс.Курс, "Введите курс на сегодня",15,5) Тогда
    Курс.Записать();
КонецЕсли;
6 Ненавижу 1С
 
гуру
30.05.18
08:53
посмотри подписку на событие ПроверитьЗаписиДанныхФизическихЛиц
7 Sayan_mi
 
30.05.18
09:06
(1) Ошибка осталась. В отладчике смотрел ткЗапись после чтения НомерПоПорядку был 2 перед записью тоже в ошибке пишет про 1.
8 Sayan_mi
 
30.05.18
09:13
(6) да там устанавливается номер по порядку 1. Похоже придется считывать все данные по физ лицу - менять в одной строке даты местами и записывать весь набор записей.
9 Сияющий в темноте
 
30.05.18
09:14
Смотреть модуль набора записей и подписки на события,где то 2 меняется на 1 сторонним алгоритмом.
И очень похоже,что создатели регистра ожидали запись через набор записи,где все записи пронумерованы.
10 Ненавижу 1С
 
гуру
30.05.18
09:21
(8) там же условие отключения этого дела есть

Если ЗарплатаКадры.ОтключитьБизнесЛогикуПриЗаписи(Источник) Тогда
        Возврат;
    КонецЕсли;


Функция ОтключитьБизнесЛогикуПриЗаписи(Знач Объект) Экспорт
    
    Возврат Объект.ОбменДанными.Загрузка И (НЕ Объект.ДополнительныеСвойства.Свойство("ПроверятьБизнесЛогикуПриЗаписи"));
        
КонецФункции
11 Sayan_mi
 
30.05.18
09:33
Да решил сделать запись набором куда подтащить все строки физ лица. Получилось.
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.