1С 7.7 Для тех, кто программирует.

Новая тема
Показывать по 10 20 40 сообщений
Галочка "Сохранять значения"!
Видимо он имеет ввиду, что таблицу в отчетах и обработках можно использовыать как элемент диалога. В таком случае в таблице будут храниться данные из справочников или документов. Пример - форма "Т-2" в справочнике сотрудники.
Я еще раз Вас побеспокою... Сделали все как Вы посоветовали, только опять же столкнулись с очередной проблемой: обработка, которая должна менять Наименование в справочнике по периодическому реквизиту не хочет работать, потому как опять выдает такую же ошибку:
"Изменено Наименование! Может быть нарушена последовательность выборки! " Что делать?
"Если вы делаете изменение примерно таким способом:
Справочник.ВыбратьЭлементы ();
Пока Справочник.ПолучитьЭлемент() > 0 Цикл
...Тут меняете и записываете
КонецЦикла;

То попробуйте сделать так:
Список = СоздатьОбъект ("СписокЗначений");
Справочник.ВыбратьЭлементы ();
Пока Справочник.ПолучитьЭлемент() > 0 Цикл
 НадоМенять = 0;
...Тут определеляете, что надо изменить наименование, ставите НадоМенять = 1;
 Если НадоМенять = 1 Тогда
   Список.Добавить (Справочник.ТекущийЭлемент());
 КонецЕсли;
КонецЦикла;

Для Сч = 1 По Список.РазмерСписка () Цикл
...Тут меняете наименование.
КонецЦикла;"
"> Если вы делаете изменение примерно таким способом:
> Справочник.ВыбратьЭлементы ();
> Пока Справочник.ПолучитьЭлемент() > 0 Цикл
> ...Тут меняете и записываете
> КонецЦикла;
>
> То попробуйте сделать так:
> Список = СоздатьОбъект ("СписокЗначений");
> Справочник.ВыбратьЭлементы ();
> Пока Справочник.ПолучитьЭлемент() > 0 Цикл
>   НадоМенять = 0;
> ...Тут определеляете, что надо изменить наименование, ставите НадоМенять = 1;
>   Если НадоМенять = 1 Тогда
>     Список.Добавить (Справочник.ТекущийЭлемент());
>   КонецЕсли;
> КонецЦикла;
>
> Для Сч = 1 По Список.РазмерСписка () Цикл
> ...Тут меняете наименование.
> КонецЦикла;

а зачем так???
еси наименование меняем, то выборку ставим по коду

Справочник.ПорядокКодов();
Справочник.ВыбратьЭлементы ();
Пока Справочник.ПолучитьЭлемент() > 0 Цикл
...Тут меняете и записываете
КонецЦикла;


"
Привычка обрабатывать потом, когда уверен на все 100, что выборка не будет меняться :)
"А еще можно так:
СправочникИзменение = СоздатьОбъект("Справочник.НужныйСправочник");
Справочник.ВыбратьЭлементы ();
Пока Справочник.ПолучитьЭлемент() > 0 Цикл

  СправочникИзменение.НайтиЭлемент(Справочник.ТекущийЭлемент());
  СправочникИзменение.Наименование = "Нужное наименование";
  СправочникИзменение.Записать();
...Тут меняете и записываете
КонецЦикла;
"
Вопрос, как работает ВыбратьЭлементы и ПолучитьЭлемент. Справочник один и тотже. В этом и заключается вопрос.
"> "Таблица значений" - это не сохраняемый объект
Вообще-то можно сохранять в файл ЗначениеВФайл() и загружать потом из него ЗначениеИзФайла().
Если база не распределенная - то без проблем.
Придумать имя файла содержащее информацию о дате изменений.
Тогда на каждую дату будет свой файл с сохраненной таблицей значений.
Только в таблице я бы еще хранил кроме нового названия и старое... Так проще было-бы отслеживать изменения.
Точнее в таблице я бы хранил ссылку на элемент справочника, старое значение реквизита, новое значение реквизита
Например (для реквизита Наименование):
//-------------------------------------
тз = СоздатьОбъект("ТаблицаЗначений");
тз.НоваяКолонка("Элмнт");
тз.НоваяКолонка("Было");
тз.НоваяКолонка("Стало");
тз.НоваяКолонка("Дата");
//-------------------------------------
// и, например, заполнять ее примерно так:
//-------------------------------------
спр.ВыбратьЭлементы()
Пока спр.ПолучитьЭлемент()<>0 Цикл
  Если НекоеУсловиеОтбораЭлемента(спр.ТекущийЭлемент())<>1 Тогда // Наверняка нужно не все элементы менять.
     Продолжить;
  КонецЕсли;
  тз.НоваяСтрока();
  тз.Элмнт = спр.ТекущийЭлемент();
  тз.Было = спр.Наименование;
  тз.Стало = ВашеНовоеЗначениеРеквизита;
  тз.Дата = ТекущаяДата();
КонецЦикла;
// потом пробежаться по таблице и изменить наименования
Для к=1 по тз.КоличествоСтрок();
  Если спр.НайтиЭлемент(тз.Элмнт) = 1 Тогда
     спр.Наименование = тз.Стало;
     спр.Записать();
  Иначе
     Сообщить("куда-то элемент потерялся... :)");
  КонецЕсли;
КонецЦикла;
// Затем сохранить нашу табличку в файл
ИмяФайла = КаталогИБ()+"РеквизитыНа_"+Формат(ТекущаяДата(),"ДГГГГММДД")+".tzn";
ЗначениеВФайл(ИмяФайла,тз);
// всё, наши изменения сохранены....
- - - - - - - -
Потом, где необходимо "вспомнить" изменения пишем
тз = СоздатьОбъект("ТаблицаЗначений");
ЗначениеИзФайла(ИмяФайла,тз);
и манипулируем с тз как нам хочется."
Еще вопросик на эту тему... С новыми документами все понятно, а как быть с теми, которые проведены в прошлом и бухгалтеру захотелось распечатать этот документ со старым контрагентом?  При открытии проведенного документа в справочнике "Контрагенты" Наименование поменяется, а в документе- снова перевыбирать контрагента?
Читают тему
(гостей: 1)

Быстрый переход