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

26.09.23

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

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

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

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

Заказчик переходил с переписанной торговли 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    92000    116    40    

206

Программа для фулфилмента (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    35621    30    59    

58

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

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

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

10560 руб.

29.10.2014    212905    635    526    

448

Загрузка номенклатуры 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    152588    370    376    

505

Перенос данных из УТ 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 оперативно выпускаем обновление переноса данных.

45650 руб.

24.04.2015    191665    135    239    

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