|
Удаление строк в таблице значений по условию? | ☑ | ||
---|---|---|---|---|
0
aramisov
27.11.14
✎
11:56
|
Делаю цикл с конца как многие рекомендуют чтобы не было пропусков.
вопрос почему ошибка валиться {Форма.Форма.Форма(301)}: Ошибка при вызове метода контекста (Получить) Стр = ПартииТоваровНаСкладахНовые.Получить(КоличествоСтрок - Счетчик); по причине: Значение индекса выходит за границы диапазона вот кусок кода ДвиженияПартииТоваровНаСкладах.Прочитать(); ПартииТоваровНаСкладахНовые = ДвиженияПартииТоваровНаСкладах.Выгрузить(); КоличествоСтрок = ПартииТоваровНаСкладахНовые.Количество(); Для Счетчик = 0 По КоличествоСтрок Цикл Стр = ПартииТоваровНаСкладахНовые.Получить(КоличествоСтрок - Счетчик); Номенклатура = Стр.Номенклатура; СерияНоменклатуры = Стр.СерияНоменклатуры; ХарактеристикаНоменклатуры = Стр.ХарактеристикаНоменклатуры; Фильтр = Новый Структура(); Фильтр.Вставить("Номенклатура,СерияНоменклатуры,ХарактеристикаНоменклатуры" , Номенклатура,СерияНоменклатуры,ХарактеристикаНоменклатуры); НайденыеСтроки = НужнаяНоменклатура.НайтиСтроки(Фильтр); Если НайденыеСтроки.Количество() > 0 Тогда ПартииТоваровНаСкладахНовые.Удалить(КоличествоСтрок - Счетчик); КонецЕсли; КонецЦикла; |
|||
1
mikecool
27.11.14
✎
11:57
|
1) НайтиСтроки
2) удалить строки из первого массива |
|||
2
Wobland
27.11.14
✎
11:57
|
с чего ты делаешь цикл?
|
|||
3
Defender aka LINN
27.11.14
✎
11:59
|
(0) Потому что кто-то даже не удосужился почитать, что делает метод "Получить"
|
|||
4
Рэйв
27.11.14
✎
12:02
|
(0)Двоечник.
КоличествоСтрок всегда на 1 больше максимального индекса. |
|||
5
Sammo
27.11.14
✎
12:07
|
Помимо вышесказанного. Пример.
5 строк. Счетчик будет от 0 до 5. Так. Т.е. 6 значений, а строк 5. Это раз. И два Первый проход. 5-0. Будем удалять 5 строку. Какой у нее индекс? |
|||
6
Timon1405
27.11.14
✎
12:12
|
(0)
1) выкинуть свой цикл 2) <расшифровка совета из (1)>Читать СП про методы НайтиСтроки и Удалить. 3) применить полученные от СП сокровенные знания |
|||
7
Крошка Ру
27.11.14
✎
12:19
|
(0) У меня такое ощущение, что тебе советовали несколько человек и каждый свое, а ты решил все механически в одну кучу свалить, не разбирая, как же это работает. Тут и НайтиСтроки(), и цикл с конца, даже связь Счетчика и индекса строки не удосужился проверить.
|
|||
8
DrZombi
гуру
27.11.14
✎
12:26
|
(0) Зачем ты используешь "НайтиСтроки(Фильтр)"?
Когда все ровно ты удаляешь только одну запись. (вернее планируешь) И при этом удаляешь черт знает что :) |
|||
9
DrZombi
гуру
27.11.14
✎
12:29
|
(0) Что такое "ПартииТоваровНаСкладахНовые"?
Ты либо полный код выкладывай, либо сам пиши, что откуда берется :) ... Код в топку, телепатия не работает :) |
|||
10
aramisov
27.11.14
✎
12:33
|
(8) НайденыеСтроки = НужнаяНоменклатура.НайтиСтроки(Фильтр);
это таблица значений в которой проверяю есть ли данная номенклатура или нет если есть строчку в ПартииТоваровНаСкладахНовые удаляю вот текст самой процедуры, пока не доделаный Запрос = Новый Запрос; Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц; Запрос.Текст = "ВЫБРАТЬ | Товары.Номенклатура, | Товары.СерияНоменклатуры, | Товары.ХарактеристикаНоменклатуры |ПОМЕСТИТЬ ТабТовары |ИЗ | &Товары КАК Товары |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ТабТовары.Номенклатура, | ТабТовары.СерияНоменклатуры, | ТабТовары.ХарактеристикаНоменклатуры |ИЗ | ТабТовары КАК ТабТовары"; Запрос.УстановитьПараметр("Товары",Товары); НужнаяНоменклатура = Запрос.Выполнить().Выгрузить(); Запрос.Текст = "ВЫБРАТЬ | ПартииТоваровНаСкладахОбороты.Регистратор, | ПартииТоваровНаСкладахОбороты.Регистратор.МоментВремени КАК РегистраторМоментВремени, | СУММА(ПартииТоваровНаСкладахОбороты.КоличествоОборот) КАК КоличествоОборот |ИЗ | РегистрНакопления.ПартииТоваровНаСкладах.Обороты( | &НачПериод, | &КонПериод, | Запись, | (Номенклатура, СерияНоменклатуры, ХарактеристикаНоменклатуры) В | (ВЫБРАТЬ | ТабТовары.Номенклатура, | ТабТовары.СерияНоменклатуры, | ТабТовары.ХарактеристикаНоменклатуры | ИЗ | ТабТовары КАК ТабТовары) | И Организация = &Организация) КАК ПартииТоваровНаСкладахОбороты |ГДЕ | НЕ ПартииТоваровНаСкладахОбороты.Регистратор ССЫЛКА Документ.ПоступлениеТоваровУслуг | |СГРУППИРОВАТЬ ПО | ПартииТоваровНаСкладахОбороты.Регистратор, | ПартииТоваровНаСкладахОбороты.Регистратор.МоментВремени | |УПОРЯДОЧИТЬ ПО | РегистраторМоментВремени"; Запрос.УстановитьПараметр("Товары",Товары); Запрос.УстановитьПараметр("Организация",НачалоПроведения.Организация); Запрос.УстановитьПараметр("НачПериод",НачалоПроведения.МоментВремени()); Запрос.УстановитьПараметр("КонПериод",ТекущаяДата()); Результат = Запрос.Выполнить(); ПартииТоваровНаСкладах = Новый ТаблицаЗначений; ПродажиСебестоимость = Новый ТаблицаЗначений; ОтражатьВУправленческомУчете = ИСТИНА; ОтражатьВБухгалтерскомУчете = ЛОЖЬ; //Определим учетную политику СтруктраУчетов = Новый Структура(); СтруктраУчетов.Вставить("Упр", ИСТИНА); СтруктраУчетов.Вставить("Бух", ЛОЖЬ); СтруктраУчетов.Вставить("Нал", ЛОЖЬ); Упр = ИСТИНА; Бух = ЛОЖЬ; Останавливаться = ЛОЖЬ; ПроведениеОстановлено = Ложь; ОбработаноСтрок = 0; ИспользуетсяРасширеннаяАналитикаУчета = ЛОЖЬ; ТаблицаУчетныхПолитик = Новый ТаблицаЗначений(); ТаблицаУчетныхПолитик.Колонки.Добавить("Организация", Новый ОписаниеТипов("СправочникСсылка.Организации")); ТаблицаУчетныхПолитик.Колонки.Добавить("ВидУчета", Новый ОписаниеТипов("Строка",,Новый КвалификаторыСтроки(3))); ТаблицаУчетныхПолитик.Колонки.Добавить("УчетнаяПолитика"); ДатаАктуальностиУчетнойПолитики = Дата("00010101"); ФормироватьПроводки = ЛОЖЬ; Выборка = Результат.Выбрать(); Пока Выборка.Следующий() Цикл Сообщить(Выборка.Регистратор); КоличествоСтрокВДокументе = 0; СтруктураНаборовЗаписей = Неопределено; # Если Сервер Тогда // При выполнении на сервере наборы записей создаем один раз СтруктураНаборовЗаписей = Новый Структура; СтруктураНаборовЗаписей.Вставить("ЕстьСтрокиОтражатьВУправленческомУчете" , ИСТИНА); СтруктураНаборовЗаписей.Вставить("ЕстьСтрокиОтражатьВБухгалтерскомУчете" , ЛОЖЬ); СтруктураНаборовЗаписей.Вставить("ЕстьСтрокиОтражатьВНалоговомУчете" , ЛОЖЬ); СтруктураНаборовЗаписей.Вставить("ЕстьСтрокиОтражатьВМеждународномУчете" , ЛОЖЬ); УправлениеЗапасамиПартионныйУчет.СоздатьНаборыЗаписей(СтруктураНаборовЗаписей); СтруктураНаборовЗаписей.Удалить("ЕстьСтрокиОтражатьВУправленческомУчете"); СтруктураНаборовЗаписей.Удалить("ЕстьСтрокиОтражатьВБухгалтерскомУчете"); СтруктураНаборовЗаписей.Удалить("ЕстьСтрокиОтражатьВНалоговомУчете"); СтруктураНаборовЗаписей.Удалить("ЕстьСтрокиОтражатьВМеждународномУчете"); # КонецЕсли ОбъектДокумента = Выборка.Регистратор.ПолучитьОбъект(); ДокументСсылка = Выборка.Регистратор; ДатаДокумента = ДокументСсылка.Дата; //Копируем Регистр ПартииТоваровНаСкладах ДвиженияПартииТоваровНаСкладах = ОбъектДокумента.Движения.ПартииТоваровНаСкладах; ДвиженияПартииТоваровНаСкладах.Прочитать(); ПартииТоваровНаСкладах = ДвиженияПартииТоваровНаСкладах.Выгрузить(); Попытка //Копируем Регистр ПродажиСебестоимость ДвиженияПродажиСебестоимость = ОбъектДокумента.Движения.ПродажиСебестоимость; ДвиженияПродажиСебестоимость.Прочитать(); ПродажиСебестоимость = ДвиженияПродажиСебестоимость.Выгрузить(); Исключение КонецПопытки; УчетнаяПолитика = ПолучитьУчетнуюПолитикуИзКэша(ДатаДокумента, ДокументСсылка.Организация, СтруктраУчетов, ТаблицаУчетныхПолитик, ДатаАктуальностиУчетнойПолитики); Если (ТипЗнч(ДокументСсылка) = Тип("ДокументСсылка.КорректировкаСтоимостиСписанияТоваров")) ИЛИ (ТипЗнч(ДокументСсылка) = Тип("ДокументСсылка.РасчетСебестоимостиВыпуска")) Тогда Период = КонецМесяца(ДокументСсылка.ПериодРегистрации); ДокументМоментВремени = Новый МоментВремени(Период, ДокументСсылка); Иначе ДокументМоментВремени = Новый МоментВремени(ДокументСсылка.Дата, ДокументСсылка); КонецЕсли; Если ТипЗнч(ДокументСсылка) = Тип("ДокументСсылка.ЗакрытиеЗаказовПокупателей") Тогда #Если Клиент Тогда Состояние("Проведение документа " + ДокументСсылка); #КонецЕсли ТаблицаСписания = ПолучитьТаблицуСтрокЗакрытиеЗаказовПокупателей(ДокументСсылка, ДокументСсылка.Организация, ОтражатьВУправленческомУчете, ОтражатьВБухгалтерскомУчете, ОтражатьВБухгалтерскомУчете); Если ТаблицаСписания.Количество() <> 0 Тогда // Движение партий товаров по документу УправлениеЗапасамиПартионныйУчет.ДвижениеПартийТоваров (ДокументСсылка, ТаблицаСписания, КоличествоСтрокВДокументе, Упр, Бух, Бух, Останавливаться, ПроведениеОстановлено, , Истина, СтруктураНаборовЗаписей, ФормироватьПроводки, Бух, УчетнаяПолитика); Если Останавливаться И ПроведениеОстановлено тогда ОтменитьТранзакцию(); Возврат; КонецЕсли; КонецЕсли; ИначеЕсли ТипЗнч(ДокументСсылка) = Тип("ДокументСсылка.ПринятиеКУчетуОС") И (Бух ИЛИ Упр) Тогда // Принятие к учету ОС должно перепроводиться целиком по тем видам учета, // которые установлены и в документе и в обработке #Если Клиент Тогда Состояние("Проведение документа " + ДокументСсылка); #КонецЕсли Если ДокументСсылка.ВидОперации = Перечисления.ВидыОперацийПринятияКУчетуОсновныхСредств.Оборудование тогда ДокументОбъект = ДокументСсылка.ПолучитьОбъект(); #Если Клиент Тогда Состояние("Обработано "+ОбработаноСтрок+". фиксация транзакции."); #КонецЕсли ЗафиксироватьТранзакцию(); НачатьТранзакцию(); ОбработаноСтрок = 0; Попытка ДокументОбъект.Заблокировать(); ДокументОбъект.СтруктураВидовУчета = Новый Структура; ДокументОбъект.СтруктураВидовУчета.Вставить("ОтражатьВУправленческомУчете",ОтражатьВУправленческомУчете); ДокументОбъект.СтруктураВидовУчета.Вставить("ОтражатьВБухгалтерскомУчете",ОтражатьВБухгалтерскомУчете); ДокументОбъект.СтруктураВидовУчета.Вставить("ОтражатьВНалоговомУчете",ОтражатьВБухгалтерскомУчете); ДокументОбъект.СтруктураВидовУчета.Вставить("ОтражатьВНалоговомУчетеУСН",ОтражатьВБухгалтерскомУчете); ДокументОбъект.СтруктураВидовУчета.Вставить("ФормироватьПроводки",ФормироватьПроводки); ДокументОбъект.СтруктураВидовУчета.Вставить("СписыватьПартииНДС",ОтражатьВБухгалтерскомУчете); ДокументОбъект.Останавливаться = Останавливаться; ДокументОбъект.ПроведениеОстановлено = Ложь; ДокументОбъект.Записать(РежимЗаписиДокумента.Проведение,РежимПроведенияДокумента.Неоперативный); ДокументОбъект.Разблокировать(); КоличествоСтрокВДокументе = ДокументОбъект.КоличествоСтрокВДокументе; Если Останавливаться И ДокументОбъект.ПроведениеОстановлено тогда ОтменитьТранзакцию(); Возврат; КонецЕсли; Сообщить("Перепроведен документ " + ДокументСсылка+ ". Возможно изменение стоимости ОС."); Исключение ОтменитьТранзакцию(); Сообщить("Не удалось заблокировать документ " + ДокументСсылка); НачатьТранзакцию(); КонецПопытки; КонецЕсли; Иначе Если (Бух ИЛИ Упр) Тогда #Если Клиент Тогда Состояние("Проведение документа " + ДокументСсылка); #КонецЕсли Если ИспользуетсяРасширеннаяАналитикаУчета Тогда // Движение партий товаров по документу УправлениеЗапасамиПартионныйУчет.ДвижениеПартийТоваров (ДокументСсылка, , КоличествоСтрокВДокументе, Упр, Бух, Бух, Останавливаться,//Движение по партиям можем не останавливать, даже если списались не все партии ПроведениеОстановлено, ДокументМоментВремени, Истина, СтруктураНаборовЗаписей, ФормироватьПроводки, Бух, УчетнаяПолитика); Иначе // Движение партий товаров по документу УправлениеЗапасамиПартионныйУчет.ДвижениеПартийТоваров (ДокументСсылка, , КоличествоСтрокВДокументе, Упр, Бух, Бух, Истина, ПроведениеОстановлено, ДокументМоментВремени, Истина, СтруктураНаборовЗаписей, ФормироватьПроводки, Бух, УчетнаяПолитика); КонецЕсли; Если Останавливаться И ПроведениеОстановлено тогда ОтменитьТранзакцию(); Возврат; КонецЕсли; КонецЕсли; КонецЕсли; //Возращаем старые Движения ДвиженияПартииТоваровНаСкладах.Прочитать(); ПартииТоваровНаСкладахНовые = ДвиженияПартииТоваровНаСкладах.Выгрузить(); КоличествоСтрок = ПартииТоваровНаСкладахНовые.Количество(); Для Счетчик = 0 По КоличествоСтрок Цикл Стр = ПартииТоваровНаСкладахНовые.Получить(КоличествоСтрок - Счетчик); Номенклатура = Стр.Номенклатура; СерияНоменклатуры = Стр.СерияНоменклатуры; ХарактеристикаНоменклатуры = Стр.ХарактеристикаНоменклатуры; Фильтр = Новый Структура(); Фильтр.Вставить("Номенклатура,СерияНоменклатуры,ХарактеристикаНоменклатуры" , Номенклатура,СерияНоменклатуры,ХарактеристикаНоменклатуры); НайденыеСтроки = НужнаяНоменклатура.НайтиСтроки(Фильтр); Если НайденыеСтроки.Количество() > 0 Тогда ПартииТоваровНаСкладахНовые.Удалить(КоличествоСтрок - Счетчик); КонецЕсли; КонецЦикла; Для Каждого ИсхСтр ИЗ ПартииТоваровНаСкладах Цикл Номенклатура = ИсхСтр.Номенклатура; СерияНоменклатуры = ИсхСтр.СерияНоменклатуры; ХарактеристикаНоменклатуры = ИсхСтр.ХарактеристикаНоменклатуры; Фильтр = Новый Структура(); Фильтр.Вставить("Номенклатура,СерияНоменклатуры,ХарактеристикаНоменклатуры" , Номенклатура,СерияНоменклатуры,ХарактеристикаНоменклатуры); НайденыеСтроки = НужнаяНоменклатура.НайтиСтроки(Фильтр); Если НайденыеСтроки.Количество() > 0 Тогда ТекСтр = ПартииТоваровНаСкладахНовые.Добавить(); ЗаполнитьЗначенияСвойств(ТекСтр,ИсхСтр); КонецЕсли; КонецЦикла; ПартииТоваровНаСкладахНовые.Сортировать("НомерСтрокиСписанныхТоваров,НомерКорСтроки"); ДвиженияПартииТоваровНаСкладах.Прочитать(); ДвиженияПартииТоваровНаСкладах.Очистить(); ДвиженияПартииТоваровНаСкладах.Загрузить(ПартииТоваровНаСкладахНовые); ДвиженияПартииТоваровНаСкладах.Записать(); КонецЦикла |
|||
11
aramisov
27.11.14
✎
12:39
|
(10) в данный момент процедура находит документы с определенной даты и по нужной номенклатуре и препроводит по ним партии по УУ,
но нужно не по всей номенклатуре в документе ,а только по определенной соответственно необходимо вернуть старые движения по тем номенклатуре по которой изменения не нужны. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |