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

1С:Предприятие ::

Метки:

Процедура не срабатывает при первом вызове

Я
   UltraViolet
 
23.03.04 - 14:40
Есть процедура на кнопке, которая работает с бух. итогами. При первом вызове все функции бух. итогов возвращают 0. При последующих - считают все правильно. В чем фишка?

Краткое описание алгоритма функции:
1. устанавливается период для бух. итогов
2. создается таблица значений
3. создается справочник
4. в цикле по элементам справочника (как субконто) считаются СНКРС, КО, ДО, СКДРС и заносятся в таблицу значений.
Заранее спасибо!
 
 
   psk21office
 
1 - 23.03.04 - 14:46
Выложи код, на словах все верно
   lexa
 
2 - 23.03.04 - 14:50
Может попробовать предопределенную процедуру ВводНового
   lexa
 
3 - 23.03.04 - 14:51
прошу прощеня не туда постанул
   UltraViolet
 
4 - 23.03.04 - 14:55
Процедура Заполнить()

 Если Строка(Месяц) = "" Тогда
    Предупреждение("Выберите месяц для расчета!"); 
     Возврат;
 КонецЕсли;
 
// установить период для бухгалтерских итогов

 ДатаНачП = Строка(Дата(ДатаГод(ТекущаяДата()), НомерМес, 1) );
 ДатаКонП = Строка(Дата(ДатаГод(ТекущаяДата()), НомерМес, ДатаЧисло(КонМесяца(ТекущаяДата()))));

 БухИтоги = СоздатьОбъект("БухгалтерскиеИтоги");
 БухИтоги.Рассчитать(Дата(ДатаНачП), Дата(ДатаКонП),,0,,);
 

ТаблЗнач = СоздатьОбъект("ТаблицаЗначений");
ТаблЗнач.НоваяКолонка("Бригады",,,,,,,);
ТаблЗнач.НоваяКолонка("Долг",,,,,,,);
ТаблЗнач.НоваяКолонка("Начислено",,,,,,,);
ТаблЗнач.НоваяКолонка("ДопНач1",,,,,,,);
ТаблЗнач.НоваяКолонка("ДопНач2",,,,,,,);
ТаблЗнач.НоваяКолонка("Выплачено",,,,,,,);
ТаблЗнач.НоваяКолонка("Аванс",,,,,,,);
ТаблЗнач.НоваяКолонка("ДопУд1",,,,,,,);
ТаблЗнач.НоваяКолонка("ДопУд2",,,,,,,);
ТаблЗнач.НоваяКолонка("КВыплате",,,,,,,);

// выбрать список бригад


Бриг = СоздатьОбъект("Справочник.Бригады");
Бриг.ВыбратьЭлементы();
             

// Цикл по Бригадам

Счетчик = 1;
Пока Бриг.ПолучитьЭлемент() > 0 Цикл
    
   // Заполнить строки таблицы значений

    ТаблЗнач.НоваяСтрока(Счетчик);    

    ТекБригада = Бриг.ПолучитьАтрибут("Наименование");
//    ТекКодБригады = Бриг.ПолучитьАтрибут("Код");


    ТаблЗнач.УстановитьЗначение(Счетчик,"Бригады", ТекБригада);

   // 1. КТ 662 на начало месяца Субконто Бригады

    Долг = БухИтоги.СНКРС("662", 1,,Бриг.ТекущийЭлемент(), "!");
    ТаблЗнач.УстановитьЗначение(Счетчик,"Долг", Число(Долг));

   // 2. КТ ОБ 662 Субконто Бригады

    Начислено = БухИтоги.КО("662", 1,,Бриг.ТекущийЭлемент());
    ТаблЗнач.УстановитьЗначение(Счетчик,"Начислено", Число(Начислено));
    
   // 3. ДБ ОБ 662 Субконто Бригады

    Выплачено = БухИтоги.ДО("662", 1,,Бриг.ТекущийЭлемент());
    ТаблЗнач.УстановитьЗначение(Счетчик,"Выплачено", Число(Выплачено));

   // 4. Сумма Сальдо 3721 на конец месяца по Сотрудник->Бригада

   // Выборка Сотрудников по Бригаде

     Сотр = СоздатьОбъект("Справочник.Сотрудники");
     
     Сотр.ВыбратьЭлементыПоРеквизиту("Бригада", Бриг.ТекущийЭлемент(),1,0);
     
   // Расчет сальдо по Сотруднику

   // Сумма по выбранным сотрудникам

     Аванс = 0;
     Пока Сотр.ПолучитьЭлемент() = 1 Цикл
         Аванс = Число(Аванс) + БухИтоги.СКДРС("3721", 1, , Сотр.ТекущийЭлемент(), "!");     
     КонецЦикла;    

    ТаблЗнач.УстановитьЗначение(Счетчик,"Аванс", Число(Аванс));

    Счетчик = Счетчик + 1;    
    
КонецЦикла;

// заполнить табличную часть документа из таблиц значений

ЗагрузитьТабличнуюЧасть(ТаблЗнач);

КонецПроцедуры
   It is me
 
5 - 23.03.04 - 15:23
Метод Рассчитать иногда херново работает...Есть там какие  то операторы ИтогиАктуальны, ОсновныеИтоги и т.п., если с ними поколдовать, может чего и получится, хотя, имхо, лучше сделать бух. запрос по 662...
   UltraViolet
 
6 - 23.03.04 - 15:40
Я сначала тоже грешила на этот метод. Потом вынесла в отдельную процедуру. Хоть один раз его вызовешь, хоть несколько, результат такой же - при первом вызове не считаются или не выводятся в таблицу значений данные. Следовательно, проглючивает код начиная с создания таблицы значений.
   psk21office
 
7 - 23.03.04 - 16:48
По-моему, у тебя неправильно определяются ДАТАНАЧП и ДАТАКОНП.
Если ты хотела задать начало и конец текущего месяца для этого есть процедуры НачМесяца и КонМесяца.
   psk21office
 
8 - 23.03.04 - 16:51
И что за переменные Месяц и НомерМес
   UltraViolet
 
9 - 23.03.04 - 16:52
Вообще-то мне надо было получить номер месяца по его текстовому названию, если вы знаете как это сделать по-другому - поделитесь с новичком. Даты я проверяла, выводятся они правильно... Хотя могу еще раз проверить!
   psk21office
 
10 - 23.03.04 - 16:56
А через список не пробовала.
 
 
   UltraViolet
 
11 - 23.03.04 - 17:01
Я только что заменила
ДатаНачП = Строка(Дата(ДатаГод(ТекущаяДата()), НомерМес, 1) ); 
ДатаКонП = Строка(Дата(ДатаГод(ТекущаяДата()), НомерМес, ДатаЧисло(КонМесяца(ТекущаяДата())))); 

БухИтоги = СоздатьОбъект("БухгалтерскиеИтоги"); 
БухИтоги.Рассчитать(Дата(ДатаНачП), Дата(ДатаКонП),,0,,);
на
 БухИтоги = СоздатьОбъект("БухгалтерскиеИтоги");
БухИтоги.ПериодМ(НомерМес);
где НомерМес - моя переменная...
что-то вообще все результаты нулевые...
   UltraViolet
 
12 - 23.03.04 - 17:07
кстати с датами-то я намудрила... ща исправлю и попробую, авось заработает!
   UltraViolet
 
13 - 23.03.04 - 17:10
Даты исправила - все равно не срабатывает первый раз...
что за напасть...
   psk21office
 
14 - 23.03.04 - 17:39
Слушай, а это обработка в документе?
БухИтоги.ПериодМ(НомерМес, НомерГод);
или
БухИтоги.ПериодМ(Дата);, где Дата - дана НомерМес
   UltraViolet
 
15 - 23.03.04 - 18:57
сорри, не поняла вопрос...
   psk21office
 
16 - 24.03.04 - 10:32
Где распологается процедура и откуда запускается?
   UltraViolet
 
17 - 24.03.04 - 11:55
Вот где в исходнике (см. выше) была процедура Рассчитать(,) - вместо нее я использую ПериодМ(). По идее так правильнее, но при такой установке периода СКДРС, ДО... возвращают 0. С Рассчитать() хоть с глючком, но правильн считает.


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