Имя: Пароль:
1C
1С v8
Помогите разобраться в коде
0 keller
 
21.05.12
08:35
Я сделал внешнюю печатную форму для акта сверки. добавлял функционал группировки по договорам. Я делаю для Бухгалтерии Казахстана. Это аналог Бухгалтерии предприятия. В последней этот функционал есть. Но у нас акт сверки более информативен и все сделано через цикл. А в российской через запрос.

вопрос такой.

МаксИндекс = Макс(ПоДаннымОрганизации.Количество(), ПоДаннымКонтрагента.Количество()) - 1;
   Для Инд = 0 По МаксИндекс Цикл
       Если Инд < ПоДаннымОрганизации.Количество() Тогда
           СтрокаОрганизации = ПоДаннымОрганизации[Инд];
           ------------------------------------            
           РегистраторПредставление = "";
           Если не СтрокаОрганизации.Документ = Неопределено Тогда
               
               РегистраторПредставление =  СтрокаОрганизации.Документ.Метаданные().Синоним +" "
                                                               + ОбщегоНазначения.ПолучитьНомерНаПечать(СтрокаОрганизации.Документ, глСписокПрефиксовУзлов) + " от "
                                                               +  Формат(СтрокаОрганизации.Документ.Дата, "ДФ=dd.MM.yyyy");
                                                               
               Если СтрокаОрганизации.Документ.Метаданные().Реквизиты.Найти("ВидВходящегоДокумента") <> Неопределено Тогда
                   Если ЗначениеЗаполнено(СтрокаОрганизации.Документ.НомерВходящегоДокумента)  И ЗначениеЗаполнено(СтрокаОрганизации.Документ.ДатаВходящегоДокумента) Тогда
                   РегистраторПредставление = РегистраторПредставление + ", " + СтрокаОрганизации.Документ.ВидВходящегоДокумента +
                                                                       " № вх. " + СтрокаОрганизации.Документ.НомерВходящегоДокумента + " от " + Формат(СтрокаОрганизации.Документ.ДатаВходящегоДокумента,"ДФ=dd.MM.yyyy");  
                   КонецЕсли;    
               КонецЕсли;
                                                   
           КонецЕсли;    
           
           ОбластьОбороты.Параметры.РегистраторПредставление = РегистраторПредставление;


Это открывок из казахстанского кода.

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

Мне нужно как-то влезть в запрос и изменить РегистраторПредставление. Должно получится примерно так: Поступление ТМЗ и услуг 376 от 06.01.2012, Расходная накладная № вх. 03/1 от 06.01.2012
1 butterbean
 
21.05.12
08:38
в запросе так не получится, тем более у тебя там похоже итоги по регистратору...
собирай строку сам
2 andrewks
 
21.05.12
08:41
"Но у нас акт сверки более информативен и все сделано через цикл. А в российской через запрос. "
это пять
3 keller
 
21.05.12
08:50
(2) в российской более удобно. и более профессионально. но у нас более информативен вывод, но больно усложнен код. Я же совета прошу. Неуместны эти смешки.
4 keller
 
21.05.12
08:51
(1) я неправильно выразился - не в запросе, а как обработать результат выборки чтоб получить результат. Плизз.
5 Rizhij_Nikitos
 
21.05.12
08:53
(4) извините, а что у вас делает щас данный код казахстанский?
6 keller
 
21.05.12
08:55
(4) Выхлоп примерно такой у казахстанского
_________________________________________
Поступление ТМЗ и услуг 376 от 06.01.2012,
Расходная накладная № вх. 03/1 от 06.01.2012
_________________________________________

а у российского

_________________________________________
Поступление ТМЗ и услуг 376 от 06.01.2012
________________________________________
7 andrewks
 
21.05.12
08:57
(3) какие смешки? выражайся яснее, а то нифига непонятно
8 andrewks
 
21.05.12
09:00
(6) ну так ты сам привёл отрывок формирования текстового представления, в чём проблема? вставь его в свой код, немного допили.

вот здесь:
 СписокДокументов.Добавить(новый структура("ДатаДокумента,РегистраторПредставление,Регистратор,СуммаОборотДт,СуммаОборотКт",
                   ОбходПоДокументам.Дата,ОбходПоДокументам.Представление,ОбходПоДокументам.Документ,ОбходПоДокументам.СуммаДогДт,ОбходПоДокументам.СуммаДогКт));
9 Rizhij_Nikitos
 
21.05.12
09:01
(6) я тоже согласен с (7), я задачи че то не понял, ну выходит у тебя не красивое представление, сделай его сам когда структуру добавялешь
СписокДокументов.Добавить(новый структура("ДатаДокумента,РегистраторПредставление,Регистратор,СуммаОборотДт,СуммаОборотКт",
                   ОбходПоДокументам.Дата,"Тута твое представление с текущим"+ОбходПоДокументам.Представление,ОбходПоДокументам.Документ,ОбходПоДокументам.СуммаДогДт,ОбходПоДокументам.СуммаДогКт));
10 keller
 
21.05.12
09:43
(9) в КЗ-коде происходит обращение к метаданным строк табличной части: СтрокаОрганизации.Документ.Метаданные(), СтрокаОрганизации.Документ.НомерВходящегоДокумента и пр.. как мне правильно обратится результату выборки как к объекту?

Так как если я обращаюсь ОбходПоДокументам.Документ.ДатаВходящегоДокумента то выходит ошибка "Значение не является значением объектного типа (НомерВходящегоДокумента)
"

Извиняйте за не совсем проф. язык. Сделайте скидку на неопытность.
11 Rizhij_Nikitos
 
21.05.12
11:15
(10) у тебя видать ссылки, а тебе нужно получить объект, чтобы получить объект, тебе нужно сделать так

ТвойОбъект = ОбходПоДокументам.Документ.ПолучитьОбъект();
И дальше работаешь с твоимобъектом как надо.

Взял поле ОбходПоДокументам.Документ потому, что это регистратор, а значит точно ссылка на документ.
Пробуй, надеюсь ты меня понял