Имя: Пароль:
1C
1С v8
Программное удаление записей из регистра накопления
0 Shmidt
 
24.04.14
09:54
Запросом получаю все записи регистра накопления. Выгружаю в таблицу значений. Перебираю таблицу в цикле. Если выполняется условие, то удаляем строку из ТЗ. Очищаем регистр и загружаем в него полученную таблицу значений. На выходе - нужные записи не удаляются. Что делаю не так?

Код прилагаю:
//УДАЛИТЬ ИЗ РН ВСЕ ЗАПИСИ ПО КОНТРАГЕНТУ
            ЗаписиКонтрагентов = Запрос.Выполнить().Выгрузить(); //Выборка из РН в ТЗ
            
            Для Каждого Строка из ЗаписиКонтрагентов Цикл
                Если Строка.Контрагент = Ссылка.Контрагент Тогда
                    ЗаписиКонтрагентов.Удалить(Строка);
                КонецЕсли;    
            КонецЦикла;    
            РегН.Очистить();
            РегН.Загрузить(ЗаписиКонтрагентов);
            
            Запись = РегН.Добавить();// В РН создаем запись с количеством отатков после бонуса
            Запись.Активность = Истина;
            Запись.ВидДвижения = ВидДвиженияНакопления.Приход;
            Запись.Период = Дата;
            Запись.Регистратор = Ссылка;
            Запись.Контрагент = Ссылка.Контрагент;
            Запись.Количество = КолОстаток;
            РегН.Записать();
1 Wobland
 
24.04.14
09:58
удаляешь из ТЗ
2 Shmidt
 
24.04.14
10:01
Ну да и потом хочу нужную мне ТЗ полностью загрузить в РН, только не удаляются нужные записи
3 Wobland
 
24.04.14
10:03
ТЗ после оскопления выглядит приятно?
4 Shmidt
 
24.04.14
10:04
Да нормально выглядит, как и до, только без лишних записей
5 Godofsin
 
24.04.14
10:04
(2) оущет
6 Shmidt
 
24.04.14
10:05
(5) ???
7 Maxus43
 
24.04.14
10:05
дык все РН подчинены регистратору, надо удалять записи в разрезе набора записей по регистратору.

Вобще задача более чем сомнительная... смысл какой?
8 МойКодУныл
 
24.04.14
10:06
(7) +1 А потом эти регистраторы перепроведутся...
9 МойКодУныл
 
24.04.14
10:07
Это, наверное, что-то из Большого брата. ТС работает в министерстве правды.
"Указаны не лица - удалить."
10 Wobland
 
24.04.14
10:08
(4) свезло
11 Aswed
 
24.04.14
10:10
(0) А ты как обход делаешь по ТЗ? Сверху вниз или рекурсивно?
От этого может не удалять.
12 Wobland
 
24.04.14
10:11
(11) рекурсивно по ТЗ? плин, вторая шокирующая новость за сегодня
13 Ndochp
 
24.04.14
10:11
(0) Про рождение регна кусок кода пропущен
14 Aswed
 
24.04.14
10:12
(12) А что не так? Чувак хочет ТЗ почистить и загрузить в РН. Я всегда когда так делаю рекурсивно по ТЗ чищу лишние строки.
15 Maxus43
 
24.04.14
10:13
(14) расшифруй что ты вкладываешь в понятие рекурсирвно по ТЗ, а то у Wobland разрыв шаблона будет
16 Wobland
 
24.04.14
10:13
(14) выход по какому условию?
17 Shmidt
 
24.04.14
10:14
Ну а как тогда реализовать задачу?

Документом реализация продается вода. Количество проданной воды учитывается в РН. При проведении реализации проверяется общее кол-во воды по контрагенту в РН и в ТЧ документа. Если количество >= 10 то небходимо в ТЧ добавить 1 бонусную воду (цена = 0) а в РН удалить все записи которые были по контрагенту и создать новую с количеством = (колРН + колТЧ)-10
18 Aswed
 
24.04.14
10:14
(15) Ну тоже что и автор.
(16) Учловие ТЗ стала кошерной.
19 Wobland
 
