Вывести прайс в макет

1. Flipp 23.05.19 07:18 Сейчас в теме
Есть такой вопрос. У одной номенклатуры есть несколько "цветов" и "размеров". Запросом достается номенклатура,цвета,количество(все выводится в тз на форму). Теперь нужно вывести в макет данные прайса. Но таким образом, чтоб отображалась номенклатура и в каждой последующей строчке все цвета ей принадлежащие, потом снова номенклатура и цвета. Подскажите как это правильно сделать, как правильно обойти циклом тз!? Не могу сообразить как условие правильно поставить, чтоб выводить сначала всё по одной номенклатуре, потом по другой!? При этом же еще нужно как-то не вывести повторные, не знаю убрать в какой-то массив, те строки, что мы уже вывели. Или я в неправильном направлении шагаю!? Подскажите, пожалуйста.
По теме из базы знаний
Найденные решения
22. dhurricane 23.05.19 13:22 Сейчас в теме
(19) Наверное, ничего путного, извините. Есть небольшой набросок, но он так и прости оптимизации. Попробуйте, может Вам подойдет:
ТабДокумент = Новый ТабличныйДокумент;

// Макеты областей печати
ОблСтрокаТовара     = Макет.ПолучитьОбласть("СтрокаТовара|КолонкаТовара");
ОблСтрокаЦвета      = Макет.ПолучитьОбласть("СтрокаЦвета|КолонкаТовара");
ОблЗаголовокРазмера = Макет.ПолучитьОбласть("СтрокаТовара|КолонкаРазмера");
ОблСтрокаРазмера    = Макет.ПолучитьОбласть("СтрокаЦвета|КолонкаРазмера");

// Получим список всех размеров в исходной таблице.
КоллекцияРазмеров = ОбщегоНазначения.ВыгрузитьКолонку(Объект.Товары, "Размер", Истина);

// Теперь всю номенклатуру прайса
КоллекцияНоменклатуры = ОбщегоНазначения.ВыгрузитьКолонку(Объект.Товары, "Номенклатура", Истина);

// Начинаем вывод прайса
Для каждого Номенклатура Из КоллекцияНоменклатуры Цикл
	
	// Заголовок с номенклатурой и всеми вариантами размеров
	ОблСтрокаТовара.Параметры.Номенклатура = Номенклатура;
	ТабДокумент.Вывести(ОблСтрокаТовара);
	
	Для каждого Размер Из КоллекцияРазмеров Цикл
		ОблЗаголовокРазмера.Параметры.Размер = Размер;
		ТабДокумент.Присоединить(ОблЗаголовокРазмера);
	КонецЦикла; 
	
	// Таблица цветов и размеров текущей номенклатуры	
	СтрокиНоменклатуры = Объект.Товары.Выгрузить(Новый Структура("Номенклатура",Номенклатура));
	
	// Все цвета для данной номенклатуры
	КоллекцияЦветов = ОбщегоНазначения.ВыгрузитьКолонку(СтрокиНоменклатуры, "Цвет", Истина);
	
	Для каждого Цвет Из КоллекцияЦветов Цикл
		
		// Сначала выводим сам цвет
		ОблСтрокаЦвета.Параметры.Цвет = Цвет;
		ТабДокумент.Вывести(ОблСтрокаЦвета);
		
		// Теперь перебираем все размеры.
		СтруктураПоиска = Новый Структура("Цвет,Размер");
		Для каждого Размер Из КоллекцияРазмеров Цикл
			
			// Проверяем пару значений цвет-размер
			СтруктураПоиска.Цвет = Цвет;
			СтруктураПоиска.Размер = Размер;
			
			Если СтрокиНоменклатуры.НайтиСтроки(СтруктураПоиска).Количество() Тогда
				ОблСтрокаРазмера.ЦветФона = ЦветПоложительногоРезультата; // цвет с таким размером присутствует в прайсе
			Иначе
				ОблСтрокаРазмера.ЦветФона = ЦветОтрицательногоРезультата; // такого размера нет
			КонецЕсли;
			
			ТабДокумент.Присоединить(ОблСтрокаРазмера);
			
		КонецЦикла;
		
	КонецЦикла; 	
	
КонецЦикла; 
Показать
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. dhurricane 23.05.19 07:21 Сейчас в теме
(1) Уточните, пожалуйста, Вам необходимо работать именно с таблицей значений? Использовать дерево значений, либо иерархическую выборку из результата запроса не получится?
alex-l19041; +1 Ответить
4. Flipp 23.05.19 07:44 Сейчас в теме
(2)Предлагаете заменить тз на дерево значений на форме!?
6. dhurricane 23.05.19 07:53 Сейчас в теме
(4) Печатная форма формируется по данным таблицы формы? И еще вопрос: конфигурация типовая?
7. user5300 1015 23.05.19 07:59 Сейчас в теме
(4)
массив = неопределено;
Для каждого стр из ТЗ цикл
Если массив <> стр.номенклатура тогда
  макет.параметр.цвет = стр.цвет;
   массив = стр.номенклатура;
  табдок.Вывести(макет);
Иначе
 макет.параметр.цвет = стр.цвет;
 табдок.Присоеденить(макет);
Конеццикла;
Показать
8. Flipp 23.05.19 08:23 Сейчас в теме
Это чуть-чуть не то, мне кажется. Есть же еще колонки с размерами, они присоединяются справа в макете. Есть строки тз: номенкл/цвет/размер
То есть, в тз может быть так:
Носки желтые 42р
Носки желтые 43р
Носки красные 44р
Носки синие 52р.

И выглядеть в итоге должно как-то так
Носки 42 43 44 52
Желтые
Синие
Красные

Рубашка 42 43 44 52
Белая
Черная
Серая
9. Flipp 23.05.19 08:24 Сейчас в теме
(7)Колонки с размерами присоединяются, все ок. А вот как номенклатуру с разбивкой по цветам вывести не могу сообразить...(((
10. dhurricane 23.05.19 08:28 Сейчас в теме
(9) Так Вам кросс-таблица нужна? Т.е. еще на пересечении колонок с размером и цветом потребуется поставить какую-нибудь отметку, сигнализирующую, что пара "цвет-размер" есть в исходной таблице? Можете хоть как-нибудь нарисовать конечный результат для пары номенклатур с различными наборами цветов и размеров?
12. Flipp 23.05.19 08:39 Сейчас в теме
13. Flipp 23.05.19 08:41 Сейчас в теме
(10)
Прикрепленные файлы:
14. dhurricane 23.05.19 09:04 Сейчас в теме
(13) Такс. Значит в колонках не сами размеры, а их диапазоны? Или же это и есть значения размеров? Для всех выводимых номенклатурных позиций набор значений размеров одинаковый?
15. Flipp 23.05.19 09:15 Сейчас в теме
(14)Колонки указывают имеющиеся размеры(все что есть в опр. папке), а на пересечении раскрашивается:
Есть в наличии
Нет в наличии
Не существует товарной позиции (нет такого размера у данной номенклатуры)
16. dhurricane 23.05.19 09:18 Сейчас в теме
(15) Ну и последний вопрос. В исходной таблице данные каким-либо образом отсортированы? На это можно будет положиться при выводе печатной формы? И если отсортированы, то каким образом?
18. Flipp 23.05.19 09:34 Сейчас в теме
(16)Нет не отсортированы, есть только одна группировка Характеристика(групповое): цвет,размер(макс) в запросе.
19. Flipp 23.05.19 11:23 Сейчас в теме
(16)Ну, так что, подскажешь что нибудь?
22. dhurricane 23.05.19 13:22 Сейчас в теме
(19) Наверное, ничего путного, извините. Есть небольшой набросок, но он так и прости оптимизации. Попробуйте, может Вам подойдет:
ТабДокумент = Новый ТабличныйДокумент;

// Макеты областей печати
ОблСтрокаТовара     = Макет.ПолучитьОбласть("СтрокаТовара|КолонкаТовара");
ОблСтрокаЦвета      = Макет.ПолучитьОбласть("СтрокаЦвета|КолонкаТовара");
ОблЗаголовокРазмера = Макет.ПолучитьОбласть("СтрокаТовара|КолонкаРазмера");
ОблСтрокаРазмера    = Макет.ПолучитьОбласть("СтрокаЦвета|КолонкаРазмера");

// Получим список всех размеров в исходной таблице.
КоллекцияРазмеров = ОбщегоНазначения.ВыгрузитьКолонку(Объект.Товары, "Размер", Истина);

// Теперь всю номенклатуру прайса
КоллекцияНоменклатуры = ОбщегоНазначения.ВыгрузитьКолонку(Объект.Товары, "Номенклатура", Истина);

// Начинаем вывод прайса
Для каждого Номенклатура Из КоллекцияНоменклатуры Цикл
	
	// Заголовок с номенклатурой и всеми вариантами размеров
	ОблСтрокаТовара.Параметры.Номенклатура = Номенклатура;
	ТабДокумент.Вывести(ОблСтрокаТовара);
	
	Для каждого Размер Из КоллекцияРазмеров Цикл
		ОблЗаголовокРазмера.Параметры.Размер = Размер;
		ТабДокумент.Присоединить(ОблЗаголовокРазмера);
	КонецЦикла; 
	
	// Таблица цветов и размеров текущей номенклатуры	
	СтрокиНоменклатуры = Объект.Товары.Выгрузить(Новый Структура("Номенклатура",Номенклатура));
	
	// Все цвета для данной номенклатуры
	КоллекцияЦветов = ОбщегоНазначения.ВыгрузитьКолонку(СтрокиНоменклатуры, "Цвет", Истина);
	
	Для каждого Цвет Из КоллекцияЦветов Цикл
		
		// Сначала выводим сам цвет
		ОблСтрокаЦвета.Параметры.Цвет = Цвет;
		ТабДокумент.Вывести(ОблСтрокаЦвета);
		
		// Теперь перебираем все размеры.
		СтруктураПоиска = Новый Структура("Цвет,Размер");
		Для каждого Размер Из КоллекцияРазмеров Цикл
			
			// Проверяем пару значений цвет-размер
			СтруктураПоиска.Цвет = Цвет;
			СтруктураПоиска.Размер = Размер;
			
			Если СтрокиНоменклатуры.НайтиСтроки(СтруктураПоиска).Количество() Тогда
				ОблСтрокаРазмера.ЦветФона = ЦветПоложительногоРезультата; // цвет с таким размером присутствует в прайсе
			Иначе
				ОблСтрокаРазмера.ЦветФона = ЦветОтрицательногоРезультата; // такого размера нет
			КонецЕсли;
			
			ТабДокумент.Присоединить(ОблСтрокаРазмера);
			
		КонецЦикла;
		
	КонецЦикла; 	
	
КонецЦикла; 
Показать
23. Flipp 23.05.19 14:17 Сейчас в теме
Спасибо огроменное, то, что надо. Понятно стало как это доделать, переписал немного и стало то, что надо.
11. user5300 1015 23.05.19 08:38 Сейчас в теме
(9)

массив = неопределено;                               ///Для номенклатуры
МассивЦветов = неопределено;                   ///для цветов
Для каждого стр из ТЗ цикл
Если массив <> стр.номенклатура тогда      ///первая номенклатура выводится
  макет.параметр.Размер= стр.Размер;
  МассивЦветов.Добавить(стр.Цвет);
   массив = стр.номенклатура;
  табдок.Вывести(макет);
Иначе                                                              ////Остальные заполняются
 макет.параметр.Размер= стр.Размер;
 МассивЦветов.Добавить(стр.Цвет);
 табдок.Присоеденить(макет);
Конецесли;
Если массив = ТЗ [ТЗ .Индекс(стр)-1].Номенклатура тогда    ////Если очередь дошла до ///следующей номенклатуры, сначала выводятся цвета
 Для каждого масс из массивЦветов цикл
   макет.параметр.Размер= стр.Цвет;
   табдок.Вывести(макет);
 Конеццикла;
Конецессли
Конеццикла;
Показать
20. Flipp 23.05.19 13:17 Сейчас в теме
3. goodyeahh 23.05.19 07:43 Сейчас в теме
Свойства как реквизиты номенклатуры или через ПВХ? Если реквизиты, тогда в макете прописать строкиТЧ номенклатура-свойство1-цена, --свойство2-цена. Группировка по номенклатуре и реквизитам, в которое свойства вписаны.
По-моему так, могу ошибаться.
5. Flipp 23.05.19 07:46 Сейчас в теме
(3)Вообще не дошло, о чем вы. Цвет- это ХарактеристикиНоменклатурыДополнительныеРеквизиты.Свойство, а не реквизит номенклатуры...если вы об этом спрашивали
17. mrx2012 23.05.19 09:28 Сейчас в теме
Можно попробовать так:

	ТЗ = Новый ТаблицаЗначений;	
	ТЗ.Колонки.Добавить("Номенклатура");
	ТЗ.Колонки.Добавить("Размер");
	ТЗ.Колонки.Добавить("Цвет");
	ТЗ.Колонки.Добавить("Цена");

	ТЗНоменклатура = Тз.Скопировать(,"Номенклатура");
	ТЗНоменклатура.Свернуть("Номенклатура");
	ТЗРазмер = Тз.Скопировать(,"Номенклатура,Размер");
	ТЗРазмер.Свернуть("Номенклатура,Размер");

	
	Отбор1 = Новый Структура("Номенклатура");
	Отбор2 = Новый Структура("Номенклатура,Размер");

	Для каждого СтрНоменклатура Из ТЗНоменклатура Цикл
		ЗаполнитьЗначенияСвойств(Отбор1,СтрНоменклатура);
		Для каждого СтрРазмер Из ТЗРазмер.НайтиСтроки(Отбор2) Цикл
			ЗаполнитьЗначенияСвойств(Отбор2,СтрРазмер);
			Для каждого СтрДетальныеЗаписи Из ТЗРазмер.НайтиСтроки(Отбор2) Цикл
				//
			КонецЦикла;
		КонецЦикла;	
		
	КонецЦикла;
Показать
21. Flipp 23.05.19 13:20 Сейчас в теме
Черт, как ни стараюсь, не получается так как на картинке(((
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот