Имя: Пароль:
1C
 
помогите разобраться, как проверить табличную часть документа, полностью выбрали или нет.
0 DenisK2020
 
21.12.22
18:53
Сделал внешнюю обработку, заполнение табличной части - перемещений товаров

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

        
        Запрос.Текст = "ВЫБРАТЬ
                       |    ПеремещениеТоваровТовары.Ссылка КАК Ссылка,
                       |    ПеремещениеТоваровТовары.Ссылка.ИЦ_Статус КАК ИЦ_Статус,
                       |    ПеремещениеТоваровТовары.Номенклатура КАК Номенклатура,
                       |    ПеремещениеТоваровТовары.Количество КАК Количество,
                       |    ВЫРАЗИТЬ(ПеремещениеТоваровТовары.Ссылка.Комментарий КАК СТРОКА(120)) КАК Комментарий
                       |ИЗ
                       |    Документ.ПеремещениеТоваров.Товары КАК ПеремещениеТоваровТовары
                       |ГДЕ
                       |    ПеремещениеТоваровТовары.Ссылка.Дата >= &НачПериода
                       |    И ПеремещениеТоваровТовары.Ссылка.ИЦ_Статус = &ИЦ_Статус
                       |    И ПеремещениеТоваровТовары.Ссылка.Дата <= &КонПериода
                       |    И ПеремещениеТоваровТовары.Ссылка.Проведен = ИСТИНА
                       |    И ПеремещениеТоваровТовары.Ссылка.СкладПолучатель = &СкладПолучатель";
        Результат = Запрос.Выполнить().Выгрузить();
        Для каждого ВыборкаСтрокЗаказы Из Результат Цикл
            Нов = ЭтотОбъект.СписокДокументовПеремещений.Добавить();
            Нов.Метка       = ложь;
            Нов.ДокПеремещение      = ВыборкаСтрокЗаказы.Ссылка;
            Нов.Статус    = ВыборкаСтрокЗаказы.Иц_Статус;
            Нов.Номенклатура=ВыборкаСтрокЗаказы.Номенклатура;
            Нов.Количество=ВыборкаСтрокЗаказы.Количество;
            Нов.Комментарий=СокрЛП(ВыборкаСтрокЗаказы.Ссылка.Комментарий);
            Нов.Артикул=СокрЛП(ВыборкаСтрокЗаказы.Номенклатура.Артикул);
        КонецЦикла;    
        СписокДокументовПеремещений.Сортировать("ДокПеремещение Возр");
    КонецЕсли;


Как проверить что кладовщик выбрал все товары или нет. На основании это в статус документ буду менять готов к отгрузке
процедура еее()
    Для каждого Строка из СписокДокументовПеремещений Цикл
        ст="";
        //найдем все не отмеченные товары
        Если Строка.Метка=Истина Тогда
            Продолжить;
        КонецЕсли;    
    //    Массив=СписокДокументовПеремещений.НайтиСтроки(.НайтиСтроки(Строка.ДокПеремещение);
        Ст=Строка(Строка.НомерСтроки)+" "+Строка(СокрЛП(Строка.ДокПеремещение));
        Сообщить(ст);
        Для каждого Ст2 ИЗ СписокДокументовПеремещений.НайтиСтроки(Новый Структура(Документы.ПеремещениеТоваров, Строка.ДокПеремещение)) Цикл
            
        КонецЦикла;    
    КонецЦикла;

конецПроцедуры;
1 DenisK2020
 
21.12.22
19:26
В табличной части документа - перемещений может быть больше 1 строки с товаром, кладовщик может отметить и найти только один товар.
Как проверить что по данному документы выбраны, метка=1, все товары таб. части
2 hockeyist
 
21.12.22
20:47
У меня есть таблица (товар,количество,отметка) Как проверить, что в таблице отмечены все тотовары отметка=1
========================
Чтобы проверить, что в таблице отмечены все товары с отметкой 1, вы можете воспользоваться следующим алгоритмом:

Создайте переменную all_marked и инициализируйте ее значением True. Эта переменная будет хранить результат проверки - все ли товары отмечены.
Итерируйтесь по строкам таблицы (по товарам).
Для каждого товара проверяйте, что отметка равна 1. Если отметка не равна 1, то присвойте переменной all_marked значение False и выйдите из цикла (так как дальнейшая проверка уже не имеет смысла).
После завершения цикла проверьте значение переменной all_marked. Если она равна True, то все товары отмечены. Иначе, хотя бы один товар не отмечен.
Пример кода на Python:
all_marked = True
for product, quantity, mark in table:
    if mark != 1:
        all_marked = False
        break

if all_marked:
    print("Все товары отмечены")
else:
    print("Не вс
3 hockeyist
 
21.12.22
20:48
В таблице может быть несколько строк с одинаковым товаром. Если отмечена хоть одна, значит этот товар отмечен
============================
Чтобы проверить, что в таблице отмечены все товары с отметкой 1, учитывая тот факт, что может быть несколько строк с одинаковым товаром, вы можете воспользоваться следующим алгоритмом:

Создайте пустой список marked_products. Этот список будет хранить названия отмеченных товаров.
Итерируйтесь по строкам таблицы (по товарам).
Для каждого товара проверяйте, что отметка равна 1. Если отметка равна 1, то добавьте название товара в список marked_products.
После завершения цикла сравните длину списка marked_products с общим количеством товаров. Если эти значения совпадают, то все товары отмечены. Иначе, хотя бы один товар не отмечен.
Пример кода на Python:
marked_products = []
for product, quantity, mark in table:
    if mark == 1:
        marked_products.append(product)

if len(marked_products) == len(table):
    print("Все товары отмечены")
else:
    print("Не все тов
4 hockeyist
 
21.12.22
20:49
Но размер таблицы это не размер списка товаров. Если встречаются одинаковые товары, то размер таблицы будет больше
===============================
Вы правильно заметили, что размер таблицы (количество строк) может быть больше, чем количество уникальных товаров, если в таблице есть несколько строк с одинаковым товаром. В этом случае, чтобы проверить, что все товары отмечены, нужно сначала получить список уникальных товаров, а затем сравнивать его со списком отмеченных товаров.

Вы можете использовать следующий алгоритм:

Создайте пустой список marked_products. Этот список будет хранить названия отмеченных товаров.
Создайте пустой список unique_products. Этот список будет хранить названия уникальных товаров.
Итерируйтесь по строкам таблицы (по товарам).
Для каждого товара проверяйте, что отметка равна 1. Если отметка равна 1, то добавьте название товара в список `marked
5 hockeyist
 
21.12.22
20:50
Дальше не хочет. Размер вывода ограничен. Но я думаю и так понятно
6 hockeyist
 
21.12.22
21:03
Со второй попытки выдало больше, но все равно обрезано:
Вы правы, что размер таблицы (количество строк) может быть больше, чем количество уникальных товаров. Чтобы проверить, что в таблице отмечены все товары с отметкой 1, учитывая этот факт, вы можете воспользоваться следующим алгоритмом:

Создайте пустой список marked_products. Этот список будет хранить названия отмеченных товаров.
Создайте пустой список unique_products. Этот список будет хранить уникальные названия товаров.
Итерируйтесь по строкам таблицы (по товарам).
Для каждого товара проверяйте, что отметка равна 1. Если отметка равна 1, то добавьте название товара в список marked_products. Также добавьте название товара в список unique_products, если оно там еще не встречалось.
После завершения цикла сравните длину списка marked_products с длиной с
7 mikecool
 
21.12.22
21:20
(6) к чему этот поток мыслей, да еще на другом ЯП?
8 hockeyist
 
21.12.22
21:24
(7) К тому, что ответ на такой вопрос проще и быстрее получить в chatGPT