Имя: Пароль:
1C
1С v8
Перенос данных колонки ТЧ в ТЗ
0 MIF_HELM
 
26.07.18
11:01
Здравствуйте, учусь программированию в 1С. Создал с нуля документ. Суть его в том что пользователь выбирает период и в зависимости от его значения в ТЗ появляются новые колонки , заводит нужные данные и при записи все это переносится в нужном формате в ТЧ(данные из колонок записываются в строках), при проведении записывается в регистр накоплений. Но столкнулся с проблемой обратного переноса данных из ТЧ в ТЗ. Подскажите пожалуйста как мне можно это сделать?
Сразу добавлю что при открытии старого документа уже смог подтянуть в ТЗ нужные колонки и создать строку.

Вижу все нужные значения:

    Для Каждого КолонкиТЗ из МассивМесяцев Цикл
        Сообщить(КолонкиТЗ.Имя);
    КонецЦикла;
    Для Каждого СтрокаТЧ из Объект.Производство Цикл
        Сообщить (СтрокаТЧ.Сумма);
    КонецЦикла;
В программировании шарю очень мало, поэтому извините если вопрос из разряда тупых. Заранее спасибо за помощь.
1 Сметанин
 
26.07.18
11:11
А в чем вопрос? Из ТЧ дока выгрузить в ТЗ? Или как записать в регистры?
2 MIF_HELM
 
26.07.18
11:24
Как выгрузить ТЧ колонки в строку ТЗ.
3 unbred
 
26.07.18
11:27
ЗаполнитьЗначенияСвойств(ТЗ,ТЧ)?
4 MIF_HELM
 
26.07.18
11:29
Проблема в том что в ТЧ они в колонке а в тз нужно в строку, потому и не знаю как правильно
5 aleks_default
 
26.07.18
11:30
А в ТЧ значения по месяцам как записаны? В одно строке или несколькими строками - на каждый месяц отдельная строка?
6 Aleksandr N
 
26.07.18
11:30
(4) Жуть.
7 Fish
 
26.07.18
11:31
(4) Транспонировать нужно что ли?
8 MIF_HELM
 
26.07.18
11:32
Так наверное проще будет объяснить что за ужас я пытаюсь вытворить https://dropmefiles.com/uju7Z :)
9 MIF_HELM
 
26.07.18
11:33
на сообщения можете не обращать внимания. это я пытаюсь выловить значения чтобы понять как обращаться
10 MIF_HELM
 
26.07.18
11:40
Пробовал вот так:
Для Каждого СтрокаТЧ из Объект.Производство Цикл
        НайденнаяСтрокаТЗ = ТаблицаПрозводственныеПланы.НайтиСтроки(МассивМесяцев); //Элементы.ТаблицаПрозводственныеПланы.Найти(СтрокаТЧ.КатегорияНоменклатуры, "Категория Номенклатуры");
    Если НайденнаяСтрокаТЗ <> Неопределено Тогда
        МесяцДатаПланирования = Формат(СтрокаТЧ.ДатаПланирования,"ДФ=MMMM");
        ГодДатаПланирования = Формат(Год(СтрокаТЧ.ДатаПланирования),"ЧГ=0");
        ИмяКолонки = "" + МесяцДатаПланирования + ГодДатаПланирования;
        НайденнаяСтрокаТЗ[ИмяКолонки] = СтрокаТЧ.Сумма;
КонецЕсли;
КонецЦикла;
Но программа не определяет метод "Найти"
11 Fish
 
26.07.18
11:41
(10) "Но программа не определяет метод "Найти"" - Как это проявляется?
12 MIF_HELM
 
26.07.18
11:45
Не то скинул, пробую сейчас через:

Для Каждого СтрокаТЧ из Объект.Производство Цикл
        НайденнаяСтрокаТЗ = Элементы.ТаблицаПрозводственныеПланы.Найти(СтрокаТЧ.КатегорияНоменклатуры, "Категория Номенклатуры");
    Если НайденнаяСтрокаТЗ <> Неопределено Тогда
        МесяцДатаПланирования = Формат(СтрокаТЧ.ДатаПланирования,"ДФ=MMMM");
        ГодДатаПланирования = Формат(Год(СтрокаТЧ.ДатаПланирования),"ЧГ=0");
        ИмяКолонки = "" + МесяцДатаПланирования + ГодДатаПланирования;

А проявляется в ошибке:{Документ.ПроизводственныеПланы.Форма.ПроизводственныеПланы.Форма(114)}: Метод объекта не обнаружен (Найти)
        НайденнаяСтрокаТЗ = Элементы.ТаблицаПрозводственныеПланы.Найти(СтрокаТЧ.КатегорияНоменклатуры, "Категория Номенклатуры");
        НайденнаяСтрокаТЗ[ИмяКолонки] = СтрокаТЧ.Сумма;
КонецЕсли;
КонецЦикла
13 MIF_HELM
 
26.07.18
11:45
(11)Опять не правильно отправил)

Для Каждого СтрокаТЧ из Объект.Производство Цикл
        НайденнаяСтрокаТЗ = Элементы.ТаблицаПрозводственныеПланы.Найти(СтрокаТЧ.КатегорияНоменклатуры, "Категория Номенклатуры");
    Если НайденнаяСтрокаТЗ <> Неопределено Тогда
        МесяцДатаПланирования = Формат(СтрокаТЧ.ДатаПланирования,"ДФ=MMMM");
        ГодДатаПланирования = Формат(Год(СтрокаТЧ.ДатаПланирования),"ЧГ=0");
        ИмяКолонки = "" + МесяцДатаПланирования + ГодДатаПланирования;

КонецЕсли;
КонецЦикла


А проявляется в ошибке:{Документ.ПроизводственныеПланы.Форма.ПроизводственныеПланы.Форма(114)}: Метод объекта не обнаружен (Найти)
        НайденнаяСтрокаТЗ = Элементы.ТаблицаПрозводственныеПланы.Найти(СтрокаТЧ.КатегорияНоменклатуры, "Категория Номенклатуры");
        НайденнаяСтрокаТЗ[ИмяКолонки] = СтрокаТЧ.Сумма;
14 Малыш Джон
 
26.07.18
11:47
(13) ТаблицаПрозводственныеПланы.Найти(СтрокаТЧ.КатегорияНоменклатуры, "Категория Номенклатуры");
15 MIF_HELM
 
26.07.18
11:52
(13) Так тоже пробовал, та же ошибка
16 MIF_HELM
 
26.07.18
11:52
читал в СП и все сделал по нему
17 MIF_HELM
 
26.07.18
11:52
но мне если честно не важен способ, главное бы вытащить и вставить)
18 Aleksandr N
 
26.07.18
11:55
(17) Юзай найтистроки. Судя по всему у тебя упр. форма. Там таблица значений = данныеформыколлекция.
19 Сметанин
 
26.07.18
11:55
УФ?
20 MIF_HELM
 
26.07.18
11:56
(19) Да
21 Aleksandr N
 
26.07.18
11:57
(19) конечно уф.
22 MIF_HELM
 
26.07.18
11:57
(18) Сейчас попробуем
23 Сметанин
 
26.07.18
12:01
(20) Тогда к реквизиту надо обращаться а не элементу
24 MIF_HELM
 
26.07.18
12:06
(20) что вы имеете ввиду?
25 MIF_HELM
 
26.07.18
12:06
(23)Что вы имеете ввиду?
26 Aleksandr N
 
26.07.18
12:07
(25) Элемент формы <> реквизит.
27 Мимохожий Однако
 
26.07.18
12:10
(25) У документа есть реквизиты табличной части. Надо обращаться к ним. А ты обращаешься к элементам формы документа, т.е. к отображению реквизитов.
28 Chameleon1980
 
26.07.18
12:11
ЗаполнитьЗначенияСвойств
29 MIF_HELM
 
26.07.18
12:16
(26)(27) уже пробовал так сделать
НайденнаяСтрокаТЗ = ТаблицаПрозводственныеПланы.Найти(СтрокаТЧ.КатегорияНоменклатуры, "Категория Номенклатуры");

В (15) писал
30 MIF_HELM
 
26.07.18
12:18
(28) первый раз этот метод используя, буду разбираться, спасибо.

Хотя если честно не понятно как можно в нем колонки ТЧ перевести в строки ТЗ
31 Сметанин
 
26.07.18
12:21
ТЗ = ТЧ.Скопировать(,"КатегорияНоменклатуры")

И имя колонки не может быть с пробелом
32 Chameleon1980
 
26.07.18
12:41
Хотя если честно не понятно как можно в нем колонки ТЧ перевести в строки ТЗ

в строки тз определенной колонки тз ?

ну тебя спрашивали про транспонирование
33 Aleksandr N
 
26.07.18
13:09
(29) Так, еще раз.
Используй не ТаблицаПрозводственныеПланы.Найти(), а ТаблицаПрозводственныеПланы.НайтиСтроки()
34 MIF_HELM
 
26.07.18
16:47
Спасибо огромное всем кто помогал, пока что получилось вывести данные для первой строчки, по коду это выглядит:

    НачалоИнтервала=Объект.НачалоПериода;
    КонецИнтервала=Объект.КонецПериода;
    
    МассивМесяцев = Новый Массив;
    
    ПервыйМесяц=НачалоМесяца(НачалоИнтервала);
    Пока ПервыйМесяц <= НачалоМесяца(КонецИнтервала) Цикл

        //Сообщить(ПервыйМесяц);
        НазваниеКолонки=Формат(ПервыйМесяц, "ДФ=MMMMyyy");
        МассивМесяцев.Добавить(Новый РеквизитФормы(НазваниеКолонки, Новый ОписаниеТипов("Число"), "ТаблицаПрозводственныеПланы", НазваниеКолонки, Истина));
        ПервыйМесяц = ДобавитьМесяц(НачалоМесяца(ПервыйМесяц),1);
    КонецЦикла;
    ИзменитьРеквизиты(МассивМесяцев);
        ПервыйМесяц=НачалоМесяца(НачалоИнтервала);
    Пока ПервыйМесяц <= НачалоМесяца(КонецИнтервала) Цикл
        НазваниеКолонки=Формат(ПервыйМесяц, "ДФ=MMМMyyy");        
        НоваяКолонка = Элементы.Добавить(НазваниеКолонки, Тип("ПолеФормы"), Элементы.ТаблицаПрозводственныеПланы);
        НоваяКолонка.Вид = ВидПоляФормы.ПолеВвода;
        НоваяКолонка.ПутьКДанным = "ТаблицаПрозводственныеПланы."+НазваниеКолонки;
        ПервыйМесяц = ДобавитьМесяц(НачалоМесяца(ПервыйМесяц),1);
    КонецЦикла;

    ВременнаяТЗ = ДанныеФормыВЗначение(ТаблицаПрозводственныеПланы, Тип("ТаблицаЗначений"));
    НоваяСтрока = ВременнаяТЗ.Добавить();
    НоваяСтрока.КатегорияНоменклатуры = Объект.Производство[0].КатегорияНоменклатуры;

    Для Сч = 1 По Объект.Производство.Количество() Цикл
    НоваяСтрока[Сч] = Объект.Производство[Сч-1].Сумма;
    КонецЦикла;

    ЗначениеВДанныеФормы(ВременнаяТЗ, ТаблицаПрозводственныеПланы);
35 aleks_default
 
26.07.18
16:52
И че ошибку на вот этом  "НоваяСтрока[Сч] = Объект.Производство[Сч-1].Сумма;" не выдает?
36 aleks_default
 
26.07.18
16:53
Это же полная хрень
37 aleks_default
 
26.07.18
17:08
В момент создания колонок в своей таблице сделай дополнительно соответсвие в котором ключ - название колонки, значение - дата и заполняй его. Затем запросом выбери из табличной части список категорий сгруппировав так чтобы в списке не было дублей категорий а только уникальные. Далее делаещь цикл по этому списку в котором добавляешь новую строку в таблицупроизводственных планов. внутри этого цикла еще один цикл по соответствию с ключом. Внутри этого цикла у тебя будет известна и Категория(список) и ДатаПланирования(значение соответсвия) и название колонки (ключ соответсвия). По категории и дате планирования находишь нужную строку в ТЧ и заполняешь значение оттуда в соответствующую колонку. Профит
38 MIF_HELM
 
27.07.18
07:17
(37) Понимаю что для вас такой код может быть полная хрень но к сожалению моих знаний( и то с помощью) хватило только на это, спасибо что описали что нужно делать но к сожалению мне на этом уровне знаний не понятно как даже половину из этого реализовать.
39 aleks_default
 
27.07.18
10:03
(38)Как же вы с таким уровнем знаний взялись за такую задачу? Возьмите для начала что-нибудь попроще.
40 takefive
 
27.07.18
11:02
(2) попробуйте так...

Для Каждого СтрокаТабЧасти из Объект.ТабличнаяЧасть Цикл
    СтрокаТабЗначений = ФункцияПоискаСтроки(СтрокаТабЧасти.Номенклатура);
    СтрокаТабЗначений[ФункцияПреобразованияДатыВИмяКолонки(СтрокаТабЧасти.Дата)] = СтрокаТабЧасти.Сумма;
КонецЦикла;
Независимо от того, куда вы едете — это в гору и против ветра!