помогите с кодом
Показывать по
10
20
40
сообщений
- 1
- 2
02.12.2010
08:34
#1
"Леплю отчет на семерке, но конфигурация самописная. Сказали доделать отчет, а у меня что-то недополучается.
Задача выглядит так Есть ТЗ в ней есть к примеру доки 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.НомерПисьма);
ПечМедикамент = "пусто" ;
ПечСерия = "пусто";
Таб.ВывестиСекцию("Строка");
КонецЕсли;
КонецЦикла;
КонецЦикла;
посоветуйте, пожалуйста как изменить, по отладчику вижу, что происходит, но как исправить не пойму.
"
Задача выглядит так Есть ТЗ в ней есть к примеру доки 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.НомерПисьма);
ПечМедикамент = "пусто" ;
ПечСерия = "пусто";
Таб.ВывестиСекцию("Строка");
КонецЕсли;
КонецЦикла;
КонецЦикла;
посоветуйте, пожалуйста как изменить, по отладчику вижу, что происходит, но как исправить не пойму.
"
02.12.2010
09:21
#2
Что-то какая-то муть...
Может сначала выбрать все Док11 за период, из них выбрать подчиненные документы и поместить в ТЗПодчиненных (с колонками "Документ"=Док1, Док2 и "Владелец"=Док11, Док22 и т.п.). Далее пройтись циклом по ТЗ, искать документ из ТЗ в ТЗПодчиненных. Если находится, то брать данные из поля "Владелец", если не находится, то из самого документа.
Может сначала выбрать все Док11 за период, из них выбрать подчиненные документы и поместить в ТЗПодчиненных (с колонками "Документ"=Док1, Док2 и "Владелец"=Док11, Док22 и т.п.). Далее пройтись циклом по ТЗ, искать документ из ТЗ в ТЗПодчиненных. Если находится, то брать данные из поля "Владелец", если не находится, то из самого документа.
02.12.2010
12:08
#3
нет...не так...я поясню, может не понятно
изначально есть список "писем" и есть список "уведомлений"
отчет формировался по уведомлениям входящим в период отчета, но в таблице отчета выдаются данные не самого уведомления, а "письма", которое было указано в "уведомлении". Есть много писем и допустим три уведомления, каждый из которых содержит ссылку только на одно письмо. Письмо и уведомление не подчиненные...Изначально отчет включал только те письма, которые были в уведомлениях, а бух просить включить все остальные письма тоже за выбранный период. Только для тех, которые с уведомлением у них там еще данные, а для тех которые без = только номер, остальные графы пустые...
блин, если все равно не понятно, то пипец...не знаю как объяснить (((
изначально есть список "писем" и есть список "уведомлений"
отчет формировался по уведомлениям входящим в период отчета, но в таблице отчета выдаются данные не самого уведомления, а "письма", которое было указано в "уведомлении". Есть много писем и допустим три уведомления, каждый из которых содержит ссылку только на одно письмо. Письмо и уведомление не подчиненные...Изначально отчет включал только те письма, которые были в уведомлениях, а бух просить включить все остальные письма тоже за выбранный период. Только для тех, которые с уведомлением у них там еще данные, а для тех которые без = только номер, остальные графы пустые...
блин, если все равно не понятно, то пипец...не знаю как объяснить (((
02.12.2010
12:23
#4
"сначала сделана выборка ТЗ которая содержит только данные писем с уведомлениями
ниже я создаю список документов Док11:
Док11 = СоздатьОбъект("Документ.Письмо");
Док11.ВыбратьДокументы(НачДата,КонДата);
Пока Док11.ПолучитьДокумент()=1 Цикл
Если Док11.Проведен()<>1 Тогда
Продолжить;
КонецЕсли;
который перебирает письма за выбранный период и их номера сравнивает с теми которые в ТЗ
p = Док11.НомерПисьма;
Если ТЗ.Письмо.НомерПисьма <> p Тогда
а дальше после тогда идет что-то не верное потому что в итоге я получаю дублированные строки и некоторые письма вообще не попадают...значит действия после "тогда" (см.первый пост) написаны с ошибкой...
"
ниже я создаю список документов Док11:
Док11 = СоздатьОбъект("Документ.Письмо");
Док11.ВыбратьДокументы(НачДата,КонДата);
Пока Док11.ПолучитьДокумент()=1 Цикл
Если Док11.Проведен()<>1 Тогда
Продолжить;
КонецЕсли;
который перебирает письма за выбранный период и их номера сравнивает с теми которые в ТЗ
p = Док11.НомерПисьма;
Если ТЗ.Письмо.НомерПисьма <> p Тогда
а дальше после тогда идет что-то не верное потому что в итоге я получаю дублированные строки и некоторые письма вообще не попадают...значит действия после "тогда" (см.первый пост) написаны с ошибкой...
"
02.12.2010
13:55
#5
Не понятно как связаны документы "Уведомление" и "Письмо". Кто-то содержится в табличной части кого-то?
02.12.2010
14:23
#6
да, в документе "уведомление" в табличной части можно выбрать "письмо" (при выборе открывается журнал писем)
02.12.2010
14:55
#7
Ну значит изначально отчет строился по выборке писем из тч Уведомления. Если нужно в конец отчета добавить письма прочие, то надо:
1. В текущий механизм вывода добавить заполнение ТЗ выведенными письмами.
2. Добавить в конец отчета выборку писем за период. Проверять нахождение письма в ТЗ выведенных и, если письма там еще нет, то выводить новую строку отчета.
1. В текущий механизм вывода добавить заполнение ТЗ выведенными письмами.
2. Добавить в конец отчета выборку писем за период. Проверять нахождение письма в ТЗ выведенных и, если письма там еще нет, то выводить новую строку отчета.
02.12.2010
15:02
#8
"1. тут чуть-чуть непонятно, у меня в ТЗ уже содержаться письма из уведомлений, я не стала приводить этот кусок кода
2. верно, теперь к ним нужно добавить остальные письма, которые есть в выбранном периоде, но которые не встретились в уведомлениях...
что я и пытаюсь делать
p = Док11.НомерПисьма;
Если ТЗ.Письмо.НомерПисьма <> p Тогда ...
а после "тогда" у меня в коде что-то не так...
"
2. верно, теперь к ним нужно добавить остальные письма, которые есть в выбранном периоде, но которые не встретились в уведомлениях...
что я и пытаюсь делать
p = Док11.НомерПисьма;
Если ТЗ.Письмо.НомерПисьма <> p Тогда ...
а после "тогда" у меня в коде что-то не так...
"
- 1
- 2
Читают тему
(гостей: 1)