УТ, внешний отчет. Необходимо выводить из форм различных документов данные по остаткам товаров (перечень товаров берется из самого документа) . Отчет формируется из типов документов - Заказ клиента, Заказ поставщику. Логика - Создал внешний отчет, в СведенияОВнешнейОбработке добавил массив документов, в форме, которых будет показываться этот отчет. Теперь мне нужно тащить из табличной части открытого документа Номенклатуру и Характеристику, помещать их в Таблицу Значений и уже для этой конкретной Номенклатуры с Характеристикой получать данные по остаткам. Сейчас Остановился на том, в модуле отчета СведенияОВнешнейОбработке - ТипКомандыВызовКлиентскогоМетода(). В модуле формы ВыполнитьКоманду(ИдентификаторКоманды,ОбъектыНазначенияМассив)Экспорт получаю как раз ТЗ, в которую помещаю значения из ТЧ формы открытого документа, как теперь эту ТЗ передать в модуль отчета в процедуру ПриКомпоновкеРезультата ? Или это нужно как-то по-другому реализовать? Ниже код и скрины:
МодульОбъекта:
МодульОбъекта:
Функция СведенияОВнешнейОбработке() Экспорт
ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке();
МассивНазначений = Новый Массив;
МассивНазначений.Добавить("Документ.ЗаказКлиента");
МассивНазначений.Добавить("Документ.ЗаказПоставщику");
МассивНазначений.Добавить("Документ.ЗаказНаПеремещение");
МассивНазначений.Добавить("Документ.ПеремещениеТоваров");
МассивНазначений.Добавить("Документ.ПриобретениеТоваровУслуг");
МассивНазначений.Добавить("Документ.РеализацияТоваровУслуг");
ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиОтчет();
ПараметрыРегистрации.Назначение.Добавить(МассивНазначений);
ПараметрыРегистрации.Версия = "1.0";
НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
НоваяКоманда.Представление = "Проверка наличия товаров (внешний)";
НоваяКоманда.Идентификатор = "ПроверкаНаличияТоваров";
НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовКлиентскогоМетода();
Возврат ПараметрыРегистрации;
КонецФункции // СведенияОВнешнейОбработке()
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
СхемаКомпоновки = ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
НастройкиКомпоновки = КомпоновщикНастроек.Настройки;
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновки,НастройкиКомпоновки);
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ВнешниеНаборы = Новый Структура("Данные", ТЗ());
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки,ВнешниеНаборы);
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
ПроцессорВывода.Вывести(ПроцессорКомпоновки);
КонецПроцедуры
МодульФормы:
Процедура ВыполнитьКоманду(ИдентификаторКоманды,ОбъектыНазначенияМассив)Экспорт
ТЧ = ОбъектыНазначенияМассив[0].Товары;
ТЗ = Новый ТаблицаЗначений;
ТЗ.Колонки.Добавить("Номенклатура");
Тз.Колонки.Добавить("Характеристика");
Для Каждого Строка Из ТЧ Цикл
НоваяСтрока = ТЗ.Добавить();
НоваяСтрока.Номенклатура = Строка.Номенклатура;
НоваяСтрока.Характеристика = Строка.Характеристика;
КонецЦикла;
КонецПроцедуры
ПоказатьПрикрепленные файлы:
По теме из базы знаний
- Поиск неликвидных товаров (УТ 10.3, КА 1.1, УПП 1.3)
- Несколько слов о том, как приручить хаос задач
- Реализация и поступление денежных средств (ERP 2.4, ERP 2.5, КА 2.4, УТ 11.4)
- Фишки платформы и конфигураций 1С, о которых все знают, но почти никто не помнит
- Шаблон отчета не СКД для управляемого приложения
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1) как и советовал ранее, тут больше подходит открытие формы, чем клиентский метод.
Модуль формы:
Функция СведенияОВнешнейОбработке() Экспорт
ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке();
МассивНазначений = Новый Массив;
МассивНазначений.Добавить("Документ.ЗаказКлиента");
МассивНазначений.Добавить("Документ.ЗаказПоставщику");
МассивНазначений.Добавить("Документ.ЗаказНаПеремещение");
МассивНазначений.Добавить("Документ.ПеремещениеТоваров");
МассивНазначений.Добавить("Документ.ПриобретениеТоваровУслуг");
МассивНазначений.Добавить("Документ.РеализацияТоваровУслуг");
ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиОтчет();
ПараметрыРегистрации.Назначение.Добавить(МассивНазначений);
ПараметрыРегистрации.Версия = "1.0";
ПараметрыРегистрации.БезопасныйРежим = Ложь;
НоваяКоманда = ПараметрыРегистрации.Команды.Добавить();
НоваяКоманда.Представление = "Проверка наличия товаров СКД ТЗ";
НоваяКоманда.Идентификатор = "ПроверкаНаличияТоваровТЗ";
НоваяКоманда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыОткрытиеФормы();
Возврат ПараметрыРегистрации;
КонецФункции // СведенияОВнешнейОбработке()
ПоказатьМодуль формы:
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Перем ОбъектыНазначения;
Если Параметры.Свойство("ОбъектыНазначения",ОбъектыНазначения) И ОбъектыНазначения.Количество()>0 Тогда
Отчет.Таблица = ОбъектыНазначения[0];
КонецЕсли;
КонецПроцедуры
ПоказатьПрикрепленные файлы:
ВнешнийОтчетЗадание8ТабЗначенийЧ2.erf
(2) Создал реквизит объекта Таблица Тип Строка неограниченной длины. В процедуру ВыполнитьКоманду поместил во временное хранилище, в Прикомпоновке результата получаю, но почему-то результата все равно нет
(2)
(2)
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ТаблицаЗначений = ПолучитьИзВременногоХранилища(Таблица);
СхемаКомпоновки = ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
НастройкиКомпоновки = КомпоновщикНастроек.ПолучитьНастройки();
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновки,НастройкиКомпоновки);
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ВнешниеНаборы = Новый Структура("Данные", ТаблицаЗначений);
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки,ВнешниеНаборы);
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
ПроцессорВывода.Вывести(ПроцессорКомпоновки);
КонецПроцедуры
Процедура ВыполнитьКоманду(ИдентификаторКоманды,ОбъектыНазначенияМассив)Экспорт
ТЧ = ОбъектыНазначенияМассив[0].Товары;
ТЗ = Новый ТаблицаЗначений;
ТЗ.Колонки.Добавить("Номенклатура", Новый ОписаниеТипов("СправочникСсылка.Номенклатура"));
Тз.Колонки.Добавить("Характеристика", Новый ОписаниеТипов("СправочникСсылка.ХарактеристикиНоменклатуры"));
Для Каждого Строка Из ТЧ Цикл
НоваяСтрока = ТЗ.Добавить();
НоваяСтрока.Номенклатура = Строка.Номенклатура;
НоваяСтрока.Характеристика = Строка.Характеристика;
КонецЦикла;
Если ЭтоАдресВременногоХранилища(Отчет.Таблица) Тогда
УдалитьИзВременногоХранилища(Отчет.Таблица);
КонецЕсли;
Таблица = ПоместитьВоВременноеХранилище(ТЗ, Новый УникальныйИдентификатор);
КонецПроцедуры
ПоказатьПрикрепленные файлы:
У вас точно адрес заполняется и передается на сервер? Добавьте сообщить(Таблица) перед
ТаблицаЗначений = ПолучитьИзВременногоХранилища(Таблица);
Если адрес корректно заполнен - возможно у вас отчет формируется через фоновое задание и там данные из хранилища недоступны.
ТаблицаЗначений = ПолучитьИзВременногоХранилища(Таблица);
Если адрес корректно заполнен - возможно у вас отчет формируется через фоновое задание и там данные из хранилища недоступны.
(6) Проверил в двух местах через Сообщить(Таблица) в процедуре ВыполнитьКоманду в модуле формы и в ПриКомпоновкеРезультата в модуле объекта. Если Сообщить в Модуле формы, то адрес сообщается, а вот если сообщить, как Вы говорили в модуле объекта перед ТаблицаЗначений = ПолучитьИзВременногоХранилища(Таблица); То адрес не выводится, т.е. я так понимаю, адрес почему-то не передается в процедуру ПриКомпоновкеРезультата. В чем тогда может быть причина?
Скрин, что выводится если сообщить в модуле формы
Скрин, что выводится если сообщить в модуле формы
Прикрепленные файлы:
Все переделал. В Сведениях о Внешней обработке - ТипКомандыВызовКлиентскогоМетода(). Создал реквизит с составным типом Ссылка и выбрал все документы, для которых должен формироваться этот отчет. Т.е. С помощьюПроцедуры ВыполнитьКоманду в этот реквизит я передаю ссылку на документ. И теперь в дальнейшем, смогу вытащить необходимые поля из ТЧ документа в модуле объекта. Но при нажатии кнопки Выполнить, меня перекидывает не форму отчета, чтобы нажать кнопку сформировать, а на отчет только с заголовком. Как сделать, чтобы перекинуло именно на форму отчета, чтобы нажать кнопку Сформировать и запустить процедуру ПриКомпоновкеРезультата?
&НаКлиенте
Процедура ВыполнитьКоманду(ИдентификаторКоманды,ОбъектыНазначенияМассив)Экспорт
ПользовательскиеНастройки = Новый ПользовательскиеНастройкиКомпоновкиДанных;
ПараметрыОтчета = Новый Структура;
ПараметрыОтчета.Вставить("СформироватьПриОткрытии", Истина);
ПараметрыОтчета.Вставить("Вариант", Отчет.КомпоновщикНастроек.Настройки);
ПараметрыОтчета.Вставить("Отбор", Новый Структура("Ссылка",Отчет.Таблица));
ПараметрыОтчета.Вставить("ПользовательскиеНастройки", ПользовательскиеНастройки);
ОткрытьФорму("ВнешнийОтчет.ВнешнийОтчетТабЗначений.Форма.ФормаОтчета",ПараметрыОтчета);
Отчет.Таблица = ОбъектыНазначенияМассив[0];
КонецПроцедуры
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ТЗ = Новый ТаблицаЗначений;
//Добавляем колонки
ТЗ.Колонки.Добавить("Номенклатура", Новый ОписаниеТипов("СправочникСсылка.Номенклатура", , , ));
ТЗ.Колонки.Добавить("Характеристика", Новый ОписаниеТипов("СправочникСсылка.ХарактеристикиНоменклатуры", , , ));
ТЧ = Таблица.Товары;
Сообщить(ТЧ);
Для Каждого Строка Из ТЧ Цикл
НоваяСтрока = ТЗ.Добавить();
НоваяСтрока.Номенклатура = Строка.Номенклатура;
НоваяСтрока.Характеристика = Строка.Характеристика;
Сообщить(НоваяСтрока);
КонецЦикла;
Запрос = Новый Запрос;
МенеджерВТ = Новый МенеджерВременныхТаблиц;
Запрос.МенеджерВременныхТаблиц = МенеджерВТ;
Запрос.Текст =
"ВЫБРАТЬ
| ВТ_Номенклатура.Номенклатура КАК Номенклатура,
| ВТ_Номенклатура.Характеристика КАК Характеристика
|ПОМЕСТИТЬ ВТ_Номенклатура
|ИЗ
| &ВТ_Номенклатура КАК ВТ_Номенклатура";
Запрос.УстановитьПараметр("ВТ_Номенклатура", ТЗ);
РезультатЗапроса = Запрос.Выполнить();
НастройкиКомпоновки = КомпоновщикНастроек.ПолучитьНастройки();
СхемаКомпоновки = ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновки,НастройкиКомпоновки);
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ВнешниеНаборы = Новый Структура("ТаблицаЗначений", ТЗ);
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки,ВнешниеНаборы);
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
ПроцессорВывода.Вывести(ПроцессорКомпоновки);
КонецПроцедуры
&НаКлиенте
Процедура ВыполнитьКоманду(ИдентификаторКоманды,ОбъектыНазначенияМассив)Экспорт
ПользовательскиеНастройки = Новый ПользовательскиеНастройкиКомпоновкиДанных;
ПараметрыОтчета = Новый Структура;
ПараметрыОтчета.Вставить("СформироватьПриОткрытии", Истина);
ПараметрыОтчета.Вставить("Вариант", Отчет.КомпоновщикНастроек.Настройки);
ПараметрыОтчета.Вставить("Отбор", Новый Структура("Ссылка",Отчет.Таблица));
ПараметрыОтчета.Вставить("ПользовательскиеНастройки", ПользовательскиеНастройки);
ОткрытьФорму("ВнешнийОтчет.ВнешнийОтчетТабЗначений.Форма.ФормаОтчета",ПараметрыОтчета);
Отчет.Таблица = ОбъектыНазначенияМассив[0];
КонецПроцедуры
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка)
СтандартнаяОбработка = Ложь;
ТЗ = Новый ТаблицаЗначений;
//Добавляем колонки
ТЗ.Колонки.Добавить("Номенклатура", Новый ОписаниеТипов("СправочникСсылка.Номенклатура", , , ));
ТЗ.Колонки.Добавить("Характеристика", Новый ОписаниеТипов("СправочникСсылка.ХарактеристикиНоменклатуры", , , ));
ТЧ = Таблица.Товары;
Сообщить(ТЧ);
Для Каждого Строка Из ТЧ Цикл
НоваяСтрока = ТЗ.Добавить();
НоваяСтрока.Номенклатура = Строка.Номенклатура;
НоваяСтрока.Характеристика = Строка.Характеристика;
Сообщить(НоваяСтрока);
КонецЦикла;
Запрос = Новый Запрос;
МенеджерВТ = Новый МенеджерВременныхТаблиц;
Запрос.МенеджерВременныхТаблиц = МенеджерВТ;
Запрос.Текст =
"ВЫБРАТЬ
| ВТ_Номенклатура.Номенклатура КАК Номенклатура,
| ВТ_Номенклатура.Характеристика КАК Характеристика
|ПОМЕСТИТЬ ВТ_Номенклатура
|ИЗ
| &ВТ_Номенклатура КАК ВТ_Номенклатура";
Запрос.УстановитьПараметр("ВТ_Номенклатура", ТЗ);
РезультатЗапроса = Запрос.Выполнить();
НастройкиКомпоновки = КомпоновщикНастроек.ПолучитьНастройки();
СхемаКомпоновки = ПолучитьМакет("ОсновнаяСхемаКомпоновкиДанных");
КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных;
МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновки,НастройкиКомпоновки);
ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных;
ВнешниеНаборы = Новый Структура("ТаблицаЗначений", ТЗ);
ПроцессорКомпоновки.Инициализировать(МакетКомпоновки,ВнешниеНаборы);
ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент;
ПроцессорВывода.УстановитьДокумент(ДокументРезультат);
ПроцессорВывода.Вывести(ПроцессорКомпоновки);
КонецПроцедуры
Прикрепленные файлы:
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот