Внедрение счет-фактуры в конфигурацию 1С 8.3 Отчетность предпринимателя, редакция 2.0

29.04.14

Задачи пользователя - Адаптация типовых решений

В типовой конфигурации для индивидуальных предпринимателей "Отчетность предпринимателя, редакция 2.0" отсутствует возможность печати счет-фактуры. Также в конфигурации отсутствует механизм внедрения внешних печатных форм. Поделюсь опытом внедрения возможности печати счет-фактуры для документа "Оказание услуг (акт)".

Скачать исходный код

Наименование Файл Версия Размер
Инструкция + макет печатной формы счет-фактуры
.zip 312,93Kb
1
.zip 1.1 312,93Kb 1 Скачать

В типовой конфигурации для индивидуальных предпринимателей "Отчетность предпринимателя, редакция 2.0" отсутствует возможность печати счет-фактуры. Также в конфигурации отсутствует механизм внедрения внешних печатных форм. Поделюсь опытом внедрения возможности печати счет-фактуры для документа "Оказание услуг (акт)".

В качетстве примера взята последняя на данный момент версия конфигурации "Отчетность предпринимателя, редакция 2.0 (2.0.3.22)".

Последовательность действий

1. Включаем возможность редактирования конфигурации

Для этого в конфигураторе открываем Конфигурация - Поддержка - Настройка поддержки... Нажимаем "Включить возможность изменения" и выбираем пункты "Объект поставщика редактируется с сохранением поддержки". Нажимаем ОК и сохраняем конфигурацию.

Включение возможности редактирования

2. Раскрываем в конфигурации документ "ОказаниеУслуг" и добавляем для него макет с именем "ПФ_MXL_СчетФактура1137".

3. Копируем в макет содержимое типового макета счет-фактуры (можно взять из любой типовой конфигурации, либо скачать ниже во вложениях к этой статье).

Вставка макета счет-фактуры

4. В форме документа "ОказаниеУслуг" добавляем кнопку печати счет-фактуры (например, в выпадающем меню "Экспорт и печать") и создаем команду для нее с выполнением на клиенте.

Добавление команды печати счет-фактуры для документа

5. Вставляем следующий код для команды печати счет-фактуры из формы:

Макет = "ПФ_MXL_СчетФактура1137";
	
	УправлениеПечатьюДокументовКлиент.ПроверитьИРаспечатать(Макет, Объект.Ссылка, Новый Структура("Источник,Уникальность,Окно"));
		
	Если Не Объект.Проведен Тогда
		ПолучитьДокументНаСервере(Объект.Ссылка);
	КонецЕсли;

6. Открываем модуль менеджера для объекта "ОказаниеУслуг", и в конце модуля добавляем следующий код:

//+ПечатьСчетФактуры
Функция СформироватьПечатнуюФормуСчетФактуры(МассивОбъектов, ОбъектыПечати) Экспорт

Возврат СоздатьТабличныйДокументСчетФактура(МассивОбъектов, ОбъектыПечати);

КонецФункции

Функция ФормаМножественногоЧисла(Слово1, Слово2, Слово3, Знач ЦелоеЧисло) Экспорт

// Изменим знак целого числа, иначе отрицательные числа будут неправильно преобразовываться
Если ЦелоеЧисло < 0 Тогда
ЦелоеЧисло = -1 * ЦелоеЧисло;
КонецЕсли;

Если ЦелоеЧисло <> Цел(ЦелоеЧисло) Тогда
// для нецелых чисел - всегда вторая форма
Возврат Слово2;
КонецЕсли;

// остаток
Остаток = ЦелоеЧисло%10;
Если (ЦелоеЧисло >10) И (ЦелоеЧисло<20) Тогда
// для второго десятка - всегда третья форма
Возврат Слово3;
ИначеЕсли Остаток=1 Тогда
Возврат Слово1;
ИначеЕсли (Остаток>1) И (Остаток<5) Тогда
Возврат Слово2;
Иначе
Возврат Слово3;
КонецЕсли;

КонецФункции

Функция ПроверитьВыводТабличногоДокумента(ТабДокумент, ВыводимыеОбласти, РезультатПриОшибке = Истина) Экспорт

Попытка
Возврат ТабДокумент.ПроверитьВывод(ВыводимыеОбласти);
Исключение
ОписаниеОшибки = ИнформацияОбОшибке();
ЗаписьЖурналаРегистрации(
НСТр("ru = 'Невозможно получить информацию о текущем принтере (возможно, в системе не установлено ни одного принтера)'"),
УровеньЖурналаРегистрации.Ошибка,,, ОписаниеОшибки.Описание);
Возврат РезультатПриОшибке;
КонецПопытки;

