Имя: Пароль:
1C
1C 7.7
v7: снова глюки с реквизитами документа
0 Лалым
 
12.08.15
21:20
Перебираю в цикле реквизиты и получаю их значения
                    Для Инд = 2 По МойДок.РеквизитТабличнойЧасти() Цикл
                        Имя = Метаданные.Документ("ПайРасчет").РеквизитТабличнойЧасти(Инд).Синоним;  
                        Реквизит = Метаданные.Документ("ПайРасчет").РеквизитТабличнойЧасти(Инд).Идентификатор;;
                        Сумма = Число(Док.ПолучитьАтрибут(Реквизит));
                        Если Сумма <> 0 Тогда
                            Таб.ВывестиСекцию("Строка");
При выполнении выдает
Сумма = Число(Док.ПолучитьАтрибут(Реквизит));
{Отчет.КорешкиПайЗемля.Форма.Модуль(20)}: Неверное имя атрибута
При этом если задаю цикл не со второго атрибута а с третьего все идет нормально
Первый реквизит  = "Пайщик"
второй реквизит = "Всальдо"
при просмотре в отладчике все выдается  так как стоит в конфигураторе
1 HawkEye
 
12.08.15
21:22
(0) итог по реквизиту включен?
2 Лалым
 
12.08.15
21:23
щас проверю
по идее должен быть
3 Лалым
 
12.08.15
21:24
да включен (1)
4 HawkEye
 
12.08.15
21:27
(3) что такое МойДок и Док?
5 Лалым
 
12.08.15
21:30
(4) Док - это текущий документ они там перебираются
А МойДок это
    МойДок = Метаданные.Документ("ПайРасчет");
6 HawkEye
 
12.08.15
21:35
(3) а вообще пофигу.. флаг не важен..

(5) значит где-то тут и порылась собака... показывай весь код
7 Лалым
 
12.08.15
21:39
(6) Процедура Сформировать()
    Таб = СоздатьОбъект("Таблица");
    формРеквизиты = СоздатьОбъект("СписокЗначений");
    МойДок = Метаданные.Документ("ПайРасчет");    
    ДатаНачала = НачДата.Дата1;    
    ДатаКонца = КонДата.Дата2;  
    Док = СоздатьОбъект("Документ.ПайРасчет");
    Док.ВыбратьДокументы(ДатаНачала, ДатаКонца);
    Пока Док.ПолучитьДокумент() = 1 Цикл  
        сообщить("док" + Док + "    " + док.ДатаЗарплаты);
        Если (Док.ДатаЗарплаты.Дата1 >= ДатаНачала) И (Док.ДатаЗарплаты.Дата1 <= ДатаКонца) Тогда
            Док.ВыбратьСтроки();
            Пока Док.ПолучитьСтроку() = 1 Цикл
                Если  Док.Пайщик = ВыбСотрудник Тогда
                    Таб.ВывестиСекцию("Шапка");
                    Для Инд = 1 По МойДок.РеквизитТабличнойЧасти() Цикл
                        Имя = Метаданные.Документ("ПайРасчет").РеквизитТабличнойЧасти(Инд).Синоним;  
                        Реквизит = Метаданные.Документ("ПайРасчет").РеквизитТабличнойЧасти(Инд).Идентификатор;;
                        Сумма = Число(Док.ПолучитьАтрибут(Реквизит));
                        Если Сумма <> 0 Тогда
                            Таб.ВывестиСекцию("Строка");
                            Если (Реквизит = "Начислено") или (Реквизит = "Удержано") или (Реквизит = "Квыдаче")   Тогда
                                Таб.ВывестиСекцию("риска");
                            КонецЕсли;
                        КонецЕсли;
                    КонецЦИкла;
                    Таб.ВывестиСекцию("Отрыв");
                КонецЕсли;
            КонецЦикла;
        КонецЕсли;
    КонецЦикла;
    Таб.Показать()
КонецПроцедуры
Если ставлю цикл начиная с тройки все работает нормально только выпадает реквизит "ВСальдо" тоесть не показывает входное сальдо, остальные реквизиты показывает так как надо включая секцию "Риска"
8 Лалым
 
12.08.15
21:46
Вставляю сообщить
                    Для Инд = 1 По МойДок.РеквизитТабличнойЧасти() Цикл
                        Имя = Метаданные.Документ("ПайРасчет").РеквизитТабличнойЧасти(Инд).Синоним;  
                        Реквизит = Метаданные.Документ("ПайРасчет").РеквизитТабличнойЧасти(Инд).Идентификатор;;  
                        сообщить("-"+Реквизит+"-");
