Имя: Пароль:
1C
1С v8
Как проверить, заполнены ли все субконто?
,
0 DirecTwiX
 
05.04.13
21:45
Конкретное субконто можно проверить так:
ХозрасчетныйДвиженияССубконто.СубконтоДт1.Наименование ЕСТЬ NULL  (нашёл на мисте)
Но как проверить все? Если ещё учитвать, что их может быть переменное число (больше 3)
На ум приходит вот что: получить максимальное число субконто и программно составить текст запроса. Но выглядит уж больно страшно
1 Поросенок Петр
 
05.04.13
21:47
А не тролль ли DirecTwiX ?
Нельзя так жечь всамделишно. Плюс темы на разный лад.
2 Живой Ископаемый
 
05.04.13
21:50
проверить в каком контексте?
я с ходу могу придумать два. и еще один способ, при котором проверки просто не нужны, будет контролировать движок
3 Птица
 
05.04.13
21:50
(0)а в каком контексте это нужно проверять?
(1) видимо, отсыпали
4 DirecTwiX
 
05.04.13
21:52
Проверить, заполнены ли субконто в документе ОтражениеЗарплатыВРегламентомУчёте
5 Живой Ископаемый
 
05.04.13
21:54
в каком контексте?
6 DirecTwiX
 
05.04.13
21:55
Для управленческих целей, хз)
7 Зойч
 
05.04.13
21:57
(6) Ложись лучше спать
8 Живой Ископаемый
 
05.04.13
21:59
господи... это модуль проведения этого документа, модуль наборазаписей регистра, и нужно проверить заполненность субокнто у движений конкретного экземпляра, или это обработка, которая должна найти все документы у которых в регистрах есть незаполеннные субконто, и что такое незаполенное,  например пустую ссылку будем считать незаполенной?
9 DirecTwiX
 
05.04.13
22:03
бработка, которая должна найти все документы у которых в регистрах есть незаполеннные субконто
Пустая ссылка считать незаполненой (в регистре бухгалтерии вроде не может оказаться незаполненной строки, в которой не стоит пустой ссылки. Разве нет?)
10 mistеr
 
05.04.13
22:31
Если в коде, то ЗначениеЗаполнено().
Если в запросе, то = &ПустаяСсылка.
Или проблема выбрать записи из РБ?
11 hhhh
 
05.04.13
22:31
нет, может оказаться
12 DirecTwiX
 
05.04.13
22:32
(10) Пустая ссылка какого типа?
Вот уже думаю вручную выборку перебирать. Хотел запросом
13 НафНаф
 
05.04.13
22:35
ВСЯ КУЙНЯ КАК ОБЫЧНО
ведь есть пустые сцылик, а есть Неопределно, далеко где-то есть NULL
14 DirecTwiX
 
05.04.13
22:35
(11) Можно пример?
В демонстрационной не нашёл:
ГДЕ
ХозрасчетныйДвиженияССубконто.СубконтоДт1 ЕСТЬ NULL И НЕ (ХозрасчетныйДвиженияССубконто.ВидСубконтоДт1 ЕСТЬ NULL)
15 DirecTwiX
 
05.04.13
22:37
Походу, фигню какую-то в (14)
Начинаю тупить
16 Волчара2010
 
05.04.13
22:38
(0) мля, ну вот прежде чем лезть на форум с таким вопросом, открой любую типовую бухгалтерию и посмотри
17 DirecTwiX
 
05.04.13
22:40
(16) Что посмотреть то? Может, прежде чем так необдуманно отвечать, надо перечитать вопрос ещё пару раз?
18 DirecTwiX
 
05.04.13
22:41
(15) Хотя нет. Вроде норм
19 Волчара2010
 
05.04.13
22:41
(17) зайди в модуль проведения любого документа и посмотри.
А еще лучше набири поиском по общим модулям по ключевому слову "субконто"
20 Волчара2010
 
05.04.13
22:42
(18) не позорься, мля!
21 mistеr
 
05.04.13
22:55
(15) Перебирай в коде. Запросом не реально.

(20) Хорош гнобить человека, лучше помоги.
22 GANR
 
05.04.13
22:58
ОбъектМетаданныхПланСчетов = ПланыСчетов.ТвойПланСчетов.Метаданные();
КоличествоСубконто = ОбъектМетаданныхПланСчетов.ВидыСубконто.Количество();

Запрос = Новый Запрос;
// при таком запросе вывалятся ВСЕ субконто (!!!)
Запрос.Текст = "ВЫБРАТЬ * ИЗ РегистрБухгалтерии.ТвойРегистрБухгалтерии.ДвиженияССубконто";

Результат = Запрос.Выполнить();
Выборка = Результат.Выбрать();

Пока Выборка.Следующий() Цикл
   Для НомерСубконто = 1 По КоличествоСубконто Цикл
       НомерСубконтоСтрокой = СтрЗаменить(НомерСубконто, Символы.НПП, "");
       ИмяВидаСубконтоДт = "ВидСубконтоДт" + НомерСубконтоСтрокой;
       ИмяСубконтоДт = "СубконтоДт" + НомерСубконтоСтрокой;
       ИмяВидаСубконтоКт = "ВидСубконтоКт" + НомерСубконтоСтрокой;
       ИмяСубконтоКт = "СубконтоКт" + НомерСубконтоСтрокой;
       Если Выборка[ИмяВидаСубконтоДт] <> NULL тогда
           Если ЗначениеЗаполнено(Выборка[ИмяСубконтоДт]) Тогда
               Сообщить("Субконто Дт №" + НомерСубконто + " заполнено");
           КонецЕсли;
       КонецЕсли;
       Если Выборка[ИмяВидаСубконтоКт] <> NULL тогда
           Если ЗначениеЗаполнено(Выборка[ИмяСубконтоКт]) Тогда
               Сообщить("Субконто Кт №" + НомерСубконто + " заполнено");
           КонецЕсли;
       КонецЕсли;
   КонецЦикла;
КонеццЦикла;
23 GANR
 
05.04.13
23:01
Звездочку * (читай, все поля) в запросе никто не отменял. Так что не обязательно его кодом делать.
24 DirecTwiX
 
05.04.13
23:06
(22) Сейчас у меня так и сделано с точностью до НомерСубконтоСтрокой = СтрЗаменить(НомерСубконто, Символы.НПП, "");
Через формат у меня было.
Но за пример спасибо)

В общих модулях ничего хорошего не нашёл - может плохо искал, но перебирать 15к результатов не стал

(21) Спасибо. Сначала программно делал запрос, но потом выяснилось, что проверять на нул наименование не очень правильно - перечисления всё портят. Код, номер тоже не удалось прикрутить
25 GANR
 
05.04.13
23:06
(0) Понятно, что-нибудь по (22)(23)?
26 GANR
 
05.04.13
23:07
(24) главная изюминка - в (23)
27 DirecTwiX
 
05.04.13
23:11
(25) Так я и так через звёздочку выбирал)
Но количество субконто вот так считал: Метаданные.ПланыСчетов.Хозрасчетный.МаксКоличествоСубконто

А программно я не запрос хотел формировать, а условие)
28 GANR
 
05.04.13
23:14
(27) Прекрасно! Запрос - через звездочку, проверка заполненности - в коде. Лучше и быть не может в рамках платформы 1С на текущий момент, имхо.
29 DirecTwiX
 
05.04.13
23:19
А без звёздочки быстрее не станет (может и чуть-чуть)? Так придётся тянуть 6 полей, а через * - все 36..
30 DirecTwiX
 
05.04.13
23:22
И сейчас подумал вот что: если не через * выбирать, то 1с может свернёт значения по пересекающимся полям. Количество в выборке по идее должно меньше стать. Нет?
31 Живой Ископаемый
 
05.04.13
23:47
ВЫБРАТЬ
   ХозрасчетныйОстатки.Регистратор КАК Регистратор,
   ХозрасчетныйОстатки.СчетДт,
   ХозрасчетныйОстатки.СубконтоДт1,
   ХозрасчетныйОстатки.СубконтоДт2,
   ХозрасчетныйОстатки.СубконтоДт3,
   ХозрасчетныйОстатки.СуммаОборот
ИЗ
   РегистрБухгалтерии.Хозрасчетный.ОборотыДтКт(&ДатаНач, &ДатаКон, Регистратор, , , , , ) КАК ХозрасчетныйОстатки
ГДЕ
   (НЕ ХозрасчетныйОстатки.СубконтоДт1 ЕСТЬ NULL
               И ХозрасчетныйОстатки.СубконтоДт1.Ссылка ЕСТЬ NULL
           ИЛИ НЕ ХозрасчетныйОстатки.СубконтоДт2 ЕСТЬ NULL
               И ХозрасчетныйОстатки.СубконтоДт2.Ссылка ЕСТЬ NULL
           ИЛИ НЕ ХозрасчетныйОстатки.СубконтоДт3 ЕСТЬ NULL
               И ХозрасчетныйОстатки.СубконтоДт3.Ссылка ЕСТЬ NULL )

УПОРЯДОЧИТЬ ПО
   Регистратор

Для Кредитовой части дописать я думаю, сумеешь.

Лучше выполнять порциями, перебирая например недельные или месячные периоды - зависит от размеров базы

Ну и это исходя из предположения, что максимальное количество субконто на счете - 3, как в типовых.
32 hhhh
 
05.04.13
23:58
(27) вроде для разных счетов разное количество субконто. Для какого-то счета 5 субконто, а для какого-то 2. Что-то вы бредите, похоже.
33 GANR
 
06.04.13
11:25
(29) Если алгоритм выполняется максимум раз в день, а то и 1 раз и навсегда - затраты времени на выпиливание запроса не окупят себя.
Компьютеры — прекрасное средство для решения проблем, которых до их появления не было.