Перейти к содержимому


Услуги программиста 1С
Профессиональные программисты 1С.
Весь комплекс услуг сопровождения 1С.

Курсы 1С
Бухгалтерам, менеджерам
и программистам.
Бесплатно!
Живое индивидуальное обучение по 1С.

Помогите найти ошибку!


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 6

#1   Бестия

Бестия

      Сержант

    • Пользователи
    • Pip
    • Сообщений: 28
    • Регистрация: 04-March 09
    • Откуда: , ,

Отправлено 11 November 2010 - 12:14

Процедура Сформировать()
ИтДт = СоздатьОбъект("БухгалтерскиеИтоги");
Таб = СоздатьОбъект("Таблица");
Таб.ИсходнаяТаблица("Справка");
Таб.ВывестиСекцию("Шапка");
// ========== ТЗ дебиторов ========================
ТЗ = СоздатьОбъект("ИндексированнаяТаблица");
ТЗ2= СоздатьОбъект("ИндексированнаяТаблица");
ТЗ.НоваяКолонка("Контрагент");
ТЗ.НоваяКолонка("Договор");//,"Документ.Договор"
ТЗ.НоваяКолонка("Счет");//"Строка",4
ТЗ.НоваяКолонка("ВидДоговора");
ТЗ.НоваяКолонка("Дата");
ТЗ.НоваяКолонка("СКД"); //"Число",15,2
ТЗ.НоваяКолонка("СКК"); //, "Число",15,2
ТЗ.НоваяКолонка("Документ");

БВ=СоздатьОбъект("ТаблицаЗначений");
БВ.НоваяКолонка("НомерДок");
БВ.НоваяКолонка("ДатаДок");
БВ.НоваяКолонка("Договор");
БВ.НоваяКолонка("Объект");
//Если глПроверкаИнтервалаОтчета(,ДатаКон) = 0 Тогда
// Возврат;
//КонецЕсли;

ИтДт.ВключатьСубсчета(0);

СчетСубк = ("6852;6854;361;631;371;3772");
//Все вышеуказанные счета имеют два вида субконто
//1. Субконто = Контрагенты
//2. Субконто = Заказы - договор
Сч[1]="6852";
Сч[2]="6854";
Сч[3]="361";
Сч[4]="631";
Сч[5]="371";
Сч[6]="3772";

глУстПропись(Гривня);
Д=СоздатьОбъект("Документ");
// == Заполнение по счетам 361;3711;3772 ==========
Для Счета=1 По 6 Цикл
ИтДт.ИспользоватьСубконто(ВидыСубконто.Контрагенты,,1);
ИтДт.ИспользоватьСубконто(ВидыСубконто.Заказы,,1);

Если ИтДт.ВыполнитьЗапрос('01.12.06',ДатаКон,Сч[Счета]) = 0 Тогда
Возврат;
КонецЕсли;

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

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

ТЗ.НоваяСтрока();
ТЗ.Контрагент = ИтДт.Субконто(1);
ТЗ.Договор = ИтДт.Субконто(2);

ТЗ.Счет = СокрЛП(ИтДт.Счет);
Если ИтДт.Субконто(2).вид()="Договор" Тогда
Если Счета=2 Тогда
Д=ИтДт.Субконто(2).ТекущийДокумент();
ВОТ ГДЕ ТО ТУТ если Д.ВыбратьПодчиненныеДокументы(,,Д.ТекущийДокумент())=1 Тогда
Пока д.ПолучитьДокумент()=1 Цикл

Если д.Вид()="БанковскаяВыписка" Тогда
ТЗ.Дата=д.ДатаДок;
КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЕсли;
ТЗ.ВидДоговора = ИтДт.Субконто(2).ВидДоговора;
иначе
ТЗ.ВидДоговора = ИтДт.Субконто(2);
конецесли;

ТЗ.СКД = ИтДт.СКДРС();
ТЗ.СКК = ИтДт.СККРС();

//Если (Счета=1) или (Счета=4) или (Счета=5) или (Счета=6) Тогда
// ТЗ.Дата=ИтДт.Субконто(2).ДатаДок;

//Иначеесли Счета=2 Тогда

// ИтДт.ВыполнитьЗапрос(,,"6854","3774");
//Сообщить(ИтДт.Операция.Документ.ТекущийДокумент());

//Иначе

//КонецЕсли;
КонецЦикла;
КонецЦикла;
//КонецЕсли;

КонецЦикла;
КонецЦикла;
//БВ.ВыбратьСтроку();
ТЗ.Свернуть("Контрагент,Договор,Счет,ВидДоговора,Дата","СКД,СКК");

ТЗ.ВыбратьСтроку();
ТЗ.Сортировать("Контрагент,Договор,Счет,ВидДоговора,Дата");
ТЗ.Группировать("Контрагент:Контрагент","Договор,Дата,Счет,ВидДоговора",1);
ТЗ.ВыбратьСтроки();
Пока ТЗ.ПолучитьСтроку() = 1 Цикл
ТЗ.тзПотомки.Выгрузить(ТЗ2);
Таб.ВывестиСекцию("Группа");

ТЗ2.ВыбратьСтроки();
Пока ТЗ2.ПолучитьСтроку()=1 Цикл
Таб.ВывестиСекцию("Строка");
КонецЦикла;

КонецЦикла;
Таб.ВывестиСекцию("Подвал");
Таб.Показать();
конецпроцедуры

Ошибка
если Д.ВыбратьПодчиненныеДокументы(,,Д.ТекущийДокумент())=1 Тогда
Объект не может быть перепозиционирован!

Может кто то знает, как мне по счету 6854 найти операцию (в моем случае это банковская выписка, которая подчиняеется договору ) и соответсвенно получить дату первой БВ внезависимости от количества БВ. Просто дату первой и записать её в ТЗ. Спасибки.

  • 0

#2   pak

pak

      Генерал-майор

    • Модераторы
    • Сообщений: 340
    • Регистрация: 02-February 09
    • Откуда:Солнечный Крым

Отправлено 11 November 2010 - 12:25

Quote (Бестия)
Ошибка если Д.ВыбратьПодчиненныеДокументы(,,Д.ТекущийДокумент())=1 Тогда Объект не может быть перепозиционирован!

В суть задачи не вникал но подчиненный док можно найти так:

Code
[b]Д1[/b]=СоздатьОбъект("Документ");
[b]Д1[/b].ВыбратьПодчиненныеДокументы(,,Д.ТекущийДокумент())
здесь цикл по подчиненным документам
ели [b]Д1[/b].Вид()="ТО что надо" тогда
        прервать
конесли
концикла
// Д1 это ваш подч документ делайте с ним что хотите

  • 0

#3   Бестия

Бестия

      Сержант

    • Пользователи
    • Pip
    • Сообщений: 28
    • Регистрация: 04-March 09
    • Откуда: , ,

Отправлено 11 November 2010 - 12:52

Что то не получается, та же самая ошибка:
Если ИтДт.Субконто(2).вид()="Договор" Тогда
Если Счета=2 Тогда
Д=СоздатьОбъект("Документ");
Д=ИтДт.Субконто(2).ТекущийДокумент();
если Д.ВыбратьПодчиненныеДокументы(,,Д.ТекущийДокумент())=1 Тогда
Пока д.ПолучитьДокумент()=1 Цикл

Если д.Вид()="БанковскаяВыписка" Тогда
д.ВыбратьДокументы();
Пока д.ПолучитьДокумент() = 1 Цикл
ТЗ.Дата=д.ДатаДок;
КонецЦикла;

КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЕсли;
конецесли;

если Д.ВыбратьПодчиненныеДокументы(,,Д.ТекущийДокумент())=1 Тогда
Объект не может быть перепозиционирован!

Добавлено (11.11.2010, 12:47)
---------------------------------------------

Quote (plus)
правильно пишет ошибку
вы пытаетесь перепозиционировать объект
необходимо создать новый объект

Сейчас попробую

Добавлено (11.11.2010, 12:52)
---------------------------------------------
Если ИтДт.Субконто(2).вид()="Договор" Тогда
Если Счета=2 Тогда

если Д.ВыбратьПодчиненныеДокументы(,,ИтДт.Субконто(2).ТекущийДокумент())=1 Тогда
Пока д.ПолучитьДокумент()=1 Цикл

Если д.Вид()="БанковскаяВыписка" Тогда
д.ВыбратьДокументы();
Пока д.ПолучитьДокумент() = 1 Цикл
ТЗ.Дата=д.ДатаДок;
КонецЦикла;

КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЕсли;
ТЗ.ВидДоговора = ИтДт.Субконто(2).ВидДоговора;
иначе
конецесли;

Чет я вообще зациклилась, обработка так долго обрабатывается (на экране не показывается вообще), может цикл по банковской выписке не нужен?

Ну теперь с позиционированием все норм, проблема с временем обработки документов, период с 01.12.06 по сегодняшний день, + проблема в том, что один договор имеет около 100 подчиненных БВ. Как же мне теперь взять дату только первой БВ которая создает дебеторскую задолженность по 6854?

  • 0

#4   Бестия

Бестия

      Сержант

    • Пользователи
    • Pip
    • Сообщений: 28
    • Регистрация: 04-March 09
    • Откуда: , ,

Отправлено 12 November 2010 - 11:16

Подскажите пожалуйста, а как теперь найти список всех БВ, которые подчиняются одному ИтДт.Субконто(2 ), +вытащить дату и сумму оплаты. Может как то в тз?

Если (ИтДт.Субконто(2).вид()="Договор") или (ИтДт.Субконто(2).вид()="ДоговораИО") Тогда
Если (Счета=2) Тогда
Если ИтДт.ДО()> ИтДт.КО() Тогда

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

в.ВыбратьСтроки();
Пока в.ПолучитьСтроку() = 1 Цикл
тзбв.Сумма = в.Сумма;
КонецЦикла;



КонецЕсли;
КонецЦикла;
КонецЕсли;
КонецЕсли;
КонецЕсли;
КонецЕсли;

  • 0

#5   Бестия

Бестия

      Сержант

    • Пользователи
    • Pip
    • Сообщений: 28
    • Регистрация: 04-March 09
    • Откуда: , ,

Отправлено 12 November 2010 - 11:39

Каким образом? т.е. как теперь в БВ получить проводки?
  • 0

#6   Бестия

Бестия

      Сержант

    • Пользователи
    • Pip
    • Сообщений: 28
    • Регистрация: 04-March 09
    • Откуда: , ,

Отправлено 12 November 2010 - 12:05

а почему Сумма=ИтДт.ДО()-ИтДт.КО() ;
?

Попробовала, теперь пишет
Если (ИтДт.Субконто().вид()="Договор") или (ИтДт.Субконто().вид()="ДоговораИО") Тогда
Данная операция допустима только в режиме запроса по аналитике !

тут исправила

  • 0

#7   Бестия

Бестия

      Сержант

    • Пользователи
    • Pip
    • Сообщений: 28
    • Регистрация: 04-March 09
    • Откуда: , ,

Отправлено 12 November 2010 - 12:30

plus, Спасибки

Если ИтДт.ВыполнитьЗапрос('01.12.06',ДатаКон,Сч[Счета],,,,"проводка") = 0 Тогда
Значение индексного выражения находится за границами массива
КАК ЭТО ИСПРАВИТЬ?
исправила

  • 0


Обратно в Программирование и конфигурирование 1С Предприятия 7.7

Похожие темы

  Название темы Автор Статистика Последнее сообщение



Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных