Динамический список. Доработка. УТ 11 - форма подбора.

1. Mari1yn 3 20.12.20 20:01 Сейчас в теме
Добрый день. Дорабатываю форму подбора в УТ 11. Стоит задача отобразить в динамическом списке номенклатуры в форме подбора в документ реализации количество товара по каждой позиции, реализованной клиенту за прошлые 6 месяцев. Для этого сделал следующее:

Добавил в стандартный запрос динамического списка КоличествоПродаж:

ВЫБРАТЬ
	СправочникНоменклатура.Ссылка КАК Ссылка,
	СправочникНоменклатура.Артикул КАК Артикул,
	СправочникНоменклатура.Код КАК Код,
	СправочникНоменклатура.Наименование КАК Наименование,
	СправочникНоменклатура.Ссылка КАК Номенклатура,
	СправочникНоменклатура.Ссылка КАК ЭлементСписка,
	СправочникНоменклатура.ИспользованиеХарактеристик КАК ИспользованиеХарактеристик,
	СправочникНоменклатура.ВидНоменклатуры КАК ВидНоменклатуры,
	СправочникНоменклатура.ТипНоменклатуры КАК ТипНоменклатуры,
	СправочникНоменклатура.ЭтоГруппа КАК ЭтоГруппа,
	СправочникНоменклатура.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
	ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка) КАК Упаковка,
	ЗНАЧЕНИЕ(Справочник.ВидыЦен.ПустаяСсылка) КАК ВидЦены,
	НЕОПРЕДЕЛЕНО КАК ВладелецХарактеристик,
	0 КАК Цена,
	0 КАК ИндексКартинки,
	0 КАК ВНаличииОстаток,
	0 КАК Доступно,
	СправочникНоменклатура.Родитель КАК Родитель,
	ЛОЖЬ КАК ХарактеристикиИспользуются,
	ЛОЖЬ КАК ЭтоТовар,
	ЛОЖЬ КАК ЭтоУслуга,
	ЛОЖЬ КАК ПометкаУдаления,
	СправочникНоменклатура.ЦеноваяГруппа КАК ЦеноваяГруппа,
	СправочникНоменклатура.Качество КАК Качество,
	ЗНАЧЕНИЕ(Перечисление.ВариантыРасчетаЦенНаборов.ПустаяСсылка) КАК ВариантРасчетаЦеныНабора,
	ЛОЖЬ КАК СодержитТовары,
	ЛОЖЬ КАК СодержитУслуги,
	НЕОПРЕДЕЛЕНО как ДатаПоследнейПродажи,
	0 КАК КоличествоПродаж //Добавлено
ИЗ
	Справочник.Номенклатура КАК СправочникНоменклатура
Показать


После перетащил этот реквизит соответственно на форму.

