Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Неназначенных незавершенных заказов: 2
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> По какой-причине модифицируется сл. документ? (Альфа-Авто 4.0, 1с8.0)          
svlad-90 Подменю пользователя
сообщение 15.08.12, 14:38
Сообщение #1

Говорящий
***
Группа: Пользователи
Сообщений: 61
Из: Одесса
Спасибо сказали: 17 раз
Рейтинг: 0

Если ЭтотОбъект.ШтрихКод=Неопределено ИЛИ ЭтотОбъект.ШтрихКод=""
        ИЛИ КонтрольЧисл(ЭтотОбъект.ШтрихКод)<>ЭтотОбъект.ШтрихКод
        ИЛИ СтрДлина(ЭтотОбъект.ШтрихКод)<>13
        Тогда
    ЭтотОбъект.ШтрихКод=дкПолучитьШтрихКод(ЭтотОбъект);
КонецЕсли;


В случае, если все ЕСЛИ = ложь - до данного участка кода ЭтотОбъект.Модифицированность = ложь. После - истина. Вроде же никакой код не модифицирует данные документа.

Функция КонтрольЧисл - пересчитывает контрольное число в штрихкоде и возвращает штрихкод с правильным контрольным числом (если оно было неправильным).


Vofka Подменю пользователя
сообщение 15.08.12, 14:39
Сообщение #2

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 14050
Из: Киев
Спасибо сказали: 4612 раз
Рейтинг: 3748.8

svlad-90, а можно ещё раз повторить вопрос, по русски или украински?

logist Подменю пользователя
сообщение 15.08.12, 14:51
Сообщение #3

Про1С-ник
Иконка группы
Квалифицированный бухгалтерГений телепатии и социального моделированияЗа заслуги на форуме в 2010 годуМодератору Про1С (за заслуги в 2011 году)
Группа: Местный
Сообщений: 9564
Из: Kharkiv, UA
Спасибо сказали: 2539 раз
Рейтинг: 0

Цитата(svlad-90 @ 15.08.12, 15:38) *
Вроде же никакой код не модифицирует данные документа.

Ключевое слово "Вроде" smile.gif Знач что-то меняет, ищите отладчиком хорошо.


Signature
Личные бесплатные консультации не даю, для этого есть форум!

svlad-90 Подменю пользователя
сообщение 15.08.12, 15:03
Сообщение #4

Говорящий
***
Группа: Пользователи
Сообщений: 61
Из: Одесса
Спасибо сказали: 17 раз
Рейтинг: 0

Цитата(logist @ 15.08.12, 15:51) *
Ключевое слово "Вроде" smile.gif Знач что-то меняет, ищите отладчиком хорошо.


Поискал отладчиком. Модифицированность происходила на одном из условий.
КонтрольЧисл могла бы что-то изменить, если бы я написал

ЭтотОбъект.ШтрихКод=онтрольЧисл(ЭтотОбъект.ШтрихКод)


А так - не осознал причины. После всех сравнений ЭтотОбъект.ШтрихКод равен тому же, чему и до сравнений. Но выполз из ситуации так:

ШтрихКодПроверка = ЭтотОбъект.ШтрихКод;
    
    
    Если ШтрихКодПроверка=Неопределено ИЛИ ШтрихКодПроверка=""
        ИЛИ КонтрольЧисл(ШтрихКодПроверка)<>ШтрихКодПроверка
        ИЛИ СтрДлина(ШтрихКодПроверка)<>13
        Тогда
    ЭтотОбъект.ШтрихКод=дкПолучитьШтрихКод(ЭтотОбъект);
КонецЕсли;        

Если НЕ ЭтоНовый() И ЭтотОбъект.Модифицированность()=Истина тогда
ЭтотОбъект.Записать(РежимЗаписиДокумента.Запись);
КонецЕсли;


Подставил для сравнений переменную, а не реквизит.

logist Подменю пользователя
сообщение 15.08.12, 15:16
Сообщение #5

Про1С-ник
Иконка группы
Квалифицированный бухгалтерГений телепатии и социального моделированияЗа заслуги на форуме в 2010 годуМодератору Про1С (за заслуги в 2011 году)
Группа: Местный
Сообщений: 9564
Из: Kharkiv, UA
Спасибо сказали: 2539 раз
Рейтинг: 0

Если НЕ ЭтоНовый() И ЭтотОбъект.Модифицированность()=Истина тогда
ЭтотОбъект.Записать(РежимЗаписиДокумента.Запись);
КонецЕсли;

Очень не корректное решение проблемы. Вероятно это происходит в ПриЗаписи() или обработке проведения?
Я бы все таки искал и устранял причину модифицированности.


Signature
Личные бесплатные консультации не даю, для этого есть форум!

alex040269 Подменю пользователя
сообщение 15.08.12, 15:32
Сообщение #6

Крутой
Иконка группы
Группа: Местный
Сообщений: 1626
Из: Гуляйполе
Спасибо сказали: 236 раз
Рейтинг: 0

Если равен тому-же, то лунше так:
Цитата(svlad-90 @ 15.08.12, 15:38) *
Если НЕ ЭтотОбъект.ШтрихКод=дкПолучитьШтрихКод(ЭтотОбъект) Тогда
ЭтотОбъект.ШтрихКод=дкПолучитьШтрихКод(ЭтотОбъект);
КонецЕсли


и ничего записывать не надо


Signature
Никогда не бойся делать то, что не умеешь, помни - Ноев ковчег был построен любителем, профессионалы построили Титаник.
ЗиУП

svlad-90 Подменю пользователя
сообщение 15.08.12, 15:46
Сообщение #7

Говорящий
***
Группа: Пользователи
Сообщений: 61
Из: Одесса
Спасибо сказали: 17 раз
Рейтинг: 0

Цитата(logist @ 15.08.12, 16:16) *
Если НЕ ЭтоНовый() И ЭтотОбъект.Модифицированность()=Истина тогда
ЭтотОбъект.Записать(РежимЗаписиДокумента.Запись);
КонецЕсли;

Очень не корректное решение проблемы. Вероятно это происходит в ПриЗаписи() или обработке проведения?
Я бы все таки искал и устранял причину модифицированности.


Эта часть обязательна, т.к. задача кода следующая - С определенной даты введена система присвоения документу штрих-кода. Штрих-код создается при создании документа. Существует потребность обращения и к старым документам, у которых штрих-кодов ещё нет и создавать штрих-код и у них. Соответственно - если у старого документа нет штрих-кода, то он должен быть присвоен при открытии документа и сразу записан, чтоб документ можно было печатать уже с штрих-кодом. У юзеров нет права перепроводить уже проведенный документ, оттого записываю его программно при присвоении штрих-кода.


Просто проблема была в том, что документ перепроводился при каждом открытии, даже если штрих-код уже был в док-те. Сейчас док-т перепроводится только 1 раз, когда нет штрих-кода.

P.S Извините за сумбурность в вопросе. Ограничен во времени, оттого так неточно задал. Сори.

Ardi Подменю пользователя
сообщение 15.08.12, 17:53
Сообщение #8

Живет на форуме
***********
Гений телепатии и социального моделирования
Группа: Пользователи
Сообщений: 4121
Из: Киев
Спасибо сказали: 957 раз
Рейтинг: 0

КонтрольЧисл() В УСЛОВИИ в пустой штрих код записывает пустой штрих код. И меняет документ.

Или второй вариант
КонтрольЧисл() в непустой штрих код записывает непустой штрих код. И меняет документ.

Сообщение отредактировал Ardi - 15.08.12, 17:55


Signature
Услуги 1С программиста 8.2, 7.7 (Плохо, дорого, очередь). Киев.

svlad-90 Подменю пользователя
сообщение 15.08.12, 18:51
Сообщение #9

Говорящий
***
Группа: Пользователи
Сообщений: 61
Из: Одесса
Спасибо сказали: 17 раз
Рейтинг: 0

Цитата(Ardi @ 15.08.12, 18:53) *
КонтрольЧисл() В УСЛОВИИ в пустой штрих код записывает пустой штрих код. И меняет документ.

Или второй вариант
КонтрольЧисл() в непустой штрих код записывает непустой штрих код. И меняет документ.


А в 1с разве функция фактически изменяет переданный в неё параметр? Я думал как в С, передается копия параметра, с ней выполняются действия, возвращается нечтО по Возврату, а переданная копия параметра "умирает" не заменяя собой оригинал. Если неправ - поясните.

Ardi Подменю пользователя
сообщение 15.08.12, 19:02
Сообщение #10

Живет на форуме
***********
Гений телепатии и социального моделирования
Группа: Пользователи
Сообщений: 4121
Из: Киев
Спасибо сказали: 957 раз
Рейтинг: 0

А что в С делает с параметром процедура?


Signature
Услуги 1С программиста 8.2, 7.7 (Плохо, дорого, очередь). Киев.

svlad-90 Подменю пользователя
сообщение 15.08.12, 19:25
Сообщение #11

Говорящий
***
Группа: Пользователи
Сообщений: 61
Из: Одесса
Спасибо сказали: 17 раз
Рейтинг: 0

Цитата(Ardi @ 15.08.12, 20:02) *
А что в С делает с параметром процедура?


До изучения процедур в С ещё не дошел. Учусь ща в шаге. Функции прошли, а процедуры нет. Даже не знаю есть ли они там))

А функции в С по умолчанию снимают при вызове копию параметра и с ней производят все вычисления и преобразования. Соответственно оригинал переменной, выступающей параметром функции, не меняется. Можно подгрузить в функцию указатель на переменную, тогда функция будет оперировать ни с копией переменной, а с оригиналом, изменяя его. Такой подход применим, если нужно сохранить измененные в функции параметры для дальнейшей работы.

Интересно - какой вариант работы происходит в 1С?

Ardi Подменю пользователя
сообщение 15.08.12, 19:32
Сообщение #12

Живет на форуме
***********
Гений телепатии и социального моделирования
Группа: Пользователи
Сообщений: 4121
Из: Киев
Спасибо сказали: 957 раз
Рейтинг: 0

в 1с наоборот. Нужно указываь если мы хотим работать с копией.
Функция КонтрольЧисл(Знач ШК)


Signature
Услуги 1С программиста 8.2, 7.7 (Плохо, дорого, очередь). Киев.

Спасибо сказали: svlad-90,

svlad-90 Подменю пользователя
сообщение 15.08.12, 22:35
Сообщение #13

Говорящий
***
Группа: Пользователи
Сообщений: 61
Из: Одесса
Спасибо сказали: 17 раз
Рейтинг: 0

Цитата(Ardi @ 15.08.12, 20:32) *
в 1с наоборот. Нужно указываь если мы хотим работать с копией.
Функция КонтрольЧисл(Знач ШК)


Значит функция в 1С по умолчанию сохраняет изменения, которые произошли в ней с переданным параметром. Понял! Учту, т.к. основополагающий момент. Спасибо!))

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 15.06.25, 15:22
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!