Обмен данными через обработку.
Всем привет. Делаю обмен с помощью обработки. Документ Переносится. Но когда в базе источнике я меняю что нибудь в этом документе(допустим в тч количество или сумма),
то при очередном обмене у меня в базе приемнике создается новый документ.
Обмен идет через добавленный регистр в базе источнике. Т.е при проведении документа в базе источнике, в регистре появляется запись с измерением типа ДокументСсылка.
База приемник обращается к этому регистру и вытаскивает оттуда данные. После обмена записи в регистре очищаются.
Обмен настроен через NewObject.
то при очередном обмене у меня в базе приемнике создается новый документ.
Обмен идет через добавленный регистр в базе источнике. Т.е при проведении документа в базе источнике, в регистре появляется запись с измерением типа ДокументСсылка.
База приемник обращается к этому регистру и вытаскивает оттуда данные. После обмена записи в регистре очищаются.
Обмен настроен через NewObject.
&НаСервере
Процедура ИмпортДокументовВыпускПродукции(База2)
Запрос = База2.NewObject("Запрос");
Запрос.Текст =
"ВЫБРАТЬ
| ВыпускПродукции.Ссылка КАК Документ,
| ВыпускПродукции.ПометкаУдаления,
| ВыпускПродукции.Проведен,
| ВыпускПродукции.Номер,
| ВыпускПродукции.Дата,
| ВыпускПродукции.Ответственный,
| ВыпускПродукции.Статус,
| ВыпускПродукции.Выгрузить КАК Выгрузить,
| ВыпускПродукции.МТ_Проверено
|ИЗ
| Документ.ВыпускПродукции КАК ВыпускПродукции
|ГДЕ
| ВыпускПродукции.Выгрузить
| И ВыпускПродукции.Ссылка В (&НужныеДокументы)
| И ВыпускПродукции.Дата МЕЖДУ &ДатаНачала И &ДатаОкончания
|
|УПОРЯДОЧИТЬ ПО
| Документ";
Запрос.УстановитьПараметр("ДатаНачала", Объект.ДатаНачала);
Запрос.УстановитьПараметр("ДатаОкончания", КонецДня(Объект.ДатаОкончания));
Запрос.УстановитьПараметр("НужныеДокументы", ПолучитьНужныеДокументы(База2, "Документ.ВыпускПродукции"));
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДокументов = РезультатЗапроса.Выбрать();
Пока ВыборкаДокументов.Следующий() Цикл
Документ = ПолучитьДокументВыпускПродукции(ВыборкаДокументов);
Если ЗначениеЗаполнено(Документ) И ВыборкаДокументов.ПометкаУдаления = Истина Тогда
НовыйДокумент = Документ.ПолучитьОбъект();
НовыйДокумент.УстановитьПометкуУдаления(Истина);
Продолжить;
КонецЕсли;
Если ВыборкаДокументов.Проведен = Ложь Тогда
УдалитьРегистрациюОбъекта(ВыборкаДокументов.Документ, База2);
Продолжить;
КонецЕсли;
Если ЗначениеЗаполнено(Документ) Тогда
НовыйДокумент = Документ.ПолучитьОбъект();
НовыйДокумент.Дата = КонецДня(ВыборкаДокументов.Дата);
НовыйДокумент.Товары.Очистить();
Иначе
НовыйДокумент = Документы.ВыпускПродукции.СоздатьДокумент();
НовыйДокумент.Дата = КонецДня(ВыборкаДокументов.Дата);
НовыйДокумент.УстановитьНовыйНомер();
КонецЕсли;
НовыйДокумент.Статус = ВыборкаДокументов.Статус;
НовыйДокумент.Ответственный = ПараметрыСеанса.ТекущийПользователь;
ЗапросТовары = База2.NewObject("Запрос");
ЗапросТовары.Текст =
"ВЫБРАТЬ
| ВыпускПродукцииТовары.НомерСтроки КАК НомерСтроки,
| ВыпускПродукцииТовары.Номенклатура,
| ВыпускПродукцииТовары.Номенклатура.Наименование,
| ВыпускПродукцииТовары.Штрихкод,
| ВыпускПродукцииТовары.ДатаВыпуска,
| ВыпускПродукцииТовары.Количество,
| ВыпускПродукцииТовары.Склад,
| ВыпускПродукцииТовары.Склад.Наименование КАК СкладНаименование,
| ВыпускПродукцииТовары.Номенклатура.Код КАК НоменклатураКод
|ИЗ
| Документ.ВыпускПродукции.Товары КАК ВыпускПродукцииТовары
|ГДЕ
| ВыпускПродукцииТовары.Ссылка = &Документ
|
|СГРУППИРОВАТЬ ПО
| ВыпускПродукцииТовары.НомерСтроки,
| ВыпускПродукцииТовары.Номенклатура,
| ВыпускПродукцииТовары.Номенклатура.Наименование,
| ВыпускПродукцииТовары.Штрихкод,
| ВыпускПродукцииТовары.ДатаВыпуска,
| ВыпускПродукцииТовары.Количество,
| ВыпускПродукцииТовары.Склад,
| ВыпускПродукцииТовары.Склад.Наименование
|
|УПОРЯДОЧИТЬ ПО
| НомерСтроки";
ЗапросТовары.УстановитьПараметр("Документ", ВыборкаДокументов.Документ);
РезультатЗапроса = ЗапросТовары.Выполнить();
ВыборкаТовары = РезультатЗапроса.Выбрать();
Пока ВыборкаТовары.Следующий() Цикл
НоваяСтрока = НовыйДокумент.Товары.Добавить();
НоваяСтрока.Номенклатура = НайтиСоздатьНоменклатуру(ВыборкаТовары);
НоваяСтрока.Штрихкод = ВыборкаТовары.Штрихкод;
НоваяСтрока.ДатаВыпуска = ВыборкаТовары.ДатаВыпуска;
НоваяСтрока.Количество = ВыборкаТовары.Количество;
НоваяСтрока.Склад = Справочники.Склады.НайтиПоНаименованию(СокрЛП(ВыборкаТовары.СкладНаименование), Истина);
КонецЦикла;
Если НовыйДокумент.Товары.Количество() > 0 Тогда
Если НовыйДокумент.Проведен Тогда
НовыйДокумент.Записать(РежимЗаписиДокумента.ОтменаПроведения);
КонецЕсли;
Попытка
НовыйДокумент.Записать(РежимЗаписиДокумента.Проведение);
ТекстСообщения = "Документ ""Выпуск продукции №"" " + ВыборкаДокументов.Номер + " от " + Формат(ВыборкаДокументов.Дата,"ДФ=dd.MM.yyyy") + ": записан.";
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения);
Исключение
ТекстСообщения = "Документ ""Выпуск продукции №"" " + ВыборкаДокументов.Номер + " от " + Формат(ВыборкаДокументов.Дата,"ДФ=dd.MM.yyyy") + ": " + ОписаниеОшибки();
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(ТекстСообщения);
КонецПопытки;
КонецЕсли;
УдалитьРегистрациюОбъекта(ВыборкаДокументов.Документ, База2);
КонецЦикла;
КонецПроцедуры
&НаСервере
Функция ПолучитьНужныеДокументы(БазаИмпорта, ВидОбъекта)
Запрос = БазаИмпорта.NewObject("Запрос");
Запрос.Текст =
"ВЫБРАТЬ
| КатегорииОбъектов.Объект КАК Объект
|ИЗ
| РегистрСведений.МТ_КатегорииОбъектов КАК КатегорииОбъектов
|ГДЕ
| КатегорииОбъектов.Категория = &Категория
| И КатегорииОбъектов.Объект ССЫЛКА Документ.ПеремещениеТоваров
|
|СГРУППИРОВАТЬ ПО
| КатегорииОбъектов.Объект
|
|УПОРЯДОЧИТЬ ПО
| Объект
|АВТОУПОРЯДОЧИВАНИЕ";
Если НЕ ВидОбъекта = "Документ.ПеремещениеТоваров" Тогда
Запрос.Текст = СтрЗаменить(Запрос.Текст, "Документ.ПеремещениеТоваров", ВидОбъекта);
КонецЕсли;
Запрос.УстановитьПараметр("Категория", БазаИмпорта.Справочники.МТ_КатегорииОбъектов.WMSИзменен);
Возврат Запрос.Выполнить().Выгрузить();
КонецФункции
&НаСервере
Функция ПолучитьДокументВыпускПродукции(ВыборкаДокументов)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ ПЕРВЫЕ 1
| ВыпускПродукции.Ссылка КАК Документ
|ИЗ
| Документ.ВыпускПродукции КАК ВыпускПродукции
|ГДЕ
| ВыпускПродукции.Дата МЕЖДУ НАЧАЛОПЕРИОДА(&Дата, ГОД) И КОНЕЦПЕРИОДА(&Дата, ГОД)
| И ВыпускПродукции.Выгрузить = &Выгрузить";
Запрос.УстановитьПараметр("Дата", ВыборкаДокументов.Дата);
Запрос.УстановитьПараметр("Выгрузить",ВыборкаДокументов.Выгрузить);
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
ВыборкаДетальныеЗаписи.Следующий();
Возврат ВыборкаДетальныеЗаписи.Документ;
КонецФункции
ПоказатьПо теме из базы знаний
- Перенос данных из УПП 1.3 / КА 1.1 в БП 3. Переносятся документы, справочники и начальные остатки
- 1С: Конвертация данных 3. Инструкции и примеры. EnterpriseData (универсальный формат обмена)
- Загрузка данных в БП 3.0 (Универсальный обмен данными XML)
- Универсальный обмен данными (UDE Ver.3.x.x)
- Обмен данными между Wildberries и 1С
Ответы
В избранное
Подписаться на ответы
Сортировка:
Древо развёрнутое
Свернуть все
&НаСервере
Процедура УдалитьРегистрациюОбъекта(Объект, БазаИмпорта)
НаборЗаписей = БазаИмпорта.РегистрыСведений.МТ_КатегорииОбъектов.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Объект.Установить(Объект);
НаборЗаписей.Отбор.Категория.Установить(БазаИмпорта.Справочники.МТ_КатегорииОбъектов.WMSИзменен);
НаборЗаписей.Записать();
КонецПроцедуры
Это процедура удаления записей регистра.
Процедура УдалитьРегистрациюОбъекта(Объект, БазаИмпорта)
НаборЗаписей = БазаИмпорта.РегистрыСведений.МТ_КатегорииОбъектов.СоздатьНаборЗаписей();
НаборЗаписей.Отбор.Объект.Установить(Объект);
НаборЗаписей.Отбор.Категория.Установить(БазаИмпорта.Справочники.МТ_КатегорииОбъектов.WMSИзменен);
НаборЗаписей.Записать();
КонецПроцедуры
Это процедура удаления записей регистра.
Вакансии
Аналитик 1С / Бизнес-аналитик
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)
Нижний Новгород
зарплата от 100 000 руб. до 250 000 руб.
Временный (на проект)