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


задать условие правильно


Сообщений в теме: 38

#1 zhannett

    Участник


  • 208 сообщений

Отправлено 15 февраля 2012 - 09:02

Добрый день подскажите как вот в этом кусочке кода правильно задать условие. если сумма Сумма01ПРНовая =Сумма02ПРпоРБ, то износ не начислять по ПР:

Запрос.Текст = СтрЗаменить(Запрос.Текст, "Организация = &Организация","Организация = &Организация И Субконто1 В (&Объект)");
  Запрос.Текст = СтрЗаменить(Запрос.Текст, "Организация = &Организация И Субконто1 В (&Объект)) КАК ПервоначальныеСведенияОС", "Организация = &Организация И ОсновноеСредство В (&Объект)) КАК ПервоначальныеСведенияОС");
  Запрос.Текст = СтрЗаменить(Запрос.Текст, "Организация = &Организация И Субконто1 В (&Объект)) КАК ПараметрыАмортизацииОС", "Организация = &Организация И ОсновноеСредство В (&Объект)) КАК ПараметрыАмортизацииОС");
КонецЕсли;

Запрос.УстановитьПараметр("НачДата",    мНачДата);
Если ОбъектЕсть Тогда
  мКонДата = Новый Граница(СтруктураШапкиДокумента.Дата, ВидГраницы.Исключая);
КонецЕсли;
Запрос.УстановитьПараметр("КонДата",    мКонДата);
Запрос.УстановитьПараметр("Организация",СтруктураШапкиДокумента.Организация);
Запрос.УстановитьПараметр("ВидУчетаНУ",   Перечисления.ВидыУчетаПоПБУ18.НУ);
Запрос.УстановитьПараметр("ВидУчетаПР", Перечисления.ВидыУчетаПоПБУ18.ПР);
Запрос.УстановитьПараметр("Счет01НУ",   СчетУчетаНУ);
Запрос.УстановитьПараметр("Счет0109НУ",   ПланыСчетов.Налоговый.ВыбытиеОС);
Запрос.УстановитьПараметр("Счет01БУ",   СчетУчетаБУ);
Запрос.УстановитьПараметр("Счет0109БУ",   ПланыСчетов.Хозрасчетный.ВыбытиеОС);
Запрос.УстановитьПараметр("Счет02НУ",   СчетАмортизацииНУ);
Запрос.УстановитьПараметр("Объект",   Объект);
РезультатЗапроса = Запрос.Выполнить();
ТаблицаОС = РезультатЗапроса.Выгрузить();
ТаблицаОС.Свернуть("Субконто1", "Сумма01БУ, Сумма01НУ, Сумма01ПР, Сумма01ПРпоРБ, Сумма02,Сумма01ПРНовая,Сумма02ПРпоРБ");
мКэшСчетов = Новый Соответствие;
Для Каждого СтрокаТаблицы Из ТаблицаЗатрат Цикл
 
  СтрокаТаблицыОС = ТаблицаОС.Найти(СтрокаТаблицы.ОбъектУчета,"Субконто1");
 
  Если СтрокаТаблицыОС = Неопределено Тогда
   Продолжить;
  КонецЕсли;
 
  // если учет постоянных разниц в оценке ОС для амортизации не ведется (запись в регистре сведений пустая)
  // то рассматриваются данные о постоянных разницах в оценке ОС
  Сумма01ПР = ?(СтрокаТаблицыОС.Сумма01ПР = 0, СтрокаТаблицыОС.Сумма01ПРпоРБ, СтрокаТаблицыОС.Сумма01ПР);
 
  Если СтрокаТаблицы.Сумма = СтрокаТаблицы.СУммаНУ И Сумма01ПР = 0 Тогда
   Продолжить;
  КонецЕсли;
 
  // Амортизация по НУ уже была начислена ранее она равна амортизации по БУ
  Если СтрокаТаблицыОС.Сумма02 <> 0 Тогда
   Продолжить;
  КонецЕсли;
 
  Сумма01ВР = СтрокаТаблицыОС.Сумма01БУ - СтрокаТаблицыОС.Сумма01НУ - Сумма01ПР;
  Если СтрокаТаблицыОС.Сумма01НУ = 0 И Сумма01ПР = 0 И Сумма01ВР = 0 Тогда
   Продолжить;
  КонецЕсли;
 
  СчетАмортизации = СтрокаТаблицы.Счет02;
  СуммаПР = 0;
  СуммаВР = 0;
 
  СтрокаТаблицаАмортизации = ТаблицаАмортизации.Найти(СтрокаТаблицы.ОбъектУчета,"ОбъектУчета");
  Если  СтрокаТаблицаАмортизации = Неопределено Тогда
   Продолжить;
  КонецЕсли;
 
 
 
  // Особый случай: в БУ амортизация не начисляется или приостановлена, временные разницы
  // равны сумме амортизации по НУ
  Если СтрокаТаблицы.Сумма = 0 И СтрокаТаблицы.СуммаНУ <> 0 Тогда
   СуммаПР = 0;
 
  Иначе
 
   // постоянная разница в оценке амортизации, возникшая вследствие постоянной разницы в оценке ОС
   // амортизация по ПР, начисленная по способу амортизации БУ
   СуммаПР = Окр((?(ЗначениеЗаполнено(СтрокаТаблицыОС.Сумма01БУ), СтрокаТаблицы.Сумма / СтрокаТаблицыОС.Сумма01БУ, 0)) * Сумма01ПР, 2);
 
   СтрокаТаблицаАмортизации.СуммаПР = СуммаПР;
  КонецЕсли; 
КонецЦикла;

Сообщение отредактировал alexburn: 15 февраля 2012 - 09:08


#2 zhannett

    Участник


  • 208 сообщений

Отправлено 15 февраля 2012 - 11:39

просто когда я вставляю данное условие у меня ничего не срабатывает

#3 zhannett

    Участник


  • 208 сообщений

Отправлено 17 февраля 2012 - 07:56

может я как то не корректно задала вопрос,что у меня не получается?раз никто не откликается((

#4 zhannett

    Участник


  • 208 сообщений

Отправлено 17 февраля 2012 - 08:21

наверное повторюсь...по предприятию есть оборудования,которые идут по лизингу..я создала документ выкупа сейчас кину код..в нем нужно чтобы стоимость налогового и буха в регистрах шла одинаковой,но при этом амортизация должна идти например с 1000 только 200 рублей.....при этом все остальное идет как постоянная разница....и в оборотке потом получается по ПР учету 01 и 02 счет показываются..нужно сделать так чтобы при одинаковой сумме 01 и 02 счета не начислять ПР износа...для этого я поменяла документ Амортизация ОС..добавила в запрос разницу по 02счету и задаю условие,но в итоге ничего не происходит..помогите пожалуйста что не так:
код выкупа..
Процедура ПровестиПоРегиструСведенийПервоначальнаяСтоимостьБухгалтерскийУчет()
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ВыкупЛизинговогоИмуществаОсновныеСредства.ОсновноеСредство,
| ПервоначальныеСведенияОСБухгалтерскийУчетСрезПоследних.Организация,
| ПервоначальныеСведенияОСБухгалтерскийУчетСрезПоследних.ИнвентарныйНомер,
| ПервоначальныеСведенияОСБухгалтерскийУчетСрезПоследних.СпособПоступления,
| ПервоначальныеСведенияОСБухгалтерскийУчетСрезПоследних.СпособНачисленияАмортизации,
| ПервоначальныеСведенияОСБухгалтерскийУчетСрезПоследних.ПервоначальнаяСтоимость,
| ПервоначальныеСведенияОСБухгалтерскийУчетСрезПоследних.ПараметрВыработки,
| ВыкупЛизинговогоИмуществаОсновныеСредства.Сумма
|ИЗ
| Документ.ВыкупЛизинговогоИмущества.ОсновныеСредства КАК ВыкупЛизинговогоИмуществаОсновныеСредства
|  ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПервоначальныеСведенияОСБухгалтерскийУчет.СрезПоследних КАК ПервоначальныеСведенияОСБухгалтерскийУчетСрезПоследних
|  ПО ВыкупЛизинговогоИмуществаОсновныеСредства.ОсновноеСредство = ПервоначальныеСведенияОСБухгалтерскийУчетСрезПоследних.ОсновноеСредство
|ГДЕ
| ВыкупЛизинговогоИмуществаОсновныеСредства.Ссылка = &Ссылка";
Запрос.УстановитьПараметр("ВыбДата", Дата);
Запрос.УстановитьПараметр("Ссылка", Ссылка);
Запрос.УстановитьПараметр("СписокОсновныхСредств", ОсновныеСредства.ВыгрузитьКолонку("ОсновноеСредство"));
Выборка = Запрос.Выполнить().Выбрать();
Пока Выборка.Следующий() цикл
  Движение = Движения.ПервоначальныеСведенияОСБухгалтерскийУчет.Добавить();
  Движение.Период = Дата;
  Движение.ОсновноеСредство = Выборка.ОсновноеСредство;
  Движение.Организация = Организация;
  Движение.ИнвентарныйНомер = выборка.ИнвентарныйНомер;
  Движение.СпособПоступления = Выборка.СпособПоступления;
  Движение.СпособНачисленияАмортизации = Выборка.СпособНачисленияАмортизации;
  Движение.ПервоначальнаяСтоимость = Выборка.Сумма;
  Движение.ПараметрВыработки = Выборка.ПараметрВыработки;
КонецЦикла;
КонецПроцедуры
ПРоцедура ПровестиПоРегиструПараметрыАмортизацииОСНалоговыйУчет()
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ВыкупЛизинговогоИмуществаОсновныеСредства.ОсновноеСредство,
| ВыкупЛизинговогоИмуществаОсновныеСредства.Сумма,
| ПараметрыАмортизацииОСНалоговыйУчетСрезПоследних.СрокПолезногоИспользования КАК СрокПолезногоИспользования,
| ПараметрыАмортизацииОСНалоговыйУчетСрезПоследних.ПРДляВычисленияАмортизации
|ИЗ
| Документ.ВыкупЛизинговогоИмущества.ОсновныеСредства КАК ВыкупЛизинговогоИмуществаОсновныеСредства
|  ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПараметрыАмортизацииОСНалоговыйУчет.СрезПоследних КАК ПараметрыАмортизацииОСНалоговыйУчетСрезПоследних
|  ПО ВыкупЛизинговогоИмуществаОсновныеСредства.ОсновноеСредство = ПараметрыАмортизацииОСНалоговыйУчетСрезПоследних.ОсновноеСредство
|ГДЕ
| ВыкупЛизинговогоИмуществаОсновныеСредства.Ссылка = &Ссылка";
Запрос.УстановитьПараметр("Ссылка", Ссылка);
Запрос.УстановитьПараметр("ВыбДата", Дата);
Запрос.УстановитьПараметр("Организация", Организация);
Выборка = Запрос.Выполнить().Выбрать();
Пока выборка.Следующий() цикл
  Движение = Движения.ПараметрыАмортизацииОСНалоговыйУчет.Добавить();
  Движение.Период = Дата;
  Движение.Организация = Организация;
  Движение.ОсновноеСредство = Выборка.ОсновноеСредство;
  Движение.СрокПолезногоИспользования = Выборка.СрокПолезногоИспользования;
  Движение.ПРДляВычисленияАмортизации = Выборка.Сумма;
КонецЦикла;
КонецПроцедуры
Процедура ОбработкаПроведения(Отказ, РежимПроведения)
Если ОтражатьВБухгалтерскомУчете тогда
  ПровестиПоБухгалтерскомуУчету();
  ПровестиПоРегиструСведенийПервоначальнаяСтоимостьБухгалтерскийУчет();
  ПровестиПоРегиструПараметрыАмортизацииОСБУ();
  ПровестиПоРегиструСведенийМестонахождениеОСБУ();
  ПровестиПоРегиструСчетуБУОС();
  ПровестиПоРегиструПараметрыАмортизацииОСНалоговыйУчет();
КонецЕсли;
КонецПроцедуры
это маленькие кусочки для понимания..а вот я изменила амортизацию
Процедура РасчетРазницПоАмортизации(СтруктураШапкиДокумента, Актив, Объект, ТаблицаАмортизации, ТабЗатрат, ТаблицаАмортизацииБУ) Экспорт
ТаблицаАмортизации.Колонки.Добавить("СуммаПР", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15,2)));
ТаблицаАмортизации.Колонки.Добавить("СуммаБУ", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15,2)));
ТаблицаАмортизации.Колонки.Добавить("СуммаВР", Новый ОписаниеТипов("Число", Новый КвалификаторыЧисла(15,2)));
Для Каждого СтрокаТабАмортизацииБУ Из ТаблицаАмортизацииБУ Цикл
  СтрокаТабАмортизации = ТаблицаАмортизации.Найти(СтрокаТабАмортизацииБУ.ОбъектУчета, "ОбъектУчета");
  Если СтрокаТабАмортизации = Неопределено Тогда
   СтрокаТабАмортизации			 = ТаблицаАмортизации.Добавить();
   СтрокаТабАмортизации.ОбъектУчета = СтрокаТабАмортизацииБУ.ОбъектУчета;
   СтрокаТабАмортизации.НаправлениеАмортизации = СтрокаТабАмортизацииБУ.НаправлениеАмортизации;
   СтрокаТабАмортизации.ИмяСубконто	   = СтрокаТабАмортизацииБУ.ИмяСубконто;
   СтрокаТабАмортизации.СчетАмортизации   = СтрокаТабАмортизацииБУ.СчетАмортизации;
   СтрокаТабАмортизации.СчетАмортизацииНУ = СтрокаТабАмортизацииБУ.СчетАмортизацииНУ;
   СтрокаТабАмортизации.СуммаБУ	 = СтрокаТабАмортизацииБУ.Сумма;
   СтрокаТабАмортизации.СуммаВР	 = СтрокаТабАмортизацииБУ.Сумма;
  Иначе
   СтрокаТабАмортизации.СуммаБУ	 = СтрокаТабАмортизацииБУ.Сумма;
  КонецЕсли;
КонецЦикла;
Если ТаблицаАмортизации = Неопределено Тогда
  Возврат;
КонецЕсли;
Если Актив = "ОС" Тогда
  Массив = Новый Массив;
  Массив.Добавить(ПланыСчетов.Хозрасчетный.ОсновныеСредства);
  Массив.Добавить(ПланыСчетов.Хозрасчетный.ДоходныеВложенияВ_МЦ);
  СчетУчетаБУ	   = Массив;
  Массив = Новый Массив;
  Массив.Добавить(ПланыСчетов.Налоговый.ОсновныеСредства);
  Массив.Добавить(ПланыСчетов.Налоговый.ДоходныеВложенияВ_МЦ);
  СчетУчетаНУ	   =  Массив;
  СчетАмортизацииБУ = ПланыСчетов.Хозрасчетный.АмортизацияОсновныхСредств;
  СчетАмортизацииНУ = ПланыСчетов.Налоговый.АмортизацияОсновныхСредств;
ИначеЕсли Актив = "НМА" Тогда
  СчетУчетаБУ	   = ПланыСчетов.Хозрасчетный.НематериальныеАктивы;
  СчетУчетаНУ	   = ПланыСчетов.Налоговый.НематериальныеАктивы;
  Массив = Новый Массив;
  Массив.Добавить(ПланыСчетов.Хозрасчетный.АмортизацияНематериальныхАктивов);
  Массив.Добавить(ПланыСчетов.Хозрасчетный.НематериальныеАктивы);
  СчетАмортизацииБУ = Массив;
  Массив = Новый Массив;
  Массив.Добавить(ПланыСчетов.Налоговый.АмортизацияНематериальныхАктивов);
  Массив.Добавить(ПланыСчетов.Налоговый.НематериальныеАктивы);
  СчетАмортизацииНУ = Массив;
Иначе
  Возврат;
КонецЕсли;
Если НЕ ЗначениеЗаполнено(Объект) Тогда
  ОбъектЕсть = Ложь;
Иначе
  ОбъектЕсть = Истина;
КонецЕсли;
мНачДата    = НачалоМесяца(СтруктураШапкиДокумента.Дата);
мКонДата    = КонецМесяца (СтруктураШапкиДокумента.Дата);
Если ТабЗатрат = Неопределено Тогда
  ТаблицаЗатрат = Новый ТаблицаЗначений;
  ТаблицаЗатрат.Колонки.Добавить("ОбъектУчета");
  ТаблицаЗатрат.Колонки.Добавить("Сумма");
Иначе
  ТаблицаЗатрат = ТабЗатрат;
КонецЕсли;
ТаблицаЗатрат.Колонки.Добавить("СуммаНУ");
ТаблицаЗатрат.Колонки.Добавить("Счет02");
мКэшСчетов = Новый Соответствие;
Для Каждого СтрокаАмортизация Из ТаблицаЗатрат Цикл
  СчетНУСоответствующийСчетуБУ = мКэшСчетов[СтрокаАмортизация.СчетАмортизации];
  Если СчетНУСоответствующийСчетуБУ = Неопределено Тогда
   СчетНУСоответствующийСчетуБУ = БухгалтерскийУчет.ПреобразоватьСчетаБУвСчетНУ(Новый Структура("СчетБУ", СтрокаАмортизация.СчетАмортизации), Ложь, СтруктураШапкиДокумента.Дата);
   мКэшСчетов.Вставить(СтрокаАмортизация.СчетАмортизации, СчетНУСоответствующийСчетуБУ);
  КонецЕсли;
  СтрокаАмортизация.Счет02 = СчетНУСоответствующийСчетуБУ;
КонецЦикла;
Для Каждого СтрокаТабЗатрат Из ТаблицаАмортизации Цикл
  СтрокаАмортизация = ТаблицаЗатрат.Добавить();
  СтрокаАмортизация.ОбъектУчета = СтрокаТабЗатрат.ОбъектУчета;
 
  Если Не ЗначениеЗаполнено(СтрокаТабЗатрат.СчетАмортизацииНУ) Тогда
   СчетНУСоответствующийСчетуБУ = мКэшСчетов[СтрокаТабЗатрат.СчетАмортизации];
   Если СчетНУСоответствующийСчетуБУ = Неопределено Тогда
    СчетНУСоответствующийСчетуБУ = БухгалтерскийУчет.ПреобразоватьСчетаБУвСчетНУ(Новый Структура("СчетБУ", СтрокаТабЗатрат.СчетАмортизации), Ложь, СтруктураШапкиДокумента.Дата);
    мКэшСчетов.Вставить(СтрокаТабЗатрат.СчетАмортизации, СчетНУСоответствующийСчетуБУ);
   КонецЕсли;
   СтрокаТабЗатрат.СчетАмортизацииНУ = СчетНУСоответствующийСчетуБУ;
  КонецЕсли;
 
  СтрокаАмортизация.Счет02 = СтрокаТабЗатрат.СчетАмортизацииНУ;
  СтрокаАмортизация.СуммаНУ = СтрокаТабЗатрат.Сумма;
КонецЦикла;
ТаблицаЗатрат.Свернуть("ОбъектУчета,Счет02","Сумма,СуммаНУ");
Запрос = Новый Запрос;
Если Актив = "ОС" Тогда
  Запрос.УстановитьПараметр("ВидСубконто",ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.ОсновныеСредства);
  Запрос.Текст = "ВЫБРАТЬ
				 | НалоговыйОстатки.Субконто1 КАК Субконто1,
				 | 0 КАК Сумма01БУ,
				 | СУММА(НалоговыйОстатки.СуммаОстатокДт) КАК Сумма01НУ,
				 | 0 КАК Сумма01ПР,
				 | 0 КАК Сумма02,
				 | 0 КАК Сумма01ПРпоРБ,
				 | 0 КАК Сумма02ПР
				 |ИЗ
				 | РегистрБухгалтерии.Налоговый.Остатки(
				 |   &КонДата,
				 |   Счет В ИЕРАРХИИ (&Счет01НУ)
				 |    И НЕ Счет = &Счет0109НУ,
				 |   &ВидСубконто,
				 |   Организация = &Организация
				 |    И ВидУчета = &ВидУчетаНУ) КАК НалоговыйОстатки
				 |
				 |СГРУППИРОВАТЬ ПО
				 | НалоговыйОстатки.Субконто1
				 |
				 |ОБЪЕДИНИТЬ ВСЕ
				 |
				 |ВЫБРАТЬ
				 | ПараметрыАмортизацииОСБухгалтерскийУчетСрезПоследних.ОсновноеСредство,
				 | ПараметрыАмортизацииОСБухгалтерскийУчетСрезПоследних.СтоимостьДляВычисленияАмортизации,
				 | 0,
				 | 0,
				 | 0,
				 | 0,
				 | 0
				 |ИЗ
				 | РегистрСведений.ПараметрыАмортизацииОСБухгалтерскийУчет.СрезПоследних(&НачДата, Организация = &Организация) КАК ПараметрыАмортизацииОСБухгалтерскийУчетСрезПоследних
				 |
				 |ОБЪЕДИНИТЬ ВСЕ
				 |
				 |ВЫБРАТЬ
				 | ПараметрыАмортизацииОСНалоговыйУчетСрезПоследних.ОсновноеСредство,
				 | 0,
				 | 0,
				 | ПараметрыАмортизацииОСНалоговыйУчетСрезПоследних.ПРДляВычисленияАмортизации,
				 | 0,
				 | 0,
				 | 0
				 |ИЗ
				 | РегистрСведений.ПараметрыАмортизацииОСНалоговыйУчет.СрезПоследних(&НачДата, Организация = &Организация) КАК ПараметрыАмортизацииОСНалоговыйУчетСрезПоследних
				 |  ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
				 |   ПервоначальныеСведенияОСНалоговыйУчетСрезПоследних.ОсновноеСредство КАК ОсновноеСредство,
				 |   ПервоначальныеСведенияОСНалоговыйУчетСрезПоследних.АмортизацияДо2002 КАК АмортизацияДо2002
				 |  ИЗ
				 |   РегистрСведений.ПервоначальныеСведенияОСНалоговыйУчет.СрезПоследних(&НачДата, Организация = &Организация) КАК ПервоначальныеСведенияОСНалоговыйУчетСрезПоследних) КАК ПРдо2002года
				 |  ПО ПараметрыАмортизацииОСНалоговыйУчетСрезПоследних.ОсновноеСредство = ПРдо2002года.ОсновноеСредство
				 |
				 |ОБЪЕДИНИТЬ ВСЕ
				 |
				 |ВЫБРАТЬ
				 | НалоговыйОбороты.Субконто1,
				 | 0,
				 | 0,
				 | 0,
				 | СУММА(НалоговыйОбороты.СуммаОборотКт),
				 | 0,
				 | 0
				 |ИЗ
				 | РегистрБухгалтерии.Налоговый.Обороты(&НачДата, &КонДата, , Счет В ИЕРАРХИИ (&Счет02НУ), &ВидСубконто, Организация = &Организация, , ) КАК НалоговыйОбороты
				 |
				 |СГРУППИРОВАТЬ ПО
				 | НалоговыйОбороты.Субконто1
				 |
				 |ОБЪЕДИНИТЬ ВСЕ
				 |
				 |ВЫБРАТЬ
				 | НалоговыйОстатки.Субконто1,
				 | 0,
				 | 0,
				 | 0,
				 | 0,
				 | СУММА(НалоговыйОстатки.СуммаОстатокДт - ПРдо2002года.АмортизацияДо2002),
				 | 0
				 |ИЗ
				 | РегистрБухгалтерии.Налоговый.Остатки(
				 |   &КонДата,
				 |   Счет В ИЕРАРХИИ (&Счет01НУ)
				 |    И НЕ Счет = &Счет0109НУ,
				 |   &ВидСубконто,
				 |   Организация = &Организация
				 |    И ВидУчета = &ВидУчетаПр) КАК НалоговыйОстатки
				 |  ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
				 |   ПервоначальныеСведенияОСНалоговыйУчетСрезПоследних.ОсновноеСредство КАК ОсновноеСредство,
				 |   ПервоначальныеСведенияОСНалоговыйУчетСрезПоследних.АмортизацияДо2002 КАК АмортизацияДо2002
				 |  ИЗ
				 |   РегистрСведений.ПервоначальныеСведенияОСНалоговыйУчет.СрезПоследних(&НачДата, Организация = &Организация) КАК ПервоначальныеСведенияОСНалоговыйУчетСрезПоследних) КАК ПРдо2002года
				 |  ПО НалоговыйОстатки.Субконто1 = ПРдо2002года.ОсновноеСредство
				 |
				 |СГРУППИРОВАТЬ ПО
				 | НалоговыйОстатки.Субконто1
				 |
				 |ОБЪЕДИНИТЬ ВСЕ
				 |
				 |ВЫБРАТЬ
				 | ПараметрыАмортизацииОСНалоговыйУчетСрезПоследних.ОсновноеСредство,
				 | 0,
				 | 0,
				 | 0,
				 | 0,
				 | 0,
				 | ПараметрыАмортизацииОСНалоговыйУчетСрезПоследних.ПРДляВычисленияАмортизации
				 |ИЗ
				 | РегистрСведений.ПараметрыАмортизацииОСНалоговыйУчет.СрезПоследних(&НачДата, Организация = &Организация) КАК ПараметрыАмортизацииОСНалоговыйУчетСрезПоследних";
