форма подбора номенкулатуры

1. kolbaska228 13.04.17 10:55 Сейчас в теме
Проблема такая . как сделать в форме подбора номенкулатуры (скрин номер два) после запятой не два знака , три. Код прилагаю. ут 8,1 . редакция 10,3 .




Процедура ОбработкаПодбора(ТабличнаяЧасть, ЗначениеВыбора) Экспорт

	Перем СпособЗаполненияЦен, ВалютаЦены, ЕстьСкладВТабличнойЧасти;
	Перем Номенклатура, ЕдиницаИзмерения, Количество, КоличествоМест, Цена, Характеристика, Серия, Качество;

	Если РаботаСДиалогами.ПроверитьЧтоКачествоВСтруктуреПодбораНеУдовлетворяетУсловиям­Подбора(ЗначениеВыбора,
	   (ТабличнаяЧасть <> Товары Или ВидОперации = Перечисления.ВидыОперацийРеализацияТоваров.ПродажаКомиссия)) Тогда
		Возврат;
	КонецЕсли;

	// Получим параметры подбора из структуры подбора.
	УправлениеЗапасами.ПолучитьПараметрыДокументаИзСтруктуры(ЗначениеВыбора, ТипЦен,
	                                      СпособЗаполненияЦен, Номенклатура, Количество, КоличествоМест, Характеристика,
	                                      ВалютаЦены, Цена, ЕдиницаИзмерения);
    //Мое 1 декабря
	Количество = 0;
	
	Если ПустаяСтрока(ЭлементыФормы.Контрагент.Значение) Тогда
		Сообщить("Выберите контрагента");
		Возврат;
	Иначе
		ЭлементыФормы.Контрагент.Доступность = Ложь;
	КонецЕсли;
	//конец мое
	
	ЗначениеВыбора.Свойство("Серия"   , Серия);
	ЗначениеВыбора.Свойство("Качество", Качество);

	Если НЕ ЗначениеВыбора.Свойство("ЕстьСкладВТабличнойЧасти", ЕстьСкладВТабличнойЧасти) Тогда
		ЕстьСкладВТабличнойЧасти = Ложь;
	КонецЕсли;

	Если (ТабличнаяЧасть = Товары ИЛИ ТабличнаяЧасть = ВозвратнаяТара)
	   И Номенклатура.Услуга Тогда
		Предупреждение("В данном контексте услуги не подбираются!");
		Возврат;
	ИначеЕсли ТабличнаяЧасть = Услуги И Не Номенклатура.Услуга Тогда
		Предупреждение("В данном контексте товары не подбираются!");
		Возврат;
	КонецЕсли;

	// Ищем выбранную позицию в таблице подобранной номенклатуры.
	//  Если найдем - увеличим количество; не найдем - добавим новую строку.
	СтруктураОтбора = Новый Структура();

	Если ТабличнаяЧасть = Товары Тогда
		СтруктураОтбора.Вставить("ЕдиницаИзмерения", ЕдиницаИзмерения);
		СтруктураОтбора.Вставить("ХарактеристикаНоменклатуры", Характеристика);
		СтруктураОтбора.Вставить("СерияНоменклатуры"         , Серия);
		Если ЗначениеЗаполнено(Качество) Тогда
			СтруктураОтбора.Вставить("Качество"         , Качество);
		КонецЕсли;
		Если СпособЗаполненияЦен = Перечисления.СпособыЗаполненияЦен.ПоРозничнымЦенам Тогда
			СтруктураОтбора.Вставить("Цена", Цена);
		КонецЕсли;
	Иначе
		СтруктураОтбора.Вставить("Номенклатура", Номенклатура);
	КонецЕсли;

	Если ЕстьСкладВТабличнойЧасти
	   И ТабличнаяЧасть <> Услуги
	   И ЗначениеЗаполнено(Склад) Тогда
		СтруктураОтбора.Вставить("Склад", Склад);
	КонецЕсли;

	СтрокаТабличнойЧасти = ОбработкаТабличныхЧастей.НайтиСтрокуТабЧасти(ТабличнаяЧасть, СтруктураОтбора);
	Если СтрокаТабличнойЧасти <> Неопределено Тогда

		Если ТабличнаяЧасть = Товары Тогда

			// Нашли, увеличиваем количество в первой найденной строке.
			СтрокаТабличнойЧасти.Количество = СтрокаТабличнойЧасти.Количество + Количество;
			//Мое 1 декабря
			СтрокаТабличнойЧасти.Упаковок =СтрокаТабличнойЧасти.Упаковок + глУпаковок;
			СтрокаТабличнойЧасти.БезУпаковки =СтрокаТабличнойЧасти.БезУпаковки + глБезУпаковоки;
			глУпаковок = 0;
			глБезУпаковоки = 0;
			//---

			ОбработкаТабличныхЧастей.РассчитатьКоличествоМестТабЧасти(СтрокаТабличнойЧасти, ЭтотОбъект);

			Если Не ПересчитатьАвтоматическиеСкидки() Тогда 
				// рассчитать реквизиты табличной части
//				ОбработкаТабличныхЧастей.РассчитатьСуммуТабЧасти(СтрокаТабличнойЧасти, ЭтотОбъект);
				ОбработкаТабличныхЧастей.РассчитатьСуммуНДСТабЧасти(СтрокаТабличнойЧасти, ЭтотОбъект);
			КонецЕсли;

			СтрокаТабличнойЧасти.Склад = Склад;

			Если НЕ ЗначениеЗаполнено(СтрокаТабличнойЧасти.ЗаказПокупателя)
			   И ТипЗнч(Сделка) = Тип("ДокументСсылка.ЗаказПокупателя") Тогда
				СтрокаТабличнойЧасти.ЗаказПокупателя = Сделка;
			КонецЕсли;

		ИначеЕсли ТабличнаяЧасть = ВозвратнаяТара Тогда

			// Нашли, увеличиваем количество в первой найденной строке.
			СтрокаТабличнойЧасти.Количество = СтрокаТабличнойЧасти.Количество + Количество;

			// Рассчитать реквизиты табличной части.
			ОбработкаТабличныхЧастей.РассчитатьСуммуВозвратнойТарыТабЧасти(СтрокаТабличнойЧасти, ЭтотОбъект);
			СтрокаТабличнойЧасти.Склад = Склад;

			Если НЕ ЗначениеЗаполнено(СтрокаТабличнойЧасти.ЗаказПокупателя)
			   И ТипЗнч(Сделка) = Тип("ДокументСсылка.ЗаказПокупателя") Тогда
				СтрокаТабличнойЧасти.ЗаказПокупателя = Сделка;
			КонецЕсли;

		ИначеЕсли ТабличнаяЧасть = Услуги Тогда

			// Нашли, увеличиваем количество в первой найденной строке.
			СтрокаТабличнойЧасти.Количество = СтрокаТабличнойЧасти.Количество + Количество;

			// Рассчитать реквизиты табличной части.
			ОбработкаТабличныхЧастей.РассчитатьКоличествоМестТабЧасти(СтрокаТабличнойЧасти, ЭтотОбъект);
//			ОбработкаТабличныхЧастей.РассчитатьСуммуТабЧасти(СтрокаТабличнойЧасти, ЭтотОбъект);
			ОбработкаТабличныхЧастей.РассчитатьСуммуНДСТабЧасти(СтрокаТабличнойЧасти, ЭтотОбъект);

			Если НЕ ЗначениеЗаполнено(СтрокаТабличнойЧасти.ЗаказПокупателя)
			   И ТипЗнч(Сделка) = Тип("ДокументСсылка.ЗаказПокупателя") Тогда
				СтрокаТабличнойЧасти.ЗаказПокупателя = Сделка;
			КонецЕсли;

		КонецЕсли;
	Иначе

		// Не нашли - добавляем новую строку.
		СтрокаТабличнойЧасти = ТабличнаяЧасть.Добавить();
		СтрокаТабличнойЧасти.Номенклатура     = Номенклатура;
		Если ТабличнаяЧасть = Товары Тогда

			СтрокаТабличнойЧасти.Количество       = Количество;
			//Мое 1 декабря
			СтрокаТабличнойЧасти.Упаковок = глУпаковок;
			СтрокаТабличнойЧасти.БезУпаковки =глБезУпаковоки;
			глУпаковок = 0.000;
			глБезУпаковоки = 5;
			ЦенаСоСкидкой = 0;
			//--
			
			ОбработкаТабличныхЧастей.ЗаполнитьСпособСписанияОстаткаТоваровТабЧасти(СтрокаТабличнойЧасти, ЭтотОбъект);
			СтрокаТабличнойЧасти.ЕдиницаИзмерения = ЕдиницаИзмерения;
			СтрокаТабличнойЧасти.Коэффициент      = СтрокаТабличнойЧасти.ЕдиницаИзмерения.Коэффициент;
			СтрокаТабличнойЧасти.ХарактеристикаНоменклатуры = Характеристика;
			СтрокаТабличнойЧасти.СерияНоменклатуры          = Серия;
			Если ЗначениеЗаполнено(Качество) Тогда
				СтрокаТабличнойЧасти.Качество          = Качество;
			КонецЕсли;

			// Заполняем реквизиты табличной части.
			ОбработкаТабличныхЧастей.ЗаполнитьСтавкуНДСТабЧасти(СтрокаТабличнойЧасти, ЭтотОбъект, "Реализация");

			Если Цена <> Неопределено Тогда
				Цена = Ценообразование.ПересчитатьЦенуПриИзмененииВалюты(Цена, ВалютаЦены, ВалютаДокумента, ЗаполнениеДокументов.КурсДокумента(ЭтотОбъект, мВалютаРегламентированногоУчета), ЗаполнениеДокументов.КратностьДокумента(ЭтотОбъект, мВалютаРегламентированногоУчета), Дата);

				СтрокаТабличнойЧасти.Цена = Ценообразование.ПересчитатьЦенуПриИзмененииФлаговНалогов(Цена,
				                                                 СпособЗаполненияЦен,
				                                                 ТипЦен.ЦенаВключаетНДС,
				                                                 УчитыватьНДС,
				                                                 СуммаВключаетНДС,
				                                                 Ценообразование.ПолучитьСтавкуНДС(СтрокаТабличнойЧасти.СтавкаНДС));
			Иначе
				ПриИзмененииНоменклатурыТоваров(СтрокаТабличнойЧасти);
			КонецЕсли;

			// Рассчитываем реквизиты табличной части.
			СтрокаТабличнойЧасти.Склад = Склад;
			ОбработкаТабличныхЧастей.ЗаполнитьЕдиницуМестТабЧасти(СтрокаТабличнойЧасти, ЭтотОбъект, Ложь);

			Если ТипЗнч(Сделка) = Тип("ДокументСсылка.ЗаказПокупателя") Тогда
				СтрокаТабличнойЧасти.ЗаказПокупателя = Сделка;
			КонецЕсли;

			Если НЕ ЗначениеЗаполнено(Качество) Тогда
				ОбработкаТабличныхЧастей.ЗаполнитьКачествоНоменклатурыТабЧасти(СтрокаТабличнойЧасти, ЭтотОбъект);
			КонецЕсли;

			Если Не ПересчитатьАвтоматическиеСкидки() Тогда // рассчитать реквизиты табличной части
