|
v7: Получить вид документа через неопределенный документ? | ☑ | ||
---|---|---|---|---|
0
Balabass
30.10.13
✎
08:37
|
Док = СоздатьОбъект("Документ");
СписокДок = СоздатьОбъект("СписокЗначений"); СписокДок.ДобавитьЗначение( КАК УКАЗАТЬ ОПРЕДЕЛЕННЫЙ ДОКУМЕНТ ЧЕРЕЗ ПЕРЕМННУЮ ДОК ?.Вид()); |
|||
1
Mikeware
30.10.13
✎
09:12
|
чиво?
|
|||
2
бомболюк
30.10.13
✎
09:18
|
да, что то телепатируется с трудом...
|
|||
3
Wobland
30.10.13
✎
09:19
|
попробую стелепатировать: Док.Вид()
|
|||
4
1dvd
30.10.13
✎
09:20
|
Док = СоздатьОбъект("Документ");
Док.НайтиДокумент(...); Док.НайтиПоНомеру(...); Док.НайтиПоРеквизиту(...); СписокДок = СоздатьОбъект("СписокЗначений"); СписокДок.ДобавитьЗначение(Док.ТекущийДокумент()); |
|||
5
Rie
30.10.13
✎
09:20
|
(0) Сильно непонятно, что надо.
(Что Док - не спозиционирован - это видно). |
|||
6
Voronve
30.10.13
✎
09:22
|
(0)
спДокументы = СоздтьОбъект("СписокЗначений"); Для I = 1 по Метаданные.Документ() Цикл спДокументы.ДобавитьЗначение(Метаданные.Документ(I).Идентификатор); КонецЦикла; |
|||
7
Rie
30.10.13
✎
09:24
|
А давайте для разнообразия узнаем, что же ТС нужно...
|
|||
8
пипец
30.10.13
✎
09:24
|
Док=создатьобъект("Документ")
СписокДок.ДобавитьЗначение(Док."+"Мойвиддокумента") |
|||
9
1dvd
30.10.13
✎
09:25
|
(7) это не спортивно. Надо угадать до того, как ТС протрезвеет
|
|||
10
Balabass
30.10.13
✎
09:40
|
Я хочу забить список значений видами документов нужных мне.
Хочу обратится к ним через переменную Док. |
|||
11
Balabass
30.10.13
✎
09:41
|
Есть неопределнный документ - ДОК
и есть документ в конфигураторе Табель Как мне получить Вид() документа Табель без СозданиеОбъекта ДОкумент.Табель? |
|||
12
1dvd
30.10.13
✎
09:41
|
(10) А какая религия запрещает обращаться к Метаданные() и заставляет обращаться именно к Док?
|
|||
13
Rie
30.10.13
✎
09:43
|
(11) "Табель" - это и есть вид документа Табель.
Тебе _все_ виды документов в список запихнуть надо? Тогда (6). Или виды каких-то конкретных документов? Тогда спроси у этих документов Вид(). Причём Док = СоздатьОбъект("Документ") в этом случае тебе и даром не нужен. |
|||
14
Guk
30.10.13
✎
09:48
|
мне одному показалось, что автор не понимает о чем он говорит?...
|
|||
15
1dvd
30.10.13
✎
09:53
|
Один кривой программист за год работы создает два новых рабочих места
|
|||
16
Эльниньо
30.10.13
✎
09:59
|
(15) )))
Пирамида, однако. |
|||
17
Mikeware
30.10.13
✎
10:01
|
(11) строка с содержимым "Табель" - и есть то, что возарощает метод Вид() объекта вида Документ.Табель()
|
|||
18
пипец
30.10.13
✎
10:01
|
геометрическая прогрессия - выражовывайтеся научнее ;))
|
|||
19
Balabass
30.10.13
✎
11:40
|
Минуту...что то вас понесло.
Есть 5 документов - вид() которых нужно занести в список значений. Но обратится у ним нужно через док=создатьОбъект("Документы"); Я знаю название документов в пофигураторе, но не знаю их синонимов. Мне это нужно для следующего условия Если СписокЗначений.Включает(ТекущийДОкИзЦикла.Вид())=1 тогда Все ОК. КонецЕсли. |
|||
20
Mikeware
30.10.13
✎
11:43
|
(19) см. (17).
"название к конфигураторе" - это как раз Вид() |
|||
21
Mikeware
30.10.13
✎
11:44
|
Тебе нужно синонимы в список, а сравнивать с видом?
|
|||
22
пипец
30.10.13
✎
11:45
|
(19) возьми из типовой бухгалтерии 77 обработку - называется - "обработкаДокументов" и кури ее
|
|||
23
Balabass
30.10.13
✎
11:46
|
(20) Документы.Табель.Вид() ??? Не работает такая конструкция.
|
|||
24
пипец
30.10.13
✎
11:50
|
(23) читай (22) и посмотри как там реализовано
ЗЫ вид() применяется в твоем случае к объекту ДОКУМЕНТ |
|||
25
ЧеловекДуши
30.10.13
✎
11:51
|
(0) Сперва получаешь ссылку или объект самого документа через "Выбрать(), Найти()" и потом общаешься через (ВИД) :)
|
|||
26
ЧеловекДуши
30.10.13
✎
11:52
|
(10) 1С, в типовом варианте, на своих кривых, Черных запросах, - этого не умеет :)
|
|||
27
Mikeware
30.10.13
✎
11:52
|
(23) обкурился?
|
|||
28
ЧеловекДуши
30.10.13
✎
11:52
|
(14) Да нет, не только :)
|
|||
29
Balabass
30.10.13
✎
11:53
|
(24) Я знаю что вид() применяется к документ. Но документ у меня неопределен. Я знаю что конфигураторе есть документ с именем табель.
Я создал необпределенный документ ДОК. Вот если бы я создал ДОк = СоздатьОбъект("Док.Табель") - тогда вообще без вопросов. А мне надо через Док, чтобы было типо Док["Табель"] или подобная конструкция. Мне не определенный документ нужен, мне нужно выдернуть из документа док.табель.вид() |
|||
30
ЧеловекДуши
30.10.13
✎
11:53
|
(23) Ты, мальчик, чего хотел в (0)?
В конечном счете получить? Кинуть бессмысленный список, куда-то и без напряга выбрать только нужные виды документов по запросу ли выборке? :) |
|||
31
Balabass
30.10.13
✎
11:54
|
(30) Да.
|
|||
32
Mikeware
30.10.13
✎
11:55
|
(29)
СоздатьОбъект("Докуиент."+ТутНазваниеТогоВидаКоторогоТебеНадо) |
|||
33
ЧеловекДуши
30.10.13
✎
11:56
|
(29) Прямой запрос, только Прямой запрос...
Ты там можешь указать ряд условий отбора документов и не страдать... По типо этого... //////////////////////////////////////////////////////////////////////////////////////////////////////////////// //Проведен: 1 - отберать по проведенным, // 0 - не учитывать (если ""БезУдаленых = 0"", то отбераются все документы) //БезУдаленых: 1 - отбераются не помеченные на удаления, // 2 - отбираются только помеченные на удаления, 0 - не учитывать //Параметры "Проведен" и "БезУдаленых", при не нулевом значении, отрабатывают совместно по принципу "ИЛИ". // //Порядок: 0 - Сортровать по возрастанию, 1 - Сортировать по Убыванию. // //ВремяДатаТайм: 0 - Отбирать документ, как Дату и время (ИД документа не учитывается)... 1 - Учитывается еще и ИД документа Функция глВыбратьПодчиненныеДокументы(ДатаНач,ДатаКон,Док,ТипДок="",Проведен=0,БезУдаленых=0,Порядок=0,ВремяДатаТайм=1) Экспорт Перем Рез; Перем ТЗЗапрос, СкульЗапрос; Перем СтрокаДляЗапроса, НомСимв, КолСимв, СтрокПоиск,СтрокПолуч; Перем МетаНомер, ЧтоЭто; //Для локального применения //глRecord1С = СоздатьОбъект("ODBCRecordSet"); //глMeta1С = СоздатьОбъект("MetaDataWork"); Если ТипЗначенияСтр(глRecord1С) <> "ODBCRecordSet" Тогда глRecord1С = 0; глRecord1С = СоздатьОбъект("ODBCRecordSet"); КонецЕсли; Если ТипЗначенияСтр(глMeta1С) <> "MetaDataWork" Тогда глMeta1С = 0; глMeta1С = СоздатьОбъект("MetaDataWork"); КонецЕсли; Рез = 0; //Ошибка в запросе! Если ТипЗначения(Док) <> 12 Тогда //12 - агрегатный тип данных 'Документ'; Возврат Рез; ИначеЕсли ПустоеЗначение(Док) = 1 Тогда Рез = СоздатьОбъект("ТаблицаЗначений"); Рез.НоваяКолонка("Док","Документ"); Возврат Рез; КонецЕсли; Если глОтладкаSQL = 1 Тогда глRecord1С.Отладка(1); КонецЕсли; СкульЗапрос=" |SET NOCOUNT ON //|set LANGUAGE russian | |SELECT | dbo.sp_tohex(TabJ.IDDOCDEF,4)+TabJ.IDDOC [Док $Документ] |FROM | _1SCRDOC As TabRod(NOLOCK) |INNER JOIN | _1SJOURN As TabJ(NOLOCK) ON (TabRod.CHILDID = TabJ.IDDOC) |WHERE | TabRod.MDID = 0 -- только документы, без граф отбора | AND TabRod.PARENTVAL = '"+глMeta1С.ЗначениеВСамуюДлиннуюСтрокуБД(Док.ТекущийДокумент())+"' |"; Если ПустоеЗначение(ДатаНач)=0 Тогда МетаНомер = ""; Если ТипЗначения(ДатаНач) = 12 Тогда //Документ Если ВремяДатаТайм = 0 Тогда МетаНомер = ""+глMeta1С.ПолучитьДатуВремяИдДок(ДатаНач.ПолучитьПозицию()); Иначе МетаНомер = ""+глMeta1С.ПолучитьДатуВремяИдДок(ДатаНач.ПолучитьПозицию())+глMeta1С.ЗначениеВСтрокуБД(ДатаНач.ТекущийДокумент()); КонецЕсли; ИначеЕсли ТипЗначения(ДатаНач) = 3 Тогда //3 - тип данных Дата; МетаНомер = ""+глMeta1С.ПолучитьСтрИзДаты(ДатаНач); ИначеЕсли ПустоеЗначение(Дата(ДатаНач)) = 0 Тогда МетаНомер = ""+глMeta1С.ПолучитьСтрИзДаты(Дата(ДатаНач)); КонецЕсли; Если ПустоеЗначение(МетаНомер) = 0 Тогда СкульЗапрос=СкульЗапрос+" |and TabJ.DATE_TIME_IDDOC>='"+МетаНомер+"' |"; КонецЕсли; КонецЕсли; Если ПустоеЗначение(ДатаКон)=0 Тогда МетаНомер = ""; Если ТипЗначения(ДатаКон) = 12 Тогда //Документ Если ВремяДатаТайм = 0 Тогда МетаНомер = ""+глMeta1С.ПолучитьДатуВремяИдДок(ДатаКон.ПолучитьПозицию())+"Z"; Иначе МетаНомер = ""+глMeta1С.ПолучитьДатуВремяИдДок(ДатаКон.ПолучитьПозицию())+глMeta1С.ЗначениеВСтрокуБД(ДатаКон.ТекущийДокумент()); КонецЕсли; ИначеЕсли ТипЗначения(ДатаНач) = 3 Тогда //3 - тип данных Дата; МетаНомер = ""+глMeta1С.ПолучитьСтрИзДаты(ДатаКон)+"Z"; ИначеЕсли ПустоеЗначение(Дата(ДатаНач)) = 0 Тогда МетаНомер = ""+глMeta1С.ПолучитьСтрИзДаты(Дата(ДатаНач))+"Z"; КонецЕсли; Если ПустоеЗначение(МетаНомер) = 0 Тогда СкульЗапрос=СкульЗапрос+" |and TabJ.DATE_TIME_IDDOC<='"+МетаНомер+"' |"; КонецЕсли; КонецЕсли; Если ПустоеЗначение(СокрЛП(ТипДок)) = 0 Тогда СтрокПоиск = СокрЛП(ТипДок); КолСимв = СтрЧислоВхождений(СтрокПоиск,","); Если КолСимв <> 0 Тогда КолСимв = КолСимв + 1; СтрокаДляЗапроса = ""; Пока КолСимв <> 0 Цикл Если КолСимв = 1 Тогда //Он один СтрокПолуч = СокрЛП(СтрокПоиск); Иначе НомСимв = Найти(СтрокПоиск,","); Если НомСимв = 0 Тогда Сообщить("Ошибка в разборе команды: "+ТипДок); КонецЕсли; СтрокПолуч = СокрЛП(Сред(СтрокПоиск,1,НомСимв-1)); СтрокПоиск = СокрЛП(Сред(СтрокПоиск,НомСимв+1)); КонецЕсли; Если ПустоеЗначение(СтрокПолуч) = 0 Тогда ЧтоЭто = ЭтоЧисло(СтрокПолуч); Если СуществуетТакойВидДок(ЧтоЭто) = 1 Тогда МетаНомер = глMeta1С.ИДДокумента(ЧтоЭто); СтрокаДляЗапроса = СтрокаДляЗапроса + ?(ПустоеЗначение(СтрокаДляЗапроса)=1,"",",") + "'"+МетаНомер+"'"; КонецЕсли; КонецЕсли; КолСимв = КолСимв - 1; КонецЦикла; Если ПустоеЗначение(СтрокаДляЗапроса) = 0 Тогда СкульЗапрос=СкульЗапрос+" |and TabJ.IDDOCDEF in ("+СтрокаДляЗапроса+") |"; // '"+глMeta1С.ИДДокумента(ТипДок)+"' КонецЕсли; Иначе МетаНомер = ""; СтрокПолуч = СокрЛП(ТипДок); Если ПустоеЗначение(СтрокПолуч) = 0 Тогда ЧтоЭто = ЭтоЧисло(СтрокПолуч); Если СуществуетТакойВидДок(ЧтоЭто) = 1 Тогда МетаНомер = глMeta1С.ИДДокумента(ЧтоЭто); СтрокаДляЗапроса = СтрокаДляЗапроса + ?(ПустоеЗначение(СтрокаДляЗапроса)=1,"",",") + "'"+МетаНомер+"'"; КонецЕсли; КонецЕсли; Если ПустоеЗначение(МетаНомер) = 0 Тогда СкульЗапрос=СкульЗапрос+" |and TabJ.IDDOCDEF='"+МетаНомер+"' |"; КонецЕсли; КонецЕсли; КонецЕсли; Если Проведен = 1 Тогда Если БезУдаленых = 1 Тогда СкульЗапрос=СкульЗапрос+" |and (((TabJ.CLOSED & 1) = 1) or (TabJ.IsMark = 0)) |"; ИначеЕсли БезУдаленых = 2 Тогда СкульЗапрос=СкульЗапрос+" |and (((TabJ.CLOSED & 1) = 1) or (TabJ.IsMark <> 0)) |"; Иначе СкульЗапрос=СкульЗапрос+" |and ((TabJ.CLOSED & 1) = 1) |"; КонецЕсли; Иначе Если БезУдаленых = 1 Тогда СкульЗапрос=СкульЗапрос+" |and (TabJ.IsMark = 0) |"; ИначеЕсли БезУдаленых = 2 Тогда СкульЗапрос=СкульЗапрос+" |and (TabJ.IsMark <> 0) |"; КонецЕсли; КонецЕсли; СкульЗапрос=СкульЗапрос+" |ORDER BY |TabRod.CHILD_DATE_TIME_IDDOC "+?(Порядок=0,"ASC","DESC")+" |"; Если глRecord1С.Подготовить(СкульЗапрос)=0 Тогда Сообщить("Запрос не прошел "+глRecord1С.ПолучитьОписаниеОшибки()+" |"+СкульЗапрос,"!"); Возврат Рез; КонецЕсли; ТЗЗапрос = 0; ТЗЗапрос = СоздатьОбъект("ТаблицаЗначений"); Попытка ЗначСпс = глRecord1С.ВыполнитьИнструкцию(,ТЗЗапрос,1); Исключение Сообщить("ВыполнитьИнструкцию: "+ОписаниеОшибки()); КонецПопытки; Попытка глRecord1С.Закрыть(); Исключение Сообщить("Закрыть SQL запрос: "+ОписаниеОшибки()); КонецПопытки; Если ТипЗначенияСтр(ТЗЗапрос) <> "ТаблицаЗначений" Тогда Сообщить("Нет нужного параметра!","!"); ИначеЕсли ТЗЗапрос.КоличествоКолонок() = 0 Тогда ТЗЗапрос.НоваяКолонка("Док","Документ"); Сообщить("Запрос не выполнен: |"+СкульЗапрос,"!"); Иначе Рез = ТЗЗапрос; КонецЕсли; Возврат Рез; КонецФункции |
|||
34
Balabass
30.10.13
✎
11:56
|
(32) Это понятно...
Но если нужно перебрать 10 документов? каждый раз док = создатьОбъект("документ.НужныйМнедокумент").вид() списокзначений.добавитьсзначение(док) ? |
|||
35
ЧеловекДуши
30.10.13
✎
11:56
|
(31) Нет такого счастья :)
Приходится извращаться, тупым перебором, либо в цикле, либо по запросу писать свою функцию :) |
|||
36
ЧеловекДуши
30.10.13
✎
11:57
|
(34) 10 циклов для метода в (32)
|
|||
37
Balabass
30.10.13
✎
11:58
|
Это же не совсем удобно. разве нет?
|
|||
38
Mikeware
30.10.13
✎
11:59
|
(34) зачем?
|
|||
39
Balabass
30.10.13
✎
12:01
|
(38) Ну а как? Тупой перебор.
|
|||
40
ЧеловекДуши
30.10.13
✎
12:04
|
(37) А кто сказал, что в 1С все удобно :)
|
|||
41
Mikeware
30.10.13
✎
12:05
|
(39) ты можешь русским языком сказать - что тебе нужно сделать?
|
|||
42
ЧеловекДуши
30.10.13
✎
12:06
|
(39) Ага... либо пишешь запрос
Функция ЯтутГлавный(АвансовыйОтчет) Если АвансовыйОтчет.Вид() = "Оно.Радимое.Моё" Тогда Возврат 1; КонецЕсли; Возврат 0; КонецФункции // ЯтутГлавный(АвансовыйОтчет) //******************************************* // Процедура генерации запроса Сформировать. // Процедура Сформировать() Перем Запрос, ТекстЗапроса, Таб; //Создание объекта типа Запрос Запрос = СоздатьОбъект("Запрос"); ТекстЗапроса = "//{{ЗАПРОС(Сформировать) |Период с ВыбНачПериода по ВыбКонПериода; |АвансовыйОтчет = Документ.АвансовыйОтчет.ТекущийДокумент; |Условие(ЯтутГлавный(АвансовыйОтчет)=1); |"//}}ЗАПРОС ; // Если ошибка в запросе, то выход из процедуры Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда Возврат; КонецЕсли; // Подготовка к заполнению выходных форм данными запроса Таб = СоздатьОбъект("Таблица"); Таб.ИсходнаяТаблица("Сформировать"); // Заполнение полей "Заголовок" Таб.ВывестиСекцию("Заголовок"); Состояние("Заполнение выходной таблицы..."); Таб.Опции(0, 0, Таб.ВысотаТаблицы(), 0); // Вывод заполненной формы Таб.ТолькоПросмотр(1); Таб.Показать("Сформировать", ""); КонецПроцедуры |
|||
43
Balabass
30.10.13
✎
12:06
|
СписокЗначений.ДобавитьЗначение(метаданные.Документ("Табель").Идентификатор)
|
|||
44
ЧеловекДуши
30.10.13
✎
12:08
|
(43) Нет... так тебя тоже не поймут :)
Ибо "Табель", тебе уже известен :) |
|||
45
Rie
30.10.13
✎
12:09
|
(43) Офигеть...
СписокЗначений.ДобавитьЗначение("Табель"); _полностью_ эквивалентно этой странной констукции. При условии, что документ "Табель" есть в конфигурации. Блииииин... Не понимаю!...... |
|||
46
Balabass
30.10.13
✎
12:09
|
(44) метаданные.Документ("Табель").Идентификатор = СоздатьОбъект("Документы.Табель").Вид()
Типо того. Мне вот это равенство нужно было соблюсти. |
|||
47
Mikeware
30.10.13
✎
12:10
|
(43) То, что ты написал -
СписокЗначений.ДобавитьЗначение("Табель") |
|||
48
Balabass
30.10.13
✎
12:11
|
(47) Это не наш метод))))
Ладно...тему офф. |
|||
49
Rie
30.10.13
✎
12:12
|
(46) Оно типа того... Само соблюдётся...
Ты лучше расскажи - откуда трава-то взялась. |
|||
50
Mikeware
30.10.13
✎
12:12
|
(48) "нас невозможно сбить с пути - нам по.ую, куда идти!"©
|
|||
51
ЧеловекДуши
30.10.13
✎
12:13
|
(48) Почему?...
Тебе вроде сказали, то, что ты хочешь в (30), НЕТ такого в типовом варианте :) Но это получают на подобие в (33) или в (42) |
|||
52
Balabass
30.10.13
✎
12:15
|
(51) Угу...
|
|||
53
Mikeware
30.10.13
✎
12:16
|
(51) вы одну траву курите?
|
|||
54
ЧеловекДуши
30.10.13
✎
12:18
|
(53) Да ему нужно тупо по команде "Выбрать"
Докум = СоздатьОбъект("Документ"); Докум.ВыбратьДокументы(Начало,Конец); Пока Докум.ПолучитьДокумент() = 1 Цикл КонецЦикла; Выбрать только ряд документов, а не все скопом :) |
|||
55
ЧеловекДуши
30.10.13
✎
12:18
|
+(53) При этом без прямых запросов и быстро :)
|
|||
56
Balabass
30.10.13
✎
12:19
|
(54) Это слишком просто)))
|
|||
57
Balabass
30.10.13
✎
12:19
|
(55) В точку
|
|||
58
ЧеловекДуши
30.10.13
✎
12:19
|
(57) Нет такого счастья... сам бы хотел, но нет :(
|
|||
59
Balabass
30.10.13
✎
12:20
|
(58) Счастье всем и каждому...и пусть никто не уйдет обиженным.
|
|||
60
Mikeware
30.10.13
✎
12:22
|
(55) ну и что мешает?
и проверять- Если Найти(Док.Вид()+";", ТутСтрокаНужныхВидовРазеленныхТочкойСЗапятой) тогда продолжить Конецесли Надеюсь, по списку с галочками сформировать строку ума хватит? |
|||
61
ЧеловекДуши
30.10.13
✎
12:25
|
(60) Он это назвал (56)... "мастер" хочет через это, как хочет в (0) :)
|
|||
62
1dvd
30.10.13
✎
12:32
|
СписокДок = СоздатьОбъект("СписокЗначений");
СписокДок.ДобавитьЗначение("Табель"); СписокДок.ДобавитьЗначение("Шмабель"); СписокДок.ДобавитьЗначение("Куябель"); Док = СоздатьОбъект("Документ"); Док.ВыбратьДокументы(Начало,Конец); Пока Док.ПолучитьДокумент() = 1 Цикл Если СписокДок.НайтиЗначение(Док.Вид())=0 Тогда Продолжить; КонецЕсли; КонецЦикла; так чтоли? |
|||
63
ЧеловекДуши
30.10.13
✎
12:38
|
(62) Будем ждать автора, он чего-то пропал... :)
Неужели он пошёл строчить 10-ть циклов через метаданные :) |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |