|
|||
| Alex_MA
28.05.10 — 09:17 |
Доброе утро уважаемые коллеги! РИБ. В логах обмена в рег. сведений пишет: Ошибка при вызове метода контекста (ЗакончитьЗапись): Операция не может быть выполнена из-за несоответствия версии или отсутствия записи базы данных (возможно, запись была изменена или удалена)!
Техническая информация:
Это с чем конкретно связано ? Кто нибудь встречался ? |
||
| mikecool
1 — 28.05.10 — 09:18 |
а) кто то изменил объект в тот момент, когда он загружался |
||
| Alex_MA
2 — 28.05.10 — 09:22 |
(1)спасибо |
||
| Alex_MA
3 — 28.05.10 — 09:41 |
А как автоматически отключить и включить службу Агент сервера 1С Предприятия ? |
||
| Лефмихалыч
4 — 28.05.10 — 09:44 |
(3) может у тебя не во всех ПриЗаписи() есть ? |
||
| Serg_1960
5 — 28.05.10 — 09:49 |
(0) «т.е. проблема не в обмене, а в каком то объекте скорее всего» — возможно. возможно Вы «не удачно» внесли изменений в модуль какого-либо объекта. Например: в процедуре есть команды «промежуточной» записи объекта. |
||
| Alex_MA
6 — 28.05.10 — 09:57 |
(5)нет, промежуточную запись не практикую, может если кто то до меня… |
||
| Alex_MA
7 — 28.05.10 — 09:59 |
(4)проблема в выгрузке. При выгрузке, Объект вряд ли записывается |
||
| Serg_1960
8 — 28.05.10 — 09:59 |
(6) Нет. Если у пользователя открыт документ и это-же документ был изменён обменом — то пользователь, при попытки записи документа, получит сообщение из (0) |
||
| Alex_MA
9 — 28.05.10 — 10:02 |
(8)а(3)может помочь ? |
||
| mikecool
10 — 28.05.10 — 10:02 |
(8) а если усер открыл его раньше и успел нажать записать перед записью в обмене? |
||
| Serg_1960
11 — 28.05.10 — 10:04 |
А смысл? Вот если-бы были сообщения о блокировке… |
||
| Serg_1960
12 — 28.05.10 — 10:06 |
(10) Как это? За долю секунды открыл, исправил и записал? |
||
| Serg_1960
13 — 28.05.10 — 10:10 |
Может быть у тебя регламентные задания изменяют объекты во время обмена? Проверь расписание рег.заданий и обмена. Если совпадают — разведи их по времени. |
||
|
Alex_MA 14 — 28.05.10 — 10:46 |
Ладно, попробую ваши рекомендации. Всем спасибо за помощь. |
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку «Обновить» в браузере.
Ветка сдана в архив. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Доброе утро уважаемые коллеги! РИБ. В логах обмена в рег. сведений пишет: Ошибка при вызове метода контекста (ЗакончитьЗапись): Операция не может быть выполнена из-за несоответствия версии или отсутствия записи базы данных (возможно, запись была изменена или удалена)! Техническая информация: {ОбщийМодуль.ПроцедурыОбменаДанными(1549)}: Ошибка при вызове метода контекста (ЗакончитьЗапись): Операция не может быть выполнена из-за несоответствия версии или отсутствия записи базы данных (возможно, запись была изменена или удалена)! Это с чем конкретно связано ? Кто нибудь встречался ? Спасибо за внимание. За ответы и советы премного балгодарен.
а) кто то изменил объект в тот момент, когда он загружался б) объект не был записан, где то прошел отказ
спасибо т.е. проблема не в обмене, а в каком то объекте скорее всего
А как автоматически отключить и включить службу Агент сервера 1С Предприятия ?
может у тебя не во всех ПриЗаписи есть Если ОбменДанными.Загрузка Тогда ?
«т.е. проблема не в обмене, а в каком то объекте скорее всего» — возможно. возможно Вы «не удачно» внесли изменений в модуль какого-либо объекта. Например: в процедуре есть команды «промежуточной» записи объекта.
нет, промежуточную запись не практикую, может если кто то до меня… а может такое случиться, если открытка форма какого либо документа, который зарегистр. для обмена ?
проблема в выгрузке. При выгрузке, Объект вряд ли записывается
Нет. Если у пользователя открыт документ и это-же документ был изменён обменом — то пользователь, при попытки записи документа, получит сообщение из
а если усер открыл его раньше и успел нажать записать перед записью в обмене?
А смысл? Вот если-бы были сообщения о блокировке…
Как это? За долю секунды открыл, исправил и записал?
Может быть у тебя регламентные задания изменяют объекты во время обмена? Проверь расписание рег.заданий и обмена. Если совпадают — разведи их по времени.
Ладно, попробую ваши рекомендации. Всем спасибо за помощь.
Тэги:
Комментарии доступны только авторизированным пользователям
В платформе 1С сообщения об ошибках бывают достаточно запутаны, и без должных навыков разобраться в причинах достаточно сложно. Вот и сообщение об ошибке при вызове контекста может ввести в ступор начинающего разработчика. Однако в подавляющем большинстве случаев мы видим подобное сообщение, если разработчик допустил ошибку в своем коде. Причем речь зачастую идет не об орфографических ошибках, а о логических.
Исправляем ситуацию
Чтобы избавиться от этого неприятного сообщения об ошибке при вызове метода контекста, следует понимать, что контекстом называют методы платформы 1С. Значит в определенной строке кода воспользовались методом с неверными параметрами или вызвали его не от того владельца. Всегда внимательно и полностью читайте сообщения об ошибках – часто в них содержится указание на строку и метод, вызвавший ошибку. Это поможет сэкономить время на отладку и поиск проблемного места в коде.
Рассмотрим действия разработчика на примере со специально допущенной ошибкой. Мы запускаем на исполнение нижеприведенный кусок кода с запросом, в котором забыли дописать условие отбора. Компилятор 1С пропускает такую процедуру, так как орфографических ошибок в написании команд мы не допустили. Однако в режиме предприятия нас ждет такое сообщение об ошибке:
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.Ссылка КАК Ссылка,
| Номенклатура.ВерсияДанных КАК ВерсияДанных,
| Номенклатура.ПометкаУдаления КАК ПометкаУдаления,
| Номенклатура.Родитель КАК Родитель,
| Номенклатура.ЭтоГруппа КАК ЭтоГруппа,
| Номенклатура.Код КАК Код,
| Номенклатура.Наименование КАК Наименование,
| Номенклатура.Артикул КАК Артикул,
| Номенклатура.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
| Номенклатура.ТипНоменклатуры КАК ТипНоменклатуры,
| Номенклатура.Предопределенный КАК Предопределенный,
| Номенклатура.ИмяПредопределенныхДанных КАК ИмяПредопределенныхДанных
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| ";
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
КонецЦикла;

Приведенный текст ошибки программисту 1С скажет, что в модуле формы обработки «ЧтениеЗаписьXML на 152 строчке кода не может выполниться запрос. Причина в том, что на 17 строчке запроса нет чего-то, что ждал компилятор. Таким образом, чтобы убрать подобное сообщение, необходимо выяснить, что там должно быть и написать недостающий код.
Увидев вышеприведенный кусок кода, разработчик заметит, что в запросе есть служебное слово «ГДЕ», дающее сигнал 1С, что дальше будет условие. Но мы забыли дописать его и, естественно, система с помощью сообщения об ошибке спрашивает нас – «а где условие?». Чтобы исправить эту ситуацию необходимо либо убрать оператор «ГДЕ» из запроса, либо добавить условие.
Но ошибки могут быть не только в текстах запросов. Допустим, мы хотим выбрать всю номенклатуру и узнать, входит ли она в определенную группу. Проверка происходит с помощью метода «ПринадлежитЭлементу» и его параметра, который должен быть типа СправочникСсылка. Мы опять допускаем ошибку и вместо ссылки в параметр метода помещаем строку, содержащую имя переменной.
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Номенклатура.Ссылка КАК Ссылка,
| Номенклатура.ВерсияДанных КАК ВерсияДанных,
| Номенклатура.ПометкаУдаления КАК ПометкаУдаления,
| Номенклатура.Родитель КАК Родитель,
| Номенклатура.ЭтоГруппа КАК ЭтоГруппа,
| Номенклатура.Код КАК Код,
| Номенклатура.Наименование КАК Наименование,
| Номенклатура.Артикул КАК Артикул,
| Номенклатура.ЕдиницаИзмерения КАК ЕдиницаИзмерения,
| Номенклатура.ТипНоменклатуры КАК ТипНоменклатуры,
| Номенклатура.Предопределенный КАК Предопределенный,
| Номенклатура.ИмяПредопределенныхДанных КАК ИмяПредопределенныхДанных
|ИЗ
| Справочник.Номенклатура КАК Номенклатура
|ГДЕ
| НЕ Номенклатура.ЭтоГруппа ";
НужнаяГруппаЭлементов = Справочники.Номенклатура.НайтиПоНаименованию("Мебель");
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Сообщить(ВыборкаДетальныеЗаписи.Ссылка.ПринадлежитЭлементу("НужнаяГруппаЭлементов"));
КонецЦикла;

1С выдает настолько же информативное сообщение, из которого мы понимаем, что на 158 строке у 1 параметра неправильный тип. Но что же делать, если мы не знаем, какой тип должен быть? В этом нам поможет Синтакс-помощник, встроенный в платформу 1С.

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

Чаще всего причиной подобных ошибок выступают следующие факторы:
- Невнимательность;
- Отсутствие опыта или знаний;
- Несогласованность действий разработчиков друг с другом;
- Изменения в методах контекста в новых версиях платформы.
Но ошибки при разработке ПО случаются постоянно, поскольку иногда ошибаются даже специалисты с многолетним опытом. Самое главное – уметь исправлять их и учиться на них. Постепенно вы будете видеть сообщения об ошибках все реже и научитесь замечать подобные «опечатки» еще до запуска 1С.
-
Имеется один розничный магазин с установленной УТ 10.3 и мой ноутбук. Настроил полный обмен с ноутбуком, центральная база получилась магазинская.
1. В моей базе сейчас невозможно ничего изменить в конфигураторе (в магазине не проверял). это так и должно быть? Что делать, если я захочу подправить конфу?
2. Хочу поставить розницу во второй магазин. Если я настрою обмен розницы во втором магазине с УТ, которая на моем ноутбуке, т.е. не центральная, то ничего в этом страшного не будет? никаких последствий не ожидается?
3. Хочу дублировать базу свою на второй рабочий компьютер. Так чтобы в любое время с обоих компьютеров мог получить доступ к информации. Но тут возникает проблема. Если я поставлю префикс базы (в базе на ноутбуке нету его), то не смогу создавать документы с обеих баз, т.к. нумерация всех документов собьется и будет повторяться постоянно. Как быть в этой ситуации?
4. В настроенном обмене между первыми двумя базами установил обмен по событиям (закрытие и открытие), в обмене указал «выполнять под полными правами». Но автоматический обмен не проходит, пишет:Ошибка при записи изменений при обмене: Ошибка при вызове метода контекста (ЗакончитьЗапись): Ошибка при выполнении обработчика - 'ПередЗаписью': {ОбщийМодуль.ОбщегоНазначения.Модуль(2099)}: Ошибка при вызове метода контекста (ПолучитьСоединенияИнформационнойБазы): Пользователю недостаточно прав для выполнения операции.Хотя при запуске того же обмена тем же пользователем вручную, все проходит успешно, что не так делаю?
-
Offline
shurikvz
Модераторы
Команда форума
Модератор- Регистрация:
- 1 окт 2009
- Сообщения:
- 8.261
- Симпатии:
- 294
- Баллы:
- 104
Все правильно, так и должно быть. Изменения в конфигурацию вносятся ТОЛЬКО в центральной базе, затем при обмене они мигрируют в узлы РИБ.Ну для того и созданы префиксы ИБ, чтобы в каждом узле базы была своя нумерация, и не было коллизий при обмене.А автоматический обмен — от какого пользователя установлен?
-
Дело в том что документы у меня создаются и в той и в той базе, только в магазине — все что касается продаж, а у меня все ведение учета и взаиморасчетов. А точему только в центральной, как тогда организовать обмен между двумя работающими параллельно базами? Вроде бы так тоже обменивается.
Это то я понимаю, но я говорю про ту нумерацию, которая потом встает в табличных документах, и как то неправильно будет что я буду приносить допустим в банк две разные платежки с одним номером, да и всякие приходники, расходники, счета.
В автоматическом обмене настроен обмен и от администратора и от продавца (роль созданна копированием другой, уже не помню какой, и изменена), дак вот от администратора обмен и автоматом и вручную проходит нормально, а вот от продавца вручную обменивает, а автоматом нет.
Заранее спасибо за помощь. -
Че то я тупанул, вопрос был изначально про конфу, а я что-то на документы переключился. Вопрост тогда такой, если я буду менять конфигурацию центральной базы, то изменения конфигурации перенесутся в подчиненную базу?
И по поводу остальных вопросов может быть что-нибудь подскажете? -
С первыми двумя вопросами разобрался, поменял базы местами, в итоге теперь моя центральная.
Интересует ответ на третий вопрос. Дело в том что я в разных ситуациях могу использовать разные компы, но мне бы хотелось чтобы нумерация документов (платежки, приходники, расходники) не пострадала от этого. Возможно ли это как то сделать? Я имею в виду не ту нумерацию, которая в базе 1с а ту которая в табличных документах, хотелось бы чтобы они не перескались.
Как вариант подумал не устанавливать префиксы в обоих базах. Если я так сделаю то думаю будет все работать, если только следить чтобы не создавались документы до совершения обмена в каждой базе. И чем может это грозить если все таки случайно создадутся документы под одними номерами в базах?
По поводу четвертого вопроса. В конфигурации Розница нормально проходит автоматический обмен из под пользователей, а в УТ так и не хочет, но вручную все в порядке, может все-таки есть соображения по этому поводу?
Поделиться этой страницей
1) у меня сейчас получается, что данные из самописной выгружаются и в упп загружаются, но файл обмена не чистится и номера сообщения сейчас:
В самописной: номер отправленного 4 номер принятого 0
В УПП: номер отправленного 0 номер принятого 4
То есть после загрузки он не отправляет сообщение, что загрузил их
Макет с пустыми правилами обмена создал. Cценарии синхроинзации данных тоже не помогают.
2) Попытался сделать настройку в УПП через прочий обмен. Выгрузка квитанции происходит, но загрузка не идет по нему. падает на
Ошибка при загрузке данных: {Обработка.ОбменДаннымиXML.МодульОбъекта(5898)}: Ошибка при вызове метода контекста (Свойство): Задано неправильное имя атрибута структуры
Для Каждого ЭлементПоиска Из ДанныеПоискаПоТЧ.ПоляПоискаТЧ Цикл
ЗначениеЭлемента = Неопределено;
СтруктураЧтенияСвойств.Свойство(ЭлементПоиска, ЗначениеЭлемента);
СтруктураПоиска.Вставить(ЭлементПоиска, ЗначениеЭлемента);
КонецЦикла;
Падает, когда элемент поиска равен “”ИндексСтрокиТаблицы,КоличествоПлан,КоличествоФакт,Номенклатура,НужнаСФ” это колонки табличной части
Почему то Правило.ПоискПоТабличнымЧастям[1].ПоляПоискаТЧ разбивает на две строки в первой Колонка1, а во второй все остальное. Получается это из правил идет?
я добавил попытка исключение конец попытки и обмен прошел, номера сообщения меняются, но регистрация так и остается в самописной то есть файл не очищается .
в сампоиснйо конфе в обработке КонвертацияОбъектовИнформационныхБаз в процедуре ПрочитатьДанныеПоОбмену есть строка
УдалитьРегистрациюИзменений = одАтрибут(ФайлОбмена, ТипБулево, «УдалитьРегистрациюИзменений»);
Получается в файле из упп должен придти удаление регистрации изменений, но он у нас пустой. в каком месте мне снять регистрацию?
я попробовал в этой процедуре для своего узла удалять регистрацию и вроде все заработало, но не знаю на сколько это правильно
Если РежимЗагрузкиДанныхВИнформационнуюБазу() Тогда
НачатьТранзакцию();
НомерПринятого = ОбщегоНазначения.ЗначениеРеквизитаОбъекта(ЧтениеСообщения.Отправитель, «НомерПринятого»);
ЗафиксироватьТранзакцию();
Если НомерПринятого >= ЧтениеСообщения.НомерСообщения Тогда // Номер сообщения меньше либо равен ранее принятому
ЧтениеСообщенияВременное = ОбщегоНазначенияКлиентСервер.СкопироватьСтруктуру(ЧтениеСообщения);
ЧтениеСообщенияВременное.СообщениеБылоПринятоРанее = Истина;
ЧтениеСообщения = Новый ФиксированнаяСтруктура(ЧтениеСообщенияВременное);
ВызватьИсключение НСтр(«ru = ‘Сообщение обмена было принято ранее'»);
КонецЕсли;
УдалитьРегистрациюИзменений = УдалитьРегистрациюИзменений И Не ВосстановленаРезервнаяКопия;
//++РС
ЕСли УзелОбменаПолучатель.Код = «ГУ» Тогда
УдалитьРегистрациюИзменений=Истина;
КонецЕсли;
//—