Имя: Пароль:
1C
 
Задача про конверты и открытки
0 НастяПРО
 
10.04.24
10:18
Ребята, всем привет! Это снова я!! У меня задача по программированию 1С. Даны открытки и конверты. То есть у меня дано 2 документа: Открытки(с реквизитами(в табличной части) наменование, длина, ширина) и конверты с теми же реквизитами в табличной части. Нужно создать отчет, в котором при выборе документов с открытками и конвертами распределялась каждая открытка по нужному ей конверту. То есть, чтобы у открытки длина и ширина была меньше конверта. Я уже создала форму отчета. Туда добавила табличный документ. И в нем нарисовала поля:
№ Конверт Открытка
1
2
3

То есть это нужно заполнить. Также я добавила документы конверты и открытки для их выбора и кнопку для формирования отчета(заполнения табличного документа). Помоги мне решить эту задачу

Вот мой код. Но он не работает корректно.

ТабличныйДокумент = ЭтотОбъект.Реквизит1;
  
  Для Каждого Открытка Из Открытки.ТабличнаяЧастьОткрытки Цикл
    Для Каждого Конверт Из Конверты.ТабличнаяЧастьКонверты Цикл
        Если Открытка.Длина < Конверт.Длина И Открытка.Ширина < Конверт.Ширина ИЛИ Открытка.Ширина < Конверт.Длина И Открытка.Длина < Конверт.Ширина Тогда
        ТабличныйДокумент.Область("Конверт1").Текст = Конверт.Наменование;
        ТабличныйДокумент.Область("Открытка1").Текст = Открытка.Наменование;
        ТабличныйДокумент.Область("Конверт2").Текст = Конверт.Наменование;
        ТабличныйДокумент.Область("Открытка2").Текст = Открытка.Наменование;
        ТабличныйДокумент.Область("Конверт3").Текст = Конверт.Наменование;
        ТабличныйДокумент.Область("Открытка3").Текст = Открытка.Наменование;

            //Строка = Конверт.Наименование;
            //Строка = Открытка.Наименование;
            Сообщить(Открытка.Наменование);
        КонецЕсли;
    КонецЦикла;
    КонецЦикла;

КонецПроцедуры

Мне нужно сделать так, чтобы каждая область табличного документа заполнялась разными документами. А сейчас он заполняет эти области только одними и теми же значениями.
1 Garykom
 
10.04.24
10:31
В табличной части?
Ссылок нет, наименование как ключ - маразм.
2 Михаил Козлов
 
10.04.24
10:33
Попробуйте в условии поставить скобки:
Если (Открытка.Длина <= Конверт.Длина И Открытка.Ширина <= Конверт.Ширина) ИЛИ Открытка.Ширина <= Конверт.Длина И Открытка.Длина <= Конверт.Ширина) Тогда...
и посмотрите в отладчике.
3 Garykom
 
10.04.24
10:37
На этот раз "экселевская" задачка с двумя табличками
Кстати задачка весьма хитрая (но к 1С никакого отношения не имеет)
Потому что подбирать конверты надо в условиях их нехватки
Т.е. брать не любой подходящий конверт а лишь чуть больше из оставшихся (и то можно не уложиться в случае неудачи и придется заново перебор запускать)
А уже занятые конверты того, задача на распределение всех открыток по имеющимся конвертам
4 НастяПРО
 
10.04.24
10:36
(2) не сработало. всю равно выводит по одной и той же итерации. нужно что бы при выполнении условия происходила запись, после происходила итерация циклов на + 1, и также происходил поиск по ранее заданному условию
5 Garykom
 
10.04.24
10:40
Для сокращения вариантов перебора можно использовать площадь (ширина*длина) открыток и конвертов
6 НастяПРО
 
10.04.24
10:47
Хорошо, но это не решает мою проблему.
7 Optan
 
10.04.24
10:52
А уже использованные конверты, из перебора не нужно убирать?
И прерывать перебор для этой открытки?
8 Garykom
 
10.04.24
10:55
(6) Вероятно потому что кто еще не освоил алгоритмы и забыл вставить Прервать внутри условия?
После Сообщить.
Это кроме (2).

Чтобы внутренний цикл (по конвертам) закончился и продолжился внешний (по открыткам) далее.
Это если надо на каждую открытку только один подходящий конверт вывести вместо всех подходящих.
9 НастяПРО
 
10.04.24
10:55
(7) В том-то и дело, что их нужно убирать и как-то записывать ниже уже следующую пару открытки и соответствующему ей конверту. Но как это сделать? У меня записываются только одно и то же значение
10 НастяПРО
 
10.04.24
10:58
Выводит то же самое, одинаковые значения
11 Garykom
 
10.04.24
10:58
(9) Для начала у тебя нет в документах полей для пометок уже использованных конвертов и какая открытка с каким конвертом связана.
Значит что?
Надо добавить еще нечто где это будет помечаться и связываться!
12 НастяПРО
 
10.04.24
10:59
(11) В задании сказано, что конфигурацию нельзя изменять, нужно только создать отчет
13 Garykom
 
10.04.24
11:00
14 Garykom
 
10.04.24
11:02
Для табличной части (ТЧ) самое близкое это ТаблицаЗначений (ТЗ)
15 boev82
 
10.04.24
11:03
А что мешает такую пометку в таблицу значений конвертов добавить? И еще в коде идет присвоение одного и того же значения "Конверт.Наменование" и "Открытка.Наменование" для разных областей. Тут нужен какой-то счетчик
16 НастяПРО
 
10.04.24
11:04
(15) Хорошо, а как мне его сделать?
17 Garykom
 
10.04.24
11:06
Методом "изучить учебник" уже пробовали?
18 НастяПРО
 
10.04.24
11:07
(17) Я преподаватель, книжку я уже изучила
19 boev82
 
10.04.24
11:10
Мне кажется мы кормим тролля
20 Sorento
 
10.04.24
11:12
(19), ты прочитал род занятий?))
21 Garykom
 
10.04.24
11:13
ТЗ = ТЧ.Выгрузить(); // создает ТЗ из ТЧ
ТЗ.Колонки.Добавить("Открытка"); // Добавляет новую колонку Открытка
22 НастяПРО
 
10.04.24
11:18
Все, не надо больше, я умная, разобралась. ББ всем
23 maxab72
 
10.04.24
11:28
(3) Просто перебор надо начинать с самых больших открыток. Тогда они займут самые большие конверты, а для мелочи останутся что помельче. Это значительно сократит перебор.
Эта задача очень похожа на другую, дано N видов деталей, и M  размеров коробок. Есть таблица, в какой размер коробки сколько деталей влазит. Есть стоимость каждой коробки, есть расценка за упаковку 1 коробки любого размера. Дано количество деталей всех типов. Задача минимизировать затраты на упаковку - т.е. стоимость коробок + стоимость работы упаковщика.
24 НастяПРО
 
10.04.24
11:29
(23) Да все, все, успокойся, малец. Сделала уже, я умничка
25 Garykom
 
10.04.24
11:30
(23) Самые большие по какому измерению?
Есть же ширина и длина ))
26 Garykom
 
10.04.24
11:32
(24) Неа.
Ты пропустила что может быть всего один вариант сопоставления.
Или даже не быть совсем варианта распределить все.

Ибо маленькие открытки можно легко засунуть в большие конверты, заняв их.
Но на большие открытки не останется больших конвертов...
27 НастяПРО
 
10.04.24
11:33
(25) Да узбагойтез уже, сделала, сделала. САМА!!!!!
28 НастяПРО
 
10.04.24
11:34
(2) Отдельную благодарность от всего Ямало-Ненецкого автономного округа выражаю этому человеку. Запишу тебя в список наследников. Квартира отойдет ему.
29 Михаил Козлов
 
10.04.24
19:00
(26) Я так понял, что она просто получает таблицу, какие открытки в какие конверты помещаются. Типа матрицы (по горизонтали открытки, по вертикали конверты и на пересечении стоит + или -, в зависимости от того помещается ли).
Если нужно закупить конверты под открытки, тогда просто: покупаем минимальные по размеру под количество открыток.
Если нужно распределить по имеющимся конвертам, тогда можно говорить об "оптимизации".
30 Garykom
 
10.04.24
19:03
(29) Открытки и конверты
Нужно разработат внешний отчет, который по всем отраженным в ИБ документам определит, какие открытки в какие конверты можно поместить для выполнения рассылки, при условии, что открытки нельзя сгибать, но поворачивать можно как угодно. При этом надо постараться, чтобы число неотправленных открыток было минимальным.
31 Михаил Козлов
 
10.04.24
19:23
(30) Не указано, что по конвертам есть ограничения.
Не указано открытка какого размера нужна для документа.
32 Михаил Козлов
 
10.04.24
19:25
(30) Извините, не обратил внимания на ссылку на тему.
Закон Брукера: Даже маленькая практика стоит большой теории.