Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Создание цикла для отбора документов  (Прочитано 10027 раз)
0 Пользователей и 1 Гость смотрят эту тему.
nika-cat
Интересующийся

ru
Offline Offline

« : 11-09-2011 04:59 » 

Здраствуйте, Есть документ с колонками книга,цена,количество,полка.Нужно сделать внешнюю печатную форму чтоб выводила каждую новую полку на новую страницу и если на полке меньше двух книг не выводилась на печать .И подсчитывал итог количества на каждой полке.Спасибо за помощь.
Записан
Dest
Опытный

ru
Offline Offline

« Ответ #1 : 11-09-2011 05:43 » 

Какая версия платформы?
Записан
nika-cat
Интересующийся

ru
Offline Offline

« Ответ #2 : 11-09-2011 06:01 » 

7.7


Добавлено через 59 минут и 49 секунд:
Вот текст формы

Код: (1C v8)
Перем ТекущаяПолка,Всего;
Перем Докум,КолСтрок;
Перем НачПовт, КонПовт;

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

                                // секция Заголовок
                                ИсхТабл.ВывестиСекцию("Заголовок");
                                ТекущаяПолка=Тз1.ПолкаКоробки;
                                // Секция Организация
                                ИсхТабл.ВывестиСекцию("Организация");
                                НачПовт = НачПовт + ИсхТабл.ВысотаСекции("Организация");
                                // Секция Шапка таблицы
                                ИсхТабл.ВывестиСекцию("ШапкаТаблицы");
                                КонПовт = НачПовт + ИсхТабл.ВысотаСекции("ШапкаТаблицы");
                                ИсхТабл.ПовторятьПриПечатиСтроки(НачПовт + 1, КонПовт);
                        КонецЕсли;    
                        //выводим строку
                       
                        НомСтроки= НомСтроки + 1;
                        ИсхТабл.ВывестиСекцию("Строка");
                КонецЦикла;    
        КонецЦикла;
       
        ИсхТабл.ЭкземпляровНаСтранице(1);  
        ИсхТабл.Опции(0,0,0,0,"ОпцииПечатиУпаковочныйЛист");
        ИсхТабл.Показать();
        ИсхТабл.ТолькоПросмотр(1);
        ИсхТабл.Показать(" Упаковочный Лист","");
        Если Устройство = 0 Тогда
                ИсхТабл.Опции(0,0,0,0,"ОпцииПечатиУпаковочныйЛист");
                Если глПолучитьПолномочие("РазрешитьРедактированиеТаблиц") = 0 Тогда
                        ИсхТабл.ТолькоПросмотр(1);
                Иначе
                        ИсхТабл.ТолькоПросмотр(0);
                КонецЕсли;    
                ИсхТабл.Показать(глНазваниеДокументаВжурнале(Докум),"");  
        Иначе    
                ИсхТабл.ПараметрыСтраницы(,,,,,,,,,1,,);
                ИсхТабл.КоличествоЭкземпляров(КолвоКопий);
                ИсхТабл.Напечатать(0);
        КонецЕсли;
   
« Последнее редактирование: 12-09-2011 11:35 от nika-cat » Записан
Kivals
Модератор

ca
Offline Offline
Пол: Мужской

WWW
« Ответ #3 : 12-09-2011 11:06 » 

На первый взгляд логика правильная. А что конкретно не получается?

"если на полке меньше двух книг"- имеется в виду меньше 2 шт или меньше 2 наименований?
Записан
nika-cat
Интересующийся

ru
Offline Offline

« Ответ #4 : 12-09-2011 11:24 » 

Меньше 2 наименований ,а количество всего не по наименованию общее по полке

Добавлено через 12 минут и 2 секунды:
Код: (1C v8)
// сформируем таблицу учета  на полке
                Тз1 = СоздатьОбъект("ТаблицаЗначений");
                Тз1.НоваяКолонка("НомерПолки");
                Тз1.НоваяКолонка("Номенклатура");          
                Тз1.НоваяКолонка("Количество");
                Тз1.НоваяКолонка("Единица");
                Тз1.НоваяКолонка("Цена");
                Докум.ВыгрузитьТабличнуюЧасть(Тз1,"Номенклатура,Количество,Единица,Цена,НомерПолки");
        Тз1.Сортировать(+"НомерПолки",);
                ТекущаяПолка="*";
            Тз2=СоздатьОбъект("ТаблицаЗначений");
            Тз1.Выгрузить(Тз2,,,"Номенклатура,Количество,НомерПолки");
                Тз2.НоваяКолонка("Наличие","Ч10.2");
                Если Тз2.НайтиЗначение(,,"Номенклатура")=1 Тогда
                        Тз2.Наличие=1
                Иначе Если Тз2.НайтиЗначение(,,"Номенклатура")=0 Тогда
                                Тз2.Наличие=0;
                        КонецЕсли;
       
                Тз2.Свернуть("НомерПолки","Наличие,Количество");
                  Тз2.ВыбратьСтроки();
                  Если Тз2.Наличие>=2 тогда
                        Перейти2;           
                  Если Тз2.Наличие<2 тогда
                        Возврат ;
                  КонецЕсли;
КонецЕсли;
                КолОбщее =Тз2.Количество;
           ~М2:        Тз1.ВыбратьСтроки();
                 
                Пока Тз1.ПолучитьСтроку() = 1 Цикл
                Если Тз1.НомерПолки<> ТекущаяПолка Тогда
                                Если Тз1.НомерПолки<>"*" Тогда
                                        ИсхТабл.ПрисоединитьСекцию("Итого");
                                        НомСтроки=0;
                                        ИсхТабл.НоваяСтраница();   
                                        КонецЕсли;  
                                       
                                        // секция Заголовок
                                        ИсхТабл.ВывестиСекцию("Заголовок");
                                        ТекущаяПолка=Тз1.НомерПолки;
                                        // Секция Организация
                                        ИсхТабл.ВывестиСекцию("Организация");
                                        НачПовт = НачПовт + ИсхТабл.ВысотаСекции("Организация");
                                        // Секция Шапка таблицы
                                        ИсхТабл.ВывестиСекцию("ШапкаТаблицы");
                                        КонПовт = НачПовт + ИсхТабл.ВысотаСекции("ШапкаТаблицы");
                                        ИсхТабл.ПовторятьПриПечатиСтроки(НачПовт + 1, КонПовт);
                                КонецЕсли;
                        //выводим строку
               
                        НомСтроки= НомСтроки + 1;      
                       
                        ИсхТабл.ВывестиСекцию("Строка");  
       

       КонецЦикла;
       

Добавлено через 54 секунды:
думаю так но не работает
во первых не убирает если меньше 2-х наименований
Во вторых выводит первой строчкой итог
И не считает итог в каждой странице
Спасибо.
« Последнее редактирование: 12-09-2011 11:37 от nika-cat » Записан
Kivals
Модератор

ca
Offline Offline
Пол: Мужской

WWW
« Ответ #5 : 12-09-2011 12:42 » 

Вот создание списка выгружаемых полок:
Код: (1C v8)
ТЗ2=СоздатьОбъект("ТаблицаЗначений");
ТЗ1.Выгрузить(ТЗ2,,,"Номенклатура,НомерПолки");
ТЗ2.Свернуть("Номенклатура,НомерПолки","");
ТЗ2.НоваяКолонка("Кво","Число");
ТЗ2.Заполнить(1,,,"Кво");
ТЗ2.Свернуть("НомерПолки","Кво");
спКВыгрузке = СоздатьОбъект("СписокЗначений");
ТЗ2.ВыбратьСтроки();
Пока ТЗ2.ПолучтьСтроку()=1 Цикл
        Если ТЗ2.Кво>=2 Тогда
                спКВыгрузке.ДобавитьЗначение(ТЗ2.НомерПолки);
        КонецЕсли;
КонецЦикла;


Ну и в первом варианте цикла нужно поменять условие
Код: (1C v8)
Если Тз1.НомерКоробки<>"*" Тогда
на
Код: (1C v8)
Если спКВыгрузке.НайтиЗначение(ТекущаяПолки)=1 Тогда
Записан
nika-cat
Интересующийся

ru
Offline Offline

« Ответ #6 : 12-09-2011 16:46 » new

Спасибо проверю завтра на работе

Добавлено через 1 день, 10 часов, 27 минут и 9 секунд:
Спасибо за помощь работает
« Последнее редактирование: 14-09-2011 03:13 от nika-cat » Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines