Форум программистов, компьютерный форум, киберфорум
Наши страницы
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
Roman2408
4 / 4 / 1
Регистрация: 04.04.2013
Сообщений: 117
1

Таблица значений

14.08.2013, 17:18. Просмотров 1225. Ответов 10
Метки нет (Все метки)

Такая ситуация: Есть док Отчет кассира (фондовый). В него напихали изменений (менял не я). Теперь некорректно выдается номер
кор. счета при формировании. В функции СверткаТаблицы производятся некие махинации со счетом, после чего он становится в формате 1.000.00
Чтобы этого избежать, делаю так: из результат запроса вытягиваю нормальный кор. счет:
1C
1
2
 ДопТЗ = ЗапросОбороты.Выполнить().Выгрузить();
 МассивКолонки = ДопТЗ.ВыгрузитьКолонку("КоррСчет");
Затем в ТЗ гружу колонку с правильными счетами и потом гружу колонку из этой ТЗ в колонку табличной части самого документа:
1C
1
2
3
4
5
     НовыеСтрокиДляСчета = Новый ТаблицаЗначений;
     НовыеСтрокиДляСчета.Колонки.Добавить("ПредставлениеКоррСчета", ,"ПредставлениеКоррСчета");
     НовыеСтрокиДляСчета.ЗагрузитьКолонку(МассивКолонки, "ПредставлениеКоррСчета");
     КолонкаПредставлениеКоррСчета = НовыеСтрокиДляСчета.ВыгрузитьКолонку("ПредставлениеКоррСчета");
     СтрокиДокумента.ЗагрузитьКолонку(КолонкаПредставлениеКоррСчета, "ПредставлениеКоррСчета");
Понимаю, извращение ужасное, но по-другому не пойму как сделать. Так вот, смотрю отладчиком - в строке
1C
1
МассивКолонки = ДопТЗ.ВыгрузитьКолонку("КоррСчет")
массив задается нормально, счета верные. А вот суда
1C
1
КолонкаПредставлениеКоррСчета = НовыеСтрокиДляСчета.ВыгрузитьКолонку("ПредставлениеКоррСчета")
уже идет пустое значение. Почему так получается и как правильно сделать?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.08.2013, 17:18
Ответы с готовыми решениями:

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

Таблица Значений
У меня есть таблица значений которая выводит оценки студента в три колонки но первую строчку в...

таблица значений 7--> 8
хэлпаните. Как перенести таблицу значений (все колонки там строковые) из 7 в 8. ? Ну неполучается...

Таблица значений
Недавно начал изучать 1С, до этого учил C++ builder, если там двумерный массив так по сути...

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

10
duk337
2951 / 1763 / 82
Регистрация: 03.11.2011
Сообщений: 8,280
14.08.2013, 17:37 2
А что в запросе Счет.Код не получить?
1
Roman2408
4 / 4 / 1
Регистрация: 04.04.2013
Сообщений: 117
15.08.2013, 08:14  [ТС] 3
Блин чет я вообще туплю страшно! похоже, пора в отпуск

Добавлено через 10 часов 56 минут
Хмм...Возникла проблема(( Не пойму, как поместить из запроса Счет в строки ТЧ. Процедура выполняется из модуля объекта, ТЧ заполняется методом СтрокиДокумента.Загрузить(РезультатыТаб). Так не прокатывает:
1C
1
2
3
4
5
6
 Выборка = ЗапросОбороты.Выполнить().Выбрать();
     Для Каждого Строка Из СтрокиДокумента Цикл
         Пока Выборка.Следующий() Цикл      
            СтрокиДокумента.ПредставлениеКоррСчета=Выборка.КоррСчет;
         КонецЦикла;
     КонецЦикла;
0
duk337
2951 / 1763 / 82
Регистрация: 03.11.2011
Сообщений: 8,280
15.08.2013, 08:56 4
1. Цикл в цикле
2. Обращение д.б. Строка.Представление...=... а тип Счет?
3. Выборку возвращать для каждой строки ВНачалоВыборки()
Но вообще, эта конструкция нереальна. Даже найти ошибку невозможно, поскольку всё - ошибка.
Надо с начала. Что в строках, что в выборке? Они как-то связаны?
0
15.08.2013, 08:56
Roman2408
4 / 4 / 1
Регистрация: 04.04.2013
Сообщений: 117
15.08.2013, 09:13  [ТС] 5
ПредставлениеКорСчета - тип Строка. Туда грузится КоррСчет из запроса методом
1C
1
СтрокиДокумента.Загрузить(РезультатыТаб);
1C
1
РезультатыТаб = СверткаТаблицы(ЗапросОбороты.Выполнить().Выгрузить());
СверткаТаблицы - та функция, в которой как раз и меняется Счет с правильного на 000. Из нее вызывается функция НД_ПолучитьПредставлениеСчета, которая его и меняет
1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
Функция НД_ПолучитьПредставлениеСчета(знач Счет1, знач Счет2 = Неопределено, КВД) Экспорт
    
    Если Не ЗначениеЗаполнено(Счет1) Тогда
        Возврат "";
    КонецЕсли;  
    
    Если ТипЗнч(Счет1) = Тип("Строка") Тогда
        КодСч = Сред(Счет1, 3);                      
        //Если Прав(КодСч, 3) = ".00" Тогда
        //  КодСч = Лев(КодСч, СтрДлина(КодСч)-3);
        //КонецЕсли;     
        ПервыйСчет = ПланыСчетов.ЕПСБУ.НайтиПоКоду(КодСч).Ссылка;
        Если не ЗначениеЗаполнено(ПервыйСчет) тогда
            Счет1 = ПланыСчетов.ЕПСБУ.НайтиПоКоду(Счет1).Ссылка;
        Иначе
            Счет1 = ПервыйСчет;
        КонецЕсли;  
    КонецЕсли;  
    
    Если ЗначениеЗаполнено(Счет2) Тогда
    
        Пока (Счет1 <> Счет2) Цикл
            
            Если Счет1.Уровень() < Счет2.Уровень() Тогда
                Счет2 = Счет2.Родитель;
            ИначеЕсли Счет1.Уровень() > Счет2.Уровень() Тогда
                Счет1 = Счет1.Родитель;
            Иначе                                     // на одном уровне иерархии
                Если Счет1.Уровень() <> 0 Тогда
                    Счет1 = Счет1.Родитель;
                    Счет2 = Счет2.Родитель;
                Иначе                           
                    Счет1 = "000.00";
                    Счет2 = "000.00";
                КонецЕсли;   
            КонецЕсли;
            
        КонецЦикла;
        
    КонецЕсли;  
    
    ПредставлениеКВД = ?(НЕ ЗначениеЗаполнено(КВД), "", "" + КВД + ".");
    
    Если ТипЗнч(Счет1) = Тип("Строка") Тогда
        ПредставлениеСчета = ПредставлениеКВД + Счет1;
    Иначе
        ПредставлениеСчета = ПредставлениеКВД + СокрЛП(Строка(Счет1));
    КонецЕсли;  
        
    Возврат ПредставлениеСчета;
    
КонецФункции
0
duk337
2951 / 1763 / 82
Регистрация: 03.11.2011
Сообщений: 8,280
15.08.2013, 12:57 6
. А давайте попробуем алгоритм сформулировать. Что тут происходит, человеку со средним умом не понять. А далее зададимся целью получить код счета - а представление должно представлять из себя код счета, не так ли? - прямо в запросе.
0
Roman2408
4 / 4 / 1
Регистрация: 04.04.2013
Сообщений: 117
15.08.2013, 15:21  [ТС] 7
Представление состоит из КФО, затем ставится ".", затем код счета. В итоге получается такая вот петрушка: 1.000.00, холя должно быть 1.302.21
Вот сам запрос:
1C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
ЗапросОстНач         = Новый Запрос;
    ЗапросОстНач.Текст   = 
    
    " ВЫБРАТЬ                                                             
     |      Остатки.КВД                     КАК КВД,
     |      Остатки.СуммаОстаток            КАК СальдоНач
     |ИЗ
     |      РегистрБухгалтерии.ЕПСБУ.Остатки(
     |                                       &Момент,
     |                                       Счет В (&СчетКассы),
     |                                       ,
     |                                       " + ФильтрПоОрганизациям + ")
     |                                      КАК Остатки
     |";
     
    //Санарт
    СчетаКассы=Новый СписокЗначений;
    СчетаКассы.Добавить(ПланыСчетов.ЕПСБУ.НайтиПоКоду("201.35"));
    СчетаКассы.Добавить(ПланыСчетов.ЕПСБУ.НайтиПоКоду("02.3"));
    ЗапросОстНач.УстановитьПараметр("Момент",      НачалоДня(Дата));
    //ЗапросОстНач.УстановитьПараметр("СчетКассы",   ПолучениеНСИ.ПолучитьСчетПоКоду("201.35"));
    ЗапросОстНач.УстановитьПараметр("СчетКассы",   СчетаКассы);
    ЗапросОстНач.УстановитьПараметр("Организация", Учреждение);
            
    Результат  = ЗапросОстНач.Выполнить().Выбрать();
    Пока Результат.Следующий() Цикл
         
         Если Результат.КВД            = Перечисления.КВД.Бюджет Тогда
              ПоБюджетуНачалоДня       = ПоБюджетуНачалоДня       + Результат.СальдоНач;
         Иначе   
              ПоВнебюджетуНачалоДня    = ПоВнебюджетуНачалоДня    + Результат.СальдоНач;
         КонецЕсли;  
         
    КонецЦикла;
     
     // Изменение запроса в случае детализации по записям
     Если РазвернутьАналитику Тогда
          КорСубконтоДляДетализации = "Обороты.КорСубконто2     КАК КоррСубконто,";
          Периодичность             = "Запись";
     Иначе   
          КорСубконтоДляДетализации = "";
          Периодичность             = "Регистратор"; 
     КонецЕсли;  
     //----------------------------
     
     // Заполнение строк документа
     ТаблСтрокиДок       = СтрокиДокумента.Выгрузить();
     
     ТекстЗапроса = "
     |ВЫБРАТЬ
     | ВЫБОР КОГДА СЧЕТ=&счет02 
     |тогда
     |    &Счет02
     | иначе 
     |  Обороты.КорСчет
     |Конец КАК КоррСчет " + КорСубконтоДляДетализации + ",
     |       Обороты.СуммаОборотДт          КАК ДО,
     |       Обороты.СуммаОборотКт          КАК КО,
     |       Обороты.КВД                    КАК КВД,
     |       Обороты.Регистратор            КАК ДокументКО,
     |       Обороты.Период                 КАК Период,";
 
     Если Периодичность = "Регистратор" Тогда
         ТекстЗапроса = ТекстЗапроса + "
     |      ВложенныйЗапрос.КоличествоКВД   КАК КоличествоКВД";
     Иначе
             ТекстЗапроса = ТекстЗапроса + "
     |      1                               КАК КоличествоКВД";
     КонецЕсли;
     ТекстЗапроса = ТекстЗапроса + "
     |ИЗ 
     |       РегистрБухгалтерии.ЕПСБУ.Обороты(
     |                              &НачПериода,
     |                              &КонПериода,
     |                              " + Периодичность + ",
     |                              Счет В (&СчетКассы),
     |                              ,
     |                             " + ФильтрПоОрганизациям + ",
     |                              ,         )
     |                              КАК Обороты
     |";
 
     
     Если Периодичность = "Регистратор" Тогда
         ТекстЗапроса = ТекстЗапроса + "
         |  ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
         |      КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ЕПСБУОбороты.КВД) КАК КоличествоКВД,
         |      ЕПСБУОбороты.Регистратор КАК Регистратор
         |  ИЗ
         |      РегистрБухгалтерии.ЕПСБУ.Обороты(&НачПериода,
         |                                       &КонПериода, 
         |                                       Регистратор, 
         |                                       Счет В (&СчетКассы),
         |                                       , 
         |                                       " + ФильтрПоОрганизациям  + ",
         |                                       , ) КАК ЕПСБУОбороты
         |  
         |  СГРУППИРОВАТЬ ПО
         |      ЕПСБУОбороты.Регистратор) КАК ВложенныйЗапрос
         |  ПО Обороты.Регистратор = ВложенныйЗапрос.Регистратор 
         |";
     КонецЕсли; 
     ТекстЗапроса = ТекстЗапроса + "
     
     |УПОРЯДОЧИТЬ ПО
     |      Обороты.Период
     |";
     
     ЗапросОбороты       = Новый Запрос(ТекстЗапроса);
     ЗапросОбороты.УстановитьПараметр("НачПериода",  НачалоДня(Дата));
     ЗапросОбороты.УстановитьПараметр("КонПериода",  КонецДня(Дата));
     СчетаКассы=Новый СписокЗначений;
     СчетаКассы.Добавить(ПланыСчетов.ЕПСБУ.НайтиПоКоду("201.35"));
     СчетаКассы.Добавить(ПланыСчетов.ЕПСБУ.НайтиПоКоду("02.3"));
     ЗапросОбороты.УстановитьПараметр("счет02",ПланыСчетов.ЕПСБУ.НайтиПоКоду("02.3"));
     ЗапросОбороты.УстановитьПараметр("СчетКассы",   СчетаКассы);
     ЗапросОбороты.УстановитьПараметр("Организация", Учреждение);
0
Roman2408
4 / 4 / 1
Регистрация: 04.04.2013
Сообщений: 117
15.08.2013, 15:28  [ТС] 8
Вот что получается в результате выполнения запроса
0
Миниатюры
Таблица значений  
duk337
2951 / 1763 / 82
Регистрация: 03.11.2011
Сообщений: 8,280
15.08.2013, 16:11 9
Надо запрос в порядок привести. Игривая мысль программера слишком запутана.
Начните с
ВЫБРАТЬ
| ВЫБОР КОГДА Остатки.КВД=Значение(Перечисление.КВД.Бюджет) ТОГДА Остатки.СуммаОстаток ИНАЧЕ 0 КОНЕЦ КАК БюджетНачалоДня,
ВЫБРАТЬ
| ВЫБОР КОГДА Остатки.КВД=Значение(Перечисление.КВД.ВнеБюджет) ТОГДА Остатки.СуммаОстаток ИНАЧЕ 0 КОНЕЦ КАК ВнеБюджетНачалоДня
....
СГРУППИРОВАТЬ
...
Получаете две готовые суммы, а дальше просто сложно понять по тексту, что должно происходить. Зачем такие выверты? Почему нельзя получить максимальную детализацию?

Добавлено через 7 минут
т.е. я имею в виду текст запроса без конкатенаций, а с использованием подстановок и СтрЗаменить(). А так ничерта не разберёшь
0
Roman2408
4 / 4 / 1
Регистрация: 04.04.2013
Сообщений: 117
15.08.2013, 18:47  [ТС] 10
ну это типовой документ такой

Добавлено через 20 секунд
чуток только подправлен
0
duk337
2951 / 1763 / 82
Регистрация: 03.11.2011
Сообщений: 8,280
15.08.2013, 21:26 11
да я понял всё... чуток гвоздиком поковыряли... мастера, блин. Я бы привёл в порядок - но это на абстракных метаданных займёт минут 40, а у меня их нет. Давай сам: включай алгоритмическую логику и попробуй сам напейсать запрос, чтоб вернул всё в готовом виде для загрузки в ТЧ.
0
15.08.2013, 21:26
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.08.2013, 21:26

Таблица значений
Всем доброго времени суток. Как сделать чтобы таблица значений была видна в нескольких процедурах?

Вн обработка, Таблица значений
Доброго времени суток форумчане! У меня такой вопрос: При нажатии кнопки Заполнить...

Таблица значений, НайтиЗначение
Подскажите, плз, что не так? Мне нужно получать значения из найденной строки, а выходит, что...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru