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


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

Как программно заполнить документ операциябух?
Я
   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
Спасибо всем,оказалось банальная ошибка.Организация имеет тип строка.Подправил.Удачи всем!!!

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