Имя: Пароль:
1C
1С v8
Корреспонденция
0 zippygrill
 
15.08.11
09:50
Ребята доброе утро.
переделываю штатные правила конвертации Acc77_Acc82 под УПП8.2
наткнулся над строкой:

Для каждого Корреспонденция из Объект[ИмяТабличнойЧасти] Цикл
.....

Мне слово Корреспонденция из Бухг совсем чужая. Какое соответсвие у нее в УПП?
вот кусок откуда взял:


ИмяТабличнойЧасти = Параметры.ПараметрыАлгоритмов.ИмяТабличнойЧасти;
ИмяСчета  = Параметры.ПараметрыАлгоритмов.ИмяСчета;
ИмяСубконто = Параметры.ПараметрыАлгоритмов.ИмяСубконто;

Если ПустоеЗначение(ИмяТабличнойЧасти) = 0 Тогда
   //обрабатываем табличную часть
   Для каждого Корреспонденция из Объект[ИмяТабличнойЧасти] Цикл
       
       мСведенияОСчетах = Новый Соответствие;
       СведенияОСчете = БухгалтерскийУчетДополнительный.ПолучитьСведенияОСчете(мСведенияОСчетах, Корреспонденция[ИмяСчета]);
1 zippygrill
 
15.08.11
09:52
за тупые вопросы за ранее приношу свои извинения.
2 zippygrill
 
15.08.11
10:00
вверх
3 butterbean
 
15.08.11
10:02
(2) вопрос настолько тупой, что просто непонятно что ты спрашиваешь
4 mikecool
 
15.08.11
10:10
Для каждого Корреспонденция из Объект[ИмяТабличнойЧасти]
при каждой итерации в "Корреспонденция" будет очередная строка ТЧ
5 zippygrill
 
15.08.11
10:17
что это за объект или "слово" - Корреспонденция?
(4)глянул в общий модуль БухгалтерскийУчетДополнительный.ПолучитьСведе.... разобрался. Передается счет(коресспондирующий счет).
спс.
6 Naumov
 
15.08.11
10:25
(5) В данном случае Корреспонденция - строка ТаблицыЗначений. не больше, ни меньше.
а по сути соответствует записи регистра бух-ии.
7 zippygrill
 
15.08.11
11:31
продолжает ругатся на

Переменная не объявлена как массив (Корреспонденция)

отсюда начинается:
Если ПустоеЗначение(ИмяТабличнойЧасти) = 0 Тогда
   //обрабатываем табличную часть
   Для каждого Корреспонденция из Объект[ИмяТабличнойЧасти] Цикл
       
       мСведенияОСчетах = СоздатьОбъект("СписокЗначений");
       СведенияОСчете = Объект.ПолучитьСведенияОСчете(мСведенияОСчетах, Корреспонденция[ИмяСчета]);
8 zippygrill
 
15.08.11
11:38
дай подниму
9 zippygrill
 
15.08.11
12:05
еще
10 zippygrill
 
15.08.11
12:20
ап
11 GenV
 
15.08.11
12:24
(10) Добавь в обработчик вывод через Сообщить типа и значения Корреспонденция, найдешь где ошибка. Или в отладчике.
12 zippygrill
 
15.08.11
12:50
(11) V77Exp.ert даже не открывается ))
13 zippygrill
 
15.08.11
12:51
естественно переделал для 77:

Если ПустоеЗначение(ИмяТабличнойЧасти) = 0 Тогда
   //обрабатываем табличную часть
       КолЭлементов = ИмяТабличнойЧасти.Количество();
   Для Корреспонденция = 0 по Объект.[КолЭлементов - 1] Цикл
14 Alexandr Puzakov
 
15.08.11
12:56
На месте "Корреспонденция" могло быть что угодно.Могло быть так:

Для каждого Пиндюлина из Объект[ИмяТабличнойЧасти] Цикл

или так

Для каждого Фиговина из Объект[ИмяТабличнойЧасти] Цикл

а то и так

Для каждого Хренотень из Объект[ИмяТабличнойЧасти] Цикл

Это лишь имя переменной, в которую помещается строка табличной части...
15 zippygrill
 
15.08.11
12:58
(14) ну понятно уже))
16 GenV
 
15.08.11
12:58
(13) Что-то код (13) непохож по функционалу на (7).
Если не открывается, значит неправильно код написал, КД тут не причем.
17 Alexandr Puzakov
 
15.08.11
12:59
Корреспонденция[ИмяСчета] должно быть
Корреспонденция[<строковый литерал имени колонки табличной части>]
18 zippygrill
 
15.08.11
13:01
(16) вот с начала:


ИмяТабличнойЧасти = Параметры.ПараметрыАлгоритмов.ИмяТабличнойЧасти;
ИмяСчета  = Параметры.ПараметрыАлгоритмов.ИмяСчета;
ИмяСубконто = Параметры.ПараметрыАлгоритмов.ИмяСубконто;

Если ПустоеЗначение(ИмяТабличнойЧасти) = 0 Тогда
   //обрабатываем табличную часть
   КолЭлементов = ИмяТабличнойЧасти.Количество();
   Для Корреспонденция = 0 по Объект[КолЭлементов - 1] Цикл
       
   мСведенияОСчетах = СоздатьОбъект("СписокЗначений");
   СведенияОСчете = Объект.ПолучитьСведенияОСчете(мСведенияОСчетах, Корреспонденция[ИмяСчета]);
19 Alexandr Puzakov
 
15.08.11
13:02
КолЭлементов = ИмяТабличнойЧасти.ИмяТабличнойЧасти.Количество();
Для Корреспонденция = 0 по КолЭлементов - 1 Цикл

    Значение = Объект.ИмяТабличнойЧасти[КолЭлементов - 1][<имя нужнойколонки>];
    . . .

КонецЦикла;
20 Alexandr Puzakov
 
15.08.11
13:03
КолЭлементов = Объект[ИмяТабличнойЧасти].Количество();
21 Alexandr Puzakov
 
15.08.11
13:05
(18)

ИмяТабличнойЧасти = Параметры.ПараметрыАлгоритмов.ИмяТабличнойЧасти;
ИмяСчета  = Параметры.ПараметрыАлгоритмов.ИмяСчета;
ИмяСубконто = Параметры.ПараметрыАлгоритмов.ИмяСубконто;

Если ПустоеЗначение(ИмяТабличнойЧасти) = 0 Тогда
   //обрабатываем табличную часть

   КолЭлементов = Объект[ИмяТабличнойЧасти].Количество();
   Для Корреспонденция = 0 по КолЭлементов Цикл
       
   мСведенияОСчетах = СоздатьОбъект("СписокЗначений");
   СведенияОСчете = Объект.ПолучитьСведенияОСчете(мСведенияОСчетах, Корреспонденция[<имя колонки>]);
22 Alexandr Puzakov
 
15.08.11
13:05
Тьфу ты,

Для Корреспонденция = 0 по КолЭлементов - 1 Цикл
23 Alexandr Puzakov
 
15.08.11
13:06
А вообще какая-то куета получается. Что мы получаем-то? Почему список значений внутри цикла создается?
24 zippygrill
 
15.08.11
13:10
(23) нужно соответствие счетов чтобы передавать в функцию ПолучитьСведенияОСчете(СведенияОСчетах, Счет) из общего модуля
25 Alexandr Puzakov
 
15.08.11
13:16
(24) так эта функция получается нифига не в общем модуле, а в модуле объекта...
26 zippygrill
 
15.08.11
13:21
вообще-то она в
БухгалтерскийУчетДополнительный.ПолучитьСведенияОСчете(СведенияОСчетах, Счет) Экспорт
27 Alexandr Puzakov
 
15.08.11
13:25
(26) ну тогда нужно вместо

СведенияОСчете = Объект.ПолучитьСведенияОСчете(мСведенияОСчетах, Корреспонденция[<имя колонки>])

писать

СведенияОСчете = БухгалтерскийУчетДополнительный.ПолучитьСведенияОСчете(мСведенияОСчетах, Корреспонденция[<имя колонки>])
28 GenV
 
15.08.11
13:25
(18) Это у тебя на стороне 7.7 или 8?!
ЗЫ В 7.7 у документов только одна табличная часть и к ней по имени не обращаются, количество строк - КоличествоСтрок(), на строку нужно сначала спозиционироваться ПолучитьСтрокуПоНомеру(). На сколько помню.
29 aka AMIGO
 
15.08.11
13:27
ЗЫ. correspond
   соответствовать, согласовываться, соотноситься
   совпадать
   быть аналогичным

корреспондировать счета ПС могут по дебету и по кредиту,
а в самом ПС (бумажном варианте) каждому счету расписана подробная допустимая корреспонденция счетов.

в какой-то бухконфе даже наметки были на проверку и подстановку корресп.счетов.. давно не видел..
30 zippygrill
 
15.08.11
13:33
(28) Алгоритм вызывается из "ПослеЗагрузки". Тогда я ничего не понимаю.
31 Alexandr Puzakov
 
15.08.11
13:33
Тащи сюды текст функции ПолучитьСведенияОСчете, ща разберемся.
32 zippygrill
 
15.08.11
13:35
(31) ну это штатная функция 1с))) не доверяещь разработчикам? ))
(28) + Если алгоритм выполняется в послезагрузки тогда почему елементарный ЗначениеЗаполнено не понимает??
33 zippygrill
 
15.08.11
13:35
*доверяешь
34 Alexandr Puzakov
 
15.08.11
13:36
(32) доверяю, просто мне нужно знать, чего она там вытворяет.
35 GenV
 
15.08.11
13:38
(30) Еще раз. Ошибки бывают синтаксические и в алгоритме. Синтаксическая ошибка в 7.7 проверяется синтаксическим контролем модуля обработки. Алгоритмическая ошибка возникнет при выполнении кода обработки. Соотв. совершенно разные тексты ошибок. Сначала определись где у тебя ошибка возникает.
ЗЫ При загрузке без проблем через Сообщить можно проверить ...
36 zippygrill
 
15.08.11
13:42
(34) она должно быть и в твоей конфе
(35) ок. В Алгоритмах КД на каком языке нужно тогда писать, ВООБЩЕ? под 7.7 или 8.2(к примеру)
37 GenV
 
15.08.11
13:44
(36) Если у тебя источник 7.7, значит все обработчики выгрузки будут выполняться в 7.7. Если у тебя приемник 8, то все обработчики загрузки будут выполнятся только после выгрузки из 7.7 уже в 8 (т.е. код 8 в обработчиках загрузки и 7.7 в обработчиках выгрузки).
38 Alexandr Puzakov
 
15.08.11
13:46
(36) у мене нет этой конфы, я сейчас не на работе.
39 zippygrill
 
15.08.11
13:51
(38) повери дело не в этой функции + она не маленкая))
(37) вот к примеру написано на 8

ИмяТабличнойЧасти = Параметры.ПараметрыАлгоритмов.ИмяТабличнойЧасти;
ИмяСчета  = Параметры.ПараметрыАлгоритмов.ИмяСчета;
ИмяСубконто = Параметры.ПараметрыАлгоритмов.ИмяСубконто;

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

вот ошибка http://dl.dropbox.com/u/9627383/error8.jpg
40 zippygrill
 
15.08.11
14:05
41 Alexandr Puzakov
 
15.08.11
14:15
(40) так ведь это в семерке... Перепиши код под 7.7
42 zippygrill
 
15.08.11
14:17
(41) данный алгоритм вызывается из обработчика ПослеЗагрузки. то ести этот код выполняется в 8 уже и не надо на 7.7 переписать.
43 GenV
 
15.08.11
14:27
(40) Где же он в 8 выполняется? В 7.7. Поэтому и ругается ... Может модуль обработки не обновил, может правила не обновил или обработчик лишний создал с кодом 8. "Синтаксическая ошибка в 7.7 проверяется синтаксическим контролем модуля обработки".
44 Alexandr Puzakov
 
15.08.11
14:29
(42) так ведь ругается-то семерка...
45 Alexandr Puzakov
 
