1С бухгалтерия

Бухгалтера просили упростить им жизнь, сделав ввод некоторых документов на основании других документов.
В частности:
МЗ_Списание на основании МЗ_ВнутреннееПеремещение
ОС_ПринятиеКУчету на основании ОС_Покупка
УслугиСтороннихОрганизаций на основании ЗаявкаНаКассовыйРасход

Указываем в конфигураторе в документах, что одни могут вводиться на основании других.
Добавляем новую подписку на событие "ОбработкаЗаполнения".
И в качестве обработчика этого события, где-нибудь в глобальном модуле (своем) добавляем нижеприведенную процедуру:

Процедура ОбработкаЗаполненияДокументов(Источник, Основание, Хрень=Истина) Экспорт
	Если (ТипЗнч(Источник)= Тип("ДокументОбъект.МЗ_Списание")) Тогда
		Если Основание<>Неопределено и ТипЗнч(Основание)= Тип("ДокументСсылка.МЗ_ВнутреннееПеремещение") Тогда
			Если Источник.Материалы.Количество() > 0 Тогда
 
				Если Вопрос("Документ будет перезаполнен. Продолжить?",РежимДиалогаВопрос.ДаНет,60,КодВозвратаДиалога.Да) <> КодВозвратаДиалога.Да Тогда
					Возврат;
				КонецЕсли;	
 
 
				Источник.Материалы.Очистить();
			КонецЕсли;	
			ЗаполнитьЗначенияСвойств(Источник,Основание);
			Источник.Номер = "";
			Источник.ХА_СписаниеИзПоступления = Основание.ХА_ПеремещениеИзПоступления;
			Для Каждого СтрокаТабОснование Из Основание.Материалы Цикл
				СтрокаТабличнойЧасти = Источник.Материалы.Добавить();
				ЗаполнитьЗначенияСвойств(СтрокаТабличнойЧасти,СтрокаТабОснование);
				СтрокаТабличнойЧасти.СчетКредита = СтрокаТабОснование.СчетУчета;
				СтрокаТабличнойЧасти.КБКСчетКредита = СтрокаТабОснование.КБКСчетУчета;
				СтрокаТабличнойЧасти.КОСГУСчетКредита = БухгалтерскийУчет.ПолучитьКОСГУПоУмолчанию(СтрокаТабличнойЧасти.СчетКредита, "Кт");;
			КонецЦикла;
			Источник.КВД = СтрокаТабОснование.КВД;
		КонецЕсли;
	ИначеЕсли (ТипЗнч(Источник)= Тип("ДокументОбъект.ОС_ПринятиеКУчету")) Тогда
		Если Основание<>Неопределено и ТипЗнч(Основание)= Тип("ДокументСсылка.ОС_Покупка") Тогда
			СЗ = Новый СписокЗначений;
			Для Каждого СтрокаТаб Из Основание.Капвложения Цикл
				СЗ.Добавить(СтрокаТаб.ВнеоборотныйАктив);
			КонецЦикла;
			ОС = СЗ.ВыбратьЭлемент();
			Если ОС = Неопределено Тогда
				Возврат;
			КонецЕсли;
			ЗаполнитьЗначенияСвойств(Источник,ОС.Значение);
			ЗаполнитьЗначенияСвойств(Источник,Основание);
			Источник.Номер = "";
			Источник.Проведен = Ложь;
			Источник.ВидОперации = Справочники.ВидыОпераций.ОС_ПринятиеКУчету_ПриобретенныеОС;
			Источник.ВнеоборотныйАктив = ОС.Значение;
			Источник.СчетОС = Источник.ВнеоборотныйАктив.СчетУчета;
			Источник.КБКСчетаОС = Источник.ВнеоборотныйАктив.КБК;
			Источник.КОСГУСчетаОС = Справочники.КОСГУ.НайтиПоКоду("310");
			Источник.СчетОС = Источник.ВнеоборотныйАктив.СчетУчета;
			Источник.КБКСчетКредита = Основание.КБКСчетДебета;
			Источник.КОСГУСчетКредита = Основание.КОСГУСчетДебета;
			Источник.СчетКредита = Основание.СчетДебета;
			Источник.КБКСчетКредита = Основание.КБКСчетДебета;
			Источник.КОСГУСчетКредита = Основание.КОСГУСчетДебета;
 
			СтрокаТабличнойЧасти = Источник.ОсновныеСредства.Добавить();
			СтрокаТабличнойЧасти.ОС = ОС.Значение;
			СтрокаТабличнойЧасти.ГрупповойУчет = ОС.Значение.ГрупповойУчет;
			СтрокаТабличнойЧасти.ИнвНомер = Справочники.ИнвентарныеНомераОС.НайтиПоКоду(ОС.Значение.ИнвентарныйНомер);
			Для Каждого СтрокаТаб Из Основание.Капвложения Цикл
				Если СтрокаТаб.ВнеоборотныйАктив = ОС.Значение Тогда
					СтрокаТабличнойЧасти.Количество = СтрокаТаб.Количество;
					СтрокаТабличнойЧасти.Сумма = СтрокаТаб.Всего;
					Прервать;
				КонецЕсли;
			КонецЦикла;
		КонецЕсли;
	ИначеЕсли (ТипЗнч(Источник)= Тип("ДокументОбъект.УслугиСтороннихОрганизаций")) Тогда
		Если Основание<>Неопределено и ТипЗнч(Основание)= Тип("ДокументСсылка.ЗаявкаНаКассовыйРасход") Тогда
			ЗаполнитьЗначенияСвойств(Источник,Основание);
			Источник.Номер = "";
			Источник.Проведен = Ложь;
			ВидыОпераций = РаботаСВидамиОпераций.ПолучитьСписокВидовОпераций(Источник);
			Источник.ВидОперации = ВидыОпераций[0];
			Если Основание.РасшифровкаПлатежа.Количество() = 0 Тогда
				Возврат;
			КонецЕсли;
			Источник.КВД = Основание.РасшифровкаПлатежа[0].КВД;
 
			Номенклатура = Справочники.Номенклатура.ПустаяСсылка();
			ВвестиЗначение(Номенклатура);
 
			Для Каждого СтрокаТаб Из Основание.РасшифровкаПлатежа Цикл
				Если Источник.КВД <> СтрокаТаб.КВД Тогда
					Сообщить("Документ основание создан по нескольким источникам. Будет создан документ только по одному");
					Продолжить;
				КонецЕсли;
				СтрокаТабличнойЧасти = Источник.Услуги.Добавить();
				СтрокаТабличнойЧасти.Номенклатура = Номенклатура;
				СтрокаТабличнойЧасти.Количество = 1;
				СтрокаТабличнойЧасти.Сумма = СтрокаТаб.Сумма;
				СтрокаТабличнойЧасти.СтавкаНДС = Основание.СтавкаНДС;
				СтрокаТабличнойЧасти.Всего = СтрокаТаб.Сумма;
 
				СтрокаТабличнойЧасти.СчетДебета = ПланыСчетов.ЕПСБУ.СебестоимостьГП_1;
				СтрокаТабличнойЧасти.КОСГУСчетДебета = СтрокаТаб.КОСГУНазначениеПлатежа;
				СтрокаТабличнойЧасти.КБКСчетДебета = СтрокаТаб.КБКНазначениеПлатежа;
				СтрокаТабличнойЧасти.СубконтоСчетДебета2 = Номенклатура;
				СтрокаТабличнойЧасти.СубконтоСчетДебета3 = Справочники.ВидыЗатрат.НайтиПоРеквизиту("КОСГУ",СтрокаТаб.КОСГУНазначениеПлатежа);
				СтрокаТабличнойЧасти.СубконтоСчетДебета4 = СтрокаТаб.ХА_НД;
 
				СтрокаТабличнойЧасти.СчетКредита = СтрокаТаб.СчетДебета;
				СтрокаТабличнойЧасти.КБКСчетКредита = СтрокаТаб.КБКНазначениеПлатежа;
				КодКОСГУПоУмолчанию = "";
				СтрокаТабличнойЧасти.КОСГУСчетКредита = БухгалтерскийУчет.ПолучитьКОСГУПоУмолчанию(СтрокаТабличнойЧасти.СчетКредита, "Кт", КодКОСГУПоУмолчанию,
									Новый Структура("Учреждение, Баланс, КВД, Дата", Основание.Учреждение, Основание.Баланс, СтрокаТаб.КВД, Основание.Дата));
 
				СтрокаТабличнойЧасти.СубконтоСчетКредита3 = Основание.Договор;
 
				// НУ
				Если НалоговыйУчетСервер.ОтражатьВНалоговомУчете(Источник, Источник.Учреждение, Источник.Дата) Тогда
					СтрокаТабличнойЧасти.СчетДебетаНУ = НалоговыйУчетСервер.ПолучитьСчетНУПоСчетуБУ(СтрокаТабличнойЧасти, Источник.Учреждение, Источник.Дата);
					НалоговыйУчетСервер.УстановитьСубконтоНУПоДаннымБУ(СтрокаТабличнойЧасти, , "СчетДебета", "СубконтоСчетДебета");
				КонецЕсли;
 
			КонецЦикла;
		КонецЕсли;
	КонецЕсли;
КонецПроцедуры 
 

Комментарии

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".

Что такое Хрень в условии процедуры ОбработкаЗаполненияДокументов() ?)

admin аватар

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

Отправить комментарий

Содержание этого поля является приватным и не предназначено к показу.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Доступны HTML теги: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <img>
  • Строки и параграфы переносятся автоматически.
  • You can enable syntax highlighting of source code with the following tags: <code>, <blockcode>, <1c7>, <drupal5>, <drupal6>, <javascript>, <php>. Beside the tag style "<foo>" it is also possible to use "[foo]".