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

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

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



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

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

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

И т.Д...
7 hhhh
 
27.09.16
08:46
(5) у тебя

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

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


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

   ТекОрганизация = ОбщегоНазначения.ПолучитьСписокГоловныхОрганизаций();
   ВспСчет = ПланыСчетов.Типовой.НайтиПоКоду("000");
   Документ = Документы.ОперацияБух.СоздатьДокумент();
   Документ.Дата = ТекущаяДата();
   Документ.Организация = ТекОрганизация;
   Документ.Автор = Пользователи.ТекущийПользователь();
   //Документ.Записать(РежимЗаписиДокумента.Запись);
   ТЗ = СформироватьЗапросПоОстатком();
   //РегБух = РегистрыБухгалтерии.Типовой.СоздатьНаборЗаписей();
   //РегБух.Отбор.Регистратор.ВидСравнения = ВидСравнения.Равно;
   //РегБух.Отбор.Регистратор.Значение = Документ.Ссылка;
   //РегБух.Отбор.Регистратор.Использование = Истина;
   //РегБух.Очистить();
   СуммаВДок = 0;
   //Документ.Движения.Типовой.Записывать = Истина;
     Для каждого  Стр Из  ТЗ Цикл
       РегБух = Документ.Движения.Типовой;
       Док = РегБух.Добавить();
          Док.Активность = Истина;
       Док.Период = Документ.Дата;
       Док.Регистратор = Документ.Ссылка;
       Док.Организация = ТекОрганизация;
       Док.СчетДт = Стр.Счет;
       Док.СчетКт = ВспСчет;
       Док.СубконтоДт.ОсновныеСредства = Стр.Субконто1;
       Док.Сумма = Стр.СуммаОстатковДт;
       СуммаВДок = СуммаВДок + Стр.СуммаОстатковДт;
       Док.Содержание = "Ввод остатков ОС на счет :" + ""+ Стр.Счет+"" + "на" +  Документ.Дата;
       Сообщение = Новый СообщениеПользователю;
       Сообщение.Текст = "Идет запись таких позиц как :" + " " + Стр.Субконто1;
       Сообщение.Сообщить();
   КонецЦикла;
   //РегБух.Записать();
   Документ.СуммаОперации = СуммаВДок;
   Документ.Записать(РежимЗаписиДокумента.Запись);
   Документ.Движения.Типовой.Записать();  
КонецПроцедуры
9 В тылу врага
 
27.09.16
08:57
Это что за самописка с РБ Типовой?
10 Dmitrii
 
гуру
27.09.16
09:00
(8) >> РегБух = Документ.Движения.Типовой;

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

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

  //Документ.Записать(РежимЗаписиДокумента.Запись);
12 mistеr
 
27.09.16
09:08
(0) КД не предлагать?

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

Вот пробовал выше указанными советами,все не так.

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

   ТекОрганизация = ОбщегоНазначения.ПолучитьСписокГоловныхОрганизаций();
   ВспСчет = ПланыСчетов.Типовой.НайтиПоКоду("000");
   Документ = Документы.ОперацияБух.СоздатьДокумент();
   Документ.Дата = ТекущаяДата();
   Документ.Организация = ТекОрганизация;
   Документ.Автор = Пользователи.ТекущийПользователь();
   Документ.Записать(РежимЗаписиДокумента.Запись);
   ТЗ = СформироватьЗапросПоОстатком();
   РегБух = РегистрыБухгалтерии.Типовой.СоздатьНаборЗаписей();
   //РегБух.Отбор.Регистратор.ВидСравнения = ВидСравнения.Равно;
   //РегБух.Отбор.Регистратор.Значение = Документ.Ссылка;
   //РегБух.Отбор.Регистратор.Использование = Истина;
   //РегБух.Очистить();
   РегБух.Отбор.Регистратор.Установить(Документ.Ссылка);
   СуммаВДок = 0;
   //Документ.Движения.Типовой.Записывать = Истина;
   //РегБух = Документ.Движения.Типовой;
  
     Для каждого  Стр Из  ТЗ Цикл
       Док = РегБух.Добавить();
          Док.Активность = Истина;
       Док.Период = Документ.Дата;
       Док.Регистратор = Документ.Ссылка;
       Док.Организация = ТекОрганизация;
       Док.СчетДт = Стр.Счет;
       Док.СчетКт = ВспСчет;
       Док.СубконтоДт.ОсновныеСредства = Стр.Субконто1;
       Док.Сумма = Стр.СуммаОстатковДт;
       СуммаВДок = СуммаВДок + Стр.СуммаОстатковДт;
       Док.Содержание = "Ввод остатков ОС на счет :" + ""+ Стр.Счет+"" + "на" +  Документ.Дата;
       Сообщение = Новый СообщениеПользователю;
       Сообщение.Текст = "Идет запись таких позиц как :" + " " + Стр.Субконто1;
       Сообщение.Сообщить();
   КонецЦикла;
   //РегБух.Записать();
   Документ.СуммаОперации = СуммаВДок;
   Документ.Записать(РежимЗаписиДокумента.Запись);
   //Документ.Движения.Типовой.Записать();
   РегБух.Записать();
КонецПроцедуры
14 blueisacolour
 
27.09.16
09:19
(12) можете дать ссылку на книгу,если не трудно
15 mistеr
 
27.09.16
09:30
16 blueisacolour
 
27.09.16
10:05
Спасибо всем,оказалось банальная ошибка.Организация имеет тип строка.Подправил.Удачи всем!!!
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.