15.08.11
14:30
+ хотя бы по ругани семерки можно было догадаться, что этот код выполняется на ее стороне ;)
46 zippygrill
 
15.08.11
14:32
(43) полностью сконфузил меня.
(45) ну да 7.7. Выгрузку не могу инициализировать.
47 zippygrill
 
15.08.11
14:47
Ощибка:
СведенияОСчете = Объект.ПолучитьСведенияОСчете(мСведенияОСчетах, Корреспонденция<<?>>[ИмяСчета]);
{C:\USERS\USR\DESKTOP\МЦБ\ПРАВИЛА ВЫГРУЗКИ\20110811\V77EXP.ERT(145)}: Переменная не объявлена как массив (Корреспонденция)

Отсюда:

ИмяТабличнойЧасти = Параметры.ПараметрыАлгоритмов.ИмяТабличнойЧасти;
ИмяСчета  = Параметры.ПараметрыАлгоритмов.ИмяСчета;
ИмяСубконто = Параметры.ПараметрыАлгоритмов.ИмяСубконто;

Если ПустоеЗначение(ИмяТабличнойЧасти) = 0 Тогда
   //обрабатываем табличную часть
   КолЭлементов = ИмяТабличнойЧасти.Количество();
   Для Корреспонденция = 0 по КолЭлементов - 1 Цикл
       
       мСведенияОСчетах = СоздатьОбъект("ТаблицаЗначений");
       СведенияОСчете = Объект.ПолучитьСведенияОСчете(мСведенияОСчетах, Корреспонденция[ИмяСчета]);
48 Alexandr Puzakov
 
15.08.11
14:53
(45) все правильно, ты ее только что определил как числовую переменную (счетчик), и тут же пытаешься обратиться через []...
49 Alexandr Puzakov
 
15.08.11
14:54
(48) к (47)
50 zippygrill
 
15.08.11
14:58
(49) СведенияОСчете = Объект.ПолучитьСведенияОСчете(мСведенияОСчетах, Корреспонденция.ИмяСчета);
да нет?
51 Alexandr Puzakov
 
15.08.11
15:02
(50) в твоем случае и так ты к нему не обратишься, т. к. Корреспонденция - счетчик, он будет содержать значения:
0
1
2
3
4
...

Тут просто не к чему через точку обращаться...
52 zippygrill
 
15.08.11
15:08
(51) тогда просто:
СведенияОСчете = Объект.ПолучитьСведенияОСчете(мСведенияОСчетах, Корреспонденция);

??
53 Alexandr Puzakov
 
15.08.11
15:10
(52) что-то мне подсказывает, что туда должен счет/имя счета/код счета передаваться...
54 zippygrill
 
15.08.11
15:14
ИмяТабличнойЧасти = Параметры.ПараметрыАлгоритмов.ИмяТабличнойЧасти;
ИмяСчета  = Параметры.ПараметрыАлгоритмов.ИмяСчета;
ИмяСубконто = Параметры.ПараметрыАлгоритмов.ИмяСубконто;

Если ПустоеЗначение(ИмяТабличнойЧасти) = 0 Тогда
   //обрабатываем табличную часть
   КолЭлементов = ИмяТабличнойЧасти.Количество();
   Для Корреспонденция = 0 по КолЭлементов - 1 Цикл
       
       мСведенияОСчетах = СоздатьОбъект("ТаблицаЗначений");
       СведенияОСчете = Объект.ПолучитьСведенияОСчете(мСведенияОСчетах, ИмяСчета);
       Для СчетчикСубконто = 1 По 3 Цикл
           Для СчетчикСчета = 1 по СведенияОСчете.КоличествоСубконто Цикл
               Если (Корреспонденция[ИмяСубконто+СчетчикСубконто] = СведенияОСчете["ТипСубконто"+СчетчикСчета].ПривестиЗначение(Корреспонденция[ИмяСубконто+СчетчикСубконто]))
                     и (СчетчикСчета <> СчетчикСубконто) и (ЗначениеЗаполнено(Корреспонденция[ИмяСубконто+СчетчикСубконто])) Тогда
                   Субконто = Корреспонденция[ИмяСубконто+СчетчикСчета];
                   Корреспонденция[ИмяСубконто+СчетчикСчета] = Корреспонденция[ИмяСубконто+СчетчикСубконто];
                   Корреспонденция[ИмяСубконто+СчетчикСубконто] = Субконто;
               КонецЕсли;
           КонецЦикла;
       КонецЦикла;

       Для СчетчикСубконто = 1 По 3 Цикл
           Если СведенияОСчете.КоличествоСубконто >= СчетчикСубконто Тогда
               Корреспонденция[ИмяСубконто+СчетчикСубконто] = СведенияОСчете["ТипСубконто"+СчетчикСубконто].ПривестиЗначение(Корреспонденция[ИмяСубконто+СчетчикСубконто]);

           Иначе

               Корреспонденция[ИмяСубконто+СчетчикСубконто] = Неопределено;
           КонецЕсли;
       КонецЦикла;        
   КонецЦикла;    
   