в результате цикл с 1 выдает
-Пайщик-
-ВСальдо-
Сумма = Число(Док.ПолучитьАтрибут(Реквизит));
{Отчет.КорешкиПайЗемля.Форма.Модуль(21)}: Неверное имя атрибута
Ставлю тройку
Тогда сообщает
-Начислено1-
-Начислено2-
-Начислено-
-Касса-
-СХПро-
-ВоенныйСбор-
-ПН-
-Удержано-
-КВыдаче-
И никаких ошибок
9 HawkEye
 
12.08.15
21:50
(8) прикольно.. надо отладчиком смотреть.. вообще структура рабочая, хотя конечно и несколько кривовата...

выгрузи таб. часть в ТЗ и в ней уже цикл по колонкам организовывай
10 Лалым
 
12.08.15
21:53
Мне из каждого документа нужна только оьтдна строка, по данному пойщику
11 Лалым
 
12.08.15
21:55
тут же прикол в том что  не хочет бпринимать только ОДНО имя реквизита
12 HawkEye
 
12.08.15
22:02
(11) md-ник нужен
13 Лалым
 
12.08.15
22:07
отправил на почту
14 HawkEye
 
12.08.15
22:24
(13)
докПайРасчет 1    Август 2015 г.
-Пайщик-
-ВСальдо-
-Начислено1-
-Начислено2-
-Начислено-
-Касса-
-СХПро-
-ВоенныйСбор-
-ПН-
-Удержано-
-КВыдаче-
15 HawkEye
 
12.08.15
22:27
+14 ты там dd-ник случайно не менял? не переписывал dbf?
16 HawkEye
 
12.08.15
22:28
+15

так попробуй:

    Попытка
                            Сумма = Число(Док.ПолучитьАтрибут(Реквизит));
                        Исключение
                            Сообщить("Ошибка: " + ОписаниеОшибки());
                            Сообщить(Док.ТекущийДокумент());
                        Конецпопытки;
17 GreyK
 
12.08.15
22:30
(0) Студент?
18 GreyK
 
12.08.15
22:32
(9) Издеваешься про "вообще структура рабочая"?
19 HawkEye
 
12.08.15
22:38
(18) что у тебя там не работает?
20 Лалым
 
12.08.15
22:45
(16) попытка обнаруживает тот же самый реквизит.Выдет ошибку ну тперь же просто проскакивает через него, а дальше идет все как надо
21 HawkEye
 
12.08.15
22:46
(20) у тебя что-то с самой БД, а не с кодом..
в (14) работа твоего md-ника...
22 HawkEye
 
12.08.15
22:48
(20) проскакивает в одном документе или во всех?
23 GreyK
 
12.08.15
22:53
(19) Для чего такое писать!? Я понимаю когда есть условие что если в ИД или синониме есть какой-то признак для попадания в выборку. В данном случае я не вижу смысла выборки метаданных.
24 Лалым
 
12.08.15
22:55
(21) щас прогоню проверку БД (22) Во всех
25 Лалым
 
12.08.15
23:00
Проверка и тестирование прошло без единной шероховатости
26 Лалым
 
12.08.15
23:04
(23) ты хочешь сказать что вот так правильней?
            Пока ДокРасчет.ПолучитьДокумент()=1 Цикл
                Если ДокРасчет.ДатаЗарплаты= ДатаЗарплаты Тогда
                    ДокРасчет.ВыбратьСтроки();
                    Пока ДокРасчет.ПолучитьСтроку()=1 Цикл  
                        Если Пайщик = ДокРасчет.Пайщик Тогда
                            Всальдо = ДокРасчет.Всальдо;
                            Начислено1 = ДокРасчет.Начислено1;
                            Начислено2 = ДокРасчет.Начислено2;
                            Начислено = ДокРасчет.Начислено;
                            СХПро = ДокРасчет.СХПро;
                            Касса = ДокРасчет.Касса;
                            ПН = ДокРасчет.ПН;
                            Удержано = ДокРасчет.Удержано;
                            КВыдаче = ДокРасчет.КВыдаче;
                        КонецЕсли
                    КонецЦикла;
                    Таб.ВывестиСекцию("Шапка");
                    Если ВСальдо > 0 Тогда
                        Таб.ВывестиСекцию("ВСальдо1");
                    КонецЕсли;
                    Если ВСальдо < 0 Тогда
                        Таб.ВывестиСекцию("ВСальдо2");
                    КонецЕсли;
                    Если Начислено1 > 0 Тогда
                        Таб.ВывестиСекцию("Начислено1");
                    КонецЕсли;
                    Если Начислено2 > 0 Тогда
                        Таб.ВывестиСекцию("Начислено2");
                    КонецЕсли;
                    Если Начислено > 0 Тогда
                        Таб.ВывестиСекцию("Начислено");
                    КонецЕсли;
                    Если Касса > 0 Тогда
                        Таб.ВывестиСекцию("Касса");
                    КонецЕсли;
                    Если СХПро > 0 Тогда
                        Таб.ВывестиСекцию("СХПро");
                    КонецЕсли;
                    Если ПН > 0 Тогда
                        Таб.ВывестиСекцию("ПН");
                    КонецЕсли;
                    Если Удержано > 0 Тогда
                        Таб.ВывестиСекцию("Удержано");
                    КонецЕсли;
                    Если КВыдаче > 0 Тогда
                        Таб.ВывестиСекцию("КВыдаче1");
                    КонецЕсли;
                    Если КВыдаче < 0 Тогда
                        Таб.ВывестиСекцию("КВыдаче2");
                    КонецЕсли;
                    Таб.ВывестиСекцию("Дно");
                КонецЕсли;
            КонецЦикла;
        КонецЕсли;
    КонецЦикла;
    Таб.Показать();

но это я споткнулся на одном доке с 11 атрибутами
а у если будет 33???
27 HawkEye
 
12.08.15
23:06
(23) вопрос для чего - это не ко мне, ответ на него никак не влияет на саму конструкцию которая по сути является рабочей, коряво написанной, не оптимальной - но рабочей.
28 Кочерга
 
12.08.15
23:07
Судя по ВоенныйСбор - конфа украинская.
Там какие то проблемы с русскими буквами были часто. Связано как-то с локализацией. Поищи, даже на этом форуме было, что-то связанное с буквой С и сортировкой.
Может в этом проблема.
Ну и конечно перебор по метаданным для одного документа - это простите за тавтологию перебор.
29 HawkEye
 
12.08.15
23:09
(26) так что-то совсем не хорошо получиться ))) не надо так делать ))
(24) я создал руками документ.. результат в (14), если у тебя ошибка - надо базу смотреть
30 HawkEye
 
12.08.15
23:10
(26) о! учитывая (28) поменяй название реквизита в копии и проверь )
31 GreyK
 
12.08.15
23:14
(26) Научись хотя-бы объявлять переменные и суммировать их результаты, а потом рассуждай про "правильно и не правильно"
32 Лалым
 
12.08.15
23:15
(28) щас попробую  переписать имя реквизита, строго на русском, да украинская конфа
33 Лалым
 
12.08.15
23:22
Ничего не дало (30) (28)  однозначно на русской раскладке написал,  эфекта никакого
34 GreyK
 
12.08.15
23:26
(32) Я не знаю твоего задания, но посмотрев твой код, я-бы выгрузил ТЧ документа в ТЗ и свернул её по нужным колонкам.
35 Кочерга
 
12.08.15
23:30
Тут почитай http://club-1c.com/topic/2874-совместимость-при-работе-на-windows-7-и-xp/
Чем-то отдаленно похоже.
36 Лалым
 
12.08.15
23:36
(35) Гдюк как то связан с кодировкой Все таки каким образом не разобрался еще
Просто запустил на виртуалльной хрюше и все оказывается летает как анадо, работаю в семере 64  для больших кусков кода стоит виртуалка, под ней крутится опен конф ( он с семерой 64 как то совсем не дружит
(30)  Выходит глюки семеры , на хрюше без сучка без задоринки
37 Лалым
 
12.08.15
23:43
Всем спасибо за участие
это расчетные листки для людей которые сдали в данное хозяйство свой земельный пай.
там одинадцать атрибутов  они бывают пустые и непустые зачем выводить  ненужные атрибуты, надо только те по которым в данном документе были какие то движения.
заодно используя синоним как заголовок для строки колонки я не буду париться с названием показателя,  ну и еще в любой момент может добавиться еще какой нибуть реквизит, так что  каждый раз форму переделывать?
И вообще по сути вопроса я от вас уважаемый ни одного совета кроме коментов не получил.
38 Лалым
 
12.08.15
23:44
(37) Вторая часть для (34)
39 HawkEye
 
12.08.15
23:47
(36) я на win8.1 x64 пробовал
40 HawkEye
 
12.08.15
23:48
(37) при чем тут форма? выгружай в ТЗ и все то-же самое делай в ТЗ
41 Лалым
 
12.08.15
23:54
(40) обясни мне зачем выгружать в ТЗ если мне из дока нужна всего лишь одна строка? я не понимаю
Из ТЗ будет выбирать не прще по моему, и я же писал что использую синоним для вывода как заголовока  на нужном языке и в нужном виде
42 HawkEye
 
13.08.15
07:40
(41) ну начнем с того, что в твоем коде обрабатывается не ОДНА строка, а ВСЕ...
а закончим тем, что если нужна именно ОДНА строка - то как раз ТЗ и нужно, чтобы все подряд не перебирать..

а вот для получения синонима - как раз имеет смысл использовать метаданные, зная идентификатор реквизита (из ТЗ) - получить по нему синоним никаких проблем нет.
43 Лалым
 
14.08.15
06:27
(42) Кажется понял попробую реализовать через выгрузку в ТЗ
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.