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

26.09.23

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

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

Скачать файл

ВНИМАНИЕ: Файлы из Базы знаний - это исходный код разработки. Это примеры решения задач, шаблоны, заготовки, "строительные материалы" для учетной системы. Файлы ориентированы на специалистов 1С, которые могут разобраться в коде и оптимизировать программу для запуска в базе данных. Гарантии работоспособности нет. Возврата нет. Технической поддержки нет.

Наименование По подписке [?] Купить один файл
Остатки по складам в колонках в подборе при продаже УТ 11.5:
.cfe 45,74Kb
14
14 Скачать (1 SM) Купить за 1 850 руб.

Заказчик переходил с переписанной торговли 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С v7.7 Платформа 1С v8.3 1С:Комплексная автоматизация 1.х 1С:Управление торговлей 10 1С:Розница 2 1С:Управление производственным предприятием 1С:Управление нашей фирмой 1.6 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Розничная и сетевая торговля (FMCG) Оптовая торговля, дистрибуция, логистика Беларусь Украина Россия Казахстан Управленческий учет Платные (руб)

Система управления запасами для 1С помогает работать с запасами правильно: автоматически рассчитывает потребность и делает заказ поставщику, загружает прайсы, перемещает товары по филиалам, анализирует продажи и позволяет управлять ассортиментом. ВНИМАНИЕ! 09.01.25 г. планируется повышение цен на 20%!

28500 руб.

21.04.2017    96911    134    42    

215

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

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

89900 руб.

09.06.2020    39102    29    59    

64

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

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

50000 руб.

26.07.2023    6447    21    0    

12

Логистика, склад и ТМЦ Бухгалтер Пользователь Платформа 1С v8.3 Сельское хозяйство и рыболовство Строительство Горнодобывающая промышленность Розничная и сетевая торговля (FMCG) Транспорт, автопарки, такси Оптовая торговля, дистрибуция, логистика Лесное и деревообрабатывающее хозяйство Управленческий учет Платные (руб)

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

35000 руб.

24.03.2015    126036    303    114    

136

Загрузка и выгрузка в 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 1С:Розница 3.0 Платные (руб)

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

15600 руб.

20.11.2015    156543    376    378    

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