Имя: Пароль:
1C
 
Как присвоить новый номер интеравктивно?
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.
Я не хочу быть самым богатым человеком на кладбище. Засыпать с чувством, что за день я сделал какую-нибудь потрясающую вещь — вот что меня интересует. Стив Джобс