Имя: Пароль:
1C
1С v8
Ведение двух документов под одним номером в одном списке, возможно?
0 demous
 
13.01.12
09:14
Упп 8.2 задача в том, что бы в ПереченьПлатежей (самописный для Клиент-Банк, но писался давно и не мной), сделать так, чтобы можно было формировать два документа под одним номером, под разные организации ( Справочник.Организация - является плательщиком ), суть в том, что задается вручную первый номер ПП и дальше они формируются автоматически ( +1 ) но на одном сервере работают две компании, и по этому идет наложение номеров и выдается ошибка, выгрузки не происходит
вот нашел такие функции в коде

Функция СледующийНомер(Номер)
   Длина = СтрДлина(Номер);
   Для Ит=1 По Длина Цикл
       СтрокаПодЧисло = Прав(Номер, Длина-Ит+1);
       Попытка
           ЧислоСтр = Число(СтрокаПодЧисло);
           Если Цел((ЧислоСтр+1)/1000) = (ЧислоСтр+1)/1000 Тогда //На "000" номер оканчиваться не может
               ЧислоСтр = ЧислоСтр+1;    
           КонецЕсли;
           НовНомер = Лев(Номер, Ит-1)+Прав("00000000000"+Формат(ЧислоСтр+1, "ЧДЦ=0; ЧС=0; ЧГ=0"), Длина-Ит+1);
           Прервать;
       Исключение
           НовНомер = "";
       КонецПопытки;
   КонецЦикла;
   Возврат НовНомер;
   
КонецФункции

Функция ПоследнийНомерПлатежки()
   Запрос = Новый Запрос;
   Запрос.Текст =
   "ВЫБРАТЬ
   |    ПлатежноеПоручениеИсходящее.Номер
   |ИЗ
   |    Документ.ПлатежноеПоручениеИсходящее КАК ПлатежноеПоручениеИсходящее
   |ГДЕ
   |    ПлатежноеПоручениеИсходящее.Дата МЕЖДУ НАЧАЛОПЕРИОДА(&Дата, ГОД) И КОНЕЦПЕРИОДА(&Дата, ГОД)
   |
   |УПОРЯДОЧИТЬ ПО
   |    ПлатежноеПоручениеИсходящее.Номер УБЫВ
   |АВТОУПОРЯДОЧИВАНИЕ";
   Запрос.УстановитьПараметр("Дата", Дата);
   Выборка = Запрос.Выполнить().Выбрать();
   Если Выборка.Следующий() Тогда
       Возврат Выборка.Номер;
   Иначе
       ТипаНовДок = Документы.ПлатежноеПоручениеИсходящее.СоздатьДокумент();    
       ТипаНовДок.Дата = Дата;
       ТипаНовДок.УстановитьНовыйНомер();
       Возврат ТипаНовДок.Номер;
       //ТипаНовДок = Неопределено;    
   КонецЕсли;
КонецФункции
1 Guk
 
13.01.12
09:16
возможно. используй префиксы по организации...
2 demous
 
13.01.12
09:17
по префиксы была идея, но как их использовать? как реализовать это?
3 ДенисЧ
 
13.01.12
09:17
Сними контроль уникальности и вводит сколько хочешь :-)
4 rs_trade
 
13.01.12
09:23
ТипаНовДок.УстановитьНовыйНомер(ПрефиксОрганизации);
5 rs_trade
 
13.01.12
09:24
(2) открой уже для себя СП
6 demous
 
13.01.12
09:29
rs_trade

4 - 13.01.12 - 09:23
ТипаНовДок.УстановитьНовыйНомер(ПрефиксОрганизации);

переменная не определенна..


ДенисЧ

3 - 13.01.12 - 09:17
Сними контроль уникальности и вводит сколько хочешь :-)    Где его снаять?

Сорри но вот атк вот я ещ мало знаю(
7 Vovan1975
 
13.01.12
09:31
бугага
8 Maxus43
 
13.01.12
09:32
в справочнике Организации префиксы указываются, шо мозг выносиш в пятницу
9 demous
 
13.01.12
09:38
просто указать префикс в коде, или как?
10 demous
 
13.01.12
09:39
у вас у всех большой стаж работы, у меня три с половиной месяца, поэтому я и прошу помощи!
11 Maxus43
 
13.01.12
09:39
(9) открой справочник уже. там по руски написано - Префикс - поле есть
12 demous
 
13.01.12
09:40
да, есть префикс, на эти организации  первый      AP Второй    CB
13 Maxus43
 
13.01.12
09:41
ну вот, для разных организаций ставиш разный префикс, при создании новый документов в номер автоматом будет он ставится
14 demous
 
13.01.12
09:52
а в коде как мне это отобразить?
Заранее спасибо большое!
15 Maxus43
 
13.01.12
09:53
всмысле в коде? префикс автоматом для новых доков будет ставится. старые надо переделать чтоли?
16 demous
 
13.01.12
09:58
Префикс существует для организаций же давно, но проблема с номерами актуально, номер 23 на одну организацию и номер 23 ( например ) на другую организацию не создается, только порядковые номера и все, дублирования нету.... ошибка...
17 Maxus43
 
13.01.12
10:02
АР23 и СВ23 должны быть номера у них же
18 demous
 
13.01.12
10:07
http://rghost.ru/35880847/image.png вот скрин справочника
19 Maxus43
 
13.01.12
10:11
(18) правильно всё, в коде организации префикса и не должно быть, в коде НОВЫХ дрокументов будут соответствующие префиксы
20 demous
 
13.01.12
10:14
так, значит получается на практике у меня сейчас должно все работать так как мне надо? номера документов должны создаваться по организациям, и в списке общем они могут быть дублированы ? если да, то почему этого нету?
21 Maxus43
 
13.01.12
10:23
щас с разными создаются номерами? префикс ставится у новых доков? я кстати не помню в одной базе будут ли они автоматом в пределах префикса нумероваться...
22 demous
 
13.01.12
10:26
сейчас да, создаются с разными номерами... то есть на обе организации общий список номеров
23 Maxus43
 
13.01.12
10:32
в пределах одной базы значит общая нумерация...
24 demous
 
13.01.12
10:36
как-то это можно исправить хотя бы непосредственно к этому документу?
25 demous
 
13.01.12
10:46
просто в начале года проблема очень актуальна..нумерация начинается снова с ( 1 )
26 Maxus43
 
13.01.12
10:52
нумерация снова с 1 это правильно, в пределах года идёт
27 demous
 
13.01.12
10:54
ну вот, а компании работают две на одной базе... и возникает путаница с нумерацией, всем надо с единицы, а кто первый занял двадцать например, и все, у второй компании начнется с 21, а банки требуют с нуля...
28 demous
 
13.01.12
10:54
с " 1 "
29 demous
 
13.01.12
10:57
что сделать чтоб номера создавались с префиксом?
30 Maxus43
 
13.01.12
10:57
щас без префикса чтоли создаются?
31 demous
 
13.01.12
11:04
да, щас создаются без префикса.....
32 БибиГон
 
13.01.12
11:06
конфа у вас правленная?
33 demous
 
13.01.12
11:09
изменения вносились
34 rs_trade
 
13.01.12
11:14
Чего мозг человеку выносите. Тебе префикс в твою функцию надо передавать как параметр

Функция ПоследнийНомерПлатежки(ПрефиксОрганизации)

  ....
  ТипаНовДок.УстановитьНовыйНомер(ПрефиксОрганизации);
  ....
КонецФункции
35 demous
 
13.01.12
11:16
rs_trade

спасибо большое, сейчас попробуем!
36 demous
 
13.01.12
11:21
не помогло, сздаются без префикса(
37 demous
 
13.01.12
11:28
вот еще кое - что, может поможет


Процедура ДействияФормыСформироватьПлатежки(Кнопка)
   Если  не ЗначениеЗаполнено(ЭтаФорма.НомерПлатежки) Тогда
       Предупреждение("Не удалось создать документы отсутсвует первый номер платежки!!!");
       Возврат;
   КонецЕсли;    
   Если Вопрос("После создания платежек документ будет записан. Продолжить", РежимДиалогаВопрос.ДаНет) = КодВозвратаДиалога.Нет Тогда
       Возврат;
   КонецЕсли;
   ТекНомер = НомерПлатежки;
   Для Каждого Стр Из Платежи Цикл
       Если (ЗначениеЗаполнено(Стр.ПлатежноеПоручение) И Стр.ПлатежноеПоручение.СуммаДокумента=Стр.КПеречислению) Или Стр.КПеречислению<=0 Или Не ЗначениеЗаполнено(Стр.Заявка) Тогда
           Продолжить;
       КонецЕсли;
       ТекНомер = СледующийНомер(ТекНомер);
       СоздатьДокументПоЗаявкеНаСумму(Стр, ТекНомер);
   КонецЦикла;
   Записать();
КонецПроцедуры
38 rs_trade
 
13.01.12
11:36
(37) Функция ПоследнийНомерПлатежки не используется же получается.
39 Maxus43
 
13.01.12
11:37
(38) а как не выносить мозг когда там чуть не самописка со сломаным типовым функционалом
40 demous
 
13.01.12
11:42
rs_trade

38 - 13.01.12 - 11:36
(37) Функция ПоследнийНомерПлатежки не используется же получается.

почему?
41 demous
 
13.01.12
11:43
Maxus43

39 - 13.01.12 - 11:37
(38) а как не выносить мозг когда там чуть не самописка со сломаным типовым функционалом
писалось все при установке 1с, специалистами из московской компании
42 Maxus43
 
13.01.12
11:44
(41) ну вот и понаписали "специалисты". причем судя по коду смысла особо нет, тем более в платёжках, но хоть денег заработали...
43 demous
 
13.01.12
11:46
как это исправить?
44 Maxus43
 
13.01.12
11:54
что в процедуре СоздатьДокументПоЗаявкеНаСумму()?
45 Maxus43
 
13.01.12
11:54
и кстати как это вобще работает?
   КонецЦикла;
   Записать();
КонецПроцедуры
46 demous
 
13.01.12
11:56
Процедура  СоздатьДокументПоЗаявкеНаСумму(СтрокаТЧ, НомерДока)
   Заявка = СтрокаТЧ.Заявка;
   Сумма = СтрокаТЧ.КПеречислению;
   //Заявка = Документы.ЗаявкаНаРасходованиеСредств.НайтиПоНомеру();
   Если Заявка.ФормаОплаты = Перечисления.ВидыДенежныхСредств.Безналичные Тогда
       Документ = Документы.ПлатежноеПоручениеИсходящее.СоздатьДокумент();
       Документ.НазначениеПлатежа = СокрЛП(СтрокаТЧ.ОснованиеПлатежа) + " По счету "+СтрокаТЧ.НомерСчета;
       Документ.Заполнить(Заявка);
       УправлениеДенежнымиСредствами.ЗаполнитьРеквизитыРасчетногоДокумента(Документ, глЗначениеПеременной("глТекущийПользователь"), Документ.мВалютаРегламентированногоУчета,Документ.РасшифровкаПлатежа,,Заявка);
       Если ЗначениеЗаполнено(СтрокаТЧ.Счет) И ТипЗнч(СтрокаТЧ.Счет) = Тип("СправочникСсылка.БанковскиеСчета") Тогда
           Документ.СчетОрганизации = СтрокаТЧ.Счет;
       КонецЕсли;
       Документ.Дата = Дата;
       Если Документ.РасшифровкаПлатежа.Количество()>0 Тогда
           ВалютаВзаиморасч = СтрокаТЧ.ВалютаВзаиморасчетов;
           Документ.РасшифровкаПлатежа[0].СуммаВзаиморасчетов =
           МодульВалютногоУчета.ПересчитатьИзВалютыВВалюту(Сумма, ВалютаДокумента, ВалютаВзаиморасч,
                                                                                                               МодульВалютногоУчета.ПолучитьКурсВалюты(ВалютаДокумента, КонецДня(Дата)).Курс,
                                                                                                               МодульВалютногоУчета.ПолучитьКурсВалюты(ВалютаВзаиморасч, КонецДня(Дата)).Курс) ;
           Документ.РасшифровкаПлатежа[0].СуммаПлатежа = Сумма;
           Документ.РасшифровкаПлатежа[0].ДокументПланированияПлатежа = Заявка;
           Документ.РасшифровкаПлатежа[0].СтавкаНДС = Заявка.РасшифровкаПлатежа[0].СтавкаНДС;
           УправлениеДенежнымиСредствами.ПересчитатьСуммуНДС(Документ.РасшифровкаПлатежа[0]);
           //Документ.РасшифровкаПлатежа[0].СуммаНДС = Заявка.РасшифровкаПлатежа[0].СуммаНДС;
       КонецЕсли;
       Документ.СуммаДокумента = Сумма;
       Документ.ОтражатьВБухгалтерскомУчете = Истина;
       УправлениеДенежнымиСредствами.ЗаполнитьСчетаУчетаПлатежейБУ(Документ,глЗначениеПеременной("глТекущийПользователь"),Истина);
       //Документ.Оплачено = Истина;
       //Документ.ДатаОплаты = Дата;
       //Если НЕ Документ.Организация.Пустая() Тогда
       //    Документ.ИННПлательщика  = Документ.Организация.ИНН;
       //    Документ.КПППлательщика = Документ.Организация.КПП;
       //КонецЕсли;

       //Если НЕ Документ.Контрагент.Пустая() Тогда
       //    Документ.ИННПолучателя = Документ.Контрагент.ИНН;
       //    Документ.КПППолучателя = Документ.Контрагент.КПП;
       //КонецЕсли;
       АвтоЗначенияРеквизитов = ФормированиеПечатныхФорм.СформироватьАвтоЗначенияРеквизитовПлательщикаПолучателя(
                   Документ.Организация, Документ.СчетОрганизации, Документ.Контрагент, Документ.СчетКонтрагента, Документ.ВидОперации, Документ.ПеречислениеВБюджет);
       Документ.ТекстПлательщика = АвтоЗначенияРеквизитов.ТекстПлательщика;
       Документ.ИННПлательщика   = АвтоЗначенияРеквизитов.ИННПлательщика;
       Документ.КПППлательщика   = АвтоЗначенияРеквизитов.КПППлательщика;
       
       Документ.ТекстПолучателя = АвтоЗначенияРеквизитов.ТекстПолучателя;
       Документ.ИННПолучателя   = АвтоЗначенияРеквизитов.ИННПолучателя;
       Документ.КПППолучателя   = АвтоЗначенияРеквизитов.КПППолучателя;


       
       Документ.ОчередностьПлатежа = 6;
       Документ.ВидПлатежа = "Электронно";
       СформироватьНазначениеПлатежа(Документ, Документ.РасшифровкаПлатежа[0]);
   Иначе
       Документ = Документы.РасходныйКассовыйОрдер.СоздатьДокумент();
       Документ.Заполнить(Заявка);
       УправлениеДенежнымиСредствами.ЗаполнитьРеквизитыРасчетногоДокумента(Документ, глЗначениеПеременной("глТекущийПользователь"), Документ.мВалютаРегламентированногоУчета,Документ.РасшифровкаПлатежа,,Заявка);
       Если ЗначениеЗаполнено(СтрокаТЧ.Счет) И ТипЗнч(СтрокаТЧ.Счет) = Тип("СправочникСсылка.Кассы") Тогда
           Документ.Касса = СтрокаТЧ.Счет;
       КонецЕсли;
       Документ.Дата = Дата;
       Если Документ.РасшифровкаПлатежа.Количество()>0 Тогда
           Документ.РасшифровкаПлатежа[0].СуммаВзаиморасчетов = Сумма;
           Документ.РасшифровкаПлатежа[0].СуммаПлатежа = Сумма;
       КонецЕсли;
       Документ.СуммаДокумента = Сумма;
       Документ.ОтражатьВБухгалтерскомУчете = Истина;
       //Документ.Оплачено = Истина;
       //Документ.ДатаОплаты = Дата;
       УправлениеДенежнымиСредствами.ЗаполнитьСчетаУчетаПлатежейБУ(Документ,глЗначениеПеременной("глТекущийПользователь"),Истина);
   КонецЕсли;
   Если Заявка.Состояние<>Перечисления.СостоянияОбъектов.Утвержден Тогда //Утвердим заявки по которым сделали платеж
       ЗаявкаОбъект = Заявка.ПолучитьОбъект();
       ЗаявкаОбъект.Состояние = Перечисления.СостоянияОбъектов.Утвержден;
       ЗаявкаОбъект.Записать();
   КонецЕсли;
   
   
   Попытка
       Если СокрЛП(НомерПлатежки)<>"" Тогда
           
           Документ.Номер = НомерДока;
           
       КонецЕсли;
       Документ.Записать();
       СтрокаТЧ.ПлатежноеПоручение = Документ.Ссылка;
       //Возврат Документ.Ссылка;
   Исключение
       //Возврат Неопределено;
       Сообщить("Не удалось создать документ: " + ОписаниеОшибки());
   КонецПопытки;
КонецПроцедуры
47 Maxus43
 
13.01.12
12:00
так попробуй
  Попытка

Документ.УстановитьНовыйНомер(Документ.Организация.Префикс);
     
Документ.Записать();
       СтрокаТЧ.ПлатежноеПоручение = Документ.Ссылка;
       //Возврат Документ.Ссылка;
   Исключение
       //Возврат Неопределено;

       Сообщить("Не удалось создать документ: " + ОписаниеОшибки());
48 demous
 
13.01.12
15:22
спасибо,  все заработало.. очень благодарен
Есть два вида языков, одни постоянно ругают, а вторыми никто не пользуется.