Имя: Пароль:
1C
1С v8
Изменить запись регистра
0 Pasha12312
 
31.07.13
11:12
Здравствуйте.
Если непереодический, подчиненный регистратору регистр сведений "СостоянияОС".
Как  программно найти и изменить запись - Состояние?
Через "СоздатьНаборЗаписей()" - не получилось .
1 Капитан О
 
31.07.13
11:13
а как не получилось?
2 ДенисЧ
 
31.07.13
11:13
Отбор установи и прочитай. Потом меняй
3 Pasha12312
 
31.07.13
11:18
Делал так:
НаборЗаписей = РегистрыСведений.СостоянияОС.СоздатьНаборЗаписей();
                НаборЗаписей.Отбор. (доступны только процедуры и функции (Добавить, Количество, Найти)).
4 Pasha12312
 
31.07.13
11:19
... вообще я ожидал там увидеть "Регистратор" - как в книжке "Простые примеры разработки" указано)
5 Капитан О
 
31.07.13
11:20
(3) а также прочие свойства
6 ale-sarin
 
31.07.13
11:20
(3) Не жди через точку. Пиши руками.
7 Pasha12312
 
31.07.13
11:20
как найти нужную запись, подскажите?!
8 ДенисЧ
 
31.07.13
11:21
(3) НаборЗаписей.Отбор.Ос.Установить(МояОС, Истина)
9 Капитан О
 
31.07.13
11:21
(7) не найти, а отбор установить и прочитать
10 Pasha12312
 
31.07.13
11:24
(8).. Отбор.Ос ..
Ос - это что?
11 Капитан О
 
31.07.13
11:25
(10) измерение
12 ДенисЧ
 
31.07.13
11:25
(10) Измерение регистра %-)
13 Капитан О
 
31.07.13
11:25
+(11) или муж осы
14 Pasha12312
 
31.07.13
11:25
(13) )))
15 ale-sarin
 
31.07.13
11:27
(10)
НаборЗаписей.Отбор.Регистратор.Установить(МояСсылка)
НаборЗаписей.Прочитать();
Что-то променять
НаборЗаписей.Записать();
16 Pasha12312
 
31.07.13
11:28
спасибо всем ,  я понял .
Просто, подумал , что если не вылетает подсказка - значит так делать - ошибка.
17 Pasha12312
 
01.08.13
10:03
НаборЗаписей = РегистрыСведений.СостоянияОС.СоздатьНаборЗаписей();
        НаборЗаписей.Отбор.ОсновноеСредство.Установить(ТекОС);


ошибка:
{Документ.СторнированиеПередачаОС.МодульОбъекта(925)}: Поле объекта не обнаружено (ОсновноеСредство)
        НаборЗаписей.Отбор.ОсновноеСредство.Установить(ТекОС);
18 Pasha12312
 
01.08.13
10:17
написал руками . Результат - ошибка
19 Pasha12312
 
01.08.13
10:27
.
20 Капитан О
 
01.08.13
10:35
что бы это могло быть? точно! поля нет. поэтому и не обнаружено
21 Pasha12312
 
01.08.13
10:42
(20) но там есть такое измерение.
22 cw014
 
01.08.13
10:46
(21) Что отладчик говорит про "НаборЗаписей.Отбор"
23 Капитан О
 
01.08.13
10:47
(21) а что в СП про отбор написано? ты же уже сходил и почитал?
24 Aprobator
 
01.08.13
10:48
(17) Регистр сведений СостоянияОС в конфигураторе не открыть и не посмотреть его измерения?
25 Pasha12312
 
01.08.13
10:49
(24) я ж говорил , что есть такое.
26 Aprobator
 
01.08.13
10:51
стоп, так этот регистр разве не подчинен регистартору?
27 Pasha12312
 
01.08.13
10:51
вроде понял , сейчас попробую (23)
28 Pasha12312
 
01.08.13
10:52
(23) там через Регистратор только можно. А как по измерениям по такому регистру(непереодичекий , подчиненный регистратору)
29 Aprobator
 
01.08.13
10:53
(28) запрос.
30 Pasha12312
 
01.08.13
10:53
как сделать? (23)
31 Pasha12312
 
01.08.13
10:53
(29) только так или есть еще варианты?
32 Капитан О
 
01.08.13
10:54
(30) ктрл+ф1. там много интересного
33 Pasha12312
 
01.08.13
10:54
(29) мне запись изменить нужно , а не просто прочитать.
34 Капитан О
 
01.08.13
10:55
(33) тебе понять нужно, почему ты делаешь фигню. и только потом изменить заипсь
35 Aprobator
 
01.08.13
10:55
есть варианты открыть СП и почитать про методы регистра сведений. А не сидеть тут как галчонок с открытым ртом.
36 Ёпрст
 
01.08.13
10:56
всё написано в (15)
37 Cherokee
 
01.08.13
11:04
Набор = РегистрыСведений.СостоянияОСОрганизаций.СоздатьНаборЗаписей();
    Набор.Отбор.Регистратор.Значение = Док;
    Набор.Отбор.Организация(Организация);
    Набор.Отбор.ОсновноеСредство(ОсновноеСредство);
    Набор.Прочитать();
    Для Каждого Движение Из Набор Цикл
        
        Движение.Состояние = ВыбСостояние;
        
    КонецЦикла;
    
    Набор.Записать();
38 Aprobator
 
01.08.13
11:05
(37) ужас.
39 Pasha12312
 
01.08.13
11:06
(37) разве не будет ошибки в 3 и 4 стр?
40 Aprobator
 
01.08.13
11:07
будет
41 Капитан О
 
01.08.13
11:08
(39) держи, горе

Список свойств объекта зависит от свойств регистра: для регистров сведений, для которых в конфигураторе установлен режим записи "Подчинение регистратору", отбор возможен только по регистратору, для периодических регистров сведений отбор возможен по периоду и значениям измерений, для непериодических - только по значению измерений.
42 Pasha12312
 
01.08.13
11:09
в СП написано , что если в регистре подчиненному регистратору - отбор , только по регистратору.
НО проблема у меня в том, что у меня не всегда будет ссылка на регистор. По этому - я хочу как-то по измерениям отбирать
43 Pasha12312
 
01.08.13
11:09
(41) я читал)
(42)
44 Капитан О
 
01.08.13
11:10
(42) ты хочешь странного
45 Aprobator
 
01.08.13
11:12
он хочет невозможного. Изменить запись регистра связанного с регистратором без отбора по регистратору.
46 Aprobator
 
01.08.13
11:13
и упорно не хочет сам попытаться прочесть и понять СП.
47 Капитан О
 
01.08.13
11:13
(45) но сначала всё-таки странного
48 Aprobator
 
01.08.13
11:14
посмотреть в типовых, это походу для ТС вообще - высший пилотаж.
49 Pasha12312
 
01.08.13
11:15
(48) (47) та ладно , хватит издеваться . У меня , пока , опыта мало.
что такое ТС? ))
50 Капитан О
 
01.08.13
11:16
(49) топик-стартер. меняй подход к исходной задаче
51 Aprobator
 
01.08.13
11:17
(49) у тебя лени много.
52 Serg_1960
 
01.08.13
11:23
Вообще-то есть "универсальный" метод. Когда нужно, например, выбрать и изменить значения ресурса регистра. Медленный - но работает.
53 Pasha12312
 
01.08.13
11:27
(52) что за метод?
54 Serg_1960
 
01.08.13
11:35
(53) Запрос к регистру сведений с отбором по нужному значению ресурса или реквизита и возврат измерений, по которым потом можно прочитать набор (с отбором). Далее читаем записи набора, меняем и записываем набор. Сейчас примеры поищу.
55 Pasha12312
 
01.08.13
11:48
буду благодарен.
56 h_miha
 
01.08.13
12:09
сделай отбор по регистратору, прочитай набор, сделай цикл по движениям из набора и в теле цикла проверяй твоя ОС или нет и меняй если твоя
57 Serg_1960
 
01.08.13
12:36
(55) Сорри, ничего умного в голову не лезет. Наверное конец недели - устал... или ничего умного так, в принципе, не возможно сделать в конфигурации.

    Запрос = Новый Запрос();
    Запрос.Текст =
    "ВЫБРАТЬ
    |    СостоянияОС.Регистратор
    |ИЗ
    |    РегистрСведений.СостоянияОС КАК СостоянияОС
    |ГДЕ
    |    СостоянияОС.ОсновноеСредство = &ОсновноеСредство
    |
    |УПОРЯДОЧИТЬ ПО
    |    ДатаСостояния УБЫВ";
    
    Запрос.УстановитьПараметр("ОсновноеСредство", ТекОС);
    Выборка = Запрос.Выполнить().Выбрать();
    Если Выборка.Следующий() Тогда
        НаборЗаписей = РегистрыСведений.СостоянияОС.СоздатьНаборЗаписей();
        НаборЗаписей.Отбор.Регистратор.Установить(Выборка.Регистратор);
        НаборЗаписей.Прочитать();
        Для Каждого Запись Из НаборЗаписей Цикл
            Если Запись.ОсновноеСредство = ТекОС Тогда
                Собщить("Ну вот, я нашёл последнюю запись в регистре по этому основному средству... и нафига оно мне это надо? О_О");
                Если Запись.Состояние = Перечисления.СостоянияОС.СнятоСУчета Тогда
                    Сообщить("Ну и хрен с ним, что снято с учета. Всё равно менять можно только через регистратор " + Запись.Регистратор);
                КонецЕсли;
            КонецЕсли;
        КонецЦикла;
    КонецЕсли;
58 Aprobator
 
01.08.13
12:44
(57) я обычно пользуюсь таким способом, после прочтения регистра выгружаю его в ТЗ. Там нахожу нужные строки по отбору (Через НайтиСтроки), корректирую их и загружаю все обратно. Кстати, в запросе РАЗЛИЧНЫЕ забыл.
59 m-serg74
 
01.08.13
13:08
(58) зато (57) по сути ТСу написал нахрена менять вручную движения если РС подчинен регистратору? перепроведут и опять все на местах будет
60 Aprobator
 
01.08.13
13:21
(59) Может причина изменений в том, что раньше в модуле объекта в процедуре проведения была какая ошибка. Причем в движениях только по одному регистру. Ошибку поправили, но в старых документах ошибочные записи по регистру остались и сильно мешают жить. Перепроводить документ долго и муторно, поскольку там могут быть движения по другим регистрам и куча сопутствующих проверок. А в обработке - самое то. Ну еще перед НаборЗаписей.Записать(), неплохо было бы довесить НаборЗаписей.ОбменДанным.Загрузка = Истина;
61 Serg_1960
 
01.08.13
16:55
(58) Кстати там ошибки и другие есть - это не важно. Это ж болванка для НепонятноДляЧего. Но РАЗЛИЧНЫЕ - необязательно - ГДЕ всё равно оставит различные документы. Как-то слабо представляю, чтобы в одном документе было несколько строк по одному и тому же ОС с различным состоянием.

А с остальным сказанным тобой - согласен.
62 Aprobator
 
01.08.13
17:01
(61) да я просто применяемую мной методику описал. А как где свернет записи в выборке?
AdBlock убивает бесплатный контент. 1Сергей