Шаблон кода: Как в 1С обратиться к элементу формы
Для того чтобы обратиться к элементу формы из модуля объекта этой формы и передать значение в переменную:
Шаблон кода:
мМойДокумент = ЭтотОбъект.Ссылка.ПолучитьФорму(«ФормаДокумента»); // получаем форму документа
НашаПеременная = мМойДокумент.ЭлементыФормы.Дата.Значение; // передаем значение переменной
Для того чтобы обратиться к элементу формы из модуля формы документа:
Шаблон кода:
УПРАВЛЯЕМЫЕ ФОРМЫ
Для того чтобы обратиться к элементу формы из модуля формы документа:
Для того чтобы программно установить значение поля в табличной части документа в :
В данном случае при изменении поля ТекущаяДата происходит автозаполнение поля ОстатокОплаченыхДней.
Еще один пример — заполнение полей табличной части формы при начале редактирования:
Процедура ТабличнаяЧасть1ПриНачалеРедактирования(Элемент, НоваяСтрока, Копирование)
ТекущаяДата = Формат (ТекущаяДата (), «ДФ=dd.MM.yyyy» );
Если НоваяСтрока И Не Копирование Тогда
Элемент.ТекущиеДанные.ТекущаяДата = ТекущаяДата;
Элемент.ТекущиеДанные.Комментарий = «наш комментарий»;
КонецЕсли;
КонецПроцедуры
Для того чтобы записать какие-то данные в поле управляемой формы нужно создать прямо на форме элемент (реквизит создавать не нужно), например, поле ввода и прописать для него, например, результат функции в модуле формы:
Процедура ПриОткрытии(Отказ)
Реквизит1 = ПодсчетИтогаКассы();
КонецПроцедуры
Как обратиться к документу в 1с
Надо сделать печатную форму у документа который вводится на основании,но данные в печатной форме будут браться из документа,который является основанием
надо хранить ссылку на документ основание
См. «Счет-Фактура выданный»
1- как хранить ссылку?
(3) иметь реквизит, в который при создании документа на основании будет заноситься ссылка на документ-основание. уф.
(3) В реквизите.
Процедура ОбработкаЗаполнения(Основание)
Если ТипЗнч(Основание) = Тип(«ДокументСсылка.Расходная») Тогда
// Заполнение шапки
ДокОснование=Основание.Ссылка;
Покупатель = Основание.Контрагент;
Контакт=покупатель.КонтактноеЛицо;
КонтТелефон=покупатель.КонтТелефон;
КонецЕсли;
КонецПроцедуры
Для Каждого ТекСтрока из ДокОснование.Товар цикл
ТабОбл.Параметры.Товар=ДокОснование.Товар.номеклатура;
ТабОбл.Параметры.кол=ДокОснование.Товар.кол;
КонецЦикла;
1C обратиться к документу-основанию для вывода печатной формы
Нужно в печатной форме документа вывести данные из табличной части документа основания. Подскажите, как правильно сделать запрос к данным документа основания для вывода их на печать? Написала данный код, но он не работает. Пишет поле товары не найдено (а в док-те основании оно точно есть)
Процедура Печать(ТабДок, Ссылка) Экспорт //> КонецПроцедуры
Отслеживать
задан 30 дек 2016 в 18:32
103 3 3 серебряных знака 15 15 бронзовых знаков
Мне кажется в коде явно нарушена логика. Сложно сказать, не видя весь код. Например, что содержится в переменной «Выборка» и где определяется переменная «Ссылка».
30 дек 2016 в 21:04
@ Ella Svetlaya поместила весь код. В запросе 2 пытаюсь получить данные из документа основания. Вообще ничего не выводит, выдает ошибку
31 дек 2016 в 16:52
Опишите какая конфигурация используется, где в каком реквизите хранится документ основания, какой документ является первичным. Второй запрос у вас неверный — должен быть таким ВЫБРАТЬ * |ИЗ | Документ.РеализацияТоваров1.Товары КАК РеализацияТоваров1 |ГДЕ | РеализацияТоваров1.Ссылка = &ДокументОснование
31 дек 2016 в 18:38
@ivansoft Всего вторую неделю пытаюсь разобраться в 1с с нуля, так что извините за глупые вопросы. Я думала, что когда документ создаем на основании другого, в нем автоматом должна появляться ссылка на док.основание. Это не так?Я должна создать реквизит, где прописать ссылку на док.основание?
1 янв 2017 в 14:41
@ivansoft внесла изменение в код, как вы написали. Выдает ошибку: «: Ошибка при вызове метода контекста (Выполнить) Выборка2 = Запрос2.Выполнить().Выбрать(); по причине: <(13, 28)>: Не задано значение параметра «ДокументОснование» РеализацияТоваров1.Ссылка=>&ДокументОснование»Документ.ЗаявкаНаДоставку.МодульМенеджера(46)>
1 янв 2017 в 14:44
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
Несколько замечаний по коду:
- ЗаявкаНаДоставку.Ссылка В (&Ссылка) — бессмысленно использовать В, если в параметре — один документ. ЗаявкаНаДоставку.Ссылка = &Ссылка.
- Во втором запросе нет параметра Ссылка, а он зачем-то устанавливается. Зато не устанавливается нужный параметр ДокументОснование.
- Старайтесь все данные, которые нужно получить, получать в одном запросе. Если у Вас совсем разные данные в запросах — делайте несколько, но в пакетном запросе. Это повышает быстродействие за счёт уменьшения количества обращений к базе данных.
- Ответ на ваш комментарий — да, чтобы документ-основание был у другого документа, нужно создать реквизит в этом документе и вам нужно самостоятельно в коде позаботиться о том, чтобы этот реквизит заполнялся.
- Без полного описания того, что вы хотите, сложно вам помочь. Какие данные должны получаться из документа, а какие — из его основания? Какая между ними взаимосвязь? Общая схема запроса примерно отвечающего вашим условиям:
ВЫБРАТЬ ВозвратДенег.Ссылка КАК ДокументВозвратДенег, ВозвратДенег.Валюта КАК Валюта, ВозвратДенег.Контрагент КАК Контрагент, ВозвратДенег.Дата, ДенежныеРасходыРасходы.СтатьяРасходов, ДенежныеРасходыРасходы.Сумма, ДенежныеРасходыРасходы.Ссылка КАК ДокументДенежныеРасходы ИЗ Документ.ВозвратДенег КАК ВозвратДенег ЛЕВОЕ СОЕДИНЕНИЕ Документ.ДенежныеРасходы.Расходы КАК ДенежныеРасходыРасходы ПО ВозвратДенег.ДокументОснование = ДенежныеРасходыРасходы.Ссылка ИТОГИ МАКСИМУМ(Валюта), МАКСИМУМ(Контрагент) ПО ДокументВозвратДенег
Пояснения — ВозвратДенег здесь — это документ, а ДенежныеРасходы — это основание. Ссылка на основание хранится в реквизите ДокументОснование — вы видите это в условии связи. Итоги здесь для того, чтобы получить двухуровневое дерево — на верхнем уровне будет документ ВозвратДенег и его реквизиты. Обратите внимание — все его реквизиты указаны в разделе ИТОГИ. Это для того, чтобы они выводились на верхнем уровне. Остальные реквизиты — реквизиты документа-основания, будут находиться на втором уровне дерева. Обход делается так:
РезультатЗапроса = Запрос.Выполнить(); ВыборкаДокументВозвратДенег = РезультатЗапроса.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ВыборкаДокументВозвратДенег.Следующий() Цикл // Вставить обработку выборки ВыборкаДокументВозвратДенег ВыборкаДетальныеЗаписи = ВыборкаДокументВозвратДенег.Выбрать(); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл // Вставить обработку выборки ВыборкаДетальныеЗаписи КонецЦикла; КонецЦикла;
Как обратиться к реквизиту документа из модуля менеджера?
Если тебе надо в печатную форму добавлять водителя, то в цикле Пока ДанныеПечати.Следующий() Цикл ты можешь получить нужный тебе реквизит с помощью ДанныеПечати.Ссылка.НужныйРеквизит, а то что ты в шапке написал можешь убрать.
Остальные ответы
- Дата
- Дата
- Рейтинг всех уровней
- Рейтинг 1-го уровня
- Древо развёрнутое
- Древо свернутое
Свернуть все
2. Pavel Rodinchenko 27.08.18 15:48 Сейчас в теме
Никак. Если только ты не передал в процедуру модуля менеджера ссылку на текущий документ или нужный тебе документ.
3. user973528 27.08.18 15:50 Сейчас в теме
(2) А как можно передать?
4. config 179 27.08.18 15:52 Сейчас в теме
Вы печать документа делаете?
Процедура Печать(МассивОбъектов, ПараметрыПечати, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода)
Вот МассивОбъектов по сути и есть ваши реквизиты.
Для Каждого Документ из МассивОбъектов Цикл ТекСсылка = Документ.Ссылка; ТекКонтрагент = ТекСсылка.Контрагент; //и т.д. КонецЦикла;
user973528; Pavel Rodinchenko; + 2 – Ответить
5. user973528 27.08.18 15:54 Сейчас в теме
(4) Да как раз делаю
6. user973528 27.08.18 15:55 Сейчас в теме
Что получается нужно всунуть в параметры области макета?
Область = Макет.ПолучитьОбласть(«ФамилияВодителя»);
СтруктураДанныхВодитель = Новый Структура;
СтруктураДанныхВодитель.Вставить(«ПредставлениеВодителя»,Водитель);
ТабличныйДокумент.Вывести(Область);
7. user973528 27.08.18 15:58 Сейчас в теме
(4) Переменная не определена пишет
8. config 179 27.08.18 15:59 Сейчас в теме
(7) По незнакомым мне переменным не гадаю 🙂
1.Выкладывайте весь код Модуля менеджера.
2.Какая конфигурация?
9. user973528 27.08.18 16:01 Сейчас в теме
(8)УТ + CRM 2.0
10. user973528 27.08.18 16:01 Сейчас в теме
11. user973528 27.08.18 16:03 Сейчас в теме
Для Каждого Документ ИЗ МассивОбъектов Цикл ТекСсылка = Документ.РеализацияТоваровУслуг; ТекВодитель = ТекСсылка.Водитель; КонецЦикла;
Поле объекта не обнаружено (РеализацияТоваровУслуг)
13. user973528 27.08.18 16:08 Сейчас в теме
(8) Документы.РеализацияТоваровУслуг, но теперь ругается на Водителя
12. user973528 27.08.18 16:04 Сейчас в теме
Функция СформироватьПечатнуюФормуРасходнаяНакладная(МассивОбъектов, ОбъектыПечати, КомплектыПечати) Для Каждого Документ ИЗ МассивОбъектов Цикл ТекСсылка = Документы.РеализацияТоваровУслуг; ТекВодитель = ТекСсылка.Водитель; КонецЦикла; УстановитьПривилегированныйРежим(Истина); ТабличныйДокумент = Новый ТабличныйДокумент; ТабличныйДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_РеализацияТоваровУслуг_РасходнаяНакладная"; КолонкаКодов = ФормированиеПечатныхФорм.ИмяДополнительнойКолонки(); ВыводитьКоды = ЗначениеЗаполнено(КолонкаКодов); ИспользоватьРучныеСкидки = ПолучитьФункциональнуюОпцию("ИспользоватьРучныеСкидкиВПродажах"); ИспользоватьАвтоматическиеСкидки = ПолучитьФункциональнуюОпцию("ИспользоватьАвтоматическиеСкидкиВПродажах"); ИспользоватьУпаковки = ПолучитьФункциональнуюОпцию("ИспользоватьУпаковкиНоменклатуры"); ЗапросПоСкладам = Новый Запрос; ЗапросПоСкладам.Текст = " |ВЫБРАТЬ РАЗЛИЧНЫЕ | РеализацияТоваровУслугТовары.Ссылка КАК Ссылка, | РеализацияТоваровУслугТовары.Склад КАК Склад, | РеализацияТоваровУслугТовары.Склад.ИспользоватьСерииНоменклатуры КАК ИспользоватьСерииНоменклатуры |ИЗ | Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары |ГДЕ | РеализацияТоваровУслугТовары.Ссылка В(&МассивОбъектов) | И РеализацияТоваровУслугТовары.Номенклатура.ТипНоменклатуры В (ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Товар),ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.МногооборотнаяТара)) | |УПОРЯДОЧИТЬ ПО | Ссылка |ИТОГИ ПО | ИспользоватьСерииНоменклатуры"; ЗапросПоСкладам.УстановитьПараметр("МассивОбъектов", МассивОбъектов); // Создание массива для проверки: какие из докуметов не попали в выборку МассивПроверки = Новый Массив; Для Каждого Ссылка Из МассивОбъектов Цикл МассивПроверки.Добавить(Ссылка); КонецЦикла; ДеревоОбъектов = ЗапросПоСкладам.Выполнить().Выгрузить(ОбходРезультатаЗапроса.ПоГруппировкам); Для Каждого ИспользованиеСерий Из ДеревоОбъектов.Строки Цикл ЗапросПоТоварам = Новый Запрос; ЗапросПоТоварам.УстановитьПараметр("МассивОбъектов", ИспользованиеСерий.Строки.ВыгрузитьКолонку("Ссылка")); ЗапросПоТоварам.УстановитьПараметр("МассивСкладов", ИспользованиеСерий.Строки.ВыгрузитьКолонку("Склад")); Если ИспользованиеСерий.ИспользоватьСерииНоменклатуры Тогда ТекстЗапросаПоТоварам = "ВЫБРАТЬ | РеализацияТоваровУслугТовары.Ссылка КАК Ссылка, | РеализацияТоваровУслугТовары.Склад КАК Склад, | РеализацияТоваровУслугТовары.КоличествоУпаковок КАК КоличествоУпаковок, | РеализацияТоваровУслугТовары.Количество КАК Количество, | РеализацияТоваровУслугТовары.Номенклатура КАК Номенклатура, | РеализацияТоваровУслугТовары.Характеристика КАК Характеристика, | РеализацияТоваровУслугТовары.Упаковка КАК Упаковка, | """" КАК Серия |ПОМЕСТИТЬ ТаблицаТоваров |ИЗ | Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары |ГДЕ | РеализацияТоваровУслугТовары.Ссылка В(&МассивОбъектов) | И РеализацияТоваровУслугТовары.Склад В(&МассивСкладов) | И НЕ(РеализацияТоваровУслугТовары.Номенклатура.ТипНоменклатуры В (ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Товар), ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.МногооборотнаяТара)) | И РеализацияТоваровУслугТовары.СтатусУказанияСерий В (2, 4, 6, 8)) | |ОБЪЕДИНИТЬ ВСЕ | |ВЫБРАТЬ | РеализацияТоваровУслугСерии.Ссылка, | РеализацияТоваровУслугСерии.Склад, | РеализацияТоваровУслугСерии.Количество, | РеализацияТоваровУслугСерии.Количество, | РеализацияТоваровУслугСерии.Номенклатура, | РеализацияТоваровУслугСерии.Характеристика, | ЗНАЧЕНИЕ(Справочник.УпаковкиЕдиницыИзмерения.ПустаяСсылка), | РеализацияТоваровУслугСерии.Серия |ИЗ | Документ.РеализацияТоваровУслуг.Серии КАК РеализацияТоваровУслугСерии | ВНУТРЕННЕЕ СОЕДИНЕНИЕ Документ.РеализацияТоваровУслуг.Товары КАК ТаблицаТовары | ПО РеализацияТоваровУслугСерии.Ссылка = ТаблицаТовары.Ссылка | И РеализацияТоваровУслугСерии.Номенклатура = ТаблицаТовары.Номенклатура | И РеализацияТоваровУслугСерии.Характеристика = ТаблицаТовары.Характеристика | И РеализацияТоваровУслугСерии.Склад = ТаблицаТовары.Склад |ГДЕ | РеализацияТоваровУслугСерии.Ссылка В(&МассивОбъектов) | И РеализацияТоваровУслугСерии.Склад В(&МассивСкладов) | И РеализацияТоваровУслугСерии.Номенклатура.ТипНоменклатуры В (ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Товар), ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.МногооборотнаяТара)) | |СГРУППИРОВАТЬ ПО | РеализацияТоваровУслугСерии.Ссылка, | РеализацияТоваровУслугСерии.Склад, | РеализацияТоваровУслугСерии.Номенклатура, | РеализацияТоваровУслугСерии.Характеристика, | РеализацияТоваровУслугСерии.Серия, | РеализацияТоваровУслугСерии.Количество, | РеализацияТоваровУслугСерии.Количество | |ИМЕЮЩИЕ | МАКСИМУМ(ТаблицаТовары.СтатусУказанияСерий) В (2, 4, 6, 8, 10) |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ТаблицаТоваров.Ссылка, | ТаблицаТоваров.Склад, | СУММА(ТаблицаТоваров.КоличествоУпаковок) КАК КоличествоУпаковок, | СУММА(ТаблицаТоваров.Количество) КАК Количество, | ТаблицаТоваров.Номенклатура, | ТаблицаТоваров.Характеристика, | ТаблицаТоваров.Упаковка, | ВЫБОР | КОГДА ТаблицаТоваров.Номенклатура.ВидНоменклатуры.НастройкаИспользованияСерий = ЗНАЧЕНИЕ(Перечисление.НастройкиИспользованияСерийНоменклатуры.ЭкземплярТовара) | ТОГДА NULL | ИНАЧЕ ТаблицаТоваров.Серия | КОНЕЦ КАК Серия |ПОМЕСТИТЬ СуммированнаяТаблицаТоваров |ИЗ | ТаблицаТоваров КАК ТаблицаТоваров | |СГРУППИРОВАТЬ ПО | ТаблицаТоваров.Ссылка, | ТаблицаТоваров.Склад, | ТаблицаТоваров.Номенклатура, | ТаблицаТоваров.Характеристика, | ТаблицаТоваров.Упаковка, | ВЫБОР | КОГДА ТаблицаТоваров.Номенклатура.ВидНоменклатуры.НастройкаИспользованияСерий = ЗНАЧЕНИЕ(Перечисление.НастройкиИспользованияСерийНоменклатуры.ЭкземплярТовара) | ТОГДА NULL | ИНАЧЕ ТаблицаТоваров.Серия | КОНЕЦ |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ТаблицаТоваров.Ссылка КАК Ссылка, | ТаблицаТоваров.Ссылка.Организация КАК Организация, | ТаблицаТоваров.Ссылка.Контрагент КАК Контрагент, | ТаблицаТоваров.Ссылка.Номер КАК Номер, | ТаблицаТоваров.Ссылка.Дата КАК Дата, | ТаблицаТоваров.Ссылка.Организация.Префикс КАК Префикс, | ТаблицаТоваров.Склад КАК Склад, | &ТекстЗапросаНаименованиеЕдиницыИзмерения КАК ПредставлениеЕдининицыИзмеренияУпаковки, | ПРЕДСТАВЛЕНИЕ(ТаблицаТоваров.Номенклатура.ЕдиницаИзмерения) КАК ПредставлениеБазовойЕдиницыИзмерения, | ТаблицаТоваров.КоличествоУпаковок КАК КоличествоУпаковок, | ТаблицаТоваров.Количество КАК Количество, | ТаблицаТоваров.Номенклатура.ВидНоменклатуры.НастройкаИспользованияСерий КАК НастройкаИспользованияСерий, | ТаблицаТоваров.Номенклатура.Код КАК Код, | ТаблицаТоваров.Номенклатура.Артикул КАК Артикул, | ТаблицаТоваров.Номенклатура.НаименованиеПолное КАК ПредставлениеНоменклатуры, | ТаблицаТоваров.Характеристика.НаименованиеПолное КАК ПредставлениеХарактеристики, | ТаблицаТоваров.Номенклатура КАК Номенклатура, | ТаблицаТоваров.Характеристика КАК Характеристика, | ВЫБОР | КОГДА ЕСТЬNULL(&ТекстЗапросаКоэффициентУпаковки, 1) = 1 | ТОГДА НЕОПРЕДЕЛЕНО | ИНАЧЕ ТаблицаТоваров.Упаковка.Наименование | КОНЕЦ КАК Упаковка, | ТаблицаТоваров.Серия.Наименование КАК ПредставлениеСерии, | ВЫБОР | КОГДА ТаблицаТоваров.Ссылка.ВернутьМногооборотнуюТару | И ТаблицаТоваров.Номенклатура.ТипНоменклатуры = ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.МногооборотнаяТара) | ТОГДА ИСТИНА | ИНАЧЕ ЛОЖЬ | КОНЕЦ КАК ЭтоВозвратнаяТара |ИЗ | СуммированнаяТаблицаТоваров КАК ТаблицаТоваров | |УПОРЯДОЧИТЬ ПО | Ссылка, | Склад, | Номенклатура, | Характеристика |ИТОГИ ПО | Ссылка, | Склад, | Номенклатура, | Характеристика |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | ТаблицаТоваров.Ссылка КАК Ссылка, | ТаблицаТоваров.Склад КАК Склад, | ТаблицаТоваров.Номенклатура КАК Номенклатура, | ТаблицаТоваров.Характеристика КАК Характеристика, | ТаблицаТоваров.Серия.Наименование КАК ПредставлениеСерии |ИЗ | ТаблицаТоваров КАК ТаблицаТоваров |ГДЕ | ТаблицаТоваров.Номенклатура.ВидНоменклатуры.НастройкаИспользованияСерий = ЗНАЧЕНИЕ(Перечисление.НастройкиИспользованияСерийНоменклатуры.ЭкземплярТовара) | И НЕ ТаблицаТоваров.Серия ЕСТЬ NULL | |УПОРЯДОЧИТЬ ПО | Ссылка, | Склад, | Номенклатура, | Характеристика, | ПредставлениеСерии"; ТекстЗапросаПоТоварам = СтрЗаменить(ТекстЗапросаПоТоварам, "&ТекстЗапросаКоэффициентУпаковки", Справочники.УпаковкиЕдиницыИзмерения.ТекстЗапросаКоэффициентаУпаковки( "ТаблицаТоваров.Упаковка", "ТаблицаТоваров.Номенклатура")); ТекстЗапросаПоТоварам = СтрЗаменить(ТекстЗапросаПоТоварам, "&ТекстЗапросаНаименованиеЕдиницыИзмерения", Справочники.УпаковкиЕдиницыИзмерения.ТекстЗапросаЗначениеРеквизитаЕдиницыИзмерения( "Наименование", "ТаблицаТоваров.Упаковка", "ТаблицаТоваров.Номенклатура")); ЗапросПоТоварам.Текст = ТекстЗапросаПоТоварам; РезультатЗапроса = ЗапросПоТоварам.ВыполнитьПакет(); ДанныеПечати = РезультатЗапроса[2].Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); ВыборкаПоСериям = РезультатЗапроса[3].Выбрать(); Иначе ТекстЗапросаПоТоварам = "ВЫБРАТЬ | РеализацияТоваровУслугТовары.Ссылка КАК Ссылка, | РеализацияТоваровУслугТовары.Ссылка.Организация КАК Организация, | РеализацияТоваровУслугТовары.Ссылка.Контрагент КАК Контрагент, | РеализацияТоваровУслугТовары.Ссылка.Номер КАК Номер, | РеализацияТоваровУслугТовары.Ссылка.Дата КАК Дата, | РеализацияТоваровУслугТовары.Ссылка.Организация.Префикс КАК Префикс, | РеализацияТоваровУслугТовары.Склад КАК Склад, | &ТекстЗапросаНаименованиеЕдиницыИзмерения КАК ПредставлениеЕдининицыИзмеренияУпаковки, | ПРЕДСТАВЛЕНИЕ(РеализацияТоваровУслугТовары.Номенклатура.ЕдиницаИзмерения) КАК ПредставлениеБазовойЕдиницыИзмерения, | РеализацияТоваровУслугТовары.КоличествоУпаковок КАК КоличествоУпаковок, | РеализацияТоваровУслугТовары.Количество КАК Количество, | РеализацияТоваровУслугТовары.Номенклатура.Код КАК Код, | РеализацияТоваровУслугТовары.Номенклатура.Артикул КАК Артикул, | РеализацияТоваровУслугТовары.Номенклатура.НаименованиеПолное КАК ПредставлениеНоменклатуры, | РеализацияТоваровУслугТовары.Характеристика.НаименованиеПолное КАК ПредставлениеХарактеристики, | """" КАК ПредставлениеСерии, | ВЫБОР | КОГДА ЕСТЬNULL(&ТекстЗапросаКоэффициентУпаковки, 1) = 1 | ТОГДА НЕОПРЕДЕЛЕНО | ИНАЧЕ РеализацияТоваровУслугТовары.Упаковка.Наименование | КОНЕЦ КАК Упаковка, | ВЫБОР | КОГДА РеализацияТоваровУслугТовары.Ссылка.ВернутьМногооборотнуюТару | И РеализацияТоваровУслугТовары.Номенклатура.ТипНоменклатуры = ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.МногооборотнаяТара) | ТОГДА ИСТИНА | ИНАЧЕ ЛОЖЬ | КОНЕЦ КАК ЭтоВозвратнаяТара, | NULL КАК НастройкаИспользованияСерий, | РеализацияТоваровУслугТовары.Номенклатура КАК Номенклатура, | РеализацияТоваровУслугТовары.Характеристика КАК Характеристика, |ИЗ | Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары | ПО РеализацияТоваровУслугТовары.Ссылка = РеализацияТоваровУслуг.Ссылка |ГДЕ | РеализацияТоваровУслугТовары.Ссылка В(&МассивОбъектов) | И РеализацияТоваровУслугТовары.Склад В(&МассивСкладов) | И РеализацияТоваровУслугТовары.Номенклатура.ТипНоменклатуры В (ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.Товар), ЗНАЧЕНИЕ(Перечисление.ТипыНоменклатуры.МногооборотнаяТара)) | |УПОРЯДОЧИТЬ ПО | Ссылка, | Склад, | РеализацияТоваровУслугТовары.НомерСтроки |ИТОГИ ПО | Ссылка, | Склад, | Номенклатура, | Характеристика"; ТекстЗапросаПоТоварам = СтрЗаменить(ТекстЗапросаПоТоварам, "&ТекстЗапросаКоэффициентУпаковки", Справочники.УпаковкиЕдиницыИзмерения.ТекстЗапросаКоэффициентаУпаковки( "РеализацияТоваровУслугТовары.Упаковка", "РеализацияТоваровУслугТовары.Номенклатура")); ТекстЗапросаПоТоварам = СтрЗаменить(ТекстЗапросаПоТоварам, "&ТекстЗапросаНаименованиеЕдиницыИзмерения", Справочники.УпаковкиЕдиницыИзмерения.ТекстЗапросаЗначениеРеквизитаЕдиницыИзмерения( "Наименование", "РеализацияТоваровУслугТовары.Упаковка", "РеализацияТоваровУслугТовары.Номенклатура")); ЗапросПоТоварам.Текст = ТекстЗапросаПоТоварам; ДанныеПечати = ЗапросПоТоварам.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); КонецЕсли; ПервыйДокумент = Истина; Макет = УправлениеПечатью.МакетПечатнойФормы("Документ.РеализацияТоваровУслуг.ПФ_MXL_РасходнаяНакладная"); ШиринаОтсутствующихОбластей = 0; Если НЕ ВыводитьКоды Тогда ШиринаОтсутствующихОбластей = Макет.Область("КолонкаКодов").ШиринаКолонки; КонецЕсли; Если Не ИспользоватьУпаковки Тогда ШиринаОтсутствующихОбластей = ШиринаОтсутствующихОбластей + Макет.Область("КолонкаКоличестваУпаковок").ШиринаКолонки; ШиринаОтсутствующихОбластей = ШиринаОтсутствующихОбластей + Макет.Область("КолонкаПредставленияУпаковок").ШиринаКолонки; КонецЕсли; // Раздвинуть колонку "КолонкаТоваров" на ширину отсутствующих областей Макет.Область("КолонкаТоваров").ШиринаКолонки = Макет.Область("КолонкаТоваров").ШиринаКолонки + ШиринаОтсутствующихОбластей; РеквизитыДокумента = Новый Структура("Номер, Дата, Префикс, Представление"); Пока ДанныеПечати.Следующий() Цикл ИндексМассиваПроверки = МассивПроверки.Найти(ДанныеПечати.Ссылка); Если ИндексМассиваПроверки <> Неопределено Тогда МассивПроверки.Удалить(ИндексМассиваПроверки); КонецЕсли; // Для печати комплектов Если КомплектыПечати <> Неопределено И КомплектыПечати.Колонки.Найти("Ссылка") <> Неопределено Тогда КомплектПечатиПоСсылке = КомплектыПечати.Найти(ДанныеПечати.Ссылка,"Ссылка"); Если КомплектПечатиПоСсылке = Неопределено Тогда КомплектПечатиПоСсылке = КомплектыПечати[0]; КонецЕсли; Если КомплектПечатиПоСсылке.Экземпляров = 0 Тогда Продолжить КонецЕсли; КонецЕсли; НомерСтрокиНачало = ТабличныйДокумент.ВысотаТаблицы + 1; ЗаполнитьЗначенияСвойств(РеквизитыДокумента, ДанныеПечати); ВыборкаПоСкладам = ДанныеПечати.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ВыборкаПоСкладам.Следующий() Цикл Если Не ПервыйДокумент Тогда ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц(); КонецЕсли; ПервыйДокумент = Ложь; Область = Макет.ПолучитьОбласть("Заголовок"); СтруктураДанныхЗаголовок = Новый Структура; СтруктураДанныхЗаголовок.Вставить("ТекстЗаголовка", НСтр("ru='Расходная накладная'")); ШтрихкодированиеПечатныхФорм.ВывестиШтрихкодВТабличныйДокумент(ТабличныйДокумент, Макет, Область, ДанныеПечати.Ссылка); Область.Параметры.Заполнить(СтруктураДанныхЗаголовок); ТабличныйДокумент.Вывести(Область); Область = Макет.ПолучитьОбласть("Шапка"); СтруктураДанныхШапка = Новый Структура; СтруктураДанныхШапка.Вставить("ПредставлениеРаспоряжения", ОбщегоНазначенияУТКлиентСервер.СформироватьЗаголовокДокумента(РеквизитыДокумента, НСтр("ru='Реализация товаров'"))); СтруктураДанныхШапка.Вставить("ПредставлениеСклада", ВыборкаПоСкладам.Склад); СтруктураДанныхШапка.Вставить("Склад", ВыборкаПоСкладам.Склад); Область.Параметры.Заполнить(СтруктураДанныхШапка); ТабличныйДокумент.Вывести(Область); Область = Макет.ПолучитьОбласть("Поставщик"); СтруктураДанныхПоставщик = Новый Структура; СтруктураДанныхПоставщик.Вставить("ПредставлениеОрганизации", ФормированиеПечатныхФорм.ОписаниеОрганизации(ФормированиеПечатныхФорм.СведенияОЮрФизЛице(ВыборкаПоСкладам.Организация, ВыборкаПоСкладам.Дата), "ПолноеНаименование")); СтруктураДанныхПоставщик.Вставить("Организация", ВыборкаПоСкладам.Организация); Область.Параметры.Заполнить(СтруктураДанныхПоставщик); ТабличныйДокумент.Вывести(Область); Область = Макет.ПолучитьОбласть("Покупатель"); СтруктураДанныхПокупатель = Новый Структура; СтруктураДанныхПоставщик.Вставить("ПредставлениеПартнера", ФормированиеПечатныхФорм.ОписаниеОрганизации(ФормированиеПечатныхФорм.СведенияОЮрФизЛице(ВыборкаПоСкладам.Контрагент, ВыборкаПоСкладам.Дата), "ПолноеНаименование")); СтруктураДанныхПоставщик.Вставить("Контрагент", ВыборкаПоСкладам.Контрагент); Область.Параметры.Заполнить(СтруктураДанныхПоставщик); ТабличныйДокумент.Вывести(Область); Область = Макет.ПолучитьОбласть("ФамилияВодителя"); СтруктураДанныхВодитель = Новый Структура; СтруктураДанныхВодитель.Вставить("ПредставлениеВодителя", ТекВодитель); Область.Параметры.Заполнить(СтруктураДанныхВодитель); ТабличныйДокумент.Вывести(Область); Если ЗначениеЗаполнено(ДанныеПечати.Водитель) Тогда ОбластьМакета=Макет.ПолучитьОбласть("ФамилияВодителя"); //УстановитьПараметр(ОбластьМакета,"ПредставлениеВодитель",ДанныеПечати.Водитель); ОбластьМакета.Параметры.Заполнить(ДанныеПечати); ТабличныйДокумент.Вывести(ОбластьМакета); КонецЕсли; // //Область = Макет.ПолучитьОбласть("ГосНомер"); //ТабличныйДокумент.Вывести(Область); Область = Макет.ПолучитьОбласть("ШапкаТаблицы|НачалоСтроки"); ТабличныйДокумент.Вывести(Область); Если ВыводитьКоды Тогда Область = Макет.ПолучитьОбласть("ШапкаТаблицы|КолонкаКодов"); СтруктураДанныхКоды = Новый Структура("ИмяКолонкиКодов", КолонкаКодов); Область.Параметры.Заполнить(СтруктураДанныхКоды); ТабличныйДокумент.Присоединить(Область); КонецЕсли; Область = Макет.ПолучитьОбласть("ШапкаТаблицы|КолонкаТоваров"); ТабличныйДокумент.Присоединить(Область); Если ИспользоватьУпаковки Тогда Область = Макет.ПолучитьОбласть("ШапкаТаблицы|КолонкиУпаковок"); ТабличныйДокумент.Присоединить(Область); КонецЕсли; Область = Макет.ПолучитьОбласть("ШапкаТаблицы|КолонкиКоличества"); ТабличныйДокумент.Присоединить(Область); ОбластьНачалоСтроки = Макет.ПолучитьОбласть("СтрокаТаблицы|НачалоСтроки"); ОбластьКолонкаКодов = Макет.ПолучитьОбласть("СтрокаТаблицы|КолонкаКодов"); ОбластьКолонкаТоваров = Макет.ПолучитьОбласть("СтрокаТаблицы|КолонкаТоваров"); ОбластьКолонкаУпаковок = Макет.ПолучитьОбласть("СтрокаТаблицы|КолонкиУпаковок"); ОбластьКолонкаКоличества = Макет.ПолучитьОбласть("СтрокаТаблицы|КолонкиКоличества"); СчетСтрок = 1; ВыборкаПоСсылкамТЧ = ВыборкаПоСкладам.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ВыборкаПоСсылкамТЧ.Следующий() Цикл ВыборкаПоНоменклатуреТЧ = ВыборкаПоСсылкамТЧ.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ВыборкаПоНоменклатуреТЧ.Следующий() Цикл ВыборкаПоСтрокамТЧ = ВыборкаПоНоменклатуреТЧ.Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); ПерваяСтрока = Истина; СтрокаУпаковок = ""; СтрокаКоличесткаУпаковок = ""; СтрокаЕдиницИзмерений = ""; СтрокаКоличества = ""; Пока ВыборкаПоСтрокамТЧ.Следующий() Цикл Если ВыборкаПоСтрокамТЧ.НастройкаИспользованияСерий = Перечисления.НастройкиИспользованияСерийНоменклатуры.ЭкземплярТовара Тогда Если ПерваяСтрока Тогда СтруктураДанныхНомерСтроки = Новый Структура("НомерСтроки", СчетСтрок); ОбластьНачалоСтроки.Параметры.Заполнить(СтруктураДанныхНомерСтроки); СчетСтрок = СчетСтрок + 1; ТабличныйДокумент.Вывести(ОбластьНачалоСтроки); Если ВыводитьКоды Тогда СтруктураДанныхКоды = Новый Структура("ЗначениеКода", ВыборкаПоСтрокамТЧ[КолонкаКодов]); ОбластьКолонкаКодов.Параметры.Заполнить(СтруктураДанныхКоды); ТабличныйДокумент.Присоединить(ОбластьКолонкаКодов); КонецЕсли; СтруктураПоиска = Новый Структура; СтруктураПоиска.Вставить("Ссылка", ВыборкаПоСтрокамТЧ.Ссылка); СтруктураПоиска.Вставить("Склад", ВыборкаПоСтрокамТЧ.Склад); СтруктураПоиска.Вставить("Номенклатура", ВыборкаПоСтрокамТЧ.Номенклатура); СтруктураПоиска.Вставить("Характеристика", ВыборкаПоСтрокамТЧ.Характеристика); СтрокаСерий = ""; Пока ВыборкаПоСериям.НайтиСледующий(СтруктураПоиска) Цикл СтрокаСерий = СтрокаСерий + ВыборкаПоСериям.ПредставлениеСерии + ", "; КонецЦикла; Если СтрДлина(СтрокаСерий) <> 0 Тогда СтрокаСерий = Лев(СтрокаСерий, СтрДлина(СтрокаСерий) - 2); КонецЕсли; ДополнительныеПараметрыПолученияНаименованияДляПечати = НоменклатураКлиентСервер.ДополнительныеПараметрыПредставлениеНоменклатурыДляПечати(); ДополнительныеПараметрыПолученияНаименованияДляПечати.ВозвратнаяТара = ВыборкаПоСтрокамТЧ.ЭтоВозвратнаяТара; Товар = НоменклатураКлиентСервер.ПредставлениеНоменклатурыДляПечати( ВыборкаПоСтрокамТЧ.ПредставлениеНоменклатуры, ВыборкаПоСтрокамТЧ.ПредставлениеХарактеристики, , СтрокаСерий, ДополнительныеПараметрыПолученияНаименованияДляПечати); СтруктураДанныхТовар = Новый Структура("Товар", Товар); ОбластьКолонкаТоваров.Параметры.Заполнить(СтруктураДанныхТовар); ТабличныйДокумент.Присоединить(ОбластьКолонкаТоваров); ПерваяСтрока = Ложь; КонецЕсли; Если ИспользоватьУпаковки Тогда СтрокаУпаковок = СтрокаУпаковок + ВыборкаПоСтрокамТЧ.ПредставлениеЕдининицыИзмеренияУпаковки + Символы.ПС; СтрокаКоличесткаУпаковок = СтрокаКоличесткаУпаковок + ВыборкаПоСтрокамТЧ.КоличествоУпаковок + Символы.ПС; КонецЕсли; СтрокаЕдиницИзмерений = СтрокаЕдиницИзмерений + ВыборкаПоСтрокамТЧ.ПредставлениеБазовойЕдиницыИзмерения + Символы.ПС; СтрокаКоличества = СтрокаКоличества + ВыборкаПоСтрокамТЧ.Количество + Символы.ПС; ТоварССериейЭкземпляром = Истина; Иначе СтруктураДанныхНомерСтроки = Новый Структура("НомерСтроки", СчетСтрок); ОбластьНачалоСтроки.Параметры.Заполнить(СтруктураДанныхНомерСтроки); СчетСтрок = СчетСтрок + 1; ТабличныйДокумент.Вывести(ОбластьНачалоСтроки); Если ВыводитьКоды Тогда СтруктураДанныхКоды = Новый Структура("ЗначениеКода", ВыборкаПоСтрокамТЧ[КолонкаКодов]); ОбластьКолонкаКодов.Параметры.Заполнить(СтруктураДанныхКоды); ТабличныйДокумент.Присоединить(ОбластьКолонкаКодов); КонецЕсли; ДополнительныеПараметрыПолученияНаименованияДляПечати = НоменклатураКлиентСервер.ДополнительныеПараметрыПредставлениеНоменклатурыДляПечати(); ДополнительныеПараметрыПолученияНаименованияДляПечати.ВозвратнаяТара = ВыборкаПоСтрокамТЧ.ЭтоВозвратнаяТара; Товар = НоменклатураКлиентСервер.ПредставлениеНоменклатурыДляПечати( ВыборкаПоСтрокамТЧ.ПредставлениеНоменклатуры, ВыборкаПоСтрокамТЧ.ПредставлениеХарактеристики, , ВыборкаПоСтрокамТЧ.ПредставлениеСерии, ДополнительныеПараметрыПолученияНаименованияДляПечати); СтруктураДанныхТовар = Новый Структура("Товар", Товар); ОбластьКолонкаТоваров.Параметры.Заполнить(СтруктураДанныхТовар); ТабличныйДокумент.Присоединить(ОбластьКолонкаТоваров); Если ИспользоватьУпаковки Тогда ОбластьКолонкаУпаковок.Параметры.Заполнить(ВыборкаПоСтрокамТЧ); ТабличныйДокумент.Присоединить(ОбластьКолонкаУпаковок); КонецЕсли; ОбластьКолонкаКоличества.Параметры.Заполнить(ВыборкаПоСтрокамТЧ); ТабличныйДокумент.Присоединить(ОбластьКолонкаКоличества); ТоварССериейЭкземпляром = Ложь; КонецЕсли; КонецЦикла; Если ТоварССериейЭкземпляром Тогда Если ИспользоватьУпаковки Тогда СтруктураДанныхКолонкаУпаковок = Новый Структура; СтруктураДанныхКолонкаУпаковок.Вставить("КоличествоУпаковок", СтрокаКоличесткаУпаковок); СтруктураДанныхКолонкаУпаковок.Вставить("ПредставлениеЕдининицыИзмеренияУпаковки", СтрокаУпаковок); ОбластьКолонкаУпаковок.Параметры.Заполнить(СтруктураДанныхКолонкаУпаковок); ТабличныйДокумент.Присоединить(ОбластьКолонкаУпаковок); КонецЕсли; СтруктураДанныхКолонкаКоличества = Новый Структура; СтруктураДанныхКолонкаКоличества.Вставить("Количество", СтрокаКоличества); СтруктураДанныхКолонкаКоличества.Вставить("ПредставлениеБазовойЕдиницыИзмерения", СтрокаЕдиницИзмерений); ОбластьКолонкаКоличества.Параметры.Заполнить(СтруктураДанныхКолонкаКоличества); ТабличныйДокумент.Присоединить(ОбластьКолонкаКоличества); КонецЕсли; КонецЦикла; КонецЦикла; Область = Макет.ПолучитьОбласть("ПодвалТаблицы|НачалоСтроки"); ТабличныйДокумент.Вывести(Область); Если ВыводитьКоды Тогда Область = Макет.ПолучитьОбласть("ПодвалТаблицы|КолонкаКодов"); ТабличныйДокумент.Присоединить(Область); КонецЕсли; Область = Макет.ПолучитьОбласть("ПодвалТаблицы|КолонкаТоваров"); ТабличныйДокумент.Присоединить(Область); Если ИспользоватьУпаковки Тогда Область = Макет.ПолучитьОбласть("ПодвалТаблицы|КолонкиУпаковок"); ТабличныйДокумент.Присоединить(Область); КонецЕсли; Область = Макет.ПолучитьОбласть("ПодвалТаблицы|КолонкиКоличества"); ТабличныйДокумент.Присоединить(Область); Область = Макет.ПолучитьОбласть("Подписи"); ТекстИтоговойСтроки = НСтр("ru = 'Всего наименований %ВсегоНаименований%'"); ТекстИтоговойСтроки = СтрЗаменить(ТекстИтоговойСтроки,"%ВсегоНаименований%", СчетСтрок-1); СтруктураДанныхИтоговаяСтрока = Новый Структура; СтруктураДанныхЗаголовок.Вставить("ИтоговаяСтрока", ТекстИтоговойСтроки); Область.Параметры.Заполнить(СтруктураДанныхЗаголовок); ТабличныйДокумент.Вывести(Область); КонецЦикла; // Выведем нужное количество экземпляров (при печати комплектов) Если КомплектыПечати <> Неопределено И КомплектыПечати.Колонки.Найти("Ссылка") <> Неопределено И КомплектПечатиПоСсылке.Экземпляров > 1 Тогда ОбластьКопирования = ТабличныйДокумент.ПолучитьОбласть(НомерСтрокиНачало,,ТабличныйДокумент.ВысотаТаблицы); Для Итератор = 2 По КомплектПечатиПоСсылке.Экземпляров Цикл ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц(); ТабличныйДокумент.Вывести(ОбластьКопирования); КонецЦикла; КонецЕсли; УправлениеПечатью.ЗадатьОбластьПечатиДокумента(ТабличныйДокумент, НомерСтрокиНачало, ОбъектыПечати, ДанныеПечати.Ссылка); КонецЦикла; КонецЦикла; Для Каждого Ссылка Из МассивПроверки Цикл Текст = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку( НСтр("ru = 'В документе %1 отсутствуют товары. Печать расходной накладной не требуется.'"), Ссылка); ОбщегоНазначенияКлиентСервер.СообщитьПользователю( Текст, Ссылка); КонецЦикла; ТабличныйДокумент.АвтоМасштаб = Истина; Если ПривилегированныйРежим() Тогда УстановитьПривилегированныйРежим(Ложь); КонецЕсли; Возврат ТабличныйДокумент; КонецФункции
14. Pavel Rodinchenko 27.08.18 16:13 Сейчас в теме
Для Каждого Документ ИЗ МассивОбъектов Цикл
ТекСсылка = Документы.РеализацияТоваровУслуг;
ТекВодитель = ТекСсылка.Водитель;
У тебя же печать уже по идее как работает.
Если тебе надо в печатную форму добавлять водителя, то в цикле Пока ДанныеПечати.Следующий() Цикл ты можешь получить нужный тебе реквизит с помощью ДанныеПечати.Ссылка.НужныйРеквизит, а то что ты в шапке написал можешь убрать.