Иначе
   //обрабатываем объект
   Корреспонденция = Объект;    
   мСведенияОСчетах = Новый Соответствие;
   СведенияОСчете = БухгалтерскийУчетДополнительный.ПолучитьСведенияОСчете(мСведенияОСчетах, Корреспонденция[ИмяСчета]);
   Для СчетчикСубконто = 1 По 3 Цикл
       Для СчетчикСчета = 1 по СведенияОСчете.КоличествоСубконто Цикл
           Если (Корреспонденция[ИмяСубконто+СчетчикСубконто] = СведенияОСчете["ТипСубконто"+СчетчикСчета].ПривестиЗначение(Корреспонденция[ИмяСубконто+СчетчикСубконто]))
                 и (СчетчикСчета <> СчетчикСубконто)  и (ЗначениеЗаполнено(Корреспонденция[ИмяСубконто+СчетчикСубконто])) Тогда
               Субконто = Корреспонденция[ИмяСубконто+СчетчикСчета];
               Корреспонденция[ИмяСубконто+СчетчикСчета] = Корреспонденция[ИмяСубконто+СчетчикСубконто];
               Корреспонденция[ИмяСубконто+СчетчикСубконто] = Субконто;
           КонецЕсли;
       КонецЦикла;
   КонецЦикла;

   Для СчетчикСубконто = 1 По 3 Цикл
       Если СведенияОСчете.КоличествоСубконто >= СчетчикСубконто Тогда
           Корреспонденция[ИмяСубконто+СчетчикСубконто] = СведенияОСчете["ТипСубконто"+СчетчикСубконто].ПривестиЗначение(Корреспонденция[ИмяСубконто+СчетчикСубконто]);

       Иначе
           Корреспонденция[ИмяСубконто+СчетчикСубконто] = Неопределено;
       КонецЕсли;
   КонецЦикла;    
КонецЕсли;
55 wertyu
 
15.08.11
15:17
(54) и с какой целью надо было копировать код v8 в обработчик для v7 ?
56 Alexandr Puzakov
 
15.08.11
15:17
(54) ну вот, а теперь осталось оттуда убрать весь восьмерочный код :)
57 GenV
 
15.08.11
15:19
(54) Определился при выгрузке или при загрузке должен код выполняться и что этот код должен делать?
58 zippygrill
 
15.08.11
15:28
(57) единственный обработчик который вызывает данный алгоритм это ПослеЗагрузки ПКО. в другом месте его не встретил. Честно говоря я еще на него смотрю и темный лес((
(55) потому-что не дает выгружать.
59 GenV
 
15.08.11
15:32
(58) Тогда его !не должно быть! в обработчиках выгрузки и соотв. обработке 7.7.
ЗЫ Судя по коду - едет проверка правильности загруженных субконто для счета и их перестановка или очистка.
60 zippygrill
 
15.08.11
15:41
(59) ну .... не я его написал а 1С. я лиш пытаюсь понимать его и пользоватся.
Кaк может человек ожидaть, что его мольбaм о снисхождении ответит тот, кто превыше, когдa сaм он откaзывaет в милосердии тем, кто ниже его? Петр Трубецкой