Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: создание документа программно  (Прочитано 10108 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Radistka
Помогающий

ru
Offline Offline
Пол: Женский

« : 17-06-2010 02:58 » 

 задача звучит так: необходимо списать со счёта 001 все основные средства.
1С только изучаю, поэтому понятия не имею как это пишется.. подскажите плз.

 

ДокБухС = СоздатьОбъект("Документ.БухгалтерскаяСправка");
    ДокБухС.Новый();
    ДокБухС.СодержаниеОперации="Списание Основных средств"  ;
 
    БухИт = СоздатьОбъект("БухгалтерскиеИтоги");     
    БухИт.ИспользоватьСубконто(ВидыСубконто.ОсновныеСредства,,1,);
    БухИт.ВыполнитьЗапрос(,ДатаСпис,"001",,,,,);
    БухИт.ВыбратьСубконто(1);
   
    Пока БухИт.ПолучитьСубконто(1)=1 Цикл
        Если БухИт.СКД()>0 Тогда
//а вот здесь необходимо добавить проводку, и потом после добавления всех проводок записать, а как?           
        КонецЕсли;       
    КонецЦикла;
    ДокБухС.Записать;
Записан
Kivals
Модератор

ca
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 22-06-2010 17:08 » 

Что такое "Документ.БухгалтерскаяСправка"?
Если ты работаешь с документом - то тебе нужно добавить новую строку документа: ДокБухС.НоваяСтрока(), а дальше обрашаться к реквизитам табличной части: ДокБухС.ОС=БухИт.Субконто(1);
Записан
Radistka
Помогающий

ru
Offline Offline
Пол: Женский

« Ответ #2 : 09-12-2010 03:57 » 

в общем решением тогда было:

Процедура Списать()
   ДокБухС = СоздатьОбъект("Документ.БухгалтерскаяСправка");
   ДокБухС.Новый();                                         
   ДокБухС.ДатаДок=ДатаСпис;
   ДокБухС.СодержаниеОперации="Списание Основных средств"  ;
   
   БухИт = СоздатьОбъект("БухгалтерскиеИтоги");     
   БухИт.ИспользоватьСубконто(ВидыСубконто.ОсновныеСредства,,1,);
   БухИт.ИспользоватьСубконто(ВидыСубконто.Контрагенты,,1,);
   БухИт.ВыполнитьЗапрос(,ДатаСпис,"001",,,,,);
   БухИт.ВыбратьСубконто(1); 
   Т=0;      
   Пока БухИт.ПолучитьСубконто(1)=1 Цикл
      Если БухИт.СКД()>0 Тогда 
         Т=Т+1;
         ДокБухС.НоваяСтрока();
         ДокБухС.НомерСтроки=Т;
         ДокБухС.СчетКт=СчетПоКоду("001",ПланыСчетов.Основной);
         ДокБухС.НазначитьТип("СубконтоКт1",   ДокБухС.СчетКт.ВидСубконто(1)) ;
         ДокБухС.НазначитьТип("СубконтоКт2",   ДокБухС.СчетКт.ВидСубконто(2)) ;
         ДокБухС.СубконтоКт1=БухИт.Субконто(1);
         Сообщить(   ДокБухС.СубконтоКт1 );
         ДокБухС.СубконтоКт2=БухИт.Субконто(2);
         ДокБухС.Сумма=БухИт.СКД();
      КонецЕсли;      
   КонецЦикла;               
    ДокБухС.Записать();
   ДокБухС.Провести();
КонецПроцедуры
Записан
Kivals
Модератор

ca
Offline Offline
Пол: Мужской

WWW
« Ответ #3 : 09-12-2010 09:06 » 

Вцелом - логика абсолютно верна, но есть пара предложений по рефакторингу:

Вот это  - лишнее:
Код:
ДокБухС.НомерСтроки=Т;
(номер строки и так система поставит сама)

А вот это:
Код:
ДокБухС.СчетКт=СчетПоКоду("001",ПланыСчетов.Основной);
лучше бы написать более универсально:
Код:
ДокБухС.СчетКт=БухИт.Счет;

Еще я бы сделал универсально по количеству субконто. Вместо:
Код:
        ДокБухС.НазначитьТип("СубконтоКт1", ДокБухС.СчетКт.ВидСубконто(1)) ;
         ДокБухС.НазначитьТип("СубконтоКт2", ДокБухС.СчетКт.ВидСубконто(2)) ;
         ДокБухС.СубконтоКт1=БухИт.Субконто(1);
         ДокБухС.СубконтоКт2=БухИт.Субконто(2);
я бы сделал циклом:
Код:
Для Ном=1 По БухИт.Счет.КоличествоСубконто() Цикл
         ДокБухС.НазначитьТип("СубконтоКт"+Ном, БухИт.Счет.ВидСубконто(Ном));
         ДокБухС.УстановитьАтрибут("СубконтоКт"+Ном, БухИт.Субконто(Ном));
КонецЦикла;

При подобных изменениях у тебя цикл заполнения табличной части не будет меняться для итогов по любому счету с остатками по кредиту. Если еще немного доработать - то можно сделать абсолютно универсальный цикл независимо от остатков Дт или Кт.
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines