Остатки по счетам

Тема в разделе "1C и всё что с ней связано", создана пользователем ge4r, 26 авг 2009.

  1. ge4r

    ge4r Гость

    задача:
    есть 3 счета 012.1 , 012.2 , 10.1
    во всех трех ведется учет материалов, их места хранения,при чем кол-во определенного наименования по 10.1му счету должно быть равно сумме кол-в по 12.1 и 12.2
    нужно сделать отчет,что бы таблица имела вид
    Место хранения | 012.1 | 012.2 | 10.1
    Наименование тут кол-ва

    как это лучше делать? бух итогами или ВыбратьОперацииСПроводками?

    Код (Text):
    Опер.ВыбратьОперацииСПроводками (ВыбДата,ВыбДата,"10.1",,,);
    Пока Опер.ПолучитьОперацию() = 1 Цикл
    Опер.ВыбратьПроводки();
    Пока Опер.ПолучитьПроводку() = 1 Цикл
    С1 = Опер.Субконто(1);
    С2 = Опер.Субконто(3);
    Таб.ВывестиСекцию("Строка");
    КонецЦикла;
    КонецЦикла;
    пишу так,у меня вылетает
    С1 = Опер.Субконто(1);
    {C:\DOCUMENTS AND SETTINGS\ADMIN.ADMIN-F279AA595\DESKTOP\ОТЧЕТСВГК.ERT(17)}: Поле агрегатного объекта не обнаружено (Субконто)
    хотя с 12ым счетом не вылетает эта ошибка...
     
  2. vbs

    vbs Well-Known Member

    Регистрация:
    18 фев 2007
    Сообщения:
    1.708
    Симпатии:
    3
    С1 = Опер.Д*цензура*.Субконто(1);
    или
    С1 = Опер.Кредит.Субконто(1);
     
  3. ge4r

    ge4r Гость

    понял... а как в данный цикл еще добавить получение кол-ва? Опер.Количество? в структуре проводок если не ошибаюсь оно,но опер.количество выглядит как то дико
     
  4. vbs

    vbs Well-Known Member

    Регистрация:
    18 фев 2007
    Сообщения:
    1.708
    Симпатии:
    3
    Какая разница, как выглядит, лишь бы работало
     
  5. ge4r

    ge4r Гость

    это да...но порой получается работающий,но ересевидный код...
     
  6. ge4r

    ge4r Гость

    помогите найти косяк...добавил в код отбор по материалу и по месту хран-ия , + флаг "по остаткам"... но почему то когда не стоит галочка по остаткам вылетает пустая таблица...

    Код (Text):
    Процедура Сформировать()
    Перем Таб,ТЗ,БухИтог;
    Таб=СоздатьОбъект("Таблица");
    Таб.ИсходнаяТаблица("Таблица");
    Таб.ВывестиСекцию("Шапка");
    ТЗ=СоздатьОбъект("ТаблицаЗначений");
    ТЗ.НоваяКолонка("Материал");
    ТЗ.НоваяКолонка("МестоХранения");
    ТЗ.НоваяКолонка("Кво0121");
    ТЗ.НоваяКолонка("Кво0122");
    ТЗ.НоваяКолонка("Кво101");
    Ит=СоздатьОбъект("БухгалтерскиеИтоги");
    Ит.ИспользоватьСубконто(ВидыСубконто.МестаХранения);
    Ит.ИспользоватьСубконто(ВидыСубконто.Материалы);
    Ит.ВыполнитьЗапрос(ВыбДата,ВыбДата,"012.1,012.2,10.1",,,"К");

    Ит.ВыбратьСубконто(ВидыСубконто.МестаХранения);
    Пока Ит.ПолучитьСубконто(ВидыСубконто.МестаХранения)=1 Цикл
    МестоХранения=Ит.Субконто(ВидыСубконто.МестаХранения);

    Ит.ВыбратьСубконто(ВидыСубконто.Материалы);
    Пока Ит.ПолучитьСубконто(ВидыСубконто.Материалы)=1 Цикл
    Материал=Ит.Субконто(ВидыСубконто.Материалы);

    ТЗ.НоваяСтрока();
    ТЗ.МестоХранения=МестоХранения;
    ТЗ.Материал=Материал;

    Ит.ВыбратьСчета();
    Пока Ит.ПолучитьСчет()=1 Цикл
    Кво=Ит.ДО(3); // Количественный д*цензура*овый оборот по счету
    Если Ит.Счет.Код="012.1" Тогда
    ТЗ.Кво0121=Кво;
    ИначеЕсли Ит.Счет.Код="012.2" Тогда
    ТЗ.Кво0122=Кво;
    ИначеЕсли Ит.Счет.Код="10.1" Тогда
    ТЗ.Кво101=Кво;
    Иначе
    Сообщить("Не опознан счет: "+Ит.Счет.Код);
    КонецЕсли;
    КонецЦикла;
    КонецЦикла;
    КонецЦикла;


    Если ВыбМесто.Выбран()= 1 Тогда
    С1 = ВыбМесто;
    Таб.ВывестиСекцию ("Заголовок");
    ТЗ.ВыбратьСтроки();
    Пока ТЗ.ПолучитьСтроку()=1 Цикл
    Если ТЗ.МестоХранения = С1 Тогда
    Если ВыбОстатки = 1 Тогда
    Если (ТЗ.Кво0121+ ТЗ.Кво0122 <>0) и (ТЗ.Кво101<>0) Тогда
    С2 = ТЗ.Материал;
    Кво0121 = ТЗ.Кво0121;  
    Кво0122 = ТЗ.Кво0122;
    Кво101 = ТЗ.Кво101;
    Таб.ВывестиСекцию("Строка");
    Иначе
    С2 = ТЗ.Материал;
    Кво0121 = ТЗ.Кво0121;  
    Кво0122 = ТЗ.Кво0122;
    Кво101 = ТЗ.Кво101;
    Таб.ВывестиСекцию("Строка");
    КонецЕсли;
    КонецЕсли;
    КонецЕсли;
    КонецЦикла;
    КонецЕсли;    

    Если ВыбМатериал.Выбран()= 1 Тогда
    С1 = ВыбМатериал;
    Таб.ВывестиСекцию ("Заголовок");
    ТЗ.ВыбратьСтроки();
    Пока ТЗ.ПолучитьСтроку()=1 Цикл
    Если ТЗ.Материал = С1 Тогда
    Если ВыбОстатки = 1 Тогда
    Если (ТЗ.Кво0121+ ТЗ.Кво0122 <>0) и (ТЗ.Кво101<>0) Тогда
    С2 = ТЗ.МестоХранения;
    Кво0121 = ТЗ.Кво0121;  
    Кво0122 = ТЗ.Кво0122;
    Кво101 = ТЗ.Кво101;
    Таб.ВывестиСекцию("Строка");
    КонецЕсли;
    Иначе

    С2 = ТЗ.МестоХранения;
    Кво0121 = ТЗ.Кво0121;  
    Кво0122 = ТЗ.Кво0122;
    Кво101 = ТЗ.Кво101;
    Таб.ВывестиСекцию("Строка");
    КонецЕсли;
    КонецЕсли;
    КонецЦикла;
    КонецЕсли;
    //  Таб.ВывестиСекцию("Подвал");
    Таб.Показать();


    Таб.Опции(0,0,0,0);
    Таб.Показать();
    КонецПроцедуры
     
  7. unknown181538

    unknown181538 НеГуру
    1C Team

    Регистрация:
    28 дек 2008
    Сообщения:
    1.418
    Симпатии:
    0
    Юзайте отладчик. Я так понимаю, если не стоит "По остаткам" выводится только если выбран материал?
    По коду:
    - Лучше бы делать отбор прямо методом "ИспользоватьСубконто" с параметром "отбирать" и ускорит, и уменьшит код.
    - " Если (ТЗ.Кво0121+ ТЗ.Кво0122 <>0) и (ТЗ.Кво101<>0) Тогда" - перенести в точку заполнения таблицы.
    - Много повторяющегося текста.
     
Загрузка...

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