Имя: Пароль:
1C
 
удаление записей из регистра бухгалтерии
,
0 razerw
 
07.10.14
10:37
Уважаемые программисты, подскажите пожалуйста правильно ли я удаляю запись из регистра хоз Бухгалтерии. Представленный код отрабатывает уже более часа, по оборотке по счету 10.11 вижу что записи то удаляются то снова появляются, прыгают суммы.


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

     КонецЦикла;

моя цель удалять конкретные записи
2 Maxus43
 
07.10.14
10:40
Вот ты выбрал остатки по всегму регистру, а удаляешь записи только у
      Набор.Отбор.Регистратор.Установить(Сылка);
только из проводок конкретного документа, причем по много много раз, короче смысла нет в коде
4 razerw
 
07.10.14
10:44
в запросе, я  отобрал номенклатуру с нулевыми остаткими, теперь по документу Операция (бух и нал) я ищу эти записи и удаляю
5 Зеленый пень
 
07.10.14
10:45
(0) Сравниваешь текущую запись набора, а удаляешь всегда запись с индексом 0 - и будет у тебя это продолжаться до тех пор, пока нужная запись не станет первой. Шикарно!
Ну и запись/чтение после каждого удаления - это ой.
6 razerw
 
07.10.14
10:47
(5) подскажи как определить точный индекс?
8 tridog
 
07.10.14
10:47
(0) Посмотрел приведенный код. Ушел плакать кровью.
9 Maxus43
 
07.10.14
10:48
Набор.Прочитать();
                Набор.Удалить(0);
                  Набор.Записать();
кто сказал что удаляешь нужную строку? удаляешь первую всегдв...

Это вот Набор.Прочитать(); возможно даже превращает цикл в бесконечный...
10 razerw
 
07.10.14
10:50
я тоже иногда плачу от того что пишу )))
11 Мыш
 
07.10.14
10:50
(6) Что удалить то хочешь? Все движения по определенной номенклатуре?
12 tridog
 
07.10.14
10:51
(10) Может пора остановиться?
13 Мыш
 
07.10.14
10:52
(12) На ошибках учатся, пусть движется )
14 razerw
 
07.10.14
10:55
(7) представленный тобой код не плох имеет шанс на успех, но Набор.Удалить(ЗаписьДляУдаления); так нельзя удалять, в виде аргумента требуется индекс строки
17 Мыш
 
07.10.14
10:57
(14) Ты неправ. Либо индекс, либо ссылку на запись.
18 razerw
 
07.10.14
10:58
я пробовал
{Форма.Форма.Форма(44)}: Ошибка при вызове метода контекста (Удалить)
          Набор.Удалить(ЗаписДляУдаления);
по причине:
Недопустимое значение параметра (параметр номер '1')
20 Мыш
 
07.10.14
10:59
(18) Тип значения не тот, значит.

Вариант синтаксиса: По объекту записи
Синтаксис:
Удалить(<Запись>)
Параметры:
<Запись> (обязательный)
Тип: >>>>>>>>>>>>> РегистрБухгалтерииЗапись.
Удаляемая запись.
21 razerw
 
07.10.14
10:59
Запрос = Новый Запрос;
     Запрос.Текст = "ВЫБРАТЬ
                    |    ХозрасчетныйОстатки.Счет,
                    |    ХозрасчетныйОстатки.Субконто1,
                    |    ХозрасчетныйОстатки.Субконто2,
                    |    ХозрасчетныйОстатки.Субконто3,
                    |    ХозрасчетныйОстатки.Организация КАК Организация,
                    |    ХозрасчетныйОстатки.СуммаОстаток КАК СуммаОстаток,
                    |    ХозрасчетныйОстатки.КоличествоОстаток
                    |ИЗ
                    |    РегистрБухгалтерии.Хозрасчетный.Остатки КАК ХозрасчетныйОстатки
                    |ГДЕ
                    |    ХозрасчетныйОстатки.Счет = &Счет
                    |    И ХозрасчетныйОстатки.СуммаОстаток = 0
                    |    И ХозрасчетныйОстатки.КоличествоОстаток < 0
                    |    И ХозрасчетныйОстатки.Организация = &Организация
                    |ИТОГИ ПО
                    |    Организация";
     Запрос.УстановитьПараметр("Счет", ПланыСчетов.Хозрасчетный.СпецоснасткаИСпецодеждаВЭксплуатации);
     Запрос.УстановитьПараметр("Организация", Орг);
     ВыборкаЗапроса = Запрос.Выполнить().Выбрать();
    
     Набор = РегистрыБухгалтерии.Хозрасчетный.СоздатьНаборЗаписей();
     Набор.Отбор.Регистратор.Установить(Сылка);
     Набор.Прочитать();
     МассивДляУдаления = Новый Массив;
    
     Пока ВыборкаЗапроса.Следующий() Цикл
    // изменение существующих записей


         Для Каждого Движение Из Набор Цикл
            Если ВыборкаЗапроса.Субконто1 = Движение.СубконтоКт.Номенклатура Тогда
                 МассивДляУдаления.Добавить(Движение);
            КонецЕсли;
         КонецЦикла;

     КонецЦикла;
    
     Для Каждого ЗаписДляУдаления Из МассивдляУдаления  Цикл
          Набор.Удалить(ЗаписДляУдаления);
     КонецЦикла;
    
     Набор.Записать();
23 razerw
 
07.10.14
11:06
спасибо всем