Имя: Пароль:
1C
1С v8
Простая задача - вывод реквизита документа в печатную форму
0 YDen
 
01.10.24
16:12
Здравствуйте.
Подскажите пожалуйста. В свое время писал на 7.7, потом большой перерыв был. Сейчас сел за 8.3. Задача простая, но не вдупляю.
Заведено Перечисление.КалендарьДень, в нем установлены значения (1, 2 , 3... 10). Заведен документ. В его реквизитах заведен объект НомерДень, имеющий тип ПеречислениеСсылка.КалендарьДень. В форму документа добавлено поле, путькданным Объект.КалендарьДень. Здесь все ок, в форме документа можно выбрать в нужном поле значение из перечисления (1, 2, 3...). Нужно, чтобы в печатной форме выводилось значение этого поля.
Что сделал. В печатной форме в ячейку добавил Заполнение Параметр с параметром КалендарьДень. Запускаю печатную форму - нужная ячейка пуста.
Плиз, где моя ошибка?

благодарю
1 mikecool
 
01.10.24
16:13
надо заполнить значение параметра кодом
посмотри, как рядом написано
2 YDen
 
01.10.24
16:18
(1) Конфигурация с нуля написана. Нет образца.
3 Волшебник
 
01.10.24
16:19
(2) Ну написана же
4 Волшебник
 
01.10.24
16:19
Почему дней всего 10 ?
5 YDen
 
01.10.24
16:21
(4) Взял простую задачу, чтобы понять 8.3. Я не студент :)
Это десятидневное меню (столовая).
6 YDen
 
01.10.24
16:23
(3) Вывел в печатную форму реквизит Организация, имеющий тип Строка. Но с другим реквизитом с типом Перечисление туплю.
7 formista2000
 
01.10.24
16:23
(5) А если в месяце 31 день или 28?
8 Волшебник
 
01.10.24
16:24
(5) Заведите справочник "Меню" с реквизитом "НомерДня"
9 YDen
 
01.10.24
16:24
Может так понятнее :)
10 YDen
 
01.10.24
16:26
(7) Столовая, сегодня меню первого дня, завтра второго, послезавтра 3 .... десятого дня и потом по новой 1, 2, 3...
11 DiMel_77
 
01.10.24
16:28
(0) https://its.1c.ru/db/metod8dev/content/2466/hdoc

Как получить имя значения перечисления заданное в метаданных?

Чтобы определить имя значения перечисления заданное в метаданных, имея значение типа ПеречислениеСсылка, необходимо найти объект метаданных и получить его имя.

Метод Метаданные объекта ПеречислениеСсылка, как и у других аналогичных типов, выдает объект метаданных перечисления, а не значения перечисления.

Поиск объекта метаданных значения перечисления может быть выполнен по индексу значения перечисления, полученного у менеджера перечисления.

Например:

ЗначениеПеречисления = Перечисления.ВидыКонтрагентов.Организация;

ИмяПеречисления = ЗначениеПеречисления.Метаданные().Имя;

ИндексЗначенияПеречисления = Перечисления[ИмяПеречисления].Индекс(ЗначениеПеречисления);

ИмяЗначенияПеречисления = Метаданные.Перечисления[ИмяПеречисления].ЗначенияПеречисления[ИндексЗначенияПеречисления].Имя;
12 Климов Сергей
 
01.10.24
16:29
(0) Процедура печати документа должна в качестве параметра получить ссылку на печатаемый документ. Или массив ссылок, если используется БСП. Предположу, что БСП не используется. Тогда в коде должна быть конструкция примерно такого вида:

ОбластьОтчета.Параметры.НомерДень = ДокСсылка.НомерДень;
13 Prog_man
 
01.10.24
16:30
(0) покажи уже код где заполняются параметры
14 YDen
 
01.10.24
16:32
(8) Сделал, изменил на него ссылку в реквизите документа. Заполнил справочник. Выбираю нужный элемент его в форме документа - ок. В печатной форме пустая ячейка.
15 Волшебник
 
01.10.24
16:33
(9) Нет скриншота
16 YDen
 
01.10.24
16:33
Я пробую по лекалам версии 7.7. В 8.3 это не взлетает.
17 YDen
 
01.10.24
16:34
(15)
18 Волшебник
 
01.10.24
16:36
(17) А что такое "Выход"?
19 YDen
 
01.10.24
16:38
(18) Масса. Числовые значения в полях - от фонаря.
20 Смотрящий
 
01.10.24
16:39
Покаж что у тебя между

МакетОбласть = Макет.ПолучитьОбласть("Шапка");
....
и
...
ТабличныйДокумент.Вывести(МакетОбласть);
21 YDen
 
01.10.24
16:39
(18)
22 Ногаминебить
 
01.10.24
16:40
Строка(КалендарьДень) не взлетает?
23 YDen
 
01.10.24
16:41
(20) В модуле документа это:

// служебная функция получения значения реквизита объекта (выполняется на сервере)
&НаСервере
Функция ЗначениеРеквизита(Объект,ИмяРеквизита);
Возврат Объект[ИмяРеквизита];
сообщить("вася");

КонецФункции

// обработчик события "ПриИзменении" поля "Контрагент" в табличном поле "Контрагенты"
&НаКлиенте
Процедура ТабличнаяЧасть1РецептПриИзменении(Элемент)
ТекДанные = Элементы.ТабличнаяЧасть1.ТекущиеДанные;
//сообщить("ТекДанные");
ТекДанные.НазваниеБлюда = ЗначениеРеквизита(ТекДанные.Рецепт,"Блюдо");
ТекДанные.Выход = ЗначениеРеквизита(ТекДанные.Рецепт,"Выход");
ТекДанные.Цена = ЗначениеРеквизита(ТекДанные.Рецепт,"Цена");
ТекДанные.Калорийность = ЗначениеРеквизита(ТекДанные.Рецепт,"Калорийность");
ТекДанные.Белки = ЗначениеРеквизита(ТекДанные.Рецепт,"Белки");
ТекДанные.Жиры = ЗначениеРеквизита(ТекДанные.Рецепт,"Жиры");
ТекДанные.Углеводы = ЗначениеРеквизита(ТекДанные.Рецепт,"Углеводы");

//ТекДанные.НазваниеБлюда = ЗначениеРеквизита(ТекДанные.Блюдо,"НазваниеБлюда");

КонецПроцедуры

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

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

&НаСервере
Процедура ПриЧтенииНаСервере(ТекущийОбъект)
ОбновитьДанныеКолонкиБлюдо();
сообщить("вася");

КонецПроцедуры

&НаСервере
Процедура ПослеЗаписиНаСервере(ТекущийОбъект, ПараметрыЗаписи)
ОбновитьДанныеКолонкиБлюдо();
сообщить("вася");

КонецПроцедуры

&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Если Объект.Ссылка.Пустая()
  Тогда Объект.Организация = Константы.Организация.Получить();
  КонецЕсли;
КонецПроцедуры

&НаСервере
Процедура СохранитьНаСервере()
    ТабДок = Новый ТабличныйДокумент;
    Макет = Обработки.ТабличныйДокументСохранитьВPDF.ПолучитьМакет("Макет");
    ОбластьМакета = Макет.ПолучитьОбласть("Шапка");
    ТабДок.Вывести(ОбластьМакета);
    
    //МестоположениеФайла  = "G:\ProverkaZapisi\Тест.pdf";
    //ТабДок.Записать(МестоположениеФайла , ТипФайлаТабличногоДокумента.PDF);
    
    //Запись в Excel
    МестоположениеФайла  = "C:\Тест.XLSX";
    ТабДок.Записать(МестоположениеФайла , ТипФайлаТабличногоДокумента.XLSX);
    Сообщить("Вася");
    //Запись в Word
    //МестоположениеФайла  = "G:\ProverkaZapisi\Тест.docx";
    //ТабДок.Записать(МестоположениеФайла , ТипФайлаТабличногоДокумента.DOCX);
    
    //Прочие форматы
    //ТипФайлаТабличногоДокумента поддерживает множество форматов
    //html5, mxl, txt, ods, можете поэксперементировать с различными форматами

    Сообщить("Файл успешно сохранен");
КонецПроцедуры

&НаСервере
Процедура ОбработкаДвижений(Отказ, Режим)
   СохранитьНаСервере()

КонецПроцедуры

////&НаКлиенте
////Процедура ПриОткрытии()
//Объект.Организация = СокрЛП(Константы.Организация.Получить());
//  
//Сообщить("Форма обновилась");
//КонецПроцедуры

