Дополнительные параметризуемые поля в динамических списках. Остатки и цены в списке номенклатуры

06.04.23

Разработка - Инструментарий разработчика

Расширение позволяет вывести в списки номенклатуры цену, остатки, себестоимость, количество к отгрузке, количество в резерве с настройками по виду цены или складу. Сохранение выбранных полей. Добавление своих полей в другие списки или конфигурации с минимальными трудозатратами. Готовый механизм для добавления полей в динамические списки в пользовательском режиме.

Скачать исходный код

Наименование Файл Версия Размер
Остатки и цены в списках номенлатуры для УТ 11.5 и ЕРП 2.5
.cfe 63,41Kb
13
.cfe 63,41Kb 13 Скачать

Расширение позволяет пользователю, в случае наличия прав, самостоятельно добавить необходимые ему поля в динамических списках, на примере списка номенклатуры, изменять их "на лету", менять их порядок, пользоваться всеми "прелестями" динамических списков - отборами, сортировками, условным оформлением. Выбранные поля сохраняются в пользовательских настройках и доступны при следующем открытии формы. Использовались материалы: Статья уважаемой Евгении Карук

 

 

Установка Расширения:

Расширение устанавливается стандартно, через "НСИ и Администрирование" -> "Печатные формы, отчеты и обработки" -> "Расширения", далее -> "Добавить из файла..." -> выбираем файл расширения, перезапускаем по ссылке сеанс. Расширение работает в безопасном режиме, дополнительно не нужно никаких прав.

 

Как пользоваться расширением:

После установки расширения, в случае наличия у пользователя необходимых прав, в форме списка номенклатуры и в форме выбора номенклатуры, в кнопке группы кнопок командной панели "Еще" появится пункт "Настроить дополнительные поля списка"

 

 

По нажатию на который, пользователь увидит окно настроек дополнительных полей:

 

 

В котором он сможет добавить необходимые ему поля в нужном ему порядке. После принятия настроек, в настраиваемом списке вы увидите добавленные поля. Можете пользоваться ими, как обычными - отборы, сортировки, оформление. При следующем открытии формы настройки восстановятся.

Работает на (проверено, писалось на):

Платформа:

Как минимум не ниже 8.3.16 (установлен режим совместимости "минимум"), ниже не проверял

Конфигурации:

УТ 11.5.8.342

ЕРП 2.5.8.405

Инфа для разработчиков:

Перечень добавляемых полей и поддерживаемых форм может быть легко расширен. Все что потребуется - это описать добавляемые поля на примере перечисленных выше, добавить, в случае если ее не было, форму в расширение, и три процедуры в ее модуль и привязать обработчик при создании на сервере после. Минимум трудозатрат и классные плюшки.

Пример кода описания полей:

 

Процедура модификации списка:

 

 

Процедура 	МодифицироватьСписокИФорму(ЭтотОбъект)
	ПараметрыСписка = ПолучитьПараметрыСписка(ЭтотОбъект.ИмяФормы);
	ДСписок 		= ПараметрыСписка.ДСписок;
	МассивТаблиц 	= ПараметрыСписка.МассивТаблиц;
	ПолеСсылки 		= ПараметрыСписка.ПолеСсылки; 
	
	Префикс  		= "Расш_ДополнениеСписков";  	//используем только для обозначения таблиц в запросе и полей формы,
												//пользователь не видит, по нему, при обновлении все удаляем
	СхемаЗапроса 	= Новый СхемаЗапроса;
	СхемаЗапроса.УстановитьТекстЗапроса(ЭтотОбъект[ДСписок].ТекстЗапроса);
	
	ПоследнийПакет 	= СхемаЗапроса.ПакетЗапросов.Количество() - 1;
	Пакет = СхемаЗапроса.ПакетЗапросов[ПоследнийПакет];
	Оператор = Пакет.Операторы[0]; 	//в результирующем пакете не должно быть (по идее...) объединений таблиц, поэтому беру 0
	
	//восстановим запрос - удалим источники по префиксу
	Для Сч = -(Оператор.Источники.Количество() - 1) По 0 Цикл
		Если СтрНачинаетсяС(Оператор.Источники[-Сч].Источник.Псевдоним,Префикс) Тогда
			Оператор.Источники.Удалить(-Сч);	
		КонецЕсли;
	КонецЦикла;	

	ИндексСсылки 		= Пакет.Колонки.Индекс(Пакет.Колонки.Найти(ПолеСсылки)); 	//ищем "главное" поле в исходном запросе для последующих соединений
	ГлавноеПоле	 		= Оператор.ВыбираемыеПоля[ИндексСсылки]; 				//наименование поля ссылки на номенлатуру для соединения
	ГлавнаяТаблица 		= СтрРазделить(ГлавноеПоле,".")[0]; 			//наименование таблицы со ссылкойна номенлатуру для поиска ее индекса и условий связей
	Источники 			= Оператор.Источники;
	ИндексГлавнойТаблицы = Источники.Индекс(Источники.НайтиПоПсевдониму(ГлавнаяТаблица)); //к ней по ее индексу и будем соединять
	
	/////////////////////////////////////////////////////////////////////////////////////////////////////
	//модификация запроса
	/////////////////////////////////////////////////////////////////////////////////////////////////////
	ДобавленныеПараметры 	= Новый Соответствие;  							//храним добавленные таблицы в разрезе значений параметра (Склад, Цена)
	ДобавленныеПараметрыИмя = Новый Соответствие;  							//храним имя параметра в запросе: ПараметрРасширения1,2,3...
	СчетчикИсточников		= 1;                                            //счетчик добавленных Источников для формирования Псевдонима в запросе
	Попытка
		Для каждого СтрокаПоле ИЗ ЭтотОбъект["НастройкиУниверсальные"] Цикл    	//в виде массива структур "Источник,ПсевдонимИсточника" 
			ЗначениеПараметра = СтрокаПоле.Значение;                            //текущее значение параметра (Склад, Цена)
			Если ДобавленныеПараметры[ЗначениеПараметра] = Неопределено Тогда
				ДобавленныеПараметры.Вставить(ЗначениеПараметра, Новый Массив);
				ДобавленныеПараметрыИмя.Вставить(ЗначениеПараметра,"ПараметрРасширения" + ДобавленныеПараметры.Количество());
			КонецЕсли;
			ДобавленныйПараметр 	= ДобавленныеПараметры[ЗначениеПараметра];  	//тут лежат уже добавленные по нему таблицы в виде массива структур
			ДобавленныйПараметрИмя 	= ДобавленныеПараметрыИмя[ЗначениеПараметра];   //так он будет называться в запросе
			
			ИндексНастройки = ЭтотОбъект["НастройкиУниверсальные"].Индекс(СтрокаПоле); //????? вроде без него обошелся
			Настройка = ЭлементПоПредставлениюСервер(СтрокаПоле.ТипПредставление, ЭтотОбъект["СтруктураТипов"]);          //текущая струтура в которой полное описание добавляемого поля
			                                                                                                              
			МассивЗанятыхИмен 	= ЭтотОбъект["НастройкиУниверсальные"].Выгрузить().ВыгрузитьКолонку("ЧеловеческоеИмя");
			ЗначениеСтрока		= ?(ЗначениеЗаполнено(ЗначениеПараметра), Строка(ЗначениеПараметра), Настройка.Ключ); 	  //либо представление параметра, либо ключ структуры: Цена, ОстатокФактический и т.д.
			Представление 		= ?(ПустаяСтрока(СтрокаПоле.Представление), ЗначениеСтрока, СтрокаПоле.Представление);    //приоритет представлению, прописанному вручную
			ЧеловеческоеИмя 	= ПолучитьЧеловеческоеИмя(Представление, МассивЗанятыхИмен);                              //приводим его к "допустимому имени реквизита", добавляем цыфры - если занят
			СтрокаПоле.ЧеловеческоеИмя	= ЧеловеческоеИмя;	                                                              //в дальнейшем это будет поле в запросе и компоновке
		
		    //обходим добавляемые таблицы для поля, ищем их в ДобавленныйПараметр, если не находим - добавляем
			ПсевдонимыИсточников = Новый Массив;        //тут будем хранить псевдонимы добавленных/найденных источников, тобы их подставить в Поле по номеру 
			                                            //в рамках строки настроек (по добавляемому полю)
														
			Если НЕ Настройка.Значение.Свойство("Структура") Тогда
				Сообщить("Свойства не заполнены: " + Настройка.Ключ);												
				Продолжить; //отладка, проверка заполнения свойств
			КонецЕсли;
			
			Для каждого Таблица Из Настройка.Значение.Структура.Источники Цикл 
				ТекущийИсточникТекст 		= Таблица.Источник;
				ТекущийИсточникУсловие 		= Таблица.Условие;
				ТекущийИсточникПараметры	= Таблица.Параметры;
				//поиск среди уже добавленных
				ТекущийПсевдоним = "";
				Для каждого ДобавленныйИсточник из ДобавленныйПараметр Цикл
					Если ДобавленныйИсточник.Источник = ТекущийИсточникТекст Тогда
						ТекущийПсевдоним = ДобавленныйИсточник.ПсевдонимИсточника;
						Прервать;
					КонецЕсли;
				КонецЦикла;
				
				//добавляем Источник, если не нашли в коллекцию добавленных и далее в запрос
				Если ТекущийПсевдоним = "" Тогда
					ТекущийПсевдоним = Префикс + СчетчикИсточников;
					СчетчикИсточников = СчетчикИсточников + 1;
					ДобавленныйПараметр.Добавить(Новый Структура("Источник,ПсевдонимИсточника", ТекущийИсточникТекст, ТекущийПсевдоним));
				Иначе
					ПсевдонимыИсточников.Добавить(ТекущийПсевдоним);
					Прервать; //такой источник с установленным параметром Значение уже добавлен в запрос
				КонецЕсли;    //добавляем в массив ПсевдонимыИсточников для формирования выражения 
				              //ВНИМАНИЕ возможно что при использовании виртуальных табл с разными параметрами они будут считаться ождинаковыми
							  
				ПсевдонимыИсточников.Добавить(ТекущийПсевдоним); //после добавления всех источников по Полю тут будут все псевдонимы
				                                                 //добавленных источников, для формирования выражения поля, в нужном порядке
				//добавляем в запрос
				//проверим ЗначениеПараметра на заполнено, если не заполнено, тогда удалим 
				//из ТекущийИсточникТекст и ТекущийИсточникУсловие все строки из УдалитьПоНезаполнено
				Если НЕ ЗначениеЗаполнено(ЗначениеПараметра) Тогда
					Для Каждого УдаляемыйТекст из Таблица.УдалитьПоНезаполнено Цикл
						ТекущийИсточникТекст 	= СтрЗаменить(ТекущийИсточникТекст, УдаляемыйТекст, "");
						ТекущийИсточникУсловие 	= СтрЗаменить(ТекущийИсточникУсловие, УдаляемыйТекст, "");
					КонецЦикла;
				КонецЕсли;
				
				//подставляем в ТекущийИсточникТекст и ТекущийИсточникУсловие параметр и псевдонимы источников
				//в ТекущийИсточникТекст %1 это ДобавленныйПараметрИмя
				//в ТекущийИсточникУсловие %0 это ДобавленныйПараметрИмя, %1 это ГлавнаяТаблица, %2 это ТекущийПсевдоним 
				ТекущийИсточникТекст 	= СтрЗаменить(ТекущийИсточникТекст, "%1", "&"+ДобавленныйПараметрИмя);
				ТекущийИсточникУсловие 	= СтрЗаменить(ТекущийИсточникУсловие, "%0", "&"+ДобавленныйПараметрИмя);
				ТекущийИсточникУсловие 	= СтрЗаменить(ТекущийИсточникУсловие, "%1", ГлавнаяТаблица);
				ТекущийИсточникУсловие 	= СтрЗаменить(ТекущийИсточникУсловие, "%2", ТекущийПсевдоним);			
				
				Если СтрНачинаетсяС(ТекущийИсточникТекст, "ВЫБРАТЬ") Тогда
					ДобавленныйИсточник = Источники.Добавить(Тип("ВложенныйЗапросСхемыЗапроса"), ТекущийПсевдоним);
					ДобавленныйИсточник.Источник.Запрос.УстановитьТекстЗапроса(ТекущийИсточникТекст);
				Иначе
					ДобавленныйИсточник = Источники.Добавить(ТекущийИсточникТекст, ТекущийПсевдоним);
				КонецЕсли;                   
				
				//установим параметры виртуальных таблиц, в случае их наличия и заполненного параметра
				Если ЗначениеЗаполнено(ЗначениеПараметра) И ТекущийИсточникПараметры.Количество() > 0 Тогда
					Для Сч = 0 По ДобавленныйИсточник.Источник.Параметры.Количество()-1 Цикл
						Если ТекущийИсточникПараметры.Количество() >= Сч+1 Тогда
							ДобавленныйИсточник.Источник.Параметры[Сч].Выражение = Новый ВыражениеСхемыЗапроса(СтрЗаменить(ТекущийИсточникПараметры[Сч],"%1","&"+ДобавленныйПараметрИмя));
						КонецЕсли;
					КонецЦикла;
				КонецЕсли;
				
				ДобавленныйИсточник.Соединения.Очистить(); //система при добавлении сама генерит условие связи, чаще неверно 
				//добавляем сами
				Оператор.Источники[ИндексГлавнойТаблицы].Соединения.Добавить(ДобавленныйИсточник, ТекущийИсточникУсловие);
			КонецЦикла;
		
		    //добавляем Поле
			Поле = Настройка.Значение.Структура.Поле;
			//подставляем вместо %1 %2 Псевдонимы источников из ПсевдонимыИсточников
			Для Сч = 0 По ПсевдонимыИсточников.ВГраница() Цикл
				Поле = СтрЗаменить(Поле, "%" + (Сч + 1), ПсевдонимыИсточников[Сч]);
			КонецЦикла;
			//вместо 0% ДобавленныйПараметрИмя
			Поле = СтрЗаменить(Поле, "%0", ДобавленныйПараметрИмя);
			
			
			Колонка = Оператор.ВыбираемыеПоля.Добавить(Поле);
			ИндексПоля = Оператор.ВыбираемыеПоля.Индекс(Колонка);
						
			Пакет.Колонки[ИндексПоля].Псевдоним = Настройка.Ключ + "_" + ЧеловеческоеИмя; //если не заполнен параметр и псевдоним то Настройка.Ключ будет 2 раза...
		КонецЦикла;
		
		ЭтотОбъект[ДСписок].ТекстЗапроса = СхемаЗапроса.ПолучитьТекстЗапроса();
		
		//Возврат;
		//установим значения параметров запроса, обходя ДобавленныеПараметрыИмя
		Для каждого Элемент Из ДобавленныеПараметрыИмя Цикл
			Если ЗначениеЗаполнено(Элемент.Ключ) Тогда              //не добавляем пустые ссылки, параметры таблиц с пустыми ссылками должны были быть удалены
				ЭтотОбъект[ДСписок].Параметры.УстановитьЗначениеПараметра(Элемент.Значение, Элемент.Ключ);
			КонецЕсли;
		КонецЦикла;
		
		
		/////////////////////////////////////////////////////////////////////////////////////////////////////
		//модификация формы
		/////////////////////////////////////////////////////////////////////////////////////////////////////	
		
		
		//удалим элементы по префиксу в таблицах из МассивТаблиц
		/////////////////////////////////////////////////////////////////////////////////////////////////////
		МассивУдаляемых = Новый Массив;
		Для каждого ПроверяемаяТаблица из МассивТаблиц Цикл	
			Для каждого Элемент Из ЭтотОбъект.Элементы[ПроверяемаяТаблица].ПодчиненныеЭлементы Цикл
				Если ТипЗнч(Элемент) = Тип("ПолеФормы") И СтрНачинаетсяС(Элемент.Имя, Префикс) тогда	
					МассивУдаляемых.Добавить(Элемент);
				КонецЕсли;
			КонецЦикла;
		КонецЦикла;
		
		Для Каждого Элемент из МассивУдаляемых Цикл
			ЭтотОбъект.Элементы.Удалить(Элемент);
		КонецЦикла;
		
		//добавим элементы в табличные части
		/////////////////////////////////////////////////////////////////////////////////////////////////////
		Для каждого СтрокаТЗ Из ЭтотОбъект["НастройкиУниверсальные"] Цикл
			ИндексТекСтрока = ЭтотОбъект["НастройкиУниверсальные"].Индекс(СтрокаТЗ);
			ЧеловеческоеИмя = СтрокаТЗ.ЧеловеческоеИмя;
			Настройка 		= ЭлементПоПредставлениюСервер(СтрокаТЗ.ТипПредставление, ЭтотОбъект["СтруктураТипов"]);
			Для каждого ТаблицаФормы Из МассивТаблиц Цикл
				ИндексТаблицыФормы = МассивТаблиц.Найти(ТаблицаФормы);

				Поле = ЭтотОбъект.Элементы.Добавить(Префикс + ИндексТаблицыФормы + ЧеловеческоеИмя, Тип("ПолеФормы"), ЭтотОбъект.Элементы[ТаблицаФормы]);
				Поле.ТолькоПросмотр = Истина;
				Если ЧеловеческоеИмя <> Настройка.Ключ Тогда
					Ключ = Символы.ПС + "(" + Настройка.Ключ + ")";
				Иначе
					Ключ = "";
				КонецЕсли;
				Поле.Заголовок = СтрЗаменить(ЧеловеческоеИмя,"_"," ") + Ключ;//Символы.ПС + Настройка.Ключ;
				Поле.ПутьКДанным = ДСписок + "." + Настройка.Ключ + "_" + ЧеловеческоеИмя;         
			КонецЦикла;
		КонецЦикла;	
		
		Для каждого ТаблицаФормы Из МассивТаблиц Цикл
			ЭтотОбъект.Элементы[ТаблицаФормы].ВысотаШапки = 2;
		КонецЦикла;
		
		
		КоллекцияДляПроверки = ЭтотОбъект[ДСписок].КомпоновщикНастроек.ПользовательскиеНастройки.Элементы;
		УдалитьНедоступныеПоля(КоллекцияДляПроверки); ////infostart.ru/1c/articles/1812410/
	Исключение
		Сообщить("Ошибка модификации формы: " + ОписаниеОшибки());
	КонецПопытки;
	
	
