DATAREON.md
· 24 KiB · Markdown
Ham
# Паттерны наименования
## Обработчики
> Направление Класс Тип
### Название
```
Получить Справочник ФизическиеЛица
```
### Имя
```
ПолучитьСправочникФизическиеЛица
```
# Универсальные функции
## Общее
Из xdto пакета автоматически распознаются **только** типы:
- строка
- число
- булево
> Все остальное нужно обрабатывать!
## Отказ от регистрации в исходящие сообщения
```
Контекст.ЗаписываемыйОбъект.ДополнительныеСвойства.Вставить("СШПНеобрабатывать", Истина);
Контекст.ЗаписываемыйОбъект.ДополнительныеСвойства.Вставить("ОтключитьМеханизмРегистрацииОбъектов");
Контекст.ЗаписываемыйОбъект.ДополнительныеСвойства.Вставить("адаптер_УстановленЗапретВыгрузкиОбъекта");
```
## Проведение документа
### Перед записью
```
Если ЗагружаемыйОбъект.Проведен Тогда
Контекст.Вставить("Провести", Истина);
ЗагружаемыйОбъект.Проведен = Ложь;
ИначеЕсли Не ЗагружаемыйОбъект.Проведен
И Не ЗагружаемыйОбъект.ЭтоНовый()
И ЗагружаемыйОбъект.Ссылка.Проведен Тогда
Контекст.Вставить("Провести", Ложь);
КонецЕсли;
```
### После попытки
```
Если Не Контекст.Свойство("ИнформацияОбОшибке") Тогда
ВыполнитьФункцию("Провестидокумент", КонтекстРеализацииТоваровУслуг);
КонецЕсли;
```
## Поместить в очередь другой обработчик
Помещается согласно типу на странице основное. Супер странная логика.
```
сшпПользовательскиеМетоды.ПоместитьВОчередьИсходящих("Справочник.ФизическиеЛица.БезРегистров", ОбъектОбработки.Ссылка);
```
> Пример: в обработчике Получить Справочник ФизическиеЛица
## Поместприть в очередь с проверкой
Помещает ссылку в очередь, если элемент отсутствует в очереди со статусом Новый
```
ВыполнитьФункцию(
"ПоместитьВОчередьИсходящихСПроверкой",
"Справочник.Контрагенты.БезСвязанныхОбъектов",
ОбъектОбработки
);
```
## Не обновлять полное имя
Актуально для документов, вроде Поступления
```
Контекст.Вставить("НеОбновлятьПолноеИмя", Истина);
```
## Отменить обработку входящего сообщения
```
ВыполнитьФункцию("ОтменитьОбработкуСообщения", Контекст, "Контрагент по МДМ ключу не найден");
ОтменитьТранзакцию();
Перейти ~Выход;
```
В конце:
```
~Выход:
```
## Отложить обработку сообщения
```
ОтложитьОбработкуСообщения(Контекст, Задержка)
```
```
Если Не ЗначениеЗаполнено(Контекст.ДанныеОбъектаВ1с[0].ФизическоеЛицо)
И КоличествоПопытокОжидания < 10 Тогда
Задержка = 5;
СостояниеСообщения = Перечисления.сшпСтатусыСообщений.ОжиданиеОбработки;
ОтменитьТранзакцию();
Перейти ~Выход;
КонецЕсли;
И в конце добавить:
~Выход:
```
## Отложить потом отменить
```
Если Не ЗначениеЗаполнено(ДанныеОбъектаВ1с.Владелец) Тогда
Если КоличествоПопытокОжидания < 10 Тогда
ВыполнитьФункцию("ОтложитьОбработкуСообщения", Контекст, 10);
Иначе
ВыполнитьФункцию(
"ОтменитьОбработкуСообщения",
Контекст,
НСтр("ru = 'Не найден владелец.'")
);
КонецЕсли;
ОтменитьТранзакцию();
Перейти ~Выход;
КонецЕсли;
```
## Сразу отправлять назад
```
Если Контекст.ЗаписываемыйОбъект.ДополнительныеСвойства.Свойство("СШПНеобрабатывать") Тогда
Контекст.ЗаписываемыйОбъект.ДополнительныеСвойства.Удалить("СШПНеобрабатывать");
КонецЕсли;
```
## Контекст
Структура с различными параметрамми и данными для обработки объекта.
## Инициализировать контекст записи объекта
```
ВыполнитьФункцию("ИнициализироватьКонтекстЗаписиОбъекта", Контекст);
```
## НайтиСоздатьОбъект
## ЗаполнитьОбъект
## ЗаписатьОбъект
## ОбработатьИсключениеПриЗаписиОбъекта
# Методы схем
## Получение свойст
``` C+
ДоговорЕРП = (bool) InitMessage.Properties.GetProperty("ДоговорЕРП").GetValue();
ДоговорУТ = (bool) InitMessage.Properties.GetProperty("ДоговорУТ").GetValue();
ДоговорДО = (bool) InitMessage.Properties.GetProperty("ДоговорДО").GetValue();
ДоговорБСО = (bool) InitMessage.Properties.GetProperty("ДоговорБСО").GetValue();
Convert.ToString(ТоварыИсточник.НДС)
```
# Трансформации
## Пример
```
ВтДокументПоступлениеТоваровУслуг.Дата = ДокументИмпПриемкаСтроительныхРаботУслуг.Дата;
ВтДокументПоступлениеТоваровУслуг.ПометкаУдаления = ДокументИмпПриемкаСтроительныхРаботУслуг.ПометкаУдаления;
ВтДокументПоступлениеТоваровУслуг.Проведен = ДокументИмпПриемкаСтроительныхРаботУслуг.Проведен;
ВтДокументПоступлениеТоваровУслуг.ДатаВходящегоДокумента = ДокументИмпПриемкаСтроительныхРаботУслуг.ДатаВходящегоДокумента;
ВтДокументПоступлениеТоваровУслуг.Комментарий = ДокументИмпПриемкаСтроительныхРаботУслуг.Комментарий;
ВтДокументПоступлениеТоваровУслуг.КратностьВзаиморасчетов = ДокументИмпПриемкаСтроительныхРаботУслуг.КратностьВзаиморасчетов;
ВтДокументПоступлениеТоваровУслуг.КурсВзаиморасчетов = ДокументИмпПриемкаСтроительныхРаботУслуг.КурсВзаиморасчетов;
ВтДокументПоступлениеТоваровУслуг.НДСВключенВСтоимость = ДокументИмпПриемкаСтроительныхРаботУслуг.НДСВключенВСтоимость;
ВтДокументПоступлениеТоваровУслуг.НомерВходящегоДокумента = ДокументИмпПриемкаСтроительныхРаботУслуг.НомерВходящегоДокумента;
ВтДокументПоступлениеТоваровУслуг.СуммаВключаетНДС = ДокументИмпПриемкаСтроительныхРаботУслуг.СуммаВключаетНДС;
ВтДокументПоступлениеТоваровУслуг.РучнаяКорректировка = ДокументИмпПриемкаСтроительныхРаботУслуг.РучнаяКорректировка;
ВтДокументПоступлениеТоваровУслуг.ЕстьРасхождения = ДокументИмпПриемкаСтроительныхРаботУслуг.ЕстьРасхождения;
ВтДокументПоступлениеТоваровУслуг.СуммаВключаетНДС = ДокументИмпПриемкаСтроительныхРаботУслуг.СуммаВключаетНДС;
ВтДокументПоступлениеТоваровУслуг.ЭтоУниверсальныйДокумент = ДокументИмпПриемкаСтроительныхРаботУслуг.ЭтоУниверсальныйДокумент;
ВтДокументПоступлениеТоваровУслуг.СуммаГарантийногоУдержания = ДокументИмпПриемкаСтроительныхРаботУслуг.СуммаГарантийногоУдержания;
ВтДокументПоступлениеТоваровУслуг.Д_СуммаЗачетенныхАвансов = ДокументИмпПриемкаСтроительныхРаботУслуг.Д_СуммаЗачетенныхАвансов;
ВтДокументПоступлениеТоваровУслуг.Д_СуммаВозмещаемыхУслуг_Общая = ДокументИмпПриемкаСтроительныхРаботУслуг.Д_СуммаВозмещаемыхУслуг;
CommonFunctions.CopyMatchingProperties(ДокументИмпПриемкаСтроительныхРаботУслуг.ВалютаДокумента, ВтДокументПоступлениеТоваровУслуг.ВалютаДокумента);
CommonFunctions.CopyMatchingProperties(ДокументИмпПриемкаСтроительныхРаботУслуг.ДоговорКонтрагента, ВтДокументПоступлениеТоваровУслуг.ДоговорКонтрагента);
CommonFunctions.CopyMatchingProperties(ДокументИмпПриемкаСтроительныхРаботУслуг.Контрагент, ВтДокументПоступлениеТоваровУслуг.Контрагент);
CommonFunctions.CopyMatchingProperties(ДокументИмпПриемкаСтроительныхРаботУслуг.Организация, ВтДокументПоступлениеТоваровУслуг.Организация);
CommonFunctions.CopyMatchingProperties(ДокументИмпПриемкаСтроительныхРаботУслуг.Ответственный, ВтДокументПоступлениеТоваровУслуг.Ответственный);
CommonFunctions.CopyMatchingProperties(ДокументИмпПриемкаСтроительныхРаботУслуг.СчетУчетаРасчетовПоАвансам, ВтДокументПоступлениеТоваровУслуг.СчетУчетаРасчетовПоАвансам);
CommonFunctions.CopyMatchingProperties(ДокументИмпПриемкаСтроительныхРаботУслуг.СчетУчетаРасчетовСКонтрагентом, ВтДокументПоступлениеТоваровУслуг.СчетУчетаРасчетовСКонтрагентом);
CommonFunctions.CopyMatchingProperties(ДокументИмпПриемкаСтроительныхРаботУслуг.Грузоотправитель, ВтДокументПоступлениеТоваровУслуг.Грузоотправитель);
CommonFunctions.CopyMatchingProperties(ДокументИмпПриемкаСтроительныхРаботУслуг.Грузополучатель, ВтДокументПоступлениеТоваровУслуг.Грузополучатель);
CommonFunctions.CopyMatchingProperties(ДокументИмпПриемкаСтроительныхРаботУслуг.СчетУчетаРасчетовПоТаре, ВтДокументПоступлениеТоваровУслуг.СчетУчетаРасчетовПоТаре);
foreach (var Element in ДокументИмпПриемкаСтроительныхРаботУслуг.Услуги) {
var NewElement = ВтДокументПоступлениеТоваровУслуг.Услуги.AddElement();
CommonFunctions.CopyMatchingProperties(Element, NewElement);
CommonFunctions.CopyMatchingProperties(Element.СчетЗатрат, NewElement.СчетЗатрат);
CommonFunctions.CopyMatchingProperties(Element.СчетЗатратНУ, NewElement.СчетЗатратНУ);
CommonFunctions.CopyMatchingProperties(Element.Субконто1, NewElement.Субконто1);
CommonFunctions.CopyMatchingProperties(Element.Субконто2, NewElement.Субконто2);
CommonFunctions.CopyMatchingProperties(Element.Субконто3, NewElement.Субконто3);
CommonFunctions.CopyMatchingProperties(Element.СчетУчетаНДС, NewElement.СчетУчетаНДС);
}
foreach (var Element in ДокументИмпПриемкаСтроительныхРаботУслуг.ЗачетАвансов) {
var NewElement = ВтДокументПоступлениеТоваровУслуг.ЗачетАвансов.AddElement();
NewElement.СуммаЗачета = Element.СуммаЗачета;
}
```
# Обработчики
## Эталонный отправки из платформ в 1с
```
Попытка
НачатьТранзакцию();
Контекст = Новый Структура;
Контекст.Вставить("ЭтотОбъект", ЭтотОбъект);
ВыполнитьФункцию("ИнициализироватьКонтекстЗаписиОбъекта", Контекст);
ВыполнитьФункцию("НайтиСоздатьОбъект", Контекст);
ВыполнитьФункцию("ЗаполнитьОбъект", Контекст);
ВыполнитьФункцию("ЗаписатьОбъект", Контекст);
ЗафиксироватьТранзакцию();
Исключение
Если ТранзакцияАктивна() Тогда
ОтменитьТранзакцию();
КонецЕсли;
Контекст.Вставить("ИнформацияОбОшибке", ИнформацияОбОшибке());
ВыполнитьФункцию("ОбработатьИсключениеПриЗаписиОбъекта", Контекст);
КонецПопытки;
```
## Расширение функционала универсальных функций
### Сначала документ записывается, затем проводится если был проведен
```
Если ЗагружаемыйОбъект.Проведен Тогда
Контекст.Вставить("РежимЗаписи", РежимЗаписиДокумента.Проведение);
КонецЕсли;
```
### Удобное встраивание вместо БА
```
ЗагружаемыйОбъект = Контекст.ЗаписываемыйОбъект;
ПреобразованнаяСтруктура = Контекст.ПреобразованныеДанные[0];
```
### Поиск значений
```
ПараметрыПоиска = ОбщегоНазначения.СкопироватьРекурсивно(Контекст);
// СчетКапВложенийБУ
ИмяПоляИсточник = "СчетЗатрат";
ИмяПоляПриемник = "СчетКапВложенийБУ";
ОписаниеТипа = Новый ОписаниеТипов("ПланСчетовСсылка.Хозрасчетный");
ЗначениеСвойства = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(СтрокаУслуги, ИмяПоляИсточник);
ЗначениеСвойстваВ1с = ВыполнитьФункцию("ЗначениеРеквизита", ЗначениеСвойства, ОписаниеТипа, ПараметрыПоиска, ИмяПоляИсточник);
СтрокаЗатраты[ИмяПоляПриемник] = ЗначениеСвойстваВ1с;
```
# Примеры
## Создание нескольких типов в обработчике отправки в 1с
```
Попытка
НачатьТранзакцию();
Контекст = Новый Структура;
Контекст.Вставить("ЭтотОбъект", ЭтотОбъект);
ВыполнитьФункцию("ИнициализироватьКонтекстЗаписиОбъекта", Контекст);
Контекст.Вставить("ЗаписываемыйОбъект", ВыполнитьФункцию("НайтиКонтрагентаПоКонтексту", Контекст));
ВыполнитьФункцию("НайтиСоздатьОбъект", Контекст);
ВыполнитьФункцию("ЗаполнитьОбъект", Контекст);
КонтекстПартнера = Новый Структура;
КонтекстПартнера.Вставить("ТипДанных", "Справочник.Партнеры");
КонтекстПартнера.Вставить("ЭтотОбъект", ЭтотОбъект);
ВыполнитьФункцию("ИнициализироватьКонтекстЗаписиОбъекта", КонтекстПартнера);
КонтекстПартнера.ПреобразованныеДанные[0].Идентификатор = XMLСтрока(Новый УникальныйИдентификатор);
Если ЗначениеЗаполнено(Контекст.ЗаписываемыйОбъект.Партнер) Тогда
КонтекстПартнера.Вставить("ЗаписываемыйОбъект", Контекст.ЗаписываемыйОбъект.Партнер.ПолучитьОбъект());
КонецЕсли;
ВыполнитьФункцию("НайтиСоздатьОбъект", КонтекстПартнера);
ВыполнитьФункцию("ЗаполнитьОбъект", КонтекстПартнера);
КонтекстПартнера.ЗаписываемыйОбъект.Клиент = Истина;
КонтекстПартнера.ЗаписываемыйОбъект.Поставщик = Истина;
КонтекстПартнера.ЗаписываемыйОбъект.ПрочиеОтношения = Истина;
ВыполнитьФункцию("ЗаписатьОбъект", КонтекстПартнера);
Если Не ЗначениеЗаполнено(Контекст.ЗаписываемыйОбъект.Партнер) Тогда
Контекст.ЗаписываемыйОбъект.Партнер = КонтекстПартнера.ЗаписываемыйОбъект.Ссылка;
КонецЕсли;
Если ЗначениеЗаполнено(Контекст.ЗаписываемыйОбъект.Партнер) Тогда
ПартнерыИКонтрагенты.ЗаписатьИерархиюПартнера(Контекст.ЗаписываемыйОбъект.Партнер);
КонецЕсли;
СтруктураОбъекта = КонтекстПартнера.ПреобразованныеДанные[0];
Если Контекст.ЗаписываемыйОбъект.ЮридическоеФизическоеЛицо = Перечисления.ЮридическоеФизическоеЛицо.ЮридическоеЛицо
И Контекст.ЗаписываемыйОбъект.СтранаРегистрации = Справочники.СтраныМира.Россия Тогда
Контекст.ЗаписываемыйОбъект.ЮрФизЛицо = Перечисления.ЮрФизЛицо.ЮрЛицо;
ИначеЕсли Контекст.ЗаписываемыйОбъект.ЮридическоеФизическоеЛицо = Перечисления.ЮридическоеФизическоеЛицо.ЮридическоеЛицо
И Контекст.ЗаписываемыйОбъект.СтранаРегистрации <> Справочники.СтраныМира.Россия Тогда
Контекст.ЗаписываемыйОбъект.ЮрФизЛицо = Перечисления.ЮрФизЛицо.ЮрЛицоНеРезидент;
ИначеЕсли Контекст.ЗаписываемыйОбъект.ЮридическоеФизическоеЛицо = Перечисления.ЮридическоеФизическоеЛицо.ФизическоеЛицо
И ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(СтруктураОбъекта, "ИндивидуальныйПредприниматель") <> Истина Тогда
Контекст.ЗаписываемыйОбъект.ЮрФизЛицо = Перечисления.ЮрФизЛицо.ФизЛицо;
ИначеЕсли Контекст.ЗаписываемыйОбъект.ЮридическоеФизическоеЛицо = Перечисления.ЮридическоеФизическоеЛицо.ФизическоеЛицо
И ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(СтруктураОбъекта, "ИндивидуальныйПредприниматель") = Истина Тогда
Контекст.ЗаписываемыйОбъект.ЮрФизЛицо = Перечисления.ЮрФизЛицо.ИндивидуальныйПредприниматель;
КонецЕсли;
Контекст.ЗаписываемыйОбъект.ДополнительныеСвойства.Вставить("ИгнорироватьКонтрольИНН");
Контекст.ЗаписываемыйОбъект.ДополнительныеСвойства.Вставить("ОтключитьМеханизмРегистрацииОбъектов");
ВыполнитьФункцию("ЗаписатьОбъект", Контекст);
ЗафиксироватьТранзакцию();
Исключение
Если ТранзакцияАктивна() Тогда
ОтменитьТранзакцию();
КонецЕсли;
Контекст.Вставить("ИнформацияОбОшибке", ИнформацияОбОшибке());
ВыполнитьФункцию("ОбработатьИсключениеПриЗаписиОбъекта", Контекст);
КонецПопытки;
```
Паттерны наименования
Обработчики
Направление Класс Тип
Название
Получить Справочник ФизическиеЛица
Имя
ПолучитьСправочникФизическиеЛица
Универсальные функции
Общее
Из xdto пакета автоматически распознаются только типы:
- строка
- число
- булево
Все остальное нужно обрабатывать!
Отказ от регистрации в исходящие сообщения
Контекст.ЗаписываемыйОбъект.ДополнительныеСвойства.Вставить("СШПНеобрабатывать", Истина);
Контекст.ЗаписываемыйОбъект.ДополнительныеСвойства.Вставить("ОтключитьМеханизмРегистрацииОбъектов");
Контекст.ЗаписываемыйОбъект.ДополнительныеСвойства.Вставить("адаптер_УстановленЗапретВыгрузкиОбъекта");
Проведение документа
Перед записью
Если ЗагружаемыйОбъект.Проведен Тогда
Контекст.Вставить("Провести", Истина);
ЗагружаемыйОбъект.Проведен = Ложь;
ИначеЕсли Не ЗагружаемыйОбъект.Проведен
И Не ЗагружаемыйОбъект.ЭтоНовый()
И ЗагружаемыйОбъект.Ссылка.Проведен Тогда
Контекст.Вставить("Провести", Ложь);
КонецЕсли;
После попытки
Если Не Контекст.Свойство("ИнформацияОбОшибке") Тогда
ВыполнитьФункцию("Провестидокумент", КонтекстРеализацииТоваровУслуг);
КонецЕсли;
Поместить в очередь другой обработчик
Помещается согласно типу на странице основное. Супер странная логика.
сшпПользовательскиеМетоды.ПоместитьВОчередьИсходящих("Справочник.ФизическиеЛица.БезРегистров", ОбъектОбработки.Ссылка);
Пример: в обработчике Получить Справочник ФизическиеЛица
Поместприть в очередь с проверкой
Помещает ссылку в очередь, если элемент отсутствует в очереди со статусом Новый
ВыполнитьФункцию(
"ПоместитьВОчередьИсходящихСПроверкой",
"Справочник.Контрагенты.БезСвязанныхОбъектов",
ОбъектОбработки
);
Не обновлять полное имя
Актуально для документов, вроде Поступления
Контекст.Вставить("НеОбновлятьПолноеИмя", Истина);
Отменить обработку входящего сообщения
ВыполнитьФункцию("ОтменитьОбработкуСообщения", Контекст, "Контрагент по МДМ ключу не найден");
ОтменитьТранзакцию();
Перейти ~Выход;
В конце:
~Выход:
Отложить обработку сообщения
ОтложитьОбработкуСообщения(Контекст, Задержка)
Если Не ЗначениеЗаполнено(Контекст.ДанныеОбъектаВ1с[0].ФизическоеЛицо)
И КоличествоПопытокОжидания < 10 Тогда
Задержка = 5;
СостояниеСообщения = Перечисления.сшпСтатусыСообщений.ОжиданиеОбработки;
ОтменитьТранзакцию();
Перейти ~Выход;
КонецЕсли;
И в конце добавить:
~Выход:
Отложить потом отменить
Если Не ЗначениеЗаполнено(ДанныеОбъектаВ1с.Владелец) Тогда
Если КоличествоПопытокОжидания < 10 Тогда
ВыполнитьФункцию("ОтложитьОбработкуСообщения", Контекст, 10);
Иначе
ВыполнитьФункцию(
"ОтменитьОбработкуСообщения",
Контекст,
НСтр("ru = 'Не найден владелец.'")
);
КонецЕсли;
ОтменитьТранзакцию();
Перейти ~Выход;
КонецЕсли;
Сразу отправлять назад
Если Контекст.ЗаписываемыйОбъект.ДополнительныеСвойства.Свойство("СШПНеобрабатывать") Тогда
Контекст.ЗаписываемыйОбъект.ДополнительныеСвойства.Удалить("СШПНеобрабатывать");
КонецЕсли;
Контекст
Структура с различными параметрамми и данными для обработки объекта.
Инициализировать контекст записи объекта
ВыполнитьФункцию("ИнициализироватьКонтекстЗаписиОбъекта", Контекст);
НайтиСоздатьОбъект
ЗаполнитьОбъект
ЗаписатьОбъект
ОбработатьИсключениеПриЗаписиОбъекта
Методы схем
Получение свойст
ДоговорЕРП = (bool) InitMessage.Properties.GetProperty("ДоговорЕРП").GetValue();
ДоговорУТ = (bool) InitMessage.Properties.GetProperty("ДоговорУТ").GetValue();
ДоговорДО = (bool) InitMessage.Properties.GetProperty("ДоговорДО").GetValue();
ДоговорБСО = (bool) InitMessage.Properties.GetProperty("ДоговорБСО").GetValue();
Convert.ToString(ТоварыИсточник.НДС)
Трансформации
Пример
ВтДокументПоступлениеТоваровУслуг.Дата = ДокументИмпПриемкаСтроительныхРаботУслуг.Дата;
ВтДокументПоступлениеТоваровУслуг.ПометкаУдаления = ДокументИмпПриемкаСтроительныхРаботУслуг.ПометкаУдаления;
ВтДокументПоступлениеТоваровУслуг.Проведен = ДокументИмпПриемкаСтроительныхРаботУслуг.Проведен;
ВтДокументПоступлениеТоваровУслуг.ДатаВходящегоДокумента = ДокументИмпПриемкаСтроительныхРаботУслуг.ДатаВходящегоДокумента;
ВтДокументПоступлениеТоваровУслуг.Комментарий = ДокументИмпПриемкаСтроительныхРаботУслуг.Комментарий;
ВтДокументПоступлениеТоваровУслуг.КратностьВзаиморасчетов = ДокументИмпПриемкаСтроительныхРаботУслуг.КратностьВзаиморасчетов;
ВтДокументПоступлениеТоваровУслуг.КурсВзаиморасчетов = ДокументИмпПриемкаСтроительныхРаботУслуг.КурсВзаиморасчетов;
ВтДокументПоступлениеТоваровУслуг.НДСВключенВСтоимость = ДокументИмпПриемкаСтроительныхРаботУслуг.НДСВключенВСтоимость;
ВтДокументПоступлениеТоваровУслуг.НомерВходящегоДокумента = ДокументИмпПриемкаСтроительныхРаботУслуг.НомерВходящегоДокумента;
ВтДокументПоступлениеТоваровУслуг.СуммаВключаетНДС = ДокументИмпПриемкаСтроительныхРаботУслуг.СуммаВключаетНДС;
ВтДокументПоступлениеТоваровУслуг.РучнаяКорректировка = ДокументИмпПриемкаСтроительныхРаботУслуг.РучнаяКорректировка;
ВтДокументПоступлениеТоваровУслуг.ЕстьРасхождения = ДокументИмпПриемкаСтроительныхРаботУслуг.ЕстьРасхождения;
ВтДокументПоступлениеТоваровУслуг.СуммаВключаетНДС = ДокументИмпПриемкаСтроительныхРаботУслуг.СуммаВключаетНДС;
ВтДокументПоступлениеТоваровУслуг.ЭтоУниверсальныйДокумент = ДокументИмпПриемкаСтроительныхРаботУслуг.ЭтоУниверсальныйДокумент;
ВтДокументПоступлениеТоваровУслуг.СуммаГарантийногоУдержания = ДокументИмпПриемкаСтроительныхРаботУслуг.СуммаГарантийногоУдержания;
ВтДокументПоступлениеТоваровУслуг.Д_СуммаЗачетенныхАвансов = ДокументИмпПриемкаСтроительныхРаботУслуг.Д_СуммаЗачетенныхАвансов;
ВтДокументПоступлениеТоваровУслуг.Д_СуммаВозмещаемыхУслуг_Общая = ДокументИмпПриемкаСтроительныхРаботУслуг.Д_СуммаВозмещаемыхУслуг;
CommonFunctions.CopyMatchingProperties(ДокументИмпПриемкаСтроительныхРаботУслуг.ВалютаДокумента, ВтДокументПоступлениеТоваровУслуг.ВалютаДокумента);
CommonFunctions.CopyMatchingProperties(ДокументИмпПриемкаСтроительныхРаботУслуг.ДоговорКонтрагента, ВтДокументПоступлениеТоваровУслуг.ДоговорКонтрагента);
CommonFunctions.CopyMatchingProperties(ДокументИмпПриемкаСтроительныхРаботУслуг.Контрагент, ВтДокументПоступлениеТоваровУслуг.Контрагент);
CommonFunctions.CopyMatchingProperties(ДокументИмпПриемкаСтроительныхРаботУслуг.Организация, ВтДокументПоступлениеТоваровУслуг.Организация);
CommonFunctions.CopyMatchingProperties(ДокументИмпПриемкаСтроительныхРаботУслуг.Ответственный, ВтДокументПоступлениеТоваровУслуг.Ответственный);
CommonFunctions.CopyMatchingProperties(ДокументИмпПриемкаСтроительныхРаботУслуг.СчетУчетаРасчетовПоАвансам, ВтДокументПоступлениеТоваровУслуг.СчетУчетаРасчетовПоАвансам);
CommonFunctions.CopyMatchingProperties(ДокументИмпПриемкаСтроительныхРаботУслуг.СчетУчетаРасчетовСКонтрагентом, ВтДокументПоступлениеТоваровУслуг.СчетУчетаРасчетовСКонтрагентом);
CommonFunctions.CopyMatchingProperties(ДокументИмпПриемкаСтроительныхРаботУслуг.Грузоотправитель, ВтДокументПоступлениеТоваровУслуг.Грузоотправитель);
CommonFunctions.CopyMatchingProperties(ДокументИмпПриемкаСтроительныхРаботУслуг.Грузополучатель, ВтДокументПоступлениеТоваровУслуг.Грузополучатель);
CommonFunctions.CopyMatchingProperties(ДокументИмпПриемкаСтроительныхРаботУслуг.СчетУчетаРасчетовПоТаре, ВтДокументПоступлениеТоваровУслуг.СчетУчетаРасчетовПоТаре);
foreach (var Element in ДокументИмпПриемкаСтроительныхРаботУслуг.Услуги) {
var NewElement = ВтДокументПоступлениеТоваровУслуг.Услуги.AddElement();
CommonFunctions.CopyMatchingProperties(Element, NewElement);
CommonFunctions.CopyMatchingProperties(Element.СчетЗатрат, NewElement.СчетЗатрат);
CommonFunctions.CopyMatchingProperties(Element.СчетЗатратНУ, NewElement.СчетЗатратНУ);
CommonFunctions.CopyMatchingProperties(Element.Субконто1, NewElement.Субконто1);
CommonFunctions.CopyMatchingProperties(Element.Субконто2, NewElement.Субконто2);
CommonFunctions.CopyMatchingProperties(Element.Субконто3, NewElement.Субконто3);
CommonFunctions.CopyMatchingProperties(Element.СчетУчетаНДС, NewElement.СчетУчетаНДС);
}
foreach (var Element in ДокументИмпПриемкаСтроительныхРаботУслуг.ЗачетАвансов) {
var NewElement = ВтДокументПоступлениеТоваровУслуг.ЗачетАвансов.AddElement();
NewElement.СуммаЗачета = Element.СуммаЗачета;
}
Обработчики
Эталонный отправки из платформ в 1с
Попытка
НачатьТранзакцию();
Контекст = Новый Структура;
Контекст.Вставить("ЭтотОбъект", ЭтотОбъект);
ВыполнитьФункцию("ИнициализироватьКонтекстЗаписиОбъекта", Контекст);
ВыполнитьФункцию("НайтиСоздатьОбъект", Контекст);
ВыполнитьФункцию("ЗаполнитьОбъект", Контекст);
ВыполнитьФункцию("ЗаписатьОбъект", Контекст);
ЗафиксироватьТранзакцию();
Исключение
Если ТранзакцияАктивна() Тогда
ОтменитьТранзакцию();
КонецЕсли;
Контекст.Вставить("ИнформацияОбОшибке", ИнформацияОбОшибке());
ВыполнитьФункцию("ОбработатьИсключениеПриЗаписиОбъекта", Контекст);
КонецПопытки;
Расширение функционала универсальных функций
Сначала документ записывается, затем проводится если был проведен
Если ЗагружаемыйОбъект.Проведен Тогда
Контекст.Вставить("РежимЗаписи", РежимЗаписиДокумента.Проведение);
КонецЕсли;
Удобное встраивание вместо БА
ЗагружаемыйОбъект = Контекст.ЗаписываемыйОбъект;
ПреобразованнаяСтруктура = Контекст.ПреобразованныеДанные[0];
Поиск значений
ПараметрыПоиска = ОбщегоНазначения.СкопироватьРекурсивно(Контекст);
// СчетКапВложенийБУ
ИмяПоляИсточник = "СчетЗатрат";
ИмяПоляПриемник = "СчетКапВложенийБУ";
ОписаниеТипа = Новый ОписаниеТипов("ПланСчетовСсылка.Хозрасчетный");
ЗначениеСвойства = ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(СтрокаУслуги, ИмяПоляИсточник);
ЗначениеСвойстваВ1с = ВыполнитьФункцию("ЗначениеРеквизита", ЗначениеСвойства, ОписаниеТипа, ПараметрыПоиска, ИмяПоляИсточник);
СтрокаЗатраты[ИмяПоляПриемник] = ЗначениеСвойстваВ1с;
Примеры
Создание нескольких типов в обработчике отправки в 1с
Попытка
НачатьТранзакцию();
Контекст = Новый Структура;
Контекст.Вставить("ЭтотОбъект", ЭтотОбъект);
ВыполнитьФункцию("ИнициализироватьКонтекстЗаписиОбъекта", Контекст);
Контекст.Вставить("ЗаписываемыйОбъект", ВыполнитьФункцию("НайтиКонтрагентаПоКонтексту", Контекст));
ВыполнитьФункцию("НайтиСоздатьОбъект", Контекст);
ВыполнитьФункцию("ЗаполнитьОбъект", Контекст);
КонтекстПартнера = Новый Структура;
КонтекстПартнера.Вставить("ТипДанных", "Справочник.Партнеры");
КонтекстПартнера.Вставить("ЭтотОбъект", ЭтотОбъект);
ВыполнитьФункцию("ИнициализироватьКонтекстЗаписиОбъекта", КонтекстПартнера);
КонтекстПартнера.ПреобразованныеДанные[0].Идентификатор = XMLСтрока(Новый УникальныйИдентификатор);
Если ЗначениеЗаполнено(Контекст.ЗаписываемыйОбъект.Партнер) Тогда
КонтекстПартнера.Вставить("ЗаписываемыйОбъект", Контекст.ЗаписываемыйОбъект.Партнер.ПолучитьОбъект());
КонецЕсли;
ВыполнитьФункцию("НайтиСоздатьОбъект", КонтекстПартнера);
ВыполнитьФункцию("ЗаполнитьОбъект", КонтекстПартнера);
КонтекстПартнера.ЗаписываемыйОбъект.Клиент = Истина;
КонтекстПартнера.ЗаписываемыйОбъект.Поставщик = Истина;
КонтекстПартнера.ЗаписываемыйОбъект.ПрочиеОтношения = Истина;
ВыполнитьФункцию("ЗаписатьОбъект", КонтекстПартнера);
Если Не ЗначениеЗаполнено(Контекст.ЗаписываемыйОбъект.Партнер) Тогда
Контекст.ЗаписываемыйОбъект.Партнер = КонтекстПартнера.ЗаписываемыйОбъект.Ссылка;
КонецЕсли;
Если ЗначениеЗаполнено(Контекст.ЗаписываемыйОбъект.Партнер) Тогда
ПартнерыИКонтрагенты.ЗаписатьИерархиюПартнера(Контекст.ЗаписываемыйОбъект.Партнер);
КонецЕсли;
СтруктураОбъекта = КонтекстПартнера.ПреобразованныеДанные[0];
Если Контекст.ЗаписываемыйОбъект.ЮридическоеФизическоеЛицо = Перечисления.ЮридическоеФизическоеЛицо.ЮридическоеЛицо
И Контекст.ЗаписываемыйОбъект.СтранаРегистрации = Справочники.СтраныМира.Россия Тогда
Контекст.ЗаписываемыйОбъект.ЮрФизЛицо = Перечисления.ЮрФизЛицо.ЮрЛицо;
ИначеЕсли Контекст.ЗаписываемыйОбъект.ЮридическоеФизическоеЛицо = Перечисления.ЮридическоеФизическоеЛицо.ЮридическоеЛицо
И Контекст.ЗаписываемыйОбъект.СтранаРегистрации <> Справочники.СтраныМира.Россия Тогда
Контекст.ЗаписываемыйОбъект.ЮрФизЛицо = Перечисления.ЮрФизЛицо.ЮрЛицоНеРезидент;
ИначеЕсли Контекст.ЗаписываемыйОбъект.ЮридическоеФизическоеЛицо = Перечисления.ЮридическоеФизическоеЛицо.ФизическоеЛицо
И ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(СтруктураОбъекта, "ИндивидуальныйПредприниматель") <> Истина Тогда
Контекст.ЗаписываемыйОбъект.ЮрФизЛицо = Перечисления.ЮрФизЛицо.ФизЛицо;
ИначеЕсли Контекст.ЗаписываемыйОбъект.ЮридическоеФизическоеЛицо = Перечисления.ЮридическоеФизическоеЛицо.ФизическоеЛицо
И ОбщегоНазначенияКлиентСервер.СвойствоСтруктуры(СтруктураОбъекта, "ИндивидуальныйПредприниматель") = Истина Тогда
Контекст.ЗаписываемыйОбъект.ЮрФизЛицо = Перечисления.ЮрФизЛицо.ИндивидуальныйПредприниматель;
КонецЕсли;
Контекст.ЗаписываемыйОбъект.ДополнительныеСвойства.Вставить("ИгнорироватьКонтрольИНН");
Контекст.ЗаписываемыйОбъект.ДополнительныеСвойства.Вставить("ОтключитьМеханизмРегистрацииОбъектов");
ВыполнитьФункцию("ЗаписатьОбъект", Контекст);
ЗафиксироватьТранзакцию();
Исключение
Если ТранзакцияАктивна() Тогда
ОтменитьТранзакцию();
КонецЕсли;
Контекст.Вставить("ИнформацияОбОшибке", ИнформацияОбОшибке());
ВыполнитьФункцию("ОбработатьИсключениеПриЗаписиОбъекта", Контекст);
КонецПопытки;