Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
22 ноя 2024, 20:35

Добавление в ячейку записи по условию

Автор gorelchik, 05 июл 2011, 05:27

0 Пользователей и 1 гость просматривают эту тему.

gorelchik

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

gorelchik

Табличная часть документа:
Ном | Наименование | Материал |
1       Игрушка            Пух
2       Игрушка2

Вывод на печатную форму
Ном | Наименование | Материал |
1       Игрушка            Пух
2       Игрушка2           Пух

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

gorelchik

Вот весь код отчета:

//********************************************************************************************
//*******                         Роньжина Ольга                                      ********
//******* Обработка: Вывод отчета по Заказам за указанную с вхда дату                 ********
//********************************************************************************************

Перем Расшифровка;
Перем Обновить;
Перем Таб, ТаблицаДокументов;
Перем Ном,Док;

//**********************************************

Функция РасшифровкаОбновить(Обновить)
   Расшифровка.Установить("Обновить", Обновить);
   Возврат Расшифровка;
КонецФункции   // РасшифровкаОбновить           

//**********************************************

Процедура НакоплениеДанных()
   НомКол = 1;
   ТаблицаДокументов.НоваяСтрока(Ном);
   ТаблицаДокументов.УстановитьЗначение(Ном,НомКол,Док.ДатаРегистрации);
   НомКол = НомКол + 1;
   Если Док.ВидЗаказа = Перечисление.ВидыЗаказовНаСторону.Ремонт Тогда
      НомерЗаказа = "2" + Строка(СокрЛП(Док.Контрагент.Код)) + "_" + Строка(СокрЛП(Док.НомерДок));
   ИначеЕсли Док.ВидЗаказа = Перечисление.ВидыЗаказовНаСторону.Изготовление Тогда
       НомерЗаказа = "1" + Строка(СокрЛП(Док.Контрагент.Код)) + "_" + СокрЛП(Док.НомерСпецификации);
   Иначе
      НомерЗаказа = 0;
   КонецЕсли;
   ТаблицаДокументов.УстановитьЗначение(Ном,НомКол,НомерЗаказа);
   НомКол = НомКол + 1;
   ТаблицаДокументов.УстановитьЗначение(Ном,НомКол,Док.Контрагент.Наименование);
   НомКол = НомКол + 1;
   ТаблицаДокументов.УстановитьЗначение(Ном,НомКол,?(ПустоеЗначение(Док.Наименование)=1,Док.Товар.Наименование,Док.Наименование));
   
   НомКол = НомКол + 1;
   Если Док.ВидЗаказа = Перечисление.ВидыЗаказовНаСторону.Ремонт Тогда
      ТаблицаДокументов.УстановитьЗначение(Ном,НомКол,"Ремонт");
   ИначеЕсли Док.ВидЗаказа = Перечисление.ВидыЗаказовНаСторону.Изготовление Тогда
       ТаблицаДокументов.УстановитьЗначение(Ном,НомКол,"Изготовление");
   КонецЕсли;
   НомКол = НомКол + 1;
   ТаблицаДокументов.УстановитьЗначение(Ном,НомКол,Док.ДатаСостСпец);
   НомКол = НомКол + 1;
   ТаблицаДокументов.УстановитьЗначение(Ном,НомКол,Док.ДатаСоглСпец);
   НомКол = НомКол + 1;
   ТаблицаДокументов.УстановитьЗначение(Ном,НомКол,Док.ДатаСостКалькуляции);
   НомКол = НомКол + 1;
   ТаблицаДокументов.УстановитьЗначение(Ном,НомКол,Док.Договор.Наименование);
   НомКол = НомКол + 1;
   ТаблицаДокументов.УстановитьЗначение(Ном,НомКол,Док.НомерСпецификации);
   НомКол = НомКол + 1;
   ТаблицаДокументов.УстановитьЗначение(Ном,НомКол,Док.НомерСтроки);
   НомКол = НомКол + 1;
    ТаблицаДокументов.УстановитьЗначение(Ном,НомКол,Док.Количество);
   НомКол = НомКол + 1;
    ТаблицаДокументов.УстановитьЗначение(Ном,НомКол,Док.ТекущийДокумент());
   НомКол = НомКол + 1;
    ТаблицаДокументов.УстановитьЗначение(Ном,НомКол,Док.НомерСтроки);
   НомКол = НомКол + 1;
   Если Док.КомПред = 1 Тогда
      ТаблицаДокументов.УстановитьЗначение(Ном,НомКол,"Ком.Предл.");
   ИначеЕсли Док.СпецификацияДок1 = 1 Тогда
      ТаблицаДокументов.УстановитьЗначение(Ном,НомКол,"Спецификация");
   Иначе
      ТаблицаДокументов.УстановитьЗначение(Ном,НомКол,"Заявка");
   КонецЕсли;
   НомКол = НомКол + 1;
    ТаблицаДокументов.УстановитьЗначение(Ном,НомКол,Док.ДатаСостКомПред);
    Ном = Ном + 1;
КонецПроцедуры

//**********************************************

Процедура ФильтрЗКПС()  //  ЗКПС - заявка/ коммерческое предложение/ спецификация
   Если ПустоеЗначение(Контрагент) = 1 Тогда
       Док.ВыбратьСтроки();
       Пока Док.ПолучитьСтроку() = 1 Цикл
         Если ПустоеЗначение(Номенклатура) = 1 Тогда
            НакоплениеДанных();
         ИначеЕсли Номенклатура = Док.Товар Тогда
            НакоплениеДанных();
         КонецЕсли;
      КонецЦикла;
   ИначеЕсли Контрагент = Док.Контрагент Тогда
       Док.ВыбратьСтроки();
      Пока Док.ПолучитьСтроку() = 1 Цикл
         Если ПустоеЗначение(Номенклатура) = 1 Тогда
            НакоплениеДанных();
         ИначеЕсли Номенклатура = Док.Товар Тогда
            НакоплениеДанных();
         КонецЕсли;
      КонецЦикла;
   КонецЕсли;
КонецПроцедуры

//**********************************************

Процедура Сформировать()
     Если (ПустоеЗначение(НачДата) = 0) И (ПустоеЗначение(КонДата) = 0) Тогда
      Если НачДата > КонДата Тогда
         Предупреждение("Неверно задан период отчета!!!");
      Иначе
          Док = СоздатьОбъект("Документ." +  "Заявка");
         Док.ВыбратьДокументы(НачДата,КонДата);
         
         ТаблицаДокументов  = СоздатьОбъект("ТаблицаЗначений");  // Таблица для накопления заказов
         
         ТаблицаДокументов.НоваяКолонка("ДатаРегистрации");
         ТаблицаДокументов.НоваяКолонка("НомерЗаказа");
         ТаблицаДокументов.НоваяКолонка("Контрагент");
         ТаблицаДокументов.НоваяКолонка("Номенклатура");
         
      
         
         ТаблицаДокументов.НоваяКолонка("ВидЗаказа");
         ТаблицаДокументов.НоваяКолонка("ДатаСоставленияСпец");
         ТаблицаДокументов.НоваяКолонка("ДатаСогласованияСпец");
         ТаблицаДокументов.НоваяКолонка("ДатаСоставленияКалькуляции");
   
         ТаблицаДокументов.НоваяКолонка("НомерДоговора");
         ТаблицаДокументов.НоваяКолонка("НомерСпецификации");
         ТаблицаДокументов.НоваяКолонка("НомерПозицииСпецификации");
         ТаблицаДокументов.НоваяКолонка("Количество");
         ТаблицаДокументов.НоваяКолонка("Док");
         ТаблицаДокументов.НоваяКолонка("Позиция");
         ТаблицаДокументов.НоваяКолонка("ВидДокумента");
         ТаблицаДокументов.НоваяКолонка("ДатаСоставленияКомПред");
               
         Ном = 1;
         Пока Док.ПолучитьДокумент() > 0 Цикл
            Если ((Заявка = 1) И (КомПред = 1) И (Спец = 1)) ИЛИ ((Заявка = 0) И (КомПред = 0) И (Спец = 0)) Тогда
                  ФильтрЗКПС();
            ИначеЕсли (Заявка = 1) И (КомПред = 0) И (Спец = 0) Тогда
               Если (Док.СпецификацияДок1 = 0) И (Док.КомПред = 0) Тогда
                  ФильтрЗКПС();
               КонецЕсли;
            ИначеЕсли (Заявка = 0) И (КомПред = 1) И (Спец = 0) Тогда
               Если Док.КомПред = 1 Тогда
                  ФильтрЗКПС();   
               КонецЕсли;
            ИначеЕсли (Заявка = 0) И (КомПред = 0) И (Спец = 1) Тогда
                Если Док.СпецификацияДок1 = 1 Тогда
                  ФильтрЗКПС();
               КонецЕсли;
            ИначеЕсли (Заявка = 1) И (КомПред = 1) И (Спец = 0) Тогда
               Если ((Док.СпецификацияДок1 = 0) И (Док.КомПред = 0))ИЛИ (Док.КомПред = 1) Тогда
                  ФильтрЗКПС();
               КонецЕсли;
            ИначеЕсли (Заявка = 0) И (КомПред = 1) И (Спец = 1) Тогда
               Если (Док.СпецификацияДок1 = 1) ИЛИ (Док.КомПред = 1) Тогда
                  ФильтрЗКПС();
               КонецЕсли;
            ИначеЕсли (Заявка = 1) И (КомПред = 0) И (Спец = 1) Тогда
               Если ((Док.СпецификацияДок1 = 0) И (Док.КомПред = 0))ИЛИ (Док.СпецификацияДок1 = 1) Тогда
                  ФильтрЗКПС();
               КонецЕсли;            
                КонецЕсли;
         КонецЦикла;
         
         ТаблицаДокументов.Сортировать("ДатаРегистрации");
         
           Если Обновить = 2 Тогда
             СтрокаДействийФормы = "#Закрыть";
         КонецЕсли;
         
         Если (ТипЗначенияСтр(Таб) <> "Таблица") ИЛИ (Обновить = 0) Тогда
               Таб = СоздатьОбъект("Таблица");
         Иначе
             Таб.Очистить();
         КонецЕсли;
   
           Таб.ИсходнаяТаблица("Отчет по заказам");
         
           Расшифровка = СоздатьОбъект("СписокЗначений");
            Расшифровка.Установить("Отчет", "ОтчетПоЗаказам");
         Расшифровка.Установить("НачДата", НачДата);
            Расшифровка.Установить("КонДата", КонДата);
         
         Таб.ВывестиСекцию("Управление");
         Таб.ВывестиСекцию("Шапка");
         Расшифровка.УдалитьВсе();
         
         ТаблицаДокументов.ВыбратьСтроки();                     
         Пока ТаблицаДокументов.ПолучитьСтроку() > 0 Цикл
            Док = ТаблицаДокументов.Док;
            Позиция = ТаблицаДокументов.Позиция;
         
            Таб.ВывестиСекцию("Строка|Секция_7");
            Расшифровка.Установить("Отчет","ОткрытиеФайлаЗаказ");
            Расшифровка.Установить("Док", Док.ТекущийДокумент());
            
            Таб.ПрисоединитьСекцию("Строка|Наименование");
         
            Расшифровка.УдалитьВсе();
            Таб.ПрисоединитьСекцию("Строка|Секция_8");
            Если НазваниеНабораПрав() = "Коммерсант" Тогда
               Расшифровка.Установить("Отчет","ПечатьКалькуляции");
            Иначе
                Расшифровка.Установить("Отчет","ДобавлениеКалькуляцииВЗаявку");
            КонецЕсли;
            Расшифровка.Установить("Заказ", Док);
            Расшифровка.Установить("Позиция", Позиция);
            Таб.ПрисоединитьСекцию("Строка|ДатаКалькуляции");
            Расшифровка.УдалитьВсе();
            Таб.ПрисоединитьСекцию("Строка|Секция_9");
            Таб.ПрисоединитьСекцию("Строка|Договор");
            Расшифровка.УдалитьВсе();
            Расшифровка.Установить("Отчет","ПечатьСпецификации");
            Расшифровка.Установить("Док", Док.ТекущийДокумент());
            Таб.ПрисоединитьСекцию("Строка|НомерСпецификации");
            Расшифровка.УдалитьВсе();
            Таб.ПрисоединитьСекцию("Строка|Секция_10");
         КонецЦикла;
                                                 
         Таб.Опции(1, 0, 6, 0);
         Таб.ТолькоПросмотр(1);
         Таб.ПараметрыСтраницы(2,,0,0.5,0.5,0.5,0.5,,,0);
         Таб.Показать("Отчет по заказам","");
         
      КонецЕсли;
   Иначе
      Предупреждение("Поле период является обязательным для заполнения!!!");
   КонецЕсли;
КонецПроцедуры // Сформировать()

//**********************************************

Процедура УдалениеИнтервала()
      НачДата = '';
   КонДата = '';
КонецПроцедуры // УдалениеИнтервала()

//**********************************************

Процедура ПриОткрытии()
      НачДата = НачМесяца(РабочаяДата());
   КонДата = КонМесяца(РабочаяДата());

   Если глФлагРасшифровки = 1 Тогда
      Обновить = глОбновить;
      НачДата = глРасшифровка.Получить("НачДата");
         КонДата = глРасшифровка.Получить("КонДата");
   
      Если Обновить <> 0 Тогда
         Таб = глТаблица;
      КонецЕсли;

      Если Обновить <> 2 Тогда
         Сформировать();
         СтатусВозврата(0);
         Возврат;
      КонецЕсли;
   Иначе
      Закрыть = 0;
      Обновить = 0;
      НачДата = НачМесяца(РабочаяДата());
      КонДата = КонМесяца(РабочаяДата());
   КонецЕсли;
КонецПроцедуры // ПриОткрытии()

//**********************************************

Процедура УдалениеКонтрагента()
      Контрагент='';
КонецПроцедуры // УдалениеКонтрагента()

////********************************************

Процедура УдалениеНоменклатуры()
      Номенклатура='';
КонецПроцедуры // УдалениеНоменклатуры()

////********************************************

gorelchik

Тут я так понимаю создается виртуальная таблица и в нее в цикле записываются данные из документов, а уже потом выводятся. Тогда как добавить новую переменную чтобы туда выводился материал. Атрибут документа который нужно добавить называется МатериалИзг

gorelchik


Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск