Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > 1C: Предприятие, SAP, ERP и учётные системы > Номер документа введённого на основании


Автор: etc 5.8.2008, 09:10
День добрый, люди добрые. 
Подскажите, как можно, и можно ли, реализовать следующую задумку.
Есть документ Приход с номером Пн-0001 и при вводе, на основании этого прихода, например перемещения, хотелось бы что бы номер перемещения имел вид Пм-0001/1. Затем при вводе второго перемещения на основании этой же приходной, номер уже имел бы вид Пм-0001/2 ну и т.д.  И плюс ко всему если перемещение вводится не на основании, то номер уже должен идти без "/1"
Вообще реально ли такое осуществить? Подскажите как?! 

Спасибо!

Автор: Kaboom 5.8.2008, 09:58
Цитата(etc @  5.8.2008,  09:10 Найти цитируемый пост)
Вообще реально ли такое осуществить?

Да.

Цитата(etc @  5.8.2008,  09:10 Найти цитируемый пост)
Подскажите как?! 

Для начала скажи версию 1С.

Автор: etc 5.8.2008, 10:15
Сорри, забыл написать. 7.7  ТиС9.2

Автор: Itsys 5.8.2008, 10:39
 smile На пальцах сложно объяснить... проще сделать....

Но надо найти процедуру в модуле формы ПеремещениеТМЦ "ЗаполнениеПоДокументуОснованию", пришли код процедуры, напишу что надо изменить....

Автор: Kaboom 5.8.2008, 10:43
В модуле формы перемещения пишем процедуру ВводНаОсновании() в которой и формируем новый номер документа.
Код

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

Код не проверялся, возможны ошибки. Учтите также, что номер перемещения должен иметь большую длину чем номер приходной накладной, иначе указанный код нужно подправить.


Автор: etc 5.8.2008, 11:21
Kaboom, спасибо, код отлично работает, но есть одно НО: 
Цитата

И плюс ко всему если перемещение вводится не на основании, то номер уже должен идти без "/1"

Если потом ввожу обычное перемещение, то он плюсуюе "/"

Автор: Itsys 5.8.2008, 11:38
Цитата(etc @  5.8.2008,  11:21 Найти цитируемый пост)
Если потом ввожу обычное перемещение, то он плюсуюе "/" 

С этим ты уже ничего не сделаешь... так работает встроенный механизм генерации номера, как вариант можно предложить использовать не "/[индекс документа]", а префикс в втвоем варианте "Пм-10001", "Пм-20001", "Пм-30001" и т.д.

Автор: Kaboom 5.8.2008, 12:45
Цитата(Itsys @  5.8.2008,  11:38 Найти цитируемый пост)
С этим ты уже ничего не сделаешь... 

Ну сделать можно. Просто нужно забыть о формировании номера самой 1С-кой и сделать свой механизм.

Автор: Itsys 5.8.2008, 12:54
Цитата(Kaboom @  5.8.2008,  12:45 Найти цитируемый пост)
Просто нужно забыть о формировании номера самой 1С-кой и сделать свой механизм

И сколько будет открываться новый документ при количестве документов перемещения ну допустим... 10000 за год?

Автор: Itsys 5.8.2008, 13:15
ЗЫ и как ты будешь разруливать ситуацию, когда одновременно 2 пользователя захотят ввести новое перемещение?

Автор: Kaboom 5.8.2008, 14:12
Цитата(Itsys @  5.8.2008,  12:54 Найти цитируемый пост)
И сколько будет открываться новый документ при количестве документов перемещения ну допустим... 10000 за год? 

Сделать выборку с конца а не начала.
Цитата(Itsys @  5.8.2008,  13:15 Найти цитируемый пост)
ЗЫ и как ты будешь разруливать ситуацию, когда одновременно 2 пользователя захотят ввести новое перемещение? 

Можно константу с последним номером сделать, тогда и получение номера будет быстрее; а можно и записывать документ после открытия smile

Добавлено через 1 минуту и 14 секунд
Все же думаю что нет проблем которые не решаются  smile 

Автор: Itsys 5.8.2008, 15:44
Kaboom, я могу привести еще кучу "а если" при которых предложенные тобой варианты будут неработоспособны, но при этом я могу придумать средства обхода данных ситуаций, потом появятся новые проблемы и т.д. я за свою практику уже столько раз сталкивался с неработосособными системами ручной установки новых номеров.... Что большой тебе совет от меня - не делай так если не хочешь гемороя на свою Ж в дальнейшем. Лучше найти вариант, который устроит заказчика, и, при этом, будет использовать стандартный алгоритм присвоения номера документа.

Я думаю что хватит растекаться мыслями не связаннми с основным топиком....  smile 

Автор: Kaboom 5.8.2008, 18:08
etc, соглашусь с Itsys, надежнее создать новый реквизит шапки для дополнительного номера документа.
 

Автор: sai_NT 8.8.2008, 01:19
Для этого и существует метод УстановитьНовыйНомер
Код

Процедура ВводНаОсновании(ДокОснование)
   Если ДокОснование.Вид() = "ПриходнаяНакладная" Тогда
      УстановитьНовыйНомер(ДокОснование.НомерДок + "/");
   КонецЕсли;
КонецПроцедуры

но могут появиться пробелы (т.е Пм-0001/1, Пм-0001/2 и сразу Пм-0001/4) так как кто-то начнет вводить документ на основании, а потом откажется. Хотя такая же ситуация возникнет и при удалении уже созданного документа при любых предложенных методиках.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)