Форум 1С
Программистам, бухгалтерам, администраторам, пользователям
Задай вопрос - получи решение проблемы
18 апр 2024, 05:07

ПолучитьНомерНаПечать

Автор Гайдар, 12 авг 2016, 12:14

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

Гайдар


Добрый день!

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


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

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

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

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

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

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

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

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

cska-fanat-kz

по идее не надо код править... :fdbsdfbsd:
настройка должна быть как номер на печать выводить...
Получил помощь - скажи СПАСИБО.
Разобрался сам - расскажи другим.

Гайдар

Цитата: cska-fanat-kz от 12 авг 2016, 12:29
по идее не надо код править... :fdbsdfbsd:
настройка должна быть как номер на печать выводить...
не нахожу такой настройки ,  "Управление торговлей", редакция 10.3 (10.3.36.1) , надо в печатной форме документа "Акт сверки взаиморасчетов" выводить полный номер регистратора

Kironten

Да и вообще, зачем эта котовасия?
Записанный документ есть? Есть.
Берите Документ.Номер.
Все.
Не надо использовать никаких ПолучитьНомерНаПечать(). Эта функция как раз и сделана, чтобы отсекать ненужное. Хотите видеть это самое "ненужное" не используйте её.

Гайдар

Цитата: Kironten от 12 авг 2016, 12:36
Да и вообще, зачем эта котовасия?
Записанный документ есть? Есть.
Берите Документ.Номер.
Все.
Не надо использовать никаких ПолучитьНомерНаПечать(). Эта функция как раз и сделана, чтобы отсекать ненужное. Хотите видеть это самое "ненужное" не используйте её.
В документ Акт сверки заполняется за период по контрагенту всеми документами (расход, приход). Пришлось закомментировать
          // удаление ведущих нулей
      //Пока Лев(Номер, 1)="0" Цикл
      //   Номер = Сред(Номер, 2);
      //КонецЦикла;
Теперь заполняется таб. часть Акт сверки представлениями регаистраторов с полными номерами.
  По другому сложновато для меня.

Kironten

Цитата: Гайдар от 12 авг 2016, 13:56
Цитата: Kironten от 12 авг 2016, 12:36
Да и вообще, зачем эта котовасия?
Записанный документ есть? Есть.
Берите Документ.Номер.
Все.
Не надо использовать никаких ПолучитьНомерНаПечать(). Эта функция как раз и сделана, чтобы отсекать ненужное. Хотите видеть это самое "ненужное" не используйте её.
В документ Акт сверки заполняется за период по контрагенту всеми документами (расход, приход). Пришлось закомментировать
          // удаление ведущих нулей
      //Пока Лев(Номер, 1)="0" Цикл
      //   Номер = Сред(Номер, 2);
      //КонецЦикла;
Теперь заполняется таб. часть Акт сверки представлениями регаистраторов с полными номерами.
  По другому сложновато для меня.
Не очень хороший выход.
Теперь везде, где используется эта функция вы будете получать номера с лидирующими нулями.
Если это у вас рабочая база, получите от бухгалтерии по голове, когда полезут печатные формы ВСЕХ документов с лидирующими нулями.

Гайдар

Цитата: Kironten от 12 авг 2016, 14:10
Цитата: Гайдар от 12 авг 2016, 13:56
Цитата: Kironten от 12 авг 2016, 12:36
Да и вообще, зачем эта котовасия?
Записанный документ есть? Есть.
Берите Документ.Номер.
Все.
Не надо использовать никаких ПолучитьНомерНаПечать(). Эта функция как раз и сделана, чтобы отсекать ненужное. Хотите видеть это самое "ненужное" не используйте её.
В документ Акт сверки заполняется за период по контрагенту всеми документами (расход, приход). Пришлось закомментировать
          // удаление ведущих нулей
      //Пока Лев(Номер, 1)="0" Цикл
      //   Номер = Сред(Номер, 2);
      //КонецЦикла;
Теперь заполняется таб. часть Акт сверки представлениями регаистраторов с полными номерами.
  По другому сложновато для меня.
Не очень хороший выход.
Теперь везде, где используется эта функция вы будете получать номера с лидирующими нулями.
Если это у вас рабочая база, получите от бухгалтерии по голове, когда полезут печатные формы ВСЕХ документов с лидирующими нулями.

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

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

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

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

Kironten

//НомерДокумента  = ?(Выборка.Номер = Неопределено, ОбщегоНазначения.ПолучитьНомерНаПечать(Выборка.Ссылка), Выборка.Номер);
НомерДокумента  = Выборка.Ссылка.Номер;

НО!
Сейчас в меня полетят камни, и кстати, за дело.
Правильно будет сделать ВПФ и уже в ней заполнять все что вам нужно, как нужно, а не коверкать код формы документа.
Не поленитесь, сделайте ВПФ - это будет правильным решением.
Инструкций в инете навалом.

Гайдар

Цитата: Kironten от 12 авг 2016, 15:39
//НомерДокумента  = ?(Выборка.Номер = Неопределено, ОбщегоНазначения.ПолучитьНомерНаПечать(Выборка.Ссылка), Выборка.Номер);
НомерДокумента  = Выборка.Ссылка.Номер;

НО!
Сейчас в меня полетят камни, и кстати, за дело.
Правильно будет сделать ВПФ и уже в ней заполнять все что вам нужно, как нужно, а не коверкать код формы документа.
Не поленитесь, сделайте ВПФ - это будет правильным решением.
Инструкций в инете навалом.
Спасибо Вам!

Теги:
Рейтинг@Mail.ru

Поиск