1. В схеме компонокви добавляем вывод поля ЦеныНоменклатурыСрезПоследних.Номенклатура.ФайлКартинки КАК Изображение в итоговый запрос/
2. Добавляем условие в отчет пакет "Цены" В таблицу "ЦеныСрезПоследних"
ВидЦены В (&ВидыЦен)
И Номенклатура В (&СписокТоваров)
3. Создаем форму отчета
4. На форму добавляем реквизит список значений "СписокТоваров", размещаем его на форму отчета. Делаем этот реквизит только для просмотра и убираем все команда кроме удалить.
5. Создаем команду формы "ПодборТоваров", размещаем ее для списка товаров.
6. Добавляем код в форму и привязываем его к контролам
&НаКлиенте
Процедура ПодборТоваров(Команда)
ФормаВыбораТоваров = ПолучитьФорму("Справочник.Номенклатура.ФормаВыбора", , ЭтаФорма);
ЭлементОтбора = ФормаВыбораТоваров.Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ФайлКартинки");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.НеРавно;
ЭлементОтбора.Использование = Истина;
ЭлементОтбора.ПравоеЗначение = ПредопределенноеЗначение("Справочник.НоменклатураПрисоединенныеФайлы.ПустаяСсылка");
ФормаВыбораТоваров.ЗакрыватьПриВыборе = Ложь;
ФормаВыбораТоваров.Открыть();
КонецПроцедуры
&НаКлиенте
Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора)
Если ТаблицаТоваров.Количество() > 14 Тогда
ОбщегоНазначенияКлиентСервер.СообщитьПользователю("Нельзя выбрать больше 15 элементов одновременно.");
Возврат;
КонецЕсли;
Если ТипЗнч(ВыбранноеЗначение) = Тип("СправочникСсылка.Номенклатура") Тогда
ЗначениеВСписке = СписокТоваров.НайтиПоЗначению(ВыбранноеЗначение);
Если ЗначениеВСписке = Неопределено Тогда
СписокТоваров.Добавить(ВыбранноеЗначение, ВыбранноеЗначение.Наименование);
УстановитьСписокТоваров();
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура УстановитьСписокТоваров()
НастройкаСпискаТоваров = КомпоновкаДанныхКлиентСервер.ПолучитьПараметр(Отчет.КомпоновщикНастроек.Настройки, "СписокНоменклатуры");
Если НастройкаСпискаТоваров <> Неопределено Тогда
НастройкаСпискаТоваров.Использование = Истина;
НастройкаСпискаТоваров.Значение = СписокТоваров;
КонецЕсли;
КонецПроцедуры
7. Добавляем в модуль отчета в конец функции "ПриКомпоновкеРезультата" код
// Решение задачи
СтандартнаяОбработка = Ложь;
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
Макет = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, КомпоновщикНастроек.ПолучитьНастройки(), ДанныеРасшифровки);
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(Макет, , ДанныеРасшифровки);
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
ПроцессорВывода.Вывести(ПроцессорКомпоновки);
//Корректировка документа результата
КолКолонок = ДокументРезультат.ШиринаТаблицы;
КолСтрок = ДокументРезультат.ВысотаТаблицы;
Для строка = 1 по КолСтрок Цикл
Для колонка = 1 по КолКолонок Цикл
ТекЯчейка = ДокументРезультат.Область(строка, Колонка);
Если ТекЯчейка.Расшифровка <> Неопределено Тогда
ПоляРасшифровки = ДанныеРасшифровки.Элементы[ТекЯчейка.Расшифровка].ПолучитьПоля();
Если ПоляРасшифровки.Количество() > 0 Тогда
ТекПолеРасшифровки = ПоляРасшифровки[0].Значение;
Если ТипЗнч(ТекПолеРасшифровки) = Тип("СправочникСсылка.НоменклатураПрисоединенныеФайлы")
и ЗначениеЗаполнено(ТекПолеРасшифровки) Тогда
Рисунок = ПрисоединенныеФайлы.ПолучитьДвоичныеДанныеФайла(ТекПолеРасшифровки);
Если Рисунок <> Неопределено Тогда
ТекЯчейка.ВысотаСтроки = 100;
ТекЯчейка.ШиринаКолонки = 20;
Рис = ДокументРезультат.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Картинка);
Рис.РазмерКартинки = РазмерКартинки.Пропорционально;
Рис.Картинка = Новый картинка(Рисунок);
Рис.Расположить(ТекЯчейка);
Прервать;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЦикла;
8. Добавляем отчет в конфигурацию и ставим в техже подсистемах, что и родной отчет
9. Запускаем конфигурацию со строкой "/С ЗапуститьОбновлениеИнформационнойБазы" "Сервис-Параметры-Запуск 1С- Параметры запуска".
2. Добавляем условие в отчет пакет "Цены" В таблицу "ЦеныСрезПоследних"
ВидЦены В (&ВидыЦен)
И Номенклатура В (&СписокТоваров)
3. Создаем форму отчета
4. На форму добавляем реквизит список значений "СписокТоваров", размещаем его на форму отчета. Делаем этот реквизит только для просмотра и убираем все команда кроме удалить.
5. Создаем команду формы "ПодборТоваров", размещаем ее для списка товаров.
6. Добавляем код в форму и привязываем его к контролам
&НаКлиенте
Процедура ПодборТоваров(Команда)
ФормаВыбораТоваров = ПолучитьФорму("Справочник.Номенклатура.ФормаВыбора", , ЭтаФорма);
ЭлементОтбора = ФормаВыбораТоваров.Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных"));
ЭлементОтбора.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("ФайлКартинки");
ЭлементОтбора.ВидСравнения = ВидСравненияКомпоновкиДанных.НеРавно;
ЭлементОтбора.Использование = Истина;
ЭлементОтбора.ПравоеЗначение = ПредопределенноеЗначение("Справочник.НоменклатураПрисоединенныеФайлы.ПустаяСсылка");
ФормаВыбораТоваров.ЗакрыватьПриВыборе = Ложь;
ФормаВыбораТоваров.Открыть();
КонецПроцедуры
&НаКлиенте
Процедура ОбработкаВыбора(ВыбранноеЗначение, ИсточникВыбора)
Если ТаблицаТоваров.Количество() > 14 Тогда
ОбщегоНазначенияКлиентСервер.СообщитьПользователю("Нельзя выбрать больше 15 элементов одновременно.");
Возврат;
КонецЕсли;
Если ТипЗнч(ВыбранноеЗначение) = Тип("СправочникСсылка.Номенклатура") Тогда
ЗначениеВСписке = СписокТоваров.НайтиПоЗначению(ВыбранноеЗначение);
Если ЗначениеВСписке = Неопределено Тогда
СписокТоваров.Добавить(ВыбранноеЗначение, ВыбранноеЗначение.Наименование);
УстановитьСписокТоваров();
КонецЕсли;
КонецЕсли;
КонецПроцедуры
&НаКлиенте
Процедура УстановитьСписокТоваров()
НастройкаСпискаТоваров = КомпоновкаДанныхКлиентСервер.ПолучитьПараметр(Отчет.КомпоновщикНастроек.Настройки, "СписокНоменклатуры");
Если НастройкаСпискаТоваров <> Неопределено Тогда
НастройкаСпискаТоваров.Использование = Истина;
НастройкаСпискаТоваров.Значение = СписокТоваров;
КонецЕсли;
КонецПроцедуры
7. Добавляем в модуль отчета в конец функции "ПриКомпоновкеРезультата" код
// Решение задачи
СтандартнаяОбработка = Ложь;
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
Макет = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, КомпоновщикНастроек.ПолучитьНастройки(), ДанныеРасшифровки);
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновки.Инициализировать(Макет, , ДанныеРасшифровки);
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
ПроцессорВывода.Вывести(ПроцессорКомпоновки);
//Корректировка документа результата
КолКолонок = ДокументРезультат.ШиринаТаблицы;
КолСтрок = ДокументРезультат.ВысотаТаблицы;
Для строка = 1 по КолСтрок Цикл
Для колонка = 1 по КолКолонок Цикл
ТекЯчейка = ДокументРезультат.Область(строка, Колонка);
Если ТекЯчейка.Расшифровка <> Неопределено Тогда
ПоляРасшифровки = ДанныеРасшифровки.Элементы[ТекЯчейка.Расшифровка].ПолучитьПоля();
Если ПоляРасшифровки.Количество() > 0 Тогда
ТекПолеРасшифровки = ПоляРасшифровки[0].Значение;
Если ТипЗнч(ТекПолеРасшифровки) = Тип("СправочникСсылка.НоменклатураПрисоединенныеФайлы")
и ЗначениеЗаполнено(ТекПолеРасшифровки) Тогда
Рисунок = ПрисоединенныеФайлы.ПолучитьДвоичныеДанныеФайла(ТекПолеРасшифровки);
Если Рисунок <> Неопределено Тогда
ТекЯчейка.ВысотаСтроки = 100;
ТекЯчейка.ШиринаКолонки = 20;
Рис = ДокументРезультат.Рисунки.Добавить(ТипРисункаТабличногоДокумента.Картинка);
Рис.РазмерКартинки = РазмерКартинки.Пропорционально;
Рис.Картинка = Новый картинка(Рисунок);
Рис.Расположить(ТекЯчейка);
Прервать;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЦикла;
КонецЦикла;
8. Добавляем отчет в конфигурацию и ставим в техже подсистемах, что и родной отчет
9. Запускаем конфигурацию со строкой "/С ЗапуститьОбновлениеИнформационнойБазы" "Сервис-Параметры-Запуск 1С- Параметры запуска".
Комментариев нет:
Отправить комментарий