|
Программное удаление записей из регистра накопления | ☑ | ||
---|---|---|---|---|
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) Спасибо! Все взлетело )))
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |