Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
22 ноя 2024, 09:04

Изменить создание входящего документа ЭДО.

Автор Sanches_de_la_Vega, 16 окт 2024, 15:48

0 Пользователей и 1 гость просматривают эту тему.

Sanches_de_la_Vega

Друзья, всем привет. Задача такая: приходит документ от контрагента по ЭДО. В ФормеПросмотра можно создать или подобрать документ. При создании документа ставится дата документа контрагента, а дата нашего документа - текущая дата, а НУЖНО, чтобы и дата нашего документа была заполнена датой контрагента. Техподдержка говорит встроенным функционалам нельзя, только дописывать. Подскажите где искать заполнение даты при создании. Пока нашел только в модуле формыПросмотра документа:
////////////////////////////////////////////////////////////////////////////////////////
// Создание документа учета

&НаКлиенте
Процедура ПоказатьВыборСозданияДокументаУчета()

ОбработкаВыбора = Новый ОписаниеОповещения("ОбработатьВыборСозданияДокументаУчета", ЭтотОбъект);

Если СписокСоздания.Количество() > 1 Тогда

ПоказатьВыборИзМеню(ОбработкаВыбора, СписокСоздания, Элементы.КомандаСоздатьДокументУчета);

Иначе

ВыполнитьОбработкуОповещения(ОбработкаВыбора, СписокСоздания[0]);

КонецЕсли;

КонецПроцедуры

&НаКлиенте
Процедура ОбработатьВыборСозданияДокументаУчета(ВыбранноеЗначение, ДополнительныеПараметры) Экспорт

Если ВыбранноеЗначение = Неопределено Тогда
Возврат;
КонецЕсли; 

КонтекстОперации = ОбработкаНеисправностейБЭДКлиент.НовыйКонтекстДиагностики();
СоздатьДокументыУчета(ВыбранноеЗначение.Значение, КонтекстОперации);

ОповеститьОбОтраженииВУчете();

ТипДокумента = ЭлементСхемыИнформацияОтправителя(ЭтотОбъект).ТипДокумента;

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

КонецПроцедуры

&НаКлиенте
Процедура ОбработатьВыборСозданияДокументаУчетаЗавершение(КонтекстДиагностики, ДополнительныеПараметры) Экспорт

ОбработкаНеисправностейБЭДКлиент.ОбработатьОшибки(КонтекстДиагностики);

КонецПроцедуры

&НаСервере
Функция ДанныеДляОтраженияВУчете()

ДанныеЭлектронногоДокумента = ЭлектронныеДокументыЭДО.ДанныеДокументовДляОтраженияВУчете(Объект.Ссылка)[0];

Возврат ДанныеЭлектронногоДокумента;

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

&НаСервере
Процедура СоздатьДокументыУчета(Знач СпособОбработки, КонтекстОперации)

Максим75

Sanches_de_la_Vega, как раз процедура СоздатьДокументыУчета и не видна. Может там дата и пишется. Вернее она по умолчанию текущая ставится при создании документа. Вот там и надо дату ставить принудительно.
Ну или в самом документе перед записью отловить что если он новый и "перелетел" по ЭДО (если какой-то признак этого есть) то дату поменять.

Sanches_de_la_Vega

Максим75, да спасибо вот код последней процедуры, но не понимаю где тут дату искать.Процедура СоздатьДокументыУчета(Знач СпособОбработки, КонтекстОперации)

ДанныеДляОтраженияВУчете = ДанныеДляОтраженияВУчете();

Если Не ЗначениеЗаполнено(ДанныеДляОтраженияВУчете) Тогда
Возврат;
КонецЕсли;

Если ТребуетсяСопоставлениеНоменклатурыДляДокументаСОтключеннымКонтролем(ДанныеДляОтраженияВУчете) Тогда

Элементы.ГруппаОшибкиСопоставленияНоменклатуры.Видимость = Истина;
ОписаниеОшибки = НСтр("ru = 'Для отражения в учете необходимо сопоставить номенклатуру.'");
ОбщегоНазначения.СообщитьПользователю(ОписаниеОшибки);
Возврат;

КонецЕсли;

ТипДокумента = ЭлементСхемыИнформацияОтправителя(ЭтотОбъект).ТипДокумента;
Если (ТипДокумента = Перечисления.ТипыДокументовЭДО.УПД
ИЛИ ТипДокумента = Перечисления.ТипыДокументовЭДО.УКД)
И СпособОбработки.Количество() = 2 Тогда
СпособОбработки = Новый Структура("ПервичныйДокумент, СчетФактура", СпособОбработки[1], СпособОбработки[0]);
КонецЕсли;

ИнтеграцияЭДО.ОтразитьДанныеЭлектронногоДокументаСКонтролем(ДанныеДляОтраженияВУчете, СпособОбработки);

ОбновитьНастройкиОтраженияВУчете(СпособОбработки);
НастроитьЭлементыОтраженияВУчете();

КонецПроцедуры

Максим75

Sanches_de_la_Vega, думаю вот здесь ИнтеграцияЭДО.ОтразитьДанныеЭлектронногоДокументаСКонтролем(ДанныеДляОтраженияВУчете, СпособОбработки);
что в этой процедуре?
где-то же должно быть создание документа СчетФактура. должен же быть объект самого нового документа.


Sanches_de_la_Vega

Максим75, нашел, где формируется массив, откуда заполняется документ СФ. Как в этом массиве заменить Дата на ДатаКонтрагента? Можно Массив.Установить(4, ДатаКонтрагента)?

Максим75

Цитата: Sanches_de_la_Vega от 17 окт 2024, 17:06Можно Массив.Установить(4, ДатаКонтрагента)?

Ну это Вы просто в 5 элемент массива установите какую-то дату.

Что у Вас вообще в массив загоняется? Если в 5 элемент дата документа, то тогда конечно ДА.

Sanches_de_la_Vega

Максим75, У меня в этот массив записана структура из СФ. У массива всего один элемент под индексом ноль. Как заменить значение одного элемента структуры?

Sanches_de_la_Vega

Максим75, и еще вот такой вопрос. Если мне по ЭДО приходит только СФ, можно как-то при этом создать на его основании еще и Поступление?

Максим75

Цитата: Sanches_de_la_Vega от 18 окт 2024, 13:37Максим75, и еще вот такой вопрос. Если мне по ЭДО приходит только СФ, можно как-то при этом создать на его основании еще и Поступление?
конечно можно программно создать на основании Сф документ Поступление.
Вот что пишет сама 1С:

Как выполнить ввод на основании программно?
Для того чтобы выполнить ввод на основании программно, следует создать новый объект, вызвать у него метод Заполнить() и передать в этот метод значение, на основании которого должен быть создан новый объект. В результате этих действий будет выполнен обработчик события "Обработка заполнения", расположенный в модуле нового объекта.

В заключении останется только получить форму объекта, установить свойство расширения формы "ПараметрОснование" и открыть ее:

Копировать в буфер обмена
НовыйДокумент = Документы.РасходнаяНакладная.СоздатьДокумент();
НовыйДокумент.Заполнить(ВыбранныйКлиент);
ФормаДок = НовыйДокумент.ПолучитьФорму();
ФормаДок.ПараметрОснование = ВыбранныйКлиент;
ФормаДок.Открыть();

Максим75

Цитата: Sanches_de_la_Vega от 18 окт 2024, 12:26Максим75, У меня в этот массив записана структура из СФ. У массива всего один элемент под индексом ноль. Как заменить значение одного элемента структуры?
ну надо получить эту структуру и потом уже в самой структуре по ключу изменить значение и обратно все в массив запихнуть.

Теги:

Похожие темы (5)

Рейтинг@Mail.ru

Поиск