Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: общая нумерация документов в двух разных базах 1С SQL версии
Украинский 1С форум: всё про 1С 8.3, 1С 8.2, 1С 8.1, 1С 8.0, 1С 7.7 > Программисту > Программирование в 1С Предприятие 7.7
Murik_1984
Ребята, подскажите, как сделать общую нумерацию документа, например НалоговаяНакладная, в двух SQL базах 1C.
База, нумерация которой будет ведущей, та, у которой налоговых за месяц больше (назовем ее ведущей).
Следовательно подключаюсь я к ней из ведомой базы. Делаю я это вот так:

Функция глСоединениеСБД() Экспорт
     Попытка
           База = СоздатьОбъект("ODBCDatabase");
           База.Attach1C();
           Соединение = СокрЛП(Константа.СтрокаСоединенияСSQL); // соединяется нормально, проверено
           Рез = База.Соединение(Соединение);
          
           глРекордсет = СоздатьОбъект("ODBCRecordSet");
           глРекордсет.SetDatabase(База);
     Исключение
           Предупреждение("Нет соединения с БД Талонов!");
           Возврат 0;
     КонецПопытки;
     Возврат 1;
КонецФункции

// а потом в процедуре ВводНового() я хочу присвоить номер документу
  .....
       Если глСоединениеСБД() = 0 Тогда
           Возврат;
     КонецЕсли;

     ТаблицаНалоговых = СоздатьОбъект("SQLLock");
     ТаблицаНалоговых.УстановитьТипОбъекта("Документ","НалоговаяНакладная");
     ТаблицаНалоговых.УстановитьДатуНомера(РабочаяДата());
     //ТаблицаНалоговых.УстановитьТаймаут(10);
   НовыйНомерДокумента = ТаблицаНалоговых.НовыйНомер();
.........


Но вот меня смущает объект SQLLock и его метод НовыйНомер(). Может это как раз то, что мне нужно, но почему-то не получается. Он постоянно формирует номер 000000001. Хотя я уже создал вручную в базах НН с номерами от 00000001 до 00000005.
Причем мне нужно получить просто новый номер из ведущей базы, и зарезервировать его, чтобы ведущая база знала, что этот номер уже занят и т.д.
Может кто работал с SQLLock подскажите, что я делаю неправильно и вообще, возможно ли это.
dmiter
Скорее SQLLock работает только с локальной базой
-1. это отдельный объект - он никак не связан с ODBCDatabase;
-2. У него нет метода УстБД().

Поэтому один из методов решения Вашей задачи - будет создавать свою таблицу в ведущей базе и семафор. И переписывать нумерацию (установку нового номера) через свою процедуру, второй метод это копаться в нутренностях 1С и пробовать использовать их механизм.
Чувствую что скоро и мне придется решать такую же задачу. Покамест склоняю бухгалтеров на оформление в налоговой двух подразделений (пока безрезультатно sad.gif , только прощупываю почву)
Будут какие-то мысли или решения прошу проинформировать....
Fynjy
Очень просто ... Достаточно не юзать приблуды аля 1С++, а создать отдельную таблицу в SQL и юзать ее ...
Murik_1984
Хорошо, как это будет выглядеть, если создать отдельную таблицу SQL для нумерации? В какой базе она будет: ведущей или ведомой? И нельзя ли прилинковать как-то, т.е. сделать общую таблицу для двух баз....
Fynjy
В отдельной базе SQL ... Не стоит линковать к одной из баз ... Тем более 7.7 ...
dmiter
Я бы делал в ведущей - так хоть можно и пробекапить через сиквель вместе с ведущей базой. И если несколько баз будет - легче робираться какая к какой относится и если работаешь через 1с++ в ведущей можо будет отчетики с данными таблиц 1С строить (вдруг надо будет?)
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.