8.х Изменить значение ячейки таблицы значений

Тема в разделе "Конфигурирование на платформе "1С:Предприятие 8"", создана пользователем Damian, 7 май 2010.

  1. TopicStarter Overlay
    Damian
    Offline

    Damian

    Регистрация:
    28 апр 2010
    Сообщения:
    24
    Симпатии:
    0
    Баллы:
    1
    Чертовски извиняюсь, возможно многим покажусь самым последним ламером, но тем не менее спрошу.
    Есть таблица значений с двумя колонками: СтарыйКод и НовыйКод.
    Колонка СтарыйКод заполняется автоматом в цикле - добавляются строки и устанавливается соответствующее значение.
    Теперь надо заново пробежаться по этой таблице и установить значения НовыйКод.
    То есть хотелось бы применить метод типа как в 7.7:
    Код:
    Для Х=1 По ТЗ.КоличествоСтрок() Цикл
    ТЗ.УстановитьЗначение(Х,"НовыйКод",НовыйКод);
    КонецЦикла;
    
    
    Оговорюсь сразу: при добавлении строки в таблицу заранее известен только СтарыйКод. НовыйКод будет известен только после того, как будут созданы элементы справочника, а это произойдет только после того, как будут заполнены все СтарыеКоды.
  2. Stack_G
    Offline

    Stack_G Опытный в 1С

    Регистрация:
    10 дек 2007
    Сообщения:
    786
    Симпатии:
    2
    Баллы:
    26
    Код:
    Для каждого Строка Из ТЗ Цикл
    Строка.НовыйКод = НовыйКод;
    КонецЦикла;
    
  3. TopicStarter Overlay
    Damian
    Offline

    Damian

    Регистрация:
    28 апр 2010
    Сообщения:
    24
    Симпатии:
    0
    Баллы:
    1
    Не подходит. Уже есть цикл перебора другой ТЗ. И вот именно в этом цикле мне надо на основании того, какое значение лежит в Строка.КакаяТоКолонка присвоить конкретное значение для конкретной ТЗ.НовыйКод.
  4. Stack_G
    Offline

    Stack_G Опытный в 1С

    Регистрация:
    10 дек 2007
    Сообщения:
    786
    Симпатии:
    2
    Баллы:
    26
    Код:
    Для каждого Строка Из ПерваяТЗ Цикл
    НайдСтрока = ВтораяТЗ.Найти(Строка.СтарыйКод, "СтарыйКод");
    Если  НайдСтрока <> Неопределено Тогда
    НайдСтрока.НовыйКод = Строка.НовыйКод;
    КонецЕсли;
    КонецЦикла;
    
    
    Ну или наоборот, бежать по второй ТЗ и искать значения в первой ТЗ

    Из синтаксис-помощника:
    А также может подойти:
  5. TopicStarter Overlay
    Damian
    Offline

    Damian

    Регистрация:
    28 апр 2010
    Сообщения:
    24
    Симпатии:
    0
    Баллы:
    1
    Не, немного не так. Опишу процесс с самого начала.
    1. Открывается файл Excel.
    2. Из него выбираются строки со старыми кодами и наименованиями (наименования могут быть одинаковыми) и заносятся в ПервуюТЗ.
    3. Во ВторуюТЗ заносятся только старые коды.
    4. Excel закрывается.
    5. Пробегаем циклом по ПервойТЗ, создаем новый элемент справочника, после его записи можем получить НовыйКод.

    То есть реализовать схему типа этого:
    Код:
    ТекСтрока = 1;
    Для Каждого Х Из ПерваяТЗ Цикл
    Элемент = Новый Справочники.Должности.СоздатьЭлемент();
    Элемент.Наименование = Х.Наименование;
    Элемент.Записать();
    // а вот здесь хотелось бы как в 7.7
    ВтораяТЗ.УстановитьЗначение(ТекСтрока,"НовыйКод",Элемент.Код);
    ТекСтрока = ТекСтрока + 1;
    КонецЦикла;
    
    
  6. Stack_G
    Offline

    Stack_G Опытный в 1С

    Регистрация:
    10 дек 2007
    Сообщения:
    786
    Симпатии:
    2
    Баллы:
    26
    А что мешает все в одной ТЗ получить?
    1. ПОлучаем из Экселя код, наименование.
    2. Добавляем новую колонку в ТЗ "НовыйКод"
    3. Бежим по ТЗ, создаем Элемент справочника и одновременно туда же и заносим Новый полученный код.

    ПерваяТЗ.Колонки.добавить("НовыйКод");
    Код:
    Для Каждого Х Из ПерваяТЗ Цикл
    Элемент = Новый Справочники.Должности.СоздатьЭлемент();
    Элемент.Наименование = Х.Наименование;
    Элемент.Записать();
    Х.НовыйКод = Элемент.Код;
    КонецЦикла;
    
    
    А дальше уже что вам нужно, копируйте Тз, удаляйте колонки и т.д.
  7. TopicStarter Overlay
    Damian
    Offline

    Damian

    Регистрация:
    28 апр 2010
    Сообщения:
    24
    Симпатии:
    0
    Баллы:
    1
    Мда, как говорится, а ларчик-то просто открывался...
    Спасибо большое, элементарного, блин, и не заметил.
  8. gosn1ck
    Offline

    gosn1ck Опытный в 1С

    Регистрация:
    13 авг 2009
    Сообщения:
    1.329
    Симпатии:
    1
    Баллы:
    26
    извиняюсь, а зачем вообще нужен старый код? :unsure:
  9. TopicStarter Overlay
    Damian
    Offline

    Damian

    Регистрация:
    28 апр 2010
    Сообщения:
    24
    Симпатии:
    0
    Баллы:
    1
    Старый код нужен для того, чтобы сопоставить старые должности новым.
    Поясню пошагово.
    1. Год назад заказчик решил внедрить у себя 1С 8.1 "Зарплата и управление персоналом".
    2. До этого они использовали базу FoxPro с *.dbf файлами в DOS-режиме.
    3. Человек от нашей фирмы перенес данные (автоматом) из *.dbf в справочники. Т.е. позаполнял справочники должностей, физ.лиц, сотрудников, автоматом создал документы "Прием на работу", "Начисление зарплаты". Все вроде бы хорошо.
    4. Эти чучела телились полгода, не могли сообразить что к чему, а теперь им бл***ь (извините за нецензурщину) срочняком ("Надо на вчера") необходимо считать зарплату.
    5. Теперь получается ситуация, что многие из тех должностей (созданных автоматом) уже не существует.
    6. Сформирован список актуальных должностей, надо их загрузить в справочник "Должности", потом пробежаться по документам "Прием на работу" и из таблицы соответствия, где СтарыйКод = НовыйКод всем сотрудникам назначить новую (правильную) должность.
    7. После этого старые должности можно удалить.
    8. Приступать к полномасштабному формированию штатного расписания со всеми вытекающими :)

    PS. Жаль, что все-таки разработчики 1С отказались от возможности непосредственно корректировать значения ячеек таблиц :(

Поделиться этой страницей