КонецПроцедуры

 

 

номенклатура остатки цены себестоимость динамический список дополнительные поля

См. также

Infostart Toolkit: Инструменты разработчика 1С 8.3 на управляемых формах

Инструментарий разработчика Роли и права Запросы СКД Платформа 1С v8.3 Управляемые формы Запросы Система компоновки данных Конфигурации 1cv8 Платные (руб)

Набор инструментов программиста и специалиста 1С для всех конфигураций на управляемых формах. В состав входят инструменты: Консоль запросов, Консоль СКД, Консоль кода, Редактор объекта, Анализ прав доступа, Метаданные, Поиск ссылок, Сравнение объектов, Все функции, Подписки на события и др. Редактор запросов и кода с раскраской и контекстной подсказкой. Доработанный конструктор запросов тонкого клиента. Продукт хорошо оптимизирован и обладает самым широким функционалом среди всех инструментов, представленных на рынке.

10000 руб.

02.09.2020    126655    685    389    

738

Infostart PrintWizard - создание и редактирование печатных форм в 1С 8.3

Пакетная печать Печатные формы Инструментарий разработчика Платформа 1С v8.3 Запросы 1С:Зарплата и кадры бюджетного учреждения 1С:Конвертация данных 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 Платные (руб)

Инструмент, позволяющий абсолютно по-новому взглянуть на процесс разработки печатных форм. Благодаря конструктору можно значительно снизить затраты времени на разработку печатных форм, повысить качество и "прозрачность" разработки, а также навести порядок в многообразии корпоративных печатных форм.

18000 руб.

06.10.2023    8344    24    6    

45

Infostart УДиФ: Управление данными и формами 1С

Инструменты администратора БД Инструментарий разработчика Роли и права Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

Расширение позволяет без изменения кода конфигурации выполнять проверки при вводе данных, скрывать от пользователя недоступные ему данные, выполнять код в обработчиках. Не изменяет данные конфигурации, легко устанавливается практически на любую конфигурацию на управляемых формах.

10000 руб.

10.11.2023    4698    12    2    

38

SALE! %

PowerTools

Инструментарий разработчика Инструменты администратора БД Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Россия Платные (руб)

Универсальный инструмент программиста для администрирования конфигураций. Сборник наиболее часто используемых обработок под единым интерфейсом.

3600 2280 руб.

14.01.2013    178886    1084    0    

862

Бустер Конвертации данных 3 (Infostart Toolkit)

Инструментарий разработчика 8.3.14 1С:Конвертация данных Россия Платные (руб)

Расширение для конфигурации “Конвертация данных 3”. Добавляет подсветку синтаксиса, детальную контекстную подсказку, глобальный поиск по коду.

15000 руб.

07.10.2021    15085    3    12    

37

Богатый редактор картинок, хранимых в базе, с возможностью РИСОВАНИЯ. Редактор внешних файлов картинок. Объект, расширяющий возможности работы с картинками из встроенного языка (Три в одном) + Обработка «Стандартизация картинок»

Работа с интерфейсом Рабочее место Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Платные (руб)

Обработка предназначена для редактирования картинок в режиме «Предприятие», с возможностью РИСОВАТЬ на них. Поддерживается работа как в обычных формах (толстый клиент) так и на управляемых формах (тонкий клиент). Обработка позволяет редактировать как картинки, хранимые в базе, так и графические файлы с диска на файловой системе. Помимо базовых функций (изменение размеров, преобразование формата, обрезание картинки, повороты и т.п.) – редактор имеет богатый набор инструментов для рисования. Доступна функция вставки изображения из буфера обмена. Также обработка может быть использована из встроенного языка как объект для редактирования картинок. Объект может быть использован: на стороне клиента, на стороне сервера, из внешнего соединения. Данная обработка будет особенно полезна тем, кто вносит картинки в базу (изображения номенклатуры, фотографии физических лиц и т.п.). Функционал реализуется с использованием JavaScript и бесплатного ПО ImageMagick (без использования внешних компонент).

6000 руб.

16.01.2015    62058    43    59    

81

Многопоточность. Универсальный «Менеджер потоков» 2.1

Инструментарий разработчика Платформа 1С v8.3 Конфигурации 1cv8 Россия Платные (руб)

Восстановление партий или взаиморасчетов, расчет зарплаты, пакетное формирование документов или отчетов - теперь все это стало доступнее. * Есть желание повысить скорость работы медленных алгоритмов! Но... * Нет времени думать о реализации многопоточности? * о запуске и остановке потоков? * о поддержании потоков в рабочем состоянии? * о передаче данных в потоки и как получить ответ из потока? * об организации последовательности? Тогда ЭТО - то что надо!!!

5000 руб.

07.02.2018    99808    240    97    

298

[Расширения] Динамическое управление видимостью и доступностью элементов форм (УФ) (8.3.6+)

Работа с интерфейсом Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Платные (руб)

Механизм «Динамическое управление доступом к элементам форм объектов 1С8» предназначен для обеспечения возможности оперативного управления видимостью и доступностью элементов форм документов и справочников продуктов фирмы «1С» «1С:Предприятие 8». Решение универсальное, встраивается в любую конфигурацию с минимальными доработками, что позволяет без проблем обновлять типовые решения.

5000 руб.

14.01.2016    54672    16    21    

42
Оставьте свое сообщение