Имя: Пароль:
1C
1C 7.7
v7: В печатной форме отчетов неправильно сворачиваются строки
0 alex_reglament
 
09.12.11
20:23
привет всем помогите пожалуйста разобраться что я натворил то такого
ситуация следующая нужно проанализировать документы за период затем в ТЗ выгрузить значения реквизитов документов со следующими идентификаторами
Наименование, количество
да прастите тянуться должно не только за определенный период а еще и по складам
так вот написал следующее но у меня в таблице наименование сворачивается а вот суммы не те
в таблице колонки следующих наименований
Наименование_    суммаПоступления        СуммаРасхода    
Наименование_ = наименование ид табл части документа
суммаПоступления = количество из дока но выбрка должа идти по документам поступления
СуммаРасхода = количество из дока но выбрка должа идти по документам расхода

на форме дока имеются реквизиты
ДатаНач ,
ДатаКон ,
Склад.
кнопки сформировать и закрыть

//======================================================================
Процедура ПриОткрытии()
   ДатаНач = НачМесяца(РабочаяДата());
   ДатаКон = КонМесяца(РабочаяДата());
КонецПроцедуры
//*******************************************
Процедура Сформировать()
   Таблица = СоздатьОбъект("Таблица");
   Таблица.ИсходнаяТаблица("Таблица1");
   Таблица.ВывестиСекцию("Шапка");
   Док = СоздатьОбъект("Документ");
   Док.ВыбратьДокументы(ДатаНач,ДатаКон);
   ТЗ_Приход = СоздатьОбъект("ТаблицаЗначений");
   ТЗ_Приход.НоваяКолонка("ВидДокумента");
   ТЗ_Приход.НоваяКолонка("Наименование");
   ТЗ_Приход.НоваяКолонка("Пришло");
   ТЗ_Приход.НоваяКолонка("Ушло");
   Пока Док.ПолучитьДокумент() > 0 Цикл
       Док.ВыбратьСтроки();
       Пока Док.ПолучитьСтроку() > 0 Цикл
           Если Док.ПометкаУдаления() <> 1 Тогда
               Если Док.Проведен() = 1 Тогда
                   сумма = "";
                   ТЗ_Приход.НоваяСтрока();
                   Если (Док.Вид() = "ГотоваяПродукция") Тогда
                       Если Док.МестоХранения = Склад_ Тогда
                           сумма = Док.Количество;
                           Если сумма <> 0 Тогда
                               ТЗ_Приход.ВидДокумента = Док.Вид();
                               ТЗ_Приход.Наименование = Док.ТМЦ;
                               ТЗ_Приход.пришло = сумма;
                           КонецЕсли;
                       КонецЕсли;
                   КонецЕсли;
                   Если  (Док.Вид() = "ПоступлениеТоваров") Тогда
                       Если Док.МестоХранения = Склад_ Тогда
                           сумма = Док.Количество;
                           Если сумма <> 0 Тогда
                               ТЗ_Приход.ВидДокумента = Док.Вид();
                               ТЗ_Приход.Наименование = Док.ТМЦ;
                               ТЗ_Приход.пришло = сумма;
                           КонецЕсли;
                       КонецЕсли;
                   КонецЕсли;
                   Если Док.Вид() = "ПеремещениеТоваров" Тогда
                       Если Док.СкладПолучатель = Склад_ Тогда
                           Если Док.ВидПеремещенияТовара = Перечисление.ВидПеремещенияТовара.РозницаОпт Тогда
                               сумма = Док.Количество;
                               Если сумма <> 0 Тогда
                                   ТЗ_Приход.ВидДокумента = Док.Вид();
                                   ТЗ_Приход.Наименование = Док.ТМЦ;
                                   ТЗ_Приход.пришло = сумма;
                               КонецЕсли;
                           КонецЕсли;
                       КонецЕсли;
                   КонецЕсли;
                   Если (Док.Вид() = "РасходТовара") Тогда
                       Если Док.МестоХранения = Склад_ Тогда
                           сумма_ = Док.Количество;
                           Если сумма_ <>  0 Тогда
                               ТЗ_Приход.ВидДокумента = Док.Вид();
                               ТЗ_Приход.Наименование = Док.ТМЦ;
                               ТЗ_Приход.Ушло = сумма_;
                           КонецЕсли;
                       КонецЕсли;
                   КонецЕсли;
                   Если Док.Вид() = "ПеремещениеТоваров" Тогда
                       Если Док.СкладОтправитель = Склад_ Тогда
                           Если Док.ВидПеремещенияТовара = Перечисление.ВидПеремещенияТовара.ОптРозница Тогда
                               сумма_ = Док.Количество;
                               Если сумма_ <>  0 Тогда
                                   ТЗ_Приход.ВидДокумента = Док.Вид();
                                   ТЗ_Приход.Наименование = Док.ТМЦ;
                                   ТЗ_Приход.Ушло = сумма_;
                               КонецЕсли;
                           КонецЕсли;
                       КонецЕсли;
                   КонецЕсли;
               КонецЕсли;
           КонецЕсли;
       КонецЦикла;
   КонецЦикла;
   ТЗ_Приход.Свернуть("ВидДокумента,Наименование","пришло,Ушло");
   ТЗ_Приход.ВыбратьСтроки();
   Пока ТЗ_Приход.ПолучитьСтроку() = 1 Цикл
       Наименование_     = ТЗ_Приход.Наименование;
       суммаПоступления = ТЗ_Приход.пришло;
       СуммаРасхода     = ТЗ_Приход.Ушло;
       Таблица.ВывестиСекцию("Строка");
   КонецЦикла;
   Таблица.Опции(0, 0, 2, 5, "Расчет естественной убыли");
   Таблица.Показать("Расчет естественной убыли");
КонецПроцедуры
1 Rie
 
09.12.11
20:30
(0)
Почему у тебя сумма - то строка, то число?
Колонки таблицы значений - типизированы?
2 alex_reglament
 
09.12.11
20:30
что ни кто не поможет?
3 alex_reglament
 
09.12.11
20:30
(1) а что беда в этом?
4 alex_reglament
 
09.12.11
20:31
(1) подскажи как бороться
5 alex_reglament
 
09.12.11
20:35
да прастите
ТЗ_Приход.Свернуть("ВидДокумента,Наименование","пришло,Ушло");
нужно так
ТЗ_Приход.Свернуть("Наименование","пришло,Ушло");

почему сделал так
ТЗ_Приход.Свернуть("ВидДокумента,Наименование","пришло,Ушло");
потому что если сворачивать только наименование тогда наименование заполнено  дапустим приход тоже а вот расход не заполнен хотя он должен быть
ну а когда сворачиваю по виду и наименованию то вродебы все и ок но не красиво изза того что заполнены колонки или приход или расход
ну а во вторых данные не правильны
6 alex_reglament
 
09.12.11
20:35
почему?? ни как понять не могу
7 alex_reglament
 
09.12.11
20:36
странно 496 чел на форуме и ни кто помочь не может
8 alex_reglament
 
09.12.11
20:38
люди ну помогите не зря ж я так подробно все описывал
9 alex_reglament
 
09.12.11
20:38
пожалуйста
10 Rie
 
09.12.11
20:40
(7) Подробно? Был вопрос о типизации колонок таблицы значений. Ответ где?
11 alex_reglament
 
09.12.11
20:42
я не понял прасти смысла типизации колонок
12 Rie
 
09.12.11
20:47
(11) Второй параметр у НоваяКолонка при создании таблицы значений укажи.
И не путай строки и числа.
13 alex_reglament
 
09.12.11
20:49
прасти ты имеешь в виду указать тип?
14 Креатив
 
09.12.11
20:50
(0)Код сам по себе жуткий.
Проверку на пометку удаления убери совсем, на проведение вынеси из цикла по строкам.
Используй конструкции типа Если (Док.Вид() = "ГотоваяПродукция") или (Док.Вид() = "ПоступлениеТоваров") Тогда потому как код внутри обоих условий одинаков.
Ещё лучше будет, если ты научишься пользоваться запросами.
15 Rie
 
09.12.11
20:51
(13) Да.
А как ещё можно понять (12)?
16 Mans
 
09.12.11
20:52
(13)
ТЗ_Приход.НоваяКолонка("Пришло,"Число");
ТЗ_Приход.НоваяКолонка("Ушло","Число);
17 babytype
 
09.12.11
20:55
(0)+ еще лучше будет, если научишься обнулять переменные и вставлять ТЗ_Приход.НоваяСтрока(); туда, где в ТЗ действительно что-то будет записываться.
18 alex_reglament
 
09.12.11
20:57
извини на каждое условие
19 alex_reglament
 
09.12.11
20:57
?
20 alex_reglament
 
09.12.11
20:57
+(18)(17)
21 Rie
 
09.12.11
21:03
IMHO, это - развод.
22 babytype
 
09.12.11
21:03
(18) да, в твоем случае, в каждое условие перед записью в ТЗ. А на самом деле лучше прислушайся к (14)
23 alex_reglament
 
09.12.11
21:10
сделал вро де как в (14)
//======================================================================
Процедура ПриОткрытии()
   ДатаНач = НачМесяца(РабочаяДата());
   ДатаКон = КонМесяца(РабочаяДата());
КонецПроцедуры
//*******************************************
Процедура Сформировать()
   Таблица = СоздатьОбъект("Таблица");
   Таблица.ИсходнаяТаблица("Таблица1");
   Таблица.ВывестиСекцию("Шапка");
   Док = СоздатьОбъект("Документ");
   Док.ВыбратьДокументы(ДатаНач,ДатаКон);
   ТЗ_Приход = СоздатьОбъект("ТаблицаЗначений");
   ТЗ_Приход.НоваяКолонка("ВидДокумента");
   ТЗ_Приход.НоваяКолонка("Наименование");
   ТЗ_Приход.НоваяКолонка("Пришло","Число");
   ТЗ_Приход.НоваяКолонка("Ушло","Число");
   Пока Док.ПолучитьДокумент() > 0 Цикл
       Если Док.Проведен() = 1 Тогда
           Док.ВыбратьСтроки();
           Пока Док.ПолучитьСтроку() > 0 Цикл
               сумма = "";
               Если (Док.Вид() = "ГотоваяПродукция")  или  (Док.Вид() = "ПоступлениеТоваров") Тогда
                   Если Док.МестоХранения = Склад_ Тогда
                       сумма = Док.Количество;
                       Если сумма <> 0 Тогда
                           ТЗ_Приход.НоваяСтрока();
                           ТЗ_Приход.ВидДокумента = Док.Вид();
                           ТЗ_Приход.Наименование = Док.ТМЦ;
                           ТЗ_Приход.пришло = сумма;
                       КонецЕсли;
                   КонецЕсли;
               КонецЕсли;
               Если Док.Вид() = "ПеремещениеТоваров" Тогда
                   Если Док.СкладПолучатель = Склад_ Тогда
                       Если Док.ВидПеремещенияТовара = Перечисление.ВидПеремещенияТовара.РозницаОпт Тогда
                           сумма = Док.Количество;
                           Если сумма <> 0 Тогда
                               ТЗ_Приход.НоваяСтрока();
                               ТЗ_Приход.ВидДокумента = Док.Вид();
                               ТЗ_Приход.Наименование = Док.ТМЦ;
                               ТЗ_Приход.пришло = сумма;
                           КонецЕсли;
                       КонецЕсли;
                   КонецЕсли;
               КонецЕсли;
               Если (Док.Вид() = "РасходТовара") Тогда
                   Если Док.МестоХранения = Склад_ Тогда
                       сумма_ = Док.Количество;
                       Если сумма_ <>  0 Тогда
                           ТЗ_Приход.НоваяСтрока();
                           ТЗ_Приход.ВидДокумента = Док.Вид();
                           ТЗ_Приход.Наименование = Док.ТМЦ;
                           ТЗ_Приход.Ушло = сумма_;
                       КонецЕсли;
                   КонецЕсли;
               КонецЕсли;
               Если Док.Вид() = "ПеремещениеТоваров" Тогда
                   Если Док.СкладОтправитель = Склад_ Тогда
                       Если Док.ВидПеремещенияТовара = Перечисление.ВидПеремещенияТовара.ОптРозница Тогда
                           сумма_ = Док.Количество;
                           Если сумма_ <>  0 Тогда
                               ТЗ_Приход.НоваяСтрока();
                               ТЗ_Приход.ВидДокумента = Док.Вид();
                               ТЗ_Приход.Наименование = Док.ТМЦ;
                               ТЗ_Приход.Ушло = сумма_;
                           КонецЕсли;
                       КонецЕсли;
                   КонецЕсли;
               КонецЕсли;
           КонецЦикла;
       КонецЕсли;
   КонецЦикла;
   ТЗ_Приход.Свернуть("ВидДокумента,Наименование","пришло,Ушло");
   ТЗ_Приход.ВыбратьСтроки();
   Пока ТЗ_Приход.ПолучитьСтроку() = 1 Цикл
       Наименование_     = ТЗ_Приход.Наименование;
       суммаПоступления = ТЗ_Приход.пришло;
       СуммаРасхода     = ТЗ_Приход.Ушло;
       Таблица.ВывестиСекцию("Строка");
   КонецЦикла;
   Таблица.Опции(0, 0, 2, 5, "Расчет естественной убыли");
   Таблица.Показать("Расчет естественной убыли");
КонецПроцедуры
24 alex_reglament
 
09.12.11
21:10
так все ок будет?
25 SnarkHunter
 
09.12.11
21:12
Неправильно писать "не правильно"...
26 alex_reglament
 
09.12.11
21:19
спасибо всем вроде все сходится
и всеже где обнулять переменные
27 alex_reglament
 
09.12.11
21:20
да и вроде ж она у меня обнуляется или я не там ее обнуляю?
Пока Док.ПолучитьДокумент() > 0 Цикл
       Если Док.Проведен() = 1 Тогда
           Док.ВыбратьСтроки();
           Пока Док.ПолучитьСтроку() > 0 Цикл
               сумма = "";
28 DJ Anthon
 
09.12.11
21:22
ты знаешь, что такое обнуление?
29 alex_reglament
 
09.12.11
21:27
ну в общем да!!
30 alex_reglament
 
09.12.11
21:27
сумма = ""; или это не правильно нужно так?? сумма = 0;
31 alex_reglament
 
09.12.11
21:32
и еще последний вопрос
почему не доступен предворительный просмотр
32 Креатив
 
09.12.11
21:34
Зайди в файл - параметры страницы
33 alex_reglament
 
09.12.11
21:37
(32) там тоже не доступно
34 alex_reglament
 
09.12.11
21:40
Зайди в файл - параметры страницы
там тоже не доступно
35 alex_reglament
 
09.12.11
21:40
что делать то?
36 Mans
 
09.12.11
21:40
(33) Таблица на форме? если да то кликни на ней
37 alex_reglament
 
09.12.11
21:40
может здесь чего не дописал?
    Таблица.ВывестиСекцию("Строка");
   КонецЦикла;
   Таблица.Опции(0, 0, 2, 5, "Расчет естественной убыли");
   Таблица.Показать("Расчет естественной убыли");
КонецПроцедуры
38 SnarkHunter
 
09.12.11
21:41
Установить принтер...
39 alex_reglament
 
09.12.11
21:41
нет отдельно
40 alex_reglament
 
09.12.11
21:41
не на форме
41 alex_reglament
 
09.12.11
21:50
принтер установлен но предварительный просмотр не пашет
42 Mans
 
09.12.11
21:54
параметры страницы пересохранить ... колеса попинать и т.д
43 alex_reglament
 
09.12.11
21:55
(42) слуша получилось а что это за глюк?
44 Mans
 
09.12.11
22:06
помогли знач колёса
45 alex_reglament
 
09.12.11
22:06
спасибо за помощь пока
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.