Реклама на этом месте
Форум 1С
Форум 1С
Программистам. Бухгалтерам. Администраторам. Пользователям
Задай вопрос - получи решение проблемы. Без троллинга и флуда.
29 Мар 2017, 08:16
МультиВход
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?
 
collapse

Автор Тема: ПолучитьНомерНаПечать  (Прочитано 612 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Гайдар

  • *
  • Сообщений: 45
  • РЕПУТАЦИЯ: 1
  • КПД: 2%
  • Регистрация: 2011-09-16
  • Сайт: 
  • Профессия: Ученик 1С

Добрый день!

Помогите , если не сложно, изменить функцию так, чтобы в печатной форме выходил номер полностью (с префиксом и нулями после идущих)


Функция ПолучитьНомерНаПечать(Документ, МассивПрефиксов = Неопределено, ПечатьПрефиксовРИБ = Истина) Экспорт

   Если Документ = Неопределено Тогда
      Возврат 0;
   КонецЕсли;

   ПечатьПрефиксовРИБ = ОбщегоНазначения.ПолучитьЗначениеПеременной("ПечатьПрефиксаРИБ") И ПечатьПрефиксовРИБ;

   Номер   = СокрЛП(Документ.Номер);
   Префикс = "";

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

   Если ПечатьПрефиксовРИБ И ПрефиксРИБ <> "" Тогда
      Номер = ПрефиксРИБ + Номер;
   КонецЕсли;

   Возврат Номер;

КонецФункции // ПолучитьНомерНаПечать()


Оффлайн cska-fanat-kz

  • 1С:Специалист
  • Глобальный модератор
  • *****
  • Сообщений: 5745
  • РЕПУТАЦИЯ: 1096
  • КПД: 19%
  • Красная армия всех сильней!
  • Регистрация: 2010-11-06
    • Skype: cska-fanat-kz81
  • Сайт: cska-fanat-kz.ucoz.kz
  • Профессия: Разработчик 1С
по идее не надо код править... :fdbsdfbsd:
настройка должна быть как номер на печать выводить...
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

Оффлайн Гайдар

  • *
  • Сообщений: 45
  • РЕПУТАЦИЯ: 1
  • КПД: 2%
  • Регистрация: 2011-09-16
  • Сайт: 
  • Профессия: Ученик 1С
по идее не надо код править... :fdbsdfbsd:
настройка должна быть как номер на печать выводить...
не нахожу такой настройки ,  "Управление торговлей", редакция 10.3 (10.3.36.1) , надо в печатной форме документа "Акт сверки взаиморасчетов" выводить полный номер регистратора

Оффлайн Kironten

  • *****
  • Сообщений: 766
  • РЕПУТАЦИЯ: 164
  • КПД: 21%
  • Регистрация: 2013-08-12
  • Сайт: 
  • Профессия: Ученик 1С
Да и вообще, зачем эта котовасия?
Записанный документ есть? Есть.
Берите Документ.Номер.
Все.
Не надо использовать никаких ПолучитьНомерНаПечать(). Эта функция как раз и сделана, чтобы отсекать ненужное. Хотите видеть это самое "ненужное" не используйте её.

Оффлайн Гайдар

  • *
  • Сообщений: 45
  • РЕПУТАЦИЯ: 1
  • КПД: 2%
  • Регистрация: 2011-09-16
  • Сайт: 
  • Профессия: Ученик 1С
Да и вообще, зачем эта котовасия?
Записанный документ есть? Есть.
Берите Документ.Номер.
Все.
Не надо использовать никаких ПолучитьНомерНаПечать(). Эта функция как раз и сделана, чтобы отсекать ненужное. Хотите видеть это самое "ненужное" не используйте её.
В документ Акт сверки заполняется за период по контрагенту всеми документами (расход, приход). Пришлось закомментировать
          // удаление ведущих нулей
      //Пока Лев(Номер, 1)="0" Цикл
      //   Номер = Сред(Номер, 2);
      //КонецЦикла;
Теперь заполняется таб. часть Акт сверки представлениями регаистраторов с полными номерами.
  По другому сложновато для меня.

Оффлайн Kironten

  • *****
  • Сообщений: 766
  • РЕПУТАЦИЯ: 164
  • КПД: 21%
  • Регистрация: 2013-08-12
  • Сайт: 
  • Профессия: Ученик 1С
Да и вообще, зачем эта котовасия?
Записанный документ есть? Есть.
Берите Документ.Номер.
Все.
Не надо использовать никаких ПолучитьНомерНаПечать(). Эта функция как раз и сделана, чтобы отсекать ненужное. Хотите видеть это самое "ненужное" не используйте её.
В документ Акт сверки заполняется за период по контрагенту всеми документами (расход, приход). Пришлось закомментировать
          // удаление ведущих нулей
      //Пока Лев(Номер, 1)="0" Цикл
      //   Номер = Сред(Номер, 2);
      //КонецЦикла;
Теперь заполняется таб. часть Акт сверки представлениями регаистраторов с полными номерами.
  По другому сложновато для меня.
Не очень хороший выход.
Теперь везде, где используется эта функция вы будете получать номера с лидирующими нулями.
Если это у вас рабочая база, получите от бухгалтерии по голове, когда полезут печатные формы ВСЕХ документов с лидирующими нулями.

Оффлайн Гайдар

  • *
  • Сообщений: 45
  • РЕПУТАЦИЯ: 1
  • КПД: 2%
  • Регистрация: 2011-09-16
  • Сайт: 
  • Профессия: Ученик 1С
Да и вообще, зачем эта котовасия?
Записанный документ есть? Есть.
Берите Документ.Номер.
Все.
Не надо использовать никаких ПолучитьНомерНаПечать(). Эта функция как раз и сделана, чтобы отсекать ненужное. Хотите видеть это самое "ненужное" не используйте её.
В документ Акт сверки заполняется за период по контрагенту всеми документами (расход, приход). Пришлось закомментировать
          // удаление ведущих нулей
      //Пока Лев(Номер, 1)="0" Цикл
      //   Номер = Сред(Номер, 2);
      //КонецЦикла;
Теперь заполняется таб. часть Акт сверки представлениями регаистраторов с полными номерами.
  По другому сложновато для меня.
Не очень хороший выход.
Теперь везде, где используется эта функция вы будете получать номера с лидирующими нулями.
Если это у вас рабочая база, получите от бухгалтерии по голове, когда полезут печатные формы ВСЕХ документов с лидирующими нулями.

Процедура ЗаполнитьПредставлениеДокументов(ТаблицаЗначений)
   
   Если ТаблицаЗначений.Количество() = 0 Тогда
      Возврат;
   КонецЕсли;
      
   КэшПоТипам = Новый Соответствие;
   
   Для каждого СтрокаТаблицы Из ТаблицаЗначений Цикл
      Если НЕ ЗначениеЗаполнено(СтрокаТаблицы.ДокументРегистратор) Тогда
         Продолжить;
      КонецЕсли;
      
      ТипТекущегоДокумента = ТипЗнч(СтрокаТаблицы.ДокументРегистратор);
      Если Документы.ТипВсеСсылки().СодержитТип(ТипТекущегоДокумента) Тогда
         
         МассивТипа = КэшПоТипам[ТипТекущегоДокумента];
         Если МассивТипа = Неопределено Тогда
            МассивТипа = Новый Массив;
            КэшПоТипам.Вставить(ТипТекущегоДокумента, МассивТипа);
         КонецЕсли;
         
         МассивТипа.Добавить(СтрокаТаблицы.ДокументРегистратор);
         
      КонецЕсли;
      
   КонецЦикла;
   
   Если КэшПоТипам.Количество() = 0 Тогда
      Возврат;
   КонецЕсли;
   
   ТаблицаЗначений.Индексы.Добавить("ДокументРегистратор");
   
   ТаблицаЗначений.Колонки.Добавить("Представление", Новый ОписаниеТипов("Строка"));
   
   Запрос = Новый Запрос;

   Для Каждого КлючИЗначение ИЗ КэшПоТипам Цикл
      МетаданныеТипа = Метаданные.НайтиПоТипу(КлючИЗначение.Ключ);
      ИмяМетаданных  = МетаданныеТипа.Имя;
      ЕстьНомерВходящегоДокумента = МетаданныеТипа.Реквизиты.Найти("НомерВходящегоДокумента") <> Неопределено;
      ЕстьДатаВходящегоДокумента  = МетаданныеТипа.Реквизиты.Найти("ДатаВходящегоДокумента") <> Неопределено;

      Запрос.Текст = Запрос.Текст
      + ?(Запрос.Текст = "", "",
      "
      |
      |ОБЪЕДИНИТЬ ВСЕ
      |")
      + "
      |ВЫБРАТЬ
      |   """ + МетаданныеТипа.Синоним + """ КАК ПредставлениеТипа,
      |   Док.Ссылка  КАК Ссылка,
      |   " + ?(ЕстьНомерВходящегоДокумента, "Док.НомерВходящегоДокумента", "НЕОПРЕДЕЛЕНО") + " КАК Номер,
      |   " + ?(ЕстьДатаВходящегоДокумента, "Док.ДатаВходящегоДокумента", "Док.Дата") + " КАК Дата
      |ИЗ
      |   Документ."+ИмяМетаданных+" КАК Док
      |ГДЕ Док.Ссылка В (&ДокументыТипа_"+ИмяМетаданных+")";
      Запрос.УстановитьПараметр("ДокументыТипа_"+ИмяМетаданных, КлючИЗначение.Значение);
      
   КонецЦикла;
   
   Выборка = Запрос.Выполнить().Выбрать();
   Пока Выборка.Следующий() Цикл
      НомерДокумента  = ?(Выборка.Номер = Неопределено, ОбщегоНазначения.ПолучитьНомерНаПечать(Выборка.Ссылка), Выборка.Номер);
      ДатаДокумента = Формат(Выборка.Дата, "ДФ='дд ММ гггг'");
      СтрокаДокумента = ТаблицаЗначений.Найти(Выборка.Ссылка, "ДокументРегистратор");
      СтрокаДокумента.Представление =  Выборка.ПредставлениеТипа + " № " + НомерДокумента + " от " + ДатаДокумента;
   КонецЦикла;
   
КонецПроцедуры

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

Оффлайн Kironten

  • *****
  • Сообщений: 766
  • РЕПУТАЦИЯ: 164
  • КПД: 21%
  • Регистрация: 2013-08-12
  • Сайт: 
  • Профессия: Ученик 1С
//НомерДокумента  = ?(Выборка.Номер = Неопределено, ОбщегоНазначения.ПолучитьНомерНаПечать(Выборка.Ссылка), Выборка.Номер);
НомерДокумента  = Выборка.Ссылка.Номер;
НО!
Сейчас в меня полетят камни, и кстати, за дело.
Правильно будет сделать ВПФ и уже в ней заполнять все что вам нужно, как нужно, а не коверкать код формы документа.
Не поленитесь, сделайте ВПФ - это будет правильным решением.
Инструкций в инете навалом.

Оффлайн Гайдар

  • *
  • Сообщений: 45
  • РЕПУТАЦИЯ: 1
  • КПД: 2%
  • Регистрация: 2011-09-16
  • Сайт: 
  • Профессия: Ученик 1С
//НомерДокумента  = ?(Выборка.Номер = Неопределено, ОбщегоНазначения.ПолучитьНомерНаПечать(Выборка.Ссылка), Выборка.Номер);
НомерДокумента  = Выборка.Ссылка.Номер;
НО!
Сейчас в меня полетят камни, и кстати, за дело.
Правильно будет сделать ВПФ и уже в ней заполнять все что вам нужно, как нужно, а не коверкать код формы документа.
Не поленитесь, сделайте ВПФ - это будет правильным решением.
Инструкций в инете навалом.
Спасибо Вам!


Теги:
 


* Живое общение

Не устроил ответ?

Зарегистрируйся и задай свой вопрос. Живое общение приносит результат намного быстрее.


Зарегистрироваться

* Реклама

* Поиск

* Последние задачи на разработку (фриланс)

* Реклама

* Последние вакансии

* Топ 10 авторов за месяц

Геннадий ОбьГЭС Геннадий ОбьГЭС
158 Сообщений
alex0402
125 Сообщений
MuI_I_Ika MuI_I_Ika
54 Сообщений
Norfolk
52 Сообщений
LexaK
47 Сообщений
друган
20 Сообщений
alexandr_ll
20 Сообщений
Константин5825
18 Сообщений
AsadRoman
18 Сообщений
MrLvovsky MrLvovsky
16 Сообщений

* Кто онлайн

  • Точка Гостей: 519
  • Точка Скрытых: 0
  • Точка Пользователей: 5
  • Точка Сейчас на форуме:

* Облако тэгов

* Форум 1С с мобильного

* Инструменты

* Дополнительно

Поиск

 

Dellos Catering - выездной ресторан кейтеринг по всему Миру
SimplePortal 2.3.5 © 2008-2012, SimplePortal