8.х Застрял на простом

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем Raideres, 12 июн 2019.

  1. TopicStarter Overlay
    Raideres
    Offline

    Raideres Опытный в 1С

    Регистрация:
    9 фев 2016
    Сообщения:
    511
    Симпатии:
    1
    Баллы:
    29
    Есть две табличных части
    в одной табличной части номенклатура количество = 1 и буливый флаг
    в другой номенклатура и количество
    нужно чтобы когда я в первой тч ставил флаг она добавлялась во вторую снимаю то минус 1
    плюс во вторую я могу добавить и через кнопку добавить

    Вложения:

  2. nbIpKuH_BaH9I
    Offline

    nbIpKuH_BaH9I Модераторы Команда форума Модератор

    Регистрация:
    16 сен 2009
    Сообщения:
    8.002
    Симпатии:
    530
    Баллы:
    204
    По какому признаку должен быть поиск в табличной части? По номенлатуре? По номеру строки?
  3. TopicStarter Overlay
    Raideres
    Offline

    Raideres Опытный в 1С

    Регистрация:
    9 фев 2016
    Сообщения:
    511
    Симпатии:
    1
    Баллы:
    29
    По номенклатуре
  4. Катюфка
    Offline

    Катюфка Профессионал в 1С

    Регистрация:
    3 июн 2013
    Сообщения:
    535
    Симпатии:
    83
    Баллы:
    54
    Здравствуйте.
    Я предлагаю сделать во второй таблице (назовем ее Таб2) дополнительную невидимую колонку Авто, где будем указывать, автоматом созданы строки или вручную. Тогда можно будет выборочно очищать таблицу пред заполнением из запроса.

    Код:
    &НаСервере
    Процедура Таб1ТоварПриИзмененииНаСервере()
        Запрос = Новый Запрос;
        Запрос.Текст =
            "ВЫБРАТЬ
            |    Таб.Флаг КАК Флаг,
            |    Таб.Товар КАК Товар
            | ПОМЕСТИТЬ Таб1
            |ИЗ
            |    &Таб КАК Таб
            |ГДЕ
            |    Таб.Флаг = ИСТИНА
            |;
            |ВЫБРАТЬ
            |    Количество(Таб1.Флаг) КАК Количество,
            |    Таб1.Товар КАК Товар
            |ИЗ
            |    Таб1 КАК Таб1
            |СГРУППИРОВАТЬ ПО Таб1.Товар
            |";
      
        Запрос.Параметры.Вставить("Таб",Объект.Таб1.Выгрузить());
        РезультатЗапроса = Запрос.Выполнить();
        Выборка = РезультатЗапроса.Выбрать();
        Пока Выборка.Следующий() Цикл
            Стр = Объект.Таб2.Добавить();
            Стр.Товар = Выборка.Товар;
            Стр.Количество = Выборка.Количество;
            Стр.Авто = Истина;
        КонецЦикла;
    
    КонецПроцедуры
    
    &НаКлиенте
    Процедура Таб1ТоварПриИзменении(Элемент)
        ОчиститьТаблицу();
        Таб1ТоварПриИзмененииНаСервере();
    КонецПроцедуры
    
    &НаКлиенте
    Процедура ОчиститьТаблицу()
        Сч = Объект.Таб2.Количество();
        Пока Сч > 0 Цикл
            Сч = Сч - 1;
            Стр = Объект.Таб2[Сч];
            Если Стр.Авто Тогда
                Объект.Таб2.Удалить(Сч);
            КонецЕсли;
        КонецЦикла;
    КонецПроцедуры
    
    Если бы не надо было отслеживать "ручные" строки в Таб2, то можно просто выгрузить результат запроса в табличную часть.
    Последнее редактирование: 13 июн 2019
  5. TopicStarter Overlay
    Raideres
    Offline

    Raideres Опытный в 1С

    Регистрация:
    9 фев 2016
    Сообщения:
    511
    Симпатии:
    1
    Баллы:
    29

    Это хорошо но во второй таблице же я могу взять и поменять количество сам, например был товар1=2шт в 1й таблице, перенесли во 2ю таблицу и во второй вручную сменили количество на 3
    тогда при снятие флага во второй должно остаться 1н
  6. Катюфка
    Offline

    Катюфка Профессионал в 1С

    Регистрация:
    3 июн 2013
    Сообщения:
    535
    Симпатии:
    83
    Баллы:
    54
    Я Вам предлагаю не рыбу, а удочку. Ваши нюансы обрабатывайте, пожалуйста, сами.
    Основное в моем примере - это Таб1. Запросом получаются данные на текущий момент. При изменении флагов, меняется информация в Таб2. Для "ручных" строк можно предусмотреть еще колонку с добавленным количеством, можно завести отдельную таблицу, можно еще что-то придумать на свой вкус.
    Кстати, даже в таком виде Ваш случай будет обработан корректно, т.к. у измененной строки будет Авто = Истина и она заменится на актуальные данные. Ложь (или пустое значение этого флага) будет только у добавленных строк Таб2.
    Последнее редактирование: 13 июн 2019
  7. TopicStarter Overlay
    Raideres
    Offline

    Raideres Опытный в 1С

    Регистрация:
    9 фев 2016
    Сообщения:
    511
    Симпатии:
    1
    Баллы:
    29
    QUOTE="Катюфка, post: 413943, member: 19376"]Кстати, даже в таком виде Ваш случай будет обработан корректно, т.к. у измененной строки будет Авто = Истина и она заменится на актуальные данные. Ложь (или пустое значение этого флага) будет только у добавленных строк Таб2.[/QUOTE]

    не корректно было 2 поставил 3 в строку убрал флаг стало 0 а должно было остаться 1н
  8. TopicStarter Overlay
    Raideres
    Offline

    Raideres Опытный в 1С

    Регистрация:
    9 фев 2016
    Сообщения:
    511
    Симпатии:
    1
    Баллы:
    29
    не корректно было 2 поставил 3 в строку убрал флаг стало 0 а должно было остаться 1н


    мы просто наверное друг друга не так поняли вот что я сейчас имею работает можно сказать как и у вас вся загвоздка как раз в том что если я добавляю в ручную в таблицу 2 то естественно при снятие флага количество ставится неправильно
    в таблице два уже есть запись например СтрокаТабличнойЧасти = ОбработкаТабличныхЧастей.НайтиСтрокуТабЧасти(Услуги, СтруктураОтбора);
    вот я ее нашел вижу что там было 1н я ставлю флаг должно стать 2 я снимаю флаг должно стать 1н а у меня эта манипуляция не получается

    Запрос = Новый Запрос;
    Запрос.Текст =
    "ВЫБРАТЬ
    | ЗаправкаКартриджейВидыУслуг.Спецификация,
    | ЗаправкаКартриджейВидыУслуг.Количество КАК Количество
    |ПОМЕСТИТЬ ВТ
    |ИЗ
    | &ВидыУслуг КАК ЗаправкаКартриджейВидыУслуг
    |ГДЕ
    | ЗаправкаКартриджейВидыУслуг.СтатусРаботы = ИСТИНА
    |;
    |
    |////////////////////////////////////////////////////////////////////////////////
    |ВЫБРАТЬ
    | ВТ.Спецификация,
    | СУММА(ВТ.Количество) КАК Количество
    |ИЗ
    | ВТ КАК ВТ
    |
    |СГРУППИРОВАТЬ ПО
    | ВТ.Спецификация";

    Запрос.Параметры.Вставить("ВидыУслуг",ЭтотОбъект.ВидыУслуг.Выгрузить());
    РезультатЗапроса = Запрос.Выполнить();

    Выборка = РезультатЗапроса.Выбрать();
    Пока Выборка.Следующий() Цикл
    СтруктураОтбора = Новый Структура();
    СтруктураОтбора.Вставить("Номенклатура", Выборка.Спецификация);
    СтрокаТабличнойЧасти = ОбработкаТабличныхЧастей.НайтиСтрокуТабЧасти(Услуги, СтруктураОтбора);
    Если СтрокаТабличнойЧасти <> Неопределено Тогда
    Услуги.Удалить(СтрокаТабличнойЧасти);
    КонецЕсли;
    Стр = ЭтотОбъект.Услуги.Добавить();
    Стр.Номенклатура = Выборка.Спецификация;
    Стр.Количество = Выборка.Количество;
    КонецЦикла;
    --- Объединение сообщений, 13 июн 2019 ---
  9. Катюфка
    Offline

    Катюфка Профессионал в 1С

    Регистрация:
    3 июн 2013
    Сообщения:
    535
    Симпатии:
    83
    Баллы:
    54
    И что не получается? Добавьте колонку Разница. Перед редактированием строки занесите туда значение Количество. После редактирования строки проверьте, отличается ли Количество от Разница? Если да, то отнимаете первоначальное значение от нового и заносите в колонку Разница. Флаг Авто снимаете. При очистке Таб2 проверяете, есть ли в Разница значение, если да, то присваиваете его колонке Количество и оставляете строку. При заполнении Таб2 из запроса проверяете, есть ли ручная строка с таким же товаром? Если есть, то суммируете количество в строке с признаком ручного ввода, а новую строку не добавляете. Вот и все.
  10. Катюфка
    Offline

    Катюфка Профессионал в 1С

    Регистрация:
    3 июн 2013
    Сообщения:
    535
    Симпатии:
    83
    Баллы:
    54
    Вот Вам моя обработка, в которой все работает по ТЗ. Возможно, все случаи не предусмотрены, но как основа вполне годится.

    Вложения:

  11. TopicStarter Overlay
    Raideres
    Offline

    Raideres Опытный в 1С

    Регистрация:
    9 фев 2016
    Сообщения:
    511
    Симпатии:
    1
    Баллы:
    29
    спасибо сейчас посмотрю