Автор: star 14.11.14, 10:56
Добрый день. Общепит, редакция 8, украинская версия на базе "Бухгалтерия для Украины", редакция 1.2 Нужна помощь в изменении печатной формы документа. Необходимо вывести колонку код из справочника номенклатуры.
В 1С печатная форма не формируется – ошибка «Не удалось сформировать внешнюю печатную форму! Поле объекта не обнаружено (НоменклатураКод)».
Модуль объектаФункция ПечатьПеремещениеТоваров()
Запрос = Новый Запрос;
Запрос.УстановитьПараметр("ТекущийДокумент", СсылкаНаОбъект.Ссылка);
Запрос.УстановитьПараметр("НТТ", Перечисления.ВидыСкладов.НеавтоматизированнаяТорговаяТочка);
Запрос.Текст =
"ВЫБРАТЬ
| Номер,
| Дата,
| Ответственный.ФизЛицо.Наименование КАК Отпустил,
| Организация,
| СкладОтправитель,
| СкладОтправитель.Представление КАК Поставщик,
| СкладПолучатель,
| ВЫБОР КОГДА СкладОтправитель.ВидСклада = &НТТ ТОГДА ИСТИНА ИНАЧЕ ЛОЖЬ КОНЕЦ КАК ОтправительНТТ,
| ВЫБОР КОГДА СкладПолучатель.ВидСклада = &НТТ ТОГДА ИСТИНА ИНАЧЕ ЛОЖЬ КОНЕЦ КАК ПолучательНТТ,
| СкладПолучатель.Представление КАК Покупатель
|ИЗ
| Документ.ПеремещениеТоваров КАК ПеремещениеТоваров
|ГДЕ
| ПеремещениеТоваров.Ссылка = &ТекущийДокумент";
Шапка = Запрос.Выполнить().Выбрать();
Шапка.Следующий();
ЗапросПоТоварам = Новый Запрос;
ЗапросПоТоварам.УстановитьПараметр("ТекущийДокумент", СсылкаНаОбъект.Ссылка);
ЗапросПоТоварам.Текст =
"ВЫБРАТЬ
| Номенклатура,
| ВЫРАЗИТЬ(Номенклатура.НаименованиеПолное КАК Строка(1000)) КАК Товар,
| Номенклатура.Код КАК Код,
| Номенклатура.Артикул КАК Артикул,
| Количество,
| ЕдиницаИзмерения КАК ЕдиницаИзмерения,
| Цена,
| НомерСтроки,
| 1 КАК ID
|ИЗ
| (ВЫБРАТЬ
| Номенклатура КАК Номенклатура,
| ЕдиницаИзмерения КАК ЕдиницаИзмерения,
| ЦенаВРознице КАК Цена,
| СУММА(Количество) КАК Количество,
| МИНИМУМ(НомерСтроки) КАК НомерСтроки
| ИЗ
| Документ.ПеремещениеТоваров.Товары КАК ПеремещениеТоваров
| ГДЕ
| ПеремещениеТоваров.Ссылка = &ТекущийДокумент
| СГРУППИРОВАТЬ ПО
| Номенклатура,
| ЕдиницаИзмерения,
| ЦенаВРознице
| ) КАК ВложенныйЗапросПоТоварам
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| Номенклатура,
| ВЫРАЗИТЬ(Номенклатура.НаименованиеПолное КАК Строка(1000)) КАК Товар,
| Номенклатура.Код КАК Код,
| Номенклатура.Артикул КАК Артикул,
| Количество,
| ЕдиницаИзмерения КАК ЕдиницаИзмерения,
| Цена,
| НомерСтроки,
| 2 КАК ID
|ИЗ
| (ВЫБРАТЬ
| Номенклатура КАК Номенклатура,
| ЕдиницаИзмерения КАК ЕдиницаИзмерения,
| Цена КАК Цена,
| СУММА(Количество) КАК Количество,
| МИНИМУМ(НомерСтроки) КАК НомерСтроки
| ИЗ
| Документ.ПеремещениеТоваров.ТоварыНаКомиссии КАК ПеремещениеТоваров
| ГДЕ
| ПеремещениеТоваров.Ссылка = &ТекущийДокумент
| СГРУППИРОВАТЬ ПО
| Номенклатура,
| ЕдиницаИзмерения,
| Цена
| ) КАК ВложенныйЗапросПоТоварам
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| Номенклатура,
| ВЫРАЗИТЬ(Номенклатура.НаименованиеПолное КАК Строка(1000)),
| Номенклатура.Код КАК Код,
| Номенклатура.Артикул КАК Артикул,
| Количество,
| Номенклатура.БазоваяЕдиницаИзмерения,
| 0,
| НомерСтроки,
| 3
|
|ИЗ
| Документ.ПеремещениеТоваров.ВозвратнаяТара КАК ПеремещениеТоваров
|
|ГДЕ
| ПеремещениеТоваров.Ссылка = &ТекущийДокумент
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| Номенклатура,
| ВЫРАЗИТЬ(Номенклатура.НаименованиеПолное КАК Строка(1000)),
| Номенклатура.Код КАК Код,
| Номенклатура.Артикул КАК Артикул,
| Количество,
| ЕдиницаИзмерения,
| 0,
| НомерСтроки,
| 4
|
|ИЗ
| Документ.ПеремещениеТоваров.БланкиСтрогогоУчета КАК ПеремещениеТоваров
|
|ГДЕ
| ПеремещениеТоваров.Ссылка = &ТекущийДокумент
|
|УПОРЯДОЧИТЬ ПО
| ID,
| НомерСтроки";
ВыборкаСтрокТовары = ЗапросПоТоварам.Выполнить().Выбрать();
ТабДокумент = Новый ТабличныйДокумент;
ТабДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_ПеремещениеТоваров_Накладная";
Макет = ПолучитьМакет("Накладная");
// печать производится на языке, указанном в настройках пользователя
КодЯзыкаПечать = Локализация.ПолучитьЯзыкФормированияПечатныхФорм(УправлениеПользователями.ПолучитьЗначениеПоУмолчанию(глЗначениеПеременной("глТекущийПользователь"), "РежимФормированияПечатныхФорм"));
Макет.КодЯзыкаМакета = КодЯзыкаПечать;
мУчетВПродажныхЦенах=Истина;
мВалютаРегламентированногоУчета = Константы.ВалютаРегламентированногоУчета.Получить();
СкладНТТ = Шапка.ОтправительНТТ ИЛИ Шапка.ПолучательНТТ;
ЕстьЦена = мУчетВПродажныхЦенах И НЕ (СсылкаНаОбъект.Ссылка.СкладОтправитель.ВидСклада = Перечисления.ВидыСкладов.Оптовый И СсылкаНаОбъект.Ссылка.СкладПолучатель.ВидСклада = Перечисления.ВидыСкладов.Оптовый);
ЕстьЦена = Истина;
ТаблицаСуммСписания = БухгалтерскийУчет.ПолучитьСуммуСписанияАктивов(СсылкаНаОбъект);//!,,МассивСчетовИсключения); проверить с общими модулем
// Выводим шапку накладной
ОбластьМакета = Макет.ПолучитьОбласть("Заголовок");
ОбластьМакета.Параметры.ТекстЗаголовка = ОбщегоНазначения.СформироватьЗаголовокДокумента(Шапка, НСтр("ru='Накладная на перемещение';uk='Накладна на переміщення'",КодЯзыкаПечать),КодЯзыкаПечать);
ТабДокумент.Вывести(ОбластьМакета);
СведенияОбОрганизации = УправлениеКонтактнойИнформацией.СведенияОЮрФизЛице(Шапка.Организация, Шапка.Дата,,,КодЯзыкаПечать);
ОбластьМакета = Макет.ПолучитьОбласть("Организация");
ОбластьМакета.Параметры.Заполнить(Шапка);
ОбластьМакета.Параметры.ПредставлениеПоставщика = ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОбОрганизации, "ПолноеНаименование,",,КодЯзыкаПечать);
ОбластьМакета.Параметры.РеквизитыПоставщика = ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОбОрганизации, "ЮридическийАдрес,Телефоны,/,КодПоЕДРПОУ,КодПоДРФО,",,КодЯзыкаПечать);
ТабДокумент.Вывести(ОбластьМакета);
ОбластьМакета = Макет.ПолучитьОбласть("Поставщик");
ОбластьМакета.Параметры.ПредставлениеПоставщика = Шапка.Поставщик;
ОбластьМакета.Параметры.Поставщик = Шапка.СкладОтправитель;
ТабДокумент.Вывести(ОбластьМакета);
ОбластьМакета = Макет.ПолучитьОбласть("Покупатель");
ОбластьМакета.Параметры.ПредставлениеПолучателя = Шапка.Покупатель;
ОбластьМакета.Параметры.Получатель = Шапка.СкладПолучатель;
ТабДокумент.Вывести(ОбластьМакета);
ОбластьШапки = "ШапкаТаблицы";
ОбластьСтроки = "Строка";
ДопКолонка = Константы.ДополнительнаяКолонкаПечатныхФормДокументов.Получить();
Если ДопКолонка = Перечисления.ДополнительнаяКолонкаПечатныхФормДокументов.НоменклатураКод Тогда
ВыводитьКоды = Истина;
Колонка = "НоменклатураКод";
ИначеЕсли ДопКолонка = Перечисления.ДополнительнаяКолонкаПечатныхФормДокументов.Код Тогда
ВыводитьКоды = Истина;
Колонка = "Код";
Иначе
ВыводитьКоды = Ложь;
КонецЕсли;
ОбластьНомера = Макет.ПолучитьОбласть(ОбластьШапки+"|НомерСтроки");
ОбластьКодов = Макет.ПолучитьОбласть(ОбластьШапки+"|КолонкаКодов");
ОбластьДанных = Макет.ПолучитьОбласть(ОбластьШапки+"|Данные");
ОбластьЦены = Макет.ПолучитьОбласть(ОбластьШапки+"|Цена");
ТабДокумент.Вывести(ОбластьНомера);
Если ВыводитьКоды Тогда
ОбластьКодов.Параметры.ИмяКолонкиКодов = Колонка;
ТабДокумент.Присоединить(ОбластьКодов);
КонецЕсли;
ТабДокумент.Присоединить(ОбластьДанных);
Если ЕстьЦена Тогда
ТабДокумент.Присоединить(ОбластьЦены);
КонецЕсли;
ОбластьКолонкаТовар = Макет.Область("Товар");
Если Не ВыводитьКоды Тогда
ОбластьКолонкаТовар.ШиринаКолонки = ОбластьКолонкаТовар.ШиринаКолонки +
Макет.Область("КолонкаКодов").ШиринаКолонки;
КонецЕсли;
ОбластьНомера = Макет.ПолучитьОбласть(ОбластьСтроки+"|НомерСтроки");
ОбластьКодов = Макет.ПолучитьОбласть(ОбластьСтроки+"|КолонкаКодов");
ОбластьДанных = Макет.ПолучитьОбласть(ОбластьСтроки+"|Данные");
ОбластьЦены = Макет.ПолучитьОбласть(ОбластьСтроки+"|Цена");
НС = 1;
// инициализация итогов по документу
ИтогоСумма = 0;
Пока ВыборкаСтрокТовары.Следующий() Цикл
Если НЕ ЗначениеЗаполнено(ВыборкаСтрокТовары.Номенклатура) Тогда
Сообщить(НСтр("ru='В одной из строк не заполнено значение номенклатуры - строка при печати пропущена.';uk='В одному з рядків не заповнене значення номенклатури - рядок під час друку буде пропущений.'"), СтатусСообщения.Важное);
Продолжить;
КонецЕсли;
ОбластьНомера.Параметры.НомерСтроки = НС;
ТабДокумент.Вывести(ОбластьНомера);
Если ВыводитьКоды Тогда
Если Колонка = "НоменклатураКод" Тогда
ОбластьКодов.Параметры.НоменклатураКод = ВыборкаСтрокТовары.НоменклатураКод;
Иначе
ОбластьКодов.Параметры.НоменклатураКод = ВыборкаСтрокТовары.Код;
КонецЕсли;
ТабДокумент.Присоединить(ОбластьКодов);
КонецЕсли;
ОбластьДанных.Параметры.Заполнить(ВыборкаСтрокТовары);
ОбластьДанных.Параметры.Товар = СокрЛП(ВыборкаСтрокТовары.Товар);
ТабДокумент.Присоединить(ОбластьДанных);
Если ЕстьЦена Тогда
//Определим цену для розницы в продажных ценах
КоличествоТов = ВыборкаСтрокТовары.Количество;
ЦенаПеремещения = 0;
Если (ВыборкаСтрокТовары.ID = 1) И СкладНТТ Тогда
ЦенаПеремещения = ВыборкаСтрокТовары.Цена;
ИначеЕсли (ВыборкаСтрокТовары.ID = 1) Тогда
//один из складов - розничный
Склад = ?(СсылкаНаОбъект.Ссылка.СкладОтправитель.ВидСклада = Перечисления.ВидыСкладов.Розничный, СсылкаНаОбъект.Ссылка.СкладОтправитель, СсылкаНаОбъект.Ссылка.СкладПолучатель);
ЦенаПеремещения = Ценообразование.ПолучитьЦенуНоменклатуры(ВыборкаСтрокТовары.Номенклатура, Склад.ТипЦенРозничнойТорговли,
СсылкаНаОбъект.Ссылка.Дата, мВалютаРегламентированногоУчета, 1, 1);
КонецЕсли;
СтрокаСуммСписания = ТаблицаСуммСписания.Найти(ВыборкаСтрокТовары.Номенклатура ,"Номенклатура");
Если СтрокаСуммСписания = Неопределено Тогда
//ЦенаПеремещения = 0;
//Сумма = 0;
Сумма = ЦенаПеремещения * КоличествоТов;
Иначе
ЦенаПеремещения = ?(ВыборкаСтрокТовары.Количество = 0, 0, СтрокаСуммСписания.Сумма / ВыборкаСтрокТовары.Количество);
Сумма = ЦенаПеремещения * ВыборкаСтрокТовары.Количество;
КонецЕсли;
ОбластьЦены.Параметры.Цена = ЦенаПеремещения;
ОбластьЦены.Параметры.Сумма = Сумма;
ТабДокумент.Присоединить(ОбластьЦены);
ИтогоСумма = ИтогоСумма + Сумма;
КонецЕсли;
НС = НС + 1;
КонецЦикла;
// Вывести подвал
ОбластьНомера = Макет.ПолучитьОбласть("Подвал|НомерСтроки");
ОбластьКодов = Макет.ПолучитьОбласть("Подвал|КолонкаКодов");
ОбластьДанных = Макет.ПолучитьОбласть("Подвал|Данные");
ОбластьЦены = Макет.ПолучитьОбласть("Подвал|Цена");
ОбластьЦены.Параметры.ИтогоСумма = ИтогоСумма;
ТабДокумент.Вывести(ОбластьНомера);
Если ВыводитьКоды Тогда
ТабДокумент.Присоединить(ОбластьКодов);
КонецЕсли;
ТабДокумент.Присоединить(ОбластьДанных);
Если ЕстьЦена Тогда
ТабДокумент.Присоединить(ОбластьЦены);
КонецЕсли;
// Вывести подписи
ОбластьМакета = Макет.ПолучитьОбласть("Подписи");
ОбластьМакета.Параметры.Заполнить(Шапка);
ТабДокумент.Вывести(ОбластьМакета);
Возврат ТабДокумент;
КонецФункции // ПечатьПеремещениеТоваров()
Я, к сожалению, не программист, но очень хочу научиться. Буду благодарна если скинете ссылки на самоучители или что-то подобное.
Автор: Petre 14.11.14, 11:14
Что содержит константа "ДополнительнаяКолонкаПечатныхФормДокументов"?
Автор: star 14.11.14, 11:33
Цитата(Petre @ 14.11.14, 11:14)
![*](http://pro1c.org.ua/style_images/pro1c/post_snapback.gif)
Что содержит константа "ДополнительнаяКолонкаПечатныхФормДокументов"?
Я не знаю
![09000000.gif](https://pro1c.org.ua/style_emoticons/default/09000000.gif)
Такая функция есть в типовом модуле объекта документа "Перемещение товаров"
Автор: Petre 14.11.14, 11:50
Это не программирование, это - пользовательский режим. Без его понимания о программировании очень рано говорить.
Откройте меню "Сервіс / Настройка програми" и в закладке "Друк" посмотрите, чему равен реквизит "Додаткова колонка друкованих форм документів".
Автор: star 14.11.14, 12:08
Цитата(Petre @ 14.11.14, 11:50)
![*](http://pro1c.org.ua/style_images/pro1c/post_snapback.gif)
Это не программирование, это - пользовательский режим. Без его понимания о программировании очень рано говорить.
Откройте меню "Сервіс / Настройка програми" и в закладке "Друк" посмотрите, чему равен реквизит "Додаткова колонка друкованих форм документів".
Гиии спасибо большое!!! Все элементарно просто, а я мудрю который день. Стыдно, что не знала этого
Автор: mister-x 14.11.14, 21:27
Цитата(star @ 14.11.14, 10:56) http://pro1c.org.ua/index.php?act=findpost&pid=93273
Автор: star 15.11.14, 11:55
Цитата(mister-x @ 14.11.14, 21:27) http://pro1c.org.ua/index.php?act=findpost&pid=93290
Ага я видела спасибки
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7
https://pro1c.org.ua