7.7 Как распечатать ценник со страной производителем

Тема в разделе "Типовые решения "1С:Предприятие 7.7"", создана пользователем fog, 20 апр 2008.

  1. TopicStarter Overlay
    fog
    Offline

    fog

    Регистрация:
    20 апр 2008
    Сообщения:
    8
    Симпатии:
    0
    Баллы:
    1
    Подскажите пожалуйста как распечатать ценник со страной производителем, что для этого нужно изменить.
    Пробовал: конфигуратор-обработки-печать ценников-таблица вставлял <ПечСтрана>, но как я понимаю нужно ещё что-то вставить в модуле (и в каком именно месте)?

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

    Vlad Модераторы Команда форума Модератор

    Регистрация:
    16 авг 2006
    Сообщения:
    3.517
    Симпатии:
    19
    Баллы:
    29
    За каким ... ты весь модуль сюда вынес? Кто это читать будет?
    Попробуй что-нибудь типа

    Код:
    ПечРозн    = глФРМ(ТаблицаТоваров.Цена, ТаблицаТоваров.Валюта);
    ПечНаименование    = ТаблицаТоваров.Товар;
    ПечСтрана = ТаблицаТоваров.Страна; //(или как там Реквизит называется)
    ДобавитьЦенник(Таб, ПечФирма, ТаблицаТоваров.Товар, ТаблицаТоваров.Единица, ПечРозн, ПечСтрана,Столбик, Ряд); 
    глОживить(1);
    
    
    Функцию ДобавитьЦенник тоже соответственно поправить.
  3. TopicStarter Overlay
    fog
    Offline

    fog

    Регистрация:
    20 апр 2008
    Сообщения:
    8
    Симпатии:
    0
    Баллы:
    1
    Спасибо за совет (сделал как посоветовали), но выдаёт ошибку:

    ПечСтрана = ТаблицаТоваров.Страна;
    {Обработка.ПечатьЦенников.Форма.Модуль(62)}: Поле агрегатного объекта не обнаружено (Страна)

    а весь модуль вынес потому, что полный ноль в программировании 1с, по этому особо не знаю, что надо выносить, а что не надо, так вернее... :unsure:
  4. Vlad
    Offline

    Vlad Модераторы Команда форума Модератор

    Регистрация:
    16 авг 2006
    Сообщения:
    3.517
    Симпатии:
    19
    Баллы:
    29
    Ну так слово Страна я ведь от фонаря написал, для примера. Залез в свою Комплексную, гляжу - реквизит называется СтранаПроисхождения. Посмотри, как называется в твоей. Возможно так же. Вот ставь не Страна, а СтранаПроисхождения.
  5. TopicStarter Overlay
    fog
    Offline

    fog

    Регистрация:
    20 апр 2008
    Сообщения:
    8
    Симпатии:
    0
    Баллы:
    1
    У меня тоже СтранаПроисхождения, ставил и так, но всё равно такую же ошибку выдаёт:
    ПечСтрана = ТаблицаТоваров.СтранаПроисхождения;
    {Обработка.ПечатьЦенников.Форма.Модуль(62)}: Поле агрегатного объекта не обнаружено (СтранаПроисхождения)

    В модуле получилось так

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

    Опять привёл весь модуль, но лишь для того, чтобы картина была ясна (он впринципе не большой)...
    Вроде бы всё верно сделано, в таблице вставлена в ячейке ПечСтрана как выражение.
    В чём ошибка кроется (помимо моих "кривых" рук)?

    ПИШЕМ ЧЕРЕЗ ТЭГ
    Код:
    [/color]
  6. Prospero
    Offline

    Prospero Опытный в 1С

    Регистрация:
    13 сен 2006
    Сообщения:
    111
    Симпатии:
    0
    Баллы:
    26
    А в самой ТЗ "ТаблицаТоваров" есть столбец "СтранаПроисхождения" ? Или только есть реквизит такой?
  7. Vlad
    Offline

    Vlad Модераторы Команда форума Модератор

    Регистрация:
    16 авг 2006
    Сообщения:
    3.517
    Симпатии:
    19
    Баллы:
    29
    Короче, поколдовал немножко в перерывах между основной деятельностью и пришел к выводу, что быстрее будет сделать через внешний ценник. Во всяком случае у меня так вышло. Высылаю файл. Там уж сам разберешься и причешешь его как тебе надо.

    Вложения:

    • PrPrice_2.ert
      Размер файла:
      98,5 КБ
      Просмотров:
      456
  8. TopicStarter Overlay
    fog
    Offline

    fog

    Регистрация:
    20 апр 2008
    Сообщения:
    8
    Симпатии:
    0
    Баллы:
    1
    Спасибо большое это то, что нужно.
  9. Prosecutor
    Offline

    Prosecutor

    Регистрация:
    24 апр 2008
    Сообщения:
    16
    Симпатии:
    0
    Баллы:
    1
    Другим способом данную проблему решил "X-Man" тут:
    http://www.1c-pro.ru/index.php?act=ST&...st=0#entry31565

    Если изменить ВСТРОЕННУЮ обработку, то ценники можно будет выводить в большом количестве, а также из документов "Перемещение ТМЦ", "Поступление ТМЦ" и др.

    Код:
    Процедура Сформировать(ТаблицаТоваров,ПечФирма)
    //  Создание Таблицы для выходного отчета
    Таб = СоздатьОбъект("Таблица");
    Таб.ИсходнаяТаблица("Таблица");
    Столбик = 1;
    Ряд     = 0;
    ТаблицаТоваров.ВыбратьСтроки();
    Пока ТаблицаТоваров.ПолучитьСтроку() = 1 Цикл
    ПечРозн    = глФРМ(ТаблицаТоваров.Цена, ТаблицаТоваров.Валюта);
    ПечНаименование        = ТаблицаТоваров.Товар;
    
    //*************************Добавление!!!
    СпрНом = СоздатьОбъект("Справочник.Номенклатура");
    СпрНом.ВыбратьЭлементы(0);
    Если СпрНом.НайтиПоНаименованию(ТаблицаТоваров.Товар, 0 ,0) = 1 Тогда
    Комментарий = СпрНом.Комментарий;
    Иначе
    Комментарий = ПолучитьПустоеЗначение("Строка");
    КонецЕсли;
    //*****************************************
    
    ДобавитьЦенник(Таб, ПечФирма, ТаблицаТоваров.Товар, ТаблицаТоваров.Единица, ПечРозн, Столбик, Ряд);
    глОживить(1);
    КонецЦикла;
    //Вызов выходного отчета в окно просмотра и редактирования.
    Таб.Опции(0,0,0,0,"ПечатьЦенников","ПечатьЦенников");
    Таб.ТолькоПросмотр(1);
    Таб.Показать("Товарные ценники","");
    
    КонецПроцедуры
    
    
    При желании думаю можно "Комментарий" заменить на что-то другое из реквизитов Номенклатуры.
    Посмотреть вложение 883
    Как например в текущей теме - "СтранаПроисхождения".

    Ещё надо не забыть определить переменную "Перем Комментарий;"(это в моём случае) в начале модуля обработки, потому что в пределах модуля всё будет и так работать, но если эту переменную вы вставите в таблицу печати, то 1С-ка будет ругаться.

    PS.
    Спасибо X-Man и удачи всем!

    Вложения:

    • configa.JPG
      configa.JPG
      Размер файла:
      16 КБ
      Просмотров:
      195
  10. К_Е
    Offline

    К_Е Опытный в 1С

    Регистрация:
    8 июл 2008
    Сообщения:
    176
    Симпатии:
    0
    Баллы:
    26
    а я написала:

    ПечСтрана = ТаблицаТоваров.Единица.Владелец.СтранаПроисхождения;

    Соответственно, как я понимаю надо изменить:

    Процедура ДобавитьЦенник(Таб, ПечФирма, ПечНаименование, ПечЕдиница, ПечРозн, печкод, ПечСтрана, Столбик, Ряд);

    работает без ошибок
  11. noVel
    Offline

    noVel

    Регистрация:
    9 мар 2009
    Сообщения:
    10
    Симпатии:
    0
    Баллы:
    1
    Чтобы не создавать лишнюю тему, продолжу здесь, так как суть такая же. Подскажите пожалуйста.
    Делаю вывод ценников через Перемещение ТМЦ, а там идет вывод на печать через внешний модуль в файле printcen.ert.
    Не могу сделать:
    1. Вывод вместо двух столбцов ценников, ТРИ СТОЛБЦА.
    2. И опять же вывод страны в ценнике из Номенклатуры.СтранаПроисхождения.

    P.S. И если не затруднит, как можно подробнее :)
  12. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    обработка printcen.ert по умолчанию расчитана на печать в три столбца
  13. noVel
    Offline

    noVel

    Регистрация:
    9 мар 2009
    Сообщения:
    10
    Симпатии:
    0
    Баллы:
    1
    1.Как так ??? А можно Ваш printcen.ert посмотреть ?
    У меня так выводит в два столбца (см.образно для примера)
    [​IMG]

    2. А с производителем страны как быть ?
  14. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Я немного не понял. У тебя выводится 2 столбца, а на следующем листе 1? Судя по тексту листинга лолжно выводиться 3 на одном..... За это отвечает условие в процедуре ДобавитьЦенник

    Код:
    Столбик    = ?(Столбик > 3, 1, Столбик + 1);
    
    
    Цифра 3 - как раз количество столбцов)))))))))))))))))

    А что касается производителя..... Дело в том, что в качестве параметра в обработку передается таблица. В таблице есть колонка Товар, но основная засада в том, что Товар это не ЭлементСправочника, а Строка (точнее наименование товара). Поэтому из обработки печати ценника "выкружить" производителя не получится(((((. Нужно изменять код в конфигураторе. А именно - добавлять в таблицу новую колонку (например Страна), заполнять ее в цикле там где заполняется наименование товара (колонка Товар), а в самой процедуре печати - тут уж хоть "Письмо Ленину" пиши)))))))))))).
    Еще - циклов заполнения таблицы несколько (один в модуле элемента справочника и еще в списке справочника). Найдешь по контексту вызова обработки печати
  15. noVel
    Offline

    noVel

    Регистрация:
    9 мар 2009
    Сообщения:
    10
    Симпатии:
    0
    Баллы:
    1
    Бухгалтерский угодник
    1. Нет у меня такой строчки
    Код:
    Столбик    = ?(Столбик > 3, 1, Столбик + 1);
    
    есть только
    Код:
    Столбик	= ?(Столбик = 0, 1      , 0  );
    
    И при замене этой строчки твоей, происходит вообще нелепость.
    [​IMG]

    2.
    Получается в ценнике с производителем прийдётся забыть и ничего не получится ????? И это не объяснить тут ???
  16. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Что касается "столбика" - смотри тему в самом начале. Там есть ПРАВИЛЬНЫЙ текст процедуры.
    Что касается производителя - я же тебе описал алгоритм! Или я не внятно изъясняюсь? Что не понятно-то? Спрашивай только конкретно!
  17. Vlad
    Offline

    Vlad Модераторы Команда форума Модератор

    Регистрация:
    16 авг 2006
    Сообщения:
    3.517
    Симпатии:
    19
    Баллы:
    29
    Почитай веточку внимательно, с самого начала.
  18. noVel
    Offline

    noVel

    Регистрация:
    9 мар 2009
    Сообщения:
    10
    Симпатии:
    0
    Баллы:
    1
    Бухгалтерский угодник
    В этом и проблема, что непонятно о чем конркретно говорим, не говорил что нужно где-то что то изменить, прилошлось вообще сделать методом тыка и случайно получилось.
    Со столбиком вроде разобрался, попробовал в стандартном файле printcen.ert, заменил там стандартную процедуру:
    Код:
    Процедура ДобавитьЦенник(Таб, Фирма, ПечНаименование, ПечЕдиница, ПечРозн, Столбик, Ряд) Экспорт
    
    Столбик    = ?(Столбик = 0, 1      , 0  );
    Ряд        = ?(Столбик = 0, Ряд + 1, Ряд);
    
    Если Ряд > 3 Тогда
    Таб.НоваяСтраница();
    Ряд = 1;
    КонецЕсли;
    
    Если Столбик = 0 Тогда
    Таб.ВывестиСекцию(\"Товар|Ценник\");
    Иначе
    Таб.ПрисоединитьСекцию(\"Товар|Ценник\");
    КонецЕсли;
    
    КонецПроцедуры // ДобавитьЦенник()
    
    
    
    на процедуру из первого поста:
    Код:
    Процедура ДобавитьЦенник(Таб, ПечФирма, ПечНаименование, ПечЕдиница, ПечРозн, Столбик, Ряд)
    Если Ряд > 7 Тогда
    Таб.НоваяСтраница();
    Ряд = 1;
    КонецЕсли;
    Если Столбик = 1 Тогда
    Таб.ВывестиСекцию(\"Товар|Ценник\");
    Иначе
    Таб.ПрисоединитьСекцию(\"Товар|Ценник\");
    КонецЕсли;
    Столбик    = ?(Столбик > 2, 1, Столбик + 1);
    Ряд        = ?(Столбик = 1, Ряд + 1, Ряд);
    КонецПроцедуры // ДобавитьЦенник()
    
    
    
    Отвечу не скромно .... чего делать и пожалуйста по покретнее ?
    Менял процедуры на вышеуказанные (в выше постах),
    выдаёт ошибку:
    Vlad
    Скажу тоже честно .... читал, и уже с первого поста не понятно, что делает перавый пользователь если у него процедура печати уже другая, точнее отличается от стандартной типовой конфигурации, и как он её изменил не понятно.

    А я то имею стандартную типовую и хочу внести изменения сам, вот по столбцам внёс и вроде всё работает и печатает в три столбца как и хочу. А что с Производителем, куда и чего вносить и изменять.... я думаю стандартный типовой фаил printcen.ert не стоит тут прилагать, он у всех одинаковый.
  19. Бухгалтерский угодник
    Offline

    Бухгалтерский угодник Администраторы Команда форума Администратор

    Регистрация:
    29 дек 2008
    Сообщения:
    21.520
    Симпатии:
    407
    Баллы:
    104
    Я УЖЕ ОТВЕТИЛ КАК!
    Без изменения в в самой конфигурации - ничего не получится.
    Разъяснить по строкам?????
  20. noVel
    Offline

    noVel

    Регистрация:
    9 мар 2009
    Сообщения:
    10
    Симпатии:
    0
    Баллы:
    1
    Бухгалтерский угодник
    Если конечно не затруднит, очень буду признателен.
    Куда, что и где дописывать и подправлять. Потом буду пробавать у себя.
    А если изменения коснутся файла printcen.ert, то может подправишь там сам как надо и выложи тут у тебя же должно всё в общем уже работать (включая и printcen.ert).

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