Обработка-Ценообразование

1. Fanat26 25.08.11 12:33 Сейчас в теме
Здрасте! 1с v7.7 Торговля и склад, есть обработка-ценообразования, выбираю любой товар из номенклатуры, задаю дату и он должен показать какая была цена (розничная, закупочная) на ту дату которую указал, проблема в том что показывает цену на данный момент, т.е. последнюю((
вот код
Перем СписокПодбора,СправочникПодбора;
// СписокПодбора - список, в который отбираются элементы
//							(используется для множественных фильтров)
// СправочникПодбора - строка - идентификатор справочника, из которого осуществляется отбор

Перем ВидСправочника;   // Вид печатаемого справочника (Номенклатура или прайс-лист)
// Определяется параметром. По умолчанию - прайс  
Перем ЗаголовокТаблицы; // Заголовок печатной формы

Перем СписокТоваров;	// список товаров для фильтрации
Перем Конт;
Перем СписокИзмененных;    
Перем СписокПозиций;    
Перем ПечатьВФиксВалюте;
Перем НомерСписка;           
//*******************************************        
Функция глФРМ2(ЧислЗнач,Вал,Реж) 
	// Это процедура нашего стандартного форматирования цен и сумм:
	// Для рублей не печатаем дроби, для других валют 3 знака после запятой
	// Триады отделяем символом (')
	Стр=?(Вал=Константа.БазоваяВалюта,СокрЛ(Формат(ЧислЗнач,"Ч015.2.'")),СокрЛ(Формат(ЧислЗнач,"Ч015.3.'")));
	Если (Реж=0) ИЛИ (ПустаяСтрока(Стр)=1) Тогда
		Возврат Стр;
	Иначе
		Возврат Стр+" "+СокрП(Вал.Наименование);
	КонецЕсли;
КонецФункции

//*******************************************        
Процедура РаботаСоСписком(Режим,Список,ТипСправочника)
	Перем ТекПоз;
	Перем ТекЭлемент;
	Перем Фрм;
	
	ТекПоз = Список.ТекущаяСтрока();
	Если ТекПоз>0 Тогда
		ТекЭлемент=Список.ПолучитьЗначение(ТекПоз);
	КонецЕсли;
	
	Если Режим="Добавить" Тогда		// добавляем в список один элемент
		СписокПодбора = Список;
		СправочникПодбора = ВРег(ТипСправочника);
		// открываем окно подбора
		ОткрытьПодбор("Справочник."+ТипСправочника,,Фрм,0,ТекЭлемент);
		Фрм.ВыборГруппы(1);
		
	ИначеЕсли Режим="ДобавитьНесколько" Тогда  // добавляем в список несколько элементов
		СписокПодбора = Список;
		СправочникПодбора = ВРег(ТипСправочника);
		// открываем окно подбора
		ОткрытьПодбор("Справочник."+ТипСправочника,,Фрм,1,ТекЭлемент);
		Фрм.ВыборГруппы(1);
		
	ИначеЕсли Режим="УдалитьВсе" Тогда	// удаляем все элементы из списка
		Список.УдалитьВсе();
		
	ИначеЕсли Режим="Удалить" Тогда	// удаляем из списка один элемент
		Если ТекПоз>0 Тогда
			Список.УдалитьЗначение(ТекПоз);
		КонецЕсли;
	КонецЕсли;
КонецПроцедуры   

//*******************************************        
Процедура ОбработкаПодбора(Значение)  // Предопределенная процедура
	Перем ПредставлениеЗначения;
	
	Если (ВРег(Значение.Вид())=СправочникПодбора)И(СписокПодбора.НайтиЗначение(Значение)=0) Тогда
		ПредставлениеЗначения = Строка(Значение);
		Если СправочникПодбора="ПРАЙС_ЛИСТ" Тогда
			Если (Значение.ЭтоГруппа()=0)И(Значение.Товар.Выбран()>0) Тогда
				ПредставлениеЗначения = Строка(Значение.Товар);
			КонецЕсли;	
		КонецЕсли;	
		СписокПодбора.ДобавитьЗначение(Значение,ПредставлениеЗначения);
		СписокПодбора.ТекущаяСтрока(СписокПодбора.РазмерСписка());
	КонецЕсли;
КонецПроцедуры
//*******************************************        
Процедура ПриОткрытии()
	СписокИзмененных=СоздатьОбъект("ТаблицаЗначений");
	СписокИзмененных.НоваяКолонка("Товар");  
	СписокИзмененных.НоваяКолонка("ТипЦены");  
	СписокИзмененных.НоваяКолонка("СтараяЦена");
	СписокИзмененных.НоваяКолонка("НоваяЦена");	
	СписокИзмененных.НоваяКолонка("Единица");		
	НаложенФильтрПоТоварам=0;
	Конт=Форма.Параметр;     
	
	Если ПустоеЗначение(Форма.Параметр) = 1 Тогда
		ВидСправочника = "Прайс_лист";    
		ПростоВид="Прайс_лист";    
	Иначе
		ВидСправочника = СокрЛП(Форма.Параметр);
		ПростоВид=СокрЛП(Форма.Параметр);
	КонецЕсли;                           
	
	Если Нрег(ВидСправочника) = "прайс_лист" Тогда
		Форма.ПозицииТекст.Заголовок("Позиции и группы прайс-листа:");
		ЗаголовокТаблицы = "Прайс-лист";
		Форма.Заголовок("Печать прайс-листа");
	ИначеЕсли Нрег(ВидСправочника) = "номенклатура" Тогда
		Форма.ПозицииТекст.Заголовок("Позиции и группы номенклатуры:");
		ЗаголовокТаблицы = "Каталог товаров";
		Форма.Заголовок("Печать каталога товаров");
	Иначе
		Предупреждение("Обработка вызвана с неверным параметром.");
		СтатусВозврата(0);
		Возврат;
	КонецЕсли;
	
	
	НомерСписка=1;
	ДатаЗаписи=   ТекущаяДата();   
	Если ВалютаЗаписи.Выбран()=0 Тогда        
		ПечатьВФиксВалюте = 1;
		ВалютаЗаписи=Константа.БазоваяВалюта;  
		Валюта = ВалютаЗаписи;     
	Иначе	    
		ПечатьВФиксВалюте = 1;
		Валюта = ВалютаЗаписи;                
	КонецЕсли;	   
	
КонецПроцедуры

Процедура Сформировать()
	СписокТоваров = СоздатьОбъект("СписокЗначений"); 
	СписокПозиций = СоздатьОбъект("СписокЗначений"); 
	
	// накладываем множественный фильтр по товарам
	Если МФНоменклатура.РазмерСписка()<>0 Тогда
		
		Для Индекс=1 По МФНоменклатура.РазмерСписка() Цикл
			Позиция = МФНоменклатура.ПолучитьЗначение(Индекс);
			
			НоменкВложенаВДругую=0;
			Для Индекс2=1 По МФНоменклатура.РазмерСписка() Цикл
				Если Индекс2<>Индекс Тогда       
					Позиция2 = МФНоменклатура.ПолучитьЗначение(Индекс2);
					Если Позиция2.ЭтоГруппа()>0 Тогда
						Если Позиция.ПринадлежитГруппе(Позиция2)>0 Тогда
							НоменкВложенаВДругую=1;
							Прервать;
						КонецЕсли;	
					КонецЕсли;	
				КонецЕсли;	
			КонецЦикла;	
			
			Если НоменкВложенаВДругую=1 Тогда
				Продолжить;
			КонецЕсли;	    
			
			Если Позиция.ЭтоГруппа()>0 Тогда
				СпрПозиций = СоздатьОбъект("Справочник."+ВидСправочника);
				СпрПозиций.ИспользоватьРодителя(Позиция.ТекущийЭлемент());
				СпрПозиций.ВыбратьЭлементы(1);
				Пока СпрПозиций.ПолучитьЭлемент()>0 Цикл
					Если СпрПозиций.ЭтоГруппа()=0 Тогда     
						СписокПозиций.ДобавитьЗначение(СпрПозиций.ТекущийЭлемент());
						Если Нрег(ВидСправочника) = "прайс_лист" Тогда
							СписокТоваров.ДобавитьЗначение(СпрПозиций.Товар.ТекущийЭлемент());
						Иначе
							СписокТоваров.ДобавитьЗначение(СпрПозиций.ТекущийЭлемент());
						КонецЕсли;	                                                
					КонецЕсли;
				КонецЦикла;	
			Иначе
				СписокПозиций.ДобавитьЗначение(Позиция.ТекущийЭлемент());
				Если Нрег(ВидСправочника) = "прайс_лист" Тогда
					СписокТоваров.ДобавитьЗначение(Позиция.Товар.ТекущийЭлемент());
				Иначе
					СписокТоваров.ДобавитьЗначение(Позиция.ТекущийЭлемент());
				КонецЕсли;	
			КонецЕсли;	                                                      
			
		КонецЦикла;	
		
		Если СписокПозиций.РазмерСписка()=0 Тогда
			Предупреждение("Список позиций пуст");
			Возврат;
		КонецЕсли;	
		
		НаложенФильтрПоТоварам=1;
	КонецЕсли;	
	
	
	// не включать отсутствующие
	Если ТолькоПрисутствующие<>0 Тогда
		
		ВремРегистры=СоздатьОбъект("Регистры");
		Рег=ВремРегистры.ОстаткиТоваров;
		Если РабочаяДата()<ПолучитьДатуТА() Тогда
			Рег.ВременныйРасчет();                             
			Если НаложенФильтрПоТоварам=1 Тогда
				Рег.УстановитьЗначениеФильтра("Товар",СписокТоваров,2);
			КонецЕсли;	
			Рег.УстановитьЗначениеФильтра("Фирма",глПустаяФирма);
			ВремРегистры.РассчитатьРегистрыПО(РабочаяДата());
		КонецЕсли;
		
		Если НаложенФильтрПоТоварам=1 Тогда
			
			ЧислоТов = СписокПозиций.РазмерСписка();
			Для Индекс = 1 По ЧислоТов Цикл
				
				НеУдовлетвФильтру=0;
				Номенк = СписокТоваров.ПолучитьЗначение(ЧислоТов+1-Индекс);
				
				// накладываем фильтр по присутствию/отсутствию 
				Если Номенк.ВидТовара<>Перечисление.ВидыТоваров.Товар Тогда
					НеУдовлетвФильтру=1;
				Иначе
					Кол = ВремРегистры.ОстаткиТоваров.СводныйОстаток(глПустаяФирма,Номенк,,"ОстатокТовара");
					Если Кол<=0 Тогда
						НеУдовлетвФильтру=1;
					КонецЕсли;
				КонецЕсли;	           
				
				Если НеУдовлетвФильтру=1 Тогда                     
					СписокПозиций.УдалитьЗначение(ЧислоТов+1-Индекс);
				КонецЕсли;
			КонецЦикла;
			
		Иначе   
			
			СпрПозиций = СоздатьОбъект("Справочник."+ВидСправочника);
			СпрПозиций.ВыбратьЭлементы();
			Пока СпрПозиций.ПолучитьЭлемент()>0 Цикл
				Если СпрПозиций.ЭтоГруппа()=0 Тогда     
					Если Нрег(ВидСправочника) = "прайс_лист" Тогда
						Номенк = СпрПозиций.Товар.ТекущийЭлемент();
					Иначе
						Номенк = СпрПозиций.ТекущийЭлемент();
					КонецЕсли;	 
					
					Если Номенк.ВидТовара=Перечисление.ВидыТоваров.Товар Тогда
						Кол = ВремРегистры.ОстаткиТоваров.СводныйОстаток(глПустаяФирма,Номенк.ТекущийЭлемент(),,"ОстатокТовара");
						Если Кол>0 Тогда
							СписокПозиций.ДобавитьЗначение(СпрПозиций.ТекущийЭлемент());
						КонецЕсли;	
					КонецЕсли;	
				КонецЕсли;
			КонецЦикла;	
			
		КонецЕсли;
		
		Если СписокПозиций.РазмерСписка()=0 Тогда
			Предупреждение("Список позиций пуст");
			Возврат;
		КонецЕсли;	
		
		НаложенФильтрПоТоварам=1;
		
	КонецЕсли;	
	
	
	// теперь отбираем позиции справочника
	Если Нрег(ВидСправочника) = "прайс_лист" Тогда
		ТекстЗапроса = "                    
		|Период С '"+Строка(Мин(РабочаяДата(),ПолучитьДатуТА()))+"' По '"+Строка(Мин(РабочаяДата(),ПолучитьДатуТА()))+"';
		|Позиция = Справочник.Прайс_лист.ТекущийЭлемент; 
		|Товар = Справочник.Прайс_лист.Товар;
		|Группировка Позиция Упорядочить По Позиция.Товар.Наименование; 
		|Условие (Позиция В СписокПозиций);
		|";
	ИначеЕсли Нрег(ВидСправочника) = "номенклатура" Тогда
		ТекстЗапроса = "                    
		|Период С '"+Строка(Мин(РабочаяДата(),ПолучитьДатуТА()))+"' По '"+Строка(Мин(РабочаяДата(),ПолучитьДатуТА()))+"';
		|Позиция = Справочник.Номенклатура.ТекущийЭлемент; 
		|Товар = Справочник.Номенклатура.ТекущийЭлемент;
		|Группировка Позиция Упорядочить По Позиция.Наименование; 
		|Условие (Позиция В СписокПозиций);
		|";
	КонецЕсли;
	
	// выполняем запрос
	Запрос = СоздатьОбъект("Запрос");
	Если Запрос.Выполнить(ТекстЗапроса)=0 Тогда
		Возврат;
	КонецЕсли;
	
	Ном=0;
	
	Если (ЕдиницаПечати.ТекущаяСтрока()<>1)И(ЕдиницаПечати.ТекущаяСтрока()<>2) Тогда
		ПечатьВФиксЕдиницах = 0;
	Иначе
		ПечатьВФиксЕдиницах = 1;
	КонецЕсли;	          
	
	
	ВыбОбласть=Таблица.Область("R2C2");	
	ВыбОбласть.Формат("С50");
	ВыбОбласть.Шрифт("Tahoma,204");
	ВыбОбласть.РазмерШрифта(12);             
	
	ВыбОбласть.ЦветТекста(128,0,0);	  
	ВыбОбласть.ГоризонтальноеПоложение(3);        
	ВыбОбласть.Курсив(0)      ;   	
	Выбобласть.ВертикальноеПоложение(2);
	ВыбОбласть.Значение="дата изменения: "+ДатаЗаписи;
	//Выводим заголовок таблицы: код, наименование, единицы и цены            
	ВыбОбласть=Таблица.Область("R3C1");	
	ВыбОбласть.Формат("С50");
	ВыбОбласть.Шрифт("Tahoma,204");
	ВыбОбласть.РазмерШрифта(8);        
	ВыбОбласть.ВысотаСтроки(20);
	ВыбОбласть.Полужирный(1);   
	ВыбОбласть.ЦветФона(170,255,220); 
	ВыбОбласть.Значение="Код"; 
	ВыбОбласть.РамкаОбвести(4,4,4,4);
	ВыбОбласть.ГоризонтальноеПоложение(3);  
	Выбобласть.ВертикальноеПоложение(3);
	ВыбОбласть=Таблица.Область("R3C2");	
	ВыбОбласть.Формат("С50");
	ВыбОбласть.Шрифт("Tahoma,204");
	ВыбОбласть.РазмерШрифта(8);        
	ВыбОбласть.ВысотаСтроки(20);
	ВыбОбласть.Полужирный(1);   
	ВыбОбласть.ЦветФона(170,255,220); 
	ВыбОбласть.Значение="Наименование товаров"; 
	ВыбОбласть.РамкаОбвести(4,4,4,4);
	ВыбОбласть.ГоризонтальноеПоложение(3);  
	Выбобласть.ВертикальноеПоложение(3);   
	ВыбОбласть=Таблица.Область("R3C3");	
	ВыбОбласть.Формат("С50");
	ВыбОбласть.Шрифт("Tahoma,204");
	ВыбОбласть.РазмерШрифта(8);        
	ВыбОбласть.ВысотаСтроки(20);
	ВыбОбласть.Полужирный(1);   
	ВыбОбласть.ЦветФона(170,255,220); 
	ВыбОбласть.Значение="Единица";     
	Выбобласть.ВертикальноеПоложение(3);
	ВыбОбласть.РамкаОбвести(4,4,4,4);
	ВыбОбласть.ГоризонтальноеПоложение(3);             
	
	Для Индекс = 1 По МФКатЦены.РазмерСписка() Цикл
		ТипЦены = МФКатЦены.ПолучитьЗначение(Индекс);
		Номер=Индекс+3;
		ВыбОбласть=Таблица.Область("R3C"+Номер);	
		ВыбОбласть.Формат("С50");
		ВыбОбласть.Шрифт("Tahoma,204");
		ВыбОбласть.РазмерШрифта(8); 
		ВыбОбласть.Полужирный(1);  
		ВыбОбласть.Контроль(4);
		ВыбОбласть.ЦветФона(170,255,220); 
		ВыбОбласть.Значение=ТипЦены.Наименование; 
		ВыбОбласть.РамкаОбвести(4,4,4,4);
		ВыбОбласть.ГоризонтальноеПоложение(3);          
		Выбобласть.ВертикальноеПоложение(3);	
	КонецЦикла;	       
	СписокГрупп = СоздатьОбъект("СписокЗначений");
	
	Цена = СоздатьОбъект("Справочник.Цены");
	Цена.ИспользоватьДату(РабочаяДата());
	
	
	НомерПозиции=3;
	
	Пока Запрос.Группировка("Позиция")>0 Цикл 
		
		Если Запрос.Позиция.Выбран()=0 Тогда
			Продолжить;
		КонецЕсли;	   
		
		глОживить(1);
		
		Если Запрос.Позиция.ЭтоГруппа()=1 тогда
			СписокГрупп.ДобавитьЗначение(Запрос.Позиция.ТекущийЭлемент());			
			Продолжить;
		КонецЕсли;	
		
		Цена.ИспользоватьВладельца(Запрос.Товар.ТекущийЭлемент());
		
		Если Нрег(ВидСправочника) = "прайс_лист" Тогда
			НашлиНенулевуюЦену=0;
			
			Для Индекс = 1 По МФКатЦены.РазмерСписка() Цикл  
				ТипЦены = МФКатЦены.ПолучитьЗначение(Индекс).ТекущийЭлемент();
				Если Цена.НайтиПоРеквизиту("КатегорияЦены",ТипЦены,0)<=0 Тогда
					Продолжить;
				КонецЕсли;	
				Если Цена.Цена=0 Тогда
					Продолжить;
				КонецЕсли;       
				НашлиНенулевуюЦену=1;
				Прервать;
			КонецЦикла;		
			
			Если НашлиНенулевуюЦену=0 Тогда
				Продолжить;
			КонецЕсли;	
		КонецЕсли;	
		
		Пока СписокГрупп.РазмерСписка()>0 Цикл
			Гр = СписокГрупп.ПолучитьЗначение(1);
			Если Запрос.Позиция.ПринадлежитГруппе(Гр)>0 Тогда
				Если Гр.Уровень()=1 Тогда
					//Таб.ВывестиСекцию("Группа1|НазваниеПозиции"); 
					НомерПозиции=НомерПозиции+1;     
					
					ВыбОбласть=Таблица.Область("R"+НомерПозиции+"C1:R"+НомерПозиции+"C"+(МФКатЦены.РазмерСписка()+3));	
					ВыбОбласть.РамкаОбвести(4,4,4,4);                    
					
					ВыбОбласть=Таблица.Область("R"+НомерПозиции+"C2");
					ВыбОбласть.Формат("С50");      
					ВыбОбласть.ЦветТекста(128,0,0);	            
					ВыбОбласть.Подчеркнутый(1);	
					ВыбОбласть.Шрифт("Tahoma,204");           ВыбОбласть.Курсив(1)      ;   
					ВыбОбласть.РазмерШрифта(13); 
					ВыбОбласть.Полужирный(1);   
					ВыбОбласть.Значение=Гр.Наименование; 
					ВыбОбласть.ГоризонтальноеПоложение(3);  
					
				ИначеЕсли Гр.Уровень()=2 Тогда  
					НомерПозиции=НомерПозиции+1;
					ВыбОбласть=Таблица.Область("R"+НомерПозиции+"C1:R"+НомерПозиции+"C"+(МФКатЦены.РазмерСписка()+3));	
					ВыбОбласть.РамкаОбвести(4,4,4,4); 
					ВыбОбласть=Таблица.Область("R"+НомерПозиции+"C2");
					ВыбОбласть.Формат("С50");      
					ВыбОбласть.ЦветТекста(128,0,0);	  
					ВыбОбласть.Шрифт("Tahoma,204");
					ВыбОбласть.РазмерШрифта(11);          ВыбОбласть.Курсив(1)      ;   
					ВыбОбласть.Значение=Гр.Наименование; 
					ВыбОбласть.Полужирный(1);   
					ВыбОбласть.ГоризонтальноеПоложение(3);  
					//Таб.ВывестиСекцию("Группа2|НазваниеПозиции");
				Иначе 
					НомерПозиции=НомерПозиции+1;
					ВыбОбласть=Таблица.Область("R"+НомерПозиции+"C1:R"+НомерПозиции+"C"+(МФКатЦены.РазмерСписка()+3));	
					ВыбОбласть.РамкаОбвести(4,4,4,4); 
					ВыбОбласть=Таблица.Область("R"+НомерПозиции+"C2");
					ВыбОбласть.Формат("С50");
					ВыбОбласть.ЦветТекста(128,0,0);	            ВыбОбласть.Курсив(1)      ;   
					ВыбОбласть.Шрифт("Tahoma,204");
					ВыбОбласть.РазмерШрифта(11); 
					ВыбОбласть.Полужирный(1);   
					ВыбОбласть.Значение=Гр.Наименование; 
					ВыбОбласть.ГоризонтальноеПоложение(3);  
					//Таб.ВывестиСекцию("Группа3|НазваниеПозиции");
				КонецЕсли;   
			КонецЕсли;	
			СписокГрупп.УдалитьЗначение(1);
		КонецЦикла;
		
		Если ПечатьВФиксЕдиницах=1 Тогда
			Если ЕдиницаПечати.ТекущаяСтрока()=1 Тогда	
				Единица = Запрос.Товар.ЕдиницаПоУмолчанию;
			ИначеЕсли ЕдиницаПечати.ТекущаяСтрока()=2 Тогда	
				Единица = глВернутьБазовуюЕдиницуТовара(Запрос.Товар.ТекущийЭлемент());
			КонецЕсли; 
		КонецЕсли;    
		НомерПозиции=НомерПозиции+1;
		ВыбОбласть=Таблица.Область("R"+НомерПозиции+"C1");	
		ВыбОбласть.Формат("С50");
		ВыбОбласть.ШиринаСтолбца(10);
		ВыбОбласть.Шрифт("Tahoma,204");
		ВыбОбласть.РазмерШрифта(9);
		ВыбОбласть.Значение=СокрЛП(Запрос.Товар.Код); 
		ВыбОбласть.РамкаОбвести(4,4,4,4);
		ВыбОбласть.ГоризонтальноеПоложение(3); 	    
		ВыбОбласть.ЦветФона(170,255,220);               
		//Выводим товар 
		ВыбОбласть=Таблица.Область("R"+НомерПозиции+"C2");	
		ВыбОбласть.Формат("С50");
		ВыбОбласть.Подчеркнутый(0);	
		
		ВыбОбласть.Шрифт("Tahoma,204");           ВыбОбласть.Курсив(0)      ;   
		ВыбОбласть.ШиринаСтолбца(30);
		ВыбОбласть.РазмерШрифта(9);
		ВыбОбласть.Значение=СокрЛП(Запрос.Товар.Наименование); 
		ВыбОбласть.РамкаОбвести(4,4,4,4);
		ВыбОбласть.Полужирный(0);   
		ВыбОбласть.ГоризонтальноеПоложение(3); 	    
		ВыбОбласть.ЦветФона(170,255,220);               
		//Выводим единицу
		ВыбОбласть=Таблица.Область("R"+НомерПозиции+"C3");	
		ВыбОбласть.Формат("С50");
		ВыбОбласть.Шрифт("Tahoma,204");
		ВыбОбласть.ШиринаСтолбца(10);
		ВыбОбласть.РазмерШрифта(9);
		ВыбОбласть.Значение=Единица.ТипЕдиницы.Наименование; 
		ВыбОбласть.РамкаОбвести(4,4,4,4);
		ВыбОбласть.ГоризонтальноеПоложение(3); 	    
		ВыбОбласть.ЦветФона(170,255,220);	
		Ном=Ном+1;
		
		Для Индекс = 1 По МФКатЦены.РазмерСписка() Цикл  
			ТипЦены = МФКатЦены.ПолучитьЗначение(Индекс).ТекущийЭлемент();
			Если Цена.НайтиПоРеквизиту("КатегорияЦены",ТипЦены,0)<=0 Тогда
				ПечЦена = "";
			Иначе
				Если ПечатьВФиксВалюте=0 Тогда
					Валюта = Цена.Валюта;
				КонецЕсли;
				
				Если ПечатьВФиксЕдиницах=0 Тогда
					Единица = Цена.Единица;
				КонецЕсли;	
				
				ЧЦена = Цена.Цена;
				Если Единица<>Цена.Единица Тогда
					ЧЦена = ЧЦена * Единица.Коэффициент / Цена.Единица.Коэффициент; 
				КонецЕсли;	
				ЧЦена = глПересчет(ЧЦена,Цена.Валюта,РабочаяДата(),ВалютаЗаписи,РабочаяДата());
				ПечЦена = СокрЛП(глФРМ2(ЧЦена,ВалютаЗаписи,1))+?(ПечатьВФиксЕдиницах=0," / "+СокрЛП(Строка(Единица)),"");
			КонецЕсли;	
			ВыбОбласть=Таблица.Область("R"+НомерПозиции+"C"+(Индекс+3));	
			ВыбОбласть.Формат("Ч010.2");
			ВыбОбласть.ШиринаСтолбца(14);
			ВыбОбласть.Шрифт("Tahoma,204");
			ВыбОбласть.РазмерШрифта(9);
			ВыбОбласть.Значение=ПечЦена; 
			ВыбОбласть.РамкаОбвести(4,4,4,4);     
			ВыбОбласть.Редактирование(1);
			ВыбОбласть.Доступность(1);	
			ВыбОбласть.ГоризонтальноеПоложение(2); 	 
			ВыбОбласть.ЦветФона(250,250,125);
			//Таб.ПрисоединитьСекцию("Товар|Цена");
		КонецЦикла;	
	КонецЦикла;	
КонецПроцедуры

Процедура ПриВыбореЯчейкиТаблицы(Адрес,Стоимость)              
	Перем НоваяЦена;     
	Спр=СоздатьОбъект("Справочник.Номенклатура");
	ЕдТовара=СоздатьОбъект("Справочник.Единицы");
	СтараяЦена=Таблица.Область(Адрес).Текст;      
	Номер=Найти(Адрес,"C")-1;               
	НомерЦены=Найти(Адрес,"C")+1;
	АдресТовара=Сред(Адрес,1,Номер)+"C1";          
	АдресЕдиницы= Сред(Адрес,1,Номер)+"C3";    
	ОбластьТовара=Таблица.Область(АдресТовара);          
	ИндексЦены=Число(Сред(Адрес,НомерЦены))-3;
	НомерТовара=Число(Сред(Адрес,2,Номер));                     
	Если (ИндексЦены=-1) Тогда
		Спр.НайтиПоНаименованию(Таблица.Область(Адрес).Значение,0,0);		
		ОткрытьФорму(Спр.ТекущийЭлемент(),,0);	 
		Возврат;
	КонецЕсли;
	Если (ИндексЦены<1) или (НомерТовара<4) или (ИндексЦены>МФКатЦены.РазмерСписка()) Тогда
		Возврат;
	КонецЕсли;
	Если Спр.НайтиПоКоду(ОбластьТовара.Значение)=0 Тогда
		Возврат;
	КонецЕсли;
	
	Если ВвестиЧисло(НоваяЦена,"Ввод новой цены",10,3,)=0 Тогда
		Возврат;
	КонецЕсли;
	Цены=СоздатьОбъект("Справочник.Цены");  
	Цены.ИспользоватьВладельца(Спр)      ;       
	//Определяем единицу товара
	ЕдТовара.ИспользоватьВладельца(Спр)      ;   
	ЕдТовара.ВЫбратьЭлементы();
	ОбластьЕдиницы=Таблица.Область(АдресЕдиницы);
	Пока ЕдТовара.ПолучитьЭлемент()=1 Цикл
		Если ЕдТовара.ТипЕдиницы.Наименование=ОбластьЕдиницы.Значение Тогда
			Прервать;
		КонецЕсли;
	КонецЦикла;                                                                            
	// //Конец
	Цены.ВыбратьЭлементы();  
	ВыбОбласть=Таблица.Область(Адрес);        
	ВыбОбласть.Значение= глФРМ2(НоваяЦена,ВалютаЗаписи,1);
	
	Цена=СоздатьОбъект("Периодический");              
	Валюта=СоздатьОбъект("Периодический");  
	Единица=СоздатьОбъект("Периодический");  	
	Для Индекс = 1 По ИндексЦены Цикл       
		ТипЦены = МФКатЦены.ПолучитьЗначение(Индекс);
		//ЕслиИндексЦены=ИндексПредупреждение(ИндексЦены,3);
	КонецЦикла;	
	ПроверкаЦен=0;  
	// Проверяем колво одинаковых цен должно быть <2
	Пока цены.ПолучитьЭлемент()=1 Цикл     
		Если Цены.КатегорияЦены=ТипЦены Тогда     
			ПроверкаЦен=ПроверкаЦен+1;
			Если  ПроверкаЦен=2 Тогда
				Сообщить("У товара существуют две цены! Запись невозможна!","!!");
				Возврат;
			КонецЕсли;
		КонецЕсли;
	КонецЦикла;       
	
	НайденаЦена=0;
	Цены.ИспользоватьВладельца(Спр.ТекущийЭлемент())      ;       
	
	Если Цены.НайтиПоРеквизиту("КатегорияЦены",ТипЦены,0)=1 Тогда	
		Цена.ИспользоватьОбъект("Цена",Цены.ТекущийЭлемент());
		Цены.Наценка=0;
		Цена.Значение=НоваяЦена;
		Цена.ДатаЗнач=ДатаЗаписи;
		Цена.Записать();                                               
		СтараяВалюта=Цены.Валюта.Получить(ДатаЗаписи);	
		Валюта.ИспользоватьОбъект("Валюта",Цены.ТекущийЭлемент());
		Валюта.Значение=ВалютаЗаписи;
		Валюта.ДатаЗнач=ДатаЗаписи;
		Валюта.Записать();                                                     
		Единица.ИспользоватьОбъект("Единица",Цены.ТекущийЭлемент());
		Единица.Значение=ЕдТовара.ТекущийЭлемент();
		Единица.ДатаЗнач=ДатаЗаписи;
		Единица.Записать();                                               
		Цены.Записать();
		СписокИзмененных.НоваяСтрока(НомерСписка);               
		СписокИзмененных.УстановитьЗначение(НомерСписка,"Товар",Спр);  
		СписокИзмененных.УстановитьЗначение(НомерСписка,"ТипЦены",ТипЦены.Наименование);  
		СписокИзмененных.УстановитьЗначение(НомерСписка,"СтараяЦена",СтараяЦена);
		СписокИзмененных.УстановитьЗначение(НомерСписка,"НоваяЦена",глФРМ2(НоваяЦена,Валютазаписи,1));
		СписокИзмененных.УстановитьЗначение(НомерСписка,"Единица",Строка(ЕдТовара.ТекущийЭлемент()));
		НайденаЦена=1;
	КонецЕсли;
	
	Если НайденаЦена=0 Тогда    
		Цены.Новый();
		Цены.КатегорияЦены=ТипЦены;
		Цены.Записать();
		Цена.ИспользоватьОбъект("Цена",Цены.ТекущийЭлемент());
		Цены.Наценка=0;
		Цена.Значение=НоваяЦена;
		Цена.ДатаЗнач=ДатаЗаписи;
		Цена.Записать();                                               
		СтараяВалюта=Цены.Валюта.Получить(ДатаЗаписи);	
		Валюта.ИспользоватьОбъект("Валюта",Цены.ТекущийЭлемент());
		Валюта.Значение=ВалютаЗаписи;
		Валюта.ДатаЗнач=ДатаЗаписи;
		Валюта.Записать();                                                     
		Единица.ИспользоватьОбъект("Единица",Цены.ТекущийЭлемент());
		Единица.Значение=ЕдТовара.ТекущийЭлемент();
		Единица.ДатаЗнач=ДатаЗаписи;
		Единица.Записать();                                               
		Цены.Записать();
		СписокИзмененных.НоваяСтрока(НомерСписка);               
		СписокИзмененных.УстановитьЗначение(НомерСписка,"Товар",Спр);  
		СписокИзмененных.УстановитьЗначение(НомерСписка,"ТипЦены",ТипЦены.Наименование);  
		СписокИзмененных.УстановитьЗначение(НомерСписка,"СтараяЦена",СтараяЦена);
		СписокИзмененных.УстановитьЗначение(НомерСписка,"НоваяЦена",глФРМ2(НоваяЦена,Валютазаписи,1));
		СписокИзмененных.УстановитьЗначение(НомерСписка,"Единица",Строка(ЕдТовара.ТекущийЭлемент()));	
		
	КонецЕсли;	
КонецПроцедуры 	                          


Процедура ВЫПОЛНИТЬ()
	СписокИзмененных.ВЫбратьСтроки();     
	Таб=СоздатьОбъект("Таблица");
	Таб.ИсходнаяТаблица("Таблица1");
	Таб.ВывестиСекцию("Шапка");
	Если СписокИзмененных.КоличествоСтрок()=0 Тогда
		Возврат;
	КонецЕсли;
	Пока СписокИзмененных.ПолучитьСтроку()=1 Цикл
		Товар=СписокИзмененных.ПолучитьЗначение(СписокИзмененных.НомерСтроки,"Товар"); 
		ТипЦены=СписокИзмененных.ПолучитьЗначение(СписокИзмененных.НомерСтроки,"ТипЦены");		
		СтЦена=СписокИзмененных.ПолучитьЗначение(СписокИзмененных.НомерСтроки,"СтараяЦена");		
		НвЦена=СписокИзмененных.ПолучитьЗначение(СписокИзмененных.НомерСтроки,"НоваяЦена");              
		Единица=СписокИзмененных.ПолучитьЗначение(СписокИзмененных.НомерСтроки,"Единица");              	 
		Таб.ВывестиСекцию("Цена");
	КонецЦикла;   
	
	Таб.Опции(0,0,5,0,ПарСтрСпр);
	Таб.Защита(Константа.ФлагЗащитыТаблиц);
	Таб.ТолькоПросмотр(1);
	Таб.Показать("Список измененных цен","");
	
КонецПроцедуры        

Процедура ИзменитьДату()
	ВыбОбласть=Таблица.Область("R2C1:R2C2");	
	ВыбОбласть.Формат("С50");
	ВыбОбласть.Шрифт("Tahoma,204");
	ВыбОбласть.РазмерШрифта(10);             
	ВыбОбласть.ЦветТекста(128,0,0);	  
	ВыбОбласть.ГоризонтальноеПоложение(3);        
	ВыбОбласть.Курсив(0)      ;   	
	Выбобласть.ВертикальноеПоложение(2);
	ВыбОбласть.Значение="дата изменения: "+ДатаЗаписи;
КонецПроцедуры  

Процедура ПриЗакрытии()
	Выполнить()
КонецПроцедуры  

Процедура ПечатьЦенников()
	Перем ПечЕдиница, ПечНаименование,ПечРозн;
	Перем ЦенаТовара;
	Перем Таб;
	Перем ЧислоСтрок;
	Перем Столбик;
	Перем Ряд;
	
	
	//  Создание Таблицы для выходного отчета
	Таб=СоздатьОбъект("Таблица");
	Таб.ИсходнаяТаблица("Таблица");
	ЧислоСтрок=0;
	Столбик=1;
	Ряд=0;
	СписокИзмененных.ВЫбратьСтроки();     
	Если СписокИзмененных.КоличествоСтрок()=0 Тогда
		Возврат;
	КонецЕсли;
	Пока СписокИзмененных.ПолучитьСтроку()=1 Цикл
		ВыбТовар=СписокИзмененных.ПолучитьЗначение(СписокИзмененных.НомерСтроки,"Товар"); 
		ВремЦена=СписокИзмененных.ПолучитьЗначение(СписокИзмененных.НомерСтроки,"НоваяЦена");              
		СтавкаНПпроц=глПолучитьСтавкуНП(ВыбТовар,РабочаяДата());
		ПечНаименование=ВыбТовар.ПолнНаименование;
		Страна=ВыбТовар.СтранаПроисхождения;
		ПечРозн = СокрЛ(Формат(ВремЦена,"Ч15.2-"));
		Столбик=?(Столбик=0,1,0);
		Ряд=?(Столбик=0,Ряд+1,Ряд);
		Если Ряд>10 Тогда
			Таб.НоваяСтраница();
			Ряд=1;
		КонецЕсли;
		Если Столбик=0 Тогда
			Таб.ВывестиСекцию("Товар|Ценник");
		Иначе
			Таб.ПрисоединитьСекцию("Товар|Ценник");
		КонецЕсли;
	КонецЦикла;  
	//Вызов выходного отчета в окно просмотра и редактирования.
	Таб.Опции(0,0,0,0,ПарСтрСпр);
	Таб.Защита(Константа.ФлагЗащитыТаблиц);
	Таб.ТолькоПросмотр(1);
	Таб.Показать("Ценник товаров","");
	ВыбТовар=0;
КонецПроцедуры

Процедура Сдвиг(Режим,Список)
	Перем ТекущПредставление;
	Перем СледующПредставление;
	
	ТекущаяСтрока=Список.ТекущаяСтрока();
	
	Если Режим="Вверх" Тогда
		Если ТекущаяСтрока=1 Тогда
			СледующСтрока=Список.РазмерСписка(); 
		Иначе
			СледующСтрока=ТекущаяСтрока-1;
		КонецЕсли;
	ИначеЕсли Режим="Вниз" Тогда
		Если ТекущаяСтрока=Список.РазмерСписка() Тогда
			СледующСтрока=1;
		Иначе
			СледующСтрока=ТекущаяСтрока+1;
		КонецЕсли;
	Иначе
		Возврат;
	КонецЕсли;
	
	ТекущЗначение=Список.ПолучитьЗначение(ТекущаяСтрока,ТекущПредставление); 
	ТекущМетка=Список.Пометка(ТекущаяСтрока,);
	СледующЗначение=Список.ПолучитьЗначение(СледующСтрока,СледующПредставление);
	СледующМетка=Список.Пометка(СледующСтрока,);
	Список.УстановитьЗначение(СледующСтрока,ТекущЗначение,ТекущПредставление,1); 
	Список.Пометка(СледующСтрока,ТекущМетка);
	Список.УстановитьЗначение(ТекущаяСтрока,СледующЗначение,СледующПредставление,1);
	Список.Пометка(ТекущаяСтрока,СледующМетка);
	
	Список.ТекущаяСтрока(СледующСтрока);
	
КонецПроцедуры
ЕдиницаПечати.УдалитьВсе();
ЕдиницаПечати.ДобавитьЗначение("по умолчанию");		//	1
ЕдиницаПечати.ДобавитьЗначение("базовая");			//	2	
ЕдиницаПечати.ДобавитьЗначение("задания цен");      //	3
ЕдиницаПечати.ТекущаяСтрока(1); 

МФКатЦены.УдалитьВсе(); 
ВсеЦены = СоздатьОбъект("Справочник.КатегорииЦен");
ВсеЦены.ВыбратьЭлементы();
Пока ВсеЦены.ПолучитьЭлемент()>0 Цикл
	МФКатЦены.ДобавитьЗначение(ВсеЦены.ТекущийЭлемент());      
КонецЦикла;	



Показать
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. platon_ 10 25.08.11 16:34 Сейчас в теме
(1)
попробуйте убрать строку
|Период С '"+Строка(Мин(РабочаяДата(),ПолучитьДатуТА()))+"' По '"+Строка(Мин(РабочаяДата(),ПолучитьДатуТА()))+"'; 
3. Fanat26 26.08.11 05:21 Сейчас в теме
все равно последнюю цену дает :(
4. VUN 38 26.08.11 09:36 Сейчас в теме
Попробуйте вместо
Цена.ИспользоватьДату(РабочаяДата());
поставить
Цена.ИспользоватьДату(ДатаЗаписи);
platon_; Fanat26; +2 Ответить
5. Fanat26 26.08.11 11:08 Сейчас в теме
поменял на ДатуЗаписи, и убрал в " ЧЦена = ЧЦена * Единица.Коэффициент / Цена.Единица.Коэффициент; " - Цена.Единица.Коэффициент; Заработало! Большое спасибо за помошщб))
6. Fanat26 29.08.11 08:52 Сейчас в теме
подскажите а несколько дат можно вынести, для сравнения??
7. platon_ 10 29.08.11 11:14 Сейчас в теме
Цена это периодический реквизит. Его получают на дату. Если ты пропишешь получение для разных дать, то пожалуста.

Тогда тебе надо убрать ИспользоватьДату() и вместо этого при получении цены прописать вот так
ЧЦена = Цена.Цена.Получить(<НужнаяДата>);
8. Fanat26 06.09.11 11:03 Сейчас в теме
подсажите как сделать несколько дат чтобы выводилось для сравнения, не могу разобраться :(
9. platon_ 10 06.09.11 11:27 Сейчас в теме
сделать выбор цены за разные даты.
10. Fanat26 07.09.11 06:18 Сейчас в теме
добавил еще просто пару полей с выбором даты, в таблице отображаются, но не могу вывести еще колонки (старая и новая цена) для дополнительных дат!
11. Octopus 339 07.09.11 06:37 Сейчас в теме
В ТиС есть две замечательные функции глВернутьЦену и глПолучитьЦену. Описаны, естественно, в глобальнике. Какую дату им передадите, такую цену и получите.
12. Fanat26 07.09.11 06:48 Сейчас в теме
Оставьте свое сообщение

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