gifts2017

Формирование покупки-продажи между собственными организациями

Опубликовал Алексей Ахмадеев (Alexey_A) в раздел Обработки - Обработка документов

Обработка создает реализацию в одной организации и поступление в другой. Для клиентов, которые работают с настройкой "Разрешить превышение остатка товаров организации"

Инструкция по использованию:

1) Необходимо заполнить все поля шапки: 

  • даты периода продаж - дата1 - начальная, дата2 - конечная
  • склад, с которого осуществлялись продажи
  • тип цены - тип цен для внутреннего товарооборота
  • организация-продавец - организация, с которой осуществлялись продажи без контроля остатка по организации
  • контрагент продавец - контрагент, должен соответствовать наименованию организации-продавца
  • организация-поставщик - организация, чьи остатки продавались за период
  • контрагент-поставщик - контрагент, должен соответствовать наименованию организации-поставщика


2) После заполнения данных шапки необходимо нажать "Заполнить исходные документы"

Исходные данные заполняются на основе движений реализации по регистру партий, то есть выбираются именно те товары, которые числились на указанной организации. также компонуются даты по созданию документов, чтобы не плодить их сотни, а оптимально сделать два-три документа с учетом поступлений.


3) После того, как сформированы исходные документы, нажатием кнопки "Сформировать пакет документов", создаются по скомпонованным датам следующие документы:

  • продажа от организации-поставщика на контрагента-продавца,
  • поступление в организации-продавца от контрагента-поставщика.

Документы автоматически проводятся.


Следует учесть, чтобы были цены на каждый товар, иначе выйдет предупреждение о невозможности создания документов, так же необходимо, что бы у контрагентов были договоры по соответствующим организациям.

 

Важно!

Для того, что бы при неоперативном проведении списывались партии с учетом остатков организации, необходимо поправить общий модуль УправлениеЗапасамиПартионныйУчет в процедуре СписаниеПартий, изменения помечены комментарием "Алексей".


