1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.

Вопрос по 1С

Тема в разделе "Программирование", создана пользователем Сам-по-себе, 21.10.06.

  1. Сам-по-себе

    Сам-по-себе Активный участник

    629
    0
    Кто-нибудь подскажет, что нужно добавить в модуль обработки Печать ценника, чтобы вывести на ценник страну-производителя?
     
  2. Гость

    Гость Гость

    глупый вопрос, не сказана что за платформа 7.7 или 8.0 что за конфа, да и вообще для человека разбирающегося в програмировании 1С это примитив, а если 1с и в руках не держал то пара советов врятли чем то поможет...
     
  3. Devillio

    Devillio Активный участник

    1.192
    0
    почему глупый? помощи на 5 минут - даже если он 1С в глаза не видел. а человека вы оскорбили ...
     
  4. Сам-по-себе

    Сам-по-себе Активный участник

    629
    0
    Я конечно не такой умный, как Гость, но в детстве на бейсике и турбо-паскале чего-то писал, так что планирую разобраться. А то, что ,верссию не указал - извиняюсь, недоглядел. 7.7Торговля + склад
     
  5. dj

    dj Активный участник

    892
    2
    Сам-по-себе, вызов обработки ПечатьЦенников в нескольких местах есть (из формы элемента номенклатура, из формы списка номенклатура и др.). По-быстрому:
    Открываем форму элемента справочника Номенклатура, находим процедуру ПечатьЦенника(), находим
    ТабТМЦ = СоздатьОбъект("ТаблицаЗначений");
    ТабТМЦ.НоваяКолонка("Товар");
    ТабТМЦ.НоваяКолонка("Цена","Число");
    ТабТМЦ.НоваяКолонка("Единица");
    ТабТМЦ.НоваяКолонка("Валюта");
    добавляем
    ТабТМЦ.НоваяКолонка("Страна");
    находим процедуру ДобавитьВтаблицу(Табл, Товар, ТипЦены)
    в ней после
    Табл.Валюта = ВремВалюта;
    Табл.Единица = ВремЕдиница;
    добавляем
    Табл.Страна = Товар.СтранаПроисхождения;
    аналогично в других модулях, где есть вызов обработки ПечатьЦенников
    далее в обработке ПечатьЦенников в процедуре Сформировать() после
    ПечРозн = глФРМ(ТаблицаТоваров.Цена, ТаблицаТоваров.Валюта);
    ПечНаименование = ТаблицаТоваров.Товар;
    добавляем
    ПечСтрана = ТаблицаТоваров.Страна;
    чуть ниже меняем строку
    ДобавитьЦенник(Таб, ПечФирма, ТаблицаТоваров.Товар, ТаблицаТоваров.Единица, ПечРозн, Столбик, Ряд);
    на строку
    ДобавитьЦенник(Таб, ПечФирма, ТаблицаТоваров.Товар, ТаблицаТоваров.Единица, ПечРозн, ПечСтрана, Столбик, Ряд);
    затем заменяем строку
    Процедура ДобавитьЦенник(Таб, ПечФирма, ПечНаименование, ПечЕдиница, ПечРозн, Столбик, Ряд)
    на строку
    Процедура ДобавитьЦенник(Таб, ПечФирма, ПечНаименование, ПечЕдиница, ПечРозн, ПечСтрана, Столбик, Ряд)
    и в печатной форме (Таблица) вставляем в нужное место ПечСтрана, в свойствах ячейки, где будет выводиться страна, тип должен быть Выражение.
    Всё.
     
  6. SAshock

    SAshock Активный участник

    577
    0
    dj,
    зачот
     
  7. Сам-по-себе

    Сам-по-себе Активный участник

    629
    0
    dj, спасибо за участие, вроде все сделал по описанию, но чего-то не получается, выдает:
    ПечСтрана = ТаблицаТоваровюСтрана;
    {Обработка.ПечатьЦенников.Форма.Модуль(62)}: Поле агрегатного объекта не обнаружено (Страна)
     
  8. SAshock

    SAshock Активный участник

    577
    0
    ПечСтрана = ТаблицаТоваровюСтрана;
    ю - это опечатка или так в модулЕ?

    dj, написал все правильно, ищи ошибку у себя.
     
  9. Сам-по-себе

    Сам-по-себе Активный участник

    629
    0
    SAshock, ю-опечатка, просто чаще пользуюсь латиницей.
    ошибку ищу:(

    добавлено через 48 минут
    Убей Бог, не пойму, что не так:

    Форма элемента справочника номенклатуры

    //******************************************************************************
    // ДобавитьВтаблицу(Табл, Товар, ТипЦены)
    //
    // Параметры:
    // Табл - "ТаблицаЗначений" - в которую будем добавлять строку
    // Товар - "Справочник.Номенклатура"
    // ТипЦены - "Справочник.ТипыЦен"
    //
    // Возвращаемое значение:
    // Нет
    //
    // Описание:
    // Добавляет в таблицу значений новую строку
    //
    Процедура ДобавитьВтаблицу(Табл, Товар, ТипЦены)
    Перем ВремЦена, ВремЕдиница, ВремВалюта;

    Если глВернутьЦену(Товар, ТипЦены, РабочаяДата(), ВремЦена, ВремЕдиница, ВремВалюта) = 1 Тогда
    Табл.НоваяСтрока();
    Табл.Товар = СокрЛП(Товар.ПолнНаименование) + ?(Константа.ПоказыватьАртикул = 1, " " + СокрЛП(Товар.Артикул), "");
    Табл.Цена = ВремЦена;
    Табл.Валюта = ВремВалюта;
    Табл.Единица = ВремЕдиница;
    Табл.Страна = Товар.СтранаПроисхождения;
    Иначе
    Сообщить("У товара """ + Товар.ПолнНаименование + """ отсутствует цена """ + ТипЦены + """");
    КонецЕсли;

    КонецПроцедуры // ДобавитьВтаблицу()

    //******************************************************************************
    // ПечатьЦенника()
    //
    // Параметры:
    // Нет
    //
    // Возвращаемое значение:
    // Нет
    //
    // Описание:
    // Выполняет печать ценников текущего элемента справочника Номенклатура.
    //
    Процедура ПечатьЦенника()
    Перем ПечЕдиница, ПечНаименование, ПечРозн;
    Перем Таб;
    Перем Столбик;
    Перем Ряд;
    Перем Процент, ПорядокОкр;

    Перем ТабТМЦ, ДанныеДляПечати;

    Если Выбран() = 0 Тогда
    Предупреждение("Печать можно выполнять только для записанных номенклатурных позиций", 60);
    Возврат;
    КонецЕсли;

    ТипЦены = СоздатьОбъект("Справочник.ТипыЦен");
    Если ТипЦены.Выбрать("Типы цен",) = 0 Тогда
    Возврат;
    КонецЕсли;
    ТипЦены = ТипЦены.ТекущийЭлемент();

    ТабТМЦ = СоздатьОбъект("ТаблицаЗначений");
    ТабТМЦ.НоваяКолонка("Товар");
    ТабТМЦ.НоваяКолонка("Цена","Число");
    ТабТМЦ.НоваяКолонка("Единица");
    ТабТМЦ.НоваяКолонка("Валюта");
    ТабТМЦ.НоваяКолонка("Страна");

    ВыбТМЦ = ТекущийЭлемент();

    ДобавитьВтаблицу(ТабТМЦ, ВыбТМЦ, ТипЦены);

    // упакуем данные в список
    ДанныеДляПечати = СоздатьОбъект("СписокЗначений");

    Фирма = СокрЛП(глЗначениеПоУмолчанию("ОсновнаяФирма").ЮрЛицо.ПолнНаименование);
    ДанныеДляПечати.ДобавитьЗначение(Фирма , "Фирма");
    ДанныеДляПечати.ДобавитьЗначение(ТипЦены.Валюта , "Валюта");
    ДанныеДляПечати.ДобавитьЗначение(ТабТМЦ , "Таблица");

    ОткрытьФормуМодально("Обработка.ПечатьЦенников", ДанныеДляПечати);

    КонецПроцедуры // ПечатьЦенника()

    Обработка Печать Ценников

    //******************************************************************************
    // ДобавитьЦенник(Таб, ПечФирма, ПечНаименование, ПечЕдиница, ПечРозн, Столбик, Ряд)
    //
    // Параметры:
    // Таб - таблица, в которую выполняется вывод ценника
    // ПечНаименование - наименование товара
    // ПечЕдиница - единица измерения товара
    // ПечРозн - цена товара
    // Столбик - номер столбика.
    // Ряд - номер ряда
    //
    // Возвращаемое значение:
    // Нет.
    //
    // Описание:
    // Добавляет ценник в таблицу.
    //
    Процедура ДобавитьЦенник(Таб, ПечФирма, ПечНаименование, ПечЕдиница, ПечРозн, ПечСтрана, Столбик, Ряд)

    Столбик = ?(Столбик = 0, 1 , 0 );
    Ряд = ?(Столбик = 0, Ряд + 1, Ряд);

    Если Ряд > 5 Тогда
    Таб.НоваяСтраница();
    Ряд = 1;
    КонецЕсли;

    Если Столбик = 0 Тогда
    Таб.ВывестиСекцию("Товар|Ценник");
    Иначе
    Таб.ПрисоединитьСекцию("Товар|Ценник");
    КонецЕсли;

    КонецПроцедуры // ДобавитьЦенник()

    //******************************************************************************
    // Сформировать(ТаблицаТоваров, ПечФирма)
    //
    // Параметры:
    // ТаблицаТоваров - таблица значений, содержащая информацию о цене товара
    // ПечФирма - наименование фирмы, которое будет выводиться вверху ценника
    //
    // Возвращаемое значение:
    // Нет.
    //
    // Описание:
    // Формирует таблицу с ценниками.
    //
    Процедура Сформировать(ТаблицаТоваров,ПечФирма)

    // Создание Таблицы для выходного отчета
    Таб = СоздатьОбъект("Таблица");
    Таб.ИсходнаяТаблица("Таблица");

    Столбик = 1;
    Ряд = 0;

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

    //Вызов выходного отчета в окно просмотра и редактирования.
    Таб.Опции(0,0,0,0,"ПечатьЦенников","ПечатьЦенников");
    Таб.ТолькоПросмотр(1);
    Таб.Показать("Товарные ценники","");

    КонецПроцедуры

    //******************************************************************************
    // Предопределенная процедура
    //
    Процедура ПриОткрытии()

    СтатусВозврата(0);
    ДанныеДляПечати = Форма.Параметр;

    Если ТипЗначенияСтр(ДанныеДляПечати) <> "СписокЗначений" Тогда
    Возврат;
    КонецЕсли;

    ПечФирма = ДанныеДляПечати.Получить("Фирма");
    ТаблицаТоваров = ДанныеДляПечати.Получить("Таблица");

    Сформировать(ТаблицаТоваров, ПечФирма);

    КонецПроцедуры // ПриОткрытии()

    :( :( :( :( :(

    добавлено через 1 час 35 минут
    а в каких еще модулях этот вызов может быть? распчатывать пытаюсь через номенклатуру.
    Сейчас переделал заново - опять та же ошибка:
    ПечСтрана = ТаблицаТоваров.Страна;
    {Обработка.ПечатьЦенников.Форма.Модуль(62)}: Поле агрегатного объекта не обнаружено (Страна)
     
  10. buffoon

    buffoon Активный участник

    6.379
    0
    позвоните ближайшему франю и не напрягайте мозг...
     
  11. Сам-по-себе

    Сам-по-себе Активный участник

    629
    0
    с радостью бы это сделал и без подсказки и не морочил бы голову другим, если бы такая возможность была!:)
     
  12. SAshock

    SAshock Активный участник

    577
    0
    Запусти отладчик

    Табл.Страна = Товар.СтранаПроисхождения;
    на этой строке поставь точку остановки
    запусти печать ценника

    В отладчике обработка должна остановиться на стопе.
    проверь в Табло
    Товар.СтранаПроисхождения=
    чему равно?
    дальше по F8, можешь пробежать все обработку,
    внизу в Табло можно смотреть занчения переменной - удачи ;)
     
  13. dj

    dj Активный участник

    892
    2
    Сам-по-себе, пропустил вот это:
    А вообще странно, только что проверил (первый пост писал просто глядя в конфигу ;) , почти с закрытыми глазами) - все работает.
    А в строках:
    ТабТМЦ.НоваяКолонка("Страна");
    Табл.Страна = Товар.СтранаПроисхождения;
    ПечСтрана = ТаблицаТоваров.Страна;
    буква С русская? Мож латиница?
    offtop.
    buffoon, вам жалко места на диске, которое занимает этот топик?
    мне нет, как не было жалко 5 минут времени на мой пост:d

    добавлено через 1 час 45 минут
    про пропустил - ошибся.
     
    Последнее редактирование: 27.10.06
  14. Сам-по-себе

    Сам-по-себе Активный участник

    629
    0
    dj, буквы все русские 100% т.к. латиницей пользуюсь на другом компе, на этом ее почти не бывает.
    SAshock, спасибо за совет, завтра буду пробовать, на свежую голову :)

    добавлено через 17 часов 41 минуту
    SAshock, запустил отладчик, точку остановки поставил.
    Печать ценника из 1С производить? Если из отладчика, то как? (Извините юзера!:d Он играет как может!)
    Из 1С пытался - та же ошибка, а в отладчике ничего.
    Вот еще нашел ссылочку, попытался сделать по ней - не получилось, все работает, без запинок, но страну так и не выдает.

    добавлено через 17 часов 42 минуты
    По рецепту Гиви

    добавлено через 20 часов 39 минут
    Чего-то не пойму логику, может здесь ошибка:
    а ссылка идет потом на ТаблицаТоваров.Товар
    хотя колонка "Страна" создавалась в таблице значений. :)

    добавлено через 20 часов 42 минуты
    UPS...:d т.е.на ТаблицаТоваров.Страна
     
  15. dj

    dj Активный участник

    892
    2
    Сам-по-себе, печать из формы списка Номенклатура или из формы элемента ? Такая ошибка будет, если вот это
    изменить только в модуле формы элемента справочника Номенклатура, а печатать из формы списка справочника Номенклатура.
    Знаешь чем отличается форма элемента справочника от формы списка ?
     
  16. buffoon

    buffoon Активный участник

    6.379
    0
    а в чем проблема?? на сайте 1с мона найти телефоны.. обзваниваешь всех, находишь самых дешевых и оплатив 1 час получаешь свою настройку..
     
  17. dj

    dj Активный участник

    892
    2
    buffoon, иди, просто иди...мимо.
     
  18. buffoon

    buffoon Активный участник

    6.379
    0
    dj,
    мы уже пили вместе?
     
  19. Сам-по-себе

    Сам-по-себе Активный участник

    629
    0
    насколько я понимаю, форма элемента - для единицы номенклатуры, т.е. печать вызывается для самого элемента, а форма списка - соответственно из списка номенклатуры....или я ошибаюсь?:(
     
  20. buffoon

    buffoon Активный участник

    6.379
    0
    [off]Сам-по-себе,вызовите наконец специалиста ...это будет намного быстрее, чем полторы недели[/off]
     
  21. Сам-по-себе

    Сам-по-себе Активный участник

    629
    0
    buffoon, я мазохист...:d
     
  22. ilya-79

    ilya-79 Активный участник

    4.933
    1
    мазохист это когда в ущерб себе.
    а когда в ущерб другим (бухам, или менеджерам) это уже садизм :), хотя может быть за это вам еще и деньги платят. ;)
    а если не платят, то воспользуйтесь советом Buffoon`a
     
  23. buffoon

    buffoon Активный участник

    6.379
    0
    название другое этому, но модератры не пропустят....

    неважно для кого вы это делаете (для себя или для людей) в любом случае вам нужен специалист, способный оказать помощь (либо обучить, либо настроить) :delo: ... осталось только осознать, что за работу которую не можешь выполнить сам надо платить...
     
  24. VitShvets

    VitShvets Активный участник

    547
    0
    Может человек лабу делает по 1С, может раазобраться хочет. Чего пристали то?
    ЗЫ. ;) Спец лучше сделает. Я к примеру немного подругому это делал. Не страну в обработку передавал, а ссылку на сам товар. Вдруг потом надо будет не только страну указать, но и еще чего нибудь, то исправить можно только одну обработку, а не 5 мест, откуда она вызывается.
     
  25. buffoon

    buffoon Активный участник

    6.379
    0
    чукча не читатель?? я же сказал, что в этом случае необходим специалист способный обучить.... и за эту работу (обучение) специалисту придется заплатить....
     
  26. VitShvets

    VitShvets Активный участник

    547
    0
    И читатель и писатель. Напрягите пару извилен, подумайте, какой опыт более ценен? Теоретический (когда пришли и всё показали) или практический(когда руками попробовал)? Как я понял по треду, ни срочности ни критичности в разборе вопроса нет, человек потихоньку разбирается с несложной задачкой, а вы ему тут ТЗ по ГОСТу предлагаете писать с заключением договора у франча. А может и денег банально нету. Или живёт далеко.

    Есть анекдот в тему (про чукчу кстати)
    Застрял геолог в тундре на машине, мучается, пытается вытащить.
    Мимо чукча на оленях проезжает, и говорит
    "Я знаю что делать, за бутылку скажу."
    Геолог "Да за бутылку я сам вытащу"
    Чукча дальше поехал. Часов через нцать возвращается чукча, геолог всё там-же, только более за...мучен, к чукче -
    "Вот пузырь скажи что делать?"
    Чукча взял пузырь, выпил его, подумал и говорит "Тут траактор нужен".

    ЗЫ Так кто из нас чукча?
     
  27. buffoon

    buffoon Активный участник

    6.379
    0
    судя по языку....

    нинада за меня додумывать....читайте внимательно...

    практика без теории - ничто... прежде чем чтото пробовать - надо знать где и что именно...
     
  28. Сам-по-себе

    Сам-по-себе Активный участник

    629
    0
    Лучше
    не могу сказать!
     
  29. VitShvets

    VitShvets Активный участник

    547
    0
    Очепятки у всех бывают. Человек конкретно задал вопрос - что сделать?
    А вы ему "Траактор надо, однако". Намек понятен?
    Дык, спросил бы наверное по другому. Напр, "А кто меня научит за денюжку страны в ценники включать" или "А что почитать(где научиться) вставлять страну в ценник".
     
  30. buffoon

    buffoon Активный участник

    6.379
    0
    читать так и не научились... попробую разжевать: низя объяснить слепому красоту заката... да и лечение по фотографии обычно не эффективно..