8.х Создание программно Документа Операция

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем ximera, 22 сен 2009.

  1. TopicStarter Overlay
    ximera
    Offline

    ximera Опытный в 1С

    Регистрация:
    5 фев 2008
    Сообщения:
    205
    Симпатии:
    0
    Баллы:
    26
    Добрый день.

    Мне нужно написать обработку которая бы автоматически выполняла бы начисление по счету 62 в бухгалтерии. Вот никак не могу разобраться каким образом проводки сделать, у меня ошибка выскакивает что поля СчетДт и КТ недоступны для записи. Может кто поправит меня, если можно?
    Код:
    Запр = новый запрос;
    
    ТекстЗапроса = "ВЫБРАТЬ
    |	Контрагенты.Ссылка как Контрагент
    |ИЗ
    |	Справочник.Контрагенты КАК Контрагенты
    |		ЛЕВОЕ СОЕДИНЕНИЕ Перечисление.ГруппаКонтрагентов КАК ГруппаКонтрагентов
    |		ПО Контрагенты.ГруппаКонтрагента = ГруппаКонтрагентов.Ссылка
    |ГДЕ
    |	ГруппаКонтрагентов.Ссылка = &Группа";
    
    Запр.Текст = ТекстЗапроса;
    
    Запр.УстановитьПараметр("Группа",ГруппаКонтрагентов);
    
    Результат = Запр.Выполнить().Выгрузить();
    
    ФормаПрогрессора = ПолучитьОбщуюФорму("ХодВыполненияОбработкиДанных");
    
    Если Результат.Количество() > 0 тогда
    Если ФормаПрогрессора <> Неопределено Тогда
    ФормаПрогрессора.Значение = 0;
    ФормаПрогрессора.МаксимальноеЗначение = Результат.Количество();		
    ФормаПрогрессора.КомментарийОбработкиДанных  = "Начисление абон. платы";		
    ФормаПрогрессора.Открыть();
    КонецЕсли;
    Операция = Документы.ОперацияБух.СоздатьДокумент();
    Операция.Дата = НачалоДня (ДатаОперации);
    Операция.Комментарий = "Групповое начисление по сч.62";
    Операция.Организация = глЗначениеПеременной("ОсновнаяОрганизация");
    Операция.Ответственный = глЗначениеПеременной("глТекущийПользователь");
    Операция.Записать();
    
    НаборЗаписей = РегистрыБухгалтерии.Хозрасчетный.СоздатьНаборЗаписей();
    НаборЗаписей.Отбор.Регистратор.Установить(Операция.Ссылка);
    
    Для каждого ТекСтр из Результат Цикл
    Контрагент = ТекСтр.Контрагент.ПолучитьОбъект();
    
    НовоеДвижение = НаборЗаписей.Добавить();
    НовоеДвижение.Регистратор = Операция;
    НовоеДвижение.Период = Операция.Дата;
    НовоеДвижение.СчетДт = ПланыСчетов.Хозрасчетный.НайтиПоКоду("62.01");
    НовоеДвижение.СубконтоДт.Контрагенты = ТекСтр.Контрагент;
    НовоеДвижение.СубконтоДт.Договоры = Контрагент.ОсновнойДоговорКонтрагента;
    
    НовоеДвижение.СубконтоКт = ПланыСчетов.Хозрасчетный.НайтиПоКоду("90.01.1");
    НовоеДвижение.СубконтоДт.СтавкиНДС = Перечисления.СтавкиНДС.НДС18;
    НовоеДвижение.СубконтоДт.НоменклатурныеГруппы = Справочники.НоменклатурныеГруппы.НайтиПоНаименованию("Услуги");
    НовоеДвижение.Сумма = Контрагент.АбонПлата;
    НовоеДвижение.Организация = глЗначениеПеременной("ОсновнаяОрганизация"); 
    Сообщить("Начислили абон. плату контрагенту: "+Контрагент+" в сумме, руб.: "+Контрагент.АбонПлата);
    КонецЦикла;	
    НаборЗаписей.Записать();
    
    Если ФормаПрогрессора <> Неопределено Тогда
    ФормаПрогрессора.Значение = ФормаПрогрессора.Значение + 1;
    КонецЕсли;
    Иначе 
    ФормаПрогрессора = неопределено;
    КонецЕсли;
    
    Если ФормаПрогрессора <> Неопределено Тогда
    ФормаПрогрессора.Закрыть();
    КонецЕсли;
    
    
  2. taramaz
    Offline

    taramaz

    Регистрация:
    21 ноя 2006
    Сообщения:
    28
    Симпатии:
    0
    Баллы:
    1
    Код:
    Операция = Документы.ОперацияБух.СоздатьДокумент();
    Операция.Дата = НачалоДня (ТекущаяДата());        
    Операция.Комментарий = "Групповое начисление по сч.62";        
    Операция.Организация = глЗначениеПеременной("ОсновнаяОрганизация");        
    Операция.Ответственный = глЗначениеПеременной("глТекущийПользователь");
    ПроводкиБУ = Операция.Движения.Хозрасчетный;
    
    // Для каждого.....
    Проводка = ПроводкиБУ.Добавить();
    Проводка.Период      = ТекущаяДата();
    Проводка.Организация = Организация;
    Проводка.Содержание  = "";
    
    Проводка.СчетДт      = ПланыСчетов.Хозрасчетный.НайтиПоКоду("62.01");
    Проводка.СчетКт      = ПланыСчетов.Хозрасчетный.НайтиПоКоду("90.01.1");
    
    Проводка.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Контрагенты] = a;
    Проводка.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.Договоры] = б;
    Проводка.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.НоменклатурныеГруппы] = в;
    Проводка.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.СтавкиНДС] = Перечисления.СтавкиНДС.НДС18;
    
    
    Проводка.Сумма                     = 100;
    //КонецЦикла
    
    
    Операция.Записать();
    
    
    
    
    
    
    
    
    
    
    
    Субконто по всем субконто по аналогии сделай.
    И еще Операция.СуммаОперации в цикле посчитай и после цикла присвой перед записью.

    И еще вот эту строчку у себя проверь... хотя она уже не нужна
    НовоеДвижение.СубконтоКт = ПланыСчетов.Хозрасчетный.НайтиПоКоду("90.01.1");
  3. tirk
    Offline

    tirk Опытный в 1С

    Регистрация:
    1 сен 2008
    Сообщения:
    1.142
    Симпатии:
    0
    Баллы:
    26
    а может все таки воспользоваться корректировкой записей регистров....

    Операция не всегда будт корректна.. только для БУ и НУ учета

Поделиться этой страницей