Программное создание документа ОперацияБух

1. CD_SVEN 28.05.20 09:17 Сейчас в теме
Бухгалтерия государственного учреждения, редакция 1.0 (1.0.62.3)
Добрый день, подскажите пожалуйста, пишу обработку, которая должна создавать документ ОперацияБух (Ручная), данные берутся из excel и полей формы обработки, как программно заполнить субконтоДТ и СубконтоКт

	Попытка
		ПолучитьНоменклатуру = Справочники.Номенклатура.НайтиПоНаименованию(стр.Номенклатура);
		НовыйДокумент = Документы.ОперацияБух.СоздатьДокумент();
		НовыйДокумент.Дата               = ТекущаяДата();
		НовыйДокумент.Учреждение = ЭлементыФормы.Учреждение.Значение;
		НовыйДокумент.Баланс = Справочники.Баланс.НайтиПоНаименованию(ЭлементыФормы.ИФО.Значение);
		СтрокаДвижения = НовыйДокумент.Движения.ЕПСБУ;
		НомерСубконто = 0;
		Для каждого Строка из ТаблицаДокумента2 цикл
			Проводка = СтрокаДвижения.Добавить();
			Проводка.Период = ТекущаяДата();
			
			БухгалтерскийУчет.
			Проводка.СчетДт =  ПланыСчетов.ЕПСБУ.НайтиПоКоду(ПолучитьНоменклатуру.СчетУчета);
			Если Проводка.СчетДт = ПланыСчетов.ЕПСБУ.НайтиПоКоду("105.36") тогда
				Проводка.СубконтоДт(Проводка.СчетДт.ВидыСубконто.Получить(0), Справочники.КОСГУ.НайтиПоКоду("346"));
			КонецЕсли;
			Проводка.СубконтоДт(Проводка.СчетДт.ВидыСубконто.Получить(1),ПолучитьНоменклатуру);
			Проводка.СубконтоДт(Проводка.СчетДт.ВидыСубконто.Получить(2),ЭлементыФормы.МОЛ.Значение);
			проводка.СчетКт = ПланыСчетов.ЕПСБУ.НайтиПоКоду("109.61");
			проводка.СубконтоКт(Проводка.СчетКт.ВидыСубконто.Получить(0),	
			проводка.СубконтоКт(Проводка.СчетКт.ВидыСубконто.Получить(1),
			проводка.СубконтоКт(Проводка.СчетКт.ВидыСубконто.Получить(2), Справочники.ВидыЗатрат.НайтиПоНаименованию("Все затраты");
			
			Проводка.КоличествоДт = Строка.Количество;
			
			
		КонецЦикла;
		НовыйДокумент.Записать();
	Исключение  
		Сообщить("НЕ УДАЛОСЬ создать окумент по договору ");
		
	КонецПопытки;
Показать
По теме из базы знаний
Найденные решения
8. user1357043 28.05.20 10:04 Сейчас в теме
(6)Замените Сообщить("НЕ УДАЛОСЬ создать окумент по договору ");
на Сообщить(ОписаниеОшибки());
Так будет видно в чем проблема.
Вообще проводку можно записать и без субконто. Следовательно, проблема скорее всего в другом.
Почему у вас не заполняется счет кредита, но заполняются субконто по нему? Скорее всего проблема именно в том, что не указан СчетКт
Остальные ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Vlad_M_75 28.05.20 09:32 Сейчас в теме
А в чем конкретно проблема? И да, код у Вас какой-то странный. Как будто не хватает хвостов у некоторых строк.
3. CD_SVEN 28.05.20 09:40 Сейчас в теме
(2)
Попытка
		ПолучитьНоменклатуру = Справочники.Номенклатура.НайтиПоНаименованию(стр.Номенклатура);
		НовыйДокумент = Документы.ОперацияБух.СоздатьДокумент();
		НовыйДокумент.Дата               = ТекущаяДата();
		НовыйДокумент.Учреждение = ЭлементыФормы.Учреждение.Значение;
		НовыйДокумент.Баланс = Справочники.Баланс.НайтиПоНаименованию(ЭлементыФормы.ИФО.Значение);
		СтрокаДвижения = НовыйДокумент.Движения.ЕПСБУ;
		НомерСубконто = 0;
		Для каждого Строка из ТаблицаДокумента2 цикл
			Проводка = СтрокаДвижения.Добавить();
			Проводка.Период = ТекущаяДата();
			Проводка.СчетДт =  ПланыСчетов.ЕПСБУ.НайтиПоКоду(ПолучитьНоменклатуру.СчетУчета);
			
			//Если Проводка.СчетДт = ПланыСчетов.ЕПСБУ.НайтиПоКоду("105.36") тогда
			//	Проводка.СубконтоДт(Проводка.СчетДт.ВидыСубконто.Получить(0), Справочники.КОСГУ.НайтиПоКоду("346"));
			//КонецЕсли;

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

не могу конять как именно субконто заполняется
5. user1357043 28.05.20 09:48 Сейчас в теме
(3) И так не срабатывает? в чем проблема? что за ошибка?
Возможно проблема в третьем параметре. Должно быть ИмяСубконто, а у вас скорее представление (или синоним) указано.
Можно проще: поставить номер.
И в коде не видно записи движений...
7. Doreng 27 28.05.20 10:03 Сейчас в теме
(3) насколько я помню - документ операция бух создается без строк. Данные хранятся в регистрах и читаются оттуда по регистратору. тоесть необходимо создать документ ОперацияБух, заполнить список необходимых регистров, потом записать документ и заполнять регистры напрямую указывая записанный документ как регистратор.
4. user1357043 28.05.20 09:44 Сейчас в теме
В обычной бухгалтерии есть спец. модуль:
БухгалтерскийУчет.УстановитьСубконто(Счет, Субконто, ИмяСубконто, ЗначениеСубконто);
6. CD_SVEN 28.05.20 10:01 Сейчас в теме
(4)
	Попытка
		ПолучитьНоменклатуру = Справочники.Номенклатура.НайтиПоНаименованию(стр.Номенклатура);
		НовыйДокумент = Документы.ОперацияБух.СоздатьДокумент();
		НовыйДокумент.Дата               = ТекущаяДата();
		НовыйДокумент.Учреждение = ЭлементыФормы.Учреждение.Значение;
		НовыйДокумент.Баланс = Справочники.Баланс.НайтиПоНаименованию(ЭлементыФормы.ИФО.Значение);
		СтрокаДвижения = НовыйДокумент.Движения.ЕПСБУ;
		Для каждого Строка из ТаблицаДокумента2 цикл
			Проводка = СтрокаДвижения.Добавить();
			Проводка.Период = ТекущаяДата();
			Проводка.СчетДт =  ПланыСчетов.ЕПСБУ.НайтиПоКоду(ПолучитьНоменклатуру.СчетУчета);
			
			///Заполняем СчетДБ
			НалоговыйУчетСервер.УстановитьСубконто(Проводка.СчетДт,Проводка.СубконтоДт,"КОСГУ",Справочники.КОСГУ.НайтиПоКоду("346"));
			НалоговыйУчетСервер.УстановитьСубконто(Проводка.СчетДт,Проводка.СубконтоДт,"Номенклатура", ПолучитьНоменклатуру);
			НалоговыйУчетСервер.УстановитьСубконто(Проводка.СчетДт,Проводка.СубконтоДт,"ЦМО",ЭлементыФормы.МОЛ.Значение);
			///Заполняем СчетКД
			НалоговыйУчетСервер.УстановитьСубконто(Проводка.СчетКт,Проводка.СубконтоКт,"КОСГУ",Справочники.КОСГУ.НайтиПоКоду("200"));
			НалоговыйУчетСервер.УстановитьСубконто(Проводка.СчетКт,Проводка.СубконтоКт,"Номенклатура", ПолучитьНоменклатуру);
			НалоговыйУчетСервер.УстановитьСубконто(Проводка.СчетКт,Проводка.СубконтоКт,"ВидыЗатрат",Справочники.ВидыЗатрат.НайтиПоНаименованию("%Все затраты%"));
			
			
			Проводка.КоличествоДт = Строка.Количество;
			Проводка.Сумма = Стр.Себестоимость;
			
		КонецЦикла;
		НовыйДокумент.Записать();
	Исключение  
		Сообщить("НЕ УДАЛОСЬ создать окумент по договору ");
		
Показать


вот что в итоге получилось, заполнение субконто проходит но все равно после записи документа, вызывается исключение
8. user1357043 28.05.20 10:04 Сейчас в теме
(6)Замените Сообщить("НЕ УДАЛОСЬ создать окумент по договору ");
на Сообщить(ОписаниеОшибки());
Так будет видно в чем проблема.
Вообще проводку можно записать и без субконто. Следовательно, проблема скорее всего в другом.
Почему у вас не заполняется счет кредита, но заполняются субконто по нему? Скорее всего проблема именно в том, что не указан СчетКт
9. CD_SVEN 28.05.20 10:05 Сейчас в теме
(8)
Операция (бухгалтерская) 00000035 от 28.05.2020 12:05:16
Проводка № 1 <>: не заполнен счет кредита.
Проводка № 2 <>: не заполнен счет кредита.
{ВнешняяОбработка.ЗагрузкаМедикаментов.Форма.Форма.Форма(117)}: Ошибка при вызове метода контекста (Записать): Не удалось записать: "Журнал проводок"!
10. user1357043 28.05.20 10:06 Сейчас в теме
(9)Ну вот вам и ответ: Не заполнен СчетКт. Вы субконто заполнили, а сам счет не указали.
В исходном коде это было, но вы потом закоментировали и, видимо, удалили.
11. CD_SVEN 28.05.20 10:08 Сейчас в теме
(10)спасибо за подсказку, если не сложно посмотрите еще почему выходит ошибка: {ВнешняяОбработка.ЗагрузкаМедикаментов.Форма.Форма.Форма(117)}: Ошибка при вызове метода контекста (Записать): Запись не верна! Значение поля "Учреждение" не может быть пустым! (Регистр бухгалтерии: Журнал проводок; Номер строки: 1)
12. user1357043 28.05.20 10:10 Сейчас в теме
(11)Скорее всего, в регистре бухгалтерии есть поле "Учреждение", которое должно быть обязательно заполнено.
У меня нет такой конфигурации. А в обычной бухгалтерии нет поля "Учреждение". Есть подразделение, но его вроде как тоже можно не указывать.
13. CD_SVEN 28.05.20 10:13 Сейчас в теме
(12)спасибо огромное, первый раз с бухгалтерией занимаюсь, много чего не знаю, все получилось
Оставьте свое сообщение

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