КонецФункции // ПроверитьВыводТабличногоДокумента()

Функция ПроверитьВыводСчетаФактурыНаСтраницу(ТабДокумент, ОбластьТекСтроки, ЭтоПоследняяСтрока, Макет, НомерЛиста, НомерСчетаФактуры, ЭтоУниверсальныйПередаточныйДокумент = Ложь)

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

РезультатПроверки = ПроверитьВыводТабличногоДокумента(ТабДокумент, СтрокаСПодвалом);

Если НЕ РезультатПроверки Тогда
// Вывод разделителя и заголовка таблицы на новой странице

НомерЛиста = НомерЛиста + 1;

ОбластьНумерацияЛистов = Макет.ПолучитьОбласть("НумерацияЛистов");
ОбластьНумерацияЛистов.Параметры.Номер = НомерСчетаФактуры;
ОбластьНумерацияЛистов.Параметры.НомерЛиста = НомерЛиста;

ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц();

ТабДокумент.Вывести(ОбластьНумерацияЛистов);
ТабДокумент.Вывести(Макет.ПолучитьОбласть("ЗаголовокТаблицы"));

КонецЕсли;

Возврат РезультатПроверки;

КонецФункции

Функция СоздатьТабличныйДокументСчетФактура(МассивОбъектов, ОбъектыПечати)

ТабДокумент = Новый ТабличныйДокумент;
ТабДокумент.ИмяПараметровПечати = "ПАРАМЕТРЫ_ПЕЧАТИ_РеализацияТоваровУслуг_СчетФактура";

Макет = ПолучитьМакет("ПФ_MXL_СчетФактура1137");

Запрос = Новый Запрос(
"ВЫБРАТЬ
| ОказаниеУслуг.Ссылка,
| ОказаниеУслуг.Номер,
| ОказаниеУслуг.Дата,
| ОказаниеУслуг.Организация КАК Поставщик,
| ОказаниеУслуг.Организация.НаименованиеПолное КАК ОрганизацияНаименованиеПолное,
| ОказаниеУслуг.Организация.Наименование КАК ОрганизацияНаименование,
| ОказаниеУслуг.Организация.ИНН КАК ИННПоставщика,
| ОказаниеУслуг.Организация.КПП КАК КПППоставщика,
| ЕСТЬNULL(ОрганизацияАдрес.ЗначенияПолей, """") КАК ЮрАдресОрганизации,
| ЕСТЬNULL(ПочтовыйАдресКонтрагента.ЗначенияПолей, """") КАК ПочтовыйАдресКонтрагента,
| ЕСТЬNULL(ФактАдресКонтрагента.ЗначенияПолей, """") КАК ФактАдресКонтрагента,
| ЕСТЬNULL(ЮрАдресКонтрагента.ЗначенияПолей, """") КАК ЮрАдресКонтрагента,
| ОказаниеУслуг.Контрагент КАК Покупатель,
| ОказаниеУслуг.Контрагент.Наименование КАК КонтрагентНаименование,
| ОказаниеУслуг.Контрагент.НаименованиеПолное КАК КонтрагентНаименованиеПолное,
| ОказаниеУслуг.Контрагент.ИНН КАК ИННПокупателя,
| ОказаниеУслуг.Контрагент.КПП КАК КПППокупателя,
| ВЫБОР
| КОГДА ОказаниеУслуг.Организация.ВидОрганизации = ЗНАЧЕНИЕ(Перечисление.ВидыОрганизаций.Организация)
| ТОГДА ЕСТЬNULL(ОтветственныеЛицаОрганизацийСрезПоследних.ФизическоеЛицо.Наименование, ""<<рукводитель не указан>>"")
| ИНАЧЕ ОказаниеУслуг.Организация.НаименованиеПолное
| КОНЕЦ КАК РуководительОрганизации,
| ОказаниеУслуг.Услуги.(
| Номенклатура.Наименование КАК ТоварНаименование,
| Номенклатура.НаименованиеПолное КАК ТоварНаименованиеПолное,
| Количество,
| Цена,
| Сумма,
| Номенклатура.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
| Номенклатура.ЕдиницаИзмерения.Код КАК ЕдиницаИзмеренияКод
| ) КАК Услуги
|ИЗ
| Документ.ОказаниеУслуг КАК ОказаниеУслуг
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Организации.КонтактнаяИнформация КАК ОрганизацияАдрес
| ПО ОказаниеУслуг.Организация = ОрганизацияАдрес.Ссылка
| И (ОрганизацияАдрес.Вид = ЗНАЧЕНИЕ(Справочник.ВидыКонтактнойИнформации.ЮрАдресОрганизации))
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Контрагенты.КонтактнаяИнформация КАК ПочтовыйАдресКонтрагента
| ПО (ПочтовыйАдресКонтрагента.Вид = ЗНАЧЕНИЕ(Справочник.ВидыКонтактнойИнформации.ПочтовыйАдресКонтрагента))
| И ОказаниеУслуг.Контрагент = ПочтовыйАдресКонтрагента.Ссылка
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Контрагенты.КонтактнаяИнформация КАК ФактАдресКонтрагента
| ПО (ФактАдресКонтрагента.Вид = ЗНАЧЕНИЕ(Справочник.ВидыКонтактнойИнформации.ФактАдресКонтрагента))
| И ОказаниеУслуг.Контрагент = ФактАдресКонтрагента.Ссылка
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Контрагенты.КонтактнаяИнформация КАК ЮрАдресКонтрагента
| ПО (ЮрАдресКонтрагента.Вид = ЗНАЧЕНИЕ(Справочник.ВидыКонтактнойИнформации.ЮрАдресКонтрагента))
| И ОказаниеУслуг.Контрагент = ЮрАдресКонтрагента.Ссылка
| ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.ОтветственныеЛицаОрганизаций.СрезПоследних(&Дата, ОтветственноеЛицо = ЗНАЧЕНИЕ(Перечисление.ОтветственныеЛицаОрганизаций.Руководитель)) КАК ОтветственныеЛицаОрганизацийСрезПоследних
| ПО ОказаниеУслуг.Организация = ОтветственныеЛицаОрганизацийСрезПоследних.Организация
|ГДЕ
| ОказаниеУслуг.Ссылка В(&МассивОбъектов)");

Запрос.УстановитьПараметр("МассивОбъектов", МассивОбъектов);
Запрос.УстановитьПараметр("Дата", ТекущаяДата());

ДанныеШапки = Запрос.Выполнить().Выбрать();

Пока ДанныеШапки.Следующий() Цикл

СведенияОПоставщике = УправлениеПечатьюДокументов.СведенияОЮрФизЛице(ДанныеШапки.Поставщик, ДанныеШапки.Дата);
СведенияОПолучателе = УправлениеПечатьюДокументов.СведенияОЮрФизЛице(ДанныеШапки.Покупатель, ДанныеШапки.Дата);

НомерСтрокиНачало = ТабДокумент.ВысотаТаблицы + 1;

ОбластьМакета = Макет.ПолучитьОбласть("Шапка");
ОбластьМакета.Параметры.Заполнить(ДанныеШапки);

НомерСчетаФактуры = "Счет-фактура № " + ДанныеШапки.Номер + " от " + Формат(ДанныеШапки.Дата, "ДЛФ='ДД'");

ОбластьМакета.Параметры.Номер = НомерСчетаФактуры;
ОбластьМакета.Параметры.НомерИсправления = "Исправление № ---- от ----";
ОбластьМакета.Параметры.ПредставлениеПоставщика = "Продавец: " + ?(ПустаяСтрока(ДанныеШапки.ОрганизацияНаименованиеПолное),
ДанныеШапки.ОрганизацияНаименование,
ДанныеШапки.ОрганизацияНаименованиеПолное);
ОбластьМакета.Параметры.АдресПоставщика = "Адрес: " + УправлениеПечатьюДокументов.ОписаниеОрганизации(СведенияОПоставщике, "ЮридическийАдрес");
ОбластьМакета.Параметры.ИННПоставщика = "ИНН/КПП продавца: " + ДанныеШапки.ИННПоставщика + ?(ЗначениеЗаполнено(ДанныеШапки.КПППоставщика), "/" + ДанныеШапки.КПППоставщика, "");
ОбластьМакета.Параметры.ПредставлениеГрузоотправителя = "Грузоотправитель и его адрес: ----";

ОбластьМакета.Параметры.ПредставлениеГрузополучателя = "Грузополучатель и его адрес: ----";

ОбластьМакета.Параметры.ПоДокументу = "К платежно-расчетному документу № от";

ОбластьМакета.Параметры.ПредставлениеПокупателя = "Покупатель: " + ?(ПустаяСтрока(ДанныеШапки.КонтрагентНаименованиеПолное),
ДанныеШапки.КонтрагентНаименование,
ДанныеШапки.КонтрагентНаименованиеПолное);

ОбластьМакета.Параметры.АдресПокупателя = "Адрес: " + УправлениеПечатьюДокументов.ОписаниеОрганизации(СведенияОПолучателе, "ЮридическийАдрес");
ОбластьМакета.Параметры.ИННПокупателя = "ИНН/КПП покупателя: " + ДанныеШапки.ИННПокупателя + ?(ЗначениеЗаполнено(ДанныеШапки.КПППокупателя), "/" + ДанныеШапки.КПППокупателя, "");
ОбластьМакета.Параметры.Валюта = "Валюта: наименование, код Российский рубль, 643";

ТабДокумент.Вывести(ОбластьМакета);

ОбластьМакета = Макет.ПолучитьОбласть("ЗаголовокТаблицы");
ТабДокумент.Вывести(ОбластьМакета);

ОбластьМакета = Макет.ПолучитьОбласть("Строка");

Выборка = ДанныеШапки.Услуги.Выбрать();

КоличествоСтраниц = 1;

СчетФактураБезНДС = Истина;
НДСНеВыставляетя = Истина;

НомерСтроки = 0;
НомерЛиста = 1;
КоличествоСтрок = Выборка.Количество();

// ради одного поля не пользуемся запросом и выгрузками, просто накопим
СуммаВсего = 0;

Пока Выборка.Следующий() Цикл

НомерСтроки = НомерСтроки + 1;
СуммаВсего = СуммаВсего + Выборка.Сумма;

ОбластьМакета.Параметры.Заполнить(Выборка);
ОбластьМакета.Параметры.СтавкаНДС = "Без НДС";
ОбластьМакета.Параметры.Стоимость = Выборка.Сумма;
ОбластьМакета.Параметры.Всего = Выборка.Сумма;
ОбластьМакета.Параметры.СуммаНДС = "без НДС";
ОбластьМакета.Параметры.Акциз = "без акциза";
ОбластьМакета.Параметры.СтранаПроисхожденияКод = "-----";
ОбластьМакета.Параметры.ПредставлениеСтраны = "-----";
ОбластьМакета.Параметры.ПредставлениеГТД = "-----";

Если НЕ ПроверитьВыводСчетаФактурыНаСтраницу(ТабДокумент, ОбластьМакета, (НомерСтроки = КоличествоСтрок), Макет, НомерЛиста, НомерСчетаФактуры) Тогда
КоличествоСтраниц = КоличествоСтраниц + 1;
КонецЕсли;

ТабДокумент.Вывести(ОбластьМакета);

КонецЦикла;
ТабДокумент.Область(ТабДокумент.ВысотаТаблицы,,ТабДокумент.ВысотаТаблицы,).ВместеСоСледующим = Истина;

// Вывод итоговых сумм

ОбластьМакета = Макет.ПолучитьОбласть("Итого");
ОбластьМакета.Параметры.ИтогоСтоимость = СуммаВсего;

ОбластьМакета.Параметры.ИтогоСуммаНДС = "без НДС";

ОбластьМакета.Параметры.ИтогоВсего = СуммаВсего;
ТабДокумент.Вывести(ОбластьМакета);

// Вывод подвала
КоличествоЛистов = СтроковыеФункцииКлиентСервер.ПодставитьПараметрыВСтроку(
НСтр("ru = 'Документ составлен на%1%2 %3'"), Символы.ПС, КоличествоСтраниц,
ФормаМножественногоЧисла(
НСтр("ru = 'листе'"), НСтр("ru = 'листах'"), НСтр("ru = 'листах'"), КоличествоСтраниц));

ОбластьМакета = Макет.ПолучитьОбласть("Подвал");
ОбластьМакета.Параметры.ФИОПБОЮЛ = ДанныеШапки.ОрганизацияНаименование;
ТабДокумент.Вывести(ОбластьМакета);

ТабДокумент.ВывестиГоризонтальныйРазделительСтраниц();

// В табличном документе зададим имя области, в которую был
// выведен объект. Нужно для возможности печати покомплектно.
УправлениеПечатью.ЗадатьОбластьПечатиДокумента(ТабДокумент,
НомерСтрокиНачало, ОбъектыПечати, ДанныеШапки.Ссылка);
КонецЦикла;

Возврат ТабДокумент;

КонецФункции // ПечатьСчетФактуры()
//-ПечатьСчетФактуры

7. Для процедуры Печать этого же модуля менеджера объекта перед "КонецЕсли" добавляем следующий код:

	//+ПечатьСчетФактуры
	ИначеЕсли УправлениеПечатью.НужноПечататьМакет(КоллекцияПечатныхФорм, "ПФ_MXL_СчетФактура1137") Тогда
		УправлениеПечатью.ВывестиТабличныйДокументВКоллекцию(
			КоллекцияПечатныхФорм,
			"ПФ_MXL_СчетФактура1137",
			"Счет-фактура по Постановлению № 1137", СформироватьПечатнуюФормуСчетФактуры(МассивОбъектов, ОбъектыПечати));
	//-ПечатьСчетФактуры

В результате чего процедура будет выглядеть следующим образом:

Общий вид процедуры

Запускаем конфигурацию и проверяем.

 

P.S. Не забываем ставить "+" статье, если она вам пригодилась! ;)

Печатная форма счет-фактуры для Отчетности предпринимателя 2.0

См. также

Табличная часть в доп. реквизитах и формирование таблиц в шаблоне docx для 1С:ДО 3.0

Адаптация типовых решений Платформа 1С v8.3 1С:Документооборот Россия Платные (руб)

Расширение конфигурации для «1С:Документооборот КОРП», редакция 3.0. позволяет: 1.использовать произвольные табличные части в качестве дополнительных реквизитов к документу; 2 использовать произвольные табличные части в шаблонах в формате docx для автоматического заполнения таблиц.

29400 руб.

29.06.2023    4652    9    5    

18

Расширение для 1С:УНФ. Автоматическое снятие резервов в Заказах покупателей

Логистика, склад и ТМЦ Адаптация типовых решений Платформа 1С v8.3 1С:Управление нашей фирмой 1.6 1С:Управление нашей фирмой 3.0 Россия Управленческий учет Платные (руб)

Чтобы не допустить путаницы с обещаниями клиентам и для четкого контроля исполнения заказов мы используем резервирование товаров. Мы доработали УНФ, чтобы она автоматически отменяла старые резервы и не мешала эффективно продавать.

7200 руб.

02.08.2023    3058    4    0    

20

Создать на основании - своя кнопка (БСП). Проблема двух подменю Создать на основании

БСП (Библиотека стандартных подсистем) Адаптация типовых решений Платформа 1С v8.3 1С:ERP Управление предприятием 2 Бесплатно (free)

Понадобилось в подменю "Создать на основании" добавить свою команду, которая открывает обработку. В процессе доработок появилась проблема двух подменю "Создать на основании". В статье о том, как решились проблемы.

01.03.2024    1685    dimanich70    8    

14

Доработка отчета "Связанные документы" (структура подчиненности) для вывода объектов из любого расширения

Адаптация типовых решений Платформа 1С v8.3 1С:Управление торговлей 11 Россия Абонемент ($m)

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

1 стартмани

27.10.2023    2105    19    avmartynov    14    

44

Печать непроведенных документов для УТ, КА, ERP. Настройка печати по пользователям, документам и печатным формам

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

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

2 стартмани

22.08.2023    2238    25    progmaster    8    

3
Комментарии
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
1. Одинец 248 29.04.14 00:21 Сейчас в теме
У тебя кусок в описании пропущен:
не закончена Функция про множественное число "ФормаМножественногоЧисла"
нет начала Функции ПечатьСчетФактуры()
хоть бы сказал из какой тип.конфигурации брал функции и процедуры, а так - скачал за стартмани архив - а инструкции не рабочие...
куда модераторы смотрели???? плюс пока не ставлю - так как нет результата!!!
+
2. Bukaska 140 29.04.14 00:34 Сейчас в теме
(1) Одинец, Модераторы не телепаты.. Каждый день пересматривают множество информации.. Они проверяют правильность оформления статьи и публикации, а за обработку несет ответственность сам автор, и никто более.. либо он получит положительный отзыв, либо отрицательный.. Тем более правила для будущих авторов имеются.
+
3. insurgut 207 29.04.14 08:31 Сейчас в теме
(1) Одинец, к сожалению это ошибка вставки кода на стороне самого Инфостарта. В окно вставки кода все отлично в первозданном виде вставляется, а вот когда сохраняю публикацию - он код почему-то обрезает. В статью из архива копировал текст из Инфостарта, поэтому упустил, что текст оборвался. Сохранил текст в архиве напрямую из конфигурации. Обновил инструкцию.

P.S. Попробую победить в самой статье это недоразумение.
+
4. fixin 4253 25.12.15 15:25 Сейчас в теме
дык ее же нельзя редактировать,эту конфу.


Пользователь программы "1С:Отчетность предпринимателя 8" не может вносить изменения в конфигурацию, например, добавлять новые виды отчетности, – для этого потребуются другие поставки системы "1С:Предприятие".

http://www.1c.ru/news/info.jsp?id=16067

Рекомендую писать обработку, которая открывается через внешний файл и уже печатает счет как нужно. ;-)
XelOla; +1
Оставьте свое сообщение