// Процедура генерации материального отчета.

Процедура Сформировать()

Перем Запрос, ТекстЗапроса, Таб;

//Создание объекта типа Запрос

Запрос = СоздатьОбъект("Запрос");

ТекстЗапроса =

"//{{ЗАПРОС(Сформировать)

|Без итогов;

|НоменклатураМатериалов = Регистр. ОстаткиНоменклатурыМатериалов. НоменклатураМатериалов, Регистр. ЗаказПоставщику. Номенклатура;

|КоличествоСкл = Регистр. ОстаткиНоменклатурыМатериалов. Количество;

|КоличествоЗак = Регистр. ЗаказПоставщику. Количество;

|Функция КоличествоСклКонОст = КонОст(КоличествоСкл);

|Функция КоличествоЗакКонОст = КонОст(КоличествоЗак);

|Группировка НоменклатураМатериалов без групп;

//|Условие(НоменклатураМатериалов = ВыбНоменклатураМатериалов);

|"//}}ЗАПРОС

;

если ВыбНоменклатураМатериалов. Выбран() = 1 тогда

ТекстЗапроса = ТекстЗапроса +"

|Условие(НоменклатураМатериалов = ВыбНоменклатураМатериалов);";

КонецЕсли;

// Если ошибка в запросе, то выход из процедуры

Если Запрос. Выполнить(ТекстЗапроса) = 0 Тогда

Возврат;

КонецЕсли;

// Подготовка к заполнению выходных форм данными запроса

Таб = СоздатьОбъект("Таблица");

Таб. ИсходнаяТаблица("Сформировать");

// Заполнение полей "Заголовок"

Таб = СоздатьОбъект("Таблица");

Таб. ИсходнаяТаблица("Сформировать");

Таб. ВывестиСекцию("Заголовок");

Состояние("Заполнение выходной таблицы...");

Таб. Опции(0, 0, Таб. ВысотаТаблицы(), 0);

Пока Запрос. Группировка() = 1 Цикл

НЕ нашли? Не то? Что вы ищете?

// Заполнение полей Сформировать

Таб. ВывестиСекцию("Сформировать");

КонецЦикла;

// Вывод заполненной формы

Таб. ТолькоПросмотр(1);

Таб. Показать("Сформировать", "");

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

////////////////////////////////////////////////////////////////////////////////

// ПРОЦЕДУРЫ И ФУНКЦИИ МОДУЛЯ

//

//

// ВыбратьПоФильтру()

//

// Параметры:

// Нет

//

// Описание:

// Открывает обработку отбора элементов по произвольному фильтру

//

Процедура ВыбратьПоФильтру()

Перем ВидЗначенияПодбора;

ВидЗначенияПодбора=СокрЛП(ТаблицаМФ. Вид);

Если ПустоеЗначение(ВидЗначенияПодбора)=1 Тогда

Возврат;

КонецЕсли;

СписокПараметров=СоздатьОбъект("СписокЗначений");

СписокПараметров. ДобавитьЗначение("", "ИмяВызвавшейФормы");

СписокПараметров. ДобавитьЗначение(ТаблицаМФ. Тип, "Тип");

СписокПараметров. ДобавитьЗначение(ВидЗначенияПодбора,"Вид");

СписокПараметров. ДобавитьЗначение(СписокЭлементовМФ, "Объекты");

ТаблицаМФ. ФлВкл=2;

ОткрытьФорму("Обработка. ПодборОбъектов#",СписокПараметров);

КонецПроцедуры // ВыбратьПоФильтру

//

// ПерерисовкаНазванийЗакладок

//

// Параметры:

// Нет

//

// Описание:

// Добавляет "(!)" в заголовок закладки с множественным фильтром, когда этот фильтр задан

//

Функция ПерерисовкаНазванийЗакладок()

Форма. Закладки. УстановитьЗначение(2,?(глМножественныйФильтрЗадан(ТаблицаМФ)=1,"(!) ","")+"Множественный фильтр");

КонецФункции // ПерерисовкаНазванийЗакладок()

//

// РасшифровкаОбновить(Обновить)

//

// Параметры:

// Обновить = 1 - нажата кнопка "Обновить"

// 2 - нажата кнопка "Настройка"

//

// Возвращаемое значение:

// Расшифровка (список значений)

//

// Вызывается из формул элементов диалога:

// из таблицы, кнопки "Обновить" и "Настройка"

//

// Описание:

// функция для стандартного механизма кнопок ""Обновить" и "Настройка""

// помещает значение параметра в список Расшифровка и возвращает этот список

//

Функция РасшифровкаОбновить(Обновить)

Расшифровка. Установить("Обновить", Обновить);

Возврат Расшифровка;

КонецФункции //РасшифровкаОбновить()

//

// УправлениеДиалогом()

//

// Параметры:

// Нет

//

// Возвращаемое значение:

// Нет

//

// Описание:

// Управление видимостью элементов формы.

//

Процедура УправлениеДиалогом()

Если Форма. Закладки. ТекущаяСтрока() = 1 Тогда

Форма. ИспользоватьСлой("Шапка, Подвал, Основной1,Основной2,Разделитель"+СокрЛП(ВидРазделителя));

Иначе

Форма. ИспользоватьСлой("Шапка, МФ, Подвал");

КонецЕсли;

КонецПроцедуры //УправлениеДиалогом()

//

// ИзменениеПорядкаГрупп(НаправлениеСдвига)

//

// Параметры:

// НаправлениеСдвига = -1 - вниз

// 1 - вверх

// Возвращаемое значение:

// Нет

//

// Вызывается из формул элементов диалога:

// кнопки "вверх" и "вниз" рядом со списком группировок

Процедура ИзменениеПорядкаГрупп(НаправлениеСдвига)

ТекСтр = Группировки. ТекущаяСтрока();

Группировки. СдвинутьЗначение(НаправлениеСдвига, ТекСтр);

КонецПроцедуры // ИзменениеПорядкаГрупп()

//

// УстановитьГруппировкиЗапроса(ТекстЗапроса, ТекстЗагол)

//

// Параметры: ТекстЗапроса - переданный по ссылке текст запроса

// ТекстЗагол - переданный по ссылке текст заголовка

//

// Возвращаемое значение:

// Нет

//

// Описание:

// Дополняет строку запроса и заголовка в соответствии с выбранными группировками.

//

Процедура УстановитьГруппировкиЗапроса(ТекстЗапроса, ТекстЗагол)

СписокГруппировок = СоздатьОбъект("СписокЗначений");

Для Сч=1 По Группировки. РазмерСписка() Цикл

Если Группировки. Пометка(Сч)=1 Тогда

ПредставлениеГрупп="";

ТекстГрупп=Группировки. ПолучитьЗначение(Сч, ПредставлениеГрупп);

Если (ТекстГрупп = "Покупатель") или (ТекстГрупп = "Номенклатура") Тогда

ТекстБезГрупп = " без групп";

Иначе

ТекстБезГрупп = "";

КонецЕсли;

ТекстЗапроса = ТекстЗапроса + "Группировка "+ТекстГрупп+ТекстБезГрупп+";";

ТекстЗагол = ТекстЗагол + ?(ТекстЗагол="",""," / ")+ПредставлениеГрупп;

СписокГруппировок. ДобавитьЗначение(ТекстГрупп, ПредставлениеГрупп);

Если ТекстГрупп = "Номенклатура" Тогда

НомерГруппировкиПоТМЦ = СписокГруппировок. РазмерСписка();

ИначеЕсли ТекстГрупп = "Договор" Тогда

НомерГруппировкиПоДоговору = СписокГруппировок. РазмерСписка();

ИначеЕсли ТекстГрупп = "Покупатель" Тогда

НомерГруппировкиПоПокупателю = СписокГруппировок. РазмерСписка();

ИначеЕсли ТекстГрупп = "Заявка" Тогда

НомерГруппировкиПоЗаявке = СписокГруппировок. РазмерСписка();

КонецЕсли;

КонецЕсли;

КонецЦикла;

КонецПроцедуры // УстановитьГруппировкиЗапроса()

//

// ПечатьСтроки(Запрос, Ном, НазваниеСекции, ПечТекстСтроки, ТекРасшифровка, ТекРасшифровкаНачало="")

//

// Параметры:

// Запрос - объект "Запрос", на основании которого строится отчет

// Ном - Номер группировки запроса (Число)

// НазваниеСекции - название секции, которую следует использовать (Строка)

// ПечТекстСтроки - текстовое представление текущей строки

// ТекРасшифровка - расшифровка текущей строки

// ТекРасшифровкаНачало - расшифровка начала тетекущей строки

//

// Возвращаемое значение:

// Нет

//

// Вызывается из формул элементов диалога:

//

// Описание:

// Производит вывод в печатную форму одной строки запроса.

//

Процедура ПечатьСтроки(Запрос, Ном, НазваниеСекции, ПечТекстСтроки, ТекРасшифровка, ТекРасшифровкаНачало="")

Если (Ном >= НомерГруппировкиПоДоговору) Тогда

ПечЗаявкаС = глФРМ(Запрос. КонОстЗаявкаС,"");

Вал = Запрос. Договор. ВалютаВзаиморасчетов;

//Если (Ном>= НомерГруппировкиПоТМЦ) и (Запрос. КонОстЗаказК<>0) Тогда

// ПечЗаказС = " ----- ";

//Иначе

// ПечЗаказС = "";

//КонецЕсли;

//

Секц = Таб. ПолучитьСекцию(НазваниеСекции);

Если ПустоеЗначение(ТекРасшифровка) = 1 Тогда

Секц. Область(1,1,1,1).Расшифровка("",2);

КонецЕсли;

Таб. ВывестиСекцию(Секц);

Иначе

Вал = "";

ПечЗаявкаС = "";

Секц = Таб. ПолучитьСекцию(НазваниеСекции);

Если Ном < НомерГруппировкиПоТМЦ Тогда

Секц. Область(1,1,1,6).Объединить();

КонецЕсли;

Если ПустоеЗначение(ТекРасшифровка) = 1 Тогда

Секц. Область(1,1,1,1).Расшифровка("",2);

КонецЕсли;

Таб. ВывестиСекцию(Секц);

КонецЕсли;

Если Ном>= НомерГруппировкиПоТМЦ Тогда

Если ВидЕдиницы = 1 Тогда

Ед = Запрос. Номенклатура. ОсновнаяЕдиница;

Иначе

Ед = Запрос. Номенклатура. БазоваяЕдиница;

КонецЕсли;

ПечЗаявкаК = глФРМКоличество(Запрос. КонОстЗаявкаК, Ед);

ПечРезервК = глФРМКоличество(Запрос. КонОстРезерв, Ед);

ПечЗаказК = глФРМКоличество(Запрос. КонОстЗаказК, Ед);

Секц = Таб. ПолучитьСекцию(НазваниеСекции+"К");

Секц. Область(1,1,1,6).Рамка(,0,,);

Если ПустоеЗначение(ТекРасшифровка) = 1 Тогда

Секц. Область(1,1,1,1).Расшифровка("",2);

КонецЕсли;

Таб. ВывестиСекцию(Секц);

КонецЕсли;

глОживить(1);

КонецПроцедуры // ПечатьСтроки()

//

// ПечатьОснований(Заявка)

//

// Параметры:

// Заявка - заявка покупателя, для которой надо вывести заявки введенные на основании

// НазваниеСекции - название выводимой секции

//

// Возвращаемое значение:

// Нет

//

// Вызывается из формул элементов диалога:

//

// Описание:

// Выводит на печать всю цепочку заявок-оснований для переданной заявки

//

Процедура ПечатьОснований(Заявка, НазваниеСекции)

ПечТекстСтрокиСтар = Заявка;

Если ТипЗначенияСтр(Заявка) <> "Документ" Тогда

Возврат;

КонецЕсли;

Если Заявка. Вид() <> "ЗаявкаПокупателя" Тогда

Возврат;

КонецЕсли;

СписокДокументов = СоздатьОбъект("СписокЗначений");

Пока 1 = 1 Цикл

ДокОсн = Заявка. ДокОснование;

Если (ДокОсн. Выбран() = 0) или (ДокОсн. Вид() <> "ЗаявкаПокупателя")

или (СписокДокументов. НайтиЗначение(ДокОсн) <> 0) Тогда

Прервать;

КонецЕсли;

СписокДокументов. ВставитьЗначение(1, ДокОсн);

Заявка = ДокОсн;

КонецЦикла;

Для к = 1 по СписокДокументов. РазмерСписка() Цикл

ТекРасшифровка = СписокДокументов. ПолучитьЗначение(к);

Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4