Имя: Пароль:
1C
1С v8
Запись набора записей БЕЗ замещения
0 rustamoff
 
01.12.16
11:55
Знаю, что в наборе записей есть метод Записать() и параметра Ложь этого метода должен добавлять записи, а не замещать.

В обработчике Проведения пишу код ниже, но записи просто пропадают. В чем проблема?

:
//{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
    // Данный фрагмент построен конструктором.
    // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!

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

    //}}__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
1 vyaz
 
01.12.16
11:58
Это модуль проведения, смотри свойства документа по очистке движений
2 h-sp
 
01.12.16
12:02
(0) может СписокНоменклатуры пустой?
3 rustamoff
 
01.12.16
12:02
Оставлял по умолчанию, менял на Удалять автоматически и Не удалять, результат тот же.
4 rustamoff
 
01.12.16
12:06
5 Вафель
 
01.12.16
12:06
Записывать движения автоматически?
6 Вафель
 
01.12.16
12:08
Хотя нет такой опции
7 rustamoff
 
01.12.16
12:09
Записывать выбранные установлено.
8 rustamoff
 
01.12.16
12:15
(2) нет, создаю документ с одной строкой - провожу, его же потом и перепровожу добавив еще одну строку в табличную часть, по идее должно быть две строки после перепроводки, но все движения просто стираются.
9 rustamoff
 
01.12.16
12:25
(8) три движения должно быть, конечно
10 lxs
 
01.12.16
12:44
пятница завтра, подождали бы немного
11 h-sp
 
01.12.16
12:59
(9) посмотрел твою базу. Всё нормально там у тебя. 2 движения появляются. Не 3. Всё четко. Ты наверно, не там смотришь движения, вот и не видишь.
12 rustamoff
 
01.12.16
14:13
(11) Это прогресс, если увидел, может я не там смотрю. Посмотри модуль объекта, может стоит "//" перед Движения.ОстаткиНаСкладах.Записать(Ложь);
13 rustamoff
 
01.12.16
14:43
(11) Это прогресс, если увидел, может я не там смотрю. Посмотри модуль объекта, может стоит "//" перед Движения.ОстаткиНаСкладах.Записать(Ложь);

Если нет, то вот что я делаю в этой базе:

1. Предполагается, что в документе номер 5 уже есть два движения в регистре ОстаткиНаСкладах

2. Пишу в модуле объекта Движения.ОстаткиНаСкладах.Записать(Ложь);

3. Открываю документ 5, добавляю еще одну строку в табличну часть и перепровожу

4. На этом этапе в  ОстаткиНаСкладах по документу 5 должно быть два старых движения плюс три новых

Что получаю на самом деле после 3 - стираются все движения документа номер 5
14 rustamoff
 
01.12.16
15:05
(10) А что по пятницам тут, волшебство? )
15 lera01
 
01.12.16
15:20
(3) С ума сойти. А если 10 раз документ перепроведешь, то 100500 записей будет?
16 lera01
 
01.12.16
15:20
(15) к (13)
(14) завтра тему подними - узнаешь.
17 DrShad
 
01.12.16
15:35
а у меня все получилось
18 DrShad
 
01.12.16
15:37
http://SSMaker.ru/7cf8d905/

правда как и говорили в (15) сколько раз проводишь, столько и добавляется
19 rustamoff
 
01.12.16
15:39
(17) Хмм

Ничего не менял в настройках?
20 DrShad
 
01.12.16
15:40
(19) в настройках ничего, а в коде придется поменять
21 DrShad
 
01.12.16
15:41
Движения.ОстаткиНаСкладах.Записывать = Истина;

вот эту строчку придется обрабатывать по условию, т.е. если нужно добавить движения, то ее не исполнять - во всех остальных случаях она нужна
22 DrShad
 
01.12.16
15:42
ну и Записывать(Ложь) аналогично
23 rustamoff
 
01.12.16
15:58
(21) Если .Записывать = Истина не исполнять, то стандартное значение его Ложь. По документации наборы записей у которых это свойство Ложь не могут быть записаны.

Покажи весь код модуля, что менял, пожалуйста.
24 DrShad
 
01.12.16
16:00
Процедура ОбработкаПроведения(Отказ, Режим)
    //{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
    // Данный фрагмент построен конструктором.
    // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!

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

    //}}__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
КонецПроцедуры
25 rustamoff
 
01.12.16
16:13
(24) Спасибо, работает.
26 DrShad
 
01.12.16
16:16
про (21), (22) не забудь
27 rustamoff
 
01.12.16
16:24
(26) Как понять тогда Синтакс-П?
28 rustamoff
 
01.12.16
16:25
описание Записывать в СП, точнее
29 Мимохожий Однако
 
01.12.16
16:29
(27) ОФФ: Без бутылки никак.
30 RomanYS
 
01.12.16
16:38
(28) а что там непонятного, при завершении проведения идет автоматическая запись всех наборов, у которых Записывать=Истина. При этом надо понимать, Набор.Записать() в не которых случаях набор очищает и последующая (автоматическая) запись приведет к результату (0)
31 DrShad
 
01.12.16
16:38
(28) т.е. это [если значение свойства метаданного документа "Запись движений при проведении" в Конфигураторе выставлено в "Записывать выбранные".
]

ты понял и нашел?
32 rustamoff
 
01.12.16
17:34
(31) У меня какие-то проблемы к кнопкой Отправить - через раз работает. В соседней ветке сказали менять браузер.
33 DrShad
 
01.12.16
17:35
возможно, я хром юзаю
34 rustamoff
 
01.12.16
17:39
(31) Записывать выбранные и стоит. Видимо очередность записи "автоматически" и запись явно через Записать() набора записей имеет значение. В литературе написано что "автоматическе" так же вызывает метод Записать() у выбранных наборов.

Не понятно, почему затираются наборы.
35 rustamoff
 
01.12.16
17:41
(30) В каких некоторых случаях?
36 rustamoff
 
01.12.16
17:48
(34) Вот из литературы:

При записи с проведением система автоматически запишет выбранные и незаписанные наборы записеи?, находящиеся в свои?стве Движения. Это еще один «сервис», обеспечиваемыи? свои?ством Движения. Отсюда следуют два важных вывода. Во-первых, если наборы записеи? необходимо записывать с добавлением, то это нужно выполнять в явном виде. т.к. при автоматическои? записи движении? они будут записаны с замещением.

Но не показано как зто - в явном виде.
37 rustamoff
 
01.12.16
17:54
(36) Если в "явном виде" это  Движения.ОстаткиНаСкладах.Записать(Ложь) тогда, судя по абзацу из книги, "автоматическая" запись не должна срабатывать.
38 rustamoff
 
02.12.16
10:29
(34) Автоматически записывает, оказывается, метод Записать() коллекции движений, который и реагирует на .Записывать=Истина
А вот метод набора записей Записать() никак не связан с .Записать=Истина.

Кроме того, после его (набора записей) записи происходит очистка сего набора, а далее обработка проведения видит .Записывать=Истина и записывает уже пустой набор поверх только что записанного.
39 rustamoff
 
02.12.16
10:34
(38) Поправка:  во второй строке должно быть конечно "никак не связан с .Записывать=Истина."
40 h-sp
 
02.12.16
10:43
(38) метод Записать() - это ручая запись, не автоматическая. Автоматически записывается после окончания КонецПроцедуры.

То есть если у вас есть Записать(), то вы должны понимать, что будет запись 2 раза, ручная ваша + автоматическая.
41 h-sp
 
02.12.16
10:45
(38) то есть вам надо написать

Записывать=Ложь

чтобы второй раз не записало.