//				ОбработкаТабличныхЧастей.РассчитатьСуммуТабЧасти(СтрокаТабличнойЧасти, ЭтотОбъект);
				ОбработкаТабличныхЧастей.РассчитатьСуммуНДСТабЧасти(СтрокаТабличнойЧасти, ЭтотОбъект);
			КонецЕсли;

			// Ввод состава набора
			СтрокаТабличнойЧасти.КлючСтроки = УправлениеЗапасами.ПолучитьНовыйКлючСтроки(ЭтотОбъект);
			УправлениеЗапасами.ДобавитьСоставНабора(СтрокаТабличнойЧасти, ЭтотОбъект);
			
			
			////////////////////////////////////////////////////////////­////////////////////////////////
			//Расчитываем скидку
			СтрокаТабличнойЧасти.Количество = 1;
			ПересчитатьАвтоматическиеСкидки();
			Скидка = СтрокаТабличнойЧасти.ЦЕна * СтрокаТабличнойЧасти.ПроцентАвтоматическихСкидок /100;
			
			//Записываем текущую цену
			СтрокаТабличнойЧасти.ТекущаяЦена = СтрокаТабличнойЧасти.Цена;
			ЦенаСоСкидкой = СтрокаТабличнойЧасти.ЦЕна - Скидка;
			
			//Округляем цены для розницы
			//Если СтрокаТабличнойЧасти.Номенклатура.БезОкругления = Ложь Тогда
			//	ТипЦенРоз = Справочники.ТипыЦенНоменклатуры.НайтиПоКоду("000000004");
			//	Если ТипЦен = ТипЦенРоз Тогда 
			//		ЦенаСоСкидкой = ОбщегоНазначения.ОкруглитьРозницу(ЦенаСоСкидкой);
			//	КонецЕсли;
			//КонецЕсли;
			
			СтрокаТабличнойЧасти.Цена = ЦенаСоСкидкой;	
			СтрокаТабличнойЧасти.Количество = "";
			
			//Получаем СТОП-ЦЕНУ.
			ТипЦенСтопЦена = Справочники.ТипыЦенНоменклатуры.НайтиПоКоду("000000006");
			Отбор = Новый Структура;
			Отбор.Вставить("Номенклатура", Номенклатура);
			Отбор.Вставить("ТипЦен", ТипЦенСтопЦена);
			Выборка = РегистрыСведений.ЦеныНоменклатуры.СрезПоследних(, Отбор);
			
			//Если есть СТОП-ЦЕНА. Проверяю нижи ли СТОП-ЦЕНЫ продаем
			Если Выборка.Количество() > 0 Тогда
				СтрокаТабличнойЧасти.СтопЦена = Выборка[0].Цена;
				//Если текущая цена ниже Стоп-цены
				Если Выборка[0].Цена > ЦенаСоСкидкой Тогда
					Сообщить("Продажа ниже СТОП-ЦЕНЫ "" " + Номенклатура + " "" "); 
				КонецЕсли;
			КонецЕсли;	
			////////////////////////////////////////////////////////////­////////////////////////////////
			
		ИначеЕсли ТабличнаяЧасть = ВозвратнаяТара Тогда

			СтрокаТабличнойЧасти.Количество       = Количество;

			ОбработкаТабличныхЧастей.ЗаполнитьСпособСписанияОстаткаТоваровТабЧасти(СтрокаТабличнойЧасти, ЭтотОбъект);

			// Пересчитаем цену в валюту документа.
			Цена = Ценообразование.ПересчитатьЦенуПриИзмененииВалюты(Цена, ВалютаЦены, ВалютаДокумента, ЗаполнениеДокументов.КурсДокумента(ЭтотОбъект, мВалютаРегламентированногоУчета), ЗаполнениеДокументов.КратностьДокумента(ЭтотОбъект, мВалютаРегламентированногоУчета), Дата);
 
			// Если цену заполнили из регистра, то ее надо пересчитывать по флагам налогообложения.
			// Считаем, что оценочную стоимость возвратной тары всегда задают с НДС
			// ставки берутся из номенклатуры.
			СтрокаТабличнойЧасти.Цена = Ценообразование.ПересчитатьЦенуПриИзмененииФлаговНалогов(Цена,
			                                     СпособЗаполненияЦен,
			                                     ТипЦен.ЦенаВключаетНДС,
			                                     УчитыватьНДС,
			                                     Истина,
			                                     Ценообразование.ПолучитьСтавкуНДС(СтрокаТабличнойЧасти.Номенклатура.СтавкаНДС));

			// Рассчитать реквизиты табличной части.
			ОбработкаТабличныхЧастей.РассчитатьСуммуВозвратнойТарыТабЧасти(СтрокаТабличнойЧасти, ЭтотОбъект);
			СтрокаТабличнойЧасти.Склад = Склад;

			Если ТипЗнч(Сделка) = Тип("ДокументСсылка.ЗаказПокупателя") Тогда
				СтрокаТабличнойЧасти.ЗаказПокупателя = Сделка;
			КонецЕсли;

		ИначеЕсли ТабличнаяЧасть = Услуги Тогда

			СтрокаТабличнойЧасти.Количество       = Количество;

			// Заполняем реквизиты табличной части.
			ОбработкаТабличныхЧастей.ЗаполнитьСодержаниеТабЧасти(СтрокаТабличнойЧасти, ЭтотОбъект);
			Если ОбщегоНазначения.ПроверитьУслугаОблагаетсяЕНВД(СтрокаТабличнойЧасти.Номенклатура, Организация, Дата,
				                               мОрганизацияЯвляетсяПлательщикомЕНВД) Тогда
				СтрокаТабличнойЧасти.СтавкаНДС = Перечисления.СтавкиНДС.БезНДС;
			Иначе
				ОбработкаТабличныхЧастей.ЗаполнитьСтавкуНДСТабЧасти(СтрокаТабличнойЧасти, ЭтотОбъект, "Реализация");
			КонецЕсли;

			Если Цена <> Неопределено Тогда

				// Пересчитаем цену в валюту документа.
				Цена = Ценообразование.ПересчитатьЦенуПриИзмененииВалюты(Цена, ВалютаЦены, ВалютаДокумента, ЗаполнениеДокументов.КурсДокумента(ЭтотОбъект, мВалютаРегламентированногоУчета), ЗаполнениеДокументов.КратностьДокумента(ЭтотОбъект, мВалютаРегламентированногоУчета), Дата);

				СтрокаТабличнойЧасти.Цена = Ценообразование.ПересчитатьЦенуПриИзмененииФлаговНалогов(Цена,
				                                                 СпособЗаполненияЦен,
				                                                 ТипЦен.ЦенаВключаетНДС,
				                                                 УчитыватьНДС,
				                                                 СуммаВключаетНДС,
				                                                 Ценообразование.ПолучитьСтавкуНДС(СтрокаТабличнойЧасти.СтавкаНДС));

			Иначе
				ОбработкаТабличныхЧастей.ЗаполнитьЦенуПродажиТабЧасти(СтрокаТабличнойЧасти, ЭтотОбъект, мВалютаРегламентированногоУчета);
			КонецЕсли;

			Если Не ПересчитатьАвтоматическиеСкидки() Тогда // рассчитать реквизиты табличной части
//				ОбработкаТабличныхЧастей.РассчитатьСуммуТабЧасти(СтрокаТабличнойЧасти, ЭтотОбъект);
				ОбработкаТабличныхЧастей.РассчитатьСуммуНДСТабЧасти(СтрокаТабличнойЧасти, ЭтотОбъект);
			КонецЕсли;

			Если ТипЗнч(Сделка) = Тип("ДокументСсылка.ЗаказПокупателя") Тогда
				СтрокаТабличнойЧасти.ЗаказПокупателя = Сделка;
			КонецЕсли; 
			
		КонецЕсли;
	КонецЕсли;
	
	
	ТабличнаяЧастьИмя = Метаданные.НайтиПоТипу(ТипЗнч(ТабличнаяЧасть)).Имя;
	ЭлементыФормы[ТабличнаяЧастьИмя].ТекущаяСтрока = СтрокаТабличнойЧасти;
	ЭлементыФормы[ТабличнаяЧастьИмя].ТекущаяКолонка = ЭлементыФормы[ТабличнаяЧастьИмя].Колонки["Упаковок"];

	УчетСерийныхНомеров.ОбработкаПодбораНоменклатурыПоСерийномуНомеру(ЗначениеВыбора, СерийныеНомера,
	                                              ТабличнаяЧасть, СтрокаТабличнойЧасти,
	                                              мПараметрыСвязиСтрокТЧ,
	                                              ТабличнаяЧастьИмя,
	                                              ЭтотОбъект);
												  
												  	
	РасчитатьКоличество(СтрокаТабличнойЧасти);

КонецПроцедуры // ОбработкаПодбора()
Показать
Прикрепленные файлы:
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. eksetro 6 13.04.17 11:08 Сейчас в теме
В форме обработки для поля указать точность 3 знака. Или вам необходимо программно?
Прикрепленные файлы:
Ганс; +1 Ответить
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот