Реклама на этом месте
Форум 1С
Форум 1С
Программистам. Бухгалтерам. Администраторам. Пользователям
Задай вопрос - получи решение проблемы. Без троллинга и флуда.
28 Июл 2017, 11:56
МультиВход
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?
 
collapse

Автор Тема: (Печать внешняя обработка)  (Прочитано 681 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн GanG031

  • ***
  • Сообщений: 146
  • РЕПУТАЦИЯ: 0
  • Регистрация: 2015-10-28
  • Сайт: 
  • Профессия: Ученик 1С
Доброго времени суток, уважаемые!
Суть в следующем: Делаю внешнюю обработку, а в частности печатную форму. Вот код:

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

   РезультирующийДокумент = Новый ТабличныйДокумент;
   РезультирующийДокумент = ПечатьТекущегоДокументаНаСервере(ДокументПечати, РезультирующийДокумент);
   РезультирующийДокумент.Показать("Акт на списание материальных ценностей");
   РезультирующийДокумент.ТолькоПросмотр = Истина;
   РезультирующийДокумент.ОриентацияСтраницы = ОриентацияСтраницы.Ландшафт;

   РезультирующийДокумент.ПолеСверху = 2;
   РезультирующийДокумент.ПолеСлева = 2;
   РезультирующийДокумент.ПолеСнизу = 2;
   РезультирующийДокумент.ПолеСправа = 2;
   РезультирующийДокумент.Показать("Акт на списание материальных ценностей");
КонецПроцедуры




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

      КоличествоМатериалов = пТабНом.Количество();
      ПерваяСтраница =  16;
      ВтораяСтраница = 37;
      Подвал = 11;
      КоличествоПустыхСтрок = 0;
      // Определим количество пустых строк
      Если КоличествоМатериалов <> ПерваяСтраница тогда
         Разница = КоличествоМатериалов - ПерваяСтраница;
         Если Разница < 0 тогда
            КоличествоПустыхСтрок = Разница * (-1);
         Иначе
            Для Сч = 1 По 100 Цикл
               Приращение = Сч * ВтораяСтраница;
               Если Приращение >= Разница Тогда
                  КоличествоПустыхСтрок = Приращение - Разница;
                  Прервать;
               КонецЕсли;
            КонецЦикла;
         КонецЕсли;
      КонецЕсли;
      ЕстьЗаполнениеНаСледующейСтранице = Ложь;
      Если КоличествоПустыхСтрок >= Подвал тогда
         КоличествоПустыхСтрок = КоличествоПустыхСтрок - Подвал;
      Иначе
         ЕстьЗаполнениеНаСледующейСтранице = Истина;
      КонецЕсли;
      НомерВыведеннойСтроки = 0;
      ЕстьПерваяСтраница = ложь;
      НомерСтраницы = 1;
      СтрокаИтого=0;
      Для каждого СтрокаДокумента Из птабНом Цикл
         Если Не ЕстьПерваяСтраница Тогда
            Если НомерВыведеннойСтроки = ПерваяСтраница Тогда
               НомерСтраницы = НомерСтраницы + 1;
               Таб.Вывести(ОбластьШапкаТаблицы);
               ЕстьПерваяСтраница = Истина;
               НомерВыведеннойСтроки = 0;
            КонецЕсли;
         КонецЕсли;
         Если НомерВыведеннойСтроки <> 0 Тогда
            Остаток = НомерВыведеннойСтроки % ВтораяСтраница;
            Если Остаток = 0 Тогда
               НомерСтраницы = НомерСтраницы + 1;
               Таб.Вывести(ОбластьШапкаТаблицы);
            КонецЕсли;
         КонецЕсли;
         ПарСтрока = ОбластьСтрока.Параметры;
         ПарСтрока.НоменклатурныйНомер = СтрокаДокумента.Номенклатура.Артикул;
         ПарСтрока.Наименование = СтрокаДокумента.Номенклатура.Наименование;
         ////ПарСтрока.ЕдиницаИзмерения = СтрокаДокумента.Номенклатура.БазоваяЕдиницаИзмерения;
         ПарСтрока.Количество = СтрокаДокумента.Количество;
//         ПарСтрока.Сумма = РассчитатьСуммуСписания(СтрокаДокумента, ТабДвижений);// Доработать. Взять из документа Выдача расх. материалов. Создание печатной формы.
            ПарСтрока.Сумма = СтрокаДокумента.Стоимость;
         ПарСтрока.ВидОбслуживания = СтрокаДокумента.ВидОбслуживания;

         СтрокаИтого = ПарСтрока.Сумма + СтрокаИтого;
         Таб.Вывести(ОбластьСтрока);
         НомерВыведеннойСтроки = НомерВыведеннойСтроки + 1;
      КонецЦикла;
      
      Если КоличествоПустыхСтрок > 0 Тогда
         Для Сч = 1 По КоличествоПустыхСтрок Цикл
            Таб.Вывести(ОбластьПустаяСтрока);   
         КонецЦикла;
      КонецЕсли;

      Если ЕстьЗаполнениеНаСледующейСтранице Тогда
         НомерСтраницы = НомерСтраницы + 1;
         Таб.Вывести(ОбластьШапкаТаблицы);
         Для Сч = 1 По ВтораяСтраница - Подвал Цикл
            Таб.Вывести(ОбластьПустаяСтрока);
         КонецЦикла;
      КОнецЕсли;
      
      ОбластьПодвал = Макет.ПолучитьОбласть("Подвал");
      ПарПодвал = ОбластьПодвал.Параметры;
      ПарПодвал.СтрокаИтого = СтрокаИтого;
      СуммаПрописью = уатОбщегоНазначенияТиповые.уатСформироватьСуммуПрописью(СтрокаИтого, Справочники.Валюты.НайтиПоКоду("643"));
        ПарПодвал.СуммаПрописью = СуммаПрописью;
      ПарПодвал.Бух2Кат = Бухгалтер2Категории;
      ПарПодвал.ЗамНачПоБлагоустройству = ЗамНАчальникаПоБлагоутройству;
      ПарПодвал.ЗамНачПоинфраструктуре = ЗамНачПоИнфраструктуре;
      Таб.Вывести(ОбластьПодвал);
      РезультирующийДокумент.Вывести(Таб);
      РезультирующийДокумент.ВывестиГоризонтальныйРазделительСтраниц();
      ОстатокСтр = НомерСтраницы % 2;
      Сообщить("" + НомерСтраницы + " остаток от деления ... " + ОстатокСтр);
      Если ОстатокСтр <> 0 Тогда
         ОбластьПС = Макет.ПолучитьОбласть("ПустаяСтрока2");
         РезультирующийДокумент.Вывести(ОбластьПС);
         РезультирующийДокумент.ВывестиГоризонтальныйРазделительСтраниц();
      КонецЕсли;
   КонецЦикла;
   ОбластьПовтора = Макет.Области.ШапкаТаблицы;
   Возврат РезультирующийДокумент;
   
КонецФункции


Выдает ошибку {Форма.Форма.Форма(284)}: Ошибка при вызове метода контекста (ПечатьТекущегоДокументаНаСервере)
   РезультирующийДокумент = ПечатьТекущегоДокументаНаСервере(ДокументПечати, РезультирующийДокумент);
по причине:
Ошибка передачи данных между клиентом и сервером. Значение недопустимого типа.
по причине:
Ошибка преобразования данных XDTO:
Запись значения свойства 'param':
   форма: Элемент
   имя: {http://v8.1c.ru/8.2/managed-application/modules}param
по причине:
Ошибка отображения типов:
Отсутствует отображение для типа 'СтрокаТаблицыЗначений'

Я так понял, что проблема в Переменной "РезультирующийДокумент". Проверил в отладчике, она имеет тип "ТабличныйДокумент". Не понятно, в чем ошибка. Подскажите пожалуйста! Заранее спасибо!


Оффлайн vitasw

  • *****
  • Сообщений: 2546
  • РЕПУТАЦИЯ: 309
  • КПД: 12%
  • Регистрация: 2015-02-10
  • Сайт: 
  • Профессия: Программист 1С
Неправильно поняли. Проблема ПечатьТекущегоДокументаНаСервере(ДокументПечати, РезультирующийДокумент);

Оффлайн ПростоБосс

  • *
  • Сообщений: 31
  • РЕПУТАЦИЯ: 2
  • КПД: 6%
  • Регистрация: 2012-01-11
  • Сайт: 
  • Профессия: Программист 1С
ДокументПечати = Элементы.ТаблицаДокументов.ТекущаяСтрока;
Вот где собака порылась. Получаешь из таблицы документов строку, которая наверняка имеет вид совсем даже не "Строка". И пытаешься передать ее на серверную сторону:
РезультирующийДокумент = ПечатьТекущегоДокументаНаСервере(ДокументПечати, РезультирующийДокумент);
Уж тогда передавай номер строки, что-ли... Ну, типа: ДокументПечати = Элементы.ТаблицаДокументов.ТекущиеДанные.НомерСтроки. А уж на серверной части по номеру строки, который на 1 больше, чем индекс таблицы значений найдешь свою строку.



Теги:
 

УТ 11.В документе "Заявка на расходование денежных средств" нет кнопки "Печать"!

Автор Valery3103Раздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 1
Просмотров: 3544
Последний ответ 29 Июн 2012, 18:37
от LexaK
Ошибка при загрузке данных через (Обработка "Выгрузка и загрузка данных XML")

Автор Сергей_87Раздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 1
Просмотров: 7927
Последний ответ 26 Апр 2012, 23:08
от Dethmontt
Печать справки "Б"

Автор wvlasРаздел Пользователям "1С - Предприятие 8"

Ответов: 0
Просмотров: 1909
Последний ответ 27 Апр 2016, 18:01
от wvlas
Как "поймать" нажатие на кнопку "Печать" в открываемом макете(табличный документ)?

Автор taramz5Раздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 3
Просмотров: 876
Последний ответ 14 Фев 2017, 14:27
от ilyay
Обработка "ПодборНоменклатуры"

Автор BigAnnРаздел Конфигурирование, программирование в "1С - Предприятие 8"

Ответов: 1
Просмотров: 2722
Последний ответ 18 Апр 2012, 20:38
от Dethmontt

* Живое общение

Не устроил ответ?

Зарегистрируйся и задай свой вопрос. Живое общение приносит результат намного быстрее.


Зарегистрироваться

* Реклама

* Поиск

* Последние задачи на разработку (фриланс)

* Реклама

* Последние вакансии

* Топ 10 авторов за месяц

alex0402
95 Сообщений
oleg-x
74 Сообщений
Геннадий ОбьГЭС Геннадий ОбьГЭС
66 Сообщений
Golickoff Golickoff
53 Сообщений
AIFrame
46 Сообщений
ilyay ilyay
40 Сообщений
Амал
30 Сообщений
MuI_I_Ika MuI_I_Ika
27 Сообщений
Dethmontt Dethmontt
22 Сообщений
lansy
22 Сообщений

* Кто онлайн

  • Точка Гостей: 948
  • Точка Скрытых: 0
  • Точка Пользователей: 12
  • Точка Сейчас на форуме:

* Облако тэгов

* Форум 1С с мобильного

* Инструменты

* Дополнительно

Поиск

 
SimplePortal 2.3.5 © 2008-2012, SimplePortal