ЗаписьЖурналаРегистрации |
Я |
IF_THEN
10.11.09 — 13:34
Добрый день, ребята кто подскажет что я делаю не так. Из 8 ки по ОЛЕ соединяюсь с 7.7. в 7 ой базе создаю объект. Далее хочу в журнал 7ой базы записать событие создания объякта. Пишу База77.ЗаписьЖурналаРегистрации(«Создан новый объект»,»Refs»,»RefNew»,справочник77,2); справочник77 = База77.CreateObject(«Справочник.Номенклатура»);
ДенисЧ
1 — 10.11.09 — 13:35
не взлетит.
IF_THEN
2 — 10.11.09 — 13:47
ща турбо надув дам и взлетит!
dk
3 — 10.11.09 — 13:52
взлетит, если пнуть с подвывертом )
dk
4 — 10.11.09 — 13:58
EvalExpr и ExecuteBatch еще никто не отменял )))
IF_THEN
5 — 10.11.09 — 14:17
Щас протестю
IF_THEN
6 — 10.11.09 — 15:10
База77.EvalExpr(«НайденныйОбъект=СоздатьОбъект(«»Справочник.Договоры»»);»)
{(1)}: Ошибка при вызове метода контекста (EvalExpr): Произошла исключительная ситуация (1С:Предприятие): 1 НайденныйОбъект<<?>>=СоздатьОбъект(«Справочник.Договоры»);
Переменная не определена (НайденныйОбъект)
не подскажете почему ругается, синтаксис правильный же
Михей
7 — 10.11.09 — 15:12
(6) CreateObject?
IF_THEN
8 — 10.11.09 — 15:13
(7) смотри (0) надо взять ссылку на элемент 7 ки и подставить в процедуру регистрации события
dk
9 — 10.11.09 — 15:13
(6) неправильно идею понял
IF_THEN
10 — 10.11.09 — 15:14
(9) ммм, да? не подскажешь твою идею?
dk
11 — 10.11.09 — 15:14
(8) ЗначениеИзСтрокиВнутр(ЗначениеВстрокуВнутр())
+ двойные кавычки учесть
Шахид
12 — 10.11.09 — 15:15
(10) а может напрямую в mlg писать или режим разделенный?
IF_THEN
13 — 10.11.09 — 15:16
(11) ну да, тема так можно передать объект. Но я вот выполнил запись в журнал без передачи объекта,и чет в журнал нече не добавилось.
IF_THEN
14 — 10.11.09 — 15:16
(12) не напрямую не нужно писать
Шахид
15 — 10.11.09 — 15:17
(14) жаль. такая идея пропадает
dk
16 — 10.11.09 — 15:22
База77.ExecuteBatch(«ЗаписьЖурналаРегистрации(«»Создан новый объект»»,»»Refs»»,»»RefNew»»,ЗначениеИзСтрокиВнутр(«+База77.ЗначениеВстрокуВнутр(справочник77.ТекущийЭлемент())+»),2);»)
dk
17 — 10.11.09 — 15:23
База77.ExecuteBatch(«ЗаписьЖурналаРегистрации(«»Создан новый объект»»,»»Refs»»,»»RefNew»»,ЗначениеИзСтрокиВнутр(«»»+СтрЗаменить(База77.ЗначениеВстрокуВнутр(справочник77.ТекущийЭлемент(),»»»»,»»»»»»))+»»»),2);»);
или так ))
Шахид
18 — 10.11.09 — 15:24
ТекущийЭлемент() по оле вроде не летает?
dk
19 — 10.11.09 — 15:29
Кто сказал?
IF_THEN
20 — 10.11.09 — 15:29
(18) летает
dk
21 — 10.11.09 — 15:29
напрямую нет, но обернутый летает
IF_THEN
22 — 10.11.09 — 15:31
интересно а почему без объекта не записывается событие. в отладке показывает выполнение метода ExecuteBatch истина, а в списке журнала нече не появляется. Все фильтры выставлены по все да и период нормальный..
dk
23 — 10.11.09 — 15:37
(15) эта идея давно реализована, у меня в том числе )
IF_THEN
24 — 10.11.09 — 15:38
в общем просто журнал регистраций настроен так что регистрируе пока только вход и выход))) p.s. на демке тестю
dk спасибо за инфо
В платформе 1С сообщения об ошибках бывают достаточно запутаны, и без должных навыков разобраться в причинах достаточно сложно. Вот и сообщение об ошибке при вызове контекста может ввести в ступор начинающего разработчика. Однако в подавляющем большинстве случаев мы видим подобное сообщение, если разработчик допустил ошибку в своем коде. Причем речь зачастую идет не об орфографических ошибках, а о логических.
Исправляем ситуацию
Чтобы избавиться от этого неприятного сообщения об ошибке при вызове метода контекста, следует понимать, что контекстом называют методы платформы 1С. Значит в определенной строке кода воспользовались методом с неверными параметрами или вызвали его не от того владельца. Всегда внимательно и полностью читайте сообщения об ошибках – часто в них содержится указание на строку и метод, вызвавший ошибку. Это поможет сэкономить время на отладку и поиск проблемного места в коде.
Рассмотрим действия разработчика на примере со специально допущенной ошибкой. Мы запускаем на исполнение нижеприведенный кусок кода с запросом, в котором забыли дописать условие отбора. Компилятор 1С пропускает такую процедуру, так как орфографических ошибок в написании команд мы не допустили. Однако в режиме предприятия нас ждет такое сообщение об ошибке:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.Ссылка КАК Ссылка,
| Номенклатура.ВерсияДанных КАК ВерсияДанных,
| Номенклатура.ПометкаУдаления КАК ПометкаУдаления,
| Номенклатура.Родитель КАК Родитель,
| Номенклатура.ЭтоГруппа КАК ЭтоГруппа,
| Номенклатура.Код КАК Код,
| Номенклатура.Наименование КАК Наименование,
| Номенклатура.Артикул КАК Артикул,
| Номенклатура.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
| Номенклатура.ТипНоменклатуры КАК ТипНоменклатуры,
| Номенклатура.Предопределенный КАК Предопределенный,
| Номенклатура.ИмяПредопределенныхДанных КАК ИмяПредопределенныхДанных
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| ";
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
КонецЦикла;
Приведенный текст ошибки программисту 1С скажет, что в модуле формы обработки «ЧтениеЗаписьXML на 152 строчке кода не может выполниться запрос. Причина в том, что на 17 строчке запроса нет чего-то, что ждал компилятор. Таким образом, чтобы убрать подобное сообщение, необходимо выяснить, что там должно быть и написать недостающий код.
Увидев вышеприведенный кусок кода, разработчик заметит, что в запросе есть служебное слово «ГДЕ», дающее сигнал 1С, что дальше будет условие. Но мы забыли дописать его и, естественно, система с помощью сообщения об ошибке спрашивает нас – «а где условие?». Чтобы исправить эту ситуацию необходимо либо убрать оператор «ГДЕ» из запроса, либо добавить условие.
Но ошибки могут быть не только в текстах запросов. Допустим, мы хотим выбрать всю номенклатуру и узнать, входит ли она в определенную группу. Проверка происходит с помощью метода «ПринадлежитЭлементу» и его параметра, который должен быть типа СправочникСсылка. Мы опять допускаем ошибку и вместо ссылки в параметр метода помещаем строку, содержащую имя переменной.
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.Ссылка КАК Ссылка,
| Номенклатура.ВерсияДанных КАК ВерсияДанных,
| Номенклатура.ПометкаУдаления КАК ПометкаУдаления,
| Номенклатура.Родитель КАК Родитель,
| Номенклатура.ЭтоГруппа КАК ЭтоГруппа,
| Номенклатура.Код КАК Код,
| Номенклатура.Наименование КАК Наименование,
| Номенклатура.Артикул КАК Артикул,
| Номенклатура.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
| Номенклатура.ТипНоменклатуры КАК ТипНоменклатуры,
| Номенклатура.Предопределенный КАК Предопределенный,
| Номенклатура.ИмяПредопределенныхДанных КАК ИмяПредопределенныхДанных
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| НЕ Номенклатура.ЭтоГруппа ";
НужнаяГруппаЭлементов = Справочники.Номенклатура.НайтиПоНаименованию("Мебель");
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Сообщить(ВыборкаДетальныеЗаписи.Ссылка.ПринадлежитЭлементу("НужнаяГруппаЭлементов"));
КонецЦикла;
1С выдает настолько же информативное сообщение, из которого мы понимаем, что на 158 строке у 1 параметра неправильный тип. Но что же делать, если мы не знаем, какой тип должен быть? В этом нам поможет Синтакс-помощник, встроенный в платформу 1С.
В конфигураторе находим строку и метод, на который указывало сообщение об ошибке, и нажимаем на него правой кнопкой мыши. Выбираем пункт «Поиск в синтакс-помощнике» и платформа самостоятельно ищет справочную информацию по выделенному методу. В справке мы видим не только подробное описание параметров и самого метода, но и пример. Сверив пример с нашим кодом, приходит понимание, что кавычки не нужны и без них все работает.
Чаще всего причиной подобных ошибок выступают следующие факторы:
- Невнимательность;
- Отсутствие опыта или знаний;
- Несогласованность действий разработчиков друг с другом;
- Изменения в методах контекста в новых версиях платформы.
Но ошибки при разработке ПО случаются постоянно, поскольку иногда ошибаются даже специалисты с многолетним опытом. Самое главное – уметь исправлять их и учиться на них. Постепенно вы будете видеть сообщения об ошибках все реже и научитесь замечать подобные «опечатки» еще до запуска 1С.
Обратно к инструкциям
Иногда возникает ситуация, когда журнал звонков перестает загружать новые записи истории звонков из АТС, и в журнале регистрации 1С можно обнаружить следующую ошибки:
Ошибка запуска регламентной задачи: {ОбщийМодуль.МИКО_стЗагрузкаИсторииЗвонков_v7.Модуль}:
Ошибка при вызове метода контекста (ЗаписьЖурналаРегистрации): Недопустимое значение параметра (параметр номер ‘1’)
Решение данной проблемы:
1. Проверьте не заблокировано ли приложение системы лицензирования mlworker.exe службами AppLocker, защитником Windows, любыми другими службами или брандмауэрами.
Расположение приложения:
%USERPROFILE%AppDataLocalMIKObinMIKOmlworker.exe
Приложение устанавливается на сервере 1С:Предприятия.
%USERPROFILE% — директория пользователя, под которым запущена служба «сервер 1С:Предприятия» (rphost).
2. У пользователя, под которым запущена служба Агент сервера 1С:Предприятия, достаточно прав доступа на чтение и запись в директорию %USERPROFILE%AppDataLocalMIKO
3. Попробуйте удалить приложение системы лицензирования mlworker.exe на сервере 1С:Предприятия, предварительно завершив процесс приложения.
4. Удалите содержимое каталога %USERPROFILE%AppDataLocalMIKO.
5. Сбросьте все привязки лицензии от хоста по инструкции.
Обратно к инструкциям
-
Всем привет!
Подскажите, пожалуйста, как решить проблему? У меня БП8.2 актуальный конфиг.
Дело в том, что я пользуюсь процедурой ВыгрузитьЖурналРегистрацииОтбор = Новый Структура("Метаданные", Метаданные.РегламентныеЗадания.Обмен_Логистика8_БИБ82); Задание = РегламентныеЗадания.ПолучитьРегламентныеЗадания(Отбор)[0]; ДатаНач = Задание.ПоследнееЗадание.Начало; ЗаписьЖурналаРегистрации("Обмен.Логистика.Загрузка",УровеньЖурналаРегистрации.Информация, , ,ДатаНач); ДатаКон = Задание.ПоследнееЗадание.Конец; ЗаписьЖурналаРегистрации("Обмен.Логистика.Загрузка",УровеньЖурналаРегистрации.Информация, , ,ДатаКон); Фильтр = Новый Структура("ДатаНачала, ДатаОкончания", ДатаНач, ДатаКон); Журнал = Новый ТаблицаЗначений; ВыгрузитьЖурналРегистрации(Журнал, Фильтр);
Когда вручную запускаю, то все ОК. Когда фоновое задание проходит этот код, то вылезает ошибка:
Ошибка при загрузке файла обмена: ****Logistic8-BIB82-Data_0000000765.xml. {Обработка.ДТ_Обмен_Логистика8_БИБ82.МодульОбъекта(288)}: Ошибка при вызове метода контекста (ВыгрузитьЖурналРегистрации): Недопустимое значение параметра (параметр номер ‘2’)Это как раз второй аргумент процедуры.
Не могу понять в чем дело. В журнал вывожу запись о том что помещается в Фильтр — все ОК — там две даты. Но ошибка все равно есть. Да, фоновое задание пробовал запускать от своего имени. -
Оказалось сам дурак (не удивительно как всегда). Когда запускал через обработку, то фоновое задание бралось предыдущее, а само фоновое задание видит себя, при этом ДатаОкончания не определена еще. И она не заполнялась.
-
Offline
nomad_irk
Гуру в 1С- Регистрация:
- 20 окт 2008
- Сообщения:
- 8.697
- Симпатии:
- 889
- Баллы:
- 204
ну как бы логично
дату окончания более определенно задайте и будет вам Щастье…..
Поделиться этой страницей
Описание проблемы, ошибки, которую надо диагностировать
2.1
Текст типа события – локализуем, при этом всегда задается основной язык конфигурации.
В первом параметре метода глобального контекста ЗаписьЖурналаРегистрации
должен быть НСтр
с заполненными двумя параметрами.
2.3
Текст комментария – локализуем. Для записи в Журнал регистрации информации о возникшем исключении следует использовать конструкцию:
ПодробноеПредставлениеОшибки(ИнформацияОбОшибке())
Если второй параметр метода ЗаписьЖурналаРегистрации
содержит УровеньЖурналаРегистрации.Ошибка
то 5 параметр должен содержать подробное представление ошибки, т.е. не содержать КраткоеПредставлениеОшибки
и ОписаниеОшибки
.
Ссылка на источник, подтверждающее нарушение либо обоснование наличия проблемы
https://its.1c.ru/db/v8std#content:498:hdoc
Параметры диагностики
Тип Статья на русском
- 🐜 Ошибка
- 👮 Уязвимость
- 💩 Качество кода
- Другое
Важность Статья на русском
- 💔 Блокирующая / Blocker
- ❤️ Критическая / Critical
- 💛 Важная / Major
- 💙 Незначительная / Minor
- 💚 Информационная / Info
- 💞 Другое
Тэги Статья на русском
-
STANDARD
— «Нарушение стандартов 1С» -
LOCKINOS
— «Не будет работать в другой ОС» -
SQL
— «Проблема с запросом» -
PERFORMANCE
— «Проблема производительности» -
BRAINOVERLOAD
— «Непонятный код» -
BADPRACTICE
— «Плохая практика программирования» -
CLUMSY
— «Излишние действия» -
DESIGN
— «Ошибка в проектировании» -
SUSPICIOUS
— «Подозрительный код» -
UNPREDICTABLE
— «Непредсказуемо работающий код» -
DEPRECATED
— «Устаревшая функциональность» -
ERROR
— «Ошибочная конструкция»
Время на исправление (минут)
5
Дополнительная информация
Обратно к инструкциям
Иногда возникает ситуация, когда журнал звонков перестает загружать новые записи истории звонков из АТС, и в журнале регистрации 1С можно обнаружить следующую ошибки:
Ошибка запуска регламентной задачи: {ОбщийМодуль.МИКО_стЗагрузкаИсторииЗвонков_v7.Модуль}:
Ошибка при вызове метода контекста (ЗаписьЖурналаРегистрации): Недопустимое значение параметра (параметр номер ‘1’)
Решение данной проблемы:
1. Проверьте не заблокировано ли приложение системы лицензирования mlworker.exe службами AppLocker, защитником Windows, любыми другими службами или брандмауэрами.
Расположение приложения:
%USERPROFILE%AppDataLocalMIKObinMIKOmlworker.exe
Приложение устанавливается на сервере 1С:Предприятия.
%USERPROFILE% — директория пользователя, под которым запущена служба «сервер 1С:Предприятия» (rphost).
2. У пользователя, под которым запущена служба Агент сервера 1С:Предприятия, достаточно прав доступа на чтение и запись в директорию %USERPROFILE%AppDataLocalMIKO
3. Попробуйте удалить приложение системы лицензирования mlworker.exe на сервере 1С:Предприятия, предварительно завершив процесс приложения.
4. Удалите содержимое каталога %USERPROFILE%AppDataLocalMIKO.
5. Сбросьте все привязки лицензии от хоста по инструкции.
Обратно к инструкциям
ЗаписьЖурналаРегистрации |
Я |
10.11.09 — 13:34
Добрый день, ребята кто подскажет что я делаю не так. Из 8 ки по ОЛЕ соединяюсь с 7.7. в 7 ой базе создаю объект. Далее хочу в журнал 7ой базы записать событие создания объякта. Пишу База77.ЗаписьЖурналаРегистрации(«Создан новый объект»,»Refs»,»RefNew»,справочник77,2); справочник77 = База77.CreateObject(«Справочник.Номенклатура»);
1 — 10.11.09 — 13:35
не взлетит.
2 — 10.11.09 — 13:47
ща турбо надув дам и взлетит!
3 — 10.11.09 — 13:52
взлетит, если пнуть с подвывертом )
4 — 10.11.09 — 13:58
EvalExpr и ExecuteBatch еще никто не отменял )))
5 — 10.11.09 — 14:17
Щас протестю
6 — 10.11.09 — 15:10
База77.EvalExpr(«НайденныйОбъект=СоздатьОбъект(«»Справочник.Договоры»»);»)
{(1)}: Ошибка при вызове метода контекста (EvalExpr): Произошла исключительная ситуация (1С:Предприятие): 1 НайденныйОбъект<<?>>=СоздатьОбъект(«Справочник.Договоры»);
Переменная не определена (НайденныйОбъект)
не подскажете почему ругается, синтаксис правильный же
7 — 10.11.09 — 15:12
(6) CreateObject?
8 — 10.11.09 — 15:13
(7) смотри (0) надо взять ссылку на элемент 7 ки и подставить в процедуру регистрации события
9 — 10.11.09 — 15:13
(6) неправильно идею понял
10 — 10.11.09 — 15:14
(9) ммм, да? не подскажешь твою идею?
11 — 10.11.09 — 15:14
(8) ЗначениеИзСтрокиВнутр(ЗначениеВстрокуВнутр())
+ двойные кавычки учесть
12 — 10.11.09 — 15:15
(10) а может напрямую в mlg писать или режим разделенный?
13 — 10.11.09 — 15:16
(11) ну да, тема так можно передать объект. Но я вот выполнил запись в журнал без передачи объекта,и чет в журнал нече не добавилось.
14 — 10.11.09 — 15:16
(12) не напрямую не нужно писать
15 — 10.11.09 — 15:17
(14) жаль. такая идея пропадает
16 — 10.11.09 — 15:22
База77.ExecuteBatch(«ЗаписьЖурналаРегистрации(«»Создан новый объект»»,»»Refs»»,»»RefNew»»,ЗначениеИзСтрокиВнутр(«+База77.ЗначениеВстрокуВнутр(справочник77.ТекущийЭлемент())+»),2);»)
17 — 10.11.09 — 15:23
База77.ExecuteBatch(«ЗаписьЖурналаРегистрации(«»Создан новый объект»»,»»Refs»»,»»RefNew»»,ЗначениеИзСтрокиВнутр(«»»+СтрЗаменить(База77.ЗначениеВстрокуВнутр(справочник77.ТекущийЭлемент(),»»»»,»»»»»»))+»»»),2);»);
или так ))
18 — 10.11.09 — 15:24
ТекущийЭлемент() по оле вроде не летает?
19 — 10.11.09 — 15:29
Кто сказал?
20 — 10.11.09 — 15:29
(18) летает
21 — 10.11.09 — 15:29
напрямую нет, но обернутый летает
22 — 10.11.09 — 15:31
интересно а почему без объекта не записывается событие. в отладке показывает выполнение метода ExecuteBatch истина, а в списке журнала нече не появляется. Все фильтры выставлены по все да и период нормальный..
23 — 10.11.09 — 15:37
(15) эта идея давно реализована, у меня в том числе )
IF_THEN
24 — 10.11.09 — 15:38
в общем просто журнал регистраций настроен так что регистрируе пока только вход и выход))) p.s. на демке тестю
dk спасибо за инфо
невозможно включить использование «Домашней сети», выходит ошибка:
{ОбщийМодуль.ДеньгиВызовСервера.Модуль(246)}: Ошибка при вызове метода контекста (ЗаписьЖурналаРегистрации)
ЗаписьЖурналаРегистрации(КлючЗаписиЖурнала,
по причине:
Недопустимое значение параметра (параметр номер ‘1’)
1С:Предприятие 8.3 (8.3.9.2170)
Деньги 8, редакция 2.0 (2.0.33.4) (http://v8.1c.ru/money)
Copyright © ООО «1С-Софт», 2009-2017. Все права защищены
(http://www.1c.ru)
и еще опечатки:
в таблице «Мобильные устройства» в колонке «Отправлено на устройства»: «Полседняя загрузка»
в таблице «Синхронизация через мобильный сервис» в колонке «Получение»: «Отправелно с устройства …»
Процедура ПрименитьПараметрыУчета(ПараметрыУчета, ИзмененыПараметрыСубконто = Ложь, Отказ = Ложь) Экспорт
ПризнакиУчета = ПолучитьСтруктуруПризнаковУчетаСубконто();
ДействияИзмененияСубконто = ПолучитьДействияИзмененияСубконто(ПараметрыУчета); // Иерархическая коллекция: на первом уровне действия с субконто на каждом из счетов, на втором — действия с призаками учета.
// Сгруппируем изменения по счетам, так как записывать будем именно счет
СчетаКИзменению = ОбщегоНазначения.ВыгрузитьКолонку(ДействияИзмененияСубконто, «Счет», Истина);
ДействияИзмененияСубконто.Индексы.Добавить(«Счет»);
Отбор = Новый Структура(«Счет»);
НачатьТранзакцию();
Для Каждого Счет Из СчетаКИзменению Цикл
Отбор.Счет = Счет;
ДействияДляСчета = ДействияИзмененияСубконто.НайтиСтроки(Отбор);
Объект = Счет.ПолучитьОбъект();
ПротоколИзменений = Новый Массив;
Для Каждого Действие Из ДействияДляСчета Цикл
// Действие: -1 удалить; 0 — не менять; 1 — установить
// Действия с видом субконто
Если Действие.Действие = 1 Тогда
// Добавить субконто
Если Счет = ПланыСчетов.Хозрасчетный.РасчетыСПерсоналомПоОплатеТруда Тогда
ВидыСубконтоСтрока = Объект.ВидыСубконто.Вставить(0);
Иначе
ВидыСубконтоСтрока = Объект.ВидыСубконто.Добавить();
КонецЕсли;
ВидыСубконтоСтрока.ВидСубконто = Действие.Субконто;
ДобавитьВПротоколИзменениеСубконто(ПротоколИзменений, ВидыСубконтоСтрока.ВидСубконто, Действие.Действие);
Иначе
ВидыСубконтоСтрока = Объект.ВидыСубконто.Найти(Действие.Субконто, «ВидСубконто»);
Если ВидыСубконтоСтрока = Неопределено Тогда
Продолжить;
КонецЕсли;
КонецЕсли;
Если Действие.Действие = -1 Тогда
ДобавитьВПротоколИзменениеСубконто(ПротоколИзменений, ВидыСубконтоСтрока.ВидСубконто, Действие.Действие);
Объект.ВидыСубконто.Удалить(ВидыСубконтоСтрока);
Продолжить;
КонецЕсли;
// Действия с признаками учета
Для Каждого ПризнакУчета Из ПризнакиУчета Цикл
ДействиеСПризнаком = Действие[ПризнакУчета.Ключ];
Если ДействиеСПризнаком = 1 Тогда
ЗначениеПризнака = Истина;
ИначеЕсли ДействиеСПризнаком = -1 Тогда
ЗначениеПризнака = Ложь;
Иначе
Продолжить;
КонецЕсли;
Если ВидыСубконтоСтрока[ПризнакУчета.Ключ] = ЗначениеПризнака Тогда
Продолжить;
КонецЕсли;
ВидыСубконтоСтрока[ПризнакУчета.Ключ] = ЗначениеПризнака;
ДобавитьВПротоколИзменениеПризнакаУчета(
ПротоколИзменений,
ВидыСубконтоСтрока.ВидСубконто,
ПризнакУчета.Значение,
ДействиеСПризнаком);
КонецЦикла; // По признакам учета
КонецЦикла; // По ДействияДляСчета
Если Не Объект.Модифицированность() Тогда
Продолжить;
КонецЕсли;
ПротоколИзмененийСтрокой = СтрСоединить(ПротоколИзменений, Символы.ПС);
Попытка
Объект.Записать();//ВОТ ТУТ ВАЛИТСЯ
Исключение
ОписаниеОшибки = ИнформацияОбОшибке();
ОтменитьТранзакцию();
Отказ = Истина;
ШаблонТекста = НСтр(«ru = ‘Ошибка при записи счета [КодСчета]:
|[ОписаниеОшибки]
|Ошибка произошла при попытке выполнить следующие изменения:
|[ПротоколИзменений]'»);
ПараметрыТекста = Новый Структура;
ПараметрыТекста.Вставить(«КодСчета», Объект.Код);
ПараметрыТекста.Вставить(«ПротоколИзменений», ПротоколИзмененийСтрокой);
// В журнал регистрации выведем подробную информацию
ПараметрыТекста.Вставить(«ОписаниеОшибки», ПодробноеПредставлениеОшибки(ОписаниеОшибки));
Текст = СтроковыеФункцииКлиентСервер.ВставитьПараметрыВСтроку(ШаблонТекста, ПараметрыТекста);
ЗаписьЖурналаРегистрации(
СобытиеЖурналаРегистрацииПараметрыУчета(),
УровеньЖурналаРегистрации.Ошибка,
Счет.Метаданные(),
Счет, // Данные
Текст);
// Пользователю выведем краткое сообщение
ШаблонТекста = НСтр(«ru = ‘Ошибка при записи счета [КодСчета]
|Подробности см. в Журнале регистрации.'»);
Текст = СтроковыеФункцииКлиентСервер.ВставитьПараметрыВСтроку(ШаблонТекста, ПараметрыТекста);
ОбщегоНазначенияКлиентСервер.СообщитьПользователю(Текст);
Возврат;
КонецПопытки;
// Запишем в журнал регистрации подробную информацию об изменениях
ЗаписьЖурналаРегистрации(
СобытиеЖурналаРегистрацииПараметрыУчета(),
УровеньЖурналаРегистрации.Информация,
Счет.Метаданные(),
Счет,
ПротоколИзмененийСтрокой,
РежимТранзакцииЗаписиЖурналаРегистрации.Транзакционная);
КонецЦикла; // По СчетаКИзменению
БухгалтерскийУчетПереопределяемый.УстановитьПараметрыУчетаРасчетовПоЗарплате(?(ПараметрыУчета.ВестиУчетПоРаботникам = 1, Ложь, Истина));
БухгалтерскийУчетПереопределяемый.УстановитьУчетЗарплатыИКадровВоВнешнейПрограмме(?(ПараметрыУчета.УчетЗарплатыИКадровВоВнешнейПрограмме = 1, Истина, Ложь));
БухгалтерскийУчетПереопределяемый.УстановитьНастройкиКадровогоУчета(ПараметрыУчета.КадровыйУчет, ?(ПараметрыУчета.УчетЗарплатыИКадровВоВнешнейПрограмме = 0, Истина, Ложь));
ЗафиксироватьТранзакцию();
ОбновитьПовторноИспользуемыеЗначения();
КонецПроцедуры