Программное создание документа ОперацияБух (Операции, введенные вручную)

1. DeNaZaVr 17.09.14 18:41 Сейчас в теме
Приветствую! Для БП 3.0 пишу обработку создания документа "Операции, введенные вручную" с загрузкой данных из Excel. При создании документа программно в документе отсутствуют колонки "СуммаНуДт" и "СуммаНуКт", хотя заполнение их в регистре произвожу. Пробовал создавать документ и записывать его без заполнений, но результат тот же, тогда как при ручном создании, колонки есть. Есть мысль что это может быть связанно с типом документа (при создании на выбор можно создать: "Операция"; "Сторно документа"; "Типовая операция"). Хотя, могу быть не прав, т.к. у нового документа дает выбрать только: "НовыйДокументОплатыТруда.СторнируемыйДокумент" или "НовыйДокументОплатыТруда.ТиповаяОперация", что наводит на мысль о создании документа "Операция" по умолчанию. Есть у кого идеи, мысли или может кто нибудь сталкивался? Заранее благодарен.

&НаСервере
Процедура СформироватьПроводкиНаСервере()
	СуммаОплаты = 0;
	СуммаНДФЛ = 0;
	НовыйДокументОплатыТруда = Документы.ОперацияБух.СоздатьДокумент();
	НовыйДокументОплатыТруда.Дата = Объект.ДатаРегистрацииПроводки;
	НовыйДокументОплатыТруда.Комментарий = "Проводки по оплате труда из Универсал ЗУП";
	НовыйДокументОплатыТруда.Содержание = "Проводки по оплате труда из Универсал ЗУП";
	НовыйДокументОплатыТруда.Ответственный = ПользователиИнформационнойБазы.ТекущийПользователь();
	НовыйДокументОплатыТруда.Записать();
	Регистр = РегистрыБухгалтерии.Хозрасчетный.СоздатьНаборЗаписей();
	Регистр.Отбор.Регистратор.Значение = НовыйДокументОплатыТруда.Ссылка;
	Для Каждого Запись Из Объект.Зарплата Цикл
		Если Запись.СчетДтКод = "2001" Тогда
			НоваяЗапись = Регистр.Добавить();
			НоваяЗапись.Регистратор = НовыйДокументОплатыТруда.Ссылка;
			НоваяЗапись.Период = Объект.ДатаРегистрацииПроводки;
			НоваяЗапись.СчетДт = ПланыСчетов.Хозрасчетный.НайтиПоРеквизиту("КодБыстрогоВыбора", Запись.СчетДтКод);
			//Подразделение = Справочники.ПодразделенияОрганизаций;
			//НайденнаяСсылка = Справочники.ПодразделенияОрганизаций.НайтиПоНаименованию(Запись.Подразделение);
			//Если НайденнаяСсылка = Подразделение.ПустаяСсылка() Тогда
			//	НовыйЭлемент = Справочники.ПодразделенияОрганизаций.СоздатьЭлемент();
				//НовыйЭлемент.Наименование = Запись.Подразделение;
				//НовыйЭлемент.Записать();
			//	НоваяЗапись.ПодразделениеДт = НовыйЭлемент.Ссылка;
			//Иначе
				НоваяЗапись.ПодразделениеДт = Справочники.ПодразделенияОрганизаций.НайтиПоНаименованию(Запись.Подразделение);
			//КонецЕсли;
			БухгалтерскийУчет.УстановитьСубконто(НоваяЗапись.СчетДт, НоваяЗапись.СубконтоДт, "НоменклатурныеГруппы", Справочники.НоменклатурныеГруппы.НайтиПоКоду("00-000017"));
			БухгалтерскийУчет.УстановитьСубконто(НоваяЗапись.СчетДт, НоваяЗапись.СубконтоДт, "СтатьиЗатрат", Справочники.СтатьиЗатрат.НайтиПоКоду("00-000015"));
			//НоваяЗапись.СубконтоДт.НоменклатурныеГруппы = Справочники.НоменклатурныеГруппы.НайтиПоКоду("00-000017");
			//НоваяЗапись.СубконтоДт.СтатьиЗатрат = Справочники.СтатьиЗатрат.НайтиПоКоду("00-000015");
			НоваяЗапись.СчетКт = ПланыСчетов.Хозрасчетный.НайтиПоРеквизиту("КодБыстрогоВыбора", Запись.СчетКтКод);
			БухгалтерскийУчет.УстановитьСубконто(НоваяЗапись.СчетКт, НоваяЗапись.СубконтоКт, "Контрагенты", Справочники.Контрагенты.НайтиПоНаименованию(Запись.Контрагент));
			//НоваяЗапись.СубконтоКт.Контрагенты = Справочники.Контрагенты.НайтиПоНаименованию(Запись.Контрагент);
			Запрос = Новый Запрос;
			Запрос.Текст =
				"ВЫБРАТЬ
				|	ДоговорыКонтрагентов.Ссылка КАК Договор
				|ИЗ
				|	Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
				|ГДЕ
				|	ДоговорыКонтрагентов.Владелец = &Владелец";
			Запрос.УстановитьПараметр("Владелец", Справочники.Контрагенты.НайтиПоНаименованию(Запись.Контрагент));
			Результат = Запрос.Выполнить();
			Выборка = Результат.Выбрать();
			Пока Выборка.Следующий() Цикл
				Договор = Выборка.Договор;
			КонецЦикла;
			БухгалтерскийУчет.УстановитьСубконто(НоваяЗапись.СчетКт, НоваяЗапись.СубконтоКт, "Договоры", Договор);
			//НоваяЗапись.СубконтоКт.Договоры = Договор;
			НоваяЗапись.Сумма = Запись.Сумма;
			НоваяЗапись.СуммаНУДт = Запись.Сумма;
			НоваяЗапись.СуммаНУКт = Запись.Сумма;
			НоваяЗапись.Активность = Истина;
			Регистр.Записать();
			СуммаОплаты = СуммаОплаты + Запись.Сумма;
		КонецЕсли;
	КонецЦикла;	
	НовыйДокументНДФЛ = Документы.ОперацияБух.СоздатьДокумент();
	НовыйДокументНДФЛ.Дата = Объект.ДатаРегистрацииПроводки;
	НовыйДокументНДФЛ.Комментарий = "НДФЛ из Универсал ЗУП";
	НовыйДокументНДФЛ.Содержание = "НДФЛ из Универсал ЗУП";
	НовыйДокументНДФЛ.Ответственный = ПользователиИнформационнойБазы.ТекущийПользователь();
	НовыйДокументНДФЛ.Записать();
	Регистр = РегистрыБухгалтерии.Хозрасчетный.СоздатьНаборЗаписей();
	Регистр.Отбор.Регистратор.Значение = НовыйДокументНДФЛ.Ссылка;
	Для Каждого Запись Из Объект.Зарплата Цикл
		Если Запись.СчетДтКод = "7605" Тогда
			НоваяЗапись = Регистр.Добавить();
			НоваяЗапись.Регистратор = НовыйДокументНДФЛ.Ссылка;
			НоваяЗапись.Период = Объект.ДатаРегистрацииПроводки;
			НоваяЗапись.СчетДт = ПланыСчетов.Хозрасчетный.НайтиПоРеквизиту("КодБыстрогоВыбора", Запись.СчетДтКод);
			НоваяЗапись.СубконтоДт.Контрагенты = Справочники.Контрагенты.НайтиПоНаименованию(Запись.Контрагент);
			Запрос = Новый Запрос;
			Запрос.Текст =
				"ВЫБРАТЬ
				|	ДоговорыКонтрагентов.Ссылка КАК Договор
				|ИЗ
				|	Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
				|ГДЕ
				|	ДоговорыКонтрагентов.Владелец = &Владелец";
			Запрос.УстановитьПараметр("Владелец", Справочники.Контрагенты.НайтиПоНаименованию(Запись.Контрагент));
			Результат = Запрос.Выполнить();
			Выборка = Результат.Выбрать();
			Пока Выборка.Следующий() Цикл
				Договор = Выборка.Договор;
			КонецЦикла;
			НоваяЗапись.СубконтоДт.Договоры = Договор;
			НоваяЗапись.СчетКт = ПланыСчетов.Хозрасчетный.НайтиПоРеквизиту("КодБыстрогоВыбора", Запись.СчетКтКод);
			НоваяЗапись.СубконтоКт.ВидыПлатежейВГосБюджет = Перечисления.ВидыПлатежейВГосБюджет.Налог;
			НоваяЗапись.Сумма = Запись.Сумма;
			НоваяЗапись.СуммаНУДт = Запись.Сумма;
			НоваяЗапись.Активность = Истина;
			Регистр.Записать();
			СуммаНДФЛ = СуммаНДФЛ + Запись.Сумма;
		КонецЕсли;
	КонецЦикла;
	НовыйДокументОплатыТруда.СуммаОперации = СуммаОплаты;
	НовыйДокументОплатыТруда.Записать();
	НовыйДокументНДФЛ.СуммаОперации = СуммаНДФЛ;
	НовыйДокументНДФЛ.Записать(РежимЗаписиДокумента.Проведение);
КонецПроцедуры
Показать
user1046677; wolder; Hoppius; roket; broo; user659168_xec8787; citicat; jills2001; e-katerina; +9 Ответить
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. Salavat 13 17.09.14 18:55 Сейчас в теме
(1) DeNaZaVr, с управляемыми приложениями да - проблематичней стало.

100% вариант - создать документ (с нужными реквизитами и заполнением) и посмотреть какие/как реквизиты у него заполнены.
3. plevakin 24.11.14 11:42 Сейчас в теме
Столкнулся сегодня с такой же проблемой. Решил следующим образом:
перед записью ручной операции поставил

об.ОбменДанными.Загрузка = истина;

При записи типовые средства затирают колонки СуммаНУДт и СуммаНУКт, возможно из-за каких-то других незаполненных полей в проводке. Разбираться не стал.
4. garik79 25.03.15 15:04 Сейчас в теме
Очень часто помогает эта магическая запись ОбменДанными.Загрузка = истина;!!!!!
5. AlexO 135 25.03.15 15:07 Сейчас в теме
(4) garik79,
Очень часто помогает эта магическая запись ОбменДанными.Загрузка = истина
Помогает наделать ошибок, дублей, одинаковых номеров и повторов начислений? Да, помогает. И факт, со стороны появление какого-нибудь дубля организации в справочнике - почти магическое действие.
6. garik79 25.03.15 15:48 Сейчас в теме
(5) AlexO, почему сразу ошибок, дублей? Ведь не бухгалтеру даем такую возможность. А самому и подумать можно. Но иногда бывает что НУЖНО записать объект. Тот же договор переделать, а по нему документы в закрытом периоде. Вот и переписываешь договор и правишь регистры по которым должны быть другие записи.
7. AlexO 135 21.04.15 12:54 Сейчас в теме
(6) garik79,
Тот же договор переделать, а по нему документы в закрытом периоде.
Так вы как считаете - для чего закрывают период, и не дают править даже договор, если по нему уже есть документы?
8. garik79 26.05.15 07:21 Сейчас в теме
Я ведь не бухгалтеру даю такую возможность! А самому можно и решить правильно поступаю или нет. Без обид))))
9. alexdm 11.02.17 12:43 Сейчас в теме
Столкнулся с такой же проблемой, решил написать - может, кому-то поможет... Всего-навсего надо установить реквизит "Организация" в документе "ОперацияБух", в приведенном у ТС примере он не устанавливается.
huzden; AlenaR; ACE$; Xu4kok; nnn-wolf; Hoppius; merabn; kosta_ks; wolder; +9 Ответить
10. kosta_ks 22.07.17 11:05 Сейчас в теме
(9)
СПАСИБО!!! - Реально помогло , пол часа голову ломал - почему операции в оборотку не попадают....
11. merabn 22 15.09.17 10:48 Сейчас в теме
(9)Спасибо, тоже сломал голову!
Реквизит Организация нужно устанавливать не только для всей операции но и для каждой проводки.
user1188623; +1 Ответить
18. softmaker 39 11.03.21 07:15 Сейчас в теме
(11) У меня получилось даже для всей операции, реквизит Организация получался из настроек пользователя, а у него не была выставлена организация по умолчанию...
12. nnn-wolf 02.08.18 18:54 Сейчас в теме
(9) Вот человеческое Спасибо! Выручил, а то сидел тупил, всё перепробовал)
13. mp40 10 23.03.20 09:15 Сейчас в теме
Еще один момент. У кого проблема что в цикле пишет только одну. Кто будет так же искать решение. Если в Регистр.Записать() не указать параметр, то в цикле у меня просто записи не создавались, а заменялись. В итоге только последняя запись. Для решения надо в Параметр Функции Записать добавить ЛОЖЬ, чтобы записи в цикле не замещались, а создавалась новая. В цикле нужно так "РегХозрасчетный.Записать(Ложь);"
14. dammit666 15 29.04.20 20:49 Сейчас в теме
У автора поста в коде ошибка.
Регистр.Записать();
необходимо писать после цикла. Иначе набор записей будет записываться в БД каждый раз после добавления новой записи в набор. Особенно критично это будет выглядеть, когда записей 1000+.
15. Новичок1с 4 17.02.21 18:13 Сейчас в теме
Доброго вечера.

Подскажите пожалуйста, как добавить несколько субконто в проводки.

БухгалтерскийУчет.УстановитьСубконто(РегЗапись.СчетДт, РегЗапись.СубконтоДт ,	"Контрагенты",	Выборка.Контрагент);
БухгалтерскийУчет.УстановитьСубконто(РегЗапись.СчетДт, РегЗапись.СубконтоДт ,	"Договоры", 	        Выборка.ДоговорОт);


У меня добавляется только Контрагент
16. pyrkin_vanya 488 17.02.21 19:29 Сейчас в теме
(15)Только что проверил свой код. Все верно у вас. Отладчик что говорит?

Вот мой на всякий случай.
БухгалтерскийУчет.УстановитьСубконто(ПроводкаМЦО.СчетКт, ПроводкаМЦО.СубконтоКт, "Номенклатура"          , ТекСтрока.Номенклатура);
БухгалтерскийУчет.УстановитьСубконто(ПроводкаМЦО.СчетКт, ПроводкаМЦО.СубконтоКт, "РаботникиОрганизаций"  , Источник.Подотчетник);
БухгалтерскийУчет.УстановитьСубконто(ПроводкаМЦО.СчетКт, ПроводкаМЦО.СубконтоКт, 3                       , Источник.ЦентрОтветственности);
17. Новичок1с 4 17.02.21 19:51 Сейчас в теме
(16)

Да, я только сейчас заметила, что пустое значение Договор.
Благодарю Вас, pyrkin_vanya за ответ.

Понятно тогда.
19. user1887934 19.05.23 11:03 Сейчас в теме
Добрый день,

А как программно посчитать итоговую сумму операции? Кто знает, подскажите, пожалуйста
20. nomad_irk 72 19.05.23 11:05 Сейчас в теме
(19)Сделать

ТЗ.НаборЗаписейХозрасчетный.Выгрузить();
Сумма = ТЗ.Итог("ИмяНужнойКолонки");
Оставьте свое сообщение

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