Имя: Пароль:
1C
1С v8
Как очистить несколько записей из РБ?
0 Козинак
 
03.10.16
08:40
Добрый день, как очистить несколько записей по условию из движения регистра бухгалтерии? Вот так пытаюсь делать, но таким образом все записи очищаются.

    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    |   ХозрасчетныйОбороты.Регистратор.Ссылка КАК Ссылка
    |ИЗ
    |   РегистрБухгалтерии.Хозрасчетный.Обороты(&НачДата, &КонДата, Запись, , , Организация = &Организация, , ) КАК ХозрасчетныйОбороты
    |ГДЕ
    |   ТИПЗНАЧЕНИЯ(ХозрасчетныйОбороты.Регистратор) = ТИП(Документ.РегламентнаяОперация)
    |           И ХозрасчетныйОбороты.Регистратор.ВидОперации = ЗНАЧЕНИЕ(Перечисление.ВидыРегламентныхОпераций.ИмпортЗарплатыВодителейИМеханизаторов)";
    мКонГраница= новый Граница(КонецМесяца(СтруктураШапкиДокумента.Дата),ВидГраницы.Включая);
    Запрос.УстановитьПараметр("КонДата", мКонГраница);
    Запрос.УстановитьПараметр("НачДата", НачалоМесяца(СтруктураШапкиДокумента.Дата));
    Запрос.УстановитьПараметр("Организация", СтруктураШапкиДокумента.Организация);
    Результат1 = Запрос.Выполнить();
    Выборка1 = Результат1.Выбрать();    
    Пока Выборка1.Следующий() Цикл
        НаборЗаписей  = РегистрыБухгалтерии.Хозрасчетный.СоздатьНаборЗаписей();
        НаборЗаписей.Отбор.Регистратор.Значение = Выборка1.Ссылка;
        НаборЗаписей.Прочитать();
       Для Каждого Проводка ИЗ НаборЗаписей Цикл
          Если Проводка.СчетДт=ПланыСчетов.Хозрасчетный.НайтиПоКоду("20.01")Тогда
           НаборЗаписей.Очистить();
          КонецЕсли;
       КонецЦикла;
      НаборЗаписей.Записать();
    КонецЦикла;

1 jsmith
 
03.10.16
08:41
рукалицо
2 DrShad
 
03.10.16
08:42
НаборЗаписей.Отбор.Регистратор.УстановитьОтбор()
3 DrShad
 
03.10.16
08:42
набор записей выгружать в ТЗ, модифицировать и снова загрузить
4 KSergey1C
 
03.10.16
08:43
(3) С субконто такая халява не пройдет.

Надо те проводки которые не нужны выгрузить в список а потом обойти этот список удаляя проводки из набора записей.
5 zak555
 
03.10.16
08:44
(4) чего не пройдёт ?
6 zak555
 
03.10.16
08:45
Обходи с конца выборку и Удалить (Индекс)
7 DrShad
 
03.10.16
08:49
можно и не с конца, а удалять передавая строки вместо индексов
8 DrShad
 
03.10.16
08:50
(4) 100500 раз так делал - все работает
9 zak555
 
03.10.16
08:54
(7) точно?
запись идентифицируется номером
10 DrShad
 
03.10.16
08:54
(9) а ты проверь
11 zak555
 
03.10.16
08:55
(10) на планшете нет конфигуратора
12 Козинак
 
03.10.16
09:00
всем спасибо, буду пробовать
13 DrShad
 
03.10.16
09:02
(11) ща у себя открою и дам справку из СП
14 DrShad
 
03.10.16
09:05
ТаблицаЗначений (ValueTable)
Удалить (Delete)
Вариант синтаксиса: Удаление по объекту

Синтаксис:

Удалить(<Строка>)
Параметры:

<Строка> (обязательный)

Тип: СтрокаТаблицыЗначений.
Удаляемая строка таблицы значений.
Вариант синтаксиса: Удаление по индексу

Синтаксис:

Удалить(<Индекс>)
Параметры:

<Индекс> (обязательный)

Тип: Число.
Индекс строки, которую необходимо удалить.
Описание:

Удаляет строку таблицы значений.

Доступность:

Сервер, толстый клиент, внешнее соединение, мобильное приложение(сервер).
15 Рэйв
 
03.10.16
09:09
(0)Это кривая идея. Документ проведут заново и ты даже не узнаешь , что у тебя все обратно вернулось.
Делай режим проведения документа без ненужных тебе движений
16 KSergey1C
 
03.10.16
09:13
(15) если подписку сделает то все нормально будет.
17 ovrfox
 
03.10.16
09:26
В чем твоя ошибка
Во первых для удаления одной строки ты используешь команду
НаборЗаписей.Очистить(), который очищает всю таблицу значений, а не удаляет одну строку.
Во вторых, когда ты записываешь набор записей, он предварительно удалет все уже существующие записи по установленному отбору ( в твоем случае отбор установлен по конкретному документу)
Оптимальнее сделать так:
1. Создать массив
2. Вместо удаления в цикле - дополнить массив проводками для удаления
3. Добавить цикл по элементам массива и удалить их из набора записей
И только после этого записать набор записей.

Для обработки набора записей лучше его выгружать в Таблицу значений а в конце загружать назад.
18 zak555
 
03.10.16
09:34
(14) а теперь удалить для записи набора
19 zak555
 
03.10.16
09:40
(17) какой же бред
20 DrShad
 
03.10.16
10:00
(18) а я изначально говорил про выгрузку набора
21 zak555
 
03.10.16
10:02
(20) зачем промежуточные действия ?
22 DrShad
 
03.10.16
10:02
(21) чтобы не заморачиваться с индексами )))
23 zak555
 
03.10.16
10:07
(22) у набора удалить -- тоже можно передать запись, вместо индекса
24 DrShad
 
03.10.16
10:09
(23) возможно, но я привык через промежуточные танцы
25 DrShad
 
03.10.16
10:15
в принципе согласен что через сам набор покошернее будет, а то часто встречаются умельцы, у которых по документу идет более 10К записей и их выкидывать в ТЗ геммор
26 zak555
 
03.10.16
10:59
(24) бросай такую привычку

(25) вот именно