Версия для печати темы (https://pro1c.org.ua/index.php?s=8457e2106ee7b6aa0bd792b9b1161224&showtopic=46091)

Нажмите сюда для просмотра этой темы в обычном формате

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 _ Программирование в 1С Предприятие 8.3 _ Программное создание документа ОперацияБух и его движений

Автор: sanytch 06.06.18, 11:06

Доброго времени суток! обращаюсь за помощью к знающим специалистам. Переписываю обработку импорта операций. На редакции 1.2 все работало а вот с управляемыми формами не все так гладко. ближе к теме: требуется создать "Операцию, введеную вручную" (документ ОперацияБух). в редакции 1.2 код выглядел так:

НовДок=Документы.ОперацияБух.СоздатьДокумент();
НовДок.Дата=ТекСтрока.ДатаОперации;
НовДок.Номер=пНомерДокумента;
НовДок.Организация=Организация;
НовДок.Ответственный=глЗначениеПеременной("глТекущийПользователь");
НовСтрока=НовДок.Движения.Хозрасчетный.Добавить();
НовСтрока.Активность=Истина;
//заполняю строки
Если  НовДок.Движения.Хозрасчетный.Количество()>0 Тогда
    НовДок.СуммаОперации=НовДок.Движения.Хозрасчетный.Итог("Сумма");
    НовДок.Содержание = "Ручная операция по начислению процентов и пени";
    НовДок.Записать(РежимЗаписиДокумента.Запись);
    Сообщить("Создан документ " + НовДок);
    ТекСтрока.Документ=НовДок.Ссылка;                     
КонецЕсли;

в итоге создавался документ С движениями по Хозрасчетному:

а вот в редакции 2.0 документ хоть и видит обе проводки (итог по сумме же считает) но движений нет:

пробовал так:
ОпБух=Документы.ОперацияБух.СоздатьДокумент();
ОпБух.Дата=КонецДня(КонПериода);
ОпБух.Организация=Организация;
ОпБух.СпособЗаполнения="Вручную";
СтрокаДвижения=ОпБух.Движения.Хозрасчетный.Добавить();
//заполняю свою строку
ОпБух.Записать(РежимЗаписиДокумента.Запись);

и так:
НовДок=Документы.ОперацияБух.СоздатьДокумент();    
НовДок.Дата=ТекСтрока.ДатаОперации;
НовДок.Номер=пНомерДокумента;
НовДок.Организация=Объект.Организация;
НовДок.Ответственный=ПараметрыСеанса.ТекущийПользователь;
НовДок.Записать();
ДокОперацияСсылка = НовДок.Ссылка;
// 1.1 Ручная операция по начислению процентов ДТ373-КТ732
// движения по хозрасчетному
РегХозрасчетный = РегистрыБухгалтерии.Хозрасчетный.СоздатьНаборЗаписей();
РегХозрасчетный.Отбор.Регистратор.Значение = ДокОперацияСсылка;
НовСтрока=РегХозрасчетный.Добавить();
НовСтрока.Регистратор = ДокОперацияСсылка;
//далее заполняю из структуры данные в НовСтрока

затем ни
    РегХозрасчетный.Записать();
ни
НовДок.Записать()
не помогают. 09000000.gif
Подскажите как правильно программно сформировать эти движения? help.gif why.gif

Автор: takefive 07.06.18, 8:50

sanytch @ Вчера, 12:06 * ,
Есть подозрение, что существует еще одна таб.часть с перечислением регистров. Для чего кнопка Выбор регистров на форме? Код вначале вполне работоспособный. Только комментарий в коде должен быть выше на 2 строки

Автор: Володька 11.06.18, 8:05

            ДокОперация = Документы.ОперацияБух.СоздатьДокумент();
        ДокОперация.Дата = ДатаДокумента;
        ДокОперация.Организация = Организация;
        ДокОперация.Ответственный = ПараметрыСеанса.ТекущийПользователь;
        ДокОперация.Содержание = "Содержание";
        ДокОперация.Комментарий = "Комментарий";
        ДокОперация.Записать();

        ДокОперацияСсылка = ДокОперация.Ссылка;
        
                // Добавляем в хозрастчет.
        РегХозрасчетный = РегистрыБухгалтерии.Хозрасчетный.СоздатьНаборЗаписей();
        РегХозрасчетный.Отбор.Регистратор.Значение = ДокОперацияСсылка;
        
                // Если нужен другой регистр
        РегНакопления = РегистрыНакопления.ДРУГОЙ_РЕГИСТР.СоздатьНаборЗаписей();
        РегНакопления.Отбор.Регистратор.Значение = ДокОперацияСсылка;
        
        
        
        Для Каждого Строка из Объект.ТАБЛИЧНАЯ_ЧАСТЬ_К_ ПРИМЕРУ Цикл
        
            РегЗапись = РегХозрасчетный.Добавить();
            РегЗапись.Период = ДатаДокумента;
            РегЗапись.Регистратор = ДокОперацияСсылка;
            РегЗапись.Организация = Организация;
            РегЗапись.Содержание  = Строка.Назначение;
            
            РегЗапись.СчетДт = ПланыСчетов.Хозрасчетный.НайтиПоКоду("СЧЕТ");        
            РегЗапись.СчетКт = ПланыСчетов.Хозрасчетный.НайтиПоКоду("СЧЕТ");
            
            БухгалтерскийУчет.УстановитьСубконто(РегЗапись.СчетДт, РегЗапись.СубконтоДт, "СУБКОНТОДТ", Строка.ДАННЫЕ);
              БухгалтерскийУчет.УстановитьСубконто(РегЗапись.СчетКт, РегЗапись.СубконтоКт, "СУБКОНТОКТ", Строка.ДАННЫЕ);
            
            РегЗапись.Сумма = Строка.ДАННЫЕ;
            
            
            РегНакоп = РегНакопления.Добавить();
            РегНакоп.Период = ДатаДокумента;
            РегНакоп.Регистратор = ДокОперацияСсылка;
            РегНакоп.Организация = Организация;

                        /* ЗАПОЛНЯЕЙТЕ ПО ТИПУ Регистра */
            
        
        КонецЦикла;

                // Не забывайте ЗАПИСАТЬ ВСЁ ЭТО ДЕЛО //
        РегНакопления.Записать();
        РегХозрасчетный.Записать();


Разницы нет никакой в формировании. То, что у Вас стоит сумма, но нет проводок, скорее всего связано, что Вы не записали эти проводки. В данном коде всё будет наоборот, будут проводки, но не будет суммы =) Дал, просто как образец.
Думаю добавить:
ОпБух.СпособЗаполнения="Вручную";
НовДок.СуммаОперации=НовДок.Движения.Хозрасчетный.Итог("Сумма");

Найдете куда, тем более взять из Вашего листинга.

Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua