Вход | Регистрация
 
1С:Предприятие :: 1С:Предприятие 8 общая

Дублирование строк в табличной части справочника 1С !

Дублирование строк в табличной части справочника 1С !
Я
   Oleg37701
 
21.06.21 - 01:29
Задача такая, есть табличная часть с двумя реквизитами, "Продукт" и "Количество", при добавление в табличную часть продукта необходимо проверять на наличие дублей и если таковы есть, то в уже имеющийся прибавить количество, а не создавать ещё один такой же продукт. Получилось написать, но только на удаление дублирующих записей а как сложить не понимаю

Процедура ПередЗаписью(Отказ, ПараметрыЗаписи)
    ТЧ = Объект.Состав;
    Для Каждого ТекСтрока Из ТЧ Цикл
        ТекПродукт = ТекСтрока.Продукт;
        НомерСтрк = ТекСтрока.НомерСтроки;
        ТекКоличество = ТекСтрока.Количество;
        Для Каждого Стрк ИЗ ТЧ Цикл
            Если Стрк.Продукт = ТекПродукт И Стрк.НомерСтроки <> НомерСтрк Тогда
                ТЧ.Удалить(Стрк);
                Сообщение = Новый СообщениеПользователю;
                Сообщение.Текст = "Продукт " + Стрк.Продукт + " уже есть !";
                Сообщение.Сообщить();
            КонецЕсли;    
        КонецЦикла;        
    КонецЦикла;
КонецПроцедуры


Функция Свернуть не подходит так как есть другие важные колонки, по котором расхождение.
   МихаилМ
 
1 - 21.06.21 - 02:53
1)начните с начала - с изучения русского языка.
2)Программирование , оно ведь не для всех. Дедушка Нуралиев обманул.
3)но если хочется, то прочтите СНАЧАЛА  книжки по 1с. там большинство простых ситуаций рассматривается. и Ваша - тоже.

а так как-то не хорошо получается.
   craxx
 
2 - 21.06.21 - 03:33
(0) НайтиСтроки()
   JeHer
 
3 - 21.06.21 - 03:36
(1) а он что, на китайском написал, что ли?
   Chameleon1980
 
4 - 21.06.21 - 05:41
не понял?

...Получилось написать, но только на удаление дублирующих записей ...

те удаление победил
далее:

...а как сложить не понимаю...

но

Функция Свернуть не подходит так как есть другие важные колонки, по котором расхождение.
   Oleg37701
 
6 - 21.06.21 - 08:42
(2) Понял, попробую сопоставить
   Serg_1960
 
Модератор
9 - 21.06.21 - 09:01
7. Соблюдайте общепринятые нормы морали, права и сетевой этикет
   Serg_1960
 
11 - 21.06.21 - 09:14
(4) Интересный вопрос, кстати: как использовать сворачивание, если в ТЧ есть колонки, которые не "участвуют" в сворачивании, но их значения не должны "теряться"? Тем не менее, решение - есть :)
   Chameleon1980
 
12 - 21.06.21 - 09:25
Запрос
   Oleg37701
 
13 - 21.06.21 - 09:51
(9) Почему это не адресовано также (1) Михаилу?
   Oleg37701
 
14 - 21.06.21 - 09:52
(11) А не подскажете как , без запроса? Какое решение?
   Prog111
 
15 - 21.06.21 - 09:56
Я бы сделал через НайтиСтроки(СтруктураПараметров) - если возвращаемый массив строк пустой - то добавляю строку, если не пустой - то позиционируюсь на найденной строке и в ней добавляю количество к имеющемуся количеству.
   minsk1s
 
16 - 21.06.21 - 10:48
(14) можно выгрузить в Таблицу значений. А там уже с помощью свертки и сортировки...
   ColonelAp4u
 
17 - 21.06.21 - 12:10
(0) решается очень легко при использовании метода найти(возвращает найденную строку при подборе) или найтистроки(возвращает массив строк по указанной структуре отбора)
Пример при подборе обработка подбора возвращает номенклатуру из подбора

Стр = Товары.найти(ТоварИзПодбора, "Номенклатура");
Если Стр = Неопределенно тогда
Стр = Товары.добавить();
//заполняешь реквизиты включая количество

Иначе
Стр. Количество = Стр.Количество + КоличествоИзПодбора
КонецЕсли;
   orakool
 
18 - 21.06.21 - 12:23
(12) (15) (16) (17) это всё не решает проблему "Функция Свернуть не подходит так как есть другие важные колонки, по котором расхождение."
   Serg_1960
 
19 - 21.06.21 - 12:42
Эх, ёпрст, попробую скрестить ежа и кота :)

    КолонкиГруппировок = "Номенклатура, ХарактеристикаНоменклатуры, ЕдиницаИзмерения";// остальные "важные" колонки не используются при группировке

    ДокументОбъект = Документы.ЗаказПокупателя.НайтиПоНомеру("12345", ТекущаяДата()).ПолучитьОбъект();    // документ из конфигурации УПП чисто для примера

    ТЗ = ДокументОбъект.Товары.Выгрузить();
    ТЗ.Свернуть(КолонкиГруппировок, "Количество");
    Для Каждого Запись Из ТЗ Цикл
        ПараметрыОтбора = Новый Структура(КолонкиГруппировок);
        ЗаполнитьЗначенияСвойств(ПараметрыОтбора,Запись);
        НайденныеСтроки = ДокументОбъект.Товары.НайтиСтроки(ПараметрыОтбора);
        Для Каждого Строка Из НайденныеСтроки Цикл// закидываем значения в первопопавшиеся строки, остальные - обнуляем. 

            Строка.Количество = Запись.Количество;
            Запись.Количество = 0;
            ОбработкаТабличныхЧастей.РассчитатьКоличествоМестТабЧасти(Строка, ДокументОбъект);// типовой функционал УПП, так положено

            ОбработкаТабличныхЧастей.РассчитатьСуммуТабЧасти(Строка, ДокументОбъект);
            ОбработкаТабличныхЧастей.РассчитатьСуммуНДСТабЧасти(Строка, ДокументОбъект);
        КонецЦикла;
    КонецЦикла;
    УдаляемыеСтроки = ДокументОбъект.Товары.НайтиСтроки(Новый Структура("Количество", 0));  // строки, которым "не повезло"

    Для Каждого Строка Из УдаляемыеСтроки Цикл
        ДокументОбъект.Товары.Удалить(Строка);
    КонецЦикла;
   Bigbro
 
20 - 21.06.21 - 12:49
(18) а что за проблема со свернуть?
добавляйте все поля которые не должны быть потеряны через запятую и все.
что еще нужно?
   Serg_1960
 
21 - 21.06.21 - 13:05
(20) Нуу... предположим на мгновение, например, что все строки в таблице - уникальные по значениям всех полей. Ок? Группировать будет нечего :)


Список тем форума
 
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.