PDA

Просмотр полной версии : Функции, запросы



fox186
09.02.2017, 11:12
Необходимо вывести на печать табличную часть, исключив Эталон. Создал функцию, которая выполняет запрос, поиска эталона, затем вызвал функцию при выводе табличной части на печать, чтобы если в табличной части есть эталон, то он не отображался в табличном документе.

Помогите! Не могу разобраться почему в табличном документе На печать не исключается Эталон, всегда выдает таблицу вместе с Эталоном.



Функция ПроверкаНаЭталон(Ном) Экспорт
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("ТекущийЭлемент", ЭтотОбъект.Ссылка);
Запрос.Текст = "ВЫБРАТЬ
| АналогиНоменклатура.Этало� �,
| СпецификацииНоменклатурыИ сходныеКомплектующие.Номе� �клатура
|ИЗ
| Справочник.АналогиНоменкл� �тура КАК АналогиНоменклатура,
| Справочник.СпецификацииНо� �енклатуры.ИсходныеКомплек тующие КАК СпецификацииНоменклатурыИ сходныеКомплектующие
|ГДЕ
| СпецификацииНоменклатурыИ сходныеКомплектующие.Номе� �клатура = АналогиНоменклатура.Этало� �";

Выборка = Запрос.Выполнить().Выбрать() ;
Пока Выборка.Следующий() = Истина Цикл
Возврат Истина;
Прервать;
КонецЦикла;
Возврат ложь

КонецФункции


Функция ПечатьБезАналогов()
ТабДокумент = Новый ТабличныйДокумент;
ТабДокумент.ИмяПараметров� �ечати = "ПАРАМЕТРЫ_ПЕЧАТИ_БезАналог ов";

Макет = ПолучитьМакет("БезАналогов");
ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
ОбластьШапкаТаблицы = Макет.ПолучитьОбласть("ШапкаТаб");
ОбластьСтрокаТаблицы = Макет.ПолучитьОбласть("СтрокаТаб");

ОбластьШапка.Параметры.Наи менованиеСпецификации = Наименование;
ОбластьШапка.Параметры.Код Спецификации = Код;
ТабДокумент.Вывести(Област ьШапка);

ТабДокумент.Вывести(Област ьШапкаТаблицы);

Для Каждого СтрокаИсходныеКомпл Из ИсходныеКомплектующие Цикл
Если ПроверкаНаЭталон(СтрокаИс� �одныеКомпл.Номенклатура) И НЕ СтрокаИсходныеКомпл.Помет� �аНаУдаление Тогда
ОбластьСтрокаТаблицы.Пара� �етры.Код = СтрокаИсходныеКомпл.Номен� �латура.Артикул;
ОбластьСтрокаТаблицы.Пара� �етры.Наименование = СтрокаИсходныеКомпл.Номен� �латура.Наименование;
ОбластьСтрокаТаблицы.Пара� �етры.КолВИзд = СтрокаИсходныеКомпл.Колич� �ство;
ОбластьСтрокаТаблицы.Пара� �етры.ПоНорме = СтрокаИсходныеКомпл.Норма;
ОбластьСтрокаТаблицы.Пара� �етры.ЕдИзм = СтрокаИсходныеКомпл.Едини� �аИзмерения.ЕдиницаПоКласс ификатору.Наименование;
ТабДокумент.Вывести(Област ьСтрокаТаблицы);
//ОбщегоНазначения.Сообщени� �("1", СтатусСообщения.Важное);
Иначе
//ОбщегоНазначения.Сообщени� �("0", СтатусСообщения.Важное);
ОбластьСтрокаТаблицы.Пара� �етры.Код = NULL;
ОбластьСтрокаТаблицы.Пара� �етры.Наименование = NULL;;
ОбластьСтрокаТаблицы.Пара� �етры.КолВИзд = NULL;
ОбластьСтрокаТаблицы.Пара� �етры.ПоНорме = NULL;
ОбластьСтрокаТаблицы.Пара� �етры.ЕдИзм = NULL;
ТабДокумент.Вывести(Област ьСтрокаТаблицы);
КонецЕсли;
КонецЦикла;
Возврат ТабДокумент;
КонецФункции

avm3110
09.02.2017, 14:02
Мля... Выполнение запроса в цикле - охринеть.. За такое при сдаче в 1С ставят сразу двойку и выгоняют с экзамена

ПыСы. у тебя вызов ПроверкаНаЭталон(Ном)
значит Текущая номенклатура у тебя находится в переменной Ном

Так?
А в запрос ты устанавливаешь ЭтотОбъект.Ссылка - Запрос.УстановитьПараметр("ТекущийЭлемент", ЭтотОбъект.Ссылка);
Как это связано с НомИ?

Или

fox186
09.02.2017, 14:22
А в запрос ты устанавливаешь ЭтотОбъект.Ссылка - Запрос.УстановитьПараметр("ТекущийЭлемент", ЭтотОбъект.Ссылка);
Как это связано с НомИ?
Или
Если я правильно понял нужно сделать так:
Запрос.УстановитьПараметр("ТекущийЭлемент", Ном);
Результат не изменился, так же выдает на печать все элементы без исключения

avm3110
09.02.2017, 15:09
Результат не изменился, так же выдает на печать все элементы без исключения
Ну е-е-е.. неужели нужно "все разжевывать, а не слегка подсказывать"? :blush:

Ну хорошо... Параметр установлен правильно, а теперь следующий вопрос - а где в запросе этот параметр используется?
Где в запросе есть &ТекущийЭлемент ?

fox186
09.02.2017, 16:21
Ну е-е-е.. неужели нужно "все разжевывать, а не слегка подсказывать"? :blush:

Ну хорошо... Параметр установлен правильно, а теперь следующий вопрос - а где в запросе этот параметр используется?
Где в запросе есть &ТекущийЭлемент ?

Я уже в конец запутался) насколько я понял вы имели ввиду это:


Запрос = Новый Запрос;
Запрос.УстановитьПараметр("ТекущийЭлемент", ЭтотОбъект.Ссылка);
Запрос.Текст = "ВЫБРАТЬ
| АналогиНоменклатура.Этало� �,
| СпецификацииНоменклатурыИ сходныеКомплектующие.Номе� �клатура
|ИЗ
| Справочник.АналогиНоменкл� �тура КАК АналогиНоменклатура,
| Справочник.СпецификацииНо� �енклатуры.ИсходныеКомплек тующие КАК СпецификацииНоменклатурыИ сходныеКомплектующие
|ГДЕ
| СпецификацииНоменклатурыИ сходныеКомплектующие.Номе� �клатура = АналогиНоменклатура.Этало� �
| И СпецификацииНоменклатурыИ сходныеКомплектующие.Номе� �клатура = &ТекущийЭлемент
| ";

Но теперь выдает пустую таблицу.

avm3110
09.02.2017, 17:05
Но теперь выдает пустую таблицу.
Это потому что в запросе "взаимоисключающие требования" (это с одной стороны). С другой - сам запрос абсолютно неправильный :-)

Поэтому и не работает

fox186
10.02.2017, 07:42
:) очень "помогли"

fox186
13.02.2017, 09:09
Разобрался, все было очень просто. Может кому-то пригодится)


Функция ПроверкаНаЭталон(Ном) Экспорт

Запрос = Новый Запрос;
Запрос.Текст ="ВЫБРАТЬ
| АналогиНоменклатура.Этало� �
|ИЗ
| Справочник.АналогиНоменкл� �тура КАК АналогиНоменклатура
|ГДЕ
| АналогиНоменклатура.Этало� � = &Ном";
Запрос.УстановитьПараметр("Ном", Ном);

Выборка = Запрос.Выполнить().Выбрать() ;
Пока Выборка.Следующий() Цикл

Возврат Истина;
Прервать;
КонецЦикла;
Возврат Ложь

КонецФункции


Функция ПечатьБезАналогов()
ТабДокумент = Новый ТабличныйДокумент;
ТабДокумент.ИмяПараметров� �ечати = "ПАРАМЕТРЫ_ПЕЧАТИ_БезАналог ов";

Макет = ПолучитьМакет("БезАналогов");
ОбластьШапка = Макет.ПолучитьОбласть("Шапка");
ОбластьШапкаТаблицы = Макет.ПолучитьОбласть("ШапкаТаб");
ОбластьСтрокаТаблицы = Макет.ПолучитьОбласть("СтрокаТаб");

ОбластьШапка.Параметры.Наи менованиеСпецификации = Наименование;
ОбластьШапка.Параметры.Код Спецификации = Код;
ТабДокумент.Вывести(Област ьШапка);

ТабДокумент.Вывести(Област ьШапкаТаблицы);

Для Каждого СтрокаИсходныеКомпл Из ИсходныеКомплектующие Цикл

Если ПроверкаНаЭталон(СтрокаИс� �одныеКомпл.Номенклатура) И НЕ СтрокаИсходныеКомпл.Помет� �аНаУдаление Тогда

Иначе

ОбластьСтрокаТаблицы.Пара� �етры.Код = СтрокаИсходныеКомпл.Номен� �латура.Артикул;
ОбластьСтрокаТаблицы.Пара� �етры.Наименование = СтрокаИсходныеКомпл.Номен� �латура.Наименование;
ОбластьСтрокаТаблицы.Пара� �етры.КолВИзд = СтрокаИсходныеКомпл.Колич� �ство;
ОбластьСтрокаТаблицы.Пара� �етры.ПоНорме = СтрокаИсходныеКомпл.Норма;
ОбластьСтрокаТаблицы.Пара� �етры.ЕдИзм = СтрокаИсходныеКомпл.Едини� �аИзмерения.ЕдиницаПоКласс ификатору.Наименование;
ТабДокумент.Вывести(Област ьСтрокаТаблицы);
КонецЕсли;
КонецЦикла;
Возврат ТабДокумент;
КонецФункции

avm3110
13.02.2017, 09:16
Ну видишь. Все настолько просто :blush:, что даже не понятно как "помогать" :confused: