Если ЭтотОбъект.ШтрихКод=Неопределено ИЛИ ЭтотОбъект.ШтрихКод="" ИЛИ КонтрольЧисл(ЭтотОбъект.ШтрихКод)<>ЭтотОбъект.ШтрихКод ИЛИ СтрДлина(ЭтотОбъект.ШтрихКод)<>13 Тогда ЭтотОбъект.ШтрихКод=дкПолучитьШтрихКод(ЭтотОбъект); КонецЕсли;
В случае, если все ЕСЛИ = ложь - до данного участка кода ЭтотОбъект.Модифицированность = ложь. После - истина. Вроде же никакой код не модифицирует данные документа.
Функция КонтрольЧисл - пересчитывает контрольное число в штрихкоде и возвращает штрихкод с правильным контрольным числом (если оно было неправильным).
А так - не осознал причины. После всех сравнений ЭтотОбъект.ШтрихКод равен тому же, чему и до сравнений. Но выполз из ситуации так:
ШтрихКодПроверка = ЭтотОбъект.ШтрихКод;
Если ШтрихКодПроверка=Неопределено ИЛИ ШтрихКодПроверка="" ИЛИ КонтрольЧисл(ШтрихКодПроверка)<>ШтрихКодПроверка ИЛИ СтрДлина(ШтрихКодПроверка)<>13 Тогда ЭтотОбъект.ШтрихКод=дкПолучитьШтрихКод(ЭтотОбъект); КонецЕсли;
Если НЕ ЭтоНовый() И ЭтотОбъект.Модифицированность()=Истина тогда ЭтотОбъект.Записать(РежимЗаписиДокумента.Запись); КонецЕсли;
Подставил для сравнений переменную, а не реквизит.
Про1С-ник
Группа: Местный
Сообщений: 9564
Из: Kharkiv, UA
Спасибо сказали: 2539 раз
Рейтинг: 0
Если НЕ ЭтоНовый() И ЭтотОбъект.Модифицированность()=Истина тогда ЭтотОбъект.Записать(РежимЗаписиДокумента.Запись); КонецЕсли;
Очень не корректное решение проблемы. Вероятно это происходит в ПриЗаписи() или обработке проведения? Я бы все таки искал и устранял причину модифицированности.
Личные бесплатные консультации не даю, для этого есть форум!
Если НЕ ЭтоНовый() И ЭтотОбъект.Модифицированность()=Истина тогда ЭтотОбъект.Записать(РежимЗаписиДокумента.Запись); КонецЕсли;
Очень не корректное решение проблемы. Вероятно это происходит в ПриЗаписи() или обработке проведения? Я бы все таки искал и устранял причину модифицированности.
Эта часть обязательна, т.к. задача кода следующая - С определенной даты введена система присвоения документу штрих-кода. Штрих-код создается при создании документа. Существует потребность обращения и к старым документам, у которых штрих-кодов ещё нет и создавать штрих-код и у них. Соответственно - если у старого документа нет штрих-кода, то он должен быть присвоен при открытии документа и сразу записан, чтоб документ можно было печатать уже с штрих-кодом. У юзеров нет права перепроводить уже проведенный документ, оттого записываю его программно при присвоении штрих-кода.
Просто проблема была в том, что документ перепроводился при каждом открытии, даже если штрих-код уже был в док-те. Сейчас док-т перепроводится только 1 раз, когда нет штрих-кода.
P.S Извините за сумбурность в вопросе. Ограничен во времени, оттого так неточно задал. Сори.
КонтрольЧисл() В УСЛОВИИ в пустой штрих код записывает пустой штрих код. И меняет документ.
Или второй вариант КонтрольЧисл() в непустой штрих код записывает непустой штрих код. И меняет документ.
А в 1с разве функция фактически изменяет переданный в неё параметр? Я думал как в С, передается копия параметра, с ней выполняются действия, возвращается нечтО по Возврату, а переданная копия параметра "умирает" не заменяя собой оригинал. Если неправ - поясните.
До изучения процедур в С ещё не дошел. Учусь ща в шаге. Функции прошли, а процедуры нет. Даже не знаю есть ли они там))
А функции в С по умолчанию снимают при вызове копию параметра и с ней производят все вычисления и преобразования. Соответственно оригинал переменной, выступающей параметром функции, не меняется. Можно подгрузить в функцию указатель на переменную, тогда функция будет оперировать ни с копией переменной, а с оригиналом, изменяя его. Такой подход применим, если нужно сохранить измененные в функции параметры для дальнейшей работы.
в 1с наоборот. Нужно указываь если мы хотим работать с копией. Функция КонтрольЧисл(Знач ШК)
Значит функция в 1С по умолчанию сохраняет изменения, которые произошли в ней с переданным параметром. Понял! Учту, т.к. основополагающий момент. Спасибо!))
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!