Модераторы: stron
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> проблема с вычислением СКД(), помогите новичку 
V
    Опции темы
Fyrklod
Дата 23.7.2008, 14:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 141
Регистрация: 17.10.2006

Репутация: нет
Всего: 1



Доброе всем время суток... У меня будет 2 вопроса, хотя это и идет против правила "1 вопрос - 1 топик" .. вопросы связаны и не вижу смысла получив ответ на один сразу открывать новую тему..  Я уже предупреждал, что я новичек в этом деле так что не судите строго...
ИТАК 
1? в какой момент времени определяется СКД (СКК)? 
я так понимаю сразу же как я внес какие-то  данные.. так? если да, то 

2? В чем причина моей проблемы? У меня после Опирация.Записать читет СКД() и видит тот же результат какой был до записи.... 
 
У меня имеется ситуация следующего плана

           Данное                           |                 Конечное сальдо
======================================================
  БухИтог.Субкото()                  |                   СКД()<0
          БухИтог.Субкото(2)        |                   СКД()<0                                        // 1 подуровень
                БухИтог.Субкото(3)  |                   СКД()<0
                БухИтог.Субкото(3)  |                   СКД()>0
                БухИтог.Субкото(3)  |                   СКД()<0
          БухИтог.Субкото(2)        |                   СКД()>0                                        // 2 подуровень
                БухИтог.Субкото(3)  |                   СКД()>0

Избавляюсь от этих отрицательных путем операции субконто отрицательного на субконто положительного. Делаю это так:

       Пока КоличествоСубконто(БухИт, N) > 1 Цикл
                ПроводСуб(БухИт);
       КонецЦикла


Где 

КоличествоСубконто(БухИт, N) - функция подсчета уровней (субконт) с СКД() <> 0
т.е. для 1 подуровня функцтя возвращает 3

N - номер выборки

ПроводСуб(БухИт) - Процедура проводки (   Операция, Новая, НоваяПроводка, Данные дебетные/кредетные, Записать)

После одного прохода в цикле должно быть так:
           Данное                           |                 Конечное сальдо
======================================================
  БухИтог.Субкото()                  |                   СКД()<0
          БухИтог.Субкото(2)        |                   СКД()<0 
                БухИтог.Субкото(3)  |                   
                БухИтог.Субкото(3)  |                   
                БухИтог.Субкото(3)  |                   СКД()<0
          БухИтог.Субкото(2)        |                   СКД()>0 
                БухИтог.Субкото(3)  |                   СКД()>0

т.е для первого уровня функция количества долна вернуть 1 а оно так не происходит.. за счет чего происходит тупое зацикливание у множественная проводка.


Это сообщение отредактировал(а) Fyrklod - 23.7.2008, 14:34
--------------------
Зачем компьютеры пищат, когда нажимаешь сразу много клавиш? Чтобы будить уснувших на клавиатуре программистов!
PM MAIL   Вверх
Itsys
Дата 23.7.2008, 20:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1338
Регистрация: 21.1.2008
Где: г. Москва

Репутация: 7
Всего: 34



Слушай, лучше бы ты вместо описания привел текст модуля, или его часть, которая описанную проблему содержит...

1. СКД бывают разные, у глобальных итогов и у запроса, насколько я понял, т.к. ты указываешь на СКД(), то это запрос, соответственно все сальдо и обороты и т.д. определяются на момент выполнения инстуркции ВыполнитьЗапрос().

2. Если е тебя будет порядок операций
Код

БухИтог.ВыполнитьЗапрос(...)
....
Операция.Записать();
....
БухИтог.СКД()

конечно у тебя СКД() будет содержать сальдо, до записи проводок, если ты хочешь, чтобы СКД() учитывало сделанные проводки, то надо писать так:
Код

БухИтог.ВыполнитьЗапрос(...)
....
Операция.Записать();
....
БухИтог.ВыполнитьЗапрос(...)
БухИтог.СКД()


Да, и Операция.Записать() работает медленне, чем Операция.ЗаписатьПроводки(), так что для получения промежуточных итогов проведения используют обычно последний вариант, и в самом конце проведения уже окончаельно записывают проводки.

ЗЫ Надеюсь, что я правильно понял суть вопроса, если нет - значит из тебя плохой объяснятель, надо приводить не оторванные друг от друга куски модуля с пространным описанием работы всего модуля, а приводить тест модуля, желательно с указание в какихстроках что работает не так, и как должно работать.

PM MAIL WWW Skype   Вверх
Kaboom
Дата 24.7.2008, 01:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 66
Регистрация: 25.5.2007

Репутация: нет
Всего: нет



Цитата

СКД бывают разные, у глобальных итогов и у запроса, насколько я понял, т.к. ты указываешь на СКД(), то это запрос, соответственно все сальдо и обороты и т.д. определяются на момент выполнения инстуркции ВыполнитьЗапрос().

Маленькая поправка: сальдо и обороты определяются на начальную дату (СНД, СНК) или конечную дату (СКД, СКК) или за период указанный в параметрах ВыполнитьЗапрос.
PM MAIL   Вверх
Fyrklod
Дата 24.7.2008, 09:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 141
Регистрация: 17.10.2006

Репутация: нет
Всего: 1



Itsys, ты меня правильно понял...
но вот щас есть маленькая заминка

в общем по коду у меня такое

Код

Если БухИт.ВыполнитьЗапрос(Дата1, Дата2, Счет) = 0 Тогда
        Возврат;
КонецЕсли;

БухИт.ВыбратьСубконто();
Пока БухИт.ПолучитьСубконто() = 1 Тогда
          Пока КоличествоСубконто(БухИт, 2) > 1 Цикл
                   ПроводСуб(БухИт);
                   Если БухИт.ВыполнитьЗапрос(Дата1, Дата2, Счет) = 0 Тогда
                            Возврат;
                   КонецЕсли;
          КонецЦикла;
КонецЦикла;


ну код функции КоличествоСубконто(БухИт, 2) такой
Код

Функция КоличествоСубконто(БухИт, N)
          Кво = 0;
          БухИт.ВыбратьСубконто(N);
          Пока БухИт.ПолучитьСубконто(N) = 1 Тогда
                   Если БухИт.СКД() <> 0  Тогда
                            Кво = Кво +1;                            
                   КонецЕсли;
          КонецЦикла;
          Возврат Кво;
КонецФункции;


Разумеется после  на повторном обходе в цикле  (повторный - после ВыполнитьЗапрос()) выдается ошибка... в принцепи я понимаю, что сново надо сделать выборку ВыбратьСубконто() для работы с аналитикой уровня 2, но это меня вернет в начало работы..... Есть ли какая-то возможность после перевыполнения запроса оставаться на том же уровне и продолжать работу?

P.S. 
Itsys,  smile ты как бы прав.. я плохой объясняющий.... вечно всё на пальцах... поэтому тяжко описывать всю сущность проблемы.. тем более в 1С я новичек и изъясняюсь для себя понятными словами, хотя понимаю, что эти слова мало кому понятны....



Это сообщение отредактировал(а) Fyrklod - 24.7.2008, 09:35
--------------------
Зачем компьютеры пищат, когда нажимаешь сразу много клавиш? Чтобы будить уснувших на клавиатуре программистов!
PM MAIL   Вверх
Itsys
Дата 24.7.2008, 14:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1338
Регистрация: 21.1.2008
Где: г. Москва

Репутация: 7
Всего: 34



Нет нет и еще раз нет, перевыполнять запрос при выборке результатов из него - это порочная практика с непредсказуемыми результатами, ты лучше напиши, что за задача, я уверен что все можно сделать намного проще!

Добавлено через 23 секунды
Нет нет и еще раз нет, перевыполнять запрос при выборке результатов из него - это порочная практика с непредсказуемыми результатами, ты лучше напиши, что за задача, я уверен что все можно сделать намного проще!
PM MAIL WWW Skype   Вверх
Fyrklod
Дата 24.7.2008, 15:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 141
Регистрация: 17.10.2006

Репутация: нет
Всего: 1



Ну про не предвидимость в принцепи можно догадаться.. сам этого опасался ((

Мне дали задание доделать программку где происходит проблема с выводом отчетов по сальдо оборотам ... 

Ну свою задачу я примерно описал в самом первом своем посте... т.е. 

           Данное                           |                 Конечное сальдо
======================================================
..........................(таблицу не дублирую).........................................................


т.е мне надо просто минусовые данные перепровести, как т.е в операции надо субконты с положительными СНК() провести с субконтами отрицательными.....
--------------------
Зачем компьютеры пищат, когда нажимаешь сразу много клавиш? Чтобы будить уснувших на клавиатуре программистов!
PM MAIL   Вверх
Fyrklod
Дата 26.7.2008, 15:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 141
Регистрация: 17.10.2006

Репутация: нет
Всего: 1



Неужели никто не может помочь мне в моей проблеме?
--------------------
Зачем компьютеры пищат, когда нажимаешь сразу много клавиш? Чтобы будить уснувших на клавиатуре программистов!
PM MAIL   Вверх
Itsys
Дата 27.7.2008, 12:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1338
Регистрация: 21.1.2008
Где: г. Москва

Репутация: 7
Всего: 34



Подожди, так тебе надо сформировать отчет, или закрыть положительны и отрицательные итоги?

Судя по предыдущему топику, тебе надо сделать корректировочные проводки для убирания отрицательных сальдо на счете, тогда план действия такой:
1. Формируешь итоги
2. Скдиываешь их в ТаблицуЗначений
3. Анализируешь таблицу
4. Делаешь корректировочные проводки
5. (Если очень хочется) заново формируешь итоги и проверяешь результат.

ЗЫ Тебе никто не отвечает, т.к. никто не может понять, чего ты хочешь...
ЗЗЫ если хочешь, стобы тебе помогли больше, пости данные, кторые есть в ОСВ по счету, приводи пример, что надо получить и поподробнее.
PM MAIL WWW Skype   Вверх
Fyrklod
Дата 27.7.2008, 15:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 141
Регистрация: 17.10.2006

Репутация: нет
Всего: 1



Itsys, ты прав 
Цитата(Itsys @  27.7.2008,  12:25 Найти цитируемый пост)
закрыть положительны и отрицательные итоги


В связи с еще не полным знаение  smile хочу уточнить....

Цитата(Itsys @  27.7.2008,  12:25 Найти цитируемый пост)
1. Формируешь итоги
2. Скдиываешь их в ТаблицуЗначений
3. Анализируешь таблицу
4. Делаешь корректировочные проводки

 smile если можно

в общем когда передо мной ставили задачу мне показали сальдо оборотный отчет так что примерно там так
пример такой

                                                  начальное сальдо                                                    конечное сальдо
Принтер Samsung ML1210                 
  - Главный корпус                             
  - - Бухгалтерия                                    150.0                                                                         150.0
  - - Дирекция                                        -150.0                                                                       -150.0

Вот вот эти отрицательные надо закрыть... в общем сделать чтобы все было ок....

Как еще пример привести не наю  smile 

Это сообщение отредактировал(а) Fyrklod - 27.7.2008, 15:28
--------------------
Зачем компьютеры пищат, когда нажимаешь сразу много клавиш? Чтобы будить уснувших на клавиатуре программистов!
PM MAIL   Вверх
Itsys
Дата 27.7.2008, 21:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1338
Регистрация: 21.1.2008
Где: г. Москва

Репутация: 7
Всего: 34



Ну примерно так:
Код

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

PM MAIL WWW Skype   Вверх
Fyrklod
Дата 28.7.2008, 11:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 141
Регистрация: 17.10.2006

Репутация: нет
Всего: 1



Itsys, спасибо огромное.... 

 Все работает 
 1)   без лишних зацикливаний
 2)   быстрее обрабатывается. Не то что у меня, когда я свое писал  .. а это самое главное в наше время.. как говорится время деньги   smile 


Вроди по проводке все ок.... спасибо еще раз

Это сообщение отредактировал(а) Fyrklod - 28.7.2008, 11:24
--------------------
Зачем компьютеры пищат, когда нажимаешь сразу много клавиш? Чтобы будить уснувших на клавиатуре программистов!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "1C: Предприятие, SAP, ERP и учётные системы"
stron

Запрещается!

1. Обсуждение крэков, кейгенов и других подобных программ

Пробуйте искать сами или обращайтесь в приват к участникам форума.

Темы с подобными вещами будут немедленно удаляться, а нарушители - получать предупреждения.

Также запрещается обсуждение проблем работы этих программ (что куда вписать, куда что скопировать и т.п...)

2. Давать ссылки на взломанные продукты

  • Пожалуйста, пользуйтесь поиском перед тем, как задать вопрос - возможно ответ уже есть на форуме.
  • Название темы должно отражать её суть
  • Действия модераторов можно обсудить здесь

С уважением, stron, Pegas.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | 1C: Предприятие, SAP, ERP и учётные системы | Следующая тема »


 




[ Время генерации скрипта: 0.0612 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.