Вход | Регистрация
 

Как программно заполнить документ операциябух?

Как программно заполнить документ операциябух?
Я
   blueisacolour
 
27.09.16 - 07:28
Добрый день.Переношу остатки из базы в базу.Создал обработку,что бы заполнить программно в док оперция.Обработка показывает запись,но в регистре пусто.Может что то делаю не так?В роде простой код:

Процедура СоздатьДокПоСальдо() Экспорт

   ТекОрганизация = ОбщегоНазначения.ПолучитьСписокГоловныхОрганизаций();
   ВспСчет = ПланыСчетов.Типовой.НайтиПоКоду("000");
   Документ = Документы.ОперацияБух.СоздатьДокумент();
   Документ.Дата = ТекущаяДата();
   Документ.Организация = ТекОрганизация;
   Документ.Автор = Пользователи.ТекущийПользователь();
   Документ.Записать(РежимЗаписиДокумента.Запись);
   ТЗ = СформироватьЗапросПоОстатком();
   РегБух = РегистрыБухгалтерии.Типовой.СоздатьНаборЗаписей();
   РегБух.Отбор.Регистратор.Значение = Документ.Ссылка;
   РегБух.Записать();
   СуммаВДок = 0;
   Для каждого  Стр Из  ТЗ Цикл
       Док = РегБух.Добавить();
          Док.Активность = Истина;
       Док.Период = Документ.Дата;
       Док.Регистратор = Документ.Ссылка;
       Док.Организация = ТекОрганизация;
       Док.СчетДт = Стр.Счет;
       Док.СчетКт = ВспСчет;
       Док.СубконтоДт.ОсновныеСредства = Стр.Субконто1;
       Док.Сумма = Стр.СуммаОстатковДт;
       СуммаВДок = СуммаВДок + Стр.СуммаОстатковДт;
       Док.Содержание = "Ввод остатков ОС на счет :" + ""+ Стр.Счет+"" + "на" +  Документ.Дата;
   КонецЦикла;
   РегБух.Записать(Истина);
   Документ.СуммаОперации = СуммаВДок;
   Документ.Записать(РежимЗаписиДокумента.Запись);
      
КонецПроцедуры



Функция СформироватьЗапросПоОстатком()

    Запрос = Новый Запрос;
    Запрос.Текст = "ВЫБРАТЬ
                   |    ТиповойОстатки.Счет,
                   |    ТиповойОстатки.Субконто1,
                   |    ТиповойОстатки.Субконто2,
                   |    ТиповойОстатки.Субконто3,
                   |    ЕСТЬNULL(ТиповойОстатки.СуммаОстатокДт, 0) КАК СуммаОстатковДт,
                   |    ЕСТЬNULL(ТиповойОстатки.СуммаОстатокКт, 0) КАК СуммаОстатковКт
                   |ИЗ
                   |    РегистрБухгалтерии.Типовой.Остатки(&Дата, Счет = &Счет, , ) КАК ТиповойОстатки";
    Запрос.УстановитьПараметр("Дата", '20160901');
    Запрос.УстановитьПараметр("Счет", ПланыСчетов.Типовой.НайтиПоКоду("2410"));
    
    
    Результат = Запрос.Выполнить().Выгрузить();
    Возврат Результат;

КонецФункции // ()
 
 
   1dvd
 
1 - 27.09.16 - 07:35
РегБух.Отбор.Регистратор.ВидСравнения = ВидСравнения.Равно;
РегБух.Отбор.Регистратор.Значение = Документ.Ссылка;
РегБух.Отбор.Регистратор.Использование = Истина;
//РегБух.Записать();

РегБух.Очистить();
   Рэйв
 
2 - 27.09.16 - 07:39
(0)Пиши в движения документа.Так проще, имхо
   blueisacolour
 
3 - 27.09.16 - 07:45
Либо ОбменДанными поставить в истину
   jsmith
 
4 - 27.09.16 - 08:01
(2)+1
РегБух = Документ.Типовой.СоздатьНаборЗаписей();
   blueisacolour
 
5 - 27.09.16 - 08:09
запись есть в отладчике, даже флаг установил записовать истина
   Рэйв
 
6 - 27.09.16 - 08:16
(4)Документ.Типовой - это уже набор:-) Так что просто
Движение=Документ.Типовой.Добавить();

И т.Д...
   hhhh
 
7 - 27.09.16 - 08:46
(5) у тебя
   РегБух.Отбор.Регистратор.Значение = Документ.Ссылка;

какое-то половинчатое. попробуй по-нормальноиу


   РегБух.Отбор.Регистратор.Установить(Документ.Ссылка);
   blueisacolour
 
8 - 27.09.16 - 08:52
Пробовал такой вариант,тоже никакой.
Процедура СоздатьДокПоСальдо() Экспорт

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

   ТЗ = СформироватьЗапросПоОстатком();
  //РегБух = РегистрыБухгалтерии.Типовой.СоздатьНаборЗаписей();

  //РегБух.Отбор.Регистратор.ВидСравнения = ВидСравнения.Равно;

  //РегБух.Отбор.Регистратор.Значение = Документ.Ссылка;

  //РегБух.Отбор.Регистратор.Использование = Истина;

  //РегБух.Очистить();

   СуммаВДок = 0;
  //Документ.Движения.Типовой.Записывать = Истина; 

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

   Документ.СуммаОперации = СуммаВДок;
   Документ.Записать(РежимЗаписиДокумента.Запись);
   Документ.Движения.Типовой.Записать();  
КонецПроцедуры
   В тылу врага
 
9 - 27.09.16 - 08:57
Это что за самописка с РБ Типовой?
   Dmitrii
 
10 - 27.09.16 - 09:00
(8) >> РегБух = Документ.Движения.Типовой;

Это должно быть ДО цикла. А так получается ты в каждой итерации цикла пересоздаёшь заново набор записей.

ИМХО правильный вариант в (7): В коде в (0) надо заменить строчку РегБух.Отбор.Регистратор.Значение = Документ.Ссылка на РегБух.Отбор.Регистратор.Установить(Документ.Ссылка).
И не надо перед циклом выполнять лишнюю запись набора    РегБух.Записать(). Запись достаточно выполнить после цикла.
   hhhh
 
11 - 27.09.16 - 09:02
(8) тут вообще тупая ошибка. зачем-то закомментировал
  //Документ.Записать(РежимЗаписиДокумента.Запись);
   mistеr
 
12 - 27.09.16 - 09:08
(0) КД не предлагать?

Кстати, в учебнике есть пример как раз для операции.
   blueisacolour
 
13 - 27.09.16 - 09:15
(12) у меня конфу из Казахстана.Простите!!!Выигрузить по Правилу не получается,табличной части нет там!!!

Вот пробовал выше указанными советами,все не так.
Процедура СоздатьДокПоСальдо() Экспорт

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

  //РегБух.Отбор.Регистратор.Значение = Документ.Ссылка;

  //РегБух.Отбор.Регистратор.Использование = Истина;

  //РегБух.Очистить();

   РегБух.Отбор.Регистратор.Установить(Документ.Ссылка);
   СуммаВДок = 0;
  //Документ.Движения.Типовой.Записывать = Истина; 

  //РегБух = Документ.Движения.Типовой;

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

   Документ.СуммаОперации = СуммаВДок;
   Документ.Записать(РежимЗаписиДокумента.Запись);
  //Документ.Движения.Типовой.Записать(); 

   РегБух.Записать();
КонецПроцедуры
   blueisacolour
 
14 - 27.09.16 - 09:19
(12) можете дать ссылку на книгу,если не трудно
   mistеr
 
15 - 27.09.16 - 09:30
   blueisacolour
 
16 - 27.09.16 - 10:05
Спасибо всем,оказалось банальная ошибка.Организация имеет тип строка.Подправил.Удачи всем!!!

Список тем форума
Рекламное место пустует  Рекламное место пустует
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.