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

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 71 19.05.23 11:05 Сейчас в теме
(19)Сделать

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

Руководитель направления 1С
Москва
зарплата от 350 000 руб.
Полный день

1С Программист
Москва
зарплата от 180 000 руб.
Полный день

Программист 1С
Москва
зарплата от 180 000 руб. до 220 000 руб.
Полный день

Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)