Создание акта сверки для Управления торговлей с факсимиле

11.02.19

Задачи пользователя - Акт сверки

Создание обработки на основании встроенной печатной формы для формирования акта сверки взаиморасчётов с факсимиле.

Доброго времени суток.

Решил описать ещё раз создание внешней печатной формы. Покороче, по делу. Необходимо в стандартный акт сверки взаиморасчётов "Управления торговлей 11.4" добавить факсимиле.

   Имеем на входе конфигурацию Управление торговлей, редакция 11 (11.4.6.207), на платформе 1С:Предприятие 8.3 (8.3.13.1513)

   Создаём внешнюю обработку:

   Сохраняем её на диск. Делаем всё, как учили, с той лишь только оговоркой, что печать не требует дополнительной обработки конфигурации, а выполняется непосредственно из модуля менеджера данного документа. Макет, однако, необходимо скопировать.

   Далее сделаем то, без чего мы далеко не уедем, сформируем вот такую штуковину:

Функция СведенияОВнешнейОбработке() экспорт
    ПараметрыРегистрации = Новый Структура;
    МассивНазначений = Новый Массив;
    МассивНазначений.Добавить("Документ.СверкаВзаиморасчетов"); //Указываем документ к которому делаем внешнюю печ. форму
    ПараметрыРегистрации.Вставить("Вид", "ПечатнаяФорма"); //может быть - ПечатнаяФорма, ЗаполнениеОбъекта, ДополнительныйОтчет, СозданиеСвязанныхОбъектов... 
    ПараметрыРегистрации.Вставить("Назначение", МассивНазначений);
    ПараметрыРегистрации.Вставить("Наименование", "Акт сверки с факсимиле"); //имя под которым обработка будет зарегестрирована в справочнике внешних обработок
    ПараметрыРегистрации.Вставить("БезопасныйРежим", ЛОЖЬ);
    ПараметрыРегистрации.Вставить("Версия", "1.0"); 
    ПараметрыРегистрации.Вставить("Информация", "Заказная ВПФ"); 
    ТаблицаКоманд = ПолучитьТаблицуКоманд();
    ДобавитьКоманду(ТаблицаКоманд, "Акт сверки с факсимиле", "АктСверкиВзаимныхРасчетов", "ВызовСерверногоМетода", Истина, "ПечатьMXL");
    ПараметрыРегистрации.Вставить("Команды", ТаблицаКоманд);
    Возврат ПараметрыРегистрации;
КонецФункции

Функция ПолучитьТаблицуКоманд()
    Команды = Новый ТаблицаЗначений;
    Команды.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка"));//как будет выглядеть описание печ.формы для пользователя
    Команды.Колонки.Добавить("Идентификатор", Новый ОписаниеТипов("Строка")); //имя макета печ.формы
    Команды.Колонки.Добавить("Использование", Новый ОписаниеТипов("Строка")); //ВызовСерверногоМетода
    Команды.Колонки.Добавить("ПоказыватьОповещение", Новый ОписаниеТипов("Булево"));
    Команды.Колонки.Добавить("Модификатор", Новый ОписаниеТипов("Строка"));
    Возврат Команды;
КонецФункции

Процедура ДобавитьКоманду(ТаблицаКоманд, Представление, Идентификатор, Использование, ПоказыватьОповещение = Ложь, Модификатор = "")
    НоваяКоманда = ТаблицаКоманд.Добавить();
    НоваяКоманда.Представление = Представление; 
    НоваяКоманда.Идентификатор = Идентификатор;
    НоваяКоманда.Использование = Использование;
    НоваяКоманда.ПоказыватьОповещение = ПоказыватьОповещение;
    НоваяКоманда.Модификатор = Модификатор;
КонецПроцедуры

   То есть добавляем две необходимые функции и одну процедуру. Дальше делаем всё по накатанной. Модифицируем процедуру "Печать":

Процедура Печать(МассивОбъектов, КоллекцияПечатныхФорм, ОбъектыПечати, ПараметрыВывода) Экспорт
	ПараметрыПечати = Новый Структура();
	Если УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "АктСверкиВзаимныхРасчетов") Тогда
		
		УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(КоллекцияПечатныхФорм,
			"АктСверкиВзаимныхРасчетов",
			НСтр("ru='Акт сверки взаимных расчетов'"),
			СформироватьПечатнуюФормуАктСверкиВзаимныхРасчетов(МассивОбъектов, ОбъектыПечати));
	КонецЕсли;
	
	ФормированиеПечатныхФорм.ЗаполнитьПараметрыОтправки(ПараметрыВывода.ПараметрыОтправки, МассивОбъектов, КоллекцияПечатныхФорм);
	
КонецПроцедуры

   И останется только в Функции СформироватьПечатнуюФормуАктСверкиВзаимныхРасчетов заменить макет с штатного на наш. Предварительно переименовав его в обработке:

Макет = ПолучитьМакет("АктСверкиВзаимныхРасчетовФаксимиле");

   После этого на печать выводится именно наш макет.

   Теперь я решил прибраться, то есть убрать ненужные процедуры и функции. Вот список:

Процедура ДобавитьКомандыСозданияНаОсновании(КомандыСозданияНаОсновании, Параметры) Экспорт
Функция ДобавитьКомандуСоздатьНаОсновании(КомандыСозданияНаОсновании) Экспорт
Процедура ДобавитьКомандыОтчетов(КомандыОтчетов, Параметры) Экспорт
Процедура ЗаполнитьИменаРеквизитовПоХозяйственнойОперации(СтруктураПараметров, МассивВсехРеквизитов, МассивРеквизитовОперации) Экспорт
Функция СформироватьПечатнуюФормуАктСДаннымиКонтрагента(МассивОбъектов, ОбъектыПечати)

   Больше решил не убирать. Не мешается, и ладно.

   Теперь нужно присобачить факсимиле. Нужно его откуда-то взять. Конечно же из старой доброй обработки ПечатьСчетовНаОплату.

   Там есть вот такая штуковина:

Процедура ВывестиФаксимилеВТабличныйДокумент(Макет, ОбластьМакета, Организация, ПараметрыПечати = Неопределено) Экспорт
	
	ОтображатьФаксимиле = Ложь;
	Если ПараметрыПечати <> Неопределено И ПараметрыПечати.Свойство("ОтображатьФаксимиле") Тогда
		ОтображатьФаксимиле = ПараметрыПечати.ОтображатьФаксимиле;
	КонецЕсли;
	
	Если НЕ ОтображатьФаксимиле Тогда
		Возврат
	КонецЕсли;
	
	ФайлКартинки = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(Организация, "ФайлФаксимильнаяПечать");
	
	Если ОтображатьФаксимиле И НЕ ЗначениеЗаполнено(ФайлКартинки) Тогда
		ОбщегоНазначенияКлиентСервер.СообщитьПользователю(НСтр("ru ='Факсимиле для организации не указано. 
			|Укажите файл с факсимиле в карточке организации, раздел ""Настройка печати"".'"));
	КонецЕсли;
	
	Если Не ОбщегоНазначенияУТКлиентСервер.ЕстьРеквизитОбъекта(ОбластьМакета.Рисунки, "Факсимиле") Тогда
		// Картинки Факсимиле в этой области макета нет.
		
		Если Макет.Области.Найти("ОбластьФаксимиле") <> Неопределено Тогда
			
			// Проверить картинку факсимиле в области "ОбластьФаксимиле"
			ОбластьМакетаФаксимиле = Макет.ПолучитьОбласть("ОбластьФаксимиле");
			Если ОбщегоНазначенияУТКлиентСервер.ЕстьРеквизитОбъекта(ОбластьМакетаФаксимиле.Рисунки, "Факсимиле")
				И ЗначениеЗаполнено(ФайлКартинки) Тогда
				
				ОбластьМакета = ОбластьМакетаФаксимиле;
			Иначе
				Возврат;
			КонецЕсли;
		Иначе
			Возврат;
		КонецЕсли;
		
	КонецЕсли;
	
	Если Не ЗначениеЗаполнено(ФайлКартинки) Тогда
		ОбластьМакета.Рисунки.Удалить(ОбластьМакета.Рисунки.Факсимиле);
		Возврат;
	КонецЕсли;
	
	ДвоичныеДанныеФайла = РаботаСФайлами.ДвоичныеДанныеФайла(ФайлКартинки);
	
	Если ТипЗнч(ДвоичныеДанныеФайла) = Тип("Картинка") Тогда
		Картинка = ДвоичныеДанныеФайла;
	ИначеЕсли ТипЗнч(ДвоичныеДанныеФайла) = Тип("ДвоичныеДанные") Тогда
		Картинка = Новый Картинка(ДвоичныеДанныеФайла);
	Иначе
		Картинка = Новый Картинка;
	КонецЕсли; 
	
	ОбластьМакета.Рисунки.Факсимиле.Картинка = Картинка;
	
КонецПроцедуры

  Ещё в макет нужно добавить область "ОбластьФаксимиле" и заставить её работать.

   Пишу по порядку, что делаю. Ну понятно, скопировал вышеуказанную область. Затем в процедуру ДобавитьКомандыПечати(КомандыПечати) необходимо добавить вот такой параметр:

КомандаПечати.ДополнительныеПараметры.Вставить("ОтображатьФаксимиле", Истина);

   И, наконец, в функцию СформироватьПечатнуюФормуАктСверкиВзаимныхРасчетов(МассивОбъектов, ОбъектыПечати) нужно добавить код:

ФормированиеПечатныхФорм.ВывестиФаксимилеВТабличныйДокумент(Макет, ОбластьМакета, ДанныеДокумента.Организация, Новый Структура("ОтображатьФаксимиле", Истина));

   Так и сделал. Собрался уже хлопать в ладоши, но не тут то было. Подгрузил очередной раз внешнюю печатную форму, попытался распечатать акт сверки, но получил вот такое сообщение:

   Огорчению моему не было предела. Пришлось закомментировать строчку ФормированиеПечатныхФорм.ВывестиФаксимилеВТабличныйДокумент... и попытаться разобрать вышеописанную процедуру на цитаты.

   В принципе, ничего сверхестественного она не делает, проверяет необходимые значения, берёт факсимиле, соответствующий данной организации и шлёпает его в указанную область макета. Время было уже позднее, я подумал, "Утро вечера мудренее", плюнул на всё это, выключил компьютер и лёг спать. Но про обработку всё думал. Потом решил мыслить логически. В штатной конфигурации она же работает, внешняя печатная форма опять же взята из штатной конфигурации, значит ларчик-то должен как то просто открываться. Вспоминаются ребусы из спичек: переложите одну спичку так, чтобы из нуля получилось сто. И О ЧУДО!!!!! Всего лишь переставил строчку из одного места в другое и ВСЁ ЗАРАБОТАЛО!!! От перестановки мест слагаемых сумма иногда кардинально меняется.

   Вышеуказанную строчку всего лишь нужно было переместить на три строчки вниз!

   Всю функцию выкладывать не буду, а только фрагмент, куда нужно вставить вызов штатной процедуры:

		// ПОДПИСИ
		
		ОбластьМакета = Макет.ПолучитьОбласть("Подписи");
		
		
		ОбластьМакета.Параметры.Заполнить(ДанныеДокумента);
		ОбластьМакета.Параметры.ПредставлениеОрганизации = ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОбОрганизации, 
												  			  "ПолноеНаименование,ИНН,ЮридическийАдрес");
		
		ОбластьМакета.Параметры.КонтрагентНаименование   = ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОКонтрагенте, 
												  			  "ПолноеНаименование,ИНН,ЮридическийАдрес");
		ФормированиеПечатныхФорм.ВывестиФаксимилеВТабличныйДокумент(Макет, ОбластьМакета, ДанныеДокумента.Организация, Новый Структура("ОтображатьФаксимиле", Истина));
		ТабличныйДокумент.Вывести(ОбластьМакета);
		
		// ПРИЛОЖЕНИЕ
		Если ДанныеДокумента.РасшифровкаПоЗаказам Тогда
			
			ТаблицаОстатков = ОстаткиРасчетов(ДанныеДокумента);
			
			Если ТаблицаОстатков <> Неопределено Тогда
				
				ТабличныйДокумент.ВывестиГоризонтальныйРазделительСтраниц();
				
				ТекстЗаголовкаПриложения = ОбщегоНазначенияУТКлиентСервер.СформироватьЗаголовокДокумента(ДанныеДокумента,
					НСтр("ru='к акту сверки взаимных расчетов'"));
				
				ОбластьМакета = Макет.ПолучитьОбласть("ЗаголовокПриложение");
				ОбластьМакета.Параметры.ТекстЗаголовкаПриложения = ТекстЗаголовкаПриложения;
				ОбластьМакета.Параметры.КонецПериодаСверки = Формат(ДанныеДокумента.КонецПериода, "ДЛФ=ДД");
				ТабличныйДокумент.Вывести(ОбластьМакета);
				
				МассивВалют = ОбщегоНазначенияУТ.УдалитьПовторяющиесяЭлементыМассива(ТаблицаОстатков.ВыгрузитьКолонку("ВалютаВзаиморасчетов"));
				Если ДанныеДокумента.РасшифровкаПоПартнерам Тогда
					МассивПартнеров = ОбщегоНазначенияУТ.УдалитьПовторяющиесяЭлементыМассива(ТаблицаОстатков.ВыгрузитьКолонку("Партнер"));
				КонецЕсли; 
				
				ПараметрыТаблицыЗадолженностей = Новый Структура;
				ПараметрыТаблицыЗадолженностей.Вставить("ДанныеДокумента", ДанныеДокумента);
				ПараметрыТаблицыЗадолженностей.Вставить("ТаблицаОстатков", ТаблицаОстатков);
				ПараметрыТаблицыЗадолженностей.Вставить("СтруктураПредставленийУчастников", СтруктураПредставленийУчастников);
				ПараметрыТаблицыЗадолженностей.Вставить("МассивВалют", МассивВалют);
				ПараметрыТаблицыЗадолженностей.Вставить("Макет", Макет);
				ПараметрыТаблицыЗадолженностей.Вставить("ВыводитьПодвал", Ложь);
				
				Если ДанныеДокумента.РасшифровкаПоПартнерам Тогда
					Для Каждого Партнер Из МассивПартнеров Цикл
						ТабличныйДокумент.Вывести(ВывестиТаблицуЗадолженности(ПараметрыТаблицыЗадолженностей, Партнер));
					КонецЦикла; 
				Иначе
					ТабличныйДокумент.Вывести(ВывестиТаблицуЗадолженности(ПараметрыТаблицыЗадолженностей));
				КонецЕсли;	
				
				ОбластьМакета = Макет.ПолучитьОбласть("Подписи");
				ОбластьМакета.Параметры.Заполнить(ДанныеДокумента);
				ОбластьМакета.Параметры.ПредставлениеОрганизации = ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОбОрганизации, 
														  			  "ПолноеНаименование,ИНН,ЮридическийАдрес");
				
				ОбластьМакета.Параметры.КонтрагентНаименование   = ФормированиеПечатныхФорм.ОписаниеОрганизации(СведенияОКонтрагенте, 
														  			  "ПолноеНаименование,ИНН,ЮридическийАдрес");
				ФормированиеПечатныхФорм.ВывестиФаксимилеВТабличныйДокумент(Макет, ОбластьМакета, ДанныеДокумента.Организация, Новый Структура("ОтображатьФаксимиле", Истина));
				ТабличныйДокумент.Вывести(ОбластьМакета);
				
			КонецЕсли; 
			
		КонецЕсли;
		
		УправлениеПечатью.ЗадатьОбластьПечатиДокумента(ТабличныйДокумент, НомерСтрокиНачало, ОбъектыПечати, ДанныеДокумента.ДокументСсылка);
		
	КонецЦикла;

	ТабличныйДокумент.АвтоМасштаб = Истина;
	
	Если ПривилегированныйРежим() Тогда
		УстановитьПривилегированныйРежим(Ложь);
	КонецЕсли;

	Возврат ТабличныйДокумент;
	
КонецФункции // СформироватьПечатнуюФормуАктСверкиВзаимныхРасчетов(МассивОбъектов, ОбъектыПечати)

   На всякий случай вставил её дважды, в ПОДПИСИ и в ПРИЛОЖЕНИЕ. Но это ещё не всё. Область факсимиле взята из счёта. Она закрывает все подписи, и нашей организации, и контрагента. Поэтому макет придётся немного модифицировать. Наткунлся на очередной трабл. И закралась мысль, почему 1С сама не делает факсимиле в акте сверки. Оказалось, что области макета "Подписи" и "ОбластьФаксимиле" как то очень сложно между собой взаимодействуют. Убил часа три, пытаясь вывести информацию о контрагенте. Плюнул, оставил пустые подписи.

   Ну вот вроде бы и всё. У меня всё получилось.

Акт сверки факсимиле логотип разработка ВПФ

См. также

Печатные формы Взаиморасчеты Оптовая торговля Производство готовой продукции (работ, услуг) Акт сверки Бухгалтер Пользователь Оперативный учет Управляемые формы 1С:ERP Управление предприятием 2 1С:Управление торговлей 11 1С:Комплексная автоматизация 2.х Россия Бухгалтерский учет Управленческий учет Платные (руб)

Задайте для каждой организации свою печать и для каждого физического лица свою подпись. Выберите в документе печатную форму "... с печатью и подписью" - и автоматически сформируется табличный документ с печатью и подписями той организации и ответственных лиц, которые указаны в документе.

14400 руб.

13.03.2018    62730    221    79    

120

Взаиморасчеты Email рассылки Акт сверки Бухгалтер Пользователь Платформа 1С v8.3 Бухгалтерский учет 1С:Бухгалтерия 3.0 Бухгалтерский учет Платные (руб)

Внешняя обработка для Бухгалтерии 3.0 - позволяет автоматически формировать документы «Акт сверки расчетов» с контрагентами за выбранный период с последующей фоновой отправкой на почту контрагента.

3000 руб.

25.11.2020    25513    267    8    

230

Взаиморасчеты Email рассылки Акт сверки Бухгалтер Пользователь Платформа 1С v8.3 1С:Управление нашей фирмой 1.6 1С:Управление нашей фирмой 3.0 Бухгалтерский учет Управленческий учет Платные (руб)

Создать и отправить 1000 Актов серки контрагентам за 5 мин ?! Легко! Разработано для конфигурации УНФ Массовое создание и рассылка Актов сверки в три клика.

6000 руб.

13.01.2022    11180    8    13    

14

Email рассылки Взаиморасчеты Акт сверки Бухгалтер Платформа 1С v8.3 Бухгалтерский учет 1С:Бухгалтерия 3.0 Бухгалтерский учет Платные (руб)

Данная обработка позволяет сократить объем ручных операций, выполняемых ежемесячно бухгалтером или его помощником за счет автоматизации систематического процесса.

7800 руб.

12.02.2019    33714    27    24    

26

Взаиморасчеты Email рассылки Акт сверки Бухгалтер Платформа 1С v8.3 Бухгалтерский учет 1С:Управление торговлей 10 1С:Бухгалтерия 3.0 Бухгалтерский учет Платные (руб)

Обработки предназначены для массового создания актов сверки и отправки их по электронной почте для конфигураций Управление торговлей 10.3. и Бухгалтерия предприятия 3.0. Для Бухгалтерии 3.0 Разработка велась на 1С:Предприятие 8.3 (8.3.15.1830). проверялась на Бухгалтерия предприятия 3.0 (3.0.71.83) и 3.0.76.77 Для Управление торговлей 10.3 Разработка велась на 1С:Предприятие 8.3 релиз конфигурации (10.3.61.2) . РАБОТАЕТ НА БАЗОВЫХ и ПРОФ. ВЕРСИЯХ.

2520 руб.

24.04.2020    32248    123    66    

102

Акт сверки Бухгалтер Пользователь Платформа 1С v8.3 1С:Розница 2 Управленческий учет Платные (руб)

Расширение, добавляющее документ Акт сверки в конфигурацию Розница 2.3.

2000 руб.

26.02.2021    17176    59    48    

49

Email рассылки Акт сверки Бухгалтер Платформа 1С v8.3 1С:Управление торговлей 11 Россия Платные (руб)

Помощник бухгалтера, занимающегося контролем за взаиморасчётами с клиентами, выполнен в форме внешней обработки, позволяющей упростить процесс создания и рассылки сверки взаиморасчётов клиентам.

3600 руб.

18.12.2024    375    1    0    

1
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. laf 21.02.20 09:55 Сейчас в теме
Спасибо. А как все-таки быть, если факсимиле счета и акта разные?
2. zemskov 69 25.02.20 05:23 Сейчас в теме
Дорабатывать нужно. Нецелесообразно это
3. andryandry 100 25.02.20 10:15 Сейчас в теме
просто триллер какой то )), а почему готовый файл не выложили?
Ирга; +1 Ответить
4. zemskov 69 26.02.20 04:47 Сейчас в теме
5. DRY 17.10.22 18:56 Сейчас в теме
Спасибо, помогли! Долго колупался без этой статьи.
Оставьте свое сообщение