Просмотр остатков по складам в колонках при подборе. УТ 11.5

26.09.23

Учетные задачи - Логистика, склад и ТМЦ

Заказчик переходил с переписанной торговли 7.7 на УТ 11.5. В 7.7. был подбор с остатками по всем складам, попросили сделать в УТ так же. Ниже - код для основной формы обработки "ПодборТоваровВДокументПродажи" Создано расширение, которое позволяет при подборе товаров видеть остатки по всем складам из группы складов, указанной в документе продажи. Вы можете изменить алгоритм поведения формы под своего заказчика.

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

Наименование Файл Версия Размер
Остатки по складам в колонках в подборе при продаже УТ 11.5:
.cfe 45,74Kb
9
.cfe 45,74Kb 9 Скачать

Заказчик переходил с переписанной торговли 7.7 на УТ 11.5.

В 7.7. был подбор с просмотром остатков по складам в колонках списка, не активизируя строку, попросили сделать в УТ так же:

Чтобы операторы не мучались, надо отключить

Создаем расширение, в котором правим только основную форму "ПодборТоваровВДокументПродажи".

 

Прежде всего необходимо "ПриСозданииНаСервере " проверить, если это группа складов, то добавить  колонки со складами из группы
И добавить процедуры для соответствующих списков "ПриПолученииДанныхНаСервере"

 //=============================================    Подключение к элементам формы
 
&НаСервере
&После("ПриСозданииНаСервере")
Процедура РасшОстатки_ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) 
	// Включаем наш интерфейс только! при подборе по группе складов.
	Если Склад.ЭтоГруппа Тогда    
		КомпанияИНФОРМ_ДобавитьОбновитьЭлементыИнтерфейсаНаФорму();
	КонецЕсли;	
КонецПроцедуры

&НаСервереБезКонтекста
Процедура РасшОстатки_СписокСтандартныйПоискНоменклатураПриПолученииДанныхНаСервереПосле(ИмяЭлемента, Настройки, Строки)
	КомпанияИНФОРМ_ЗаполнитьСтрокиСпискаОстатками(Строки);
КонецПроцедуры


&НаСервереБезКонтекста
Процедура РасшОстатки_СписокРасширенныйПоискНоменклатураПриПолученииДанныхНаСервереПосле(ИмяЭлемента, Настройки, Строки)
	КомпанияИНФОРМ_ЗаполнитьСтрокиСпискаОстатками(Строки);
КонецПроцедуры

Оставим основной запрос типовым, как он есть, но добавим к нему склады в колонки. К именам колонок добавим "Склад_" , чтобы отображать остатки "ПриПолученииДанныхНаСервере"


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

	
	ТекстЗапросаСтандарт = ЭтаФорма.СписокНоменклатура.ТекстЗапроса; 
	// получим таблицу складов, чтобы добавить заголовки в запрос
	ТаблицаСкладов = КомпанияИНФОРМ_ПолучитьТаблицуСкладов();
	
	// добавим поля для запроса склады
	ТекущийТекстЗапроса = ЭтаФорма.СписокНоменклатура.ТекстЗапроса;
	ВставляемыйТекстЗапроса = " 
	                     | ";
	Для Каждого ТекСклад Из ТаблицаСкладов Цикл
		ВставляемыйТекстЗапроса = ВставляемыйТекстЗапроса +""""""+" КАК " + ТекСклад.ИмяДляФормы+",
		|";
	КонецЦикла; 
	ВставляемыйТекстЗапроса = ВставляемыйТекстЗапроса +""""""+" КАК " + "ИтогоПоСкладам"+",
	|";
	
	// добавим в текст запроса новые поля после слова ВЫБРАТЬ
	НовыйТекстЗапроса  = "ВЫБРАТЬ"+ ВставляемыйТекстЗапроса + Сред(ТекущийТекстЗапроса,9); 	
	
	
	
	// добавляю настройки по требованию заказчика:
	НовыйТекстЗапроса = СтрЗАменить(НовыйТекстЗапроса,"НЕ СправочникНоменклатура.ЭтоГруппа","ИСТИНА");//уберем условие отбора элементов без групп
	
	Элементы[ТаблицаФормыКудаДобавляем].Отображение = ОтображениеТаблицы.ИерархическийСписок; //сделаем подбор иерархическим, как было в 7.7 
	ЭтаФорма.ВариантНавигации 		= ПредопределенноеЗначение("Перечисление.ВариантыНавигацииВФормахНоменклатуры.ПоИерархии"); //включаем навигацию по иерархии
	ЭтаФорма.Элементы.СтраницаФильтры.Видимость		= Ложь;                                             						//отключаем фильтры,
	ЭтаФорма.ИспользоватьФильтры 	= Ложь; 
	
	ИспользоватьФильтрыПриИзмененииНаСервере(); // вызов процедуры, чтобы все настройки вступисли в силу       
	
	// подменяю текст запроса на новый
	ЭтаФорма.СписокНоменклатура.ТекстЗапроса = НовыйТекстЗапроса;	

	
	
	
	
	// теперь вставляем колонки со складами в поле списка 
	ПервыйПроход = Истина;
	Для Каждого ТекСклад Из ТаблицаСкладов Цикл 
		Элемент = Элементы.Вставить(ТекСклад.ИмяДляФормы, Тип("ПолеФормы"), Элементы[ТаблицаФормыКудаДобавляем],Элементы[ПередКакойКолонкойДобавляем]);
		Элемент.ПутьКДанным = "СписокНоменклатура."+ТекСклад.ИмяДляФормы;
		Элемент.Заголовок = СокрЛП(ТекСклад.Склад);  
		Элемент.ГоризонтальноеПоложение = ГоризонтальноеПоложениеЭлемента.Право;
		Если ПервыйПроход = Истина ТОгда
			ПервыйПроход = Ложь;
			ПередКем = Элемент;
		КонецЕсли;	
	КонецЦикла;    

	Элемент = Элементы.Вставить("ИтогоПоСкладам", Тип("ПолеФормы"), Элементы[ТаблицаФормыКудаДобавляем],ПередКем);
	Элемент.ПутьКДанным = "СписокНоменклатура."+"ИтогоПоСкладам";
	Элемент.Заголовок = СокрЛП("Всего остаток");  
	Элемент.ГоризонтальноеПоложение = ГоризонтальноеПоложениеЭлемента.Право;
	
	//саму колонку "доступности на складе" теперь можно сделать невидимой - она теряет смысл
	Элементы[ПередКакойКолонкойДобавляем].Видимость =Ложь;
	
	
КонецПроцедуры	

&НаСервереБезКонтекста
Функция КомпанияИНФОРМ_ПолучитьИмяСкладаДляФормы(СкладСсылка)   
	// убиреаем все ненужные символы из имени склада.
	РазрешенныеСимволы = "АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ_1234567890";
	ИмяСклада = СокрЛП(СкладСсылка);
	ЧистыйВариант = "";
	Для Поз = 1 По СтрДлина(ИмяСклада) Цикл 
		ТекСимвол = ВРЕГ(Сред(ИмяСклада,Поз,1));
		Если СтрНайти(РазрешенныеСимволы,ТекСимвол) >0 Тогда
			ЧистыйВариант = ЧистыйВариант+ТекСимвол;
		КонецЕсли;
	КонецЦикла;	
	Возврат "СКЛАД_"+ЧистыйВариант;
КонецФункции
	
&НаСервере
Функция КомпанияИНФОРМ_ПолучитьТаблицуСкладов() Экспорт  
	
	СписокСкладов = Новый СписокЗначений; 
	
	СписокСкладов.Добавить(Склад); 
	
	// список складов делаем по алфавиту, но по убыванию. Чтобы при вставке они встали наоборот по возрастанию
	Запрос = Новый Запрос;
	Запрос.Текст = 
		"ВЫБРАТЬ
		|	Склады.Ссылка КАК Склад
		|ИЗ
		|	Справочник.Склады КАК Склады
		|ГДЕ
		|	Склады.ПометкаУдаления = ЛОЖЬ
		|	И Склады.ЭтоГруппа = ЛОЖЬ
		|	И Склады.Ссылка В ИЕРАРХИИ(&СписокСкладов)
		|
		|УПОРЯДОЧИТЬ ПО
		|	Склады.Ссылка УБЫВ
		|АВТОУПОРЯДОЧИВАНИЕ"  ;      
	Запрос.УстановитьПараметр("СписокСкладов",СписокСкладов); 
	ТаблицаСкладов = Запрос.Выполнить().Выгрузить();
	ТаблицаСкладов.Колонки.Добавить("ИмяДляФормы");
	Для Каждого ТекСклад Из ТаблицаСкладов Цикл 
		ТекСклад.ИмяДляФормы = КомпанияИНФОРМ_ПолучитьИмяСкладаДляФормы(ТекСклад.Склад);
	КонецЦикла;	 
	Возврат ТаблицаСкладов; 
КонецФункции	 

 

И, обрабатываю получение остатков по нужным колонкам складов

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

&НаСервереБезКонтекста
Функция КомпанияИНФОРМ_ПолучитьТаблицуОстатковПоСпискуНоменклатуры(СписокНоменклатуры)
 	Запрос = Новый Запрос;
	Запрос.Текст = 
	"ВЫБРАТЬ
	|	РаспределениеЗапасов.Номенклатура КАК Номенклатура,
	|	РаспределениеЗапасов.Склад КАК Склад,
	|	СУММА(РаспределениеЗапасов.Свободно) КАК Свободно
	|ИЗ
	|	РегистрСведений.РаспределениеЗапасов КАК РаспределениеЗапасов
	|ГДЕ
	|	РаспределениеЗапасов.Номенклатура В(&СписокНоменклатуры)
	|
	|СГРУППИРОВАТЬ ПО
	|	РаспределениеЗапасов.Склад,
	|	РаспределениеЗапасов.Номенклатура"  ;      
	Запрос.УстановитьПараметр("СписокНоменклатуры",СписокНоменклатуры);
    ТаблицаОстатков = Запрос.Выполнить().ВыГрузить(); 
	ТаблицаОстатков.Колонки.Добавить("ИмяДляФормы");
	Для Каждого ТекСтрока Из ТаблицаОстатков Цикл      
		ТекСтрока.ИмяДляФормы = КомпанияИНФОРМ_ПолучитьИмяСкладаДляФормы(ТекСтрока.Склад);	
	КонецЦикла;
	
	Возврат ТаблицаОстатков;
КонецФункции

 

Готовое расширение прилагаю.

Тестировалось на Платформе 8.3.23.1865.

Конфигурация Управление торговлей, редакция 11 (11.5.12.87).

См. также

Автоматический заказ поставщику в 1С: загрузка прайсов и анализ цен поставщиков для УТ 10.3, УТ 11, КА2, УНФ, УПП, ERP, Розница 2

Бюджетирование и планирование Оптовая торговля Розничная торговля Логистика, склад и ТМЦ Анализ продаж Платформа 1С v7.7 Платформа 1С v8.3 1С:Комплексная автоматизация 1.х 1С:Управление торговлей 10 1С:Розница 2 1С:Управление производственным предприятием 1С:Управление нашей фирмой 1.6 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Розничная и сетевая торговля (FMCG) Оптовая торговля, дистрибуция, логистика Беларусь Украина Россия Казахстан Управленческий учет Платные (руб)

Система управления запасами для 1С помогает работать с запасами правильно: автоматически рассчитывает потребность и делает заказ поставщику, загружает прайсы, перемещает товары по филиалам, анализирует продажи и позволяет управлять ассортиментом.

28500 руб.

21.04.2017    91285    111    40    

200

Загрузка номенклатуры из Excel в УТ11, КА 2, ERP 2, Розница 2. Дополнительные реквизиты и сведения, характеристики, картинки, цены, остатки

Загрузка и выгрузка в Excel Розничная торговля Логистика, склад и ТМЦ Ценообразование, анализ цен Прайсы Платформа 1С v8.3 1С:Комплексная автоматизация 1.х 1С:Розница 2 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Управленческий учет Платные (руб)

Загрузка из файлов xls, xlsx, ods, csv, mxl в УТ11, КА 2, ERP 2, Розница 2. Задействованы все возможности конфигурации - заполнение реквизитов номенклатуры, дополнительных реквизитов и сведений, характеристики, доп.реквизиты и сведения характеристик. Дополнительные обработки для расширения возможностей.

10560 руб.

29.10.2014    212224    630    526    

446

Модуль "Ответственное хранение" или фулфилмент (FBS / FBO) для 1С:УТ 11.5, КА 2.5, ERP 2.5

Логистика, склад и ТМЦ Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Оптовая торговля, дистрибуция, логистика Управленческий учет Платные (руб)

Модуль "Ответственное хранение" для 1С (УТ 11.5, КА 2.5, ERP 2.5) позволяет организовать учет ответственного хранения товаров с весовыми характеристиками, в том числе со сроком годности и личным кабинетом Поклажедателя. Модуль реализован в виде расширения конфигурации, устанавливается в режиме 1С:Предприятие 8 за 5 минут по инструкции, что позволяет оставить конфигурацию 1С на стандартной поддержке и продолжать получать стандартные обновления от фирмы "1С".

60000 руб.

09.06.2020    35142    28    59    

56

AS WMS: автоматизация склада с адресным хранением с помощью ТСД

Логистика, склад и ТМЦ Платформа 1С v8.3 Россия Платные (руб)

Подсистема управления складом AS WMS для конфигураций на платформе 1С 8. AS WMS – готовое решение для эффективного управления адресным складом. Внедрение системы AS WMS способствует быстрому отбору товара, ускорению инвентаризации, снижению зависимости от персонала, исключению пересорта. AS WMS встраивается в любую конфигурацию на платформе 1С 8 и работает как единая система без обменов. В учетной системе нет необходимости менять процессы под AS WMS (например, вводить ордерную схему), AS WMS использует стандартные документы по товародвижению вашей учетной системы.

40000 руб.

26.07.2023    3796    14    0    

11

SALE! 10%

Перенос данных из УТ 10.3 в УТ 11 / КА 2 / ERP 2. Переносятся документы, справочники и остатки

Перенос данных 1C Взаиморасчеты Оптовая торговля Логистика, склад и ТМЦ Файловый обмен (TXT, XML, DBF), FTP Платформа 1С v8.3 1С:Управление торговлей 10 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Управленческий учет Платные (руб)

Можно проверить до покупки, оставьте заявку! Воспользовались более 268 компаний! Перенос в продаже с 2015г., и мы постоянно работаем над его развитием. Перенос данных из УТ 10.3 в УТ 11 | из УТ 10.3 в КА 2 | из УТ 10.3 в ERP. Предлагаем качественное и проверенное временем решение для перехода с УТ 10.3. Можно перенести начальные остатки, нормативно-справочную информацию и все возможные документы. При выгрузке можно установить отбор по периоду, организациям и складам. При выходе новых релизов конфигураций 1C оперативно выпускаем обновление переноса данных.

50722 45650 руб.

24.04.2015    191231    270    239    

270

Загрузка номенклатуры c картинками (несколько потоков одновременно) и сопутствующими данными в базу и любые документы из yml, xls, xlsx, xlsm, ods, ots, csv для УТ 10.3, УТ 11 (все), БП 3, КА 2, ERP 2, УНФ 1.6/3.0, Розница 2

Загрузка и выгрузка в Excel Логистика, склад и ТМЦ Ценообразование, анализ цен Файловый обмен (TXT, XML, DBF), FTP Платформа 1С v8.3 1С:Бухгалтерия 2.0 1С:Управление торговлей 10 1С:Розница 2 1С:Управление нашей фирмой 1.6 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х 1С:Управление нашей фирмой 3.0 Платные (руб)

Эволюция не стоит на месте - новая удобная версия функциональной обработки для Вашего бизнеса! Что же Вы получаете? Удобный и интуитивно понятный интерфейс с 3-мя этапами работы. 2 режима - автоматический и ручной. Чтение XLSX, XLSM, CSV, XML/YML форматов без офиса, на любом сервере! Визуальное связывание колонок файла и реквизитов простым перетаскиванием колонок. Создание или обновление номенклатуры с иерархией, характеристик, доп. реквизитов, упаковок, загрузка практически неограниченного количества картинок на одну номенклатуру (с возможностью загрузки в несколько потоков одновременно), с хранением в томах или в базе. Загрузка номенклатуры поставщиков или поиск по их данным номенклатуры. Загрузка доп. реквизитов в характеристики. Загрузка штрихкодов с генерацией новых. Создание элементов справочников и ПВХ "на лету" для выбранных реквизитов. (Обновление от 09.04.2024, версия 9.9 - 9.10)

14400 руб.

20.11.2015    152013    368    376    

503
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. ksenamal 24.11.23 12:09 Сейчас в теме
Добрый день,
не совсем понятно зачем
// определяем включен ли расширенный поиск подбора товара
В пользовательском режиме расширенный поиск не удобен.
Стандартный поиск позволяет искать номенклатуру по части имени, а расширенный только точное совпадение первого слова имени.
Можно ли использовать расширение при стандартном поиске и подборе номенклатуры?
Оставьте свое сообщение