Имя: Пароль:
1C
 
Запись в регистр сведений подчинённый регистратору
0 Filkkore
 
02.12.21
14:16
Обычные Формы
Казалось бы, обыкновеннейшая задача, программно создать запись в Регистр Сведений, свой, но вот не записывает и всё. То ли лыжи не едут, то ли я дурачок...
Вот код:

Если Товары.Количество() > 0 Тогда
    НаборЗаписей = РегистрыСведений.ЦеныНоменклатурыПоследниеЗакупочные.СоздатьНаборЗаписей();
    НаборЗаписей.Отбор.Регистратор.Установить(Ссылка);
    Для Каждого Стр Из Товары Цикл
        НоваяЗапись = НаборЗаписей.Добавить();
        НоваяЗапись.Период = Дата;
        НоваяЗапись.Валюта = ВалютаДокумента;
        НоваяЗапись.Цена = Стр.Цена;
        НоваяЗапись.Номенклатура = Стр.Номенклатура;
        НоваяЗапись.Регистратор = Ссылка;
    КонецЦикла;
    НаборЗаписей.Записать();
КонецЕсли;

Отладкой проверил, все необходимые данные в НаборЗаписей присутствуют. Регистр подчиненный регистратору, периодичность по позиции регистратора.
1 Галахад
 
гуру
02.12.21
14:20
Ссылка случайно не объект?
2 Filkkore
 
02.12.21
14:22
(1) Нет, ДокументСсылка
3 Гипервизор
 
02.12.21
14:25
НаборЗаписей.Записать(Ложь);
4 Filkkore
 
02.12.21
14:27
(3) Тоже пробовал, не хочет
5 Filkkore
 
02.12.21
14:29
На всякий ещё прикладываю что в отладке https://a.radikal.ru/a42/2112/be/fbea2fb24e63.png
6 youalex
 
02.12.21
14:30
(0) в какой момент, в каком событии этот код ?
7 ДенисЧ
 
02.12.21
14:30
А регистратор явно установить?
8 youalex
 
02.12.21
14:31
Пиши как  Движения.ЦеныНоменклатурыПоследниеЗакупочные  + признак Записывать = Истина
9 DrShad
 
02.12.21
14:33
так может у тебя это в какой-то транзакции выполняется, которая сбрасывается?
10 Filkkore
 
02.12.21
14:34
(6) ОбработкаПроведения, под типовыми записями в регистр
11 Filkkore
 
02.12.21
14:35
(7) Что значит "Явно"? Я в отбор закинул и в реквизит Регистра
12 Filkkore
 
02.12.21
14:38
(8) Тоже попробовал, и в наборе записей ставить на Записывать = Истина, и вне.
13 Галахад
 
гуру
02.12.21
14:41
(10) Ну если в обработке проведения, то (8) + 1.
14 Filkkore
 
02.12.21
14:47
Ну вот допустим так сделал:

Движения.ЦеныНоменклатурыПоследниеЗакупочные.Записывать = Истина;
Если Товары.Количество() > 0 Тогда
    НаборЗаписей = РегистрыСведений.ЦеныНоменклатурыПоследниеЗакупочные.СоздатьНаборЗаписей();
    НаборЗаписей.Записывать = Истина;
    НаборЗаписей.Отбор.Регистратор.Установить(Ссылка);
    Для Каждого Стр Из Товары Цикл
        НоваяЗапись = НаборЗаписей.Добавить();
        НоваяЗапись.Период = Дата;
        НоваяЗапись.Валюта = ВалютаДокумента;
        НоваяЗапись.Цена = Стр.Цена;
        НоваяЗапись.Номенклатура = Стр.Номенклатура;
        НоваяЗапись.Регистратор = Ссылка;
    КонецЦикла;
    НаборЗаписей.Записать();
КонецЕсли;

Всё равно не работает) У меня по моему уже крыша течёт, ибо уверен что дело в чём-то простом и тупом
15 Гипервизор
 
02.12.21
14:49
(14) Ну так-то если есть Записывать = Истина, то Записать() не надо.
16 Галахад
 
гуру
02.12.21
14:50
Э-э-э.

НоваяЗапись = Движения.ЦеныНоменклатурыПоследниеЗакупочные.Добавить();
17 1Сергей
 
02.12.21
14:52
(14) Перечитай (8)
18 hhhh
 
02.12.21
14:54
(14) Движения.ЦеныНоменклатурыПоследниеЗакупочные.Записывать = Истина; тогда не надо.

оно же чистит в конце набор. Записывает пустой.
19 Filkkore
 
02.12.21
14:56
(18) (17) (15) (16)  Всё, понял, спасибо большое всем кто помог. В общем в ОбработкеПроведения лучше так записывать, а то я везде один и тот же способ с набором юзаю.
20 Гипервизор
 
02.12.21
14:59
(19) Конструктор движений пробовали?
21 Filkkore
 
02.12.21
15:04
(20) База переписанная, конструктором не вариант
22 mistеr
 
02.12.21
15:22
(10) Тогда почему не НаборЗаписей = Движения.ЦеныНоменклатурыПоследниеЗакупочные?
23 1Сергей
 
02.12.21
15:23
24 Filkkore
 
02.12.21
15:26
(23) Написал уже, что база сильно переписана.
25 Filkkore
 
02.12.21
15:26
(22) Подсказали уже, так и делаю.
26 mistеr
 
02.12.21
15:32
(19) > я везде один и тот же способ с набором юзаю

Просто интересно, откуда это? Из какого-то "учебника"?
27 ptiz
 
02.12.21
15:34
(0) В модуле проведения уже есть объект НаборЗаписей - это Движения.ИмяРегистра. А ты создаешь отдельный объект через СоздатьНаборЗаписей(). Игра одновременно с двумя объектами ни к чему хорошему не приведет.
28 Filkkore
 
02.12.21
15:36
(26) Да отовсюду, в инете куча сатей где рассматривается именно этот способ, вот подхватил и юзал, причём всегда работало...
29 mistеr
 
02.12.21
15:39
(28) То есть до первоисточников так и не добрался. Понятно.
30 Малыш Джон
 
02.12.21
15:40
Странно. Способ с отдельным набором записей - рабочий. Другое дело, что лучше через движения документа данные вносить. Но способ из (0) рабочий.
31 Гипервизор
 
02.12.21
15:40
(24) Я не понимаю, как переписанная база мешает использовать конструктор и допилить выданную им "рыбу"? Конструктор сотрёт код в обработке проведения? Ну так предварительно скопируйте его куда-нибудь.
32 ptiz
 
02.12.21
15:42
(28) Покажи пример такой статьи
33 Filkkore
 
02.12.21
15:46
(32) https://helpf.pro/faq/view/884.html
https://forum.infostart.ru/forum9/topic127497/
Первые две в выдаче поисковика
34 Filkkore
 
02.12.21
15:47
(30) Вот и я о том же, он везде и всегда работал, тут же не хотел...
35 Filkkore
 
02.12.21
15:49
Ну я всегда делал способом из (0), привычка, а тут что-то навернулось и у меня даже мысли не возникло конструктором воспользоваться.
36 runoff_runoff
 
02.12.21
15:49
(35) нужно делать не как всегда, а как в типовых..
37 Малыш Джон
 
02.12.21
16:16
(36) "Нужно делать так как нужно. А как ненужно делать ненужно."
38 Гипервизор
 
02.12.21
16:21
(36) Ну совсем всё и всегда как в типовых не стоит делать. Далеко не эталон.
39 youalex
 
02.12.21
16:22
(30) рабочий, но тогда запись "движения." надо  отключать.
40 Dmitrii
 
гуру
02.12.21
16:44
(30) >> способ из (0) рабочий.

Не обязательно.
Он же всю обработку проведения не показал нам.
Стопудово у него там где-нибудь есть что-нибудь типа Движения.Записать(). И эта строчка обнуляет все его действия.

В транзакции проведения что-то где-то записали в какой-то там регистр.
Это вовсе не значит, что в объекте Движения.ЦеныНоменклатурыПоследниеЗакупочные само по себе каким-то чудом должно что-то появиться.
Чтобы там что-то появилось, надо это набор записей прочитать после того как он сделал НаборЗаписей.Записать().
А т.к. он этого не делает (не читает Движения.ЦеныНоменклатурыПоследниеЗакупочные), то если он где-то выполняет метод Движения.Записать(), в базу записывается девственно чистый набор записей из коллекции движений Движения.ЦеныНоменклатурыПоследниеЗакупочные.
Поэтому принудительная запись движений зло. А у документа лучше использовать Запись движений при проведении "Записывать выбранные".
41 1Сергей
 
03.12.21
11:03
(24) это никак не связано
42 ptiz
 
03.12.21
11:11
(33) Ёлы-палы. Ты отличаешь статью "Как добавить записи в регистр сведений, подчиненный регистратору?" от статьи, где разбирается обработка проведения? Эти статьи - для кода, который выполняется НЕ в модуле документа, формирующего движения по этим регистрам.
43 Dmitrii
 
гуру
03.12.21
11:14
(42) У автора нет представления о базовых понятиях. Он пытается программировать по чужим примерам, не имея понятия о том когда и почему эти примеры применять.