////chatgpd
//&НаКлиенте
//Процедура РецептПриИзменении(Элемент, Событие)
//    // Получаем ссылку на выбранный элемент справочника
//    Справочник = Элемент.СправочникСсылка("НомерРецепта").ВыбранныйЭлемент();
//    
//    // Получаем необходимые значения из выбранного элемента справочника
//    Блюдо = Справочник.Блюдо;
//    Выход = Справочник.Выход;
//    Цена = Справочник.Цена;
//    Калорийность = Справочник.Калорийность;
//    Белки = Справочник.Белки;
//    Жиры = Справочник.Жиры;
//    Углеводы = Справочник.Углеводы;
//    
//    // Устанавливаем значения полученных полей в соответствующие реквизиты ТЧ документа
//    Элемент.НазваниеБлюда = Блюдо;
//    Элемент.Выход = Выход;
//    Элемент.Цена = Цена;
//    Элемент.Калорийность = Калорийность;
//    Элемент.Белки = Белки;
//    Элемент.Жиры = Жиры;
//    Элемент.Углеводы = Углеводы;
//КонецПроцедуры
24 YDen
 
01.10.24
16:43
(22) Если вы про это, то видна:
25 Смотрящий
 
01.10.24
16:45
ОбластьМакета = Макет.ПолучитьОбласть("Шапка");
ОбластьМакета.Параметр.КалендарьДень = "нихрена";
ТабДок.Вывести(ОбластьМакета);
26 Доминошник
 
01.10.24
16:47
(23) Всё же - после того, как мы получили область и перед тем, как её вывести - хорошо бы заполнить параметры.
27 Волшебник
 
01.10.24
16:47
(23) //chatgpd
???
28 YDen
 
01.10.24
16:48
(25) "нихрена" не выводит.
29 YDen
 
01.10.24
16:49
(27) Я С полгода назад пробовал нейронку :)
30 Смотрящий
 
01.10.24
16:49
.Параметры.
пардон
31 YDen
 
01.10.24
16:51
(30) Пусто.
Процедура СохранитьНаСервере()
    ТабДок = Новый ТабличныйДокумент;
    Макет = Обработки.ТабличныйДокументСохранитьВPDF.ПолучитьМакет("Макет");
    ОбластьМакета = Макет.ПолучитьОбласть("Шапка");
    ОбластьМакета.Параметры.КалендарьДень = "нихрена";
    ТабДок.Вывести(ОбластьМакета);
    
    //МестоположениеФайла  = "G:\ProverkaZapisi\Тест.pdf";
    //ТабДок.Записать(МестоположениеФайла , ТипФайлаТабличногоДокумента.PDF);
    
    //Запись в Excel
    МестоположениеФайла  = "C:\Тест.XLSX";
    ТабДок.Записать(МестоположениеФайла , ТипФайлаТабличногоДокумента.XLSX);
    Сообщить("Вася");
    //Запись в Word
    //МестоположениеФайла  = "G:\ProverkaZapisi\Тест.docx";
    //ТабДок.Записать(МестоположениеФайла , ТипФайлаТабличногоДокумента.DOCX);
    
    //Прочие форматы
    //ТипФайлаТабличногоДокумента поддерживает множество форматов
    //html5, mxl, txt, ods, можете поэксперементировать с различными форматами

    Сообщить("Файл успешно сохранен");
КонецПроцедуры
32 Доминошник
 
01.10.24
16:53
Вообще, судя по тексту в (23) и картинке в (28) - либо не та база, либо не тот документ...
33 Ногаминебить
 
01.10.24
16:54
Макет = Обработки.ТабличныйДокументСохранитьВPDF.ПолучитьМакет("Макет");

А можно вот именно этот макет посмотреть?
А то на картинке другой, который в документе.
34 YDen
 
01.10.24
16:55
(32) У меня он единственный документ.
35 YDen
 
01.10.24
16:57
(33) так у меня конфигурация из нескольких справочников, одного перечисления и документа. Никаких обработок.
36 YDen
 