Иначе
  Запрос.УстановитьПараметр("ВидСубконто",ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.НематериальныеАктивы);
  Запрос.Текст = "ВЫБРАТЬ
  | НалоговыйОстатки.Субконто1 КАК Субконто1,
  | 0 КАК Сумма01БУ,
  | СУММА(НалоговыйОстатки.СуммаОстатокДт) КАК Сумма01НУ,
  | 0 КАК Сумма01ПР,
  | 0 КАК Сумма02,
  | 0 КАК Сумма01ПРпоРБ
  |ИЗ
  | РегистрБухгалтерии.Налоговый.Остатки(
  |   &КонДата,
  |   Счет В ИЕРАРХИИ (&Счет01НУ)
  |    И (НЕ Счет = &Счет0109НУ),
  |   &ВидСубконто,
  |   Организация = &Организация
  |    И ВидУчета = &ВидУчетаНУ) КАК НалоговыйОстатки
  |
  |СГРУППИРОВАТЬ ПО
  | НалоговыйОстатки.Субконто1
  |
  |ОБЪЕДИНИТЬ ВСЕ
  |
  |ВЫБРАТЬ
  | НалоговыйОбороты.Субконто1,
  | 0,
  | 0,
  | 0,
  | СУММА(НалоговыйОбороты.СуммаОборотКт),
  | 0
  |ИЗ
  | РегистрБухгалтерии.Налоговый.Обороты(&НачДата, &КонДата, , Счет В ИЕРАРХИИ (&Счет02НУ), &ВидСубконто, Организация = &Организация, , ) КАК НалоговыйОбороты
  |
  |СГРУППИРОВАТЬ ПО
  | НалоговыйОбороты.Субконто1
  |
  |ОБЪЕДИНИТЬ ВСЕ
  |
  |ВЫБРАТЬ
  | НалоговыйОстатки.Субконто1,
  | 0,
  | 0,
  | НалоговыйОстатки.СуммаОстатокДт,
  | 0,
  | НалоговыйОстатки.СуммаОстатокДт
  |ИЗ
  | РегистрБухгалтерии.Налоговый.Остатки(
  |   &КонДата,
  |   Счет В ИЕРАРХИИ (&Счет01НУ)
  |    И (НЕ Счет = &Счет0109НУ),
  |   &ВидСубконто,
  |   Организация = &Организация
  |    И ВидУчета = &ВидУчетаПр) КАК НалоговыйОстатки
  |
  |СГРУППИРОВАТЬ ПО
  | НалоговыйОстатки.Субконто1,
  | НалоговыйОстатки.СуммаОстатокДт,
  | НалоговыйОстатки.СуммаОстатокДт
  |
  |ОБЪЕДИНИТЬ ВСЕ
  |
  |ВЫБРАТЬ
  | ХозрасчетныйОстатки.Субконто1,
  | ХозрасчетныйОстатки.СуммаОстатокДт,
  | 0,
  | 0,
  | 0,
  | 0
  |ИЗ
  | РегистрБухгалтерии.Хозрасчетный.Остатки(
  |   &НачДата,
  |   Счет В ИЕРАРХИИ (&Счет01БУ)
  |    И (НЕ Счет = &Счет0109БУ),
  |   &ВидСубконто,
  |   Организация = &Организация) КАК ХозрасчетныйОстатки"; 
КонецЕсли;

Если ОбъектЕсть  Тогда
  Запрос.Текст = СтрЗаменить(Запрос.Текст, "Организация = &Организация","Организация = &Организация И Субконто1 В (&Объект)");
  Запрос.Текст = СтрЗаменить(Запрос.Текст, "Организация = &Организация И Субконто1 В (&Объект)) КАК ПервоначальныеСведенияОС", "Организация = &Организация И ОсновноеСредство В (&Объект)) КАК ПервоначальныеСведенияОС");
  Запрос.Текст = СтрЗаменить(Запрос.Текст, "Организация = &Организация И Субконто1 В (&Объект)) КАК ПараметрыАмортизацииОС", "Организация = &Организация И ОсновноеСредство В (&Объект)) КАК ПараметрыАмортизацииОС");
КонецЕсли;

Запрос.УстановитьПараметр("НачДата",    мНачДата);
Если ОбъектЕсть Тогда
  мКонДата = Новый Граница(СтруктураШапкиДокумента.Дата, ВидГраницы.Исключая);
КонецЕсли;
Запрос.УстановитьПараметр("КонДата",    мКонДата);
Запрос.УстановитьПараметр("Организация",СтруктураШапкиДокумента.Организация);
Запрос.УстановитьПараметр("ВидУчетаНУ",   Перечисления.ВидыУчетаПоПБУ18.НУ);
Запрос.УстановитьПараметр("ВидУчетаПР", Перечисления.ВидыУчетаПоПБУ18.ПР);
Запрос.УстановитьПараметр("Счет01НУ",   СчетУчетаНУ);
Запрос.УстановитьПараметр("Счет0109НУ",   ПланыСчетов.Налоговый.ВыбытиеОС);
Запрос.УстановитьПараметр("Счет01БУ",   СчетУчетаБУ);
Запрос.УстановитьПараметр("Счет0109БУ",   ПланыСчетов.Хозрасчетный.ВыбытиеОС);
Запрос.УстановитьПараметр("Счет02НУ",   СчетАмортизацииНУ);
Запрос.УстановитьПараметр("Объект",   Объект);
РезультатЗапроса = Запрос.Выполнить();
ТаблицаОС = РезультатЗапроса.Выгрузить();
  ТаблицаОС.Свернуть("Субконто1", "Сумма01БУ, Сумма01НУ, Сумма01ПР, Сумма01ПРпоРБ, Сумма02,Сумма02ПР");
мКэшСчетов = Новый Соответствие;
Для Каждого СтрокаТаблицы Из ТаблицаЗатрат Цикл
 
  СтрокаТаблицыОС = ТаблицаОС.Найти(СтрокаТаблицы.ОбъектУчета,"Субконто1");
 
  Если СтрокаТаблицыОС = Неопределено Тогда
   Продолжить;
  КонецЕсли;
 
  // если учет постоянных разниц в оценке ОС для амортизации не ведется (запись в регистре сведений пустая)
  // то рассматриваются данные о постоянных разницах в оценке ОС
  Сумма01ПР = ?(СтрокаТаблицыОС.Сумма01ПР = 0, СтрокаТаблицыОС.Сумма01ПРпоРБ, СтрокаТаблицыОС.Сумма01ПР);
 
  Если СтрокаТаблицы.Сумма = СтрокаТаблицы.СУммаНУ И Сумма01ПР = 0 Тогда
   Продолжить;
  КонецЕсли;
 
  // Амортизация по НУ уже была начислена ранее она равна амортизации по БУ
  Если СтрокаТаблицыОС.Сумма02 <> 0 Тогда
   Продолжить;
  КонецЕсли;
  Если СтрокаТаблицыОС.Сумма01ПР =СтрокаТаблицыОС.Сумма02ПР тогда
   СуммаПР=0;
		  Продолжить;
  КонецЕсли;
 
 
  Сумма01ВР = СтрокаТаблицыОС.Сумма01БУ - СтрокаТаблицыОС.Сумма01НУ - Сумма01ПР;
  Если СтрокаТаблицыОС.Сумма01НУ = 0 И Сумма01ПР = 0 И Сумма01ВР = 0 Тогда
   Продолжить;
  КонецЕсли;
 
 
  СчетАмортизации = СтрокаТаблицы.Счет02;
  СуммаПР = 0;
  СуммаВР = 0;
 
  СтрокаТаблицаАмортизации = ТаблицаАмортизации.Найти(СтрокаТаблицы.ОбъектУчета,"ОбъектУчета");
  Если  СтрокаТаблицаАмортизации = Неопределено Тогда
   Продолжить;
  КонецЕсли;
 
 
 
  // Особый случай: в БУ амортизация не начисляется или приостановлена, временные разницы
  // равны сумме амортизации по НУ
  Если СтрокаТаблицы.Сумма = 0 И СтрокаТаблицы.СуммаНУ <> 0 Тогда
   СуммаПР = 0;
  Если СтрокаТаблицы.Сумма01ПР =СтрокаТаблицы.Сумма02ПР тогда
   СуммаПР=0;
 
  Иначе
 
   // постоянная разница в оценке амортизации, возникшая вследствие постоянной разницы в оценке ОС
   // амортизация по ПР, начисленная по способу амортизации БУ
   СуммаПР = Окр((?(ЗначениеЗаполнено(СтрокаТаблицыОС.Сумма01БУ), СтрокаТаблицы.Сумма / СтрокаТаблицыОС.Сумма01БУ, 0)) * Сумма01ПР, 2);
 
   СтрокаТаблицаАмортизации.СуммаПР = СуммаПР;
    Если СтрокаТаблицаАмортизации.Сумма01ПР =СтрокаТаблицаАмортизации.Сумма02ПР тогда
   СуммаПР=0;
 
		 КонецЕсли;
  КонецЕсли;
  КонецЕсли; 
КонецЦикла;
КонецПроцедуры

изменен первый запрос добавлена Сумма02ПР
подскажите что не так?

Сообщение отредактировал alexburn: 17 февраля 2012 - 08:38


#5 zhannett

    Участник


  • 208 сообщений

Отправлено 20 февраля 2012 - 14:49

что то я не пойму либо меня не понимают...либо никто не знает..почему никто не откликнулся на вопрос?

#6 BabySG

    Любитель программирования


  • 12 221 сообщений

Отправлено 20 февраля 2012 - 14:52

Ткните пальцем, где тут есть Сумма01ПРНовая и какое-либо условие по нему?
Ничто так сильно не укрепляет веру в человека, как ПРЕДОПЛАТА!

#7 mialord

    "Свадебный генерал"


  • 3 537 сообщений

Отправлено 20 февраля 2012 - 14:53

Здраствуйте!
Без обид, я глянул на эту портянку и желание пропало разбираться что там и где, Вы сами отладчиком то смотрели? Без отладчика нам тяжело что либо сказать, а вот когда будет виден конкретный кусок кода, тогда совсем другое дело

#8 zhannett

    Участник


  • 208 сообщений

Отправлено 20 февраля 2012 - 14:59

Просмотр сообщенияBabySG (20 февраля 2012 - 14:52) писал:

Ткните пальцем, где тут есть Сумма01ПРНовая и какое-либо условие по нему?
в первом запросе одноименные поля
| 0 КАК Сумма01ПР,

| 0 КАК Сумма02ПР,
условие
Если СтрокаТаблицаАмортизации.Сумма01ПР =СтрокаТаблицаАмортизации.Сумма02ПР тогда
СуммаПР=0;

вопрос:

как сделать так чтобы при амортизации ОС если по 01 и02 счету по виду учета ПР одинаковые цифры то износ не начисляем чтобы они из оборотки ушли

Просмотр сообщенияmialord (20 февраля 2012 - 14:53) писал:

Здраствуйте!
Без обид, я глянул на эту портянку и желание пропало разбираться что там и где, Вы сами отладчиком то смотрели? Без отладчика нам тяжело что либо сказать, а вот когда будет виден конкретный кусок кода, тогда совсем другое дело
я и так кинула главными кусочками, чтобы было меньше кода ...это первый запрос и вывод после него
Процедура РасчетРазницПоАмортизации(СтруктураШапкиДокумента, Актив, Объект, ТаблицаАмортизации, ТабЗатрат, ТаблицаАмортизацииБУ) Экспорт

#9 BabySG

    Любитель программирования


  • 12 221 сообщений

Отправлено 20 февраля 2012 - 14:59

1. Приведите код в нормальный вид.
2. Не надо выкладывать судя столько строк кода
3. Локализуйте проблему. Как уже указали, в портянке кода разбираться всем будет просто лениво.
Ничто так сильно не укрепляет веру в человека, как ПРЕДОПЛАТА!

#10 zhannett

    Участник


  • 208 сообщений

Отправлено 20 февраля 2012 - 15:04

Просмотр сообщенияBabySG (20 февраля 2012 - 14:59) писал:

1. Приведите код в нормальный вид.
2. Не надо выкладывать судя столько строк кода
3. Локализуйте проблему. Как уже указали, в портянке кода разбираться всем будет просто лениво.
хорошо вот кусок в котором надо вставить условие..на данный момент я его впихнула везде:
РезультатЗапроса = Запрос.Выполнить();
//Н.20.02.2012
ТаблицаОС = РезультатЗапроса.Выгрузить();
  ТаблицаОС.Свернуть("Субконто1", "Сумма01БУ, Сумма01НУ, Сумма01ПР, Сумма01ПРпоРБ, Сумма02,Сумма02ПР");
//К.20.02.2012
мКэшСчетов = Новый Соответствие;
Для Каждого СтрокаТаблицы Из ТаблицаЗатрат Цикл
 
  СтрокаТаблицыОС = ТаблицаОС.Найти(СтрокаТаблицы.ОбъектУчета,"Субконто1");
 
  Если СтрокаТаблицыОС = Неопределено Тогда
   Продолжить;
  КонецЕсли;
 
  // если учет постоянных разниц в оценке ОС для амортизации не ведется (запись в регистре сведений пустая)
  // то рассматриваются данные о постоянных разницах в оценке ОС
  Сумма01ПР = ?(СтрокаТаблицыОС.Сумма01ПР = 0, СтрокаТаблицыОС.Сумма01ПРпоРБ, СтрокаТаблицыОС.Сумма01ПР);
 
  Если СтрокаТаблицы.Сумма = СтрокаТаблицы.СУммаНУ И Сумма01ПР = 0 Тогда
   Продолжить;
  КонецЕсли;
 
  // Амортизация по НУ уже была начислена ранее она равна амортизации по БУ
  Если СтрокаТаблицыОС.Сумма02 <> 0 Тогда
   Продолжить;
  КонецЕсли;
  //Н.20.02.2012
  Если СтрокаТаблицыОС.Сумма01ПР =СтрокаТаблицыОС.Сумма02ПР тогда
   СуммаПР=0;
   //К.20.02.2012
		  Продолжить;
  КонецЕсли;
 
 
  Сумма01ВР = СтрокаТаблицыОС.Сумма01БУ - СтрокаТаблицыОС.Сумма01НУ - Сумма01ПР;
  Если СтрокаТаблицыОС.Сумма01НУ = 0 И Сумма01ПР = 0 И Сумма01ВР = 0 Тогда
   Продолжить;
  КонецЕсли;
 
 
  СчетАмортизации = СтрокаТаблицы.Счет02;
  СуммаПР = 0;
  СуммаВР = 0;
 
  СтрокаТаблицаАмортизации = ТаблицаАмортизации.Найти(СтрокаТаблицы.ОбъектУчета,"ОбъектУчета");
  Если  СтрокаТаблицаАмортизации = Неопределено Тогда
   Продолжить;
  КонецЕсли;
 
 
 
  // Особый случай: в БУ амортизация не начисляется или приостановлена, временные разницы
  // равны сумме амортизации по НУ
  Если СтрокаТаблицы.Сумма = 0 И СтрокаТаблицы.СуммаНУ <> 0 Тогда
   СуммаПР = 0;
   //Н.20.02.2012
  Если СтрокаТаблицы.Сумма01ПР =СтрокаТаблицы.Сумма02ПР тогда
   СуммаПР=0;
   //К.20.02.2012
  Иначе
 
   // постоянная разница в оценке амортизации, возникшая вследствие постоянной разницы в оценке ОС
   // амортизация по ПР, начисленная по способу амортизации БУ
   СуммаПР = Окр((?(ЗначениеЗаполнено(СтрокаТаблицыОС.Сумма01БУ), СтрокаТаблицы.Сумма / СтрокаТаблицыОС.Сумма01БУ, 0)) * Сумма01ПР, 2);
 
   СтрокаТаблицаАмортизации.СуммаПР = СуммаПР;
   //Н.20.02.2012
    Если СтрокаТаблицаАмортизации.Сумма01ПР =СтрокаТаблицаАмортизации.Сумма02ПР тогда
   СуммаПР=0;
   //К.20.02.2012
		 КонецЕсли;
  КонецЕсли;
  КонецЕсли; 
КонецЦикла;

Сообщение отредактировал alexburn: 20 февраля 2012 - 15:07


#11 zhannett

    Участник


  • 208 сообщений

Отправлено 20 февраля 2012 - 16:28

я вообще в том направлении мыслю?можно какую нибудь идею по данному вопросу..

#12 zhannett

    Участник


  • 208 сообщений

Отправлено 20 февраля 2012 - 21:03

такое чувство, что я сама с собой пишусь...уважаемые пользователи данного сайта...можно каких нибудь ответов,вопросов,идей,предложений,чтобы не возникало данного ощущения!если Вам не сложно можно пожалуйста как то отвечать и комментировать данный вопрос..прошу помощи еще раз в данной теме...спасибо Всем заранее кто откликнется...

#13 zhannett

    Участник


  • 208 сообщений

Отправлено 20 февраля 2012 - 21:08

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

#14 shurikvz

    Ветеран


  • 5 245 сообщений

Отправлено 21 февраля 2012 - 09:14

Просмотр сообщенияzhannett (20 февраля 2012 - 21:08) писал:

хотелось бы еще уточнить..я начинающий программист,и если Вы смотрите на мои вопросы и коды и что то не понятно ,или Вам кажется это каким то бредом...лучше сообщите об этом....
zhannett, на данный момент ничего не понятно.
Смотрите, вам сказали, еще раз скажу: поймите простыню эту разбирать никто не будет. Вы сейчас фактически предлагаете в уме придумать цифры и смоделировать (о5 же в уме) ситуацию и выдать предположение - почему может работать не так как вы задумали.

Делайте следующее:
ставите точку останова вот на этом месте:

Цитата

Запрос.УстановитьПараметр("Объект", Объект);
->>>>>РезультатЗапроса = Запрос.Выполнить();
ТаблицаОС = РезультатЗапроса.Выгрузить();

Когда исполнение кода дойдет до этой точки, открываете значение Запрос.Текст, копируете текст запроса, также просматриваете (запоминаете) все параметры, которые передаются в запрос, вставляете текст запроса в консоль запросов, и устанавливаете нужные параметры. Теперь выполняете запрос в консоли запросов, и смотрите выдает ли результат запроса те данные, которые вы ожидаете. Естественно значения параметров лучше подобрать такими, чтобы их было реально проанализировать вручную (т.е. чтобы в выборке было не 200 строк, а допустим 10).
Если запрос выдает то что вы ожидаете, тогда двигаетесь отладчиком по коду дальше. На каждом шаге смотрите чему равна интересующая вас переменная (-ые) или обЪект, который содержит в себе эти переменные, ну собственно и смотрите, почему у вас в том месте где вы поставили условие - оно не срабатывает (либо как вариант у вас исполнение вообще может не доходить до места, где задаете условие - о5 же выясняете почему).
Вот и все, как-то так.
Now, this bell tolling softly for another, says to me: Thou must die...

#15 zhannett

    Участник


  • 208 сообщений

Отправлено 21 февраля 2012 - 10:15

запрос отрабатывает нормально..выводятся мои цифры которые нужны..то есть
Сумма01ПР=1 588 983,05
Сумма02ПР=1 588 983,05
по объекту:
Автобетоносмеситель 58147Z на шасси КАМАЗ 65115-62
сделала точку останова запрос все выполняет.у меня только один вопрос..
там вообще ли я все делаю?
и как должно выглядеть условие?
может я вообще не там меняю?и это все зря
мне нужны ответы на эти вопросы..а дальше разберусь..спасибо

#16 shurikvz

    Ветеран


  • 5 245 сообщений

Отправлено 21 февраля 2012 - 10:34

Просмотр сообщенияzhannett (21 февраля 2012 - 10:15) писал:

сделала точку останова запрос все выполняет.у меня только один вопрос..
там вообще ли я все делаю?
и как должно выглядеть условие?
может я вообще не там меняю?и это все зря
мне нужны ответы на эти вопросы..а дальше разберусь..спасибо
Я могу подсказать только с точки зрения синтаксиса 1С. А вот правильно это или нет с точки зрения БУ - я хз. Слова "постоянные разницы", "временные разницы", "дебет-кредит", "активно-пассивный счет" и т.д. и т.п. вызывают во мне чувство глубокой грусти и навевают на меня тоску.


Кстати, может конечно не внимательно посмотрел, но допустим пост #4, не понимаю следующего: ну идет последний цикл (Для Каждого СтрокаТаблицы Из ТаблицаЗатрат Цикл), ок. В этом цикле берутся таблицы, что-то находится, что-то считается. Ладно. Чет я не вижу куда это после цикла (или в цикле) записывается и где используется. Там же просто тупо стоит "КонецПроцедуры". Где используются значения переменных СуммаПР, СуммаВР, и для чего этот последний цикл вообще, что он делает?
Now, this bell tolling softly for another, says to me: Thou must die...

#17 vartanet

    Ветеран


  • 1 512 сообщений

Отправлено 21 февраля 2012 - 10:40

Просмотр сообщенияzhannett (15 февраля 2012 - 09:02) писал:

Добрый день подскажите как вот в этом кусочке кода правильно задать условие. если сумма Сумма01ПРНовая =Сумма02ПРпоРБ, то износ не начислять по ПР:

Просмотр сообщенияzhannett (20 февраля 2012 - 15:04) писал:

хорошо вот кусок в котором надо вставить условие..на данный момент я его впихнула везде:


  //Н.20.02.2012
  Если СтрокаТаблицыОС.Сумма01ПР =СтрокаТаблицыОС.Сумма02ПР тогда
   СуммаПР=0;
   //К.20.02.2012
 
   //Н.20.02.2012
  Если СтрокаТаблицы.Сумма01ПР =СтрокаТаблицы.Сумма02ПР тогда
   СуммаПР=0;
   //К.20.02.2012

   //Н.20.02.2012
	Если СтрокаТаблицаАмортизации.Сумма01ПР =СтрокаТаблицаАмортизации.Сумма02ПР тогда
   СуммаПР=0;
   //К.20.02.2012
		 КонецЕсли;
  КонецЕсли;



1) сначала вы говорите, что вам нужно продолжить когда "Сумма01ПРНовая =Сумма02ПРпоРБ", но в коде "Сумма01ПР=Сумма02ПР"

2) потом говорите, что в результате запроса суммы правильные, но при этом сравниваете показатели в 3 (!) разных таблицах - вы не знаете что нужно сравнивать, а не куда вставить проверку.
Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете.

#18 zhannett

    Участник


  • 208 сообщений

Отправлено 21 февраля 2012 - 10:47

Просмотр сообщенияshurikvz (21 февраля 2012 - 10:34) писал:

Я могу подсказать только с точки зрения синтаксиса 1С. А вот правильно это или нет с точки зрения БУ - я хз. Слова "постоянные разницы", "временные разницы", "дебет-кредит", "активно-пассивный счет" и т.д. и т.п. вызывают во мне чувство глубокой грусти и навевают на меня тоску.


Кстати, может конечно не внимательно посмотрел, но допустим пост #4, не понимаю следующего: ну идет последний цикл (Для Каждого СтрокаТаблицы Из ТаблицаЗатрат Цикл), ок. В этом цикле берутся таблицы, что-то находится, что-то считается. Ладно. Чет я не вижу куда это после цикла (или в цикле) записывается и где используется. Там же просто тупо стоит "КонецПроцедуры". Где используются значения переменных СуммаПР, СуммаВР, и для чего этот последний цикл вообще, что он делает?




))))смотрите это действительно просто лишь процедура общего модуля по расчету разниц
используется далее она в модуле документа "Амортизация ОС"

Процедура ДвиженияПоРегистрамРегл(СтруктураШапкиДокумента, Отказ, Заголовок)
// Начисление амортизации.
  ТабАмортизации.Колонки.Налог.Имя = "Сумма";
 
  СтруктураШапкиДокумента.Дата = СтруктураШапкиДокумента.ПериодРегистрации;
  Если СтруктураШапкиДокумента.ПоддержкаПБУ18 Тогда
   НалоговыйУчет.РасчетРазницПоАмортизации(СтруктураШапкиДокумента, "ОС", "", ТабАмортизации, ТабЗатрат, ТабАмортизацииБУ);
  КонецЕсли;
  ТабЗатрат = УправлениеВнеоборотнымиАктивами.ПолучитьРаспределениеАмортизацииПоНаправлениямРегл(ЭтотОбъект, Отказ, Заголовок, ТабАмортизации, СтруктураШапкиДокумента,"Нал","ОС");
 
  Если НЕ Отказ И Не ТабАмортизации = Неопределено Тогда
   НаборДвижений   = Движения.СтоимостьОСНалоговыйУчет;
   ТаблицаДвижений = НаборДвижений.Выгрузить();
   ТаблицаДвижений.Очистить();
 
   Для Каждого СтрокаТЧ из ТабАмортизации Цикл
    Если СтрокаТЧ.Сумма > 0 Тогда
	 СтрокаДвижений = ТаблицаДвижений.Добавить();
	 СтрокаДвижений.ОсновноеСредство = СтрокаТЧ.ОбъектУчета;
	 СтрокаДвижений.Организация	  = СтруктураШапкиДокумента.Организация;
	 СтрокаДвижений.Амортизация	  = СтрокаТЧ.Сумма;
    КонецЕсли;
   КонецЦикла;
   НаборДвижений.мПериод		  = ДатаДок;
   НаборДвижений.мТаблицаДвижений = ТаблицаДвижений;
   НаборДвижений.ВыполнитьПриход();
  КонецЕсли;
КонецЕсли;


Просмотр сообщенияvartanet (21 февраля 2012 - 10:40) писал:

1) сначала вы говорите, что вам нужно продолжить когда "Сумма01ПРНовая =Сумма02ПРпоРБ", но в коде "Сумма01ПР=Сумма02ПР"

2) потом говорите, что в результате запроса суммы правильные, но при этом сравниваете показатели в 3 (!) разных таблицах - вы не знаете что нужно сравнивать, а не куда вставить проверку.
извините но то что я кидала сначала было не совсем верно...изменить сообщение я не смогла на форуме...
в итоге полцуучилось что мне нужно сравнивать два параметра
Сумма01ПР и Сумма02ПР

Сообщение отредактировал alexburn: 21 февраля 2012 - 10:53


#19 vartanet

    Ветеран


  • 1 512 сообщений

Отправлено 21 февраля 2012 - 10:57

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

общая последовательность действий:
1) получаем строку таблицы
2) для строки делаем проверку

Если СтрокаТаблицы.Сумма01ПР=Сумма02ПР Тогда
СуммаПР=0;
продолжить;
КонецЕсли;

Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете.

#20 vartanet

    Ветеран


  • 1 512 сообщений

Отправлено 21 февраля 2012 - 11:03

упс, опечатка:


Если СтрокаТаблицы.Сумма01ПР=СтрокаТаблицы.Сумма02ПР Тогда
СуммаПР=0;
продолжить;
КонецЕсли;

Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете.

#21 zhannett

    Участник


  • 208 сообщений

Отправлено 21 февраля 2012 - 11:07

я бы с огромным желанием написала бы только лишь одно условие....только вот вопрос где его надо написать?я поэтому их и навставляла,потому что не знаю где именно в этом цикле и как правильно это условие задать..Моя тема так и назвается "Как правильно задать условие"..я обратилась именно за этим ответом..потому что у меня не получается..ПР остаются в оборотке и никуда не уходят при проведении Амортизации ОС

#22 zhannett

    Участник


  • 208 сообщений

Отправлено 21 февраля 2012 - 13:56

уже перепробовала все варианты ничего не выходит не понимаю уже что где и как нужно(((как убрать эти разницы:
на данный момент у меня вот так:

РезультатЗапроса = Запрос.Выполнить();
ТаблицаОС = РезультатЗапроса.Выгрузить();
  ТаблицаОС.Свернуть("Субконто1", "Сумма01БУ, Сумма01НУ, Сумма01ПР, Сумма01ПРпоРБ,Сумма02ПРпоРБ, Сумма02,Сумма02ПР");
мКэшСчетов = Новый Соответствие;
Для Каждого СтрокаТаблицы Из ТаблицаЗатрат Цикл
 
  СтрокаТаблицыОС = ТаблицаОС.Найти(СтрокаТаблицы.ОбъектУчета,"Субконто1");
 
  Если СтрокаТаблицыОС = Неопределено Тогда
   Продолжить;
  КонецЕсли;
 
  // если учет постоянных разниц в оценке ОС для амортизации не ведется (запись в регистре сведений пустая)
  // то рассматриваются данные о постоянных разницах в оценке ОС
  Сумма01ПР = ?(СтрокаТаблицыОС.Сумма01ПР = 0, СтрокаТаблицыОС.Сумма01ПРпоРБ, СтрокаТаблицыОС.Сумма01ПР);
  Сумма02ПР = ?(СтрокаТаблицыОС.Сумма02ПР = 0, СтрокаТаблицыОС.Сумма02ПРпоРБ, СтрокаТаблицыОС.Сумма02ПР);
 
   Если СтрокаТаблицы.Сумма = СтрокаТаблицы.СУммаНУ И Сумма01ПР = 0 Тогда
   Продолжить;
  КонецЕсли;
 
  Если Сумма01ПР =Сумма02ПР тогда
   СуммаПР=0;
   Продолжить;
  КонецЕсли;
   
  // Амортизация по НУ уже была начислена ранее она равна амортизации по БУ
  Если СтрокаТаблицыОС.Сумма02 <> 0 Тогда
   Продолжить;
  КонецЕсли;
  Если СтрокаТаблицыОС.Сумма01ПР =СтрокаТаблицыОС.Сумма02ПР тогда
   СуммаПР=0;
   Продолжить;
  КонецЕсли;
 
   
 
  Сумма01ВР = СтрокаТаблицыОС.Сумма01БУ - СтрокаТаблицыОС.Сумма01НУ - Сумма01ПР;
  Если СтрокаТаблицыОС.Сумма01НУ = 0 И Сумма01ПР = 0 И Сумма01ВР = 0 Тогда
   Продолжить;
  КонецЕсли;
 
 
  СчетАмортизации = СтрокаТаблицы.Счет02;
  СуммаПР = 0;
  СуммаВР = 0;
 
  СтрокаТаблицаАмортизации = ТаблицаАмортизации.Найти(СтрокаТаблицы.ОбъектУчета,"ОбъектУчета");
  Если  СтрокаТаблицаАмортизации = Неопределено Тогда
   Продолжить;
  КонецЕсли;
 
  // Особый случай: в БУ амортизация не начисляется или приостановлена, временные разницы
  // равны сумме амортизации по НУ
 
	 Если СтрокаТаблицы.Сумма = 0 И СтрокаТаблицы.СуммаНУ <> 0 Тогда
   СуммаПР = 0;
   Иначе
 
   // постоянная разница в оценке амортизации, возникшая вследствие постоянной разницы в оценке ОС
   // амортизация по ПР, начисленная по способу амортизации БУ
   СуммаПР = Окр((?(ЗначениеЗаполнено(СтрокаТаблицыОС.Сумма01БУ), СтрокаТаблицы.Сумма / СтрокаТаблицыОС.Сумма01БУ, 0)) * Сумма01ПР, 2);
 
   СтрокаТаблицаАмортизации.СуммаПР = СуммаПР;
  КонецЕсли; 
КонецЦикла;




правда это этого ничего не меняется

что мне с этим кодом сделать?

Сообщение отредактировал shurikvz: 21 февраля 2012 - 14:12


#23 shurikvz

    Ветеран


  • 5 245 сообщений

Отправлено 21 февраля 2012 - 14:21

zhannett, ну а почему у вас что-то убраться должно?

Если Сумма01ПР =Сумма02ПР тогда
   СуммаПР=0;
   Продолжить;
  КонецЕсли;
Это ваше условие?

Ну и? Как только у вас Сумма01ПР =Сумма02ПР то переменной СуммаПР вы присвоите 0, а дальше? У вас стоит "Продолжить;", т.е. у вас сразу идет следующая итерация. Но то что вы переменной присвоили значение 0 - это ничего не даст. Вам надо изменить не просто переменную, а одну из ТаблицЗначений которые передаются параметром в процедуру, поскольку программа уже из данных содержащихся в этих таблицах формирует проводки. Т.е. теперь надо соответствующей строке либо в ТаблицеАмортизации, либо в ТаблицеОС (я не знаю логику работы, куда там что записывается говорю для примера) - присвоить это значение ПР = 0 (не забыв при этом подкорректировать ВР или НУ или куда там положено разницу отнести не знаю).
Now, this bell tolling softly for another, says to me: Thou must die...

#24 zhannett

    Участник


  • 208 сообщений

Отправлено 21 февраля 2012 - 14:52

ТаблицеОС..то есть вот это что я дальше писла не то:
Если СтрокаТаблицыОС.Сумма01ПР =СтрокаТаблицыОС.Сумма02ПР тогда
СуммаПР=0;
Продолжить;
КонецЕсли;


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

#25 shurikvz

    Ветеран


  • 5 245 сообщений

Отправлено 21 февраля 2012 - 15:09

Просмотр сообщенияzhannett (21 февраля 2012 - 14:52) писал:

я не совсем Вас понимаю..поясните пожалуйста окончание Вашего сообщения ..или просто можете написать как я ее должна изменить в паре строчках..и не надо чтобы они были правильными.просто для моего понимания и я попробую сделать уже
Все что вы там понаписали скорее всего не нужно (могу быть не прав). Это все убирайте и смотрите вот на этот участок кода:



Иначе
    // постоянная разница в оценке амортизации, возникшая вследствие постоянной разницы в оценке ОС
    // амортизация по ПР, начисленная по способу амортизации БУ
    СуммаПР = Окр((?(ЗначениеЗаполнено(СтрокаТаблицыОС.Сумма01БУ), СтрокаТаблицы.Сумма / СтрокаТаблицыОС.Сумма01БУ, 0)) * Сумма01ПР, 2);

    СтрокаТаблицаАмортизации.СуммаПР = СуммаПР;
КонецЕсли;


Вот сюда вставляйте условие что если Сумма01ПР = Сумма02ПР тогда СуммаПР = 0 иначе считайте как сейчас считается. Единственно решите что в этом случае делать с ВР (я не дружу с бух учетом, но насколько я знаю должно соблюдаться правило: БУ = НУ + ПР + ВР).
Now, this bell tolling softly for another, says to me: Thou must die...

#26 zhannett

    Участник


  • 208 сообщений

Отправлено 21 февраля 2012 - 15:47

Вы имеете ввиду так?

ТаблицаОС = РезультатЗапроса.Выгрузить();
  ТаблицаОС.Свернуть("Субконто1", "Сумма01БУ, Сумма01НУ, Сумма01ПР, Сумма01ПРпоРБ,Сумма02ПРпоРБ, Сумма02,Сумма02ПР");
мКэшСчетов = Новый Соответствие;
Для Каждого СтрокаТаблицы Из ТаблицаЗатрат Цикл
 
  СтрокаТаблицыОС = ТаблицаОС.Найти(СтрокаТаблицы.ОбъектУчета,"Субконто1");
 
  Если СтрокаТаблицыОС = Неопределено Тогда
   Продолжить;
  КонецЕсли;
 
  // если учет постоянных разниц в оценке ОС для амортизации не ведется (запись в регистре сведений пустая)
  // то рассматриваются данные о постоянных разницах в оценке ОС
  Сумма01ПР = ?(СтрокаТаблицыОС.Сумма01ПР = 0, СтрокаТаблицыОС.Сумма01ПРпоРБ, СтрокаТаблицыОС.Сумма01ПР);
  Сумма02ПР = ?(СтрокаТаблицыОС.Сумма02ПР = 0, СтрокаТаблицыОС.Сумма02ПРпоРБ, СтрокаТаблицыОС.Сумма02ПР);
 
   Если СтрокаТаблицы.Сумма = СтрокаТаблицы.СУммаНУ И Сумма01ПР = 0 Тогда
   Продолжить;
  КонецЕсли;
 
  // Амортизация по НУ уже была начислена ранее она равна амортизации по БУ
  Если СтрокаТаблицыОС.Сумма02 <> 0 Тогда
   Продолжить;
  КонецЕсли;
	   
  Сумма01ВР = СтрокаТаблицыОС.Сумма01БУ - СтрокаТаблицыОС.Сумма01НУ - Сумма01ПР;
  Если СтрокаТаблицыОС.Сумма01НУ = 0 И Сумма01ПР = 0 И Сумма01ВР = 0 Тогда
   Продолжить;
  КонецЕсли;
 
  СчетАмортизации = СтрокаТаблицы.Счет02;
  СуммаПР = 0;
  СуммаВР = 0;
 
  СтрокаТаблицаАмортизации = ТаблицаАмортизации.Найти(СтрокаТаблицы.ОбъектУчета,"ОбъектУчета");
  Если  СтрокаТаблицаАмортизации = Неопределено Тогда
   Продолжить;
  КонецЕсли;
 
  // Особый случай: в БУ амортизация не начисляется или приостановлена, временные разницы
  // равны сумме амортизации по НУ
 
	 Если СтрокаТаблицы.Сумма = 0 И СтрокаТаблицы.СуммаНУ <> 0 Тогда
   СуммаПР = 0;
 
  Если Сумма01ПР =Сумма02ПР тогда
   СуммаПР=0;
 
   Иначе
 
   // постоянная разница в оценке амортизации, возникшая вследствие постоянной разницы в оценке ОС
   // амортизация по ПР, начисленная по способу амортизации БУ
  СуммаПР = Окр((?(ЗначениеЗаполнено(СтрокаТаблицыОС.Сумма01БУ), СтрокаТаблицы.Сумма / СтрокаТаблицыОС.Сумма01БУ, 0)) * Сумма01ПР, 2);
   СтрокаТаблицаАмортизации.СуммаПР = СуммаПР;
		 КонецЕсли;
  КонецЕсли; 
КонецЦикла;

Сообщение отредактировал alexburn: 21 февраля 2012 - 15:50


#27 shurikvz

    Ветеран


  • 5 245 сообщений

Отправлено 21 февраля 2012 - 16:01


СтрокаТаблицаАмортизации = ТаблицаАмортизации.Найти(СтрокаТаблицы.ОбъектУчета,"ОбъектУчета");
Если  СтрокаТаблицаАмортизации = Неопределено Тогда
    Продолжить;
КонецЕсли;

// Особый случай: в БУ амортизация не начисляется или приостановлена, временные разницы
// равны сумме амортизации по НУ

Если СтрокаТаблицы.Сумма = 0 И СтрокаТаблицы.СуммаНУ <> 0 Тогда
   СуммаПР = 0;
Иначе
 
    Если Сумма01ПР =Сумма02ПР Тогда    
        СуммаПР = 0;
    Иначе
        // постоянная разница в оценке амортизации, возникшая вследствие постоянной разницы в оценке ОС
        // амортизация по ПР, начисленная по способу амортизации БУ
        СуммаПР = Окр((?(ЗначениеЗаполнено(СтрокаТаблицыОС.Сумма01БУ), СтрокаТаблицы.Сумма / СтрокаТаблицыОС.Сумма01БУ, 0)) * Сумма01ПР, 2);
    КонецЕсли;

    СтрокаТаблицаАмортизации.СуммаПР = СуммаПР;
КонецЕсли;
КонецЦикла;


Now, this bell tolling softly for another, says to me: Thou must die...

#28 zhannett

    Участник


  • 208 сообщений

Отправлено 21 февраля 2012 - 16:08

спасибо Вам огромное за помощь..сейчас попробую

#29 zhannett

    Участник


  • 208 сообщений

Отправлено 21 февраля 2012 - 16:23

к сожалению не пропадают

#30 zhannett

    Участник


  • 208 сообщений

Отправлено 21 февраля 2012 - 16:44

я вот думаю может я выкуп доумент сделала как то не так..ведь это из за него идут ПР
Для Каждого стр из ОсновныеСредства цикл
Движение = Движения.Налоговый.Добавить();
  Движение.Период = Дата;
  Движение.ВидУчетаДт = Перечисления.ВидыУчетаПоПБУ18.ПР;
  Движение.ВидУчетаКт = Перечисления.ВидыУчетаПоПБУ18.ПР;
  Движение.Организация = Организация;
  Движение.СчетДт = ПланыСчетов.Налоговый.ОСвОрганизации;
  Движение.СубконтоДт[ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.ОсновныеСредства] = стр.ОсновноеСредство;
  Движение.СчетКт = ПланыСчетов.Налоговый.АмортизацияОС_01;
  Движение.СубконтоКт[ПланыВидовХарактеристик.ВидыСубконтоХозрасчетные.ОсновныеСредства] = стр.ОсновноеСредство;
  Движение.Сумма = стр.Сумма;
КонецЦикла;


потом так как не заполнядись разницы я ввела


Запрос.Текст =
"ВЫБРАТЬ
| ВыкупЛизинговогоИмуществаОсновныеСредства.ОсновноеСредство,
| ВыкупЛизинговогоИмуществаОсновныеСредства.Сумма,
| ПараметрыАмортизацииОСНалоговыйУчетСрезПоследних.СрокПолезногоИспользования КАК | ПараметрыАмортизацииОСНалоговыйУчетСрезПоследних.СрокПолезногоИспользования КАК СрокПолезногоИспользования,
| ПараметрыАмортизацииОСНалоговыйУчетСрезПоследних.ПР| ПараметрыАмортизацииОСНалоговыйУчетСрезПоследних.ПРДляВычисленияАмортизации
|ИЗ
| Документ.ВыкупЛизинговогоИмущества.ОсновныеСредства КАК ВыкупЛизинговогоИмуществаОсновныеСредства
|  ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ПараметрыАмортизацииОСНалоговыйУчет.СрезПоследних КАК ПараметрыАмортизацииОСНалоговыйУчетСрезПоследних
|  ПО ВыкупЛизинговогоИмуществаОсновныеСредства.ОсновноеСредство = ПараметрыАмортизацииОСНалоговыйУчетСрезПоследних.ОсновноеСредство
|ГДЕ
| ВыкупЛизинговогоИмуществаОсновныеСредства.Ссылка = &Ссылка";
Запрос.УстановитьПараметр("Ссылка", Ссылка);
Запрос.УстановитьПараметр("ВыбДата", Дата);
Запрос.УстановитьПараметр("Организация", Организация);
Выборка = Запрос.Выполнить().Выбрать();
Пока выборка.Следующий() цикл
  Движение = Движения.ПараметрыАмортизацииОСНалоговыйУчет.Добавить();
  Движение.Период = Дата;
  Движение.Организация = Организация;
  Движение.ОсновноеСредство = Выборка.ОсновноеСредство;
  Движение.СрокПолезногоИспользования = Выборка.СрокПолезногоИспользования;
  Движение.ПРДляВычисленияАмортизации = Выборка.Сумма;
КонецЦикла;


потом ПР стали отображаться в запросе

я уже не знаю что и где поменять чтобы они исчезли((

Сообщение отредактировал shurikvz: 21 февраля 2012 - 16:45
Истопльзуем тэги для оформления кода!






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

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