Нумерация залов

Тема в разделе "1C и всё что с ней связано", создана пользователем Roman, 10 сен 2009.

  1. Roman

    Roman Гость

    Документ Предварительные заявки печатается так, общая заявка со всеми позициями и подзаявки конкретно по залам(места где хранится товар).Как сделать так чтобы в осоновной заявке выводилось из скольких подзаявок сосотоит данная предзаявка, а предзаявки нумеровались по залам,например:
    Корма это подзавка номер один,Игрушки это заявка номер два и т.д. в 1С версии 7.7 Конфигурация Торговля и склад.
     
  2. vitfil

    vitfil IT-интегратор

    Регистрация:
    2 апр 2004
    Сообщения:
    2.070
    Симпатии:
    0
    Ну и постановка вопроса...
    В общем случае: модифицировать процедуру печати необходимым образом.
     
  3. Roman

    Roman Гость

    Я кодить не умею,пока изучаю.
    Вот исходный код процедуры печати
    Код (Text):
    Процедура ПечатьЗал(пЗал,БПСпособПечати)
    Перем НачПовт, КонПовт;                   

    РегХран=СоздатьОбъект("Регистр.ХранениеТовара");
    ТЗН=СоздатьОбъект("ТаблицаЗначений");

    ИсхТабл = СоздатьОбъект("Таблица");
    ИсхТабл.ИсходнаяТаблица("ПоЗалам");
    НачПовт = 0; КонПовт = 0;
    ПечФирма = ""; Банк = ""; Счет = ""; БИК = ""; СчетБанка = "";

    Параметры = СоздатьОбъект("СписокЗначений");
    //Я добавил{
    Номер="";
    Если Номенклатура.ЗалХранения=СокрЛП("Общий зал") Тогда
    Номер=Номер+"1";
    КонецЕсли;
    //}Я добавил
    ИсхТабл.ВывестиСекцию("Заголовок");
    НачПовт = НачПовт + ИсхТабл.ВысотаСекции("Заголовок");
    ИсхТабл.ВывестиСекцию("Шапка");
    КонПовт = НачПовт + ИсхТабл.ВысотаСекции("Шапка");
    ИсхТабл.ПовторятьПриПечатиСтроки(НачПовт + 1, КонПовт);
    НомСтроки = 0;
    ВыбратьСтроки();
    Пока ПолучитьСтроку() = 1 Цикл
    Если Номенклатура.ЗалХранения=пЗал Тогда
    НомСтроки = НомСтроки + 1;
    РегХран.УстановитьФильтр(,Номенклатура);
    РегХран.ВыгрузитьИтоги(ТЗН);
    МХ="";
    ТЗН.ВыбратьСтроки();
    Пока ТЗН.ПолучитьСтроку()=1 Цикл
    МХ=МХ+СокрЛП(ТЗН.Место.Код)+"; ";
    КонецЦикла;      
    ИсхТабл.ВывестиСекцию("Строка");
    КонецЕсли;
    КонецЦикла;




    ИсхТабл.ВывестиСекцию("Итоги");
    Если БПСпособПечати = 1 Тогда
    СразуНаПринтер = 0;
    Иначе               
    СразуНаПринтер = 1;
    КонецЕсли;
    Если СразуНаПринтер = 0 Тогда
    ИсхТабл.Опции(0,0,0,0,"ОпцииПечатиПлПор","ПараметрыОкнаПлПор");
    ИсхТабл.ПараметрыСтраницы(1,,,,,,,,,1,,"Brother MFC-8820D USB");
    ИсхТабл.Защита(1);
    ИсхТабл.ТолькоПросмотр(0);
    ИсхТабл.Показать(глНазваниеДокументаВжурнале(Контекст),"");
    Иначе   
    ИсхТабл.ПараметрыСтраницы(1,,,,,,,,,1,,"Brother MFC-8820D USB");
    ИсхТабл.Напечатать(0);
    КонецЕсли;

    КонецПроцедуры // ПечатьЗал();
    Вот я написал пару строк, но вместо того чтобы в таблице подставлять на место переменной "Номер" еденицу, в подзаявке общий зал
    он выдает пустое значение
     
  4. perfomance

    perfomance Гость

    Ну если разбирать только этот кусок кода , то здесь выражение Номенклатура.ЗалХранения скорее относится к табличной части документа. Поэтому эту конструкцию Если (условие) КонецЕсли надо помещать в цикл выбора-получения строк табличной части документа.

    Опиши подробнее в этой конструкции чем будет переменная Номер разумеется если у тебя есть не только "общий зал" а еще что либо Конструкцией Если...ИначеЕсли...Иначе...КонецЕсли; Загони эту конструкцию в цикл Пока ПолучитьСтроку() КонецЦикла;. А также не забуть на самой печатной форме поправить/добавить значение этой переменной в определенную (нужную) тебе ячейку,включи ее в секцию и т.д.
     
  5. Roman

    Roman Гость

    Делаю так:
    Код (Text):
        Ном="";
    ВыбратьСтроки();
    Пока ПолучитьСтроку() =1 Цикл
    Если СокрЛП(пЗал) = "общий зал" Тогда
    Ном = "1";
    ИначеЕсли СокрЛП(пЗал) = "Коля клетки" Тогда
    Ном = "2";
    ИначеЕсли СокрлП(пЗал) = "Акмаль корма" Тогда
    Ном ="3";
    ИначеЕсли СокрЛп(пЗал) = "Фарход (аквариумы, серко," Тогда
    Ном = "4";
    ИначеЕсли СокрлП(пЗАл) = "Женя беафар" Тогда
    Ном = "5";      
    КонецЕсли;
    КонецЦикла;
    Все нормуль
    Но как сделать так чтобы не писать каждый раз при добавлении новой позиции,
    а чтобы подзаявки нумеровались автоматически?
    И как сделать Чтобы в основной заявке выдавлось из скольких подзаявок она состоит
    основная заявка выводится в процедуре печать(), рублевая заявка(таблица"РублеваяЗаявка")
    а подзаявки через процедуру печатьзалы(),Таблица:"ПоЗалам"???
     
  6. Hryv

    Hryv Гость

    Если пЗал - это справочник, то сделайте в нем реквизит НомерЗала и тогда получится

    Код (Text):
        Ном="";
    ВыбратьСтроки();
    Пока ПолучитьСтроку() =1 Цикл
    Ном = СокрЛП(пЗал.НомерЗала);
    КонецЦикла;
     
  7. Roman

    Roman Гость

    Спасибочки.хорошая тема.
    Всё работает.а главновое, всё гениальное,просто.
    а с общей заявкой не подсобищь? Как сделать чтобы выводилось из какаого количества подзаявок она состоит.?
     
  8. Hryv

    Hryv Гость

    Там откуда вызавыется ПечатьЗал(пЗал,БПСпособПечати) думаю несложно посчитать количество вызовов, я предполагаю, что там вызовы идут в цикле
     
  9. Roman

    Roman Гость

    А как их посчитать и как потом подсчитанное число вывести в печатную Форму
     
  10. Hryv

    Hryv Гость

    Посмотрел код в начале темы, пришел к выводу: предложенный мной код можно сократить до 1 строки

    Ном = СокрЛП(пЗал.НомерЗала);

    Перебор строк там смысла не имеет

    Ну давай код процедуры откуда идет вызов
     
  11. Roman

    Roman Гость

    Код (Text):
            // рублевая заявка
    Если (Р_накл = 1) и (К_Руб_н > 0)    Тогда   

    РегХран=СоздатьОбъект("Регистр.ХранениеТовара");
    ТЗН=СоздатьОбъект("ТаблицаЗначений");

    ИсхТабл = СоздатьОбъект("Таблица");
    ИсхТабл.ИсходнаяТаблица("РублеваяЗаявка");
    НачПовт = 0; КонПовт = 0;
    ПечФирма = ""; Банк = ""; Счет = ""; БИК = ""; СчетБанка = "";

    Параметры = СоздатьОбъект("СписокЗначений");
    Параметры.ДобавитьЗначение(БанковскийСчет, "БанковскийСчет");
    глРеквизитыПлательщикаПолучателя(Параметры);
    ПечФирма    = Параметры.Получить("Результат");
    Банк        = Параметры.Получить("СтрокаБанка");
    Счет        = Параметры.Получить("РасчетныйСчет");
    БИК          = Параметры.Получить("БИК");
    СчетБанка  = Параметры.Получить("КоррСчет");

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

    //НДСДок=Окр(СуммаНДС*КурсДляВалюты(Валюта),2,1); //глКурсДляВалюты(Договор.ВалютаВзаиморасчетов,ДатаДок),2,1);
    ВсегоНДС=Окр(ВсегоНДС+НДСДок,2,1);
    ВсегоСумма=Окр(ВсегоСумма+СуммаДок,2,1);
    РегХран.УстановитьФильтр(,Номенклатура);
    РегХран.ВыгрузитьИтоги(ТЗН);
    МХ="";
    ТЗН.ВыбратьСтроки();
    Пока ТЗН.ПолучитьСтроку()=1 Цикл
    МХ=МХ+СокрЛП(ТЗН.Место.Код)+"; ";
    КонецЦикла;

    ИсхТабл.ВывестиСекцию("Строка");
    КонецЦикла;
    ИсхТабл.ВывестиСекцию("Итоги");
    Если БПСпособПечати = 1 Тогда
    СразуНаПринтер = 0;
    Иначе               
    СразуНаПринтер = 1;
    КонецЕсли;
    Если СразуНаПринтер = 0 Тогда
    ИсхТабл.Опции(0,0,0,0,"ОпцииПечатиПлПор","ПараметрыОкнаПлПор");
    ИсхТабл.ПараметрыСтраницы(1,,,,,,,,,1,,"Brother MFC-8820D USB");
    ИсхТабл.Защита(1);
    ИсхТабл.ТолькоПросмотр(0);
    ИсхТабл.Показать(глНазваниеДокументаВжурнале(Контекст),"");
    Иначе   
    ИсхТабл.ПараметрыСтраницы(1,,,,,,,,,1,,"Brother MFC-8820D USB");
    ИсхТабл.КоличествоЭкземпляров(К_Руб_н);
    ИсхТабл.Напечатать(0);
    КонецЕсли;

    БезЗала=0;
    СписокЗалов=СоздатьОбъект("СписокЗначений");
    ВыбратьСтроки();
    Пока ПолучитьСтроку()=1 Цикл
    Если ПустоеЗначение(Номенклатура.ЗалХранения)=1 Тогда
    Сообщить("Для "+Номенклатура.Наименование+" не установлена зона отгрузки");
    БезЗалов=1;
    КонецЕсли;

    Если СписокЗалов.Принадлежит(Номенклатура.ЗалХранения)=0 Тогда
    СписокЗалов.ДобавитьЗначение(Номенклатура.ЗалХранения);
    КонецЕсли;
    КонецЦикла;                                                

    ПечататьЗалы=1;
    Если БезЗалов=1 Тогда
    Если Вопрос("Для некоторых позиций неуказана зона отгрузки. Печатать без зон?","Да+Нет")<>"Да" Тогда
    ПечататьЗалы=0;
    КонецЕсли;
    КонецЕсли;

    Если ПечататьЗалы=1 Тогда
    Для Сч=1 По СписокЗалов.РазмерСписка() Цикл
    ПечатьЗал(СписокЗалов.ПолучитьЗначение(Сч),БПСпособПечати);
    КонецЦикла;
    КонецЕсли;

    КонецЕсли;
    Код (Text):
    Если ПечататьЗалы=1 Тогда
    Для Сч=1 По СписокЗалов.РазмерСписка() Цикл
    ПечатьЗал(СписокЗалов.ПолучитьЗначение(Сч),БПСпособПечати);
    КонецЦикла;
    КонецЕсли;

    КонецЕсли;
    Если Делаешь запрос Соообщить(Сч) он мне пишет сколько циклов он проходит
    но как кодом сделать так чтобы он мне
    в табличную часть итог выводил а не в окно сообщений?
     
  12. Hryv

    Hryv Гость

    СписокЗалов.РазмерСписка() - это и есть твое количество залов

    Кусок кода
    БезЗала=0;
    СписокЗалов=СоздатьОбъект("СписокЗначений");
    ВыбратьСтроки();
    Пока ПолучитьСтроку()=1 Цикл
    Если ПустоеЗначение(Номенклатура.ЗалХранения)=1 Тогда
    Сообщить("Для "+Номенклатура.Наименование+" не установлена зона отгрузки");
    БезЗалов=1;
    КонецЕсли;
    Если СписокЗалов.Принадлежит(Номенклатура.ЗалХранения)=0 Тогда
    СписокЗалов.ДобавитьЗначение(Номенклатура.ЗалХранения);
    КонецЕсли;
    КонецЦикла;

    перенеси перед

    ИсхТабл.ВывестиСекцию("Заголовок");

    И еще перед ИсхТабл.ВывестиСекцию("Заголовок"); вставь
    КоличествоЗалов = СписокЗалов.РазмерСписка();

    И в "шапке" или в "заголовке" выводи переменную КоличествоЗалов
     
  13. Roman

    Roman Гость

    Спасибо.
    но вот с подзаявками пустая работа.
    Если делать так сделано: Ном=СокрЛП(пЗал.номерзала);
    и создать реквизит номер зала в справочнике
    так он мне и выдает номер зала, а мне надо чтоб подзаявки нумеровались по порядку а не согласно номеру зала
    а то двойная информация получается. Название зала уже и так выводится и теперь еще номер зала.
    Как сделать нумерацию подзаявок?
     
  14. Hryv

    Hryv Гость

    Ты бы сначала определился что тебе надо


    Вот так сделай

    Если ПечататьЗалы=1 Тогда
    Для Сч=1 По СписокЗалов.РазмерСписка() Цикл
    ПечатьЗал(СписокЗалов.ПолучитьЗначение(Сч),БПСпособПечати, Сч);
    КонецЦикла;
    КонецЕсли;

    и

    Процедура ПечатьЗал(пЗал,БПСпособПечати, Номер)

    из самой процедуры вычисление Номера совсем убери
     
  15. perfomance

    perfomance Гость

    Как понимаю Вам из всего этого хочеться получить печатную форму по типу

    Шапка документа (Грубо говоря секция "ГолУб")
    Зал 1 (Наименование зала) (секция "НазваниеЗала")
    товар1.1 (Наименование товара принадлежащего залу 1) (секция "Номенклатура")
    товар1.2
    товар1.N
    Зал N (Наименование зала)
    товарN.1(наименование товара принадлежащего залу N)
    товарN.N
     
  16. Roman

    Roman Гость

    Нет совсем не то.
    Печать предварительных заявок происходит по следующей схеме
    предзавка(основноая)-все позиции
    подзаявка(что-то типа: зал1) - позиции из зал1
    подзаявка(что-то типа: зал2) - позиции из зала2
    ит.д.
    Надо чтобы Каждая подзаявка нумеравалась
    подзаявка№1
    подзаявка№2
    подзаявка№3
    Сколько залов столько подзаявок, но нумероваться онидолжны согласно выходу , а не залу т.е. заявка№2 может быть "зал7"
    Вот что-то типа того.



    А название зала и так в подзаявка выводится в шапке документа переменной пЗал

    Спасибо еще раз.
    надо срочно дочитывать документацию по 1С. а то всё оказывается просто(когда знаешь как) :)
     
Загрузка...
Похожие Темы - Нумерация залов
  1. Zhuk
    Ответов:
    18
    Просмотров:
    1.959
  2. Xalet
    Ответов:
    5
    Просмотров:
    4.239
  3. makaset
    Ответов:
    40
    Просмотров:
    13.685

Поделиться этой страницей