Далее модифицирую запрос в Процедуре формы "ПриСозданииНаСервере". Запрос модифицирую после отработки строки ПодборТоваровСервер.ПриСозданииФормыПодбораНаСервере(ЭтаФорма); (там меняется стандартный запрос). Полный код процедуры:

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)

	УстановитьУсловноеОформление();
	
	// Пропускаем инициализацию, чтобы гарантировать получение формы при передаче параметра "АвтоТест".
	Если Параметры.Свойство("АвтоТест") Тогда
		Возврат;
	КонецЕсли;
	
	Если Параметры.Документ = Неопределено Тогда
		ВызватьИсключение НСтр("ru='Предусмотрено открытие обработки только из документов.';uk='Передбачено відкриття обробки тільки з документів.'");
	КонецЕсли;
	
	КодФормы = "Обработка_ПодборТоваровВДокументПродажи_Форма";
		
	ПодборТоваровСервер.ПриСозданииФормыПодбораНаСервере(ЭтаФорма);
	ТекстЗапроса = "ВЫБРАТЬ
					|	ВыручкаИСебестоимостьПродажОбороты.АналитикаУчетаНоменклатуры.Номенклатура КАК Номенклатура,
					|	СУММА(ВыручкаИСебестоимостьПродажОбороты.КоличествоОборот) КАК КоличествоОборот
					|ПОМЕСТИТЬ ПродажиНоменклатуры
					|ИЗ
					|	РегистрНакопления.ВыручкаИСебестоимостьПродаж.Обороты(
					|			ДобавитьКДате(&ДатаДокумента, Месяц, -6),
					|			&ДатаДокумента,
					|			,
					|			АналитикаУчетаПоПартнерам.Партнер = &Партнер
					|			И АналитикаУчетаПоПартнерам.Контрагент  = &Контрагент) КАК ВыручкаИСебестоимостьПродажОбороты
					|
					|СГРУППИРОВАТЬ ПО
					|	ВыручкаИСебестоимостьПродажОбороты.АналитикаУчетаНоменклатуры.Номенклатура
					|;";
	
	ТекстЗапроса = ТекстЗапроса + СписокНоменклатура.ТекстЗапроса;
	
	ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "СправочникНоменклатура.Ссылка КАК Ссылка,", 
	"СправочникНоменклатура.Ссылка КАК Ссылка, ПродажиНоменклатуры.КоличествоОборот КАК КоличествоПродаж,");
	
	ТекстЗапроса = СтрЗаменить(ТекстЗапроса, "Справочник.Номенклатура КАК СправочникНоменклатура", 
	"Справочник.Номенклатура КАК СправочникНоменклатура
	| ЛЕВОЕ СОЕДИНЕНИЕ ПродажиНоменклатуры КАК ПродажиНоменклатуры
	| ПО ПродажиНоменклатуры.Номенклатура = СправочникНоменклатура.Ссылка");
	
	СписокНоменклатура.ТекстЗапроса = ТекстЗапроса;
	СписокНоменклатура.Параметры.УстановитьЗначениеПараметра("ДатаДокумента", Параметры.Документ.Дата);
	СписокНоменклатура.Параметры.УстановитьЗначениеПараметра("Партнер", Параметры.Документ.Партнер);
	СписокНоменклатура.Параметры.УстановитьЗначениеПараметра("Контрагент", Параметры.Документ.Контрагент);
	
		
	Если Не Параметры.Свойство("ПараметрыУказанияСерий",ПараметрыУказанияСерий) Тогда
		Элементы.КорзинаСерия.Видимость = Ложь;
	КонецЕсли;
	
	Параметры.Свойство("ТолькоОбособленно", ТолькоОбособленно);
	Параметры.Свойство("ПодборВариантовОбеспечения", ПодборВариантовОбеспечения);
	ПодборВариантовОбеспечения = ПодборВариантовОбеспечения
		И ПолучитьФункциональнуюОпцию("ИспользоватьРасширенныеВозможностиЗаказаКлиента")
		И ПолучитьФункциональнуюОпцию("ИспользоватьПострочнуюОтгрузкуВЗаказеКлиента");
	
	Если ПодборВариантовОбеспечения Тогда
		Элементы.КорзинаВариантОбеспечения.СписокВыбора.Очистить();
		Элементы.КорзинаВариантОбеспечения.СписокВыбора.Добавить(Перечисления.ВариантыОбеспечения.ОтгрузитьОбособленно);
		Элементы.КорзинаВариантОбеспечения.СписокВыбора.Добавить(Перечисления.ВариантыОбеспечения.Обособленно);
		Элементы.КорзинаВариантОбеспечения.СписокВыбора.Добавить(Перечисления.ВариантыОбеспечения.Отгрузить);
		Элементы.КорзинаВариантОбеспечения.СписокВыбора.Добавить(Перечисления.ВариантыОбеспечения.СоСклада);
		Элементы.КорзинаВариантОбеспечения.СписокВыбора.Добавить(Перечисления.ВариантыОбеспечения.ИзЗаказов);
		Элементы.КорзинаВариантОбеспечения.СписокВыбора.Добавить(Перечисления.ВариантыОбеспечения.Требуется);
		Элементы.КорзинаВариантОбеспечения.СписокВыбора.Добавить(Перечисления.ВариантыОбеспечения.НеТребуется);
	Иначе
		Элементы.КорзинаВариантОбеспечения.Видимость = Ложь;
	КонецЕсли;
	
	ДокументСсылка = Параметры.Документ;
	Параметры.Свойство("Назначение",Назначение);
	Параметры.Свойство("Подразделение",Подразделение);
	Параметры.Свойство("Организация",Организация);
	
	Параметры.Свойство("ЗаполнитьОбособленно",ЗаполнитьОбособленно);
	Параметры.Свойство("Статус",Статус);
	
	Склад = Параметры.Склад;
	
КонецПроцедуры
Показать




Сам результирующий запрос корректно отрабатывается в консоли. Но при открытии формы подбора получаю сообщение "Основная таблица динамического списка задана неправильно". Подскажите - куда копать?

Добавлю еще текст запроса, который получается после модификации:

		
	ТекстЗапроса = "
		|ВЫБРАТЬ
		|	ВыручкаИСебестоимостьПродажОбороты.АналитикаУчетаНоменклатуры.Номенклатура КАК Номенклатура,
		|	СУММА(ВыручкаИСебестоимостьПродажОбороты.КоличествоОборот) КАК КоличествоОборот
		|ПОМЕСТИТЬ ПродажиНоменклатуры
		|ИЗ
		|	РегистрНакопления.ВыручкаИСебестоимостьПродаж.Обороты(ДОБАВИТЬКДАТЕ(&ДатаДокумента, МЕСЯЦ, -6), &ДатаДокумента, , АналитикаУчетаПоПартнерам.Партнер = &Партнер) КАК ВыручкаИСебестоимостьПродажОбороты
		|
		|СГРУППИРОВАТЬ ПО
		|	ВыручкаИСебестоимостьПродажОбороты.АналитикаУчетаНоменклатуры.Номенклатура
		|
		|ИНДЕКСИРОВАТЬ ПО
		|	Номенклатура
		|;
		|
		|////////////////////////////////////////////////////////////­////////////////////
		|ВЫБРАТЬ
		|	СправочникНоменклатура.Ссылка КАК Ссылка,
		|	СправочникНоменклатура.Артикул КАК Артикул,
		|	СправочникНоменклатура.Код КАК Код,
		|	СправочникНоменклатура.Наименование КАК Наименование,
		|	СправочникНоменклатура.ПометкаУдаления КАК ПометкаУдаления,
		|	СправочникНоменклатура.Родитель КАК Родитель,
		|	СправочникНоменклатура.ЭтоГруппа КАК ЭтоГруппа,
		|	СправочникНоменклатура.Ссылка КАК Номенклатура,
		|	СправочникНоменклатура.Ссылка КАК ЭлементСписка,
		|	СправочникНоменклатура.ВидНоменклатуры КАК ВидНоменклатуры,
		|	СправочникНоменклатура.ТипНоменклатуры КАК ТипНоменклатуры,
		|	ВЫБОР
		|		КОГДА СправочникНоменклатура.ТипНоменклатуры = ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Набор)
		|			ТОГДА ЕСТЬNULL(ВариантыКомплектацииНоменклатуры.ВариантРасчетаЦеныНабора, ЗНАЧЕНИЕ(Перечисление.ВариантыРасчетаЦенНаборов.ПустаяСсылка))
		|		ИНАЧЕ ЗНАЧЕНИЕ(Перечисление.ВариантыРасчетаЦенНаборов.ПустаяСсылка)
		|	КОНЕЦ КАК ВариантРасчетаЦеныНабора,
		|	ВариантыКомплектацииНоменклатуры.СодержитТовары КАК СодержитТовары,
		|	ВариантыКомплектацииНоменклатуры.СодержитУслуги КАК СодержитУслуги,
		|	СправочникНоменклатура.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
		|	СправочникНоменклатура.ЦеноваяГруппа КАК ЦеноваяГруппа,
		|	СправочникНоменклатура.Качество КАК Качество,
		|	СправочникНоменклатура.ИспользованиеХарактеристик КАК ИспользованиеХарактеристик,
		|	ВЫБОР
		|		КОГДА СправочникНоменклатура.ТипНоменклатуры В (ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Товар), ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.МногооборотнаяТара))
		|			ТОГДА ИСТИНА
		|		КОГДА СправочникНоменклатура.ТипНоменклатуры В (ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Набор))
		|				И ЕСТЬNULL(ВариантыКомплектацииНоменклатуры.СодержитТовары, ЛОЖЬ)
		|				И НЕ ЕСТЬNULL(ВариантыКомплектацииНоменклатуры.СодержитУслуги, ЛОЖЬ)
		|			ТОГДА ИСТИНА
		|		ИНАЧЕ ЛОЖЬ
		|	КОНЕЦ КАК ЭтоТовар,
		|	ВЫБОР
		|		КОГДА СправочникНоменклатура.ТипНоменклатуры В (ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Услуга), ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Работа))
		|			ТОГДА ИСТИНА
		|		КОГДА СправочникНоменклатура.ТипНоменклатуры В (ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Набор))
		|				И ЕСТЬNULL(ВариантыКомплектацииНоменклатуры.СодержитУслуги, ЛОЖЬ)
		|				И НЕ ЕСТЬNULL(ВариантыКомплектацииНоменклатуры.СодержитТовары, ЛОЖЬ)
		|			ТОГДА ИСТИНА
		|		ИНАЧЕ ЛОЖЬ
		|	КОНЕЦ КАК ЭтоУслуга,
		|	ВЫБОР
		|		КОГДА СправочникНоменклатура.ИспользованиеХарактеристик = ЗНАЧЕНИЕ(Перечисление.ВариантыИспользованияХарактеристикНоменклатуры.ОбщиеДляВидаНоменклатуры)
		|			ТОГДА СправочникНоменклатура.ВидНоменклатуры
		|		КОГДА СправочникНоменклатура.ИспользованиеХарактеристик = ЗНАЧЕНИЕ(Перечисление.ВариантыИспользованияХарактеристикНоменклатуры.ИндивидуальныеДляНоменклатуры)
		|			ТОГДА СправочникНоменклатура.Ссылка
		|		КОГДА СправочникНоменклатура.ИспользованиеХарактеристик = ЗНАЧЕНИЕ(Перечисление.ВариантыИспользованияХарактеристикНоменклатуры.ОбщиеСДругимВидомНоменклатуры)
		|			ТОГДА СправочникНоменклатура.ВладелецХарактеристик
		|		ИНАЧЕ НЕОПРЕДЕЛЕНО
		|	КОНЕЦ КАК ВладелецХарактеристик,
		|	ВЫБОР
		|		КОГДА СправочникНоменклатура.ИспользованиеХарактеристик = ЗНАЧЕНИЕ(Перечисление.ВариантыИспользованияХарактеристикНоменклатуры.НеИспользовать)
		|			ТОГДА ЛОЖЬ
		|		ИНАЧЕ ИСТИНА
		|	КОНЕЦ КАК ХарактеристикиИспользуются,
		|	ВЫБОР
		|		КОГДА СправочникНоменклатура.ЭтоГруппа
		|			ТОГДА ВЫБОР
		|					КОГДА СправочникНоменклатура.ПометкаУдаления
		|						ТОГДА 13
		|					ИНАЧЕ 12
		|				КОНЕЦ
		|		ИНАЧЕ ВЫБОР
		|				КОГДА СправочникНоменклатура.ЕстьТоварыДругогоКачества
		|					ТОГДА 4 + ВЫБОР
		|							КОГДА СправочникНоменклатура.ПометкаУдаления
		|								ТОГДА 1
		|							ИНАЧЕ 0
		|						КОНЕЦ + ВЫБОР
		|							КОГДА СправочникНоменклатура.ИспользованиеХарактеристик = ЗНАЧЕНИЕ(Перечисление.ВариантыИспользованияХарактеристикНоменклатуры.НеИспользовать)
		|								ТОГДА 0
		|							ИНАЧЕ 2
		|						КОНЕЦ
		|				ИНАЧЕ -1 + ВЫБОР
		|						КОГДА СправочникНоменклатура.ПометкаУдаления
		|							ТОГДА 1
		|						ИНАЧЕ 0
		|					КОНЕЦ + ВЫБОР
		|						КОГДА СправочникНоменклатура.ИспользованиеХарактеристик = ЗНАЧЕНИЕ(Перечисление.ВариантыИспользованияХарактеристикНоменклатуры.НеИспользовать)
		|							ТОГДА 1
		|						ИНАЧЕ 3
		|					КОНЕЦ
		|			КОНЕЦ
		|	КОНЕЦ КАК ИндексКартинки,
		|	ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка) КАК Упаковка,
		|	0 КАК Цена,
		|	ЗНАЧЕНИЕ(Справочник.ВидыЦен.ПустаяСсылка) КАК ВидЦены,
		|	ВЫРАЗИТЬ(ЕСТЬNULL(СвободныеОстатки.ВНаличииОстаток, 0) КАК ЧИСЛО(15, 3)) КАК ВНаличииОстаток,
		|	ВЫРАЗИТЬ(ЕСТЬNULL(СвободныеОстатки.ВНаличииОстаток, 0) - ЕСТЬNULL(СвободныеОстатки.ВРезервеПодЗаказОстаток, 0) - ЕСТЬNULL(СвободныеОстатки.ВРезервеСоСкладаОстаток, 0) + ЕСТЬNULL(ОстаткиИзЗаказов.Количество, 0) КАК ЧИСЛО(15, 3)) КАК Доступно,
		|	0 КАК ЦенаПоследнейПродажи,
		|	0 КАК КоличествоПоследнейПродажи,
		|	ПродажиНоменклатуры.КоличествоОборот КАК КоличествоОборот
		|ИЗ
		|	ПродажиНоменклатуры КАК ПродажиНоменклатуры
		|		ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Номенклатура КАК СправочникНоменклатура
		|			ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ВариантыКомплектацииНоменклатуры КАК ВариантыКомплектацииНоменклатуры
		|			ПО (ВариантыКомплектацииНоменклатуры.Владелец = СправочникНоменклатура.Ссылка)
		|				И (ВариантыКомплектацииНоменклатуры.Характеристика = ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка))
		|				И (ВариантыКомплектацииНоменклатуры.Основной)
		|			ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.СвободныеОстатки.Остатки(
		|					,
		|					Склад = &Склад
		|						И Характеристика = ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка) {(Номенклатура).* КАК Номенклатура}) КАК СвободныеОстатки
		|			ПО (СвободныеОстатки.Склад = &Склад)
		|				И (СвободныеОстатки.Номенклатура = СправочникНоменклатура.Ссылка)
		|				И (СвободныеОстатки.Характеристика = ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка))
		|			ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ДоступныеОстаткиПланируемыхПоступлений КАК ОстаткиИзЗаказов
		|			ПО (ОстаткиИзЗаказов.Склад = &Склад)
		|				И (ОстаткиИзЗаказов.Характеристика = ЗНАЧЕНИЕ(Справочник.ХарактеристикиНоменклатуры.ПустаяСсылка))
		|				И (ОстаткиИзЗаказов.ДатаДоступности = ДАТАВРЕМЯ(1, 1, 1))
		|				И (ОстаткиИзЗаказов.Номенклатура = СправочникНоменклатура.Ссылка)
		|				И (ОстаткиИзЗаказов.Количество < 0)
		|		ПО (СправочникНоменклатура.Ссылка = ПродажиНоменклатуры.Номенклатура)
		|ГДЕ
		|	НЕ СправочникНоменклатура.ЭтоГруппа
		|{ГДЕ
		|	(1 В
		|			(ВЫБРАТЬ ПЕРВЫЕ 1
		|				1
		|			ИЗ
		|				РегистрСведений.НоменклатураСегмента КАК Сегменты
		|			ГДЕ
		|				Сегменты.Номенклатура = СправочникНоменклатура.Ссылка
		|				И Сегменты.Сегмент = &СегментНоменклатуры)) КАК Поле2}
		|";
Показать


Повторюсь - в консоли запрос отрабатывает корректно.
Найденные решения
4. SlavaKron 21.12.20 10:37 Сейчас в теме
Вряд ли в вашей версии платформы можно использовать временные таблицы в запросе динамического списка.
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
3. Mari1yn 3 21.12.20 10:29 Сейчас в теме
(2) К сожалению у меня ПриПолученииДанныхНаСервере() не отрабатывает. Требуется режим совместимости 8.3.8 и выше. А у меня 8.3.6
4. SlavaKron 21.12.20 10:37 Сейчас в теме
Вряд ли в вашей версии платформы можно использовать временные таблицы в запросе динамического списка.
5. Mari1yn 3 21.12.20 10:43 Сейчас в теме
(4) Почитал. Вы правы. Попробую как то вложенным запросом.
6. Mari1yn 3 21.12.20 11:16 Сейчас в теме
(4) Огромное спасибо за помощь. Вложенным запросом все заработало как часы.
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот