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

26.09.23

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

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

Скачать файл

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

Наименование SM По подписке Купить один файл
Остатки по складам в колонках в подборе при продаже УТ 11.5:
.cfe 45,74Kb
12
12
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С помогает работать с запасами правильно: автоматически рассчитывает потребность и делает заказ поставщику, загружает прайсы, перемещает товары по филиалам, анализирует продажи и позволяет управлять ассортиментом.

28500 руб.

21.04.2017    92811    118    40    

209

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

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

60000 руб.

09.06.2020    36028    29    59    

58

SALE! %

Перенос данных 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 26673 руб.

24.04.2015    191936    136    240    

271

Загрузка и выгрузка в 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    213697    635    526    

449

Адаптация типовых решений Платформа 1С v8.3 1С:Документооборот Россия Платные (руб)

Расширение конфигурации для «1С:Документооборот КОРП», редакция 3.0. позволяет: 1.использовать произвольные табличные части в качестве дополнительных реквизитов к документу; 2 использовать произвольные табличные части в шаблонах в формате docx для автоматического заполнения таблиц.

29400 руб.

29.06.2023    5017    11    5    

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