April 20, 2021

Отражение фактических данных произвольный код.

Для канала t.me/analitik1c Подписывайтесь!

Всем привет! Сегодня расскажу как заполнять произвольным кодом документ "Отражение фактических данных"

Иметь дело мы будем с этим справочником УХ 3.1

e1cib/data/Справочник.ПравилаЗаполненияОбъектовБД

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

Итак настройки такие:

Желтым главное- источник -текущая база, исходный объект, документ ПтиУ.

Главное что я поставил флажок выполнять произвольный код после заполнения объекта.

С заполнением шапки все просто, нужно просто сопоставить поля исходного документа и шапки.

Я нашел какие параметры можно использовать в произвольном коде и это работает.

Основных параметров два:

ДокументОбъект - это документ Отражение фактических данных, который мы заполняем, а ИсходныйОбъектСсылка - это поле "ИсходныйОбъект" из документа ОФД.

Ниже мой код по заполнению табчасти "Бюджет доходов и расходов" документа ОФД, с учетом того что я храню значения статьи доходов и расходов в доп.реквизите статьи затрат и статьи ПДиР.

Ключевое я выделил жирным ниже.

БюджетДоходовИРасходов = ДокументОбъект.БюджетДоходовИРасходов; //табчасть которую мы заполняем

//ниже текст запроса обращения к ТЧ "Услуги" документа ПтиУ


лТекст = "
|ВЫБРАТЬ
| ВЫБОР
| КОГДА ПоступлениеТоваровУслугУслуги.СчетЗатрат = &Счет20
| ТОГДА ПоступлениеТоваровУслугУслуги.Субконто2
| КОГДА ПоступлениеТоваровУслугУслуги.СчетЗатрат В (&СписокСчетовОПХР)
| ТОГДА ПоступлениеТоваровУслугУслуги.Субконто1
| ИНАЧЕ ЗНАЧЕНИЕ(Справочник.СтатьиЗатрат.ПустаяСсылка)
| КОНЕЦ КАК СтатьяЗатрат,
| ВЫБОР
| КОГДА ПоступлениеТоваровУслугУслуги.СчетЗатрат = &Счет20
| ТОГДА ПоступлениеТоваровУслугУслуги.Субконто1
| ИНАЧЕ ЗНАЧЕНИЕ(справочник.НоменклатурныеГруппы.пустаяссылка)
| КОНЕЦ КАК НоменклатурнаяГруппа,
| ПоступлениеТоваровУслугУслуги.Ссылка.СуммаВключаетНДС КАК СуммаВключаетНДС,
| ВЫБОР
| КОГДА ПоступлениеТоваровУслугУслуги.Ссылка.СуммаВключаетНДС
| ТОГДА ПоступлениеТоваровУслугУслуги.Сумма - ПоступлениеТоваровУслугУслуги.СуммаНДС
| ИНАЧЕ ПоступлениеТоваровУслугУслуги.Сумма
| КОНЕЦ КАК СуммаБезНДС,
| ПоступлениеТоваровУслугУслуги.СуммаНДС КАК СуммаНДС,
| ВЫБОР
| КОГДА ПоступлениеТоваровУслугУслуги.Ссылка.СуммаВключаетНДС
| ТОГДА ПоступлениеТоваровУслугУслуги.Сумма
| ИНАЧЕ ПоступлениеТоваровУслугУслуги.Сумма + ПоступлениеТоваровУслугУслуги.СуммаНДС
| КОНЕЦ КАК СуммаСНДС,
| ПоступлениеТоваровУслугУслуги.СчетЗатрат КАК СчетЗатрат,
| ПоступлениеТоваровУслугУслуги.Ссылка.ДоговорКонтрагента.ОсновнойПроект КАК ОсновнойПроект,
| ПоступлениеТоваровУслугУслуги.Ссылка.ДоговорКонтрагента.ОсновнаяСтатьяИсполнение КАК СтатьяИсполнение
|ПОМЕСТИТЬ ВТ_Услуги
|ИЗ
| Документ.ПоступлениеТоваровУслуг.Услуги КАК ПоступлениеТоваровУслугУслуги
|ГДЕ
| ПоступлениеТоваровУслугУслуги.Ссылка = &Ссылка
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| ВТ_Услуги.СтатьяЗатрат КАК СтатьяЗатрат,
| ВТ_Услуги.НоменклатурнаяГруппа КАК НоменклатурнаяГруппа,
| ВТ_Услуги.СуммаВключаетНДС КАК СуммаВключаетНДС,
| ВТ_Услуги.СуммаБезНДС КАК СуммаБезНДС,
| ВТ_Услуги.СуммаНДС КАК СуммаНДС,
| ВТ_Услуги.СчетЗатрат КАК СчетЗатрат,
| ВТ_Услуги.СуммаСНДС КАК СуммаСНДС,
| ВЫБОР
| КОГДА НоменклатурныеГруппыДополнительныеРеквизиты.Значение <> ЗНАЧЕНИЕ(справочник.проекты.пустаяссылка)
| ТОГДА НоменклатурныеГруппыДополнительныеРеквизиты.Значение
| ИНАЧЕ ВТ_Услуги.ОсновнойПроект
| КОНЕЦ КАК Проект,
| ВЫБОР
| КОГДА СтатьиЗатратДополнительныеРеквизиты.Значение <> ЗНАЧЕНИЕ(справочник.СтатьиДоходовИРасходов.ПустаяСсылка)
| ТОГДА СтатьиЗатратДополнительныеРеквизиты.Значение
| ИНАЧЕ ВЫБОР
| КОГДА ВТ_Услуги.СтатьяИсполнение ССЫЛКА Справочник.СтатьиДоходовИРасходов
| ТОГДА ВТ_Услуги.СтатьяИсполнение
| ИНАЧЕ ЗНАЧЕНИЕ(справочник.СтатьиДоходовИРасходов.ПустаяСсылка)
| КОНЕЦ
| КОНЕЦ КАК СтатьяИсполнение
|ИЗ
| ВТ_Услуги КАК ВТ_Услуги
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.СтатьиЗатрат.ДополнительныеРеквизиты КАК СтатьиЗатратДополнительныеРеквизиты
| ПО ВТ_Услуги.СтатьяЗатрат = СтатьиЗатратДополнительныеРеквизиты.Ссылка
| И (СтатьиЗатратДополнительныеРеквизиты.Свойство.Имя = ""СтатьяДоходовИРасходов"")
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.НоменклатурныеГруппы.ДополнительныеРеквизиты КАК НоменклатурныеГруппыДополнительныеРеквизиты
| ПО ВТ_Услуги.НоменклатурнаяГруппа = НоменклатурныеГруппыДополнительныеРеквизиты.Ссылка
| И (НоменклатурныеГруппыДополнительныеРеквизиты.свойство.имя = ""Проект"")
|ГДЕ
| ВТ_Услуги.СтатьяЗатрат ССЫЛКА Справочник.СтатьиЗатрат
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ВТ_Услуги.СтатьяЗатрат,
| ВТ_Услуги.НоменклатурнаяГруппа,
| ВТ_Услуги.СуммаВключаетНДС,
| ВТ_Услуги.СуммаБезНДС,
| ВТ_Услуги.СуммаНДС,
| ВТ_Услуги.СчетЗатрат,
| ВТ_Услуги.СуммаСНДС,
| ВТ_Услуги.ОсновнойПроект,
| ВЫБОР
| КОГДА ПрочиеДоходыИРасходыДополнительныеРеквизиты.Значение <> ЗНАЧЕНИЕ(справочник.СтатьиДоходовИРасходов.ПустаяСсылка)
| ТОГДА ПрочиеДоходыИРасходыДополнительныеРеквизиты.Значение
| ИНАЧЕ ВЫБОР
| КОГДА ВТ_Услуги.СтатьяИсполнение ССЫЛКА Справочник.СтатьиДоходовИРасходов
| ТОГДА ВТ_Услуги.СтатьяИсполнение
| ИНАЧЕ ЗНАЧЕНИЕ(справочник.СтатьиДоходовИРасходов.ПустаяСсылка)
| КОНЕЦ
| КОНЕЦ
|ИЗ
| ВТ_Услуги КАК ВТ_Услуги
| ЛЕВОЕ СОЕДИНЕНИЕ Справочник.ПрочиеДоходыИРасходы.ДополнительныеРеквизиты КАК ПрочиеДоходыИРасходыДополнительныеРеквизиты
| ПО ВТ_Услуги.СтатьяЗатрат = ПрочиеДоходыИРасходыДополнительныеРеквизиты.Ссылка
| И (ПрочиеДоходыИРасходыДополнительныеРеквизиты.Свойство.Имя = ""СтатьяДоходовИРасходов"")
|ГДЕ
| ВТ_Услуги.СтатьяЗатрат ССЫЛКА Справочник.ПрочиеДоходыИРасходы
|";

лЗапрос = Новый Запрос(лТекст);
лЗапрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;


// Присвоение значений переменным параметров.
СписокСчетовОПХР = Новый Массив;
СписокСчетовОПХР.Добавить(ПланыСчетов.Хозрасчетный.ОбщехозяйственныеРасходы); // 26 Общехозяйственные расходы
СписокСчетовОПХР.Добавить(ПланыСчетов.Хозрасчетный.ИздержкиОбращения); // 44.01 Издержки обращения в организациях, осуществляющих торговую деятельность
СписокСчетовОПХР.Добавить(ПланыСчетов.Хозрасчетный.КоммерческиеРасходы); // 44.02
СписокСчетовОПХР.Добавить(ПланыСчетов.Хозрасчетный.ПрочиеРасходы); // 91.02 Прочие расходы

Счет20 = ПланыСчетов.Хозрасчетный.ОсновноеПроизводство; // 20.01 Основное производство


// Установка параметров.
лЗапрос.УстановитьПараметр("СписокСчетовОПХР", СписокСчетовОПХР);
лЗапрос.УстановитьПараметр("Ссылка", ИсходныйОбъектСсылка); .


лЗапрос.УстановитьПараметр("Счет20", Счет20);


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

БюджетДоходовИРасходов.Очистить();

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

лНоваяСтрока = БюджетДоходовИРасходов.Добавить();
лНоваяСтрока.СтатьяДоходовИРасходов = лВыборка.СтатьяИсполнение;
лНоваяСтрока.Проект = лВыборка.Проект;
лНоваяСтрока.СуммаБезНДС = лВыборка.СуммаБезНДС;
лНоваяСтрока.СуммаНДС = лВыборка.СуммаНДС;
лНоваяСтрока.Сумма = лВыборка.СуммаСНДС;

лНоваяСтрока.ВалютаВзаиморасчетов =ИсходныйОбъектСсылка.ВалютаДокумента;
//добавить условие по валюте
лНоваяСтрока.СуммаВзаиморасчетовБезНДС = лВыборка.СуммаБезНДС;
лНоваяСтрока.СуммаВзаиморасчетовНДС = лВыборка.СуммаНДС;
лНоваяСтрока.СуммаВзаиморасчетов = лВыборка.СуммаСНДС;


КонецЦикла;

Код копипастим сюда

/В код можно добавлять и экспортные функции

Например в модуле ЗаполнениеОФДАлгоритмы в расширении можно добавить функцию, которая ищет строки со счетом "08.04.01"

Функция ПолучитьТаблицуВНА(исходныйдокумент) экспорт

Запрос = новый Запрос;
Запрос.Текст ="ВЫБРАТЬ
| ВЫБОР
| КОГДА ПоступлениеТоваровУслугТовары.Ссылка.СуммаВключаетНДС
| ТОГДА ПоступлениеТоваровУслугТовары.Сумма
| ИНАЧЕ ПоступлениеТоваровУслугТовары.Сумма + ПоступлениеТоваровУслугТовары.СуммаНДС
| КОНЕЦ КАК СуммаСНДС,
| ПоступлениеТоваровУслугТовары.СуммаНДС КАК СуммаНДС,
| ВЫБОР
| КОГДА ПоступлениеТоваровУслугТовары.Ссылка.СуммаВключаетНДС
| ТОГДА ПоступлениеТоваровУслугТовары.Сумма - ПоступлениеТоваровУслугТовары.СуммаНДС
| ИНАЧЕ ПоступлениеТоваровУслугТовары.Сумма
| КОНЕЦ КАК СуммаБезНДС
|ИЗ
| Документ.ПоступлениеТоваровУслуг.Товары КАК ПоступлениеТоваровУслугТовары
|ГДЕ
| ПоступлениеТоваровУслугТовары.Ссылка = &Ссылка
| и ПоступлениеТоваровУслугТовары.СчетУчета = &СчетУчета
|
|
|ОБЪЕДИНИТЬ ВСЕ
|
|ВЫБРАТЬ
| ВЫБОР
| КОГДА ПоступлениеТоваровУслугОборудование.Ссылка.СуммаВключаетНДС
| ТОГДА ПоступлениеТоваровУслугОборудование.Сумма
| ИНАЧЕ ПоступлениеТоваровУслугОборудование.Сумма + ПоступлениеТоваровУслугОборудование.СуммаНДС
| КОНЕЦ,
| ПоступлениеТоваровУслугОборудование.СуммаНДС,
| ВЫБОР
| КОГДА ПоступлениеТоваровУслугОборудование.Ссылка.СуммаВключаетНДС
| ТОГДА ПоступлениеТоваровУслугОборудование.Сумма - ПоступлениеТоваровУслугОборудование.СуммаНДС
| ИНАЧЕ ПоступлениеТоваровУслугОборудование.Сумма
| КОНЕЦ
|ИЗ
| Документ.ПоступлениеТоваровУслуг.Оборудование КАК ПоступлениеТоваровУслугОборудование
|ГДЕ
| ПоступлениеТоваровУслугОборудование.СчетУчета = &СчетУчета
| И ПоступлениеТоваровУслугОборудование.Ссылка = &Ссылка";
Запрос.УстановитьПараметр("Ссылка",исходныйдокумент);
запрос.УстановитьПараметр("СчетУчета",ПланыСчетов.Хозрасчетный.НайтиПоКоду("08.04.1"));
ТЗ = Запрос.Выполнить().Выгрузить();

возврат ТЗ;



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

А потом можно добавить на закладку произвольный код такой текст:

если ТипЗнч(ИсходныйОбъектСсылка) = тип("ДокументСсылка.ПоступлениеТоваровУслуг") тогда
ТаблицаОборудования = ЗаполнениеОФДАлгоритмы.ПолучитьТаблицуВНА(ИсходныйОбъектСсылка);
//отразить в БДР статью INV
для каждого строка из ТаблицаОборудования цикл

лНоваяСтрока = БюджетДоходовИРасходов.Добавить();
лНоваяСтрока.СтатьяДоходовИРасходов = справочники.СтатьиДоходовИРасходов.НайтиПоНаименованию("INV.1.1.2 > Приобретение ОС");
//лНоваяСтрока.Проект = лВыборка.Проект;
лНоваяСтрока.СуммаБезНДС = строка.СуммаБезНДС;
лНоваяСтрока.СуммаНДС = строка.СуммаНДС;
лНоваяСтрока.Сумма = строка.СуммаСНДС;

лНоваяСтрока.ВалютаВзаиморасчетов = ИсходныйОбъектСсылка.ВалютаДокумента;
//добавить условие по валюте
лНоваяСтрока.СуммаВзаиморасчетовБезНДС = строка.СуммаБезНДС;
лНоваяСтрока.СуммаВзаиморасчетовНДС = строка.СуммаНДС;
лНоваяСтрока.СуммаВзаиморасчетов = строка.СуммаСНДС;


КонецЦикла;
КонецЕсли;