Вопрос № 100252: Здравствуйте, остро нуждаюсь в помощи.
Документы загружаются в базу из идентичной
это Бухгалтерия 7.7 4.55 релиз, но сильно до меня переписанный
Сначала все загружается в таблицу ТЗ.
Справочники Контрагентов и Договоров идентичны.<...
Вопрос № 100.252
Здравствуйте, остро нуждаюсь в помощи.
Документы загружаются в базу из идентичной
это Бухгалтерия 7.7 4.55 релиз, но сильно до меня переписанный
Сначала все загружается в таблицу ТЗ.
Справочники Контрагентов и Договоров идентичны.
При загрузке договора возникает такая проблема. В поле договор документа попадает ссылка на поле Основной договор справочника Контрагентов, а не элемент справочника Договоры.
Грузятся документы отгрузок.
Документы оплат формируются в базе.
ОСВ по 62 счету формирует 2 строки по договорам.
Оплаты с нормальным договором, а отгрузки не та ссылка.
Если вручную зайти в поле договор Документа, то он встает правильно.
Как при загрузке установить договор правильно?
Фрагмент кода прилагаю.
Отвечает: Шахрайчук Владимир Анатольевич
Здравствуйте, Marina Chernova!
Здесь есть ошибка
Если Дог2.ТекущийЭлемент().Наименование=СокрЛП(ТЗ.Договор) Тогда
нужно писать
Если СокрЛП(Дог2.Наименование)=СокрЛП(ТЗ.Договор) Тогда
потому что все строковые реквизиты фиксированной длины праводополненные пробелами
Если это исправление не поможет, то вполне возможно, что договор переопределяется позднее. Посмотрите, нет ли где в другом месте строки
Договор=Контрагент.ОсновнойДоговор
Ответ отправил: Шахрайчук Владимир Анатольевич (статус: Практикант)
Ответ отправлен: 30.08.2007, 17:46 Оценка за ответ: 4 Комментарий оценки: Полностью согласна и даже знаю, что строка Договор=Контрагент.ОсновнойДоговор есть в предопределенной глобальной процедуре. Замечания учла, но фрагмент так и не заработал.
Отвечает: Elric
Здравствуйте, Marina Chernova!
1. Сопоставление по наименованию (что контрагентов, что договоров) -- не самый надежный способ. В справочнике может быть более одного элемента с одним и тем же наименованием. По коду было бы более точно (при условии что они в обеих базах совпадают). Это просто общая рекомендация.
2. Стоит сделать фильтр, чтобы помеченные на удаление договоры не выбирались, даже если у них соответствующее наименование.
3. Проверять надо не просто наименование договора, а наименование без пробелов слева и справа. В правой части условия Вы функцию СокрЛП() поставили, а в левой забыли.
4. После того, как договор обнаружен, нужно прервать цикл, не искать другой договор с тем же наименованием. Тогда и время выполнения сократится, и дополнительная гарантия что если в базе два элемента с одинаковым наименованием, то всегда будет выбираться именно первый из них. Проще потом будет работать с данными.
С учетом всего вышесказанного, приведенный Вами фрагмент кода должен выглядеть так, как в моем Приложении.
Ну, плюс я немного упростил код.
Приложение:
--------- В творчестве рождается истина
Ответ отправил: Elric (статус: Специалист)
Ответ отправлен: 30.08.2007, 17:59 Оценка за ответ: 4 Комментарий оценки: Согласна, кроме п.4 Прерывание прекращает и перебор строк принимаемого файла и документы вообще не попадают в базу. Вот парадокс, советы все правильные, а фрагмент все равно не работает.
Отвечает: Полозов Олег aka Asher
Здравствуйте, Marina Chernova!
Я обычно не заморачиваюсь в таких ситуациях с рисованием обработок. Так как есть несколько других способов как это можно сделать:
1. Использовать УРБД. Неудобство этого способа - если необходима выгрузка только определенных объектов, нужно будет повозиться в семерке с миграцией объектов, а в 8.0 с планами обмена. Но в принципе день можно повозиться и потом расслабиться.
2. Воспользоваться конфигурацией конвертации объектов. Неудобство, надо хорошо разобраться с этой программой, но если конфигурации идентичны, то большинство настроек она сделает сама.
3. Есть обработки для выгрузки данных из одной базы в другую. Ну тут я вижу только приимущества.
В основном использую УРИБ, если у клиенов компонента установлена. а если нет, то обработку mcexp.ert (универсальный обмен данными в формате mxl)
Ответ отправил: Полозов Олег aka Asher (статус: 9-ый класс)
Ответ отправлен: 31.08.2007, 02:40 Оценка за ответ: 3 Комментарий оценки: Советы неплохие, но мне не подходят. Структура и качество связи(склад в поселке) таковы, что об УРИБе речи быть не могло. база переписана(читай изуродована) процентов на 80, так, что стандартные 1С обработки не все работают.
Отвечает: Ромашов Евгений Николаевич
Здравствуйте, Marina Chernova!
элемент справочника контрагентов "основной договор" является ссылкой на элемент справочника "договоры",т.е. это нормально если должен быть основной договор.
надо попробывать после ПС.Записать(); поставить прервать;
так по коду вроде нормально должно быть, могу посоветовать отладчик, посмотреть что присваивается договору напротяжении всего кода, может позже где - нибудь обрабатывается контрагент и с него указывается договор по умолчанию
Ответ отправил: Ромашов Евгений Николаевич (статус: 3-ий класс)
Ответ отправлен: 31.08.2007, 05:07 Оценка за ответ: 3 Комментарий оценки: Спасибо, совет хороший, кроме прерывания, которое прекращает перебор строк принимаемого файла и документы вообще не попадают в базу. Контрагент и договор по умолчанию обрабатываются в предопределенной глобальной процедуре. Я это знаю, но проблему по-прежнему не решила