ТекстЗапроса = " |ВЫБРАТЬ | ИСТИНА КАК Печать, | СпрНоменклатура.Номенклатура КАК Номенклатура, | СпрНоменклатура.ХарактеристикаНоменклатуры КАК ХарактеристикаНоменклатуры, | СпрНоменклатура.Номенклатура.ЕдиницаХраненияОстатков КАК ЕдиницаИзмерения, | 0 КАК Цена, | 1 КАК Количество |ИЗ | (ВЫБРАТЬ | СпрНоменклатура.Ссылка КАК Номенклатура, | &ПустаяХарактеристика КАК ХарактеристикаНоменклатуры | ИЗ | Справочник.Номенклатура КАК СпрНоменклатура | ГДЕ НЕ СпрНоменклатура.ЭтоГруппа | {ГДЕ | СпрНоменклатура.Ссылка.* КАК Номенклатура} | ОБЪЕДИНИТЬ ВСЕ | ВЫБРАТЬ | СпрХарактеристики.Владелец, | СпрХарактеристики.Ссылка | ИЗ | Справочник.ХарактеристикиНоменклатуры КАК СпрХарактеристики | {ГДЕ | СпрХарактеристики.Владелец.* КАК Номенклатура, | СпрХарактеристики.Ссылка.* КАК ХарактеристикаНоменклатуры} | ) КАК СпрНоменклатура |";
Если ТолькоИмеющиесяВНаличии Тогда ТекстЗапроса = ТекстЗапроса + " |ЛЕВОЕ СОЕДИНЕНИЕ | (ВЫБРАТЬ | НаСкладе.Номенклатура, | НаСкладе.ХарактеристикаНоменклатуры, | СУММА(НаСкладе.Количество) КАК Количество | ИЗ | (ВЫБРАТЬ | НаСкладе.Номенклатура, | НаСкладе.ХарактеристикаНоменклатуры, | НаСкладе.КоличествоОстаток КАК Количество | ИЗ | РегистрНакопления.ТоварыНаСкладах.Остатки(, {Номенклатура.* КАК Номенклатура, | ХарактеристикаНоменклатуры.* КАК ХарактеристикаНоменклатуры, | Склад.* КАК Склад}) КАК НаСкладе | ОБЪЕДИНИТЬ ВСЕ | ВЫБРАТЬ | ВРознице.Номенклатура, | ВРознице.ХарактеристикаНоменклатуры, | ВРознице.КоличествоОстаток КАК Количество | ИЗ | РегистрНакопления.ТоварыВРознице.Остатки(, {Номенклатура.* КАК Номенклатура, | ХарактеристикаНоменклатуры.* КАК ХарактеристикаНоменклатуры, | Склад.* КАК Склад}) КАК ВРознице | ОБЪЕДИНИТЬ ВСЕ | ВЫБРАТЬ | ВНТТ.Номенклатура, | ВНТТ.ХарактеристикаНоменклатуры, | ВНТТ.КоличествоОстаток КАК Количество | ИЗ | РегистрНакопления.ТоварыВНТТ.Остатки(, {Номенклатура.* КАК Номенклатура, | ХарактеристикаНоменклатуры.* КАК ХарактеристикаНоменклатуры, | Склад.* КАК Склад}) КАК ВНТТ | ) КАК НаСкладе | СГРУППИРОВАТЬ ПО | НаСкладе.Номенклатура, | НаСкладе.ХарактеристикаНоменклатуры | ) КАК НаСкладе |ПО | СпрНоменклатура.Номенклатура = НаСкладе.Номенклатура | И СпрНоменклатура.ХарактеристикаНоменклатуры = НаСкладе.ХарактеристикаНоменклатуры |ГДЕ | ЕСТЬNULL(НаСкладе.Количество, 0) > 0 |"; КонецЕсли;
// Соответствие имен полей в запросе и их представлений в отчете. СтруктураПредставлениеПолей = Новый Структура( "Номенклатура, ХарактеристикаНоменклатуры, Склад", "Номенклатура", "Характеристика номенклатуры", "Склад");
ПостроительОтчета.Текст = ТекстЗапроса;
ПостроительОтчета.ЗаполнитьНастройки();
// Создадим список доступных отборов. СоответствиеДоступныхОтборов = Новый Соответствие; СоответствиеДоступныхОтборов.Вставить("Номенклатура", 0); СоответствиеДоступныхОтборов.Вставить("ХарактеристикаНоменклатуры", 0); СоответствиеДоступныхОтборов.Вставить("Склад", 0);
Для Каждого ДоступноеПоле Из ПостроительОтчета.ДоступныеПоля Цикл Если СоответствиеДоступныхОтборов[ДоступноеПоле.Имя] =Неопределено Тогда ДоступноеПоле.Отбор = Ложь; Иначе ДоступноеПоле.Отбор = Истина; КонецЕсли; КонецЦикла;
// Создадим массив отборов. МассивОтбора = Новый Массив; МассивОтбора.Добавить("Номенклатура"); МассивОтбора.Добавить("ХарактеристикаНоменклатуры");
Если ТолькоИмеющиесяВНаличии Тогда МассивОтбора.Добавить("Склад"); КонецЕсли;
Для Каждого ЭлементОтбора Из МассивОтбора Цикл Если ПостроительОтчета.Отбор.Найти(ЭлементОтбора) = Неопределено Тогда ПостроительОтчета.Отбор.Добавить(ЭлементОтбора); КонецЕсли; КонецЦикла;
Для Каждого СтрокаЦен Из СтрокиЦен Цикл Если СтрокаЦен.ХарактеристикаНоменклатуры = ПустаяХарактеристика Тогда СтрокаБезХарактеристики = СтрокаЦен; ИначеЕсли СтрокаЦен.ХарактеристикаНоменклатуры = ХарактеристикаНоменклатуры Тогда СтрокаСХарактеристикой = СтрокаЦен; КонецЕсли; КонецЦикла;
Если СтрокаСХарактеристикой <> Неопределено Тогда НайденнаяСтрока = СтрокаСХарактеристикой; ИначеЕсли СтрокаБезХарактеристики <> Неопределено Тогда НайденнаяСтрока = СтрокаБезХарактеристики; Иначе НайденнаяСтрока = Неопределено; КонецЕсли;
СтрокаТовара.ЕдиницаИзмерения = НайденнаяСтрока.ЕдиницаИзмеренияЦены; Иначе Цена = 0; КонецЕсли;
СтрокаТовара.Цена = Цена; КонецЦикла;
КонецПроцедуры // ПерезаполнитьЦены()
// Функция формирует табличный документ - печатная форма ценника. // // Возвращаемое значение: // ТабличныйДокумент - сформированный табличный документ или Неопределено, если есть ошибки. // Функция ПечатьЦенника() Экспорт
Если НЕ ЗначениеЗаполнено(Организация) Тогда Предупреждение("Не выбрана организация!"); Возврат Неопределено; КонецЕсли;
ДопКолонка = Константы.ДополнительнаяКолонкаПечатныхФормДокументов.Получить(); Если ДопКолонка = Перечисления.ДополнительнаяКолонкаПечатныхФормДокументов.Артикул Тогда ТоварКод = "Артикул"; ИначеЕсли ДопКолонка = Перечисления.ДополнительнаяКолонкаПечатныхФормДокументов.Код Тогда ТоварКод = "Код"; Иначе ТоварКод = ""; КонецЕсли;
Для Каждого СтрокаТаблицы Из Товары Цикл Если СтрокаТаблицы.Печать Тогда Для Тмп = 1 По СтрокаТаблицы.Количество Цикл ОбластьЦенника.Параметры.Заполнить(СтрокаТаблицы); ОбластьЦенника.Параметры.НоменклатураНаименование = СтрокаТаблицы.Номенклатура.НаименованиеПолное + ?(ТоварКод <> "", " " + СокрЛП(СтрокаТаблицы.Номенклатура[ТоварКод]), ""); ОбластьЦенника.Параметры.ХарактеристикаНаименование = СтрокаТаблицы.ХарактеристикаНоменклатуры; ОбластьЦенника.Параметры.ЕдиницаНаименование = СтрокаТаблицы.ЕдиницаИзмерения; ОбластьЦенника.Параметры.Цена = ОбщегоНазначения.ФорматСумм(СтрокаТаблицы.Цена, Валюта, "00"); ОбластьЦенника.Параметры.ДатаПечати = ДатаПечати; ОбластьЦенника.Параметры.Организация = Организация; ОбластьЦенника.Параметры.ОрганизацияНаименование = Организация;
Если ТекСтолбец = 0 Тогда ТабДокумент.Вывести(ОбластьЦенника); Иначе ТабДокумент.Присоединить(ОбластьЦенника); КонецЕсли;
ТекСтолбец = ТекСтолбец + 1;
Если ТекСтолбец = 5 Тогда ТекСтрока = ТекСтрока + 1; ТекСтолбец = 0; КонецЕсли;
Если ТекСтрока = 3 Тогда ТекСтрока = 0; ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц(); КонецЕсли; КонецЦикла; КонецЕсли; КонецЦикла;
ТабДокумент.ТолькоПросмотр = Истина;
Возврат ТабДокумент;
КонецФункции // ПечатьЦенника()
// Функция выполняет проверку параметров для заполнения цен. // // Возвращаемое значение: // Булево - Истина, если все параметры заданы. // Функция ПроверитьПараметрыЗаполненияЦен() Экспорт
Если НЕ ЗначениеЗаполнено(ТипЦен) Тогда ОбщегоНазначения.СообщитьОбОшибке("Не выбран тип цен! Укажите тип цен и повторите перезаполнение цен."); Возврат Ложь; КонецЕсли;
Если НЕ ЗначениеЗаполнено(Валюта) Тогда ОбщегоНазначения.СообщитьОбОшибке("Не выбрана валюта! Укажите валюту и повторите перезаполнение цен."); Возврат Ложь; КонецЕсли;
А по-поводу свойства, делается запрос к РегиструСведений "ЗначенияСвойствОбъектов", устанавливается условие по объекту и свойству и все
Запрос такого плана:
Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ ЗначенияСвойствОбъектов.Значение ИЗ РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов ГДЕ ЗначенияСвойствОбъектов.Объект = &Объект И ЗначенияСвойствОбъектов.Свойство = &Свойство";
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!