|
Удаление задвоенных строк ТЧ 1с 8.2 | ☑ | ||
---|---|---|---|---|
0
DmitriyDI
24.06.13
✎
11:00
|
Всем доброго утра и хорошего дня, есть задачка, удалить задвоенные строки табличной части, написал код, но он не работает, никак не могу понять в чем дело, решил спросить у Вас, вот код:
Процедура КнопкаВыполнитьНажатие(Кнопка) Режим = РежимДиалогаВопрос.ДаНетОтмена; Ответ = Вопрос("Выполнить?", Режим, 0); Если Ответ =КодВозвратаДиалога.Да Тогда Предупреждение("Данное действие приведет к необратимым последствиям.",60,"Предупреждение системы 1с"); СпрНоменклатура= Справочники.Номенклатура.Выбрать(); Пока СпрНоменклатура.Следующий() = 1 Цикл Объект = СпрНоменклатура.ПолучитьОбъект(); А=0; Для Каждого ТекущаяСтрока Из СпрНоменклатура.ТЧФирма Цикл Если ТекущаяСтрока.Склад.Наименование = "Торговый зал (Новая Деревня)" И ТекущаяСтрока.Фирма.Наименование = "ИП Новиков"Тогда А=А+1; КонецЕсли; Если А = 2 Тогда Сообщить("Удален элемент номенклатруры: "+СпрНоменклатура.Код+", "+СпрНоменклатура.Наименование+", Основной поставщик:"+ СпрНоменклатура.ОсновнойПоставщик); Объект.ТЧФирма.Получить((НомерСтроки); КонецЕсли; КонецЦикла; Объект.Записать(); КонецЦикла; ИначеЕсли Ответ = КодВозвратаДиалога.Нет Тогда Сообщить("Не выполнено"); КонецЕсли; КонецПроцедуры |
|||
1
Cube
24.06.13
✎
11:03
|
(0) У тебя ничего не получилось, если в двух словах :)
|
|||
2
Cube
24.06.13
✎
11:04
|
Что за переменная "НомерСтроки" ?
|
|||
3
del123
24.06.13
✎
11:06
|
Будь мужиком, сделай в запросе!
|
|||
4
Godofsin
24.06.13
✎
11:06
|
(3) +1
|
|||
5
DmitriyDI
24.06.13
✎
11:07
|
(2) Объект.ТЧФирма.Получить(ТекущаяСтрока.НомерСтроки);
тьфу ты вот так делаю |
|||
6
Cube
24.06.13
✎
11:07
|
(3) (4) А что в запросе ты сделаешь? Ну, давай, выбери затроенные строки и поудаляй... Цикл в этом случае предпочтительней.
|
|||
7
Молодой 1Снег
24.06.13
✎
11:07
|
Может проще выгрузить в ТЗ и свернуть?
|
|||
8
DmitriyDI
24.06.13
✎
11:08
|
(3) ни разу так не делал сейчас попробую поискать примеры)
|
|||
9
Cube
24.06.13
✎
11:09
|
(8) Не заморачивайся. У тебя ошибка не в выборке данных, а в логике цикла.
|
|||
10
del123
24.06.13
✎
11:09
|
(6) Ну в запросе получить нужные объекты хотя бы. Потом уже через НайтиСтроки(), например, найти и удалить задвоенные.
|
|||
11
DmitriyDI
24.06.13
✎
11:09
|
(7) Да вначале думал так сделать, но в принципе условие отрабатывает ток 1 фирма задвоилась
|
|||
12
DmitriyDI
24.06.13
✎
11:09
|
(9) в чем именно ?
|
|||
13
Godofsin
24.06.13
✎
11:10
|
(6) Прикольно конечно лопатить всю номенклатуру. У меня вот овер 150 твс. позиций
|
|||
14
DmitriyDI
24.06.13
✎
11:12
|
(13) у меня столько же думал транзакцию еще дописать нормально должно все быть
|
|||
15
Cube
24.06.13
✎
11:14
|
(13) Ну так и пиши, что можно выборку сделать оптимальнее. На правильность выполнения это не влияет. У него вообще сейчас не работает :)
|
|||
16
Cube
24.06.13
✎
11:15
|
(12) Примерно так:
СпрНоменклатура = Справочники.Номенклатура.Выбрать(); Пока СпрНоменклатура.Следующий() Цикл СпрОбъект = СпрНоменклатура.ПолучитьОбъект(); НомерСтроки = 0; Пока НомерСтроки < СпрОбъект.ТЧФирма.Количество() Цикл НомерСтроки = НомерСтроки + 1; Если ТекущаяСтрока.Склад.Наименование = "Торговый зал (Новая Деревня)" И ТекущаяСтрока.Фирма.Наименование = "ИП Новиков"Тогда Продолжить; КонецЕсли; Сообщить("Удалена строка элемента номенклатруры: "+СпрОбъект.Код+", "+СпрОбъект.Наименование+", Основной поставщик:"+ СпрОбъект.ОсновнойПоставщик); СпрОбъект.ТЧФирма.Удалить(НомерСтроки); КонецЦикла; СпрОбъект.Записать(); КонецЦикла; А вместо СпрНоменклатура = Справочники.Номенклатура.Выбрать(); можно и запросик накидать, если нужно лопатить не всё. |
|||
17
Cube
24.06.13
✎
11:16
|
(16) Ой, напарился... :)
Вот так правильно: СпрНоменклатура = Справочники.Номенклатура.Выбрать(); Пока СпрНоменклатура.Следующий() Цикл СпрОбъект = СпрНоменклатура.ПолучитьОбъект(); НомерСтроки = 0; Пока НомерСтроки < СпрОбъект.ТЧФирма.Количество() Цикл Если ТекущаяСтрока.Склад.Наименование = "Торговый зал (Новая Деревня)" И ТекущаяСтрока.Фирма.Наименование = "ИП Новиков"Тогда НомерСтроки = НомерСтроки + 1; Продолжить; КонецЕсли; Сообщить("Удалена строка элемента номенклатруры: "+СпрОбъект.Код+", "+СпрОбъект.Наименование+", Основной поставщик:"+ СпрОбъект.ОсновнойПоставщик); СпрОбъект.ТЧФирма.Удалить(НомерСтроки); КонецЦикла; СпрОбъект.Записать(); КонецЦикла; |
|||
18
Cube
24.06.13
✎
11:17
|
(17) Блин, забыл, что надо только дублированные строки-то удалить.... Ща :)
|
|||
19
lamesnake
24.06.13
✎
11:19
|
А почему просто не свернуть саму табличную часть?
|
|||
20
Бледно Золотистый
24.06.13
✎
11:20
|
(19)+1 Тоже хотел спросить, но постеснялся.
|
|||
21
Cube
24.06.13
✎
11:20
|
(18) С проверкой реквизита ПроверяемыйРеквизитТЧ1 на задвоенность:
СпрНоменклатура = Справочники.Номенклатура.Выбрать(); ПроверяемыйРеквизитТЧ1 = Неопределено; Пока СпрНоменклатура.Следующий() Цикл СпрОбъект = СпрНоменклатура.ПолучитьОбъект(); НомерСтроки = 0; Пока НомерСтроки < СпрОбъект.ТЧФирма.Количество() Цикл Если (ТекущаяСтрока.Склад.Наименование = "Торговый зал (Новая Деревня)" И ТекущаяСтрока.Фирма.Наименование = "ИП Новиков") ИЛИ ПроверяемыйРеквизитТЧ1 <> ТекущаяСтрока.ПроверяемыйРеквизитТЧ1 Тогда НомерСтроки = НомерСтроки + 1; ПроверяемыйРеквизитТЧ1 = ТекущаяСтрока.ПроверяемыйРеквизитТЧ1; Продолжить; КонецЕсли; Сообщить("Удалена строка элемента номенклатруры: "+СпрОбъект.Код+", "+СпрОбъект.Наименование+", Основной поставщик:"+ СпрОбъект.ОсновнойПоставщик); СпрОбъект.ТЧФирма.Удалить(НомерСтроки); КонецЦикла; СпрОбъект.Записать(); КонецЦикла; |
|||
22
Cube
24.06.13
✎
11:22
|
+(21) строку "ПроверяемыйРеквизитТЧ1 = Неопределено;" надо внести внутрь цикла.
|
|||
23
DmitriyDI
24.06.13
✎
11:30
|
(21) так сейчас я переварю информацию)
|
|||
24
Молодой 1Снег
24.06.13
✎
11:30
|
(21) Еще нужно предварительно отсортировать по проверяемому реквизиту. Иначе не заработает этот код.
|
|||
25
DmitriyDI
24.06.13
✎
11:30
|
(20) (19) Так зачем усложнять все)))
|
|||
26
lamesnake
24.06.13
✎
11:31
|
(22) (23) Ребята, у вас зарплата от количества строчек кода зависит?
|
|||
27
DmitriyDI
24.06.13
✎
11:32
|
(26) ахахаха)) не прямо конечно, а вообще косвенно конечно да)))
|
|||
28
lamesnake
24.06.13
✎
11:35
|
(27) Ну а зачем тогда огород городить:
ТабличнаяЧасть.Свернуть("Имена всех колонок"); |
|||
29
Бледно Золотистый
24.06.13
✎
11:41
|
(25) Не понял, одна строка ТЧ.Свернуть это сильно сложно?
|
|||
30
DmitriyDI
24.06.13
✎
11:52
|
Переделал вот так)
Если Ответ =КодВозвратаДиалога.Да Тогда Предупреждение("Данное действие приведет к необратимым последствиям.",60,"Предупреждение системы 1с"); СпрНоменклатура= Справочники.Номенклатура.Выбрать(); Пока СпрНоменклатура.Следующий() = 1 Цикл Объект.ТЧФирма.Свернуть("Склад,Фирма"); Объект.Записать(); КонецЦикла; ИначеЕсли Ответ = КодВозвратаДиалога.Нет Тогда Сообщить("Не выполнено"); КонецЕсли; |
|||
31
DmitriyDI
24.06.13
✎
11:52
|
Всем спасибо)))
|
|||
32
Cube
24.06.13
✎
12:13
|
(28) У меня понедельник после отпуска - день тяжелый)))
|
|||
33
del123
24.06.13
✎
12:23
|
(30) и работает?
В частности строка Пока СпрНоменклатура.Следующий() = 1 Цикл Семерка чтоли?:) |
|||
34
del123
24.06.13
✎
12:25
|
(33) Гы, не знал что истина = 1, подозревал конечно..))
|
|||
35
DmitriyDI
24.06.13
✎
14:44
|
(34) истина так)
|
|||
36
КУНГ ФУ 1С
24.06.13
✎
14:47
|
(0) ВЫБРАТЬ РАЗЛИЧНЫЕ В ЗАПРОСЕ.
на мой взгляд более оптимально. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |