Правила формирования договоров из УТ в БП
По теме из базы знаний
Ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
Есть 4 варианта:
1. Договоры контрагентов формируются без привязки к соглашениям или заказам
2. Разным заказам соответствуют разные договоры контрагентов
3. Разным соглашениям соответствуют разные договоры контрагентов
4. Разным сделкам соответствуют разные договоры контрагентов
В плане обмена "СинхронизацияДанныхЧерезУниверсальныйФормат" в модуле формы есть код заполняющий реквизит "ПравилаСозданияДоговоровКонтрагентов":
1. Договоры контрагентов формируются без привязки к соглашениям или заказам
2. Разным заказам соответствуют разные договоры контрагентов
3. Разным соглашениям соответствуют разные договоры контрагентов
4. Разным сделкам соответствуют разные договоры контрагентов
В плане обмена "СинхронизацияДанныхЧерезУниверсальныйФормат" в модуле формы есть код заполняющий реквизит "ПравилаСозданияДоговоровКонтрагентов":
// Формирует и возвращает список правил выгрузки договора по данным объектов Взаиморасчетов.
//
// Возвращаемое значение: СписокЗначений.
//
Функция СписокПравилФормированияДоговора() Экспорт
СписокПравил = Новый СписокЗначений;
СписокПравил.Добавить("БезРазделения", НСтр("ru = 'Договоры контрагентов формируются без привязки к соглашениям или заказам'"));
Если (ПолучитьФункциональнуюОпцию("ИспользоватьЗаказыКлиентов")
Или ПолучитьФункциональнуюОпцию("ИспользоватьЗаказыПоставщикам"))
И Не (ПолучитьФункциональнуюОпцию("ИспользоватьПоступлениеПоНесколькимЗаказам")
И ПолучитьФункциональнуюОпцию("ИспользоватьРеализациюПоНесколькимЗаказам")
И ПолучитьФункциональнуюОпцию("ИспользоватьАктыВыполненныхРаботПоНесколькимЗаказам")) Тогда
СписокПравил.Добавить("ПоЗаказам", НСтр("ru = 'Разным заказам соответствуют разные договоры контрагентов'"));
КонецЕсли;
Если Константы.ИспользованиеСоглашенийСКлиентами.Получить() <> Перечисления.ИспользованиеСоглашенийСКлиентами.НеИспользовать Тогда
СписокПравил.Добавить("ПоСоглашениям", НСтр("ru = 'Разным соглашениям соответствуют разные договоры контрагентов'"));
КонецЕсли;
Если ПолучитьФункциональнуюОпцию("ИспользоватьСделкиСКлиентами") Тогда
СписокПравил.Добавить("ПоСделкам", НСтр("ru = 'Разным сделкам соответствуют разные договоры контрагентов'"));
КонецЕсли;
Возврат СписокПравил;
КонецФункции
Показать
1. БезРазделения = Договоры контрагентов формируются без привязки к соглашениям или заказам
2. ПоЗаказам = Разным заказам соответствуют разные договоры контрагентов
3. ПоСоглашениям = Разным соглашениям соответствуют разные договоры контрагентов
4. ПоСделкам = Разным сделкам соответствуют разные договоры контрагентов
Далее в общем модуле "МенеджерОбменаЧерезУниверсальныйФормат" идет такой код:
2. ПоЗаказам = Разным заказам соответствуют разные договоры контрагентов
3. ПоСоглашениям = Разным соглашениям соответствуют разные договоры контрагентов
4. ПоСделкам = Разным сделкам соответствуют разные договоры контрагентов
Далее в общем модуле "МенеджерОбменаЧерезУниверсальныйФормат" идет такой код:
Процедура ПолучитьНастройкиВыгрузкиАналитикиПоДоговорам(НастройкиДопАналитикиПоДоговорам, КомпонентыОбмена)
АналитикаВзаиморасчетов = "";
НастройкиДопАналитикиПоДоговорам = Новый Структура;
Если КомпонентыОбмена.ЭтоОбменЧерезПланОбмена
И КомпонентыОбмена.УзелКорреспондента.Метаданные().Реквизиты.Найти("ПравилаСозданияДоговоровКонтрагентов") <> Неопределено Тогда
АналитикаВзаиморасчетов = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(КомпонентыОбмена.УзелКорреспондента, "ПравилаСозданияДоговоровКонтрагентов");
КонецЕсли;
Если Не ЗначениеЗаполнено(АналитикаВзаиморасчетов) Тогда
АналитикаВзаиморасчетов = "БезРазделения";
КонецЕсли;
НастройкиДопАналитикиПоДоговорам.Вставить("ЗаказВДоговор", АналитикаВзаиморасчетов = "ПоЗаказам");
НастройкиДопАналитикиПоДоговорам.Вставить("СоглашениеВДоговор", АналитикаВзаиморасчетов = "ПоСоглашениям");
НастройкиДопАналитикиПоДоговорам.Вставить("СделкаВДоговор", АналитикаВзаиморасчетов = "ПоСделкам");
НастройкиДопАналитикиПоДоговорам.Вставить("ДоговорВДоговор", АналитикаВзаиморасчетов = "БезРазделения");
КонецПроцедуры
Показать
И тут уже в этом же модуле выполняются различные сценарии поиска:
Если ЭтоЗаказ Или ЭтоСоглашение Или ЭтоСделка Тогда
Если ЭтоЗаказ И КомпонентыОбмена.ПараметрыКонвертации.НастройкиДопАналитикиПоДоговорам.ЗаказВДоговор Тогда
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
Запрос.УстановитьПараметр("Ссылка", ЗаказСсылка);
Если ТипЗнч(ЗаказСсылка) = Тип("ДокументСсылка.ЗаказКлиента") Тогда
Запрос.Текст =
"ВЫБРАТЬ
| ЗаказКлиента.Ссылка КАК Ссылка,
| ЗаказКлиента.Контрагент КАК Контрагент,
| ЗаказКлиента.Организация КАК Организация,
| ЗаказКлиента.Дата КАК Дата,
| ЗаказКлиента.Номер КАК Номер,
| ЗаказКлиента.Валюта КАК Валюта,
| ЗаказКлиента.Представление КАК Представление,
| ЗаказКлиента.ПорядокОплаты = ЗНАЧЕНИЕ(Перечисление.ПорядокОплатыПоСоглашениям.РасчетыВВалютеОплатаВРублях) КАК РасчетыВУсловныхЕдиницах
|ПОМЕСТИТЬ ВТ_Документ
|ИЗ
| Документ.ЗаказКлиента КАК ЗаказКлиента
|ГДЕ
| ЗаказКлиента.Ссылка = &Ссылка";
Запрос.Выполнить();
ИначеЕсли ТипЗнч(ЗаказСсылка) = Тип("ДокументСсылка.ЗаявкаНаВозвратТоваровОтКлиента") Тогда
Запрос.Текст =
"ВЫБРАТЬ
| ЗаявкаНаВозвратТоваровОтКлиента.Ссылка КАК Ссылка,
| ЗаявкаНаВозвратТоваровОтКлиента.Контрагент КАК Контрагент,
| ЗаявкаНаВозвратТоваровОтКлиента.Организация КАК Организация,
| ЗаявкаНаВозвратТоваровОтКлиента.Дата КАК Дата,
| ЗаявкаНаВозвратТоваровОтКлиента.Номер КАК Номер,
| ЗаявкаНаВозвратТоваровОтКлиента.Валюта КАК Валюта,
| ЗаявкаНаВозвратТоваровОтКлиента.Представление КАК Представление,
| ЗаявкаНаВозвратТоваровОтКлиента.ПорядокОплаты = ЗНАЧЕНИЕ(Перечисление.ПорядокОплатыПоСоглашениям.РасчетыВВалютеОплатаВРублях) КАК РасчетыВУсловныхЕдиницах
|ПОМЕСТИТЬ ВТ_Документ
|ИЗ
| Документ.ЗаявкаНаВозвратТоваровОтКлиента КАК ЗаявкаНаВозвратТоваровОтКлиента
|ГДЕ
| ЗаявкаНаВозвратТоваровОтКлиента.Ссылка = &Ссылка";
Запрос.Выполнить();
ИначеЕсли ТипЗнч(ЗаказСсылка) = Тип("ДокументСсылка.ЗаказПоставщику") Тогда
Запрос.Текст =
"ВЫБРАТЬ
| ЗаказПоставщику.Ссылка КАК Ссылка,
| ЗаказПоставщику.Контрагент КАК Контрагент,
| ЗаказПоставщику.Организация КАК Организация,
| ЗаказПоставщику.Дата КАК Дата,
| ЗаказПоставщику.Номер КАК Номер,
| ЗаказПоставщику.Валюта КАК Валюта,
| ЗаказПоставщику.Представление КАК Представление,
| ЗаказПоставщику.ПорядокОплаты = ЗНАЧЕНИЕ(Перечисление.ПорядокОплатыПоСоглашениям.РасчетыВВалютеОплатаВРублях) КАК РасчетыВУсловныхЕдиницах
|ПОМЕСТИТЬ ВТ_Документ
|ИЗ
| Документ.ЗаказПоставщику КАК ЗаказПоставщику
|ГДЕ
| ЗаказПоставщику.Ссылка = &Ссылка";
Запрос.Выполнить();
КонецЕсли;
Если Запрос.МенеджерВременныхТаблиц.Таблицы.Количество() > 0 Тогда
Запрос.Текст =
"ВЫБРАТЬ
| ВТ_Документ.Ссылка КАК Ссылка,
| ВТ_Документ.Контрагент КАК Контрагент,
| ВТ_Документ.Организация КАК Организация,
| ВТ_Документ.Дата КАК Дата,
| ВТ_Документ.Номер КАК Номер,
| ВТ_Документ.Валюта КАК ВалютаВзаиморасчетов,
| ВТ_Документ.Представление КАК Наименование,
| ВТ_Документ.РасчетыВУсловныхЕдиницах КАК РасчетыВУсловныхЕдиницах,
| КурсыВалютСрезПоследних.Курс КАК КурсВзаиморасчетов,
| КурсыВалютСрезПоследних.Кратность КАК КратностьВзаиморасчетов
|ИЗ
| ВТ_Документ КАК ВТ_Документ
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют.СрезПоследних(&ДатаДок, ) КАК КурсыВалютСрезПоследних
| ПО ВТ_Документ.Валюта = КурсыВалютСрезПоследних.Валюта";
Запрос.УстановитьПараметр("ДатаДок", ДанныеИБ.Дата);
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
ЗаполнитьЗначенияСвойств(СтруктураДанныеДоговора, Выборка);
СтруктураДанныеДоговора.Наименование = ОбщегоНазначенияУТ.ПолучитьПредставлениеДокумента(ЗаказСсылка, Выборка.Номер, Выборка.Дата);
ДоговорЗаполнен = Истина;
КонецЕсли;
КонецЕсли;
КонецЕсли;
Если ЭтоСоглашение И ДопАналитикаПоДоговорам(КомпонентыОбмена).СоглашениеВДоговор Тогда
Запрос = Новый Запрос;
Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
Запрос.УстановитьПараметр("Ссылка", СоглашениеСсылка);
Если ТипЗнч(СоглашениеСсылка) = Тип("СправочникСсылка.СоглашенияСКлиентами") Тогда
Запрос.Текст =
"ВЫБРАТЬ
| СоглашенияСКлиентами.Ссылка КАК Ссылка,
| СоглашенияСКлиентами.Контрагент КАК Контрагент,
| СоглашенияСКлиентами.Организация КАК Организация,
| СоглашенияСКлиентами.Дата КАК Дата,
| СоглашенияСКлиентами.Номер КАК Номер,
| СоглашенияСКлиентами.Валюта КАК ВалютаВзаиморасчетов,
| СоглашенияСКлиентами.Наименование КАК Наименование,
| СоглашенияСКлиентами.Типовое КАК Типовое,
| СоглашенияСКлиентами.ПорядокОплаты = ЗНАЧЕНИЕ(Перечисление.ПорядокОплатыПоСоглашениям.РасчетыВВалютеОплатаВРублях) КАК РасчетыВУсловныхЕдиницах
|ПОМЕСТИТЬ ВТ_Соглашение
|ИЗ
| Справочник.СоглашенияСКлиентами КАК СоглашенияСКлиентами
|ГДЕ
| СоглашенияСКлиентами.Ссылка = &Ссылка";
Запрос.Выполнить();
ИначеЕсли ТипЗнч(СоглашениеСсылка) = Тип("СправочникСсылка.СоглашенияСПоставщиками") Тогда
Запрос.Текст =
"ВЫБРАТЬ
| СоглашенияСПоставщиками.Ссылка КАК Ссылка,
| СоглашенияСПоставщиками.Контрагент КАК Контрагент,
| СоглашенияСПоставщиками.Организация КАК Организация,
| СоглашенияСПоставщиками.Дата КАК Дата,
| СоглашенияСПоставщиками.Номер КАК Номер,
| СоглашенияСПоставщиками.Валюта КАК ВалютаВзаиморасчетов,
| СоглашенияСПоставщиками.Наименование КАК Наименование,
| ЛОЖЬ КАК Типовое,
| СоглашенияСПоставщиками.ПорядокОплаты = ЗНАЧЕНИЕ(Перечисление.ПорядокОплатыПоСоглашениям.РасчетыВВалютеОплатаВРублях) КАК РасчетыВУсловныхЕдиницах
|ПОМЕСТИТЬ ВТ_Соглашение
|ИЗ
| Справочник.СоглашенияСПоставщиками КАК СоглашенияСПоставщиками
|ГДЕ
| СоглашенияСПоставщиками.Ссылка = &Ссылка";
Запрос.Выполнить();
КонецЕсли;
Если Запрос.МенеджерВременныхТаблиц.Таблицы.Количество() > 0 Тогда
Запрос.Текст =
"ВЫБРАТЬ
| СоглашенияСКлиентами.Ссылка КАК Ссылка,
| СоглашенияСКлиентами.Контрагент КАК Контрагент,
| СоглашенияСКлиентами.Организация КАК Организация,
| СоглашенияСКлиентами.Дата КАК Дата,
| СоглашенияСКлиентами.Номер КАК Номер,
| СоглашенияСКлиентами.ВалютаВзаиморасчетов КАК ВалютаВзаиморасчетов,
| СоглашенияСКлиентами.Наименование КАК Наименование,
| СоглашенияСКлиентами.РасчетыВУсловныхЕдиницах КАК РасчетыВУсловныхЕдиницах,
| СоглашенияСКлиентами.Типовое КАК Типовое,
| КурсыВалютСрезПоследних.Курс КАК КурсВзаиморасчетов,
| КурсыВалютСрезПоследних.Кратность КАК КратностьВзаиморасчетов
|ИЗ
| ВТ_Соглашение КАК СоглашенияСКлиентами
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.КурсыВалют.СрезПоследних(&ДатаДок, ) КАК КурсыВалютСрезПоследних
| ПО СоглашенияСКлиентами.ВалютаВзаиморасчетов = КурсыВалютСрезПоследних.Валюта";
Запрос.УстановитьПараметр("ДатаДок", ДанныеИБ.Дата);
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
ЗаполнитьЗначенияСвойств(СтруктураДанныеДоговора, Выборка);
Если Не ЗначениеЗаполнено(СтруктураДанныеДоговора.Контрагент) Тогда
Если ЕстьРеквизитДанныхИБ(ДанныеИБ, "Контрагент") Тогда
СтруктураДанныеДоговора.Контрагент = ДанныеИБ.Контрагент;
Иначе
СтруктураДанныеДоговора.Контрагент = ПараметрыПоУмолчанию.Контрагент;
КонецЕсли;
КонецЕсли;
Если Не ЗначениеЗаполнено(СтруктураДанныеДоговора.Организация) Тогда
Если ЗначениеЗаполнено(ДанныеИБ.Организация) Тогда
СтруктураДанныеДоговора.Организация = ДанныеИБ.Организация;
Иначе
СтруктураДанныеДоговора.Организация = ПараметрыПоУмолчанию.Организация;
КонецЕсли;
КонецЕсли;
Если ТипЗнч(СоглашениеСсылка) = Тип("СправочникСсылка.СоглашенияСКлиентами") Тогда
Наименование = ?(Выборка.Типовое, НСтр("ru = 'Типовое'"), НСтр("ru = 'Индивидуальное'")) + "; ";
Иначе
Наименование = "";
КонецЕсли;
Наименование = Наименование + Выборка.Наименование
+ " " + ?(ЗначениеЗаполнено(Выборка.Номер), "№" + Выборка.Номер, "")
+ " " + ?(ЗначениеЗаполнено(Выборка.Дата), НСтр("ru = 'от'") + " " + Формат(Выборка.Дата, "ДЛФ=D"), "");
СтруктураДанныеДоговора.Наименование = СокрЛП(Наименование);
ДоговорЗаполнен = Истина;
КонецЕсли;
КонецЕсли;
КонецЕсли;
Если ЭтоСделка И ДопАналитикаПоДоговорам(КомпонентыОбмена).СделкаВДоговор Тогда
Запрос = Новый Запрос(
"ВЫБРАТЬ
| СделкиСКлиентами.Ссылка,
| СделкиСКлиентами.Код КАК Номер,
| """" КАК Контрагент,
| """" КАК Организация,
| СделкиСКлиентами.ДатаНачала КАК Дата,
| КурсыВалютСрезПоследних.Валюта КАК ВалютаВзаиморасчетов,
| СделкиСКлиентами.Наименование КАК Наименование,
| КурсыВалютСрезПоследних.Курс КАК КурсВзаиморасчетов,
| КурсыВалютСрезПоследних.Кратность КАК КратностьВзаиморасчетов
|ИЗ
| Справочник.СделкиСКлиентами КАК СделкиСКлиентами,
| РегистрСведений.КурсыВалют.СрезПоследних(&ДатаДок, Валюта = &Валюта) КАК КурсыВалютСрезПоследних
|ГДЕ
| СделкиСКлиентами.Ссылка = &Ссылка");
Запрос.УстановитьПараметр("Ссылка", СделкаСсылка);
Запрос.УстановитьПараметр("ДатаДок", ДанныеИБ.Дата);
Запрос.УстановитьПараметр("Валюта", ПараметрыПоУмолчанию.ВалютаВзаиморасчетов);
Выборка = Запрос.Выполнить().Выбрать();
Если Выборка.Следующий() Тогда
ЗаполнитьЗначенияСвойств(СтруктураДанныеДоговора, Выборка);
СтруктураДанныеДоговора.Организация = ДанныеИБ.Организация;
Если ЕстьРеквизитДанныхИБ(ДанныеИБ, "Контрагент") Тогда
СтруктураДанныеДоговора.Контрагент = ДанныеИБ.Контрагент;
Иначе
СтруктураДанныеДоговора.Контрагент = ПараметрыПоУмолчанию.Контрагент;
КонецЕсли;
Если ПараметрыПоУмолчанию.Свойство("РасчетыВУсловныхЕдиницах") Тогда
СтруктураДанныеДоговора.РасчетыВУсловныхЕдиницах = ПараметрыПоУмолчанию.РасчетыВУсловныхЕдиницах;
КонецЕсли;
СтруктураДанныеДоговора.Наименование = ?(ЗначениеЗаполнено(СделкаСсылка.Метаданные().ПредставлениеОбъекта),
СделкаСсылка.Метаданные().ПредставлениеОбъекта, СделкаСсылка.Метаданные().Синоним)
+ ?(ЗначениеЗаполнено(Выборка.Номер), " " + Выборка.Номер, "");
ДоговорЗаполнен = Истина;
КонецЕсли;
КонецЕсли;
КонецЕсли;
Показать
Для чего нужен код:
...
СтруктураДанныеДоговора.Наименование = ?(ЗначениеЗаполнено(СделкаСсылка.Метаданные().ПредставлениеОбъекта),
СделкаСсылка.Метаданные().ПредставлениеОбъекта, СделкаСсылка.Метаданные().Синоним)
+ ?(ЗначениеЗаполнено(Выборка.Номер), " " + Выборка.Номер, "");
...
в БП где идет разбор данной строки?
...
СтруктураДанныеДоговора.Наименование = ?(ЗначениеЗаполнено(СделкаСсылка.Метаданные().ПредставлениеОбъекта),
СделкаСсылка.Метаданные().ПредставлениеОбъекта, СделкаСсылка.Метаданные().Синоним)
+ ?(ЗначениеЗаполнено(Выборка.Номер), " " + Выборка.Номер, "");
...
в БП где идет разбор данной строки?
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот