17.07.09 — 11:55
День добрый, господа! Второй день не приходит в голову каким образом можно организовать поиск документов по конфигурации, в которых присутствует реквизит определённого вида. Проще говоря, требуется найти все виды документов, в которых присутствует реквизит с типом «справочник.контрагенты». Всем заранее спасибо
1 — 17.07.09 — 11:55
2 — 17.07.09 — 11:56
(0)перебором по метаданным
3 — 17.07.09 — 11:56
(0)В конфигуратор — правая кнопка мыши — Найти ссылк на объект. Как то так
4 — 17.07.09 — 11:57
Метаданные.Документ(Сч).РеквизитШапки(Сч1)
…
есть еще табличнаячасть и общиереквизиты, ищи meta.als по метаданным
5 — 17.07.09 — 11:58
4 — то есть нужно сначала по шапке, а потом по табличной части проверять?
6 — 17.07.09 — 11:58
(3)а я подумал, что программно )))
7 — 17.07.09 — 11:59
6 — конечно программно, господа, шо за вопрос :))
8 — 17.07.09 — 12:00
9 — 17.07.09 — 12:00
поиск —
по общим
по шапке
по таб части
10 — 17.07.09 — 12:01
9 — а так чтобы «сразу»?
11 — 17.07.09 — 12:02
8 — вас ист дас?
12 — 17.07.09 — 12:02
перечисли 500000 копеек мне на счет и будет «сразу»
13 — 17.07.09 — 12:04
не шли, тут один уже послал 300 руб гы ))))
14 — 17.07.09 — 12:04
(11)справочник как работать с метадаными…
function GetAttribDocument(idDoc)
// На всякий случай проверим если у нас такой вид документа.
if metadata.Document(idDoc).Selected() = 0 then
return «Нет документа данного вида»;
endif;
Answer = createobject(«valuelist»);
// Получим количество общих реквизитов документа.
Count = metadata.CommonDocAttribute();
// В цикле добавим их к нашему «Списку значений».
for x = 1 to Count do
Answer.AddValue(metadata.CommonDocAttribute(x).Identifier);
enddo;
// Получим количество реквизитов шапки документа.
Count = metadata.Document(idDoc).HeadAttribute();
// В цикле добавим их к нашему «Списку значений».
for x = 1 to Count do
Answer.AddValue(metadata.Document(idDoc).HeadAttribute(x).Identifier);
enddo;
// Получим количество реквизитов табличной части документа.
Count = metadata.Document(idDoc).TableAttribute();
// В цикле добавим их к нашему «Списку значений».
for x = 1 to Count do
Answer.AddValue(metadata.Document(idDoc).TableAttribute(x).Identifier);
enddo;
return Answer;
endfunction;
15 — 17.07.09 — 12:06
(14) можно проще….»Сразу»….
(13) медленный интернет? Оленей покорми….
16 — 17.07.09 — 12:07
(15)получить сразу спмсок всех реквизитов? … без анализа метаданных
17 — 17.07.09 — 12:07
(15) «столовое серебро нашли, а осадочек остался» )
18 — 17.07.09 — 12:08
(0) не забываем про реквизиты спр. неопределенного вида и просто неопределенного типа
19 — 17.07.09 — 12:08
12 — я про метод говорю: чтоб не про «реквизитТЧ» и «реквизитШапки», а сразу «РЕКВИЗИТ» проверять на вхождение. Описания так и нет вроде бы как
20 — 17.07.09 — 12:09
18 — кстати — точно!!!
21 — 17.07.09 — 12:10
19 — вот бы щас лоханулси то как
22 — 17.07.09 — 12:11
(19) а я про 500000 копеек говорю… Как поступят — так проверишь….
(18) и это решаемо…
23 — 17.07.09 — 12:12
(18) точнее — уже решено…
24 — 17.07.09 — 12:13
22 — я не жадный :)) послал бы и не в копейках
самому интересно
иначе зачем на свете этом грешном живём?
25 — 17.07.09 — 12:14
ну так в чем дело? удовлетвори свое любопытство…
26 — 17.07.09 — 12:15
а мне как раз на второй бюджетный сотовый хватит для прогулок…
27 — 17.07.09 — 12:15
Для Каждого мдДокумент Из Метаданные.Документы Цикл
Для Каждого мдИзмерение Из мдДокумент.Измерения Цикл
Если мдИзмерение.Тип.СодержитТип(Тип(«СправочникСсылка.Номенклатура»)) Тогда
Сообщить(«Документ содержит такой реквизит»);
КонецЕсли;
КонецЦикла;
КонецЦикла;
28 — 17.07.09 — 12:16
недорого прошу…
P.S. кстати, примера в типовых от 1С нет…
29 — 17.07.09 — 12:16
(26)дэдэ распарсиваешь что ли?
30 — 17.07.09 — 12:16
(27) убейся ап табуретку….
31 — 17.07.09 — 12:17
(27) переведи на 7-ку )
32 — 17.07.09 — 12:17
(29) шевели мосхой то… а то застоится…
33 — 17.07.09 — 12:17
епт, не заметил что для семерки надо
34 — 17.07.09 — 12:18
25 — Спасибо, Уважаемый, за предложение, пошел шевелить…
35 — 17.07.09 — 12:19
(34) все равно не допрешь… как ….
36 — 17.07.09 — 12:29
да фиги тут шевелить … есть только два решения… либо перебором по метаданным… либо дд …
37 — 17.07.09 — 12:43
(36) вот не думал, что ты так тупить умеешь….
и это во вшивой семерке…. представляю, как тупят в восьмерке….
38 — 17.07.09 — 12:55
(37)тупить тоже надо уметь… у тебя ксати даже это плохо получается, не в обиду…
думаешь закос под пита это круто? … для этого надо хоть что-то показать, а потом тупить
39 — 17.07.09 — 13:03
Ну ты точно тупой….
P.S. косить под себя еще уметь надо?
40 — 17.07.09 — 13:11
38, 39 — брэйк! Выяснять отношения нужно в реале,
так корректнее будет :))
41 — 17.07.09 — 13:11
(39)с каких это пор я питом стал? … а вот у тебя косить под пита получается плохо…
42 — 17.07.09 — 13:15
(41) мдя…. в карточку Коллайдера глянь…
картоку 427 тож исправить?
43 — 17.07.09 — 13:16
щас поправлю….
44 — 17.07.09 — 13:17
уть…. а ник то в карточке нельзя исправить….
45 — 17.07.09 — 13:18
Господа! Давайте лучше проигнорируем нездоровые эмоции и поближе к теме, к теме…
46 — 17.07.09 — 13:19
а? что? 500000 копеек уже на счету?
47 — 17.07.09 — 13:21
46 — щас…
Врагу не сдается наш гордый Варяг… :))
48 — 17.07.09 — 13:21
тогда проходите…. здесь не подают…
49 — 17.07.09 — 13:22
если Вы не можете зайти через Вход,
значит пройдём через Выход :))
без подачек
50 — 17.07.09 — 13:23
(43)уделал … пошел вытирать попу… а что это ты с сотки на копейки перешел?
51 — 17.07.09 — 13:25
а в крокодилах я длиннее…
(49) табуретку для убивства дать?
52 — 17.07.09 — 13:41
(тщетно пытаясь проснуться, протирая глаза)
О! А чоэто, уля еще и задовым тут работал?
53 — 17.07.09 — 13:43
(52)вот это меня и свело … всю дорогу думал, что коллайдер это задов…
54 — 17.07.09 — 13:52
Это был подлинный Коллайдер… раньше
Пока я ник не перевел на себя…
55 — 17.07.09 — 13:52
Теперь гражданин Задов отдыхает…
56 — 17.07.09 — 13:55
как … ты у самого крутого хакера мисты учетку увел … куда катимся
57 — 17.07.09 — 14:01
Причем заметь — увел исключительно силой мосха… ничего не ломая…
58 — 17.07.09 — 14:05
(57)и он до сих пор не отжал … странно …
а я уже собирался с ним побздеть за бюджетный телефон и выделеный канал в германию…
59 — 17.07.09 — 14:06
наверное ты ему какую-то хитрую обработку всучил?
60 — 17.07.09 — 14:09
нах? Ложкой по лбу и он сдулся… Примитивно до ужаса…
61 — 17.07.09 — 14:14
(15) ээ… я тоже потуплю:
«Сразу» это где ? в предприятии, или в пофигураторе ?
И без ВК ?…
62 — 17.07.09 — 14:18
Если в пофигураторе..то там и так всё штатно находится через найти ссылки на объект.
63 — 17.07.09 — 14:19
Коли такая дискуссия развернулась и пыль столбом и чепчики летают, придётся объяснить: обработку пишу для подмены «клонов» разных по «контрагентам». Недавно граждане пришли и «навыгружали» из какого-то стороннего софта в Бухгалтерию… Щас контрагентов развелось…
на ИТС нашёл такую по смыслу обработку…
ток она какая-то не совсем живая — ни один кнопарик не работаетъ
64 — 17.07.09 — 14:21
+63 Называется «Замена значений»
Щас вот её ковыряю
Странно это всё конечно
65 — 17.07.09 — 14:32
repval.ert
66 — 17.07.09 — 14:36
65 — так я про её и говорю. Ток она немножко не так звучит REPLVAL.ERT
67 — 17.07.09 — 14:48
Жить надо проще… Гони денежку то….
Я тебе за час сваяю шедевр…
68 — 17.07.09 — 14:49
(66) она полностью работоспособна.
есть хренова туча клонов наеё основе на проклабе/инфостарте.
69 — 17.07.09 — 14:51
(67) а на (61) есть ответ
70 — 17.07.09 — 15:50
Woolf
ставь номера сообщений в скобках
как-то так (70)
71 — 17.07.09 — 15:51
(63) надо ее из каталога с другими обработками открывать )
она часть других использует
и работает через НайтиСсылки, а не через метаданные
72 — 17.07.09 — 16:04
А что, Пит и Коллайдер — один человек?
Вот, северный лис…
Torquader
73 — 17.07.09 — 18:45
А такой вопрос — есть функция «НайтиСсылки» — она же по идее сама должна делать то, что вы хотите руками.
P.S. проще всего заглянуть в dbf-файлы и поискать нужное значение там.
0
Как определить какие реквизиты имеются в табличной части документа
ПоступлениеТовара = Метаданные.Документы.ПоступлениеТовара;
Реквизиты = ПоступлениеТовара.ТабличныеЧасти.Товары.Реквизиты;
Для каждого наим из Реквизиты Цикл
Сообщить("Имя реквизита " + наим.Имя +
"; тип реквизита " + наим.Тип);
КонецЦикла;
// Результат:
// Имя реквизита Наименование; тип реквизита Справочник ссылка: Номенклатура
// Имя реквизита Количество; тип реквизита Число
// Имя реквизита Цена; тип реквизита Число
// Имя реквизита Сумма; тип реквизита Число
Как выбрать и упорядочить документы за период в 1С
&НаСервере
Процедура КакВыбратьИУпорядочитьДокументыЗаПериодНаСервере()
// найдём все документы поступления за 2020 год
// упорядочив их по возрастанию даты
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Ссылка
|ИЗ
| Документ.ПоступлениеТоваров КАК ПоступлениеТоваров
|ГДЕ
| Дата МЕЖДУ &НачДата И &КонДата
|УПОРЯДОЧИТЬ ПО
| Дата ВОЗР";
Запрос.УстановитьПараметр("НачДата", '20200101');
Запрос.УстановитьПараметр("КонДата", '20201231');
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДокументов = РезультатЗапроса.Выбрать();
Пока ВыборкаДокументов.Следующий() Цикл
Сообщить(ВыборкаДокументов.Ссылка);
КонецЦикла;
КонецПроцедуры
Как найти документ по номеру в 1С
&НаСервере
Процедура КакНайтиДокументПоНомеруНаСервере()
// найдём поступление № А-000000001 за 2020 год
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Ссылка
|ИЗ
| Документ.ПоступлениеТоваров КАК ПоступлениеТоваров
|ГДЕ
| Дата МЕЖДУ &НачДата И &КонДата И
| Номер = &ВыбНомер";
Запрос.УстановитьПараметр("НачДата", '20200101');
Запрос.УстановитьПараметр("КонДата", '20201231');
Запрос.УстановитьПараметр("ВыбНомер", "А-000000001");
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДокументов = РезультатЗапроса.Выбрать();
Если ВыборкаДокументов.Следующий() Тогда
Сообщить(ВыборкаДокументов.Ссылка);
Иначе
Сообщить("Документ с таким номером не существует!");
КонецЕсли;
КонецПроцедуры
Как найти документы по реквизиту в 1С
&НаСервере
Процедура КакНайтиДокументПоРеквизитуНаСервере()
// найдём все документы поступления
// от поставщика ООО "Ромашка"
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Ссылка,
| Поставщик
|ИЗ
| Документ.ПоступлениеТоваров КАК ПоступлениеТоваров
|ГДЕ
| Поставщик = &ВыбПоставщик
|УПОРЯДОЧИТЬ ПО
| Дата ВОЗР";
Запрос.УстановитьПараметр(
"ВыбПоставщик",
Справочники.Поставщики.НайтиПоНаименованию("ООО ""Ромашка""")
);
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДокументов = РезультатЗапроса.Выбрать();
Пока ВыборкаДокументов.Следующий() Цикл
Сообщить(
Строка(ВыборкаДокументов.Ссылка) + " " +
ВыборкаДокументов.Поставщик
);
КонецЦикла;
КонецПроцедуры
Как выбрать все документы, которые не проведены и не помечены на удаление в 1С
&НаСервере
Процедура КакВыбратьВсеДокументыКоторыеНеПроведеныИНеПомеченыНаУдалениеНаСервере()
// найдём не проведенные и не помеченные на удаление
// документы поступления товаров
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Ссылка,
| Проведен,
| ПометкаУдаления
|ИЗ
| Документ.ПоступлениеТоваров КАК ПоступлениеТоваров
|ГДЕ
| Проведен = ЛОЖЬ И
| ПометкаУдаления = ЛОЖЬ
|УПОРЯДОЧИТЬ ПО
| Дата ВОЗР";
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДокументов = РезультатЗапроса.Выбрать();
Пока ВыборкаДокументов.Следующий() Цикл
Сообщить(
Строка(ВыборкаДокументов.Ссылка) + " " +
ВыборкаДокументов.Проведен + " " +
ВыборкаДокументов.ПометкаУдаления
);
КонецЦикла;
КонецПроцедуры
Как найти подчиненные документы в 1С
&НаСервере
Процедура КакНайтиПодчиненныеДокументыНаСервере()
// Рассмотрим работу с подчиненными (связанными) документами
// на примере документов: ПоступлениеТоваровУслуг и СчетФактураПолученный.
// Документ СчетФактураПолученный вводится на основании документа
// ПоступлениеТоваровУслуг, то есть счет фактура является подчиненной
// по отношению к поступлению.
// Факт подчиненности обычно (в типовых) фиксируется в самом подчиненном
// документе через табличную часть ДокументыОснования.
// Почему через табличную часть? Потому что один документ может зависеть
// (быть подчиненным) сразу от нескольких родителей (оснований).
// Пример №1.
// У нас есть ссылка на поступление товаров и услуг. Требуется найти
// счёт-фактуры, которые были введены на основании этого поступления.
// В дереве подчиненности эти фактуры будут подчинены (зависимы) от
// документа поступления.
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| Ссылка
|ИЗ
| Документ.СчетФактураПолученный.ДокументыОснования КАК
| СчетФактураПолученныйДокументыОснования
|ГДЕ
| СчетФактураПолученныйДокументыОснования.ДокументОснование =
| &ВыбПоступление";
Запрос.УстановитьПараметр("ВыбПоступление",
Документы.ПоступлениеТоваровУслуг.НайтиПоНомеру("А-00000005", '20200101')
);
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
ПодчиненнаяФактура = ВыборкаДетальныеЗаписи.Ссылка;
Сообщить(ПодчиненнаяФактура);
КонецЦикла;
// Пример №2.
// У нас есть ссылка на счет-фактуру полученную. Требуется найти,
// документы, на основании которых она была введена (родителей).
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ДокументОснование
|ИЗ
| Документ.СчетФактураПолученный.ДокументыОснования КАК
| СчетФактураПолученныйДокументыОснования
|ГДЕ
| СчетФактураПолученныйДокументыОснования.Ссылка =
| &ВыбСчетФактура";
Запрос.УстановитьПараметр("ВыбСчетФактура",
Документы.СчетФактураПолученный.НайтиПоНомеру("А-00000002", '20200101')
);
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
РодительФактуры = ВыборкаДетальныеЗаписи.ДокументОснование;
Сообщить(РодительФактуры);
КонецЦикла;
КонецПроцедуры
Как перебрать (перечислить) строки табличной части документа в 1С
&НаСервере
Процедура КакПеречислитьСтрокиИзТабличнойЧастиДокументаНаСервере()
// У документа Поступление есть табличная часть 'Товары'.
// У этой табличной части есть колонки: Номенклатура, Количество,
// Сумма.
ПоступлениеСсылка =
Документы.ПоступлениеТоваров.НайтиПоНомеру(
"А-00000001", '20201231');
// перечислим строки табличной части этого документа
// при помощи объектной техники
Для Каждого Строка Из ПоступлениеСсылка.Товары Цикл
Сообщить(
Строка.Номенклатура.Наименование + " " +
Строка.Количество + " шт. " +
Строка.Сумма + " руб."
);
КонецЦикла;
// при помощи запроса
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ПоступлениеТоваровТовары.Номенклатура,
| ПоступлениеТоваровТовары.Количество,
| ПоступлениеТоваровТовары.Сумма
|ИЗ
| Документ.ПоступлениеТоваров.Товары КАК ПоступлениеТоваровТовары
|ГДЕ
| ПоступлениеТоваровТовары.Ссылка = &ВыбПоступление";
Запрос.УстановитьПараметр("ВыбПоступление", ПоступлениеСсылка);
РезультатЗапроса = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = РезультатЗапроса.Выбрать();
Пока ВыборкаДетальныеЗаписи.Следующий() Цикл
Сообщить(
ВыборкаДетальныеЗаписи.Номенклатура.Наименование + " " +
ВыборкаДетальныеЗаписи.Количество + " шт. " +
ВыборкаДетальныеЗаписи.Сумма + " руб."
);
КонецЦикла;
КонецПроцедуры
Как создать документ в 1С
// создадим новый документ поступление
Поступление = Документы.ПоступлениеТоваров.СоздатьДокумент();
// заполним шапку документа
Поступление.Дата = ТекущаяДата();
Поступление.Поставщик =
Справочники.Поставщики.НайтиПоНаименованию(
"ООО ""Ромашка"""
);
Поступление.Склад =
Справочники.Склады.НайтиПоНаименованию(
"Основной склад"
);
// заполним табличную часть
НоваяСтрока = Поступление.Товары.Добавить();
НоваяСтрока.Номенклатура =
Справочники.Номенклатура.НайтиПоНаименованию(
"Сапоги"
);
НоваяСтрока.Количество = 2;
НоваяСтрока.Сумма = 3000;
Как записать документ в 1С
Поступление.Записать(РежимЗаписиДокумента.Запись);
Как провести документ в 1С
Поступление.Записать(РежимЗаписиДокумента.Проведение);
Как отменить проведение документа в 1С
Поступление.Записать(РежимЗаписиДокумента.ОтменаПроведения);
Как внести изменения в документ по ссылке в 1С
// зачастую у нас есть только ссылка на документ
// и чтобы по ней получить сам объект документа
// для изменения нужно вызывать метод ПолучитьОбъект
// найдём документ под номером А-000000001
// для лаконичности примера воспользуемся не запросом,
// а объектной техникой
СсылкаДокумент = Документы.РеализацияТоваров.НайтиПоНомеру(
"А-000000001",
'20201231' // поиск среди документов 2020 года
);
// нам вернули не сам документ, а ссылку (указатель) на него
// проверим - нашёлся ли вообще документ
Если СсылкаДокумент.Пустая() Тогда
Сообщить("Документ не найден.");
Иначе
// получим сам документ по ссылке
СсылкаДокументОбъект = СсылкаДокумент.ПолучитьОбъект();
// вот его уже можно изменять и записывать
СсылкаДокументОбъект .Клиент = Справочники.Клиенты.НайтиПоНаименованию("Ромашка");
СсылкаДокументОбъект.Записать();
КонецЕсли;
Как получить пустую ссылку типа документ в 1С
ДокументСсылкаПустая = Документы.РеализацияТоваров.ПустаяСсылка();
Если ДокументСсылкаПустая.Пустая() Тогда
Сообщить("Ссылка действительно пустая.");
КонецЕсли;
Как скопировать существующий документ в 1С
// скопируем документ и запишем
// как новый документ от сегодняшнего числа
КопияДокументаОбъект = КакойтоДокументСсылка.Скопировать();
КопияДокументаОбъект.Дата = ТекущаяДата();
КопияДокументаОбъект.Комментарий = "Копия документа " + Строка(КакойтоДокументСсылка);
// запишем и проведём документ
КопияДокументаОбъект.Записать(РежимЗаписиДокумента.Проведение);
Как заблокировать документ перед изменениями в 1С
// выполним блокировку документа
// от изменения другими режимами или пользователями
ДокументОбъект = СсылкаДокумент.ПолучитьОбъект();
Если Не ДокументОбъект .Заблокирован() Тогда
ДокументОбъект .Заблокировать();
// тут идёт какой-то долгий алгоритм
// в результате которого мы меняем
// заблокированный элемент
...
ДокументОбъект.Записать();
// и только потом освобождаем его
// для других режимов и пользователей
ДокументОбъект.Разблокировать();
КонецЕсли;
Как создать новый документ на основании другого объекта в 1С
// создадим документ на основании поступления и заполним
// замечание: в модуле объекта документа РеализацияТоваров дополнительно надо создать обработчик ОбработкаЗаполнения(), в который надо вписать код заполнения табличной части
НоваяРеализацияОбъект = Документы.РеализацияТоваров.СоздатьДокумент();
НоваяРеализацияОбъект.Дата = ТекущаяДата();
НоваяРеализацияОбъект.Комментарий = "Документ введён на основании " + Строка(ДокументСсылкаПоступление1);
НоваяРеализацияОбъект.Заполнить(ДокументСсылкаПоступление1); //тут будет вызвана "ОбработкаЗаполнения"
НоваяРеализацияОбъект.Записать(РежимЗаписиДокумента.Проведение);
Как пометить на удаление документ в 1С
ДокументОбъект.УстановитьПометкуУдаления(Истина);
// метод Записать вызывать не нужно
Как найти и изменить программно движения документа в 1С
&НаСервере
Процедура КакНайтиИИзменитьДвиженияДокументаНаСервере()
// предположим у нас есть ссылка на проведенный
// документ поступления № А-000000001
ПоступлениеСсылка = Документы.ПоступлениеТоваров.НайтиПоНомеру("А-000000001", '20201231');
// мы знаем, что этот документ делает записи по регистру накопления "ТоварыНаСкладах"
// изменим записи по регистру "ТоварыНаСкладах"
ПоступлениеОбъект = ПоступлениеСсылка.ПолучитьОбъект();
// получим набор записей этого документа в регистр ТоварыНаСкладах
НаборЗаписей = ПоступлениеОбъект.Движения.ТоварыНаСкладах;
// прочитаем записи из базы данных
НаборЗаписей.Прочитать();
Для Каждого Запись Из НаборЗаписей Цикл
// выведем старые значения
Сообщить(
Строка(Запись.ВидДвижения) + " " +
Запись.Номенклатура + " " + Запись.Количество
);
// изменим запись, удвоив количество
Запись.Количество = Запись.Количество * 2;
КонецЦикла;
// добавим новую запись
НоваяЗапись = НаборЗаписей.ДобавитьПриход();
НоваяЗапись.Склад = Справочники.Склады.НайтиПоНаименованию("Основной склад");
НоваяЗапись.Номенклатура = Справочники.Номенклатура.НайтиПоНаименованию("Сапоги");
НоваяЗапись.Количество = 3;
НоваяЗапись.Период = ТекущаяДата();
//запишем набор записей
НаборЗаписей.Записать(Истина); // удалим старые движения и запишем вместо них новые
//внимание! после стандартной перезаписи документа наши изменения вновь будут перезаписаны типовым алгоритмом (если он есть в модуле объекта).
КонецПроцедуры
Как прочитать движения документа по регистрам запросом в 1С
&НаСервере
Процедура КакПрочитатьДвиженияДокументаЗапросомНаСервере()
// этот приём используется, если не требуется изменять
// найденные записи
// предположим у нас есть ссылка на проведенный
// документ поступления товаров № А-0000000001
ПоступлениеСсылка =
Документы.ПоступлениеТоваров.НайтиПоНомеру(
"А-0000000001", '20201231');
// прочитаем записи по регистру "ТоварыНаСкладах" запросом
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ТоварыНаСкладах.НомерСтроки,
| ТоварыНаСкладах.ВидДвижения,
| ТоварыНаСкладах.Номенклатура,
| ТоварыНаСкладах.Количество
|ИЗ
| РегистрНакопления.ТоварыНаСкладах КАК ТоварыНаСкладах
|ГДЕ
| ТоварыНаСкладах.Регистратор = &ВыбРегистратор
|
|УПОРЯДОЧИТЬ ПО
| ТоварыНаСкладах.НомерСтроки";
Запрос.УстановитьПараметр("ВыбРегистратор", ПоступлениеСсылка);
РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка .Следующий() Цикл
Сообщить(
"#" + Выборка.НомерСтроки +
" " + Выборка.ВидДвижения +
" " + Выборка.Номенклатура+
" " + Выборка.Количество
);
КонецЦикла;
КонецПроцедуры
Как изменить проведенный документ, не меняя его в 1С
&НаСервере
Процедура КакИзменитьПроведенныйДокументНеМеняяЕгоДвиженийНаСервере()
// бывает так, что есть проведенный документ
// в уже закрытом периоде и нужно изменить
// некоторое поле документа, но так чтобы
// не поменялись проводки документа
ПоступлениеСсылка =
Документы.ПоступлениеТоваров.НайтиПоНомеру(
"А-0000000001", '20201231');
// Изменим количество в табличной части этого документа
// на 1, но чтобы проводки (движения) остались прежними
Поступление = ПоступлениеСсылка.ПолучитьОбъект();
Для Каждого Строка Из Поступление.Товары Цикл
Строка.Количество = 1;
КонецЦикла;
// если сейчас просто записать документ
// изменятся его проводки, ведь он уже проведён
// но если установить флаг Загрузка
Поступление.ОбменДанными.Загрузка = Истина;
// то можно записать проведенный документ
// без повторного проведения
Поступление.Записать();
КонецПроцедуры
Как найти документ по номеру в 1С
&НаСервереБезКонтекста
Функция ПолучитьДокументПоНомеру(Номер, ДатаИнтервала)
Возврат Документы.РеализацияТоваров.НайтиПоНомеру(Номер, ДатаИнтервала);
КонецФункции
Как открыть форму существующего документа в 1С
&НаКлиенте
Процедура КакОткрытьФормуСуществующегоДокумента(Команда)
СсылкаНаДокумент = Документы.РеализацияТоваров.НайтиПоНомеру("А-000000002", '20201231');
ПараметрыФормы = Новый Структура("Ключ", СсылкаНаДокумент);
ОткрытьФорму(
"Документ.РеализацияТоваров.ФормаОбъекта", // имя формы
ПараметрыФормы // параметры для формы
);
КонецПроцедуры
Как открыть форму выбора документа и отследить её закрытие в 1С
&НаКлиенте
Процедура КакОткрытьФормуВыбораДокумента(Команда)
ОповещениеОЗакрытии = Новый ОписаниеОповещения("ПослеВыбораДокумента",
ЭтотОбъект);
ОткрытьФорму(
"Документ.РеализацияТоваров.ФормаВыбора",,,,,,ОповещениеОЗакрытии
);
КонецПроцедуры
&НаКлиенте
Процедура ПослеВыбораДокумента(Результат, Параметры) Экспорт
Если Результат <> Неопределено Тогда
Сообщить("Был выбран документ " + Результат);
КонецЕсли;
КонецПроцедуры
Как открыть форму списка (журнал) документов с отбором по реквизиту в 1С
&НаКлиенте
Процедура КакОткрытьФормуСпискаДокументовСОтбором(Команда)
// откроем список поступлений, оставив
// только те, что от поставщика ООО "Ромашка"
ПараметрыОтбора = Новый Структура;
ПараметрыОтбора.Вставить("Поставщик",
НайтиПоставщикаПоИмени("ООО ""Ромашка"""));
ПараметрыФормы = Новый Структура;
ПараметрыФормы.Вставить("Отбор", ПараметрыОтбора);
ОткрытьФорму(
"Документ.ПоступлениеТоваров.ФормаСписка",
ПараметрыФормы
);
КонецПроцедуры
Как открыть форму только что созданного, но ещё не записанного документа в 1С
&НаКлиенте
Процедура КакОткрытьФормуНовогоНеЗаписанногоДокумента(Команда)
// получаем форму нового документа
ФормаНовогоДокумента = ПолучитьФорму(
"Документ.ПоступлениеТоваров.ФормаОбъекта",,, Истина);
// делаем копию её данных (так как напрямую их менять
// нельзя)
КопияДанныхФормы = ФормаНовогоДокумента.Объект;
// заполняем эти данные на сервере
ЗаполнитьДанныеФормыНаСервере(КопияДанныхФормы);
// копируем заполненные данные в исходную форму
КопироватьДанныеФормы(КопияДанныхФормы,
ФормаНовогоДокумента.Объект);
// показываем форму нового заполненного
// документа пользователю
ФормаНовогоДокумента.Открыть();
КонецПроцедуры
&НаСервере
Процедура ЗаполнитьДанныеФормыНаСервере(ДанныеФормы)
// преобразуем данные формы в документ
Поступление = ДанныеФормыВЗначение(ДанныеФормы,
Тип("ДокументОбъект.ПоступлениеТоваров"));
// заполним только табличную часть
НоваяСтрока = Поступление.Товары.Добавить();
НоваяСтрока.Номенклатура =
Справочники.Номенклатура.НайтиПоНаименованию(
"Сапоги"
);
НоваяСтрока.Количество = 2;
НоваяСтрока.Сумма = 3000;
// преобразуем документа обратно в данные формы
ЗначениеВДанныеФормы(Поступление, ДанныеФормы);
КонецПроцедуры
You have no rights to post comments
(@dom)
Сообщения: 200
Honorable Member
Запрос формируется динамически, по всем документам, у которых имеется общий реквизит «Организация».
Процедура Инициализация() Исключения = Новый Массив; Исключения.Добавить("ЗаявкаНаДоставку"); Исключения.Добавить("ЗаказПокупателя"); Исключения.Добавить("ЧекККМ"); ТаблицаДокументов = Новый ТаблицаЗначений; ТаблицаДокументов.Колонки.Добавить("Имя"); ТаблицаДокументов.Колонки.Добавить("Реквизит"); Для Каждого Док Из Метаданные.Документы Цикл Если Исключения.Найти(Док.Имя) <> Неопределено Тогда Продолжить; КонецЕсли; Если Док.Реквизиты.Найти("Организация") = Неопределено Тогда Продолжить; КонецЕсли; Нов = ТаблицаДокументов.Добавить(); Нов.Имя = Док.Имя; КонецЦикла; ТекстЗапроса = ""; Для Каждого Стр Из ТаблицаДокументов Цикл Если ТаблицаДокументов.Индекс(Стр) = 0 Тогда ТекстЗапроса = ТекстЗапроса + " | ВЫБРАТЬ РАЗРЕШЕННЫЕ"; Иначе ТекстЗапроса = ТекстЗапроса + " | ВЫБРАТЬ"; КонецЕсли; ТекстЗапроса = ТекстЗапроса + " | РеализацияТоваровУслуг.Ссылка, | РеализацияТоваровУслуг.Организация, | """ + Стр.Имя + """ КАК Вид |ИЗ | Документ." + Стр.Имя + " КАК РеализацияТоваровУслуг |ГДЕ | РеализацияТоваровУслуг.Дата МЕЖДУ &Дата1 И &Дата2 |{ГДЕ | РеализацияТоваровУслуг.Проведен, | РеализацияТоваровУслуг.ПометкаУдаления, | РеализацияТоваровУслуг.Дата, | РеализацияТоваровУслуг.Организация.*} |"; Если ТаблицаДокументов.Индекс(стр)+ 1 <> ТаблицаДокументов.Количество() Тогда ТекстЗапроса = ТекстЗапроса + " |ОБЪЕДИНИТЬ ВСЕ |"; КонецЕсли; КонецЦикла; Построитель.Текст = ТекстЗапроса; Построитель.ЗаполнитьНастройки(); Отбор = Построитель.Отбор.Найти("Организация"); Если Отбор = Неопределено Тогда Отбор = Построитель.Отбор.Добавить("Организация"); КонецЕсли; КонецПроцедуры
Или Вот такая конструкция:
ТекстЗапроса = ""; Для Каждого Тип Из ТипыШаблонов Цикл ТекстЗапроса = ТекстЗапроса + ?(ПустаяСтрока(ТекстЗапроса), "", " |ОБЪЕДИНИТЬ ВСЕ") + " |ВЫБРАТЬ " + ?(ПустаяСтрока(ТекстЗапроса),"РАЗРЕШЕННЫЕ","") + " | ПредметыШаблона.Ссылка КАК ШаблонБизнесПроцесса, | ПредметыШаблона.РольПредмета, | ПредметыШаблона.ИмяПредмета |ИЗ | %Таблица%.Предметы КАК ПредметыШаблона |ГДЕ | ПредметыШаблона.Ссылка В (&ШаблоныЭтапа)"; ТекстЗапроса = СтрЗаменить(ТекстЗапроса,"%Таблица%", Тип.Значение); КонецЦикла;
Размещено : 07/03/2020 6:53 дп
/
/
/
Совет: Эффективный поиск по спискам документов – Как в 1С 8.3 найти документ в списке?
25.11.2019
Функционал программы 1С позволяет гибко настраивать списки, что позволяет легче ориентироваться в документах и осуществлять быстрый поиск. На примере 1С:Бухгалетрии 8 рассмотрим способы быстрого поиска и наглядной организации информации в списке документов.
Базовые инструменты отбора и сортировки встроены сразу в форму списка, и могут облегчить поиск документов 1С в самых распространенных случаях – когда необходим отбор по контрагенту или организации, либо когда необходимо сортировать список по данным любого столбца, например по статусу оплаты. Для этого нужно щелкнуть левой кнопкой по заголовку столбца (щелкнуть дважды, чтобы инвертировать сортировку).
Также через контекстное меню при нажатии правой кнопкой мыши на любом документе (или сочетанием клавиш Ctrl + F) можно вызвать «Расширенный поиск» – простой отбор по значению в любой из колонок, поиск можно осуществить по точному совпадению с поисковой фразой, по началу строки или по любой части строки. Так же через контекстное меню можно произвести отбор по дате документа с помощью функции «Установить период…». Функции можно применять последовательно, например, ограничить временным периодом список с результатами расширенного поиска.
Однако базовых возможностей поиска оказывается недостаточно, когда документов очень много и из них нужно найти определенные. Например, оставить в списке только непроведенные документы, или найти документ сразу по нескольким условиям. Расширенный функционал отбора и сортировки находится в меню «Еще…», кнопка «Настроить список…»
Обратимся к вкладке «Отбор». Справа в столбце расположены все реквизиты документов, по которым их можно отфильтровать. Структура реквизитов иерархическая – можно осуществлять отбор по основному реквизиту (например по Контрагенту), либо по подчиненному (например, по ИНН контрагента, либо по характеристике юр./физ. лицо). Также можно создавать сложные отборы – то есть сразу по нескольким реквизитам документов 1С. Так, в примере ниже, в списке счетов мы осуществляем отбор по сумме счета (не менее 10 000 руб.) и статусу оплаты (не оплачен).
На следующей вкладке расположено окно сортировки – здесь можно задать тонкую настройку сортировки списка документов по любым реквизитам, в том числе сложные варианты сортировки по нескольким реквизитам.
Далее, когда вам потребуется сбросить настройки поиска, сортировки и отбора документов 1С, вы можете вернуться к стандартным настройкам списка. Для этого в окне настройки списка нажмите на кнопку «Еще…», затем – «Установить стандартные настройки».
Помимо этого, вы можете организовать реквизиты в списке любым удобным образом, или даже добавить для отображения новые. Для этого через меню «Еще…» откройте окно «Изменить форму…»
Например, реквизит «Комментарии» стандартно находится с крайней правой части окна списка и комментария может быть не видно без дополнительной прокрутки. В примере мы изменим местоположение реквизита комментарий, чтобы он отображался правее. Для этого реквизит нужно «поднять».
Помимо этого, вы можете добавить новые реквизиты для отображения. Так, для примера мы добавим в отображение новый реквизит – телефон контрагента.
Пройдите курсы 1С и Вам больше не понадобятся советы и руководства!
Расписание курсов 1C
Подпишитесь на нас!
И получите в подарок промокод на 1500 руб! Все новые статьи, акции и анонсы каждую неделю: