Ошибка при вызове метода контекста записать зацикливание уровней

Помогите, пожалуйста, как решить ошибку в коде

Ошибка «Ошибка  {ОбщийМодуль.Румба(448)}: Ошибка при вызове метода контекста (Записать): Зацикливание уровней!»

код

Функция ПолучитьКонтрагента(КонтрагентИмя, Гостиница=»»)

   Если ПустаяСтрока(КонтрагентИмя) Тогда

       Возврат Справочники.Контрагенты.ПустаяСсылка();

   КонецЕсли;

   Контрагент = Справочники.Контрагенты.НайтиПоНаименованию(КонтрагентИмя);

   Если Контрагент.Пустая() Тогда

       КонтрагентОбъект = Справочники.Контрагенты.СоздатьЭлемент();

   Иначе

       КонтрагентОбъект = Контрагент.ПолучитьОбъект();

   КонецЕсли;

   Если НЕ ПустаяСтрока(Гостиница) Тогда

       ГрК = Справочники.Контрагенты.НайтиПоНаименованию(Гостиница);

       Если ГрК.Пустая() ИЛИ НЕ ГрК.ЭтоГруппа Тогда

           ГрК = Справочники.Контрагенты.СоздатьГруппу();

           ГрК.Наименование = Гостиница;

           ГрК.Записать();

       КонецЕсли;

   Иначе

       ГрК = Справочники.Контрагенты.ПустаяСсылка();

   КонецЕсли;

   КонтрагентОбъект.Родитель = ГрК.Ссылка;

   КонтрагентОбъект.Наименование = КонтрагентИмя;

   КонтрагентОбъект.Записать();

   Возврат КонтрагентОбъект.Ссылка;

КонецФункции

Помогите, пожалуйста, как решить ошибку в коде Ошибка «Ошибка  {ОбщийМодуль.Румба}: Ошибка при вызове метода контекста (Записать): Зацикливание уровней!» код

Что за Мумба писала эту Румбу?

контрагент которого находишь при ошибке не группа случаем? ну а вообще такая ошибка выскакивает когда у элемента справочника делаешь родителем подчиненный ему элемент

все работает нормально, пока не попадается НаименованиеКонтрагента= НаименованиеОрганизации=НаименованиеГруппы, т.е допустим: НаименованиеКонтрагента=РогаИКопыта НаименованиеОрганизации=РогаИКопыта НаименованиеГруппы=РогаИКопыта

думаю еще из за того, что на одном уровне создано 3 группы с одинаковым наименованием

Родитель указан сам элемент или подчиненный.

Тэги:

Комментарии доступны только авторизированным пользователям

Помогите, пожалуйста, как решить ошибку в коде

Ошибка «Ошибка  {ОбщийМодуль.Румба(448)}: Ошибка при вызове метода контекста (Записать): Зацикливание уровней!»

код

Функция ПолучитьКонтрагента(КонтрагентИмя, Гостиница=»»)

   Если ПустаяСтрока(КонтрагентИмя) Тогда

       Возврат Справочники.Контрагенты.ПустаяСсылка();

   КонецЕсли;

   Контрагент = Справочники.Контрагенты.НайтиПоНаименованию(КонтрагентИмя);

   Если Контрагент.Пустая() Тогда

       КонтрагентОбъект = Справочники.Контрагенты.СоздатьЭлемент();

   Иначе

       КонтрагентОбъект = Контрагент.ПолучитьОбъект();

   КонецЕсли;

   Если НЕ ПустаяСтрока(Гостиница) Тогда

       ГрК = Справочники.Контрагенты.НайтиПоНаименованию(Гостиница);

       Если ГрК.Пустая() ИЛИ НЕ ГрК.ЭтоГруппа Тогда

           ГрК = Справочники.Контрагенты.СоздатьГруппу();

           ГрК.Наименование = Гостиница;

           ГрК.Записать();

       КонецЕсли;

   Иначе

       ГрК = Справочники.Контрагенты.ПустаяСсылка();

   КонецЕсли;

   КонтрагентОбъект.Родитель = ГрК.Ссылка;

   КонтрагентОбъект.Наименование = КонтрагентИмя;

   КонтрагентОбъект.Записать();

   Возврат КонтрагентОбъект.Ссылка;

КонецФункции

Такая проблема, как Ошибка формата потока, в 1С 8.3 встречается достаточно часто. Рассмотрим, как исправить данную ошибку.

Такое происходит в следующих ситуациях:

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

Получите 267 видеоуроков по 1С бесплатно:

Исправление

  1. Как правило, для решения данной проблемы достаточно почистить временные файлы в системе. .
  2. Если не помогло, но есть возможность попасть в конфигуратор, запустите .
  3. Если доступа в конфигуратор нет, и база тестовая — воспользуйтесь , которая располагается в папке программы.
  4. Если вышеперечисленные методы не помогают, но запускается режим 1С предприятие, выгрузите данные в новую базу с помощью обработки « «. Однако при этом возможны потери данных.
  5. Обновление
    . Еще одной причиной может стать наличие активных сеансов пользователей с разной версией клиентской части платформы 1С. То есть, например, в базе работает пользователь с платформой 1С 8.3.5.1517, а пытается подключиться другой, с версией 8.3.5.1444.

Если это не помогло — есть более изощренные способы решения данной проблемы. Например, с помощью HEX-редактора. Если Вам необходима квалифицированная помощь программистов 1С, обратитесь к нам! Подробности на странице

Эта внешняя обработка выполняет проверку иерархической структуры справочников на предмет «зацикливания»,
то есть ситуаций, когда родитель группы ссылается на саму себя или на одну из подчиненных групп нижнего уровня.

Результат работы — печатная форма таблицы, с колонками в виде «Код», «Наименование», «Внутреннее представление»
зацикленных групп, а также их родителей:) и колонки для составления схемы подчиненности зацикленных групп.
В печатную форму выводятся только группы, участвующие в замкнутых циклах подчиненности, например:
A=>A ; A=>B=>A ; A=>B=>C=>A. (A=>B означает, что B является родителем A). Правильные «ветки» подчиненности,
подсоединенные к циклам, например, «ветка» «D» : D=>A=>B=>A из выборки исключаются.

Чтобы исправить замкнутую подчиненность, достаточно разорвать цепочку групп в одном месте — у одной из групп
очистить реквизит «Родитель». Программа анализирует и рекомендует для этих целей использовать: а) группы, которые
раньше других созданы (соответсвенно, должны иметь по логике более высокий уровень); б) группы, наиболее
удаленные от элементов (справедливо для справочников, где элементы всегда расположены последними по иерархии).
Цепочки замкнутых групп в отчете разделены пустыми строками. Для очистки родителя одной из групп цепочки нужно нажать
клавишу Enter / кликнуть мышкой на ячейке в строке с исправляемой группой, в колонке «Очистить!!!» .

В прикрепленных файлах — архив с внешним отчетом и архив пример информационной базы с зацикленным справочником

для демонстрации работы отчета.

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

// УстРодитель — устанавливаемый родитель для группы справочника

// Спр — переменная, для записи объекта справочника

=
0
;

=
0
;

ПровРодитель
=
УстРодитель
;

СЗ
= СоздатьОбъект(«СписокЗначений
»
);

Пока ПустоеЗначение(ПровРодитель
) = 0
Цикл

Если ПровРодитель
= Спр
.ТекущийЭлемент
() Тогда

ПопыткаЗаписиЦиклическойСсылки
= 1
;

Прервать;

КонецЕсли;

Если СЗ
.НайтиЗначение
(ПровРодитель
) > 0
Тогда

ПопыткаЗаписиПринадлежностиКЦиклу
= 1
;

Прервать;

КонецЕсли;

СЗ
.ДобавитьЗначение
(ПровРодитель
);

ПровРодитель
= ПровРодитель
.Родитель
;

КонецЦикла;

Если (ПопыткаЗаписиЦиклическойСсылки
= 0)

И

(ПопыткаЗаписиПринадлежностиКЦиклу
= 0
) Тогда

Спр

Родитель
=
УстРодитель
;

Спр
.
Записать
();

КонецЕсли;

Одной из самых неприятнейших встречающихся ошибок при работе с 1С 8.3 или 8.2 является «Ошибка формата потока». Причин ее появления может быть множество и их не всегда легко установить. При этом окно уведомления об ошибке далеко не эталон информативности.

Первым делом попробуйте подумать над тем, что же всё-таки могло привести к данной неполадке.

Наиболее распространенные причины

Самой распространенной причиной ошибки формата потока является неправильная обработка кэша программой 1С 8. Вспомните, не было ли перебоев электропитания до ее возникновения, обновления конфигурации? Корректно ли был завершен сеанс работы пользователя? Зачастую в таком случае ошибка формата потока будет возникать не на всех компьютерах. Проблемы лучше предупреждать, чем потом исправлять, поэтому рекомендуется использовать источники бесперебойного питания на компьютерах.

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

Как исправить ошибку формата потока

  1. Первым делом попробуйте . Если на одном компьютере программа работает нормально, а на другом появляется ошибка формата потока, то, скорее всего этот способ именно для вас.
  2. В том случае, если очистка кэша не помогла, попробуйте открыть информационную базу в режиме конфигуратора и запустите .
  3. Если вам не удалось зайти в конфигуратор, но база файловая – воспользуйтесь ChDBFl.exe. Данная утилита является аналогом тестирования и исправления ошибок в конфигураторе, но более простым.
  4. Убедитесь, что все текущие пользователи данной информационной базы используют одинаковую версию платформы. Если версии различаются, то установите всем актуальные.
  5. Если 1С запускается в режиме «Предприятие», то выгрузите все данные при помощи универсальной выгрузки/загрузки в новую базу.
  6. Отключите, а при необходимости удалите все фаерволы и антивирусы.
  7. Если данная информационная база клиент – серверная, то проверьте, хватает ли дискового пространства на сервере в папке для хранения временных данных.
  8. Удалите платформу 1С (через панель управления) и установите заново.
  9. Если информационная база открывается в конфигураторе, попробуйте выгрузить ее в файл *.dt и загрузить в пустую.
  10. Воспользоваться HEX-редактором, заменив содержимое чистой базы содержимым той, в которой произошла ошибка.

Если все эти способы вам не помогли, что маловероятно, то тут только бубен в помощь или квалифицированный специалист.

Подскажите как можно избавиться от зацикливания уровней справочника.

никто не сталкивался с этой проблемой ? Тестирование и исправление помогает или нет ?

Это как? Зацикливание уровней. Поясни…..

запустил тестирование пишет зацикливание уровней элемента номенклатуры и повисло помойму

зацикливание возникает например когда родитель элемента тот же самый элемент в иерархических справочниках

можно сделать справочник вообще без иерархии

почему то всегда считал, что это проверяется платформой при записи… при переносе в другую группу и т.д.

ну может косяк какой вышел :)

Сам не понимаю из-за чего это возникло, может проблема возникла из-за обмена через распределенную базу.

Пытался дома насильственно сломать базу (зациклить уровни) не дает !!!

Справочник номенклатура похоже ругается на группу товары. Визуально этой папки вообще не видно

При выборе элементов у которых родитель товары 1с виснет.

В консоле отчета выполни ВЫБРАТЬ    Номенклатура.Ссылка ИЗ    Справочник.Номенклатура КАК Номенклатура

это только выберет а как исправить

у меня сейчас нету этой базы она на работе, не факт что она именно так зациклилась может и подругому как нибудь

после этого попробуй получить каждый элемент как элемент, вписать родителя и записать.

делаешь копию, потом в конфигураторе убираешь иерархию, потом по com-у востанавливаешь нормальные ветки

Йа в шоке. Берем скуль. Счаст даже запрос приведу..

логично это попробую обязательно. Я боюсь что не получиться. Повиснет наверно 1с-ка. У кого нибудь была такая проблема или нет ?

Такая проблема была при переносе из 7.7. Лечилось + обработку написал за 5 минут по очистке родителей таких.

Теперь база даже не выгружается пишет ошибку

Может и у меня это из 7 прилетело ?

и помогла очистка родителей ?

отлично тогда с этого и начну. Спасибо за подсказку. А то я хотел снова пробовать запускать тестирование и исправление.

Мне даже интересно стало. Счаст с сервером приложений справлюсь и скажу, кто тут главный дятел..

ну так 27 и есть главный …. дятел… или очистка (элементы слетят в корень) или запись туда выбранного родителя — вполне исправят ситуацию

завтра проверим исправят ситуацию или будут вешать 1с.

Ты иди, на акул охоться.. Смешной ты человече..

команды миздеть не было….

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

у меня беда, а вы все шутки шутите !!!!!!!!!!!!

наверно запрос будет примерно такой:    Номенклатура.Ссылка ИЗ только есть у меня сомнение, что удасть переписать такие элементы, хотя попробовать стоит

+ вот это «(Номенклатура.Родитель = Номенклатура.Ссылка) и » — лишнее

А если зацикливание «через уровень» идет? :) З.Ы. Платформа такие вещи дает записать «на раз»: Объект.ОбменДаными.Загрузка = Истина и не такие чудеса творит.

если через уровень? в 34 тогда правильней условие такое «(Номенклатура.Родитель.Уровень+1) >= Номенклатура.Уровень»

такой запрос работать не будет. Скажет поле не найдено Номенклатура.Родитель.Уровень

може и не будет, не знаю, но вообще я от зацикливания справочников (правда по реквизиту в ТЧ) боролся :) и обычно оно гдето через 2-3 уровня появляеться

Щас смоделировал эту хрень. Можно перезаписать.. Предварительно выбрав запросом в .

И как получилось побороть ? Почему сомнения что удасться побороть такие элементы ? И как тогда бороться если не даст их перезаписать ?

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

если не даст переписать, то или прямым запросом (но восьмерку я прямыми не ковырял), или попробовать через загрузку, или .

Была такая хрень — неправильно перенес справочники из 7.7, вот и закольцевал группы номенклатуиы — хорошо хоть сразу обработку написал,если надо могу скинуть

«…………….З.Ы. Платформа такие вещи дает записать «на раз»: Объект.ОбменДаными.Загрузка = Истина и не такие чудеса творит.» Выходит, что платформа — гавно, причем гавно большое….

Тебя послушать, так выходит что «format c:» — самое большое «зло». И того кто «это» придумал — повесить мало…

Я сталкивался с «зацикливанием» — не так все просто :( — одним запросом не отделаешься :( И группы «зацикливаются» через один-два-несколько уровней, — и номенклатура может оказаться «родителем»… Как ловить тогда все «кольца»? Имхо: в цикле для каждой номенклатуры перебираем родителей с подсчетом их количества и запоминаем в списке значений. Как только количество родителей и количество в списке перестанет быть равным — список пользователю показать — пусть сам решает где надо рвать «кольцо». Перебор, конечно, не самое лучшее решение. Но это лучше, чем пытать составить «красивое» решение исходя из представления «а как это может быть»…

Петя, ты в снеговике много работал? :) Вообще, такое «зацикливание», ИМХО — проблема логики, а не платформы.

Присоединюсь — это логика, а не платформа

Тэги:

Комментарии доступны только авторизированным пользователям

Цитата tormozit ()

Опиши конкретную ситуацию для оценки вероятности ее повторения.

Так я вроде описал :-)
«Типовой» ЗУП 2.5 в котором (ну так получилось исторически) полный бардак в Справочнике ПодразделенияОрганизаций (хотя не только в нём), т.е. есть куча «двойников» в элементах справочников подразделения (причем часть сотрудников числится в одном «близнеце», а часть в другом). Причем есть ещё и «вложенность», ну типа в филеале есть подразделение «Руководство», которому подчинёно подразделение «Руководство».
Итак, имеем элементы справочника Руководство_001, у которого в качестве родителя есть элемент справочника Руководство_002
Запускаем твою обработку (кстати, классная обработка и большое тебе за это спасибо) чтобы заменить ненужное Руководство на «единое и правильное». К сожалению получаем, что у элемента Руководство он сам у себя является родителем.
И конфа начинает сходить с ума, например при записи элемента справочника  Подразделение_НьюВасюки, влетает в бесконечный цикл в функции

// Возвращает выборку со значениями реквизитов переданной ссылки
//
Функция ПолучитьЗначенияРеквизитов(Ссылка, ИменаРеквизитов) Экспорт

Запрос = Новый Запрос;
Запрос.Текст =
«ВЫБРАТЬ РАЗРЕШЕННЫЕ
| » + ИменаРеквизитов + «
|ИЗ
| » + Ссылка.Метаданные().ПолноеИмя() + » КАК Таблица
|ГДЕ
| Таблица.Ссылка = &Ссылка»;
Запрос.УстановитьПараметр(«Ссылка», Ссылка);

Выборка = Запрос.Выполнить().Выбрать();
Выборка.Следующий();
Результат = Новый Структура(ИменаРеквизитов);
ЗаполнитьЗначенияСвойств(Результат, Выборка);

Возврат Результат;

КонецФункции

Где в качестве ссылки идёт наш кривой элемент (хотя мы и пишем совсем иную сущность), а ИмяРеквизитов — «Родитель».

Короче, моё предложение — если есть явная ошибка при замене (и программа это «знает»), то делать откат транзакции и не пугать бедных программистов 1С :-)

Автор Holic, 02 дек 2016, 09:53

0 Пользователей и 1 гость просматривают эту тему.

Вопрос — сколько уровней вложенности для справочников поддерживается в 7 версии 1С (имеется в виду ТиС 7.7 и упрощенка)? В частности для номенклатуры (товаров).
Просто бухгалтера регулярно выгружали данные из Торговли и загружали в Бухгалтерию, пользуясь при этом штатными обработками 1С. Пару дней назад начались проблемы — выдает ошибку что-то про «зацикливание уровней».
Методом тыка удалось определить, что не переносятся некоторые документы реализации товаров. Вот и возникла мысль — может это из-за того что у них в справочнике товаров стало очень много подкаталогов с большим уровнем вложенности — может в этом проблема?


если точнее такая ошибка при загрузке в бухгалтерию:

ОбъектБД.УстановитьАтрибут(ИдРеквизита, Значение);
{Обработка.ЗагрузкаДанных.Форма.Модуль(1985)}: Количество уровней справочника ограничено!


Теги:

  • Форум 1С

  • Форум 1С — ПРЕДПРИЯТИЕ 7.7

  • Пользователям 1С Предприятие 7.7

  • Ошибка при обмене данными ТиС 7.7 — Бухгалтерия 7.7 (упрощенка)

Похожие темы (5)

Рейтинг@Mail.ru

Rambler's Top100

Поиск

Помогите, пожалуйста, как решить ошибку в коде

Ошибка «Ошибка  {ОбщийМодуль.Румба(448)}: Ошибка при вызове метода контекста (Записать): Зацикливание уровней!»

код

Функция ПолучитьКонтрагента(КонтрагентИмя, Гостиница=»»)

   Если ПустаяСтрока(КонтрагентИмя) Тогда

       Возврат Справочники.Контрагенты.ПустаяСсылка();

   КонецЕсли;

   Контрагент = Справочники.Контрагенты.НайтиПоНаименованию(КонтрагентИмя);

   Если Контрагент.Пустая() Тогда

       КонтрагентОбъект = Справочники.Контрагенты.СоздатьЭлемент();

   Иначе

       КонтрагентОбъект = Контрагент.ПолучитьОбъект();

   КонецЕсли;

   Если НЕ ПустаяСтрока(Гостиница) Тогда

       ГрК = Справочники.Контрагенты.НайтиПоНаименованию(Гостиница);

       Если ГрК.Пустая() ИЛИ НЕ ГрК.ЭтоГруппа Тогда

           ГрК = Справочники.Контрагенты.СоздатьГруппу();

           ГрК.Наименование = Гостиница;

           ГрК.Записать();

       КонецЕсли;

   Иначе

       ГрК = Справочники.Контрагенты.ПустаяСсылка();

   КонецЕсли;

   КонтрагентОбъект.Родитель = ГрК.Ссылка;

   КонтрагентОбъект.Наименование = КонтрагентИмя;

   КонтрагентОбъект.Записать();

   Возврат КонтрагентОбъект.Ссылка;

КонецФункции

Такая проблема, как Ошибка формата потока, в 1С 8.3 встречается достаточно часто. Рассмотрим, как исправить данную ошибку.

Такое происходит в следующих ситуациях:

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

Получите 267 видеоуроков по 1С бесплатно:

Исправление

  1. Как правило, для решения данной проблемы достаточно почистить временные файлы в системе. .
  2. Если не помогло, но есть возможность попасть в конфигуратор, запустите .
  3. Если доступа в конфигуратор нет, и база тестовая — воспользуйтесь , которая располагается в папке программы.
  4. Если вышеперечисленные методы не помогают, но запускается режим 1С предприятие, выгрузите данные в новую базу с помощью обработки « «. Однако при этом возможны потери данных.
  5. Обновление
    . Еще одной причиной может стать наличие активных сеансов пользователей с разной версией клиентской части платформы 1С. То есть, например, в базе работает пользователь с платформой 1С 8.3.5.1517, а пытается подключиться другой, с версией 8.3.5.1444.

Если это не помогло — есть более изощренные способы решения данной проблемы. Например, с помощью HEX-редактора. Если Вам необходима квалифицированная помощь программистов 1С, обратитесь к нам! Подробности на странице

Эта внешняя обработка выполняет проверку иерархической структуры справочников на предмет «зацикливания»,
то есть ситуаций, когда родитель группы ссылается на саму себя или на одну из подчиненных групп нижнего уровня.

Результат работы — печатная форма таблицы, с колонками в виде «Код», «Наименование», «Внутреннее представление»
зацикленных групп, а также их родителей:) и колонки для составления схемы подчиненности зацикленных групп.
В печатную форму выводятся только группы, участвующие в замкнутых циклах подчиненности, например:
A=>A ; A=>B=>A ; A=>B=>C=>A. (A=>B означает, что B является родителем A). Правильные «ветки» подчиненности,
подсоединенные к циклам, например, «ветка» «D» : D=>A=>B=>A из выборки исключаются.

Чтобы исправить замкнутую подчиненность, достаточно разорвать цепочку групп в одном месте — у одной из групп
очистить реквизит «Родитель». Программа анализирует и рекомендует для этих целей использовать: а) группы, которые
раньше других созданы (соответсвенно, должны иметь по логике более высокий уровень); б) группы, наиболее
удаленные от элементов (справедливо для справочников, где элементы всегда расположены последними по иерархии).
Цепочки замкнутых групп в отчете разделены пустыми строками. Для очистки родителя одной из групп цепочки нужно нажать
клавишу Enter / кликнуть мышкой на ячейке в строке с исправляемой группой, в колонке «Очистить!!!» .

В прикрепленных файлах — архив с внешним отчетом и архив пример информационной базы с зацикленным справочником

для демонстрации работы отчета.

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

// УстРодитель — устанавливаемый родитель для группы справочника

// Спр — переменная, для записи объекта справочника

=
0
;

=
0
;

ПровРодитель
=
УстРодитель
;

СЗ
= СоздатьОбъект(«СписокЗначений
»
);

Пока ПустоеЗначение(ПровРодитель
) = 0
Цикл

Если ПровРодитель
= Спр
.ТекущийЭлемент
() Тогда

ПопыткаЗаписиЦиклическойСсылки
= 1
;

Прервать;

КонецЕсли;

Если СЗ
.НайтиЗначение
(ПровРодитель
) > 0
Тогда

ПопыткаЗаписиПринадлежностиКЦиклу
= 1
;

Прервать;

КонецЕсли;

СЗ
.ДобавитьЗначение
(ПровРодитель
);

ПровРодитель
= ПровРодитель
.Родитель
;

КонецЦикла;

Если (ПопыткаЗаписиЦиклическойСсылки
= 0)

И

(ПопыткаЗаписиПринадлежностиКЦиклу
= 0
) Тогда

Спр

Родитель
=
УстРодитель
;

Спр
.
Записать
();

КонецЕсли;

Одной из самых неприятнейших встречающихся ошибок при работе с 1С 8.3 или 8.2 является «Ошибка формата потока». Причин ее появления может быть множество и их не всегда легко установить. При этом окно уведомления об ошибке далеко не эталон информативности.

Первым делом попробуйте подумать над тем, что же всё-таки могло привести к данной неполадке.

Наиболее распространенные причины

Самой распространенной причиной ошибки формата потока является неправильная обработка кэша программой 1С 8. Вспомните, не было ли перебоев электропитания до ее возникновения, обновления конфигурации? Корректно ли был завершен сеанс работы пользователя? Зачастую в таком случае ошибка формата потока будет возникать не на всех компьютерах. Проблемы лучше предупреждать, чем потом исправлять, поэтому рекомендуется использовать источники бесперебойного питания на компьютерах.

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

Как исправить ошибку формата потока

  1. Первым делом попробуйте . Если на одном компьютере программа работает нормально, а на другом появляется ошибка формата потока, то, скорее всего этот способ именно для вас.
  2. В том случае, если очистка кэша не помогла, попробуйте открыть информационную базу в режиме конфигуратора и запустите .
  3. Если вам не удалось зайти в конфигуратор, но база файловая – воспользуйтесь ChDBFl.exe. Данная утилита является аналогом тестирования и исправления ошибок в конфигураторе, но более простым.
  4. Убедитесь, что все текущие пользователи данной информационной базы используют одинаковую версию платформы. Если версии различаются, то установите всем актуальные.
  5. Если 1С запускается в режиме «Предприятие», то выгрузите все данные при помощи универсальной выгрузки/загрузки в новую базу.
  6. Отключите, а при необходимости удалите все фаерволы и антивирусы.
  7. Если данная информационная база клиент – серверная, то проверьте, хватает ли дискового пространства на сервере в папке для хранения временных данных.
  8. Удалите платформу 1С (через панель управления) и установите заново.
  9. Если информационная база открывается в конфигураторе, попробуйте выгрузить ее в файл *.dt и загрузить в пустую.
  10. Воспользоваться HEX-редактором, заменив содержимое чистой базы содержимым той, в которой произошла ошибка.

Если все эти способы вам не помогли, что маловероятно, то тут только бубен в помощь или квалифицированный специалист.

Подскажите как можно избавиться от зацикливания уровней справочника.

никто не сталкивался с этой проблемой ? Тестирование и исправление помогает или нет ?

Это как? Зацикливание уровней. Поясни…..

запустил тестирование пишет зацикливание уровней элемента номенклатуры и повисло помойму

зацикливание возникает например когда родитель элемента тот же самый элемент в иерархических справочниках

можно сделать справочник вообще без иерархии

почему то всегда считал, что это проверяется платформой при записи… при переносе в другую группу и т.д.

ну может косяк какой вышел

Сам не понимаю из-за чего это возникло, может проблема возникла из-за обмена через распределенную базу.

Пытался дома насильственно сломать базу (зациклить уровни) не дает !!!

Справочник номенклатура похоже ругается на группу товары. Визуально этой папки вообще не видно

При выборе элементов у которых родитель товары 1с виснет.

В консоле отчета выполни ВЫБРАТЬ    Номенклатура.Ссылка ИЗ    Справочник.Номенклатура КАК Номенклатура

это только выберет а как исправить

у меня сейчас нету этой базы она на работе, не факт что она именно так зациклилась может и подругому как нибудь

после этого попробуй получить каждый элемент как элемент, вписать родителя и записать.

делаешь копию, потом в конфигураторе убираешь иерархию, потом по com-у востанавливаешь нормальные ветки

Йа в шоке. Берем скуль. Счаст даже запрос приведу..

логично это попробую обязательно. Я боюсь что не получиться. Повиснет наверно 1с-ка. У кого нибудь была такая проблема или нет ?

Такая проблема была при переносе из 7.7. Лечилось + обработку написал за 5 минут по очистке родителей таких.

Теперь база даже не выгружается пишет ошибку

Может и у меня это из 7 прилетело ?

и помогла очистка родителей ?

отлично тогда с этого и начну. Спасибо за подсказку. А то я хотел снова пробовать запускать тестирование и исправление.

Мне даже интересно стало. Счаст с сервером приложений справлюсь и скажу, кто тут главный дятел..

ну так 27 и есть главный …. дятел… или очистка (элементы слетят в корень) или запись туда выбранного родителя — вполне исправят ситуацию

завтра проверим исправят ситуацию или будут вешать 1с.

Ты иди, на акул охоться.. Смешной ты человече..

команды миздеть не было….

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

у меня беда, а вы все шутки шутите !!!!!!!!!!!!

наверно запрос будет примерно такой:    Номенклатура.Ссылка ИЗ только есть у меня сомнение, что удасть переписать такие элементы, хотя попробовать стоит

+ вот это «(Номенклатура.Родитель = Номенклатура.Ссылка) и » — лишнее

А если зацикливание «через уровень» идет? З.Ы. Платформа такие вещи дает записать «на раз»: Объект.ОбменДаными.Загрузка = Истина и не такие чудеса творит.

если через уровень? в 34 тогда правильней условие такое «(Номенклатура.Родитель.Уровень+1) >= Номенклатура.Уровень»

такой запрос работать не будет. Скажет поле не найдено Номенклатура.Родитель.Уровень

може и не будет, не знаю, но вообще я от зацикливания справочников (правда по реквизиту в ТЧ) боролся и обычно оно гдето через 2-3 уровня появляеться