01.10.24
17:01
В столовой на каждый день формируется меню. Его нужно выложить на сайт в xlsx формате по определенному шаблону (именно поэтому есть поле не Масса, а Выход - требования.
Вручную задолбался править эту таблицу после рук завстоловой.
Сделал на 7.7 простую конфигурацию. Но 7.7 умеет только xls, в xlsx через костыли - проще руками. Поэтому решил с нуля на 8.3.
37 Доминошник
 
01.10.24
17:02
(35) Тогда что делает строка:
Макет = Обработки.ТабличныйДокументСохранитьВPDF.ПолучитьМакет("Макет");

???

Вообще - базу в облако, ссылку сюда...
Иначе я, к примеру, вообще не вижу связи показываемых "картинок" и "текстов"
38 osa1C
 
01.10.24
17:02
(35) Как же ты берешь макет из обработки, которой нет?
Макет = Обработки.ТабличныйДокументСохранитьВPDF.ПолучитьМакет("Макет");

Тут обращение к обработке ТабличныйДокументСохранитьВPDF
39 YDen
 
01.10.24
17:06
40 Волшебник
 
01.10.24
17:07
Надо переделать структуру конфигурации
41 Доминошник
 
01.10.24
17:09
(39) Печать - в модуле менеджера твоего документа


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

    //ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
    Шапка = Макет.ПолучитьОбласть("Шапка");
    ОбластьТабличнаяЧасть1Шапка = Макет.ПолучитьОбласть("ТабличнаяЧасть1Шапка");
    ОбластьТабличнаяЧасть1 = Макет.ПолучитьОбласть("ТабличнаяЧасть1");
    ТабДок.Очистить();

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

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

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

        ТабДок.Вывести(ОбластьТабличнаяЧасть1Шапка);
        ВыборкаТабличнаяЧасть1 = Выборка.ТабличнаяЧасть1.Выбрать();
        Пока ВыборкаТабличнаяЧасть1.Следующий() Цикл
            ОбластьТабличнаяЧасть1.Параметры.Заполнить(ВыборкаТабличнаяЧасть1);
            ТабДок.Вывести(ОбластьТабличнаяЧасть1, ВыборкаТабличнаяЧасть1.Уровень());
        КонецЦикла;

        ВставлятьРазделительСтраниц = Истина;
    КонецЦикла;
    //}}
КонецПроцедуры


42 YDen
 
01.10.24
17:12
(41) Сюда вставить?
43 Волшебник
 
01.10.24
17:13
Переименуйте ТабличнаяЧасть1, наконец... В глазах рябит
44 Доминошник
 
01.10.24
17:15
(42) Это всё уже есть в модуле менеджера твоего документа!

Видно - и запрос, которым получаются данные, далее вставляемые в макет, и заполнение параметров макета.
45 osa1C
 
01.10.24
17:14
(42) Это модуль формы, а тебе говорят про модуль менеджера
46 СвинТуз
 
01.10.24
17:16
(0)
Что видно по вашему коду?

Вы на 7.7 с лету стали писать?
Может не стоит морочить голову благородным донам и
прочесть букварь по 8.3?

Радченко есть в свободном доступе, особенно при проплаченном ИТС.
47 СвинТуз
 
01.10.24
17:16
48 YDen
 
01.10.24
17:21
(41) Гугл в помощь, нашел этот менеджер.
В печатной форме в нужном поле пусто.
49 YDen
 
01.10.24
17:23
(46) Я же не требую помощи.
Если есть желание помочь - приму.
50 Доминошник
 
01.10.24
17:28
(48) Если последнее предложение "В печатной форме в нужном поле пусто." это вопрос, то ответ - "Да, пусто!"

Что сделать, чтобы не было пусто?
Достаточно изменить запрос.

Как? Ну, хотя бы с этим-то нужно самому разобраться (или заново запустить конструктор)
51 YDen
 
01.10.24
17:30
(50) +
52 YDen
 
01.10.24
17:31
(50) Благодарю.
53 YDen
 
01.10.24
17:31
(43) Благодарю.
54 YDen
 
01.10.24
17:31
(45) Благодарю.
55 osa1C
 
01.10.24
17:33
(49) тут сложно чем-то помочь. Потому что, уж простите, неправильно всё, или почти всё. Конкретно сейчас вам нужно запрос исправить, но для этого надо понимать язык запросов 1С 8х
56 YDen
 
01.10.24
17:34
Ок, начинаю понимать.
Удачного дня\вечера всем.
57 СвинТуз
 
01.10.24
17:46
(56)
Если коротко, то сервер сам по себе ничего не знает о контексте формы. Может не знать.

____________________________________

В модуле документа это:

(выполняется на сервере)
&НаСервере
Функция

Не ожиданно.
58 СвинТуз
 
01.10.24
17:47
+ Параметры в выводимой области нужно заполнять ручками.

Контекст табличного документа живет сам по себе.
59 СвинТуз
 
01.10.24
17:50
То что Вы там что-то на форме изобразили со своим именем,
это одна история.

Параметры в выводимой области с теми же именами,
это уже другая история.

Если хотите, то разные объекты, разных классов.
Хотя куда им?
60 СвинТуз
 
01.10.24
17:51
Прочтите букварь ...
61 osa1C
 
01.10.24
17:56
(58) то что он хотел он добился. Код хоть и кривой, но рабочий
AdBlock убивает бесплатный контент. 1Сергей