Группа: Пользователи
Сообщений: 324
Спасибо сказали: 1 раз
Рейтинг: 1
Здравствуйте! Есть обработка для втягивание документов из одной базы в другую. Проблема в том как перезаписывать уже имеющиеся документы при выгрузке если там есть изменения. Сейчас я просто сравниваю на изменение по сумме ну и по коду чтобы дублей не было.Если сумма разная делается новый документ. То есть номер не меняется, меняться может только сумма, и если она изменилась значит перезаписываем только сумму в уже созданном.
Тут проверка
&НаСервере Функция ПроверитьСуществованиеДокумента(Номер,СуммаДокумента, НачалоИнтервала, КонецИнтервала) Запрос = новый Запрос; Запрос.Текст = "ВЫБРАТЬ |СписокЗаявокУТ.Ссылка |ИЗ |Документ.СписокЗаявокУТ КАК СписокЗаявокУТ |ГДЕ |СписокЗаявокУТ.НомерЗаявки = &ПараметрСправочныйНомер |И СписокЗаявокУТ.Дата МЕЖДУ &ПараметрНачалоИнтервала И &ПараметрКонецИнтервала |И СписокЗаявокУТ.СуммаДокумента = &СуммаДокумента";
Если Результат.Количество() = 0 Тогда Возврат Ложь; Иначе Возврат Истина; КонецЕсли;
КонецФункции
Запрос
запр = СоединениеБух.NewObject("Запрос"); запр.Текст = "ВЫБРАТЬ | ЗаказКлиента.Номер КАК Номер, | ЗаказКлиента.Дата, | ЗаказКлиента.СуммаОплаты КАК СуммаОплаты, | ЗаказКлиента.СуммаДокумента КАК СуммаДокумента, | ЗаказКлиента.ЧислоПутевок КАК ЧислоПутевок, | ЗаказКлиента.Санаторий.Наименование КАК Санаторий, | ЗаказКлиента.Партнер.Наименование КАК Партнер, | ЗаказКлиента.РуководительГруппы.Наименование КАК РуководительГруппы, | ЗаказКлиента.Контрагент.Наименование КАК Контрагент |ИЗ | Документ.ЗаказКлиента КАК ЗаказКлиента |ГДЕ | ЗаказКлиента.Дата МЕЖДУ &НачалоПериода И &КонецПериода | И ЗаказКлиента.Проведен = ИСТИНА | И ЗаказКлиента.ПометкаУдаления = ЛОЖЬ";
Группа: Пользователи
Сообщений: 324
Спасибо сказали: 1 раз
Рейтинг: 1
burza @ Сегодня, 13:50
, {Обработка.ОбменДаннымиСТорговлей.Форма.Форма.Форма(145)}: Метод объекта не обнаружен (ПолучитьОбъект) НовыйСписокЗаявокУТ = Документы.СписокЗаявокУТ.ПолучитьОбъект();
Группа: Пользователи
Сообщений: 324
Спасибо сказали: 1 раз
Рейтинг: 1
sava1 @ Сегодня, 15:59
, вот что вылазит {Обработка.ОбменДаннымиСТорговлей.Форма.Форма.Форма(148)}: Поле объекта недоступно для записи (СуммаДокумента) НовыйСписокЗаявокУТ.СуммаДокумента = Выборка.СуммаДокумента;
Группа: Пользователи
Сообщений: 324
Спасибо сказали: 1 раз
Рейтинг: 1
Что не так? {Обработка.ОбменДаннымиСТорговлей.Форма.Форма.Форма(150)}: Ошибка при вызове метода контекста (ПолучитьОбъект) Док = Док.ПолучитьОбъект(); по причине: Элемент не выбран!
Пока ВыборкаБазДляИмпорта.Следующий() Цикл Если (ВыборкаБазДляИмпорта.ЗагружатьПриходБезналичный) Тогда Сообщить(ВыборкаБазДляИмпорта.СтрокаСоединения);
СоединениеБух = СоединитьсяСБазой(ВыборкаБазДляИмпорта.СтрокаСоединения); Если СоединениеБух = неопределено тогда Сообщить("Произошла ошибка при соединении с базой предприятия " + ВыборкаБазДляИмпорта.СтрокаСоединения, СтатусСообщения.Внимание); Продолжить; иначе Сообщить("Успешно соединились с базой предприятия " + ВыборкаБазДляИмпорта.СтрокаСоединения, СтатусСообщения.Информация); конецЕсли;
// Создаём запрос для выборки всех исходящих платежей за период запр = СоединениеБух.NewObject("Запрос"); запр.Текст = "ВЫБРАТЬ | ЗаказКлиента.Номер КАК Номер, | ЗаказКлиента.Дата, | ЗаказКлиента.СуммаОплаты КАК СуммаОплаты, | ЗаказКлиента.СуммаДокумента КАК СуммаДокумента, | ЗаказКлиента.ЧислоПутевок КАК ЧислоПутевок, | ЗаказКлиента.Санаторий.Наименование КАК Санаторий, | ЗаказКлиента.Партнер.Наименование КАК Партнер, | ЗаказКлиента.РуководительГруппы.Наименование КАК РуководительГруппы, | ЗаказКлиента.Контрагент.Наименование КАК Контрагент |ИЗ | Документ.ЗаказКлиента КАК ЗаказКлиента |ГДЕ | ЗаказКлиента.Дата МЕЖДУ &НачалоПериода И &КонецПериода | И ЗаказКлиента.Проведен = ИСТИНА | И ЗаказКлиента.ПометкаУдаления = ЛОЖЬ | И НЕ ЗаказКлиента.СуммаДокумента = &СуммаДокумента";
Пока Выборка.Следующий() Цикл Сообщить("Загрузка документа №" + Выборка.Номер); Если ПроверитьСуществованиеДокумента(Выборка.Номер, Выборка.СуммаДокумента, НачалоГода(Выборка.Дата), КонецГода(Выборка.Дата)) тогда Сообщить("Загрузка №" + Выборка.Номер + " невозможна, поскольку документ уже был загружен");
Пока ВыборкаБазДляИмпорта.Следующий() Цикл Если (ВыборкаБазДляИмпорта.ЗагружатьПриходБезналичный) Тогда Сообщить(ВыборкаБазДляИмпорта.СтрокаСоединения);
СоединениеБух = СоединитьсяСБазой(ВыборкаБазДляИмпорта.СтрокаСоединения); Если СоединениеБух = неопределено тогда Сообщить("Произошла ошибка при соединении с базой предприятия " + ВыборкаБазДляИмпорта.СтрокаСоединения, СтатусСообщения.Внимание); Продолжить; иначе Сообщить("Успешно соединились с базой предприятия " + ВыборкаБазДляИмпорта.СтрокаСоединения, СтатусСообщения.Информация); конецЕсли;
// Создаём запрос для выборки всех исходящих платежей за период запр = СоединениеБух.NewObject("Запрос"); запр.Текст = "ВЫБРАТЬ | ЗаказКлиента.Номер КАК Номер, | ЗаказКлиента.Дата, | ЗаказКлиента.СуммаОплаты КАК СуммаОплаты, | ЗаказКлиента.СуммаДокумента КАК СуммаДокумента, | ЗаказКлиента.ЧислоПутевок КАК ЧислоПутевок, | ЗаказКлиента.Санаторий.Наименование КАК Санаторий, | ЗаказКлиента.Партнер.Наименование КАК Партнер, | ЗаказКлиента.РуководительГруппы.Наименование КАК РуководительГруппы, | ЗаказКлиента.Контрагент.Наименование КАК Контрагент |ИЗ | Документ.ЗаказКлиента КАК ЗаказКлиента |ГДЕ | ЗаказКлиента.Дата МЕЖДУ &НачалоПериода И &КонецПериода | И ЗаказКлиента.Проведен = ИСТИНА | И ЗаказКлиента.ПометкаУдаления = ЛОЖЬ | И НЕ ЗаказКлиента.СуммаДокумента = &СуммаДокумента";
Пока Выборка.Следующий() Цикл Сообщить("Загрузка документа №" + Выборка.Номер);
// Это уже не нужно и функцию можете удалить //Если ПроверитьСуществованиеДокумента(Выборка.Номер, Выборка.СуммаДокумента, НачалоГода(Выборка.Дата), КонецГода(Выборка.Дата)) тогда //Сообщить("Загрузка №" + Выборка.Номер + " невозможна, поскольку документ уже был загружен");
// Иначе
Док = Документы.СписокЗаявокУТ.НайтиПоНомеру(Выборка.Номер, Выборка.Дата);
Если НЕ Док.Пустая Тогда
Если Док.СуммаДокумента = Выборка.СуммаДокумента Тогда Сообщить("Загрузка №" + Выборка.Номер + " невозможна, поскольку документ уже был загружен"); Продолжить; КонецЕсли;
НачатьТранзакцию(); Док = Док.ПолучитьОбъект();
Иначе
НачатьТранзакцию(); Док = Документы.СписокЗаявокУТ.СоздатьДокумент();
Группа: Пользователи
Сообщений: 324
Спасибо сказали: 1 раз
Рейтинг: 1
Vidocq05 @ Сегодня, 11:25
, Этот код взял и просто создал все документы по новому(они уже есть)! Мне не нужно загружать документы каждый раз новые. Мне чтобы менялись только данные в документе а документы оставались прежние. То есть так нету проверки на уже имеющиеся документы.
Док = Документы.СписокЗаявокУТ.НайтиПоНомеру(Выборка.Номер, Выборка.Дата);
Если НЕ Док.Пустая Тогда
Если Док.СуммаДокумента = Выборка.СуммаДокумента Тогда Сообщить("Загрузка №" + Выборка.Номер + " невозможна, поскольку документ уже был загружен"); Продолжить; КонецЕсли;
НачатьТранзакцию(); Док = Док.ПолучитьОбъект; Док.СуммаДокумента = Выборка.СуммаДокумента; Док.Записать(); ЗафиксироватьТранзакцию();
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!