Имя: Пароль:
1C
1С v8
Вопрос по печатной форме. ☑
0 Diageru
 
24.05.12
✎
12:22
Добрый день. Работаем с 1С:Предприятие 8.2 (8.2.15.301): 1С Розница 1.0 (1.0.15.4) и Бухгалтерия предприятия 2.0 (2.0.35.5).
Возник вопрос: В бухгалтерии при формировании кассовой книге в печатной форме номера документов заполняются без префиксов и нулей, но расходный кассовый ордера попавший по обмену с розници записываются с префиксами и нулями. Просят их убрать. Стоит ли сразу пытаться сделать новую печатную форму или есть опция отключения печати префиксов РКО полученных из розницы.
1 Diageru
 
25.05.12
✎
12:56
Итак, пока ждал ответа решил посмотреть отчёт в конфигураторе. Номер документов там передаётся с помощью:

СтруктураНомерДок = Новый Структура;
СтруктураНомерДок.Вставить("Организация",Организация);
СтруктураНомерДок.Вставить("Номер",Документ.НомерДок);

НомерДокПечатнойФормы = ОбщегоНазначения.ПолучитьНомерНаПечать(СтруктураНомерДок);

Смотрю общий модуль ОбщегоНазначения и не могу понять: там стоит удаление префиксов и нулей. Подскажите может можно получить номера документов без префиксов и нулей прямо в отчёте без ссылки на общий модуль.
2 Wobland
 
25.05.12
✎
12:58
(1) общих модулей избегаешь?
3 ale-sarin
 
25.05.12
✎
13:26
(0) А для чего нужны префиксы, известно Вам?
Надо бороться с такими просьбами.
4 Diageru
 
25.05.12
✎
14:00
Я понимю, что префиксы необходимы чтобы можно было отличить документы с одинаковой нумерацией, но из разных источников. Но в бухгалтерии каждый раз руками префиксы и нули убирают. Потому и просять чтоб в печатной форме не писались.
Общий модуль не избегаю, просто не могу понять здесь вроде стоит удаление префиксов и нулей, почему же рко идут с ними:
Функция ПолучитьНомерНаПечать(Документ, МассивПрефиксов = Неопределено) Экспорт

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

   Номер   = СокрЛП(Документ.Номер);
   
   // {ОбменДаннымиБСП
   // Если номер документа по стандарту БСП 8.2, сформируем номер через стандартную процедуру БСП.
   Если ПолучитьФункциональнуюОпцию("ИспользоватьОбменДанными") = Истина Тогда
       
       Если Сред(Номер, 5, 1) = "-" Тогда
           Номер = ПрефиксацияОбъектовКлиентСервер.ПолучитьНомерНаПечать(Номер,
           Ложь, // УдалитьПрефиксИнформационнойБазы
           Истина // УдалитьПользовательскийПрефикс
           );
           Возврат Номер;
       КонецЕсли;
       
   КонецЕсли;
   // }ОбменДаннымиБСП
   
   Префикс = "";
   Если МассивПрефиксов = Неопределено Тогда
       
       Организация              = Неопределено;
       ПодразделениеОрганизации = Неопределено;
       
       Если ТипЗнч(Документ) = Тип("ВыборкаИзРезультатаЗапроса")
           ИЛИ ТипЗнч(Документ) = Тип("Структура") Тогда

           Организация = Документ.Организация;
           
       Иначе

           МетаданныеДокумента = Документ.Метаданные();

           Если ЕстьРеквизитДокумента("Организация", МетаданныеДокумента) Тогда

               Организация = Документ.Организация;

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

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

КонецФункции // ПолучитьНомерНаПечать()
5 ale-sarin
 
25.05.12
✎
14:21
(4) А если в бухгалтерии новая организация добавится? Чего делать будете с нумерацией?
6 Diageru
 
25.05.12
✎
16:22
Я конечно попытаюсь им это объяснить. Но это другой вопрос.
Создал внешний отчёт и перенёс в него Функцию ПолучитьНомерНаПечать.
Функция ПолучитьНомерНаПечать(Документ, МассивПрефиксов = Неопределено) Экспорт
   
   Номер   = СокрЛП(Документ.Номер);
       
       МассивПрефиксов = Новый Массив();
   
   Запрос = Новый Запрос();
   Запрос.Текст = "ВЫБРАТЬ Различные
                  |    ПрефиксыИнформационныхБаз.Префикс КАК Префикс
                  |ИЗ
                  |    РегистрСведений.ПрефиксыИнформационныхБаз КАК ПрефиксыИнформационныхБаз";
   
   ВыборкаУзлов = Запрос.Выполнить().Выбрать();
   Пока ВыборкаУзлов.Следующий() Цикл
       
       Если Не ПустаяСтрока(ВыборкаУзлов.Префикс) Тогда
           
           МассивПрефиксов.Добавить(ВыборкаУзлов.Префикс);
           
       КонецЕсли;
       
   КонецЦикла;
       
       Для Каждого ТекущийПрефикс ИЗ МассивПрефиксов Цикл

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

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

КонецФункции

Основная загвостка, как получить ТекущийПрефикс. МассивПрефиксов передаёт только часть префикса - БП - префикс бухгалтерии и игнорирует префиксы P1 и P2. Подскажите, что можно ещё сделать.
Компьютеры — это как велосипед. Только для нашего сознания. Стив Джобс