24.04.14
10:15
(17) извращенец
20 Wobland
 
24.04.14
10:15
(18) жажду детализации алгоритма
21 Aswed
 
24.04.14
10:15
(17) Не ну всё верно тогда делаешь.
ТЗ только рекурсивно чисть и всё взлетит.
22 Aswed
 
24.04.14
10:16
(20) ;)
23 МойКодУныл
 
24.04.14
10:16
(17) написать это в обработке проведения и перепровести документ?
24 Shmidt
 
24.04.14
10:16
(19) Не я, менеджеры
25 Shmidt
 
24.04.14
10:16
(23) ну как-то так
26 Aswed
 
24.04.14
10:19
(24) Ну так сделай рекурсию и всё взлетит.
28 Shmidt
 
24.04.14
10:20
(26) Я понял. Спасибо за совет, попробую
29 neo_matrix_123
 
24.04.14
10:22
(28) это фича;-).
30 neo_matrix_123
 
24.04.14
10:24
// Удаление лишних движений в регистре
            КоличествоЗаписей = НезавершенноеПроизводство.Количество();
            Попытка
                Для Индекс = 0 По КоличествоЗаписей - 1 Цикл
                    Запись = НезавершенноеПроизводство.Получить(КоличествоЗаписей - 1 - Индекс);
                    
                    Если Запись.СтатьяЗатрат = ГарантийноеОбслуживание И НЕ Запись.ВременнаяРазница = 0 Тогда
                        НезавершенноеПроизводство.Удалить(Запись);
                    КонецЕсли;
                КонецЦикла;
            Исключение
            КонецПопытки;
            
            // Формирование дополнительных движений
            Выборка = РезультатЗапроса.Выбрать();
            Пока Выборка.Следующий() Цикл
                
                // Приход
                НоваяЗапись = НезавершенноеПроизводство.ДобавитьПриход();
                ЗаполнитьЗначенияСвойств(НоваяЗапись, Выборка);
                
                НоваяЗапись.Затрата               = Неопределено;
                НоваяЗапись.ХарактеристикаЗатраты = Неопределено;
                НоваяЗапись.СерияЗатраты          = Неопределено;
                НоваяЗапись.Количество            = 0;
                НоваяЗапись.ВременнаяРазница      = -Выборка.ВременнаяРазница;
                
                // Расход
                НоваяЗапись = НезавершенноеПроизводство.ДобавитьРасход();
                ЗаполнитьЗначенияСвойств(НоваяЗапись, Выборка);
                
                НоваяЗапись.Стоимость        = Выборка.ВременнаяРазница;
                НоваяЗапись.ВременнаяРазница = 0;
                
            КонецЦикла;
31 Aswed
 
24.04.14
10:24
(28) )))))
Короче смотри как тебе надо поступить.

- В момент, ПЕРЕД ЗАПИСЬЮ ДОКУМЕНТА, проверяй сколько там воды куплено клиентом.
- Если выполняется твоё условие то добавляешь в ТЧ дополнительную воду.
- В месте где готовятся записи для регистра добавляешь в них записи с видом движения РАСХОД с количеством той воды которая у тебя было до документа
- Формируешь набор записей с твоим условием "(колРН + колТЧ)-10"

Это если я верно понял задачу тобой озвученную.

И почитай по регистры накопления.
Они подчинены РЕГИСТРАТОРУ и все движения в них записанные могут корректироваться ТОЛЬКО регистратором. Так что ты изначально не верно подошел к решению задачи.
32 kosts
 
24.04.14
10:27
(31) > могут корректироваться ТОЛЬКО регистратором
Не совсем так жестко, конечно, можно обработкой, если ставить отбор по регистратору. Но в остальном +100500
33 Aswed
 
24.04.14
10:28
(32) Ну обработкой то да. Но движения всё равно будут зарегистрированы регистратором.
34 Shmidt
 
24.04.14
10:36
(31) Спасибо! Все взлетело )))
Оптимист верит, что мы живем в лучшем из миров. Пессимист боится, что так оно и есть.