// Списание со склада по строке
//
// Параметры
//  СтруктураПараметров  – Структура, содержащая общие параметры
//
// Возвращаемое значение:
//   ТаблицаЗначений   – таблица списанных партий
//
Процедура СписаниеПартий(СтрокаДокумента, СтруктураПараметров, РегистрУчета)
	
	КодыОпераций = Перечисления.КодыОперацийПартииТоваров;
	
	// Партии для данного учета
	ИмяРегистра = ПолучитьИмяРегистра("ПартииТоваров", РегистрУчета, СтрокаДокумента);
	
	// Если нет регистра, по которому списываем, тогда пропускаем
	Если ИмяРегистра="" Тогда
		Возврат;
	КонецЕсли;
	
	ДеревоПартий = СтруктураПараметров["Дерево"+ИмяРегистра];
	
	СтруктураИзмерений = СтруктураПараметров[ИмяРегистра + "СтруктураИзмерений"];
	ТаблицаОстатковПартий = СтруктураПараметров[ИмяРегистра + "ТаблицаОстатков"];
	
	СтрокаДереваПартий = ДеревоПартий.Строки.Найти(СтрокаДокумента.НомерСтрокиДокумента, "НомерСтрокиДокумента");
	
	// Подлежащее погашению при списании количество
	КоличествоОсталосьПогасить = СтрокаДокумента.Количество;
	
	// В строке может быть указана стоимость поступления, если затем товар будет оприходован с другой стоимостью
	СтоимостьПоступлениеОсталосьПогасить = 0;
	Если СтрокаДокумента.ОтражатьВУправленческомУчете Тогда
		СтоимостьПоступлениеОсталосьПогасить = СтрокаДокумента.СтоимостьПоступление;
	КонецЕсли;
	
	КоэффСписанияВалютный = 0;
	
	// Валютная задолженность при возврате товаров поставщику должна списываться пропорционально стоимости
	Если СтрокаДокумента.КодОперацииПартииТоваров = Перечисления.КодыОперацийПартииТоваров.ВозвратПоставщику 
	   И СтрокаДокумента.СуммаЗадолженностиБУ <> 0 тогда
		КоэффСписанияВалютный = СтрокаДокумента.КорВалютнаяСуммаЗадолженностиБУ/СтрокаДокумента.СуммаЗадолженностиБУ;
	Иначе
	КонецЕсли;
	
	КоличествоПоступление = СтрокаДокумента.КоличествоПоступление;
	
	КоличествоСписанноеПоДокументуПартии = 0;
	
	//+Алексей
	ПревышатьОстаткиОрганизации = УправлениеДопПравамиПользователей.РазрешеноПревышениеОстаткаТоваровОрганизации(СтрокаДокумента.Регистратор.Организация);
	//-Алексей

	Если СтрокаДереваПартий <> Неопределено Тогда
		
		Для Каждого СтрокаПартииРаспределения ИЗ СтрокаДереваПартий.Строки Цикл
			
			// + Алексей
			Если Не ПревышатьОстаткиОрганизации Тогда 
				Если ТипЗнч(СтрокаДокумента.Регистратор) = Тип("ДокументСсылка.ОтчетОРозничныхПродажах") Тогда
					ОрганизацияДокумента = СтрокаДокумента.Регистратор.Организация;
				Иначе
					ОрганизацияДокумента = СтрокаДокумента.Организация;
				КонецЕсли;
				
				Если ОрганизацияДокумента <> СтрокаПартииРаспределения.ДокументОприходования.Организация Тогда 
					Продолжить;
				КонецЕсли;
			КонецЕсли;
			// - Алексей
			
			Если КоличествоОсталосьПогасить <= 0 Тогда
				Прервать;
			КонецЕсли;
			
			СтрокаПартии = ПолучитьСтрокуОстатковПартий(СтрокаПартииРаспределения, СтруктураИзмерений, ТаблицаОстатковПартий);
			
			// Количество по строке больше 0
			Если НЕ СтрокаПартии.Количество > 0 Тогда
				Продолжить;
			КонецЕсли; 
			
			Если СтрокаПартии.Количество >= КоличествоОсталосьПогасить Тогда
				КоэффСписания = КоличествоОсталосьПогасить/СтрокаПартии.Количество;
			Иначе
				КоэффСписания = 1;
			КонецЕсли;
			
			Если ЗначениеЗаполнено(СтрокаДокумента.ДокументПартии) И (СтрокаПартии.ДокументОприходования = СтрокаДокумента.ДокументПартии) Тогда
				КоличествоСписанноеПоДокументуПартии = КоличествоСписанноеПоДокументуПартии + Окр(СтрокаПартии.Количество * КоэффСписания,3,1);
			КонецЕсли;			
			
			// Добавим новую строку
			Движение = ДобавитьДвижениеВСтруктуруПараметров(ИмяРегистра, СтруктураПараметров);
			
			// Свойства
			Движение.Период 	 = СтрокаДокумента.Период;
			Движение.Регистратор = СтрокаДокумента.Регистратор;
			Движение.Активность  = Истина;
			Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
			
			// Измерения
			Движение.Номенклатура = СтрокаПартии.Номенклатура;
			
			// Ресурсы 
			Движение.Количество	= Окр(СтрокаПартии.Количество * КоэффСписания,3,1);
			Движение.Стоимость	= Окр(СтрокаПартии.Стоимость  * КоэффСписания,2,1);
			
			Если Движение.Количество < КоличествоОсталосьПогасить Тогда
				КоэффПоступления = Движение.Количество / КоличествоОсталосьПогасить;
			Иначе
				КоэффПоступления = 1;
			КонецЕсли;
			
			// Вспомогательное поле, не являющееся ресурсом, но используемое
			// для формирования записей по переоценке принятого на комиссию.
			Движение.СтоимостьПоступление = СтоимостьПоступлениеОсталосьПогасить * КоэффПоступления;
			СтоимостьПоступлениеОсталосьПогасить = СтоимостьПоступлениеОсталосьПогасить - Движение.СтоимостьПоступление;
			
			// Реквизиты
			Движение.КодОперации	= СтрокаДокумента.КодОперацииПартииТоваров;
			
			КоличествоОсталосьПогасить = КоличествоОсталосьПогасить - Движение.Количество;
			
			СтрокаПартии.Количество = СтрокаПартии.Количество - Движение.Количество;
			СтрокаПартии.Стоимость  = СтрокаПартии.Стоимость  - Движение.Стоимость;
			
			// Заполнение полей, специфических для учета
			ЗаполнитьПоляЗаписиСписания(Движение, СтрокаПартии, СтрокаДокумента, СтруктураПараметров, РегистрУчета, КоэффСписания, КоэффПоступления, КоэффСписанияВалютный);
			
			// Обработка движений, связанных со списанием определенных партий по документу (специфика разных видов учета)
			ВыполнитьСвязанныеСоСписаниемДвижения(СтрокаДокумента, СтруктураПараметров, Движение, КоэффСписания, КоэффПоступления);

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

Скачать файлы

Наименование Файл Версия Размер
СОзданиеПакетаДокументов.epf 4
.epf 19,13Kb
21.12.15
4
.epf 19,13Kb Скачать

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Вадим Никонов (V.Nikonov) 07.10.15 14:58
Я так понял, что собственника товара Вы определяете по Организации из Документа партии. При прочтении публикации появились вопросы:

1. При использовании для заполнения Регистра Партии - оформлять перепродажу нельзя до восстановления Последовательности Документов?

2. После добавления Документов Перепродажи (Реализация + Поступление + ??) они проводятся по Управленческому учету? Т.е. опять сносят последовательность? Каким временем формируются документы?

3. Какие виды складов поддерживаются? А если производится перемещение товара (регистр Партий может двигаться и не двигаться в УТ10)?

Кстати в УТ10 и т.п. есть специализированный регистр ТоварыОрганизаций, чем он Вам не понравился?

P.S. В УТ11 и т.п. перепродажа решена штатными средствами.
2. TMV 07.10.15 19:07
(1) V.Nikonov,
P.S. В УТ11 и т.п. перепродажа решена штатными средствами.
В УТ 10 тоже есть неказистое решение в виде обработки "Пакетный ввод документов".
3. Алексей Ахмадеев (Alexey_A) 09.10.15 08:14
(1) V.Nikonov, спасибо за каверзные вопросы.
выбор регистра партий, а не товаров организаций, напрямую связан с Вашим вопросом "Каким временем формируются документы?". все это в описании к обработке я указал и по скриншоту наглядно продемонстрировано. попробуйте на тестовой базе сделать и не забудьте подправить при неоперативном проведении что б партии брал по организации, все Ваши вопросы отпадут.
не ленитесь потестировать. я же Вам не продаю, а передаю частичку опыта, так как подобная задача у меня встает уже не в первый раз и кому-то, возможно, понадобится быстро сделать подобную задачу и я очень надеюсь, что моя обработка поможет.
4. Алексей Ахмадеев (Alexey_A) 09.10.15 09:17
(2) TMV, но клиенты любят что б работало как им хочется, а всем хочется именно так.
5. Алексей Ахмадеев (Alexey_A) 09.10.15 09:32
(1) V.Nikonov,
2. После добавления Документов Перепродажи (Реализация + Поступление + ??) они проводятся по Управленческому учету? Т.е. опять сносят последовательность? Каким временем формируются документы?

Вы знаете другой способ? торговать сначала без контроля остатка организации, а потом делать документы задним числом не снося последовательность? конечно можно заколхозить определение даты последовательнсти и после перепроведения, если она была больше даты документов поставить ее назад, но я считаю это неким извращением. но каждый решает этот вопрос как ему вздумается, мой клиент делает это раз в месяц, для него не составляет это проблемы
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа