помогите с кодом

Новая тема
Показывать по 10 20 40 сообщений
"Леплю отчет на семерке, но конфигурация самописная. Сказали доделать отчет, а у меня что-то недополучается.
Задача выглядит так Есть ТЗ в ней есть к примеру  доки 1 и 2. Есть Док11 туда входят доки 2 и 3.
В итоговую таблицу должны войти:

1. все документы из ТЗ и Док11, только не повторятся естественно.
2. у документов из ТЗ в строках должны печататься все данные для печати, а если док. в таблицу пришел из Док11, то его поля кроме номера, должны быть пустыми

т.е должно получится:

док1 - с данными
док2 - с данными
док3 - пусто


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

док1 - с данными
док1 - с данными
док2 - с данными
док2 - пусто


т.е. дубли и док3 вообще не попал.

КОД:

Пока ТЗ.ПолучитьСтроку()=1 Цикл  

Док11 = СоздатьОбъект("Документ.Письмо");
Док11.ВыбратьДокументы(НачДата,КонДата);
Пока Док11.ПолучитьДокумент()=1 Цикл
Если Док11.Проведен()<>1 Тогда
Продолжить;
КонецЕсли;
 
   p = Док11.НомерПисьма;

 Если  ТЗ.Письмо.НомерПисьма <> p Тогда
   
 
 Ном = Ном + 1;
ПечПисьмо = СокрЛП(ТЗ.Письмо.ДатаПисьма)+РазделительСтрок+СокрЛП(ТЗ.Письмо.НомерПисьма);
       ПечМедикамент = "Данные";
ПечСерия = "Данные";
Таб.ВывестиСекцию("Строка");
       
      иначе
     
Ном = Ном + 1;
ПечПисьмо = СокрЛП(Док11.ДатаПисьма)+РазделительСтрок+СокрЛП(Док11.НомерПисьма);
        ПечМедикамент = "пусто" ;
ПечСерия       = "пусто";
     
Таб.ВывестиСекцию("Строка");
   
        КонецЕсли;
         
            КонецЦикла;
КонецЦикла;
 


посоветуйте, пожалуйста как изменить, по отладчику вижу, что происходит, но как исправить не пойму.
"
Что-то какая-то муть...

Может сначала выбрать все Док11 за период, из них выбрать подчиненные документы и поместить в ТЗПодчиненных (с колонками "Документ"=Док1, Док2 и "Владелец"=Док11, Док22 и т.п.). Далее пройтись циклом по ТЗ, искать документ из ТЗ в ТЗПодчиненных. Если находится, то брать данные из поля "Владелец", если не находится, то из самого документа.
нет...не так...я поясню, может не понятно

изначально есть список "писем" и есть список "уведомлений"
отчет формировался по уведомлениям входящим в период отчета, но в таблице отчета выдаются данные не самого уведомления, а "письма", которое было указано в "уведомлении". Есть много писем и допустим три уведомления, каждый из которых содержит ссылку только на одно письмо. Письмо и уведомление не подчиненные...Изначально отчет включал только те письма, которые были в уведомлениях, а бух просить включить все остальные письма тоже за выбранный период. Только для тех, которые с уведомлением у них там еще данные, а для тех которые без = только номер, остальные графы пустые...

блин, если все равно не понятно, то пипец...не знаю как объяснить (((
"сначала сделана выборка ТЗ которая содержит только данные писем с уведомлениями
ниже я создаю список документов Док11:

Док11 = СоздатьОбъект("Документ.Письмо");
Док11.ВыбратьДокументы(НачДата,КонДата);
Пока Док11.ПолучитьДокумент()=1 Цикл
Если Док11.Проведен()<>1 Тогда
Продолжить;
КонецЕсли;

который перебирает письма за выбранный период и их номера сравнивает с теми которые в ТЗ

p = Док11.НомерПисьма;

 Если  ТЗ.Письмо.НомерПисьма <> p Тогда

а дальше после тогда идет что-то не верное потому что в итоге я получаю дублированные строки и некоторые письма вообще не попадают...значит действия после "тогда" (см.первый пост) написаны с ошибкой...
"
Не понятно как связаны документы "Уведомление" и "Письмо". Кто-то содержится в табличной части кого-то?
да, в документе "уведомление" в табличной части можно выбрать "письмо" (при выборе открывается журнал писем)
Ну значит изначально отчет строился по выборке писем из тч Уведомления. Если нужно в конец отчета добавить письма прочие, то надо:
1. В текущий механизм вывода добавить заполнение ТЗ выведенными письмами.
2. Добавить в конец отчета выборку писем за период. Проверять нахождение письма в ТЗ выведенных и, если письма там еще нет, то выводить новую строку отчета.
"1. тут чуть-чуть непонятно, у меня в ТЗ уже содержаться письма из уведомлений, я не стала приводить этот кусок кода
2. верно, теперь к ним нужно добавить остальные письма, которые есть в выбранном периоде, но которые не встретились в уведомлениях...
что я и пытаюсь делать
p = Док11.НомерПисьма;
Если  ТЗ.Письмо.НомерПисьма <> p Тогда ...

а после "тогда" у меня в коде что-то не так...

"
"а-аа, понял кажется...

В ТЗ какая колонка отвечает за письмо (интересует ее название и тип)?

Вариант для номера письма

p = Док11.НомерПисьма;

СтрТЗ = 0;

Если ТЗ.НайтиЗначение(р, СтрТЗ, "НомерПисьма") = 1 Тогда
   Продолжить;
КонецЕсли;

ТЗ.НоваяСтрока();
ТЗ.НомерПисьма = р;"
ТЗ.Письмо.НомерПисьма - тип  строка

спасибо, ваше предложение завтра рассмотрю, у нас уже почти 12 ночи, не соображаю уже...но завтра обязательно отпишусь...
Читают тему
(гостей: 1)

Быстрый переход