|
Как присвоить новый номер интеравктивно? | ☑ | ||
|---|---|---|---|---|
|
0
Matrix
11.01.05
✎
10:46
|
При создании документов при помощи обработки через Док=СоздатьОбъект()
Док.Новый(), программа не присваивает новый номер , а дает номер уже существующего документа! Как можно этого избежать может кто знает? |
|||
|
1
Diter
11.01.05
✎
10:51
|
1. Установить автонумерацию документов
2. если автонумерация установлена - найти косяк в нумерации и перенумеровать документы программно (или, если времени много, вручную) |
|||
|
2
Парижская фанера
11.01.05
✎
10:52
|
(0) УстановитьНовыйНомер() вам поможет.
ЗЫ то про что пишешь - это НЕ интерактивно |
|||
|
3
111
11.01.05
✎
10:53
|
См. синтакс-помощник метод документа УстановитьНовыйномер() и атрибут документа НомерДок.
|
|||
|
4
Matrix
11.01.05
✎
11:11
|
функция УстановитьНовыНомер() не канает. Префикс устанавливает а номер все равно остается прежним и на следующем документе при записи говорит что номер не уникальный.
|
|||
|
5
Кортес
11.01.05
✎
11:13
|
См. (1.2)
|
|||
|
6
Diter
11.01.05
✎
11:13
|
(4) читай (1) и думай. У тебя нумерация сбита! Либо исчерпал все возможные при данной длине номера варианты, либо сбили вручную. Это исправлять надо - перенумеровывать документы.
|
|||
|
7
Matrix
11.01.05
✎
11:15
|
Причем если документ создается вручную в 1С - новый номер нормально генерируется. Если же из обработки то выдает номер последнего документа а не генерит новый номер.
|
|||
|
8
Diter
11.01.05
✎
11:16
|
(7) Вот это уже интереснее. Код создания нового документа (через Copy-Paste) выложи
|
|||
|
9
111
11.01.05
✎
11:17
|
Попробуй в цикле через Попытка - Исключение присваивать номер = номер + 1 пока не перестанет ругаться.
|
|||
|
10
Matrix
11.01.05
✎
11:21
|
Процедура СоздатьДокумент(ТаблицаТоваров,Склад,ДатаСклад,ВремяСклад);
Док=СоздатьОбъект("Документ.ПереоценкаРозница"); Док.Новый(); //Док.УстановитьНовыйНомер(Константа.ПрефиксИБ); Док.Склад=Склад; Вал=СоздатьОбъект("Справочник.Валюты"); Вал.НайтиПоКоду("810"); Док.Валюта=Вал.ТекущийЭлемент(); Док.Курс=1; Док.Фирма=Склад.Фирма; Док.ДатаДок=ДатаСклад; СпрПользователи=СоздатьОбъект("Справочник.Пользователи"); СпрПользователи.НайтиПоКоду(ИмяПользователя()); Док.Автор=СпрПользователи.ТекущийЭлемент(); поз=Найти(ВремяСклад,":"); Час=Число(Лев(ВремяСклад,поз-1)); пер=Прав(ВремяСклад,СтрДлина(ВремяСклад)-поз); поз=Найти(пер,":"); Минута=Число(Лев(пер,поз-1)); пер1=Прав(пер,СтрДлина(пер)-поз); Секунда=Число(пер1); Док.АвтоВремяОтключить(); Док.УстановитьВремя(Час,Минута,Секунда); Если ТаблицаТоваров.КоличествоСтрок()=0 Тогда Возврат; КонецЕсли; ТаблицаТоваров.ВыбратьСтроки(); Пока ТаблицаТоваров.ПолучитьСтроку()=1 Цикл Док.НоваяСтрока(); ФРасп=ТаблицаТоваров.Распродажа; Док.Номенклатура=ТаблицаТоваров.Товар; Док.Единица=Док.Номенклатура.БазоваяЕдиница; Док.Коэффициент=Док.Единица.Коэффициент; Док.Количество=ТаблицаТоваров.Остаток; Док.ЦенаНовая=ТаблицаТоваров.НоваяЦена; Док.ЦенаСтарая=ПолучитьСтаруюЦену(Док.Номенклатура,Склад,,Док); //Обновляем справочник номенклатура Если ФРаспродажа=1 Тогда Если Док.Номенклатура.Выбран()=1 Тогда Спр=СоздатьОбъект("Справочник.Номенклатура"); Спр.НайтиПоКоду(Док.Номенклатура.Код); Спр.Распродажа.Установить(Док.ДатаДок,1); КонецЕсли; Конецесли; КонецЦикла; Если ФРасп=1 Тогда Док.Распродажа=1; Конецесли; ОбъектЗаписать(Док); Сообщить("Создан документ "+Док); КонецПроцедуры |
|||
|
11
miki
11.01.05
✎
11:23
|
Док.ДатаДок=ДатаСклад
Может ДатаГод(ДатаСклад)=2004? |
|||
|
12
Diter
11.01.05
✎
11:24
|
А что такое ОбъектЗаписать(Док); ??? Речь о 7.7 ?
|
|||
|
13
Matrix
11.01.05
✎
11:24
|
это процедура вызывается в обработке несколько раз !
каждый раз должен создаваться документ |
|||
|
14
Matrix
11.01.05
✎
11:25
|
да о 7.7
это стандартная процедура для МОД записывает новый объект |
|||
|
15
Diter
11.01.05
✎
11:25
|
Поставь Док.УстановитьНовыйНомер(Константа.ПрефиксИБ); перед оператором Док.Записать();
|
|||
|
16
Diter
11.01.05
✎
11:26
|
Ты МОД сам пишешь? Или курочишь готовый?
|
|||
|
17
Matrix
11.01.05
✎
11:30
|
нет МОД готовый он нормально работает (писал его не я а до меня)
Фишка в том что эта процедура нормально работала все время и заглючила в Новом Году |
|||
|
18
Парижская фанера
11.01.05
✎
11:30
|
ИМХО все проще - надо сначала дату присваивать, потом уже УстановитьНовыйНомер()
|
|||
|
19
Diter
11.01.05
✎
11:36
|
(18) Думаю аналогично "коллега".
(17) При создании документа вначале ему устанавливается дата, пото только устанавливается номер в зависимости от периодичности нумерации. Теперь смотри После Док.Новый() программа взяла текущую дату и установила номер. После изменения тобой даты документа, программа может изменить номер только после этого изменения. Вот поэтому и нужно ставить УстановитьНовыйНомер() прямо перед Док.Записать() |
|||
|
20
Matrix
11.01.05
✎
14:00
|
Все таки это просто было из-за того что с Нового Года нумерация начинается заново , а прога находила такие докумениы за 2004 год!
|
|||
|
21
miki
11.01.05
✎
14:02
|
(20)Умел бы читать не ипал бы мозги уже с 11.01.05 - 11:23.
|
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |