Advertisement
irgen

Untitled

Mar 30th, 2016
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 21.08 KB | None | 0 0
  1. Функция Печать() Экспорт
  2. мВалютаРегламентированногоУчета = глЗначениеПеременной("ВалютаРегламентированногоУчета");
  3. ТабДокумент = Новый ТабличныйДокумент;
  4. //Макет = ПолучитьМакет("ЧекККМ");
  5. Запрос = Новый Запрос;
  6. Запрос.УстановитьПараметр("ТекущийДокумент", СсылкаНаОбъект.Ссылка);
  7. Запрос.УстановитьПараметр("Дата", СсылкаНаОбъект.Дата);
  8.  
  9. Запрос.Текст = "ВЫБРАТЬ
  10. | ДокЧек.Номер,
  11. | ДокЧек.Дата,
  12. | ДокЧек.КассаККМ,
  13. | ДокЧек.Организация КАК Организация,
  14. | ДокЧек.Организация.Представление КАК Поставщик,
  15. | ДокЧек.СуммаДокумента,
  16. | ДокЧек.ВидОперации,
  17. | ДокЧек.Оплата.(
  18. | НомерСтроки,
  19. | ВидОплаты,
  20. | Сумма
  21. | ),
  22. | ВЫБОР
  23. | КОГДА ЕСТЬNULL(ФИОФизЛицСрезПоследних.Фамилия, """") = """"
  24. | ТОГДА """"
  25. | ИНАЧЕ ФИОФизЛицСрезПоследних.Фамилия + "" "" + ВЫБОР
  26. | КОГДА ЕСТЬNULL(ФИОФизЛицСрезПоследних.Имя, """") = """"
  27. | ТОГДА """"
  28. | ИНАЧЕ (ВЫРАЗИТЬ(ФИОФизЛицСрезПоследних.Имя КАК СТРОКА(1))) + "". ""
  29. | КОНЕЦ + ВЫБОР
  30. | КОГДА ЕСТЬNULL(ФИОФизЛицСрезПоследних.Отчество, """") = """"
  31. | ТОГДА """"
  32. | ИНАЧЕ (ВЫРАЗИТЬ(ФИОФизЛицСрезПоследних.Отчество КАК СТРОКА(1))) + "".""
  33. | КОНЕЦ
  34. | КОНЕЦ КАК ФИО
  35. |ИЗ
  36. | Документ.ЧекККМ КАК ДокЧек
  37. | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Пользователи КАК Пользователи
  38. | ПО (Пользователи.Ссылка = ДокЧек.Ответственный)
  39. | ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ФизическиеЛица КАК ФизическиеЛица
  40. | ПО (Пользователи.ФизЛицо = ФизическиеЛица.Ссылка)
  41. | ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ФИОФизЛиц.СрезПоследних(&Дата, ) КАК ФИОФизЛицСрезПоследних
  42. | ПО (ФизическиеЛица.Ссылка = ФИОФизЛицСрезПоследних.ФизЛицо)
  43. |ГДЕ
  44. | ДокЧек.Ссылка = &ТекущийДокумент
  45. |
  46. |УПОРЯДОЧИТЬ ПО
  47. | ДокЧек.Товары.НомерСтроки,
  48. | ДокЧек.Оплата.НомерСтроки";
  49.  
  50. Шапка = Запрос.Выполнить().Выбрать();
  51. Шапка.Следующий();
  52.  
  53. //ТабДокумент = Новый ТабличныйДокумент;
  54. //ТабДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_Чек_Накладная";
  55.  
  56. Макет = ПолучитьМакет("ЧекККМ");
  57.  
  58. // Выводим шапку накладной.
  59. ОбластьМакета = Макет.ПолучитьОбласть("Заголовок");
  60. Если Шапка.ВидОперации = Перечисления.ВидыОперацийЧекККМ.Возврат Тогда
  61. ОбластьМакета.Параметры.ТекстЗаголовка = ОбщегоНазначения.СформироватьЗаголовокДокумента(Шапка, "Чек (возврат)");
  62. Иначе
  63. ОбластьМакета.Параметры.ТекстЗаголовка = ОбщегоНазначения.СформироватьЗаголовокДокумента(Шапка, "Чек");
  64. КонецЕсли;
  65. ТабДокумент.Вывести(ОбластьМакета);
  66.  
  67. ПредставлениеПоставщика = ФормированиеПечатныхФорм.ОписаниеОрганизации(УправлениеКонтактнойИнформацией.СведенияОЮрФизЛице(Шапка.Организация, Шапка.Дата), "ПолноеНаименование,");
  68. ОбластьМакета = Макет.ПолучитьОбласть("Поставщик");
  69. ОбластьМакета.Параметры.ПредставлениеПоставщика = ПредставлениеПоставщика;
  70. ОбластьМакета.Параметры.Поставщик = Шапка.Организация;
  71. ТабДокумент.Вывести(ОбластьМакета);
  72.  
  73. ОбластьМакета = Макет.ПолучитьОбласть("ИНН");
  74. ОбластьМакета.Параметры.ИНН = Шапка.Организация.ИНН;
  75. ТабДокумент.Вывести(ОбластьМакета);
  76.  
  77. ЗапросТовары = Новый Запрос;
  78. ЗапросТовары.Текст =
  79. "ВЫБРАТЬ
  80. | ЧекККМТовары.Номенклатура,
  81. | ЧекККМТовары.Номенклатура.Представление КАК Товар,
  82. | МИНИМУМ(ЧекККМТовары.НомерСтроки) КАК НомерСтроки,
  83. | ВЫРАЗИТЬ(ЧекККМТовары.Номенклатура.НаименованиеПолное КАК СТРОКА(100)) КАК ТоварПолноеНаименование,
  84. | ЧекККМТовары.Номенклатура.Код КАК Код,
  85. | ЧекККМТовары.Номенклатура.Артикул КАК Артикул,
  86. | СУММА(ЧекККМТовары.Количество) КАК Количество,
  87. | ЧекККМТовары.ЕдиницаИзмерения.Представление КАК ЕдиницаИзмерения,
  88. | ЧекККМТовары.Цена,
  89. | СУММА(ЧекККМТовары.ПроцентСкидкиНаценки) КАК Скидка,
  90. | СУММА(ЧекККМТовары.ПроцентАвтоматическихСкидок) КАК СкидкаАвтоматическая,
  91. | СУММА(ЧекККМТовары.Сумма) КАК Сумма,
  92. | ЧекККМТовары.СерияНоменклатуры КАК Серия,
  93. | ЧекККМТовары.ХарактеристикаНоменклатуры КАК Характеристика
  94. |ИЗ
  95. | Документ.ЧекККМ.Товары КАК ЧекККМТовары
  96. |ГДЕ
  97. | ЧекККМТовары.Ссылка = &Ссылка
  98. |
  99. |СГРУППИРОВАТЬ ПО
  100. | ЧекККМТовары.ЕдиницаИзмерения.Представление,
  101. | ЧекККМТовары.Номенклатура,
  102. | ВЫРАЗИТЬ(ЧекККМТовары.Номенклатура.НаименованиеПолное КАК СТРОКА(100)),
  103. | ЧекККМТовары.Номенклатура.Код,
  104. | ЧекККМТовары.Номенклатура.Артикул,
  105. | ЧекККМТовары.СерияНоменклатуры,
  106. | ЧекККМТовары.ХарактеристикаНоменклатуры,
  107. | ЧекККМТовары.Номенклатура.Представление,
  108. | ЧекККМТовары.Цена
  109. |
  110. |УПОРЯДОЧИТЬ ПО
  111. | НомерСтроки";
  112.  
  113. ЗапросТовары.УстановитьПараметр("Ссылка", СсылкаНаОбъект.Ссылка);
  114.  
  115. РезультатТовары = ЗапросТовары.Выполнить();
  116.  
  117. ВыборкаСтрокТовары = РезультатТовары.Выбрать();
  118. ЕстьСкидки = Ложь;
  119. Пока ВыборкаСтрокТовары.Следующий() Цикл
  120. Если ВыборкаСтрокТовары.Скидка + ВыборкаСтрокТовары.СкидкаАвтоматическая <> 0 Тогда
  121. ЕстьСкидки = Истина;
  122. КонецЕсли;
  123. КонецЦикла;
  124.  
  125. ДопКолонка = Константы.ДополнительнаяКолонкаПечатныхФормДокументов.Получить();
  126. Если ДопКолонка = Перечисления.ДополнительнаяКолонкаПечатныхФормДокументов.Артикул Тогда
  127. ВыводитьКоды = Истина;
  128. Колонка = "Артикул";
  129. ИначеЕсли ДопКолонка = Перечисления.ДополнительнаяКолонкаПечатныхФормДокументов.Код Тогда
  130. ВыводитьКоды = Истина;
  131. Колонка = "Код";
  132. Иначе
  133. ВыводитьКоды = Ложь;
  134. КонецЕсли;
  135.  
  136. ОбластьНомера = Макет.ПолучитьОбласть("ШапкаТаблицы|НомерСтроки");
  137. ОбластьКодов = Макет.ПолучитьОбласть("ШапкаТаблицы|КолонкаКодов");
  138. ОбластьДанных = Макет.ПолучитьОбласть("ШапкаТаблицы|Данные");
  139. ОбластьСкидок = Макет.ПолучитьОбласть("ШапкаТаблицы|Скидка");
  140. ОбластьСуммы = Макет.ПолучитьОбласть("ШапкаТаблицы|Сумма");
  141.  
  142. ТабДокумент.Вывести(ОбластьНомера);
  143. Если ВыводитьКоды Тогда
  144. ОбластьКодов.Параметры.ИмяКолонкиКодов = Колонка;
  145. ТабДокумент.Присоединить(ОбластьКодов);
  146. КонецЕсли;
  147. ТабДокумент.Присоединить(ОбластьДанных);
  148. Если ЕстьСкидки Тогда
  149. ТабДокумент.Присоединить(ОбластьСкидок);
  150. КонецЕсли;
  151. ТабДокумент.Присоединить(ОбластьСуммы);
  152.  
  153. ОбластьКолонкаТовар = Макет.Область("Товар");
  154. Если Не ВыводитьКоды Тогда
  155. ОбластьКолонкаТовар.ШиринаКолонки = ОбластьКолонкаТовар.ШиринаКолонки
  156. + Макет.Область("КолонкаКодов").ШиринаКолонки;
  157. КонецЕсли;
  158. Если Не ЕстьСкидки Тогда
  159. ОбластьКолонкаТовар.ШиринаКолонки = ОбластьКолонкаТовар.ШиринаКолонки
  160. + Макет.Область("СуммаБезСкидки").ШиринаКолонки
  161. + Макет.Область("СуммаСкидки").ШиринаКолонки;
  162. КонецЕсли;
  163.  
  164. ОбластьНомера = Макет.ПолучитьОбласть("Строка|НомерСтроки");
  165. ОбластьКодов = Макет.ПолучитьОбласть("Строка|КолонкаКодов");
  166. ОбластьДанных = Макет.ПолучитьОбласть("Строка|Данные");
  167. ОбластьСкидок = Макет.ПолучитьОбласть("Строка|Скидка");
  168. ОбластьСуммы = Макет.ПолучитьОбласть("Строка|Сумма");
  169.  
  170. Сумма = 0;
  171. ВсегоСкидок = 0;
  172. ВсегоБезСкидок = 0;
  173. НомерСтроки = 0;
  174. ВыборкаСтрокТовары =РезультатТовары.Выбрать();
  175. Пока ВыборкаСтрокТовары.Следующий() Цикл
  176. Если НЕ ЗначениеЗаполнено(ВыборкаСтрокТовары.Номенклатура) Тогда
  177. Сообщить("В одной из строк не заполнено значение номенклатуры - строка при печати пропущена.", СтатусСообщения.Важное);
  178. Продолжить;
  179. КонецЕсли;
  180. НомерСтроки = НомерСтроки+1;
  181. ОбластьНомера.Параметры.Заполнить(ВыборкаСтрокТовары);
  182. ОбластьНомера.Параметры.НомерСтроки = НомерСтроки;
  183.  
  184. ТабДокумент.Вывести(ОбластьНомера);
  185.  
  186. Если ВыводитьКоды Тогда
  187. Если Колонка = "Артикул" Тогда
  188. ОбластьКодов.Параметры.Артикул = ВыборкаСтрокТовары.Артикул;
  189. Иначе
  190. ОбластьКодов.Параметры.Артикул = ВыборкаСтрокТовары.Код;
  191. КонецЕсли;
  192. ТабДокумент.Присоединить(ОбластьКодов);
  193. КонецЕсли;
  194.  
  195. ОбластьДанных.Параметры.Заполнить(ВыборкаСтрокТовары);
  196. ОбластьДанных.Параметры.Товар = ?(НЕ ЗначениеЗаполнено(ВыборкаСтрокТовары.ТоварПолноеНаименование),
  197. ВыборкаСтрокТовары.Товар, ВыборкаСтрокТовары.ТоварПолноеНаименование)
  198. + ФормированиеПечатныхФорм.ПредставлениеСерий(ВыборкаСтрокТовары);
  199. ТабДокумент.Присоединить(ОбластьДанных);
  200.  
  201. Скидка = ВыборкаСтрокТовары.Цена * ВыборкаСтрокТовары.Количество - ВыборкаСтрокТовары.Сумма;
  202. Если ЕстьСкидки Тогда
  203. ОбластьСкидок.Параметры.Скидка = Скидка;
  204. ОбластьСкидок.Параметры.СуммаБезСкидки = ВыборкаСтрокТовары.Сумма + Скидка;
  205. ТабДокумент.Присоединить(ОбластьСкидок);
  206. КонецЕсли;
  207.  
  208. ОбластьСуммы.Параметры.Заполнить(ВыборкаСтрокТовары);
  209. ТабДокумент.Присоединить(ОбластьСуммы);
  210. Сумма = Сумма + ВыборкаСтрокТовары.Сумма;
  211. ВсегоСкидок = ВсегоСкидок + Скидка;
  212. ВсегоБезСкидок = Сумма + ВсегоСкидок;
  213. КонецЦикла;
  214.  
  215. // Вывести Итого.
  216. ОбластьНомера = Макет.ПолучитьОбласть("Итого|НомерСтроки");
  217. ОбластьКодов = Макет.ПолучитьОбласть("Итого|КолонкаКодов");
  218. ОбластьДанных = Макет.ПолучитьОбласть("Итого|Данные");
  219. ОбластьСкидок = Макет.ПолучитьОбласть("Итого|Скидка");
  220. ОбластьСуммы = Макет.ПолучитьОбласть("Итого|Сумма");
  221.  
  222. ТабДокумент.Вывести(ОбластьНомера);
  223. Если ВыводитьКоды Тогда
  224. ТабДокумент.Присоединить(ОбластьКодов);
  225. КонецЕсли;
  226. ТабДокумент.Присоединить(ОбластьДанных);
  227. Если ЕстьСкидки Тогда
  228. ОбластьСкидок.Параметры.ВсегоСкидок = ВсегоСкидок;
  229. ОбластьСкидок.Параметры.ВсегоБезСкидок = ВсегоБезСкидок;
  230. ТабДокумент.Присоединить(ОбластьСкидок);
  231. КонецЕсли;
  232. ОбластьСуммы.Параметры.Всего = Сумма;
  233. ТабДокумент.Присоединить(ОбластьСуммы);
  234.  
  235. // Вывести Сумму прописью.
  236. ОбластьМакета = Макет.ПолучитьОбласть("СуммаПрописью");
  237. ОбластьМакета.Параметры.ИтоговаяСтрока = "Всего наименований " + ВыборкаСтрокТовары.Количество()
  238. + ", на сумму " + ОбщегоНазначения.ФорматСумм(Шапка.СуммаДокумента, мВалютаРегламентированногоУчета);
  239. ОбластьМакета.Параметры.СуммаПрописью = ОбщегоНазначения.СформироватьСуммуПрописью(Шапка.СуммаДокумента, мВалютаРегламентированногоУчета);
  240. ТабДокумент.Вывести(ОбластьМакета);
  241.  
  242. // Вывести Оплату и Сдачу.
  243. СуммаОплат = 0;
  244. СуммаБезналичныхОплат = 0;
  245. СписокОплат = Новый Соответствие();
  246.  
  247. ВыборкаОплат = Шапка.Оплата.Выбрать();
  248. Пока ВыборкаОплат.Следующий() Цикл
  249. Если Шапка.ВидОперации = Перечисления.ВидыОперацийЧекККМ.Возврат
  250. И ВыборкаОплат.ВидОплаты.ТипОплаты <> Перечисления.ТипыОплатЧекаККМ.Наличные Тогда
  251. СуммаБезналичныхОплат = СуммаБезналичныхОплат + ВыборкаОплат.Сумма;
  252. КонецЕсли;
  253.  
  254. ЗаписьОплаты = СписокОплат.Получить(Строка(ВыборкаОплат.ВидОплаты.ТипОплаты));
  255. Если ЗаписьОплаты = Неопределено Тогда
  256. СписокОплат.Вставить(Строка(ВыборкаОплат.ВидОплаты.ТипОплаты), ВыборкаОплат.Сумма);
  257. Иначе
  258. СписокОплат.Вставить(Строка(ВыборкаОплат.ВидОплаты.ТипОплаты), ЗаписьОплаты + ВыборкаОплат.Сумма);
  259. КонецЕсли;
  260. СуммаОплат = СуммаОплат + ВыборкаОплат.Сумма;
  261. КонецЦикла;
  262.  
  263. //Отдельная подготовка наличной оплаты для чека возврата
  264. Если Шапка.ВидОперации = Перечисления.ВидыОперацийЧекККМ.Возврат Тогда
  265. СписокОплат.Вставить(Строка(Перечисления.ТипыОплатЧекаККМ.Наличные), Шапка.СуммаДокумента - СуммаБезналичныхОплат);
  266. КонецЕсли;
  267.  
  268. ОбластьМакета = Макет.ПолучитьОбласть("Оплата");
  269. ОплатаДобавлена = Ложь;
  270. Для Каждого ЗнПеречисления Из Перечисления.ТипыОплатЧекаККМ Цикл
  271. ЗаписьОплаты = СписокОплат.Получить(Строка(ЗнПеречисления));
  272. Если ЗаписьОплаты <> Неопределено Тогда
  273. ОбластьМакета.Параметры.Оплата = ?(ОплатаДобавлена, ОбластьМакета.Параметры.Оплата + Символы.ПС, "")
  274. + Строка(ЗнПеречисления) + ": " + Формат(ЗаписьОплаты, "ЧЦ=15; ЧДЦ=2; ЧРД=.; ЧН=; ЧГ=0");
  275. ОплатаДобавлена = Истина;
  276. КонецЕсли;
  277. КонецЦикла;
  278. Если Шапка.ВидОперации = Перечисления.ВидыОперацийЧекККМ.Продажа Тогда
  279. ОбластьМакета.Параметры.Сдача = Формат(СуммаОплат - Шапка.СуммаДокумента, "ЧЦ=15; ЧДЦ=2; ЧРД=.; ЧН=; ЧГ=0");
  280. Иначе
  281. ОбластьМакета.Параметры.Сдача = "0.00";
  282. КонецЕсли;
  283. ТабДокумент.Вывести(ОбластьМакета);
  284.  
  285. // Вывести подписи.
  286. ОбластьМакета = Макет.ПолучитьОбласть("Подписи");
  287. ОбластьМакета.Параметры.Заполнить(Шапка);
  288. ТабДокумент.Вывести(ОбластьМакета);
  289.  
  290.  
  291. ТабДокумент.АвтоМасштаб = Истина;
  292. ТабДокумент.ОриентацияСтраницы = ОриентацияСтраницы.Портрет;
  293. Возврат ТабДокумент
  294. КонецФункции
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement