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

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

  1. Roman

    Roman Гость

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

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

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

    Roman Гость

    Репутация:
    0
    Я кодить не умею,пока изучаю.
    Вот исходный код процедуры печати
    Код (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 Гость

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

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

    Roman Гость

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

    Hryv Гость

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

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

    Roman Гость

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

    Hryv Гость

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

    Roman Гость

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

    Hryv Гость

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

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

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

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

    Roman Гость

    Репутация:
    0
    Код (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
    СписокЗалов.РазмерСписка() - это и есть твое количество залов

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

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

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

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

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

    Roman Гость

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

    Hryv Гость

    Репутация:
    0
    Ты бы сначала определился что тебе надо


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

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

    и

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

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

    perfomance Гость

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

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

    Roman Гость

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



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

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

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