Программное создание документа ОперацияБух (Операции, введенные вручную)
Приветствую! Для БП 3.0 пишу обработку создания документа "Операции, введенные вручную" с загрузкой данных из Excel. При создании документа программно в документе отсутствуют колонки "СуммаНуДт" и "СуммаНуКт", хотя заполнение их в регистре произвожу. Пробовал создавать документ и записывать его без заполнений, но результат тот же, тогда как при ручном создании, колонки есть. Есть мысль что это может быть связанно с типом документа (при создании на выбор можно создать: "Операция"; "Сторно документа"; "Типовая операция"). Хотя, могу быть не прав, т.к. у нового документа дает выбрать только: "НовыйДокументОплатыТруда.СторнируемыйДокумент" или "НовыйДокументОплатыТруда.ТиповаяОперация", что наводит на мысль о создании документа "Операция" по умолчанию. Есть у кого идеи, мысли или может кто нибудь сталкивался? Заранее благодарен.
&НаСервере
Процедура СформироватьПроводкиНаСервере()
СуммаОплаты = 0;
СуммаНДФЛ = 0;
НовыйДокументОплатыТруда = Документы.ОперацияБух.СоздатьДокумент();
НовыйДокументОплатыТруда.Дата = Объект.ДатаРегистрацииПроводки;
НовыйДокументОплатыТруда.Комментарий = "Проводки по оплате труда из Универсал ЗУП";
НовыйДокументОплатыТруда.Содержание = "Проводки по оплате труда из Универсал ЗУП";
НовыйДокументОплатыТруда.Ответственный = ПользователиИнформационнойБазы.ТекущийПользователь();
НовыйДокументОплатыТруда.Записать();
Регистр = РегистрыБухгалтерии.Хозрасчетный.СоздатьНаборЗаписей();
Регистр.Отбор.Регистратор.Значение = НовыйДокументОплатыТруда.Ссылка;
Для Каждого Запись Из Объект.Зарплата Цикл
Если Запись.СчетДтКод = "2001" Тогда
НоваяЗапись = Регистр.Добавить();
НоваяЗапись.Регистратор = НовыйДокументОплатыТруда.Ссылка;
НоваяЗапись.Период = Объект.ДатаРегистрацииПроводки;
НоваяЗапись.СчетДт = ПланыСчетов.Хозрасчетный.НайтиПоРеквизиту("КодБыстрогоВыбора", Запись.СчетДтКод);
//Подразделение = Справочники.ПодразделенияОрганизаций;
//НайденнаяСсылка = Справочники.ПодразделенияОрганизаций.НайтиПоНаименованию(Запись.Подразделение);
//Если НайденнаяСсылка = Подразделение.ПустаяСсылка() Тогда
// НовыйЭлемент = Справочники.ПодразделенияОрганизаций.СоздатьЭлемент();
//НовыйЭлемент.Наименование = Запись.Подразделение;
//НовыйЭлемент.Записать();
// НоваяЗапись.ПодразделениеДт = НовыйЭлемент.Ссылка;
//Иначе
НоваяЗапись.ПодразделениеДт = Справочники.ПодразделенияОрганизаций.НайтиПоНаименованию(Запись.Подразделение);
//КонецЕсли;
БухгалтерскийУчет.УстановитьСубконто(НоваяЗапись.СчетДт, НоваяЗапись.СубконтоДт, "НоменклатурныеГруппы", Справочники.НоменклатурныеГруппы.НайтиПоКоду("00-000017"));
БухгалтерскийУчет.УстановитьСубконто(НоваяЗапись.СчетДт, НоваяЗапись.СубконтоДт, "СтатьиЗатрат", Справочники.СтатьиЗатрат.НайтиПоКоду("00-000015"));
//НоваяЗапись.СубконтоДт.НоменклатурныеГруппы = Справочники.НоменклатурныеГруппы.НайтиПоКоду("00-000017");
//НоваяЗапись.СубконтоДт.СтатьиЗатрат = Справочники.СтатьиЗатрат.НайтиПоКоду("00-000015");
НоваяЗапись.СчетКт = ПланыСчетов.Хозрасчетный.НайтиПоРеквизиту("КодБыстрогоВыбора", Запись.СчетКтКод);
БухгалтерскийУчет.УстановитьСубконто(НоваяЗапись.СчетКт, НоваяЗапись.СубконтоКт, "Контрагенты", Справочники.Контрагенты.НайтиПоНаименованию(Запись.Контрагент));
//НоваяЗапись.СубконтоКт.Контрагенты = Справочники.Контрагенты.НайтиПоНаименованию(Запись.Контрагент);
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ДоговорыКонтрагентов.Ссылка КАК Договор
|ИЗ
| Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
|ГДЕ
| ДоговорыКонтрагентов.Владелец = &Владелец";
Запрос.УстановитьПараметр("Владелец", Справочники.Контрагенты.НайтиПоНаименованию(Запись.Контрагент));
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
Пока Выборка.Следующий() Цикл
Договор = Выборка.Договор;
КонецЦикла;
БухгалтерскийУчет.УстановитьСубконто(НоваяЗапись.СчетКт, НоваяЗапись.СубконтоКт, "Договоры", Договор);
//НоваяЗапись.СубконтоКт.Договоры = Договор;
НоваяЗапись.Сумма = Запись.Сумма;
НоваяЗапись.СуммаНУДт = Запись.Сумма;
НоваяЗапись.СуммаНУКт = Запись.Сумма;
НоваяЗапись.Активность = Истина;
Регистр.Записать();
СуммаОплаты = СуммаОплаты + Запись.Сумма;
КонецЕсли;
КонецЦикла;
НовыйДокументНДФЛ = Документы.ОперацияБух.СоздатьДокумент();
НовыйДокументНДФЛ.Дата = Объект.ДатаРегистрацииПроводки;
НовыйДокументНДФЛ.Комментарий = "НДФЛ из Универсал ЗУП";
НовыйДокументНДФЛ.Содержание = "НДФЛ из Универсал ЗУП";
НовыйДокументНДФЛ.Ответственный = ПользователиИнформационнойБазы.ТекущийПользователь();
НовыйДокументНДФЛ.Записать();
Регистр = РегистрыБухгалтерии.Хозрасчетный.СоздатьНаборЗаписей();
Регистр.Отбор.Регистратор.Значение = НовыйДокументНДФЛ.Ссылка;
Для Каждого Запись Из Объект.Зарплата Цикл
Если Запись.СчетДтКод = "7605" Тогда
НоваяЗапись = Регистр.Добавить();
НоваяЗапись.Регистратор = НовыйДокументНДФЛ.Ссылка;
НоваяЗапись.Период = Объект.ДатаРегистрацииПроводки;
НоваяЗапись.СчетДт = ПланыСчетов.Хозрасчетный.НайтиПоРеквизиту("КодБыстрогоВыбора", Запись.СчетДтКод);
НоваяЗапись.СубконтоДт.Контрагенты = Справочники.Контрагенты.НайтиПоНаименованию(Запись.Контрагент);
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ДоговорыКонтрагентов.Ссылка КАК Договор
|ИЗ
| Справочник.ДоговорыКонтрагентов КАК ДоговорыКонтрагентов
|ГДЕ
| ДоговорыКонтрагентов.Владелец = &Владелец";
Запрос.УстановитьПараметр("Владелец", Справочники.Контрагенты.НайтиПоНаименованию(Запись.Контрагент));
Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();
Пока Выборка.Следующий() Цикл
Договор = Выборка.Договор;
КонецЦикла;
НоваяЗапись.СубконтоДт.Договоры = Договор;
НоваяЗапись.СчетКт = ПланыСчетов.Хозрасчетный.НайтиПоРеквизиту("КодБыстрогоВыбора", Запись.СчетКтКод);
НоваяЗапись.СубконтоКт.ВидыПлатежейВГосБюджет = Перечисления.ВидыПлатежейВГосБюджет.Налог;
НоваяЗапись.Сумма = Запись.Сумма;
НоваяЗапись.СуммаНУДт = Запись.Сумма;
НоваяЗапись.Активность = Истина;
Регистр.Записать();
СуммаНДФЛ = СуммаНДФЛ + Запись.Сумма;
КонецЕсли;
КонецЦикла;
НовыйДокументОплатыТруда.СуммаОперации = СуммаОплаты;
НовыйДокументОплатыТруда.Записать();
НовыйДокументНДФЛ.СуммаОперации = СуммаНДФЛ;
НовыйДокументНДФЛ.Записать(РежимЗаписиДокумента.Проведение);
КонецПроцедуры
ПоказатьПо теме из базы знаний
Ответы
В избранное
Подписаться на ответы
Сортировка:
Древо развёрнутое
Свернуть все
Столкнулся сегодня с такой же проблемой. Решил следующим образом:
перед записью ручной операции поставил
об.ОбменДанными.Загрузка = истина;
При записи типовые средства затирают колонки СуммаНУДт и СуммаНУКт, возможно из-за каких-то других незаполненных полей в проводке. Разбираться не стал.
перед записью ручной операции поставил
об.ОбменДанными.Загрузка = истина;
При записи типовые средства затирают колонки СуммаНУДт и СуммаНУКт, возможно из-за каких-то других незаполненных полей в проводке. Разбираться не стал.
(4) garik79,
Очень часто помогает эта магическая запись ОбменДанными.Загрузка = истина
Помогает наделать ошибок, дублей, одинаковых номеров и повторов начислений? Да, помогает. И факт, со стороны появление какого-нибудь дубля организации в справочнике - почти магическое действие.
(5) AlexO, почему сразу ошибок, дублей? Ведь не бухгалтеру даем такую возможность. А самому и подумать можно. Но иногда бывает что НУЖНО записать объект. Тот же договор переделать, а по нему документы в закрытом периоде. Вот и переписываешь договор и правишь регистры по которым должны быть другие записи.
Столкнулся с такой же проблемой, решил написать - может, кому-то поможет... Всего-навсего надо установить реквизит "Организация" в документе "ОперацияБух", в приведенном у ТС примере он не устанавливается.
Еще один момент. У кого проблема что в цикле пишет только одну. Кто будет так же искать решение. Если в Регистр.Записать() не указать параметр, то в цикле у меня просто записи не создавались, а заменялись. В итоге только последняя запись. Для решения надо в Параметр Функции Записать добавить ЛОЖЬ, чтобы записи в цикле не замещались, а создавалась новая. В цикле нужно так "РегХозрасчетный.Записать(Ложь);"
У автора поста в коде ошибка. необходимо писать после цикла. Иначе набор записей будет записываться в БД каждый раз после добавления новой записи в набор. Особенно критично это будет выглядеть, когда записей 1000+.
Регистр.Записать();
Доброго вечера.
Подскажите пожалуйста, как добавить несколько субконто в проводки.
У меня добавляется только Контрагент
Подскажите пожалуйста, как добавить несколько субконто в проводки.
БухгалтерскийУчет.УстановитьСубконто(РегЗапись.СчетДт, РегЗапись.СубконтоДт , "Контрагенты", Выборка.Контрагент);
БухгалтерскийУчет.УстановитьСубконто(РегЗапись.СчетДт, РегЗапись.СубконтоДт , "Договоры", Выборка.ДоговорОт);
У меня добавляется только Контрагент
(15)Только что проверил свой код. Все верно у вас. Отладчик что говорит?
Вот мой на всякий случай.
Вот мой на всякий случай.
БухгалтерскийУчет.УстановитьСубконто(ПроводкаМЦО.СчетКт, ПроводкаМЦО.СубконтоКт, "Номенклатура" , ТекСтрока.Номенклатура);
БухгалтерскийУчет.УстановитьСубконто(ПроводкаМЦО.СчетКт, ПроводкаМЦО.СубконтоКт, "РаботникиОрганизаций" , Источник.Подотчетник);
БухгалтерскийУчет.УстановитьСубконто(ПроводкаМЦО.СчетКт, ПроводкаМЦО.СубконтоКт, 3 , Источник.ЦентрОтветственности);
Вакансии
Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)