Щас смоделировал эту хрень. Можно перезаписать.. Предварительно выбрав запросом в .

И как получилось побороть ? Почему сомнения что удасться побороть такие элементы ? И как тогда бороться если не даст их перезаписать ?

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

если не даст переписать, то или прямым запросом (но восьмерку я прямыми не ковырял), или попробовать через загрузку, или .

Была такая хрень — неправильно перенес справочники из 7.7, вот и закольцевал группы номенклатуиы — хорошо хоть сразу обработку написал,если надо могу скинуть

«…………….З.Ы. Платформа такие вещи дает записать «на раз»: Объект.ОбменДаными.Загрузка = Истина и не такие чудеса творит.» Выходит, что платформа — гавно, причем гавно большое….

Тебя послушать, так выходит что «format c:» — самое большое «зло». И того кто «это» придумал — повесить мало…

Я сталкивался с «зацикливанием» — не так все просто — одним запросом не отделаешься И группы «зацикливаются» через один-два-несколько уровней, — и номенклатура может оказаться «родителем»… Как ловить тогда все «кольца»? Имхо: в цикле для каждой номенклатуры перебираем родителей с подсчетом их количества и запоминаем в списке значений. Как только количество родителей и количество в списке перестанет быть равным — список пользователю показать — пусть сам решает где надо рвать «кольцо». Перебор, конечно, не самое лучшее решение. Но это лучше, чем пытать составить «красивое» решение исходя из представления «а как это может быть»…

Петя, ты в снеговике много работал? Вообще, такое «зацикливание», ИМХО — проблема логики, а не платформы.

Присоединюсь — это логика, а не платформа

Тэги:

Комментарии доступны только авторизированным пользователям

Цитата tormozit ()

Опиши конкретную ситуацию для оценки вероятности ее повторения.

Так я вроде описал
«Типовой» ЗУП 2.5 в котором (ну так получилось исторически) полный бардак в Справочнике ПодразделенияОрганизаций (хотя не только в нём), т.е. есть куча «двойников» в элементах справочников подразделения (причем часть сотрудников числится в одном «близнеце», а часть в другом). Причем есть ещё и «вложенность», ну типа в филеале есть подразделение «Руководство», которому подчинёно подразделение «Руководство».
Итак, имеем элементы справочника Руководство_001, у которого в качестве родителя есть элемент справочника Руководство_002
Запускаем твою обработку (кстати, классная обработка и большое тебе за это спасибо) чтобы заменить ненужное Руководство на «единое и правильное». К сожалению получаем, что у элемента Руководство он сам у себя является родителем.
И конфа начинает сходить с ума, например при записи элемента справочника  Подразделение_НьюВасюки, влетает в бесконечный цикл в функции

// Возвращает выборку со значениями реквизитов переданной ссылки
//
Функция ПолучитьЗначенияРеквизитов(Ссылка, ИменаРеквизитов) Экспорт

Запрос = Новый Запрос;
Запрос.Текст =
«ВЫБРАТЬ РАЗРЕШЕННЫЕ
| » + ИменаРеквизитов + «
|ИЗ
| » + Ссылка.Метаданные().ПолноеИмя() + » КАК Таблица
|ГДЕ
| Таблица.Ссылка = &Ссылка»;
Запрос.УстановитьПараметр(«Ссылка», Ссылка);

Выборка = Запрос.Выполнить().Выбрать();
Выборка.Следующий();
Результат = Новый Структура(ИменаРеквизитов);
ЗаполнитьЗначенияСвойств(Результат, Выборка);

Возврат Результат;

КонецФункции

Где в качестве ссылки идёт наш кривой элемент (хотя мы и пишем совсем иную сущность), а ИмяРеквизитов — «Родитель».

Короче, моё предложение — если есть явная ошибка при замене (и программа это «знает»), то делать откат транзакции и не пугать бедных программистов 1С

  • Ошибка при вызове метода контекста выбрать недопустимое значение параметра параметр номер 3
  • Ошибка при вызове метода контекста закончитьгруппустрок
  • Ошибка при вызове метода контекста записать запись не верна
  • Ошибка при вызове метода контекста выбрать использование синхронных методов на клиенте запрещено
  • Ошибка при вызове метода контекста записать 1с отчетность