1. Набираем команду codeby webinar. Набираем команду для организации и проведения вебинаров. Подробнее ...

    Скрыть объявление
  2. Требуются разработчики и тестеры для проекта codebyOS. Требования для участия в проекте: Знание принципов работы ОС на базе Linux; Знание Bash; Крайне желательное знание CPP, Python, Lua; Навыки системного администрирования. Подробнее ...

    Скрыть объявление
  3. Получи 30.000 рублей. Для получения денег необходимо принять участие в конкурсе авторов codeby. С условиями и призами можно ознакомиться на этой странице ...

    Внимание! Регистрация авторов на конкурс закрыта.

    Скрыть объявление

1c7.7 выгрузка остатков с любого счета

Тема в разделе "Базы данных и администрирование", создана пользователем KiR, 20 янв 2009.

  1. KiR

    KiR НЕ шибка опытный програмер)

    Репутация:
    0
    Регистрация:
    11 сен 2007
    Сообщения:
    1.581
    Симпатии:
    0
    Задача: сделать обработку которая бы собирала остатки с указанного пользователем счета, на указанную дату пользователем со всеми аналитиками (не выбираются юзером), потом выгружала их в файлик
    Действия: Узнаю колво аналитик на счете. далее естественно нужно сделать Использовать субконто. реализовано так:
    Код:
    КолвоСубконто = Счет.КоличествоСубконто();
    БухИт = СоздатьОбъект("БухгалтерскиеИтоги");
    Если КолвоСубконто = 1 Тогда
    БухИт.ИспользоватьСубконто(Счет.ВидСубконто(1),,1);  
    ИначеЕсли КолвоСубконто = 2 Тогда
    БухИт.ИспользоватьСубконто(Счет.ВидСубконто(1),,1); 
    БухИт.ИспользоватьСубконто(Счет.ВидСубконто(2),,1); 
    ИначеЕсли КолвоСубконто = 3 Тогда
    БухИт.ИспользоватьСубконто(Счет.ВидСубконто(1),,1); 
    БухИт.ИспользоватьСубконто(Счет.ВидСубконто(2),,1); 
    БухИт.ИспользоватьСубконто(Счет.ВидСубконто(3),,1); 
    КонецЕсли;	
    БухИт.ВыполнитьЗапрос(ВыбДата-1, ВыбДата, счет,,,,,); 
    БухИт.ВыбратьСубконто(1);
    Проблема: далее нужно Получить субконто. Когда в счете только одно субконто - никаких проблем, но если более - не знаю как правильно построить цикл. Подскажите пожалуйста. Заранее благодарю
     
  2. Hryv

    Hryv Гость

    Репутация:
    0
    Код:
    ...
    БухИт.ВыполнитьЗапрос(ВыбДата-1, ВыбДата, счет,,,,,);
    БухИт.ВыбратьСубконто(1);  
    Пока БухИт.ПолучитьСубконто(1)=1 Цикл
    Если КолвоСубконто > 1 Тогда
    БухИт.ВыбратьСубконто(2);  
    Пока БухИт.ПолучитьСубконто(2)=1 Цикл
    Если КолвоСубконто > 2 Тогда
    БухИт.ВыбратьСубконто(3);  
    Пока БухИт.ПолучитьСубконто(3)=1 Цикл
    ВыгрузитьДанные();
    КонецЦикла;
    Иначе
    ВыгрузитьДанные();
    КонецЕсли;	
    КонецЦикла;
    Иначе
    ВыгрузитьДанные();
    КонецЕсли;	
    КонецЦикла;
    где ВыгрузитьДанные() - это некая функция с нужными тебе действиями
     
  3. KiR

    KiR НЕ шибка опытный програмер)

    Репутация:
    0
    Регистрация:
    11 сен 2007
    Сообщения:
    1.581
    Симпатии:
    0
    да выгрузку я потом напишу. я сначала думал все в ТЗ скинуть.
    Логику примерно такую же делал:
    Код:
    БухИт.ВыполнитьЗапрос(ВыбДата-1, ВыбДата, счет,,,,,); 
    БухИт.ВыбратьСубконто(1); 
    Пока БухИт.ПолучитьСубконто(1) = 1 Цикл
    Если КолвоСубконто = 1 Тогда
    ТЗ.НоваяСтрока();
    ТЗ.С1Н = БухИт.Субконто(1).Наименование;
    ТЗ.С1К = БухИт.Субконто(1).Код;  
    ТЗ.СКД = БухИт.СКД();
    ТЗ.СКК = БухИт.СКК(); 
    ИначеЕсли КолвоСубконто = 2 Тогда	
    БухИт.ВыбратьСубконто(2); 
    Пока БухИт.ПолучитьСубконто(2) = 1 Цикл 
    ТЗ.НоваяСтрока();
    ТЗ.С1Н = БухИт.Субконто(1).Наименование;
    ТЗ.С1К = БухИт.Субконто(1).Код;
    ТЗ.С2Н = БухИт.Субконто(2).Наименование;
    ТЗ.С2К = БухИт.Субконто(2).Код;
    КонецЦикла;
    ИначеЕсли КолвоСубконто = 3 Тогда
    БухИт.ВыбратьСубконто(2); 
    Пока БухИт.ПолучитьСубконто(2) = 1 Цикл 
    БухИт.ВыбратьСубконто(3); 
    Пока БухИт.ПолучитьСубконто(3) = 1 Цикл	
    ТЗ.НоваяСтрока();
    ТЗ.С1Н = БухИт.Субконто(1).Наименование;
    ТЗ.С1К = БухИт.Субконто(1).Код;
    ТЗ.С2Н = БухИт.Субконто(2).Наименование;
    ТЗ.С2К = БухИт.Субконто(2).Код;
    ТЗ.С3Н = БухИт.Субконто(3).Наименование;
    ТЗ.С3К = БухИт.Субконто(3).Код;  
    ТЗ.СКД = БухИт.СКД();
    ТЗ.СКК = БухИт.СКК();
    КонецЦикла;
    КонецЦикла;
    КонецЕсли;
    КонецЦикла;
    тока вот в результате не на каждом счете нормально отрабатывало. для примера брал 76,5 и 51 по 3 аналитики на каждом
     
  4. Hryv

    Hryv Гость

    Репутация:
    0
    Это по твоему желанию
    Цикл обхода итогов у тебя есть, а наполнить его можно чем угодно


    У тебя цикл по сути такой же, и должен правильно работать
    А в чем конкретно выражается "не на каждом счете нормально отрабатывало"
     
  5. KiR

    KiR НЕ шибка опытный програмер)

    Репутация:
    0
    Регистрация:
    11 сен 2007
    Сообщения:
    1.581
    Симпатии:
    0
    в том что БухИт.ВыбратьСубконто(2) = 0; на 51 счете
    ща оборотку посмотрел - там такая ситуация что остатки живут только у первой аналитики, у остальных их нет. И как же быть в такой ситуации? подозреваю что и по другим счетам может такая же ерунда быть
     
  6. Hryv

    Hryv Гость

    Репутация:
    0
    У тебя на втором субконто случайно не установлен флажок "Только обороты"?
     
  7. KiR

    KiR НЕ шибка опытный програмер)

    Репутация:
    0
    Регистрация:
    11 сен 2007
    Сообщения:
    1.581
    Симпатии:
    0
    возможно. как быть при такой ситуации? ведь счет пользователь сможет выбрать абсолютно любой и не учитывать такой возможности нельзя
     
  8. Hryv

    Hryv Гость

    Репутация:
    0
    Честно говоря я не совсем понимаю зачем надо делать субконто с флажком "только обороты"
    Но если такой флаг стоит, то СКД() и СКК() по нему ты все равно не получишь

    Получается, что такие субконто не надо учитывать
    Что несложно сделать

    Интересно, что тебе стандартный анализ счета по субконто показывает?
    Если вдруг с остатками, то посмотри как там сделано
     
  9. KiR

    KiR НЕ шибка опытный програмер)

    Репутация:
    0
    Регистрация:
    11 сен 2007
    Сообщения:
    1.581
    Симпатии:
    0
    анализ счета показывает тока первое субконто) зачем стоят только обороты - не в курсе. вначале конфа была типовой, кто дорабатывал - не знаю
    как сделать чтобы не учитывать субконто? я имею ввиду мне нужно получить Счет.ТолькоОбороты, а потом условие куда ставить - перед использовать субконто или перед получинием субконто?
     
  10. Hryv

    Hryv Гость

    Репутация:
    0
    Если ты выгружаешь только остатки, то пропускай такикие субконто смело
    Ведь даже при внесении начальных остатков их по субконто разнести нельзя будет
     
  11. KiR

    KiR НЕ шибка опытный програмер)

    Репутация:
    0
    Регистрация:
    11 сен 2007
    Сообщения:
    1.581
    Симпатии:
    0
    это я понял. я не понял где мне поставить проверку нужно - когда я делаю использовать субконто:
    Код:
    Если КолвоСубконто = 1 Тогда
    БухИт.ИспользоватьСубконто(Счет.ВидСубконто(1),,1);  
    ИначеЕсли КолвоСубконто = 2 Тогда
    БухИт.ИспользоватьСубконто(Счет.ВидСубконто(1),,1); 
    БухИт.ИспользоватьСубконто(Счет.ВидСубконто(2),,1); 
    ИначеЕсли КолвоСубконто = 3 Тогда
    БухИт.ИспользоватьСубконто(Счет.ВидСубконто(1),,1); 
    БухИт.ИспользоватьСубконто(Счет.ВидСубконто(2),,1); 
    БухИт.ИспользоватьСубконто(Счет.ВидСубконто(3),,1); 
    КонецЕсли;
    или же или же когда я далее делаю получить субконто?
     
  12. Hryv

    Hryv Гость

    Репутация:
    0
    Я бы так сделал (пример для 2-х )
    Код:
    Если КолвоСубконто = 1 Тогда
    ...
    ИначеЕсли КолвоСубконто = 2 Тогда
    Если Счет.ТолькоОбороты(1)=1 Тогда
    КолвоСубконто = КолвоСубконто -1;
    Иначе
    БухИт.ИспользоватьСубконто(Счет.ВидСубконто(1),,1); 
    КонецЕсли;
    Если Счет.ТолькоОбороты(2)=1 Тогда
    КолвоСубконто = КолвоСубконто -1;
    Иначе
    БухИт.ИспользоватьСубконто(Счет.ВидСубконто(2),,1); 
    КонецЕсли;
    ИначеЕсли КолвоСубконто = 3 Тогда
    ...
    КонецЕсли;
    Дальше надо только учесть, что субконто вообще может не быть (хотя это и так бывает и надо было сразу делать для КолвоСубконто от 0 до 3)

    Только не знаю (не сталкивался и не проверял) может ли быть, например, на втором субконто только обороты, а на третьем как обычно
     
  13. KiR

    KiR НЕ шибка опытный програмер)

    Репутация:
    0
    Регистрация:
    11 сен 2007
    Сообщения:
    1.581
    Симпатии:
    0
    Могут конечно. вот у мя такая же шняга на 51м) офигивал когда с обороткой эксперементировал. в любом случае спасибо большое! буду ваять
     
  14. vitfil

    vitfil IT-интегратор

    Репутация:
    0
    Регистрация:
    2 апр 2004
    Сообщения:
    2.062
    Симпатии:
    0
    Я таки вам расскажу на примере!
    51-й счет (расчетный счет)
    Субконто 1 - Банковский счет
    Субконто 2 (об) - Вид движения денежных средств.
    Если по второму субконто убрать "только обороты", имеем следующую картину:
    Поступления:
    Поступление от клиентов,
    Поступление за конвертацию,
    Обязательная продажа валюты...
    Списания:
    Хознужды,
    Оплата поставщикам...

    Сальдо закрываться не будет. А налитика по приходам и расходам крайне необходима, т.е. важно видеть, в разрезе каких статей были движения денежных средств.
     
  15. Hryv

    Hryv Гость

    Репутация:
    0
    vitfil, спасибо за наглядный пример - полезно будет знать


    Незачто
    Усеха :(
     
Загрузка...

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