Имя: Пароль:
1C
 
1c8 не пишет в регистр накопления
0 Fr1eNd
 
22.11.10
15:35
Столкнулся со странной проблемой, дописывая простой управленческий учёт, не пишет регистр накопления (обороты)
причём в одной конфигурации работает как часы, а в другой всё тоже самое не хочет, ниже код

            НовЗапись = РегистрыНакопления.ууДоходыРасходы.СоздатьНаборЗаписей();
            НовЗапись.Отбор.Регистратор.Установить(ЭтотОбъект.Ссылка);
            Движение = НовЗапись.Добавить();
            Движение.Период = ЭтотОбъект.Ссылка.Дата;
            Движение.СтатьяДоходовРасходовУУ = ЭтотОбъект.Ссылка.ууСтатьяДоходовРасходов;
            Движение.Сумма = ЭтотОбъект.Ссылка.СуммаДокумента;
            НовЗапись.Записать();

причём никаких ошибок не выдаёт, в отладчики всё заполняет ни на что не ругается, конфигурация БП 2.0, вчём может быть затык?
1 Живой Ископаемый
 
22.11.10
15:36
как понял что не пишет? :)
2 Fr1eNd
 
22.11.10
15:36
нет записей в регистре, отчёты не формируются))
3 КМ155
 
22.11.10
15:39
(0) писать то пишет, но без активности
4 НЕА123
 
22.11.10
15:41
(0)
подчиненных спроси.
ЗЫ.
это я в личку глянул.
5 denis_jj
 
22.11.10
15:45
1. А что у вас с режимом совместимости 8.1 и 8.2 ?
2. В какой процедуре этот код?
3. Откуда происходит проведение (из формы документа, из формы списка, програмно или ещё как)?
6 Шапокляк
 
22.11.10
15:47
(0) Может какой добрый человек отключил использование итогов, а потом забыл включить?
7 Живой Ископаемый
 
22.11.10
15:48
2(6) это не должно мешать записи записей РН.
8 Defender aka LINN
 
22.11.10
15:49
(0) Пипец. И где вас так учили движения документа делать?
9 DrShad
 
22.11.10
15:53
(0) вот же сволочь какая! это ж надо
10 Широкий
 
22.11.10
15:59
(0) Это в обработке проведения что ли?
11 Шапокляк
 
22.11.10
16:00
(7) см (3)
12 Maxus43
 
22.11.10
16:01
Активность по умолчанию истина, не?
13 Живой Ископаемый
 
22.11.10
16:01
2(11) см. (2) - говорит нет записей в регистре... Правда может он не так смотрит как я бы смотрел...
14 redbull
 
22.11.10
16:02
Движение.Регистратор = Ссылка?
15 Шапокляк
 
22.11.10
16:04
(13) да... наверно КМ155 его подчиненный? Сложно у них все в этом отделе продаж.
16 redbull
 
22.11.10
16:05
ты не делаешь запись документа?
Потому, что у документа есть Движения и при записи он затирает все записи в БД тем что у него в свойстве Движения
17 Maxus43
 
22.11.10
16:05
(14) +1
18 DrShad
 
22.11.10
16:08
(14) садись два
19 Serginio1
 
22.11.10
16:14
Мне нужно было перепроводить только по одному регистру, поэтому должна была отдельно работатьУ меня так работает

Процедура УстановитьДопЗначенияРегистров(Тз,Регистратор,ВидДвижения="") Экспорт
   Тз.ЗаполнитьЗначения(Регистратор.Дата,"Период");
   Тз.ЗаполнитьЗначения(Регистратор,"Регистратор");
   Тз.ЗаполнитьЗначения(1,"Активность");
   Если ВидДвижения="" Тогда
       Тз.ЗаполнитьЗначения(ВидДвиженияНакопления.Расход,"ВидДвижения");
   Иначе
       Тз.ЗаполнитьЗначения(ВидДвижения,"ВидДвижения");
   КонецЕсли;
   Тз.ЗаполнитьЗначения(Регистратор.МоментВремени(),"МоментВремени");
   
КонецПроцедуры

УстановитьДопЗначенияРегистров(Тз,ДокСсылка);
НаборЗаписей=РегистрыНакопления.акПродажи.СоздатьНаборЗаписей();
 НаборЗаписей.Отбор.регистратор.Установить(ДокСсылка);
 НаборЗаписей.Загрузить(Тз);
 НаборЗаписей.Записать();
20 redbull
 
22.11.10
16:17
(18) два-то за что?
21 Fr1eNd
 
22.11.10
16:20
(8) про свойство движения знаю, вызов происходит из обработки проведения, в другой базе код нормально отрабатывает и всё пишет

(12) Активность по умолчанию истина

(14)садись 2
(16) Движения здесь не при чём
22 Fr1eNd
 
22.11.10
16:22
(19) ты тоже самое делаешь только из таблице значений
23 Fr1eNd
 
22.11.10
16:24
(13) и как бы ты смотрел запросом к базе
24 Maxus43
 
22.11.10
16:36
Резюмируем - Чудес не бывает (с)
25 luckyluke
 
22.11.10
16:37
(21) вопрос в другом, нахрена ты делаешь НаборЗаписей, если можно юзать движения.
(21) отладчик то запускал? У тебя этот код хоть выполняется?
(0) почему десь "Движение.Сумма = ЭтотОбъект.Ссылка.СуммаДокумента;" надо обращаться через ссылку к реквизиту объекта? Почему нельзя у объекта его взять?
26 Maxus43
 
22.11.10
16:38
(25) Хоть и криво, но работать то должно
27 Живой Ископаемый
 
22.11.10
16:39
2(23) не смотрел бы запросом к базе.. смотрел бы через списко РН с отбором.
28 luckyluke
 
22.11.10
16:44
(26) поэтому и спрашиваю, выполняется ли у него этот код, мог выдрать код и сюда скопипастить, а перед кодом условие не выполняется...
а по поводу обращения через ссылку ради праздного любопытства.
29 Serginio1
 
22.11.10
16:47
(22) не совсем смотри УстановитьДопЗначенияРегистров
30 Fr1eNd
 
22.11.10
16:50
Ещё раз повторяю в другой базе с аналогичной конфигурацией всё работает
(27) и так конечно тоже смотрел
этот код отладочный просто что бы проверить идёт ли запись в регистр потом код использовался бы в Подписки на событие там как раз и нужно и Набор записей и  ссылка на объект
(28) если бы код был просто выдран отладчик бы не пускал бы в него при не выполенние условия
+ условий никаких нет код просто добавлен в конце обработки проведения
31 Fr1eNd
 
22.11.10
16:51
(29) щас гляну не заметил(
32 Maxus43
 
22.11.10
16:52
(30) регистр подчинён этому регистратору?
Прочитать() после отбора ещё на всякий
33 Живой Ископаемый
 
22.11.10
16:54
2(32) да ну, зачем? Он просто устанавливает отбор чтобы движения привязывались к регистратору. Читать он не хочет
34 Живой Ископаемый
 
22.11.10
16:54
а вот если он регистр "не подчинен" то да, может иметь значение
35 Maxus43
 
22.11.10
16:55
(33) Лучше перебдеть чем недобдеть)
36 luckyluke
 
22.11.10
16:56
(30) запусти в режиме отладки, поставь точку останова и проверь проходит ли код эти строки или нет.
37 Serginio1
 
22.11.10
17:04
(31) Для  оборотов немного другой набор дополнительных полей. Смотри какие в Тз есть поля. Обычно
РегистрыНакопления.ууДоходыРасходы.СоздатьНаборЗаписей().СкопироватьКолонки()
38 denis_jj
 
22.11.10
17:11
Думаю дело в следующем:
Если этот код в ОбработкаПроведения() то набор создается и записывается верно, но при выходе из процедуры происходит неявная запись набора из коллекции Движения документа. А в этом наборе пусто, поэтому то, что было записано кодом просто затирается пустым набором.
39 Fr1eNd
 
22.11.10
17:16
(32)(37)(38) Благодарю, попробую.

Живой Ископаемый скорей Живой ископаемый жирный тролль)
40 luckyluke
 
22.11.10
17:17
(38) ну да, скорей всего так и есть...
41 Fr1eNd
 
22.11.10
17:32
Движение = Движения.ууДоходыРасходы.Добавить(); Движение.Регистратор = ЭтотОбъект.Ссылка;
Движение.Период = ЭтотОбъект.Ссылка.Дата;
Движение.СтатьяДоходовРасходовУУ = ЭтотОбъект.Ссылка.ууСтатьяДоходовРасходов;
Движение.Сумма = ЭтотОбъект.Ссылка.СуммаДокумента;
Движения.Записать();

вот так проканало, теперь другой вопрос, как сделать это же в подписки на событие
42 Живой Ископаемый
 
22.11.10
17:34
на какое событие будешь вешать?

Если на проведение, то почти также:
Движение = Источник.Движения.ууДоходыРасходы.Добавить();
Движение.Регистратор = Источник.Ссылка;
43 denis_jj
 
22.11.10
17:36
получить у объекта набор через Движения, заполнить и всё...
44 Fr1eNd
 
22.11.10
17:37
(42) уже так и сделал

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

       Иначе
            Предупреждение("Не заполнена статья Управленческого Учёта, заполните статью или отключите проведение по Управленческому Учёту!",,"Ошибка");
            Отказ = Истина;
            Возврат;
       КонецЕсли;
    Иначе
       Возврат;
    КонецЕсли;
45 Fr1eNd
 
22.11.10
17:39
хотя в другой базе набор записей работает, странно, что сдесь не проканало))))

Всем спасибо за помощь

p.s    Живой Ископаемый Не Троль))))
46 denis_jj
 
22.11.10
17:43
алгоритм записи наборов может меняться в зависимости от режима совместимости 81/82, настроек документа и пр. я у вас спрашивал в (5). Если ответите, смогу подробнее объяснить особенности.
47 Fr1eNd
 
22.11.10
17:52
(46) отвечаю типовая БП 2.0
1. режим совместимости не используется;
2. Код в обработке проведения или в подписки на событие Обработкапроведения)
3. Обработка проведения - модуль объекта

Если можете пояснить особенности очень пригодиться в дальнейшей работе, вероятно не только мне.
48 denis_jj
 
22.11.10
21:47
Особенности 8.2 в следующем:
1. У наборов записей появилось свойство Записывать. Если набор после выхода из процедуры проведения необходимо записать, это свойство должно быть установлено в Истина.
2. Записи в наборах нужно очищать принудительно, используя метод Очистить(). Связано это с тем, что при проведении из формы толстого клиента Объект создается при открытии формы и набор движений будет накапливать те записи, которые в контексте формы будут созданы. Т.е. если несколько раз перепровести документ в форме и не очистить набор - записи задублируются. Если же перепроводить из формы тонкого клиента или из формы списка, то набор будет очищаться атоматически, т.к. при таких режимах проведения Объект и его коллекция движений создается неявно в момент проведения.
3. Запросы в контексте процедуры проведения учитывают записи, которые записаны в в этой процедуре. Другими словами, если вы использовали метод Записать для набора из коллекции Движения, а потом получаете данные запросом, то то что вы записали уже есть в базе данных и вы будете получать это вашим запросом. После записи набора флаг Записывать автоматически сбрасывается и если вы вносите изменения, которые должны быть записаны, то следует снова установить этот флаг в Истина.
4. При получении данных для контроля остатков запросами необходимо явно накладывать блокировки на те ресурсы, чьи остатки вы контролируете и будете изменять в процессе проведения. Связано это с тем, что в некоторых ситуациях при параллельной работе можно получить не верные данные.

Вот вроде как-то так. Может что-то забыл.
49 Fr1eNd
 
22.11.10
22:05
спасибо, знал только про флаг Записывать