Ребят помогите разобраться. Нужно сделать внешнюю печатную форму к счету покупателя, создал внешнюю обработку макет, данные из счета приходят.
Но мне необходимо подтянуть еще Дополнительные сведения по документу - которые я для него создал. Лежат они в РегистрСведений.ДополнительныеСведения
Я в функции СформироватьПечатнуюФорму сделал Запрос, но никак не могу вытянуть данные из него на форму. Ниже пример кода, Запрос в общем модуле.
Но мне необходимо подтянуть еще Дополнительные сведения по документу - которые я для него создал. Лежат они в РегистрСведений.ДополнительныеСведения
Я в функции СформироватьПечатнуюФорму сделал Запрос, но никак не могу вытянуть данные из него на форму. Ниже пример кода, Запрос в общем модуле.
Функция СформироватьПечатнуюФорму(СсылкаНаОбъект, ОбъектыПечати) Экспорт
//Макет = РеквизитФормыВЗначение("Объект").ПолучитьМакет("Макет1");
ТабДок = Новый ТабличныйДокумент;
Макет = ПолучитьМакет("Макет1");
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ДополнительныеСведения.Объект,
| ДополнительныеСведения.Значение,
| ДополнительныеСведения.Свойство.Наименование КАК Наименование
|ИЗ
| РегистрСведений.ДополнительныеСведения КАК ДополнительныеСведения
|ГДЕ
| ДополнительныеСведения.Объект.Ссылка = &СсылкаНаОбъект";
Запрос.УстановитьПараметр("СсылкаНаОбъект", СсылкаНаОбъект);
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетЗап = РезультатЗапроса.Выбрать();
ТабДок.Очистить();
ОбластьШапки = Макет.ПолучитьОбласть("Шапка");
ОбластьДанные = Макет.ПолучитьОбласть("Данные");
ОбластьПодвал = Макет.ПолучитьОбласть("Подвал");
ОбластьШапки.Параметры.Номер = СсылкаНаОбъект.ДоговорКонтрагента.Номер;
ОбластьШапки.Параметры.Дата = Формат(СсылкаНаОбъект.ДоговорКонтрагента.Дата,"ДЛФ=DD");
Пока ВыборкаДетЗап.Следующий() Цикл
ОбластьДанные.Параметры.Маркировка = ВыборкаДетЗап.Маркировка;
КонецЦикла;
// Маркировка = РезультатЗапроса.Наименование;
ТабДок.Вывести(ОбластьШапки);
ОбластьДанные.Параметры.ДатаДокумента = Формат(СсылкаНаОбъект.Дата,"ДЛФ=DD");
ОбластьДанные.Параметры.НомерСчета = СсылкаНаОбъект.Номер;
ОбластьДанные.Параметры.Клиент = СсылкаНаОбъект.Контрагент;
ОбластьДанные.Параметры.ИНН = СсылкаНаОбъект.Контрагент.ИНН;
ОбластьДанные.Параметры.КПП = СсылкаНаОбъект.Контрагент.КПП;
ОбластьДанные.Параметры.АдресДоставки = СсылкаНаОбъект.АдресДоставки;
ОбластьДанные.Параметры.Исполнитель = СсылкаНаОбъект.Организация;
ОбластьДанные.Параметры.ИННОрг = СсылкаНаОбъект.Организация.ИНН;
ОбластьДанные.Параметры.КППОрг = СсылкаНаОбъект.Организация.КПП;
ОбластьДанные.Параметры.АдресОрг = СсылкаНаОбъект.Организация;
//ОбластьДанные.Параметры.Маркировка = Маркировка;
ТабДок.Вывести(ОбластьДанные);
ТабДок.Вывести(ОбластьПодвал);
Возврат ТабДок;
КонецФункции // Печать()
ПоказатьПо теме из базы знаний
- Перенос данных из УТ 10.3 в УТ 11 / КА 2 / ERP 2. Переносятся документы, справочники и остатки
- Перенос данных из УНФ 3.0 / УНФ 1.6 в УПП 1.3 / КА 1.1 / УТ 10.3. Переносятся документы и справочная информация
- Как читать чужой код? Часть 3. Разбор и доработка запросов
- Где деньги, Зин? Или как загрузить информацию из банка, если у вас 200 000 операций в день?
- Применение 1С:Аналитики и Дата акселератора, или Как получить в 1С прозрачность и скорость обработки данных для прямого доступа и контроля руководителя
Найденные решения
(1)
А запрос возвращает поле "Маркировка" ? Нет, значит и обращаться к нему ты не можешь.
Как вариант можно попробовать следующее:
ОбластьДанные.Параметры.Маркировка = ВыборкаДетЗап.Маркировка;
А запрос возвращает поле "Маркировка" ? Нет, значит и обращаться к нему ты не можешь.
Как вариант можно попробовать следующее:
// ошибки не смотрим, пишу в блокноте
ДопПоля = новый Структура;
Пока ВыборкаДетЗап.Следующий() Цикл
ДоПоля.Вставить(ВыборкаДетЗап.Наименование, ВыборкаДетЗап.Значение);
КонецЦикла;
ОбластьДанные.Параметры.Заполнить(ДопПоля);
ПоказатьОстальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1)
А запрос возвращает поле "Маркировка" ? Нет, значит и обращаться к нему ты не можешь.
Как вариант можно попробовать следующее:
ОбластьДанные.Параметры.Маркировка = ВыборкаДетЗап.Маркировка;
А запрос возвращает поле "Маркировка" ? Нет, значит и обращаться к нему ты не можешь.
Как вариант можно попробовать следующее:
// ошибки не смотрим, пишу в блокноте
ДопПоля = новый Структура;
Пока ВыборкаДетЗап.Следующий() Цикл
ДоПоля.Вставить(ВыборкаДетЗап.Наименование, ВыборкаДетЗап.Значение);
КонецЦикла;
ОбластьДанные.Параметры.Заполнить(ДопПоля);
Показать
(4) Спасибо, разобрался что нужно сопоставить наименование колонки и если совпадаает, беру оттуда значение.
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ДополнительныеСведения.Объект,
| ДополнительныеСведения.Значение,
| ДополнительныеСведения.Свойство КАК Наименование,
| СчетНаОплатуПокупателюТовары.Ссылка,
| СчетНаОплатуПокупателюТовары.Номенклатура,
| СчетНаОплатуПокупателюТовары.Ссылка.Организация КАК Грузоотправитель,
| СчетНаОплатуПокупателюТовары.Ссылка.Контрагент КАК Грузополучатель,
| СчетНаОплатуПокупателюТовары.Ссылка.Дата,
| СчетНаОплатуПокупателюТовары.Ссылка.Контрагент.ЮридическоеФизическоеЛицо
|ИЗ
| РегистрСведений.ДополнительныеСведения КАК ДополнительныеСведения
| ЛЕВОЕ СОЕДИНЕНИЕ Документ.СчетНаОплатуПокупателю.Товары КАК СчетНаОплатуПокупателюТовары
| ПО ДополнительныеСведения.Объект = СчетНаОплатуПокупателюТовары.Ссылка
|ГДЕ
| ДополнительныеСведения.Объект.Ссылка = &СсылкаНаОбъект";
Запрос.УстановитьПараметр("СсылкаНаОбъект", СсылкаНаОбъект);
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетЗап = РезультатЗапроса.Выбрать();
ТабДок.Очистить();
Пока ВыборкаДетЗап.Следующий() Цикл
Если СтрНачинаетсяС(ВыборкаДетЗап.Наименование,"Маркировка") Тогда
ОбластьДанные.Параметры.Маркировка = ВыборкаДетЗап.Значение;
Показать
(5) Плохой запрос. Нелогичный. Зачем объединять ДопСведения со счетом ? Правильней будет одним запросом выбрать поля счета, вторым доп сведения. И во вторых если у счета не будет указано ни одного доп сведения он и печататься не будет.
(7) в итоге сделал вот так, запрос изменил
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| СчетНаОплатуПокупателюТовары.Ссылка КАК Ссылка,
// | СчетНаОплатуПокупателюТовары.Номенклатура КАК Номенклатура,
| СчетНаОплатуПокупателюТовары.Ссылка.Организация КАК Грузоотправитель,
| СчетНаОплатуПокупателюТовары.Ссылка.Контрагент КАК Грузополучатель,
| СчетНаОплатуПокупателюТовары.Ссылка.Дата КАК Дата,
| СчетНаОплатуПокупателюТовары.Ссылка.Контрагент.ЮридическоеФизическоеЛицо КАК КонтрагентЮридическоеФизическоеЛицо,
| ДополнительныеСведения.Свойство КАК Наименование,
| ДополнительныеСведения.Значение КАК Значение
|ИЗ
| РегистрСведений.ДополнительныеСведения КАК ДополнительныеСведения
//| ПОЛНОЕ СОЕДИНЕНИЕ Документ.СчетНаОплатуПокупателю.Товары КАК СчетНаОплатуПокупателюТовары
| ПОЛНОЕ СОЕДИНЕНИЕ Документ.СчетНаОплатуПокупателю КАК СчетНаОплатуПокупателюТовары
| ПО (СчетНаОплатуПокупателюТовары.Ссылка = ДополнительныеСведения.Объект)
|ГДЕ
| СчетНаОплатуПокупателюТовары.Ссылка = &СсылкаНаОбъект";
Запрос.УстановитьПараметр("СсылкаНаОбъект", СсылкаНаОбъект);
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетЗап = РезультатЗапроса.Выбрать();
ТабДок.Очистить();
ОбластьШапки = Макет.ПолучитьОбласть("Шапка");
ОбластьДанные = Макет.ПолучитьОбласть("Данные");
ОбластьПодвал = Макет.ПолучитьОбласть("Подвал");
ОбластьШапки.Параметры.Номер = СсылкаНаОбъект.ДоговорКонтрагента.Номер;
ОбластьШапки.Параметры.Дата = Формат(СсылкаНаОбъект.ДоговорКонтрагента.Дата,"ДЛФ=DD");
Пока ВыборкаДетЗап.Следующий() Цикл
СведенияОГрузоотправитель = БухгалтерскийУчетПереопределяемый.СведенияОЮрФизЛице(ВыборкаДетЗап.Грузоотправитель, ВыборкаДетЗап.Дата);
СведенияОГрузополучателе = БухгалтерскийУчетПереопределяемый.СведенияОЮрФизЛице(ВыборкаДетЗап.Грузополучатель, ВыборкаДетЗап.Дата);
Если СтрНачинаетсяС(ВыборкаДетЗап.Наименование,"Маркировка") Тогда
ОбластьДанные.Параметры.Маркировка = ВыборкаДетЗап.Значение;
Показать
(8) Мда, А почему основная таблица у тебя ДополнительныеСведения, а не счет на оплату??? Ты же печатаешь счет и если у него указаны доп сведения их надо вывести.... Логично что основная таблица должна быть счет на оплату, а к ней уже левым соединением дополнительные сведения???
Но опять же это не лучший вариант.... Попробуй в консоли запросов выполнить свой код, и тот что ниже
Какой быстрее???
Но опять же это не лучший вариант.... Попробуй в консоли запросов выполнить свой код, и тот что ниже
"ВЫБРАТЬ
| СчетНаОплатуПокупателюТовары.Ссылка КАК Ссылка,
// | СчетНаОплатуПокупателюТовары.Номенклатура КАК Номенклатура,
| СчетНаОплатуПокупателюТовары.Ссылка.Организация КАК Грузоотправитель,
| СчетНаОплатуПокупателюТовары.Ссылка.Контрагент КАК Грузополучатель,
| СчетНаОплатуПокупателюТовары.Ссылка.Дата КАК Дата,
| СчетНаОплатуПокупателюТовары.Ссылка.Контрагент.ЮридическоеФизическоеЛицо КАК КонтрагентЮридическоеФизическоеЛицо
|ИЗ
| Документ.СчетНаОплатуПокупателю КАК СчетНаОплатуПокупателюТовары
|ГДЕ
| СчетНаОплатуПокупателюТовары.Ссылка = &СсылкаНаОбъект;
|///////////////////////////////////////////
|Выбрать
| ДополнительныеСведения.Свойство КАК Наименование,
| ДополнительныеСведения.Значение КАК Значение
|ИЗ
| РегистрСведений.ДополнительныеСведения КАК ДополнительныеСведения
|ГДЕ
| ДополнительныеСведения.Объект = &СсылкаНаОбъект";
ПоказатьКакой быстрее???
(9) В итоге вышло вот так
Я после запроса решил делать поиск по наименованию, доп сведений не так много. Получилось все на ура, уже сдал
Запрос.Текст =
"ВЫБРАТЬ
| СчетНаОплатуПокупателюТовары.Ссылка КАК Ссылка,
// | СчетНаОплатуПокупателюТовары.Номенклатура КАК Номенклатура,
| СчетНаОплатуПокупателюТовары.Ссылка.Организация КАК Грузоотправитель,
| СчетНаОплатуПокупателюТовары.Ссылка.Контрагент КАК Грузополучатель,
| СчетНаОплатуПокупателюТовары.Ссылка.Дата КАК Дата,
| СчетНаОплатуПокупателюТовары.Ссылка.Контрагент.ЮридическоеФизическоеЛицо КАК КонтрагентЮридическоеФизическоеЛицо,
| ДополнительныеСведения.Свойство КАК Наименование,
| ДополнительныеСведения.Значение КАК Значение
|ИЗ
| РегистрСведений.ДополнительныеСведения КАК ДополнительныеСведения
//| ПОЛНОЕ СОЕДИНЕНИЕ Документ.СчетНаОплатуПокупателю.Товары КАК СчетНаОплатуПокупателюТовары
| ПОЛНОЕ СОЕДИНЕНИЕ Документ.СчетНаОплатуПокупателю КАК СчетНаОплатуПокупателюТовары
| ПО (СчетНаОплатуПокупателюТовары.Ссылка = ДополнительныеСведения.Объект)
|ГДЕ
| СчетНаОплатуПокупателюТовары.Ссылка = &СсылкаНаОбъект";
Запрос.УстановитьПараметр("СсылкаНаОбъект", СсылкаНаОбъект);
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетЗап = РезультатЗапроса.Выбрать();
ТабДок.Очистить();
Если СтрНачинаетсяС(ВыборкаДетЗап.Наименование,"Маркировка") Тогда
ОбластьДанные.Параметры.Маркировка = ВыборкаДетЗап.Значение;
ИначеЕсли СтрНачинаетсяС(ВыборкаДетЗап.Наименование,"Товарный") Тогда
ОбластьДанные.Параметры.ТоварныйКод = ВыборкаДетЗап.Значение;
ПоказатьЯ после запроса решил делать поиск по наименованию, доп сведений не так много. Получилось все на ура, уже сдал
Внимание! Тема сдана в архив
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот