По возможности помогите
04.06.2008
18:18
#1
Здравствуйте, уважаемые пользователи и админы.
2 вопроса по 1С 7.7:
1. как программно выбрать документ (не справочник, там все легко: есть "найтипонаименованию", "найтипореквизиту", "найтипокоду". В документах есть "найтидокумент"(документ)" однако ему надо передавать значение типа "документ", а не скажем "документ.накладная", есть "выбратьпозначению", однако и там при передаче переменной типа "документ.накладная", выдается ошибка :"Документ определенного вида!".
2. как программно при создании нового экземпляра справочника, создавать его сразу в какой-либо группе? Методы "этогруппа", принадлежитгруппе", "выборгруппы", "использоватьродителя" работают с уже записанными элементами и служат дополнением при их выборке.
PS. В где в стандартных конфигурациях 1С находятся кнопки и дополнительные команды, например, связанные с формами списка каких-либо справочников? В самой форме списка их нет.
Заранее благодарю за любую помощь.
2 вопроса по 1С 7.7:
1. как программно выбрать документ (не справочник, там все легко: есть "найтипонаименованию", "найтипореквизиту", "найтипокоду". В документах есть "найтидокумент"(документ)" однако ему надо передавать значение типа "документ", а не скажем "документ.накладная", есть "выбратьпозначению", однако и там при передаче переменной типа "документ.накладная", выдается ошибка :"Документ определенного вида!".
2. как программно при создании нового экземпляра справочника, создавать его сразу в какой-либо группе? Методы "этогруппа", принадлежитгруппе", "выборгруппы", "использоватьродителя" работают с уже записанными элементами и служат дополнением при их выборке.
PS. В где в стандартных конфигурациях 1С находятся кнопки и дополнительные команды, например, связанные с формами списка каких-либо справочников? В самой форме списка их нет.
Заранее благодарю за любую помощь.
05.06.2008
01:04
#2
"Искать надо документ ОПРЕДЕЛЕННОГО ВИДА.
Например:
Док=СоздатьОбъект("Документ.Счет");
Дальше все просто.
Док.НайтиДокумент(ВыбДокумент);
ВыбДокумент должен иметь вид "Счет".
> 2. как программно при создании нового экземпляра справочника, создавать его сразу в какой-либо группе? Методы "этогруппа", принадлежитгруппе", "выборгруппы", "использоватьродителя" работают с уже записанными элементами и служат дополнением при их выборке.
Очень просто.
Перед применением метода Справочника Записать() следует привоить значение атрибута спрвочника Родитель
Например:
Спр.Родитель=ВыбРодитель;
Все.
> PS. В где в стандартных конфигурациях 1С находятся кнопки и дополнительные команды, например, связанные с формами списка каких-либо справочников? В самой форме списка их нет.
Есть. Смотрите внимательнее. Слои проверьте.
"
Например:
Док=СоздатьОбъект("Документ.Счет");
Дальше все просто.
Док.НайтиДокумент(ВыбДокумент);
ВыбДокумент должен иметь вид "Счет".
> 2. как программно при создании нового экземпляра справочника, создавать его сразу в какой-либо группе? Методы "этогруппа", принадлежитгруппе", "выборгруппы", "использоватьродителя" работают с уже записанными элементами и служат дополнением при их выборке.
Очень просто.
Перед применением метода Справочника Записать() следует привоить значение атрибута спрвочника Родитель
Например:
Спр.Родитель=ВыбРодитель;
Все.
> PS. В где в стандартных конфигурациях 1С находятся кнопки и дополнительные команды, например, связанные с формами списка каких-либо справочников? В самой форме списка их нет.
Есть. Смотрите внимательнее. Слои проверьте.
"
05.06.2008
09:32
#3
"1. пишешь, что
док=СоздатьОбъект("Документ");
док.НайтиПоНомеру(<Номердока>,<Датадока>,"накладная");
2. спр.Родитель=ВыбрРодитель; где ВыбрРозитель - это группа справочника
3. Они есть. Нажми на ФормыСписка у справочника в конфигураторе и выбери необходимую. Там они со всеми кнопками."
док=СоздатьОбъект("Документ");
док.НайтиПоНомеру(<Номердока>,<Датадока>,"накладная");
2. спр.Родитель=ВыбрРодитель; где ВыбрРозитель - это группа справочника
3. Они есть. Нажми на ФормыСписка у справочника в конфигураторе и выбери необходимую. Там они со всеми кнопками."
05.06.2008
11:22
#4
за пункты 2 и 3 AlexanderVA и Vladko большое спасибо.
Но по пункту 1 я выразился, наверное, не совсем точно. Мне надо получить доступ (чтобы программно изменить кое-что) к определенной накладной или накладным, например везде где в контрагенте стоит значение ООО "Ромашка". В приведенном коде AlexanderVA я так понимаю ищутся все накладные, а у Vladko нужено знать номер документа, хотя это тоже мне пригодится, так что спасибо.
Но если у кого еще появятся мысли по пункту 1) пишите, пожалуйста.
Но по пункту 1 я выразился, наверное, не совсем точно. Мне надо получить доступ (чтобы программно изменить кое-что) к определенной накладной или накладным, например везде где в контрагенте стоит значение ООО "Ромашка". В приведенном коде AlexanderVA я так понимаю ищутся все накладные, а у Vladko нужено знать номер документа, хотя это тоже мне пригодится, так что спасибо.
Но если у кого еще появятся мысли по пункту 1) пишите, пожалуйста.
05.06.2008
12:06
#5
"Нууу, пример, который поможет понять как оно задумано:
Контрагенты=СоздатьОбъект("Справочник.Контрагенты");
Если Контрагенты.НайтиПоНаименованию("ООО """"Ромашка""""",0,1)=1 Тогда
НужныйКонтрагент=Контрагенты.ТекущийЭлемент();
Доки=СоздатьОбъект("Документ.Реализация");
Доки.ВыбратьПоЗначению(,,"Контрагент",НужныйКонтрагент);
Пока Доки.ПолучитьДокумент()=1 Цикл
...
КонецЦикла;
КонецЕсли;
Но! Для того, чтобы это работало, необходимо, чтобы в конфигурации был либо общий реквизит документов "Контрагент", либо графа отбора журналов "Контрагент". Если этого нет, то:
Контрагенты=СоздатьОбъект("Справочник.Контрагенты");
Если Контрагенты.НайтиПоНаименованию("ООО """"Ромашка""""",0,1)=1 Тогда
НужныйКонтрагент=Контрагенты.ТекущийЭлемент();
Доки=СоздатьОбъект("Документ.Реализация");
Доки.ВыбратьДокументы();
Пока Доки.ПолучитьДокумент()=1 Цикл
Если Доки.Контрагент=НужныйКонтрагент Тогда
...
КонецЕсли;
КонецЦикла;
КонецЕсли;"
Контрагенты=СоздатьОбъект("Справочник.Контрагенты");
Если Контрагенты.НайтиПоНаименованию("ООО """"Ромашка""""",0,1)=1 Тогда
НужныйКонтрагент=Контрагенты.ТекущийЭлемент();
Доки=СоздатьОбъект("Документ.Реализация");
Доки.ВыбратьПоЗначению(,,"Контрагент",НужныйКонтрагент);
Пока Доки.ПолучитьДокумент()=1 Цикл
...
КонецЦикла;
КонецЕсли;
Но! Для того, чтобы это работало, необходимо, чтобы в конфигурации был либо общий реквизит документов "Контрагент", либо графа отбора журналов "Контрагент". Если этого нет, то:
Контрагенты=СоздатьОбъект("Справочник.Контрагенты");
Если Контрагенты.НайтиПоНаименованию("ООО """"Ромашка""""",0,1)=1 Тогда
НужныйКонтрагент=Контрагенты.ТекущийЭлемент();
Доки=СоздатьОбъект("Документ.Реализация");
Доки.ВыбратьДокументы();
Пока Доки.ПолучитьДокумент()=1 Цикл
Если Доки.Контрагент=НужныйКонтрагент Тогда
...
КонецЕсли;
КонецЦикла;
КонецЕсли;"
05.06.2008
14:25
#6
Да, спасибо Thorvardr.
Спасибо всем за то, что быстро откликнулись и помогли решить проблему. На других форумах иногда ждешь ответа по несколько дней.
Спасибо всем за то, что быстро откликнулись и помогли решить проблему. На других форумах иногда ждешь ответа по несколько дней.
05.06.2008
14:51
#7
"Проще через через запрос, примерно так.
Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса =
"//{{ЗАПРОС(Сформировать)
|Период с ВыбНачПериода по ВыбКонПериода;
|Обрабатывать НеПомеченныеНаУдаление;
|Без итогов;
|ТекущийЭлемент = Документ.Реализация.текущийдокумент;
|Контрагент = Документ.Реализация.Контрагент;
|Группировка ТекущийЭлемент;
|Условие(Контрагент в ВыбКонтрагент);
|"//}}ЗАПРОС
;
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
Возврат;
КонецЕсли;
док=создатьОбъект("Документ.Реализация");
Пока Запрос.Группировка() = 1 Цикл
если док.найтидокумент(запрос.текущийэлемент)=1 тогда;
....
конецесли;
КонецЦикла;
где ВыбКонтрагент может быть как конкретным контрагентом ООО "Ромашка" так и списком из контрагентов.
Удачи."
Запрос = СоздатьОбъект("Запрос");
ТекстЗапроса =
"//{{ЗАПРОС(Сформировать)
|Период с ВыбНачПериода по ВыбКонПериода;
|Обрабатывать НеПомеченныеНаУдаление;
|Без итогов;
|ТекущийЭлемент = Документ.Реализация.текущийдокумент;
|Контрагент = Документ.Реализация.Контрагент;
|Группировка ТекущийЭлемент;
|Условие(Контрагент в ВыбКонтрагент);
|"//}}ЗАПРОС
;
Если Запрос.Выполнить(ТекстЗапроса) = 0 Тогда
Возврат;
КонецЕсли;
док=создатьОбъект("Документ.Реализация");
Пока Запрос.Группировка() = 1 Цикл
если док.найтидокумент(запрос.текущийэлемент)=1 тогда;
....
конецесли;
КонецЦикла;
где ВыбКонтрагент может быть как конкретным контрагентом ООО "Ромашка" так и списком из контрагентов.
Удачи."
05.06.2008
15:26
#8
Таня любит запросы
Второй раз уже меня поправляет. Да, согласен, можно выборку через запрос формировать, на SQL платформе будет быстрее работать...
Читают тему
(гостей: 1)