Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
22 ноя 2024, 08:05

Как достать параметр из СКД в процедуре

Автор Nosferatu112, 23 мая 2024, 17:54

0 Пользователей и 1 гость просматривают эту тему.

Nosferatu112

Всем привет, не могу понять как получить нужные данные в процедуре ПриКомпановкеРезультата в отчете
&НаКлиенте
Процедура ПоказатьРаспр(Команда)
ПараметрыФормы = Новый Структура("Дата, СформироватьПриОткрытии", Дата,Истина);
ОткрытьФорму("Отчет.ок_РаспределениеВодителейВРМЛ.Форма.",ПараметрыФормы);

КонецПроцедуры
Вот я вызвал отчет
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)


СтандартнаяОбработка = Ложь;

Настройки = КомпоновщикНастроек.ПолучитьНастройки();

Дата = Настройки.ПараметрыДанных.Элементы.Найти("Дата");

ТаблицаВодителейИЗон = Новый ТаблицаЗначений;
ТаблицаВодителейИЗон.Колонки.Добавить("ВодительРазрешенный");
ТаблицаВодителейИЗон.Колонки.Добавить("РазрешенныеЗоны");
ТаблицаВодителейИЗон.Колонки.Добавить("ВодительОпцианально");
ТаблицаВодителейИЗон.Колонки.Добавить("ОпцианальныеЗоны");

Данные = Новый ТаблицаЗначений;
Данные.Колонки.Добавить("РаспоряжениеНаДоставку");
Данные.Колонки.Добавить("ЗоныПланирования");
Данные.Колонки.Добавить("ВремяДоставки");
Данные.Колонки.Добавить("ПериодДоставки");
Данные.Колонки.Добавить("Водитель");
Данные.Колонки.Добавить("Лимит");
Данные.Колонки.Добавить("ВозможнаяЗамена");
Данные.Колонки.Добавить("Период");


Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ЗоныДоставкиДляПланированияЯндекс.Водитель КАК Водитель,
| ЗоныДоставкиДляПланированияЯндекс.ЗонаДоставки КАК ЗонаДоставкиРазрешенная
|ПОМЕСТИТЬ втРазрешенные
|ИЗ
| РегистрСведений.ЗоныДоставкиДляПланированияЯндекс КАК ЗоныДоставкиДляПланированияЯндекс
|ГДЕ
| ЗоныДоставкиДляПланированияЯндекс.ВидЗоныДоставки = ЗНАЧЕНИЕ(Перечисление.вд_ВидыЗоныДоставки.Разрешенная)
| И ЗоныДоставкиДляПланированияЯндекс.ДеньНедели = ДЕНЬНЕДЕЛИ(&ДеньНедели)
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ЗоныДоставкиДляПланированияЯндекс.Водитель КАК Водитель,
| ЗоныДоставкиДляПланированияЯндекс.ЗонаДоставки КАК ЗонаДоставкиОпционально
|ПОМЕСТИТЬ втОпционально
|ИЗ
| РегистрСведений.ЗоныДоставкиДляПланированияЯндекс КАК ЗоныДоставкиДляПланированияЯндекс
|ГДЕ
| ЗоныДоставкиДляПланированияЯндекс.ВидЗоныДоставки = ЗНАЧЕНИЕ(Перечисление.вд_ВидыЗоныДоставки.Опциональная)
| И ЗоныДоставкиДляПланированияЯндекс.ДеньНедели = ДЕНЬНЕДЕЛИ(&ДеньНедели)
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| втРазрешенные.ЗонаДоставкиРазрешенная КАК ЗонаДоставкиРазрешенная,
| втРазрешенные.Водитель КАК Водитель,
| втОпционально.ЗонаДоставкиОпционально КАК ЗонаДоставкиОпционально,
| втОпционально.Водитель КАК Водитель1
|ИЗ
| втРазрешенные КАК втРазрешенные
| ЛЕВОЕ СОЕДИНЕНИЕ втОпционально КАК втОпционально
| ПО втРазрешенные.ЗонаДоставкиРазрешенная = втОпционально.ЗонаДоставкиОпционально";

Запрос.УстановитьПараметр("ДеньНедели", Дата);

РезультатЗапроса = Запрос.Выполнить();

ВыборкаЗон = РезультатЗапроса.Выбрать();

Пока ВыборкаЗон.Следующий() Цикл

ТЧ = ТаблицаВодителейИЗон.Добавить();
ТЧ.ВодительРазрешенный = ВыборкаЗон.Водитель;
ТЧ.РазрешенныеЗоны = ВыборкаЗон.ЗонаДоставкиРазрешенная;
ТЧ.ВодительОпцианально = ВыборкаЗон.Водитель1;
ТЧ.ОпцианальныеЗоны = ВыборкаЗон.ЗонаДоставкиОпционально;

КонецЦикла;


Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ПараметрыДоставокСрезПоследних.РаспоряжениеНаДоставку КАК РаспоряжениеНаДоставку,
| ПараметрыДоставокСрезПоследних.РаспоряжениеНаДоставку.АдресДоставки.ЗонаПланированияМаксоптра КАК ЗонаМаксоптра,
| ПараметрыДоставокСрезПоследних.ВремяНачалаДоставки КАК ВремяНачалаДоставки,
| ПараметрыДоставокСрезПоследних.ВремяОкончанияДоставки КАК ВремяОкончанияДоставки,
| ВЫБОР
| КОГДА ЧАС(ПараметрыДоставокСрезПоследних.ВремяНачалаДоставки) >= 7
| И ЧАС(ПараметрыДоставокСрезПоследних.ВремяОкончанияДоставки) <= 13
| ТОГДА ""Период 1""
| ИНАЧЕ ВЫБОР
| КОГДА ЧАС(ПараметрыДоставокСрезПоследних.ВремяНачалаДоставки) >= 10
| И ЧАС(ПараметрыДоставокСрезПоследних.ВремяОкончанияДоставки) <= 16
| ТОГДА ""Период 2""
| ИНАЧЕ ВЫБОР
| КОГДА ЧАС(ПараметрыДоставокСрезПоследних.ВремяНачалаДоставки) >= 14
| И ЧАС(ПараметрыДоставокСрезПоследних.ВремяОкончанияДоставки) <= 23
| ТОГДА ""Период 3""
| ИНАЧЕ ВЫБОР
| КОГДА ЧАС(ПараметрыДоставокСрезПоследних.ВремяНачалаДоставки) = 9
| И ЧАС(ПараметрыДоставокСрезПоследних.ВремяОкончанияДоставки) = 18
| ТОГДА ""Период 4""
| ИНАЧЕ ""Период 4""
| КОНЕЦ
| КОНЕЦ
| КОНЕЦ
| КОНЕЦ КАК ПериодДоставки,
| ПараметрыДоставокСрезПоследних.Период КАК Период
|ПОМЕСТИТЬ втЗаказыЗоныВремя
|ИЗ
| РегистрСведений.ПараметрыДоставок.СрезПоследних КАК ПараметрыДоставокСрезПоследних
|ГДЕ
| ПараметрыДоставокСрезПоследних.ДатаОтгрузки = &ДеньНедели
| И ПараметрыДоставокСрезПоследних.Водитель = ЗНАЧЕНИЕ(Справочник.Контрагенты.ПустаяСсылка)
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| втЗаказыЗоныВремя.РаспоряжениеНаДоставку КАК РаспоряжениеНаДоставку,
| втЗаказыЗоныВремя.ЗонаМаксоптра КАК ЗонаМаксоптра,
| втЗаказыЗоныВремя.ВремяНачалаДоставки КАК ВремяНачалаДоставки,
| втЗаказыЗоныВремя.ПериодДоставки КАК ПериодДоставки,
| втЗаказыЗоныВремя.Период КАК Период
|ИЗ
| втЗаказыЗоныВремя КАК втЗаказыЗоныВремя
|ГДЕ
| втЗаказыЗоныВремя.РаспоряжениеНаДоставку <> ЗНАЧЕНИЕ(Документ.ЗаданиеНаПеревозку.ПустаяСсылка)";

Запрос.УстановитьПараметр("ДеньНедели", Дата);

РезультатЗапроса = Запрос.Выполнить();

ВыборкаЗаданий = РезультатЗапроса.Выбрать();

Пока ВыборкаЗаданий.Следующий() Цикл

ТЧ = Данные.Добавить();
ТЧ.Период = ВыборкаЗаданий.Период;
ТЧ.РаспоряжениеНаДоставку = ВыборкаЗаданий.РаспоряжениеНаДоставку;
ТЧ.ЗоныПланирования = ВыборкаЗаданий.ЗонаМаксоптра;
ТЧ.ВремяДоставки = ВыборкаЗаданий.ВремяНачалаДоставки;
ТЧ.ПериодДоставки = ВыборкаЗаданий.ПериодДоставки;

КонецЦикла;

ЛимитЗаказов1 = 0;
ЛимитЗаказов2 = 0;
ЛимитЗаказов3 = 0;
Для Каждого Стр Из ТаблицаВодителейИЗон Цикл
Для Каждого С Из Данные Цикл
Если С.Водитель = Справочники.Контрагенты.ПустаяСсылка() И Стр.РазрешенныеЗоны = С.ЗоныПланирования Тогда
Если С.ПериодДоставки = "Период 1" И ЛимитЗаказов1 <= 7 Тогда
С.Водитель = Стр.ВодительРазрешенный;
ЛимитЗаказов1 = ЛимитЗаказов1 + 1;
С.Лимит = ЛимитЗаказов1;
ИначеЕсли С.ПериодДоставки = "Период 2" И ЛимитЗаказов2 <= 7 Тогда
С.Водитель = Стр.ВодительРазрешенный;
ЛимитЗаказов2 = ЛимитЗаказов2 + 1;
С.Лимит = ЛимитЗаказов2;
ИначеЕсли С.ПериодДоставки = "Период 3" И ЛимитЗаказов3 <= 7 Тогда
С.Водитель = Стр.ВодительРазрешенный;
ЛимитЗаказов3 = ЛимитЗаказов3 + 1;
С.Лимит = ЛимитЗаказов3;
КонецЕсли;
КонецЕсли;

КонецЦикла;
ЛимитЗаказов1 = 0;
ЛимитЗаказов2 = 0;
ЛимитЗаказов3 = 0;
КонецЦикла;

Для Каждого Стр Из ТаблицаВодителейИЗон Цикл
Для Каждого С Из Данные Цикл
Если С.Водитель = Справочники.Контрагенты.ПустаяСсылка() И Стр.ОпцианальныеЗоны = С.ЗоныПланирования Тогда
Если С.ПериодДоставки = "Период 1" И ЛимитЗаказов1 <= 7 Тогда
С.Водитель = Стр.ВодительОпцианально;
ИначеЕсли С.ПериодДоставки = "Период 2" И ЛимитЗаказов2 <= 7 Тогда
С.Водитель = Стр.ВодительОпцианально;
ИначеЕсли С.ПериодДоставки = "Период 3" И ЛимитЗаказов3 <= 7 Тогда
С.Водитель = Стр.ВодительОпцианально;
КонецЕсли;
КонецЕсли;

КонецЦикла;
ЛимитЗаказов1 = 0;
ЛимитЗаказов2 = 0;
ЛимитЗаказов3 = 0;
КонецЦикла;
    Данные.Сортировать("Водитель,ПериодДоставки Возр");

СхеммаКомпоновкиДанных = ПолучитьМакет("Макет");


ДанныеРасшифровки = Новый ДанныеРасшифровкиКомпоновкиДанных;

КомпановщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпановки = КомпановщикМакета.Выполнить(СхеммаКомпоновкиДанных,Настройки,ДанныеРасшифровки);

ВнешнийНаборДанных = Новый Структура("ДанныеРаспределения",Данные);
ПроцессорКомпоновкиДанных = Новый ПроцессорКомпоновкиДанных;
ПроцессорКомпоновкиДанных.Инициализировать(МакетКомпановки,ВнешнийНаборДанных,ДанныеРасшифровки);

ДокументРезультат.Очистить();

ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
ПроцессорВывода.Вывести(ПроцессорКомпоновкиДанных);

КонецПроцедуры
Как мне получить Дату из места откуда я вызываю отчет что бы подставить в запросы?

antoneus

Переданные параметры доступны в процедуре ПриСозданииНаСервере, там их можно положить в реквизиты отчета, например, которые доступны в модуле объекта.

LexaK

Nosferatu112, так вы же в параметрах передаете ее в форму отчета!
в форме отчета (уже после открытия) закидывайте дату в Параметры
а в процедуре ПриКомпоновкеРезультата берите из параметров
(какой-то такой ход конем получается)
а можете проще сделать
СКД на внешних данных, на форме (по кнопке Сформировать отчет - свою написать)
выполняете запросы (как раз с полученной датой) и результаты помещаете в наборы данных

если помогло нажмите: Спасибо!

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск