Имя: Пароль:
1C
1С v8
Помогите с печатной формой!!!
0 Wirtox
 
06.12.12
11:00
Получил задание нужно сделать два макета для документа РасходнаяНакладная :
1 макет нужно было сделать в конструкторе макетов, а второй нужно сделать на основе первого макета только добавить колонку остаток на складе. (Остаток на складе рассчитывается из регистра накоплений ОстаткиТоваров)
Вот код
Процедура Печать(ТабДок, Ссылка) Экспорт
   //{{_КОНСТРУКТОР_ПЕЧАТИ(Печать)
   Макет = Документы.РасходнаяНакладная.ПолучитьМакет("Печать");
   Запрос = Новый Запрос;
   Запрос.Текст =
   "ВЫБРАТЬ
   |    РасходнаяНакладная.Дата,
   |    РасходнаяНакладная.Номер,
   |    РасходнаяНакладная.Организация,
   |    РасходнаяНакладная.Склад,
   |    РасходнаяНакладная.ТаблРасходнаяНакладная.(
   |        НомерСтроки,
   |        Номенклатура,
   |        Серия,
   |        ЕдиницыИзмерения,
   |        Количество
   |    )
   |ИЗ
   |    Документ.РасходнаяНакладная КАК РасходнаяНакладная
   |ГДЕ
   |    РасходнаяНакладная.Ссылка В (&Ссылка)";
   Запрос.Параметры.Вставить("Ссылка", Ссылка);
   Выборка = Запрос.Выполнить().Выбрать();

   ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
   Шапка = Макет.ПолучитьОбласть("Шапка");
   ОбластьТаблРасходнаяНакладнаяШапка = Макет.ПолучитьОбласть("ТаблРасходнаяНакладнаяШапка");
   ОбластьТаблРасходнаяНакладная = Макет.ПолучитьОбласть("ТаблРасходнаяНакладная");
   Подвал = Макет.ПолучитьОбласть("Подвал");

   ТабДок.Очистить();

   ВставлятьРазделительСтраниц = Ложь;
   Пока Выборка.Следующий() Цикл
       Если ВставлятьРазделительСтраниц Тогда
           ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
       КонецЕсли;

       ТабДок.Вывести(ОбластьЗаголовок);

       Шапка.Параметры.Заполнить(Выборка);
       ТабДок.Вывести(Шапка, Выборка.Уровень());

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

       Подвал.Параметры.Заполнить(Выборка);
       ТабДок.Вывести(Подвал);

       ВставлятьРазделительСтраниц = Истина;
   КонецЦикла;
   //}}
КонецПроцедуры
1 Undefined vs NULL
 
06.12.12
11:01
(0) запрос в тройном цикле это клево
2 Cube
 
06.12.12
11:01
(0) Где вопрос?
3 butterbean
 
06.12.12
11:01
(0) молодец, теперь вставь этот код в обработку печати
4 YHVVH
 
06.12.12
11:01
(0) тебя сейчас порвут за запрос в цикле
5 Wirtox
 
06.12.12
11:01
вот на что ругается
{Документ.РасходнаяНакладная.МодульМенеджера(55)}: Поле объекта не обнаружено (ТаблРасходнаяНакладная)
               ТекНоменклатура = Ссылка.ТаблРасходнаяНакладная.Номенклатура;
6 Wirtox
 
06.12.12
11:03
как это исправить?
7 Cube
 
06.12.12
11:03
(5) Красавчик, чо:

Для Каждого ТекСтр Из Ссылка Цикл...
А потом ещё и запрос...

Расстрелять!)
8 Wobland
 
06.12.12
11:03
(6) мозгом!!!
9 Undefined vs NULL
 
06.12.12
11:04
дайте мне это развидеть!
10 YHVVH
 
06.12.12
11:04
(8) а если его нет?
11 Wirtox
 
06.12.12
11:05
а если серьезно просто очень нужно
12 Cube
 
06.12.12
11:07
(11) Если серьезно:
Для начала, нужно написать ОДИН нормальный запрос, который соберет все необходимые данные. Потом просто вывести эти данные в печатную форму.