|
Дублирование строк в табличной части справочника 1С ! | ☑ | ||
---|---|---|---|---|
0
Oleg37701
21.06.21
✎
01:29
|
Задача такая, есть табличная часть с двумя реквизитами, "Продукт" и "Количество", при добавление в табличную часть продукта необходимо проверять на наличие дублей и если таковы есть, то в уже имеющийся прибавить количество, а не создавать ещё один такой же продукт. Получилось написать, но только на удаление дублирующих записей а как сложить не понимаю
Процедура ПередЗаписью(Отказ, ПараметрыЗаписи) ТЧ = Объект.Состав; Для Каждого ТекСтрока Из ТЧ Цикл ТекПродукт = ТекСтрока.Продукт; НомерСтрк = ТекСтрока.НомерСтроки; ТекКоличество = ТекСтрока.Количество; Для Каждого Стрк ИЗ ТЧ Цикл Если Стрк.Продукт = ТекПродукт И Стрк.НомерСтроки <> НомерСтрк Тогда ТЧ.Удалить(Стрк); Сообщение = Новый СообщениеПользователю; Сообщение.Текст = "Продукт " + Стрк.Продукт + " уже есть !"; Сообщение.Сообщить(); КонецЕсли; КонецЦикла; КонецЦикла; КонецПроцедуры Функция Свернуть не подходит так как есть другие важные колонки, по котором расхождение. |
2 17 |
||
1
МихаилМ
21.06.21
✎
02:53
|
1)начните с начала - с изучения русского языка.
2)Программирование , оно ведь не для всех. Дедушка Нуралиев обманул. 3)но если хочется, то прочтите СНАЧАЛА книжки по 1с. там большинство простых ситуаций рассматривается. и Ваша - тоже. а так как-то не хорошо получается. |
3 13 |
||
2
craxx
21.06.21
✎
03:33
|
(0) НайтиСтроки()
|
6 |
||
3
JeHer
21.06.21
✎
03:36
|
(1) а он что, на китайском написал, что ли?
|
|||
4
Chameleon1980
21.06.21
✎
05:41
|
не понял?
...Получилось написать, но только на удаление дублирующих записей ... те удаление победил далее: ...а как сложить не понимаю... но Функция Свернуть не подходит так как есть другие важные колонки, по котором расхождение. |
11 |
||
6
Oleg37701
21.06.21
✎
08:42
|
(2) Понял, попробую сопоставить
|
|||
9
Serg_1960
модератор
21.06.21
✎
09:01
|
7. Соблюдайте общепринятые нормы морали, права и сетевой этикет
|
13 |
||
11
Serg_1960
21.06.21
✎
09:14
|
(4) Интересный вопрос, кстати: как использовать сворачивание, если в ТЧ есть колонки, которые не "участвуют" в сворачивании, но их значения не должны "теряться"? Тем не менее, решение - есть :)
|
14 |
||
12
Chameleon1980
21.06.21
✎
09:25
|
Запрос
|
18 |
||
13
Oleg37701
21.06.21
✎
09:51
|
||||
14
Oleg37701
21.06.21
✎
09:52
|
(11) А не подскажете как , без запроса? Какое решение?
|
16 |
||
15
Prog111
21.06.21
✎
09:56
|
Я бы сделал через НайтиСтроки(СтруктураПараметров) - если возвращаемый массив строк пустой - то добавляю строку, если не пустой - то позиционируюсь на найденной строке и в ней добавляю количество к имеющемуся количеству.
|
18 |
||
16
minsk1s
21.06.21
✎
10:48
|
(14) можно выгрузить в Таблицу значений. А там уже с помощью свертки и сортировки...
|
18 |
||
17
ColonelAp4u
21.06.21
✎
12:10
|
(0) решается очень легко при использовании метода найти(возвращает найденную строку при подборе) или найтистроки(возвращает массив строк по указанной структуре отбора)
Пример при подборе обработка подбора возвращает номенклатуру из подбора Стр = Товары.найти(ТоварИзПодбора, "Номенклатура"); Если Стр = Неопределенно тогда Стр = Товары.добавить(); //заполняешь реквизиты включая количество Иначе Стр. Количество = Стр.Количество + КоличествоИзПодбора КонецЕсли; |
18 |
||
18
orakool
21.06.21
✎
12:23
|
20 |
|||
19
Serg_1960
21.06.21
✎
12:42
|
Эх, ёпрст, попробую скрестить ежа и кота :)
КолонкиГруппировок = "Номенклатура, ХарактеристикаНоменклатуры, ЕдиницаИзмерения"; // остальные "важные" колонки не используются при группировке ДокументОбъект = Документы.ЗаказПокупателя.НайтиПоНомеру("12345", ТекущаяДата()).ПолучитьОбъект(); // документ из конфигурации УПП чисто для примера ТЗ = ДокументОбъект.Товары.Выгрузить(); ТЗ.Свернуть(КолонкиГруппировок, "Количество"); Для Каждого Запись Из ТЗ Цикл ПараметрыОтбора = Новый Структура(КолонкиГруппировок); ЗаполнитьЗначенияСвойств(ПараметрыОтбора,Запись); НайденныеСтроки = ДокументОбъект.Товары.НайтиСтроки(ПараметрыОтбора); Для Каждого Строка Из НайденныеСтроки Цикл // закидываем значения в первопопавшиеся строки, остальные - обнуляем. Строка.Количество = Запись.Количество; Запись.Количество = 0; ОбработкаТабличныхЧастей.РассчитатьКоличествоМестТабЧасти(Строка, ДокументОбъект); // типовой функционал УПП, так положено ОбработкаТабличныхЧастей.РассчитатьСуммуТабЧасти(Строка, ДокументОбъект); ОбработкаТабличныхЧастей.РассчитатьСуммуНДСТабЧасти(Строка, ДокументОбъект); КонецЦикла; КонецЦикла; УдаляемыеСтроки = ДокументОбъект.Товары.НайтиСтроки(Новый Структура("Количество", 0)); // строки, которым "не повезло" Для Каждого Строка Из УдаляемыеСтроки Цикл ДокументОбъект.Товары.Удалить(Строка); КонецЦикла; |
|||
20
Bigbro
21.06.21
✎
12:49
|
(18) а что за проблема со свернуть?
добавляйте все поля которые не должны быть потеряны через запятую и все. что еще нужно? |
21 |
||
21
Serg_1960
21.06.21
✎
13:05
|
(20) Нуу... предположим на мгновение, например, что все строки в таблице - уникальные по значениям всех полей. Ок? Группировать будет нечего :)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |