|
Запись набора записей БЕЗ замещения | ☑ | ||
---|---|---|---|---|
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) то есть вам надо написать
Записывать=Ложь чтобы второй раз не записало. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |