Имя: Пароль:
1C
1С v8
Добавление столбца в печатную форму
,
0 neo-55555
 
22.04.15
08:31
Доброе утро, друзья. Помогите, пожалуйста,разобраться с проблемой.
В Маршрутных листах отображается состояние накладной "Доставлено" и т.д.
Хотел бы это выгружать в печатную форму. Написал код, не пойму в чем ошибка:

Функция Печать() Экспорт
    Если не СсылкаНаОбъект.Проведен Тогда
        ВызватьИсключение "Складские накладные нельзя печатать для непроведенного документа";
    КонецЕсли;
    Макет = ПолучитьМакет("Макет");
    Запрос = Новый Запрос(
    "ВЫБРАТЬ
    |    МаршрутныйЛистСостав.Документ.Контрагент КАК Контрагент,
    |    МаршрутныйЛистСостав.Документ КАК Накладная,
    |   МаршрутныйЛистСостав.Документ КАК Состояние
    |ИЗ
    |    Документ.МаршрутныйЛист.Состав КАК МаршрутныйЛистСостав
    |ГДЕ
    |    МаршрутныйЛистСостав.Ссылка = &Ссылка");
    Запрос.УстановитьПараметр("Ссылка",СсылкаНаОбъект);
    Макет = ПолучитьМакет("Макет");
    Таб = Новый ТабличныйДокумент;
    Область = Макет.ПолучитьОбласть("Шапка");
    Область.Параметры.Номер = СсылкаНаОбъект.Номер;
    Область.Параметры.Дата = Формат(СсылкаНаОбъект.Дата,"ДЛФ=D");
    Область.Параметры.Водитель = СсылкаНаОбъект.Водитель.Наименование+"   ____________________________________/подпись/";
    Таб.Вывести(Область);
    Область = Макет.ПолучитьОбласть("Строка");
    Область.Параметры.Состояние = СсылкаНаОбъект.Состояние;
    Выборка = Запрос.Выполнить().Выбрать();
    Ном = 1;
    Пока Выборка.Следующий() Цикл
        Область.Параметры.Заполнить(Выборка);
        Область.Параметры.Ном = Ном;
        Ном = Ном+1;
        Таб.Вывести(Область);
    КонецЦикла;
    Возврат Таб;
КонецФункции
1 Вася Чез
 
22.04.15
08:32
(0) а в чём ошибка?
2 Остап Сулейманович
 
22.04.15
08:33
(0) "Написал код, не пойму в чем ошибка" А кто сказал, что в коде ошибка?
3 neo-55555
 
22.04.15
08:33
состояние в печатной форме пустое. Он не берет его из маршрутного листа. Не пойму почему
4 neo-55555
 
22.04.15
08:35
Вот я и не знаю в чем проблема, помогите разобраться. Плиз
5 Остап Сулейманович
 
22.04.15
08:36
(3) В макете поле "Состояние" в какой секции? "Строка" или "Шапка"?
6 Вася Чез
 
22.04.15
08:36
(3) запрос выбирает состояния? поюзай консоль запросов и посмотри выборку, ну или в коде отладчиком глянь
7 neo-55555
 
22.04.15
08:37
В макете "Состояние" в секции Строка
8 Остап Сулейманович
 
22.04.15
08:37
(6) У него каша в выводе областей макета. А не в запросе.
9 ILM
 
гуру
22.04.15
08:38
Исправь в запросе
|   МаршрутныйЛистСостав.Состояние КАК Состояние
10 ILM
 
гуру
22.04.15
08:39
|   МаршрутныйЛистСостав.Ссылка.Состояние КАК Состояние

Вернее вот так
11 Остап Сулейманович
 
22.04.15
08:40
(9) Да. Точно.
12 neo-55555
 
22.04.15
08:41
Всё равно "Состояние" пустое значение выдает
13 Вася Чез
 
22.04.15
08:45
(12) как вы так код пишите? не проверили запрос и сразу пустой результат суете в макет. Накладная тоже пустое поле?
14 neo-55555
 
22.04.15
08:50
"Накладная" выходит нормально. Т.е. список накладных, содержащий маршрутный лист
15 Вася Чез
 
22.04.15
08:50
(14) а какой тип у Состояния? строка?
16 neo-55555
 
22.04.15
08:52
Да, строка
17 neo-55555
 
22.04.15
09:11
А что в Макете может быть не так? Если код верный
18 surpriz
 
22.04.15
09:11
В запросе выьираешь состояние из табличной части. Дальше: сначала устанавливаешь состояние из документа:
"Область.Параметры.Состояние = СсылкаНаОбъект.Состояние;
"
А потом затираеши это состояние текстом "Область.Параметры.Заполнить(Выборка);
"
19 neo-55555
 
22.04.15
09:20
В итоге код получился:

Функция Печать() Экспорт
    Если не СсылкаНаОбъект.Проведен Тогда
        ВызватьИсключение "Складские накладные нельзя печатать для непроведенного документа";
    КонецЕсли;
    Макет = ПолучитьМакет("Макет");
    Запрос = Новый Запрос(
    "ВЫБРАТЬ
    |    МаршрутныйЛистСостав.Документ.Контрагент КАК Контрагент,
    |    МаршрутныйЛистСостав.Документ КАК Накладная,
    |   МаршрутныйЛистСостав.Ссылка.Состояние КАК Состояние
    |ИЗ
    |    Документ.МаршрутныйЛист.Состав КАК МаршрутныйЛистСостав
    |ГДЕ
    |    МаршрутныйЛистСостав.Ссылка = &Ссылка");
    Запрос.УстановитьПараметр("Ссылка",СсылкаНаОбъект);
    Макет = ПолучитьМакет("Макет");
    Таб = Новый ТабличныйДокумент;
    Область = Макет.ПолучитьОбласть("Шапка");
    Область.Параметры.Номер = СсылкаНаОбъект.Номер;
    Область.Параметры.Дата = Формат(СсылкаНаОбъект.Дата,"ДЛФ=D");
    Область.Параметры.Водитель = СсылкаНаОбъект.Водитель.Наименование+"   ____________________________________/подпись/";
    Таб.Вывести(Область);
    Область = Макет.ПолучитьОбласть("Строка");
    Выборка = Запрос.Выполнить().Выбрать();
    Область.Параметры.Состояние = СсылкаНаОбъект.Состояние;
    Область.Параметры.Заполнить(Выборка);
    

    Ном = 1;
    Пока Выборка.Следующий() Цикл
        Область.Параметры.Заполнить(Выборка);
        Область.Параметры.Ном = Ном;
        Ном = Ном+1;
        Таб.Вывести(Область);
    КонецЦикла;
    Возврат Таб;
КонецФункции
20 neo-55555
 
22.04.15
09:21
Все равно столбец "Состояние" не заполняется
21 surpriz
 
22.04.15
09:32
МаршрутныйЛистСостав.Документ.Состояние КАК Состояние
22 surpriz
 
22.04.15
09:32
этот вариант уже предложили в (10)
23 neo-55555
 
22.04.15
09:36
Теперь  ошибку выдает:
Не удалось сформировать внешнюю печатную форму!
Ошибка при вызове метода контекста (Выполнить): {(4, 34)}: Поле не найдено "МаршрутныйЛистСостав.Документ.Состояние"
МаршрутныйЛистСостав.Документ.<<?>>Состояние КАК Состояние
24 surpriz
 
22.04.15
09:39
ответ (10) смотри
25 neo-55555
 
22.04.15
09:44
Блин, я походу туплю... Всё равно не заполняется "Состояние"
26 Вася Чез
 
22.04.15
09:45
МаршрутныйЛистСостав.Состояние.Ссылка КАК Состояние
это если Состояние реквизит документа
27 surpriz
 
22.04.15
09:46
или вот этот кусок:
Область.Параметры.Состояние = СсылкаНаОбъект.Состояние;

ПОСЛЕ
Область.Параметры.Заполнить(Выборка);
28 neo-55555
 
22.04.15
09:49
Ура. Всё получилось. В Итоге Запрос был не правильный. Нужно было написать: МаршрутныйЛистСостав.Состояние.Ссылка КАК Состояние.

А код выглядит теперь так:

Функция Печать() Экспорт
    Если не СсылкаНаОбъект.Проведен Тогда
        ВызватьИсключение "Складские накладные нельзя печатать для непроведенного документа";
    КонецЕсли;
    Макет = ПолучитьМакет("Макет");
    Запрос = Новый Запрос(
    "ВЫБРАТЬ
    |    МаршрутныйЛистСостав.Документ.Контрагент КАК Контрагент,
    |    МаршрутныйЛистСостав.Документ КАК Накладная,
    |   МаршрутныйЛистСостав.Состояние.Ссылка КАК Состояние
    |ИЗ
    |    Документ.МаршрутныйЛист.Состав КАК МаршрутныйЛистСостав
    |ГДЕ
    |    МаршрутныйЛистСостав.Ссылка = &Ссылка");
    Запрос.УстановитьПараметр("Ссылка",СсылкаНаОбъект);
    Макет = ПолучитьМакет("Макет");
    Таб = Новый ТабличныйДокумент;
    Область = Макет.ПолучитьОбласть("Шапка");
    Область.Параметры.Номер = СсылкаНаОбъект.Номер;
    Область.Параметры.Дата = Формат(СсылкаНаОбъект.Дата,"ДЛФ=D");
    Область.Параметры.Водитель = СсылкаНаОбъект.Водитель.Наименование+"   ____________________________________/подпись/";
    Таб.Вывести(Область);
    Область = Макет.ПолучитьОбласть("Строка");
    Выборка = Запрос.Выполнить().Выбрать();
    Область.Параметры.Состояние = СсылкаНаОбъект.Состояние;
    Область.Параметры.Заполнить(Выборка);
    
       Ном = 1;
    Пока Выборка.Следующий() Цикл
        Область.Параметры.Заполнить(Выборка);
        Область.Параметры.Ном = Ном;
        Ном = Ном+1;
        Таб.Вывести(Область);
    КонецЦикла;
    Возврат Таб;
КонецФункции
29 neo-55555
 
22.04.15
09:49
Всем большое спасибо, за помощь!
30 Вася Чез
 
22.04.15
09:50
(28) я победил)
31 neo-55555
 
22.04.15
10:00
Спасибо, Вася Чез
Закон Брукера: Даже маленькая практика стоит большой теории.