- Можно ли подписаться на событие ПриЗаписи формы элемента справочника? Нет. (подписка на событие работает только с объектом.).
- При проведении документа возникает ошибка. Мы ставим точку останова в этом месте (или отлавливаем момент ошибки другим способом) и останавливаемся на проблемной строке. Она находится в общем модуле и нам надо посмотреть, как мы сюда попали из документа. Как это сделать? Узнать как курсор в отладчике попал именно в эту процедуру/функцию поможет "Стек вызовов" сочетание клавиш (Alt+Ctrl+C), при этом откроется список "Стека вызовов" где будут перечислены вложенные функции и процедуры где побывал курсор ранее.
- Возникла необходимость добавить во все формы списка всех документов конфигурации в процедуру ПриОткрытии одинаковый код. Каким образом быстрее всего можно это сделать, если конфигурация содержит большое количество документов? Во все формы списка документов, в процедуру "При открытии" вставить процедуру "НужнаяПроцедура(ЭтаФорма)" которая будет исполняться в общем модуле «На клиенте»; Марат Настоящий (rayastar); 3.1. Выгрузить модули конфигурации в файлы. Запустить конфигуратор с ключом:
"C:\Program Files (x86)\1cv8\8.3.8.2137\bin\1cv8.exe" CONFIG /F C:\Users\rmn\Documents\1C\DemoTrd1 /DumpConfigFiles D:\temp –Module
3.2. Далее, обратиться к каталогу, куда выгрузились модули и отфильтровать файлы, содержащие слова «Документ» и «ФормаСписка»:МассивФайлов = НайтиФайлы(Путь, "*ФормаСписка*.txt"); МассивФормСписковДокументов = Новый Массив; Для Каждого Стр Из МассивФайлов Цикл Если Найти(Стр.ИмяБезРасширения,"Документ") = 1 Тогда МассивФормСписковДокументов.Добавить(Стр); КонецЕсли; КонецЦикла;
3.3. На следующем этапе циклом необходимо обойти каждый текстовый файл из массива, найти необходимое вхождение, в нашем случае это слово «ПриОткрытии», найти его позицию и вставить ниже необходимый код. Сохранить файл.
3.4. Загрузить файлы в конфигурацию. Для этого необходимо запустить конфигуратор с ключем: "C:\Program Files (x86)\1cv8\8.3.8.2137\bin\1cv8.exe" CONFIG /F C:\Users\rmn\Documents\1C\DemoTrd1 /LoadConfigFiles D:\temp - Написать обработку, очищающую регистр с независимым режимом записи (управляемая форма).
&НаКлиенте Процедура ОтчиститьРС() ОтчиститьРСНаСервере(); КонецПроцедуры &НаСервереБезКонтекста Процедура ОтчиститьРСНаСервере () НаборЗаписей = РегистрыСведений.Тестовый.СоздатьНаборЗаписей(); НаборЗаписей.Записать(); КонецПроцедуры
-
Написать обработку, которая для типовой конфигурации Бухгалтерия предприятия 2.0 устанавливает курс валюты Рубль, равный 1, на каждый день 2012 года.
Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ДОБАВИТЬКДАТЕ(&НачалоПериода, ДЕНЬ, aa.a * 1000 + bb.b * 100 + cc.c * 10 + dd.d) КАК Период |ПОМЕСТИТЬ вт |ИЗ | (ВЫБРАТЬ 0 КАК a | ОБЪЕДИНИТЬ | ВЫБРАТЬ 1 | ОБЪЕДИНИТЬ | ВЫБРАТЬ 2 | ОБЪЕДИНИТЬ | ВЫБРАТЬ 3 | ОБЪЕДИНИТЬ | ВЫБРАТЬ 4 | ОБЪЕДИНИТЬ | ВЫБРАТЬ 5 | ОБЪЕДИНИТЬ | ВЫБРАТЬ 6 | ОБЪЕДИНИТЬ | ВЫБРАТЬ 7 | ОБЪЕДИНИТЬ | ВЫБРАТЬ 8 | ОБЪЕДИНИТЬ | ВЫБРАТЬ | 9) КАК aa | ПОЛНОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ | 0 КАК b | ОБЪЕДИНИТЬ | ВЫБРАТЬ 1 | ОБЪЕДИНИТЬ | ВЫБРАТЬ 2 | ОБЪЕДИНИТЬ | ВЫБРАТЬ 3 | ОБЪЕДИНИТЬ | ВЫБРАТЬ 4 | ОБЪЕДИНИТЬ | ВЫБРАТЬ 5 | ОБЪЕДИНИТЬ | ВЫБРАТЬ 6 | ОБЪЕДИНИТЬ | ВЫБРАТЬ 7 | ОБЪЕДИНИТЬ | ВЫБРАТЬ 8 | ОБЪЕДИНИТЬ | ВЫБРАТЬ | 9) КАК bb | ПО (ИСТИНА) | ПОЛНОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ | 0 КАК c | ОБЪЕДИНИТЬ | ВЫБРАТЬ 1 | ОБЪЕДИНИТЬ | ВЫБРАТЬ 2 | ОБЪЕДИНИТЬ | ВЫБРАТЬ 3 | ОБЪЕДИНИТЬ | ВЫБРАТЬ 4 | ОБЪЕДИНИТЬ | ВЫБРАТЬ 5 | ОБЪЕДИНИТЬ | ВЫБРАТЬ 6 | ОБЪЕДИНИТЬ | ВЫБРАТЬ 7 | ОБЪЕДИНИТЬ | ВЫБРАТЬ 8 | ОБЪЕДИНИТЬ | ВЫБРАТЬ | 9) КАК cc | ПО (ИСТИНА) | ПОЛНОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ | 0 КАК d | ОБЪЕДИНИТЬ | ВЫБРАТЬ 1 | ОБЪЕДИНИТЬ | ВЫБРАТЬ 2 | ОБЪЕДИНИТЬ | ВЫБРАТЬ 3 | ОБЪЕДИНИТЬ | ВЫБРАТЬ 4 | ОБЪЕДИНИТЬ | ВЫБРАТЬ 5 | ОБЪЕДИНИТЬ | ВЫБРАТЬ 6 | ОБЪЕДИНИТЬ | ВЫБРАТЬ 7 | ОБЪЕДИНИТЬ | ВЫБРАТЬ 8 | ОБЪЕДИНИТЬ | ВЫБРАТЬ | 9) КАК dd | ПО (ИСТИНА) |ГДЕ | aa.a * 1000 + bb.b * 100 + cc.c * 10 + dd.d <= РАЗНОСТЬДАТ(&НачалоПериода, &КонецПериода, ДЕНЬ) | |ИНДЕКСИРОВАТЬ ПО | Период |; | |//////////////////////////////////////////////////////////////////////////////// |ВЫБРАТЬ | вт.Период, | 1 КАК Курс, | 1 КАК Кратность, | &Валюта |ИЗ | вт КАК вт |ОБЪЕДИНИТЬ |ВЫБРАТЬ | КурсыВалют.Период, | КурсыВалют.Курс, | КурсыВалют.Кратность, | КурсыВалют.Валюта |ИЗ | РегистрСведений.КурсыВалют КАК КурсыВалют"; Запрос.УстановитьПараметр("КонецПериода", Дата("20121231")); Запрос.УстановитьПараметр("НачалоПериода", Дата("20120101")); Запрос.УстановитьПараметр("Валюта", Справочники.Валюты.НайтиПоКоду("643")); РезультатЗапроса = Запрос.Выполнить(); тз = РезультатЗапроса.Выгрузить(); Записи = РегистрыСведений.КурсыВалют.СоздатьНаборЗаписей(); Записи.Записать(); ///чистить так радикально не обязательно, тогда нужно Записи.Загрузить(тз); ///записать в цикле проверив предварительно есть ли записи за 2012г. Записи.Записать(); ///ну да, из пушки по воробьям
Василий Казьмин (awk) : с незначительной моей правкой
датаПериода = Дата("20120101"); ///в 2012г 366 дней Набор = РегистрыСведений.КурсыВалют.СоздатьНаборЗаписей(); СтруктураЗаполнения = Новый Структура("Курс, Кратность, Валюта", 1, 1, Валюта); Для ит = 0 По 365 Цикл Запись = Набор.Добавить(); Запись.Период = датаПериода; ЗаполнитьЗначенияСвойств(Запись, СтруктураЗаполнения); датаПериода = ДатаНачала + 86400 * ит; КонецЦикла; Набор.Записать();
- Написать обработку установки пометки удаления на все подчиненные элементы данного элемента иерархического справочника.
спр = Справочники.Номенклатура.НайтиПоКоду("00000000081"); об = спр.ПолучитьОбъект(); об.УстановитьПометкуУдаления(Истина,Истина); об.УстановитьПометкуУдаления(Ложь,Ложь);
7.Для типовой конфигурации Бухгалтерия предприятия 2.0 написать обработку, которая сторнирует все остатки по регистру бухгалтерии Хозрасчетный на заданную дату.
Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ХозрасчетныйОстатки.Счет КАК Счет, | ХозрасчетныйОстатки.Субконто1 КАК Субконто1, | ХозрасчетныйОстатки.Субконто2 КАК Субконто2, | ХозрасчетныйОстатки.Субконто3 КАК Субконто3, | ХозрасчетныйОстатки.Организация КАК Организация, | ХозрасчетныйОстатки.Валюта КАК Валюта, | ХозрасчетныйОстатки.Подразделение КАК Подразделение, | ЕСТЬNULL(ХозрасчетныйОстатки.СуммаОстаток, 0) КАК СуммаОстаток, | ЕСТЬNULL(ХозрасчетныйОстатки.ВалютнаяСуммаОстаток, 0) КАК ВалютнаяСуммаОстаток, | ЕСТЬNULL(ХозрасчетныйОстатки.КоличествоОстаток, 0) КАК КоличествоОстаток, | ЕСТЬNULL(ХозрасчетныйОстатки.СуммаНУОстаток, 0) КАК СуммаНУОстаток, | ЕСТЬNULL(ХозрасчетныйОстатки.СуммаПРОстаток, 0) КАК СуммаПРОстаток, | ЕСТЬNULL(ХозрасчетныйОстатки.СуммаВРОстаток, 0) КАК СуммаВРОстаток, | Хозрасчетный.Забалансовый, | ЕСТЬNULL(ХозрасчетныйОстатки.СуммаОстатокДт, 0) КАК СуммаОстатокДт, | ЕСТЬNULL(ХозрасчетныйОстатки.СуммаОстатокКт, 0) КАК СуммаОстатокКт, | ЕСТЬNULL(ХозрасчетныйОстатки.КоличествоОстатокДт, 0) КАК КоличествоОстатокДт, | ЕСТЬNULL(ХозрасчетныйОстатки.КоличествоОстатокКт, 0) КАК КоличествоОстатокКт |ИЗ | РегистрБухгалтерии.Хозрасчетный.Остатки(&Дата, , , ) КАК ХозрасчетныйОстатки | ЛЕВОЕ СОЕДИНЕНИЕ ПланСчетов.Хозрасчетный КАК Хозрасчетный | ПО ХозрасчетныйОстатки.Счет = Хозрасчетный.Ссылка |ИТОГИ | СУММА(СуммаОстаток), | СУММА(ВалютнаяСуммаОстаток), | СУММА(КоличествоОстаток), | СУММА(СуммаНУОстаток), | СУММА(СуммаПРОстаток), | СУММА(СуммаВРОстаток) |ПО | Организация"; текДата = ТекущаяДата(); Запрос.УстановитьПараметр("Дата", ТекущаяДата()); //Запрос.УстановитьПараметр("Счет", ПланыСчетов.Хозрасчетный.АмортизацияОС_01); Счет = &Счет ВыборкаОрганизаций = Запрос.Выполнить().Выбрать(ОбходРезультатаЗапроса.ПоГруппировкам); Пока ВыборкаОрганизаций.Следующий() Цикл НовДок = Документы.ОперацияБух.СоздатьДокумент(); НовДок.Дата = текДата; НовДок.Организация = ВыборкаОрганизаций.Организация; НовДок.Записать(); НЗ = РегистрыБухгалтерии.Хозрасчетный.СоздатьНаборЗаписей(); НЗ.Отбор.Регистратор.Установить(НовДок.Ссылка); Выборка = ВыборкаОрганизаций.Выбрать(); счет000 = ПланыСчетов.Хозрасчетный.Вспомогательный; счетЗабалансовый = ПланыСчетов.Хозрасчетный.ДоходыРасходыНеУчитываемые; Пока Выборка.Следующий() Цикл стр = НЗ.Добавить(); // Если (Выборка.СуммаОстаток > 0 Или Выборка.ВалютнаяСуммаОстаток > 0 Или Выборка.СуммаНУОстаток > 0 //Или Выборка.СуммаПРОстаток > 0 Или Выборка.СуммаВРОстаток > 0 Или Выборка.КоличествоОстаток > 0) Тогда Если Выборка.СуммаОстатокКт <> 0 Тогда стр.ВалютаДт = Выборка.Валюта; стр.ВалютнаяСуммаДт = Выборка.ВалютнаяСуммаОстаток; стр.КоличествоДт = Выборка.КоличествоОстаток; стр.ПодразделениеДт = Выборка.Подразделение; БухгалтерскийУчет.УстановитьСубконто(Выборка.Счет, стр.СубконтоДт, 1, Выборка.Субконто1, , , Выборка.Счет.ВидыСубконто); БухгалтерскийУчет.УстановитьСубконто(Выборка.Счет, стр.СубконтоДт, 2, Выборка.Субконто2, , , Выборка.Счет.ВидыСубконто); БухгалтерскийУчет.УстановитьСубконто(Выборка.Счет, стр.СубконтоДт, 3, Выборка.Субконто3, , , Выборка.Счет.ВидыСубконто); стр.СуммаВРДт = Выборка.СуммаВРОстаток; стр.СуммаНУДт = Выборка.СуммаНУОстаток; стр.СуммаПРДт = Выборка.СуммаПРОстаток; стр.СчетДт = Выборка.Счет; стр.СчетКт = ?(Выборка.Забалансовый,счетЗабалансовый,счет000); Иначе стр.ВалютаКт = Выборка.Валюта; стр.ВалютнаяСуммаКт = Выборка.ВалютнаяСуммаОстаток; стр.КоличествоКт = Выборка.КоличествоОстаток; стр.ПодразделениеКт = Выборка.Подразделение; БухгалтерскийУчет.УстановитьСубконто(Выборка.Счет, стр.СубконтоКт, 1, Выборка.Субконто1, , , Выборка.Счет.ВидыСубконто); БухгалтерскийУчет.УстановитьСубконто(Выборка.Счет, стр.СубконтоКт, 2, Выборка.Субконто2, , , Выборка.Счет.ВидыСубконто); БухгалтерскийУчет.УстановитьСубконто(Выборка.Счет, стр.СубконтоКт, 3, Выборка.Субконто3, , , Выборка.Счет.ВидыСубконто); стр.СуммаВРКт = Выборка.СуммаВРОстаток; стр.СуммаНУКт = Выборка.СуммаНУОстаток; стр.СуммаПРКт = Выборка.СуммаПРОстаток; стр.СчетКт = Выборка.Счет; стр.СчетДт = ?(Выборка.Забалансовый,счетЗабалансовый,счет000); КонецЕсли; стр.Организация = Выборка.Организация; стр.Регистратор = НовДок; стр.Сумма = - Выборка.СуммаОстаток; стр.Период = текДата; КонецЦикла; НЗ.Записать(Истина); КонецЦикла;
8. Для документов добавлено свойство «Номер ИнтернетЗаказа». Оно указывается пользователями в документах Заказ покупателя и Реализация товаров и услуг через пиктограмму «Открыть свойства». Пользователь просит, чтобы при вводе документа Реализация товаров и услуг на основании заказа покупателя значение свойства копировалось в документ реализации из заказа. Необходимо написать код и указать, куда его вставить.
Процедура ПодпискаНаСобытие1ОбработкаЗаполнения(Источник, ДанныеЗаполнения, ТекстЗаполнения, СтандартнаяОбработка) Экспорт
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ЗначенияСвойствОбъектов.Свойство,
| ЗначенияСвойствОбъектов.Значение
|ИЗ
| РегистрСведений.ЗначенияСвойствОбъектов КАК ЗначенияСвойствОбъектов
|ГДЕ
| ЗначенияСвойствОбъектов.Объект = &Основание
| И ЗначенияСвойствОбъектов.Свойство = &Свойство";
Запрос.УстановитьПараметр("Основание", ДанныеЗаполнения);
свойство = ПланыВидовХарактеристик.СвойстваОбъектов.НайтиПоНаименованию("Номер ИнтернетЗаказа");
Запрос.УстановитьПараметр("Свойство", свойство.Ссылка);
РезультатЗапроса = Запрос.Выполнить();
выб = РезультатЗапроса.Выбрать();
Если выб.Следующий() Тогда
Если ЗначениеЗаполнено(выб.Значение) И выб.Значение <> Ложь Тогда
СсылкаОб = Источник.ПолучитьСсылкуНового();
Если СсылкаОб.Пустая() Тогда
СсылкаОб = Документы.РеализацияТоваровУслуг.ПолучитьСсылку();
Источник.УстановитьСсылкуНового(СсылкаОб);
КонецЕсли;
НаборЗаписейЗначенияСвойств = РегистрыСведений.ЗначенияСвойствОбъектов.СоздатьНаборЗаписей();
Запись = НаборЗаписейЗначенияСвойств.Добавить();
Запись.Объект = СсылкаОб;
Запись.Свойство = выб.Свойство;
Запись.Значение = выб.Значение;
КонецЕсли;
НаборЗаписейЗначенияСвойств.Отбор.Объект.Установить(СсылкаОб);
Попытка
НаборЗаписейЗначенияСвойств.Записать();
Исключение
#Если Клиент Тогда
Предупреждение("Не удалось записать значения свойств:" + Символы.ПС + ОписаниеОшибки());
#КонецЕсли
КонецПопытки;
КонецЕсли;
9. Составьте, пожалуйста, запрос, отбирающий из списка номенклатуры только те позиции, чье наименование состоит из трех слов. В результат должны попасть позиции с наименованиями «Вилка столовая серебряная», «Кастрюля глубокая антипригарная» и не должны попасть «Телевизор», «Уксус обыкновенный» и «Ложка серебряная с дырявой ручкой"
ВЫБРАТЬ
СпрНоменклатура.Ссылка
ИЗ
Справочник.Номенклатура КАК СпрНоменклатура
ГДЕ
СпрНоменклатура.Наименование ПОДОБНО "_% _% _%"
И НЕ СпрНоменклатура.Наименование ПОДОБНО "_% _% _% _%"
И НЕ СпрНоменклатура.Наименование ПОДОБНО "_% _% _% _% _%"
10. В регистре сведений СвязанныеДокументы два индексированных реквизита – Документ1 и Документ2. Нижеприведенный запрос выдает верные результаты. Попробуйте найти возможность оптимизировать его по скорости
ВЫБРАТЬ
Регистр.Документ1,
Регистр.Документ2
ИЗ
РегистрСведений.СвязанныеДокументы КАК Регистр
ГДЕ
(Регистр.Документ1 В (&СписокДокументов)
ИЛИ Регистр.Документ2 В (&СписокДокументов))
Решение: передадим «СписокДокументов» в временную таблицу, но индексировать её не будем т.к. выборка будет вестись из регистра по его индексированным полям.
(можно проиндексировать временную таблицу и делать выборки из неё «Где Документ1 в (выборка из вт) или Документ2 в (выборка из вт)
ВЫБРАТЬ
тз.Документ КАК Документ
ПОМЕСТИТЬ ВТ
ИЗ
&т КАК тз
;
////////////////////////////////////////////////////////////////////////////////
ВЫБРАТЬ
СвязанныеДокументы.Документ1
ИЗ
ВТ КАК ВТ
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СвязанныеДокументы КАК СвязанныеДокументы
ПО ВТ.Документ = СвязанныеДокументы.Документ1
ОБЪЕДИНИТЬ
ВЫБРАТЬ
СвязанныеДокументы.Документ2
ИЗ
ВТ КАК ВТ
ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СвязанныеДокументы КАК СвязанныеДокументы
ПО ВТ.Документ = СвязанныеДокументы.Документ
11. Есть два регистра накопления остатков: Р1 Измерения: Номенклатура Ресурсы:Количество Р2 Измерения: Номенклатура Ресурсы: Цена
Цена хранится в виде приращения, что позволяет говорить, что остаток по регистру Р2 на дату дает цену на эту дату.
Задача - получить одним запросом продажи за период в разрезе номенклатуры.
Ответ нужен в виде текста запроса.
ПЛАН РЕШЕНИЯ:
Найти остатки Цены на каджую продажу за период:
- Найти продажи: Номенклатура/Количество/Дата втПродажи из рег.Р1
- Найти последнюю ДатаПоследнейЦены (в рег.Р2) на каждую дату продажи втПродажи и поместить в вт_ПродажиДатаЦены для всех Номенклатур
- По ДатаПоследнейЦены ( в ПродажиДатаЦены из Р1) найти Цену (по Период в Р2) , рассчитать суммуВ
ВЫБРАТЬ Продажи.Номенклатура КАК Номенклатура, Продажи.КоличествоРасход КАК КоличествоПродажа, Продажи.Период КАК ДатаПродажи, Продажи.ХарактеристикаНоменклатуры ПОМЕСТИТЬ вт_продажи ИЗ РегистрНакопления.ТоварыНаСкладах.Обороты(&начало, &окончание, день, ) КАК Продажи ИНДЕКСИРОВАТЬ ПО Номенклатура ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ вт_продажи.Номенклатура КАК Номенклатура, вт_продажи.ХарактеристикаНоменклатуры, вт_продажи.КоличествоПродажа, вт_продажи.ДатаПродажи, МАКСИМУМ(ТоварыНаСкладахОстаткиИОбороты.Период) КАК ДатаПоследнейЦены ПОМЕСТИТЬ вт_ДатаЦены ИЗ вт_продажи КАК вт_продажи ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыНаСкладах.ОстаткиИОбороты(&начало, &окончание, День, ДвиженияИГраницыПериода, ) КАК ТоварыНаСкладахОстаткиИОбороты ПО вт_продажи.Номенклатура = ТоварыНаСкладахОстаткиИОбороты.Номенклатура И вт_продажи.ХарактеристикаНоменклатуры = ТоварыНаСкладахОстаткиИОбороты.ХарактеристикаНоменклатуры И вт_продажи.ДатаПродажи >= ТоварыНаСкладахОстаткиИОбороты.Период СГРУППИРОВАТЬ ПО вт_продажи.ХарактеристикаНоменклатуры, вт_продажи.Номенклатура, вт_продажи.КоличествоПродажа, вт_продажи.ДатаПродажи ИНДЕКСИРОВАТЬ ПО Номенклатура ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ РАЗЛИЧНЫЕ вт_ДатаЦены.Номенклатура, вт_ДатаЦены.ХарактеристикаНоменклатуры, вт_ДатаЦены.КоличествоПродажа, вт_ДатаЦены.ДатаПродажи, вт_ДатаЦены.ДатаПоследнейЦены, ОстаткиЦенНаДату.КоличествоНачальныйОстаток КАК ЦенаТест, вт_ДатаЦены.КоличествоПродажа * ОстаткиЦенНаДату.КоличествоНачальныйОстаток КАК Сумма ИЗ вт_ДатаЦены КАК вт_ДатаЦены ЛЕВОЕ СОЕДИНЕНИЕ РегистрНакопления.ТоварыОрганизаций.ОстаткиИОбороты(&начало, &окончание, День, ДвиженияИГраницыПериода, ) КАК ОстаткиЦенНаДату ПО вт_ДатаЦены.Номенклатура = ОстаткиЦенНаДату.Номенклатура И вт_ДатаЦены.ХарактеристикаНоменклатуры = ОстаткиЦенНаДату.ХарактеристикаНоменклатуры ГДЕ ОстаткиЦенНаДату.КоличествоНачальныйОстаток <> 0
ВЫБРАТЬ Контрагенты.Ссылка КАК Контрагент, КонтактнаяИнформация.Вид КАК ВидКонтакта, КонтактнаяИнформация.Тип КАК ТипКонтакта, КонтактнаяИнформация.Представление КАК ПредставлениеКонтакта ИЗ Справочник.Контрагенты КАК Контрагенты ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.КонтактнаяИнформация КАК КонтактнаяИнформация ПО (КонтактнаяИнформация.Объект = Контрагенты.Ссылка) При группировке данных по контрагентам отчет выводится в виде
Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; НастройкиКомпоновки = КомпоновщикНастроек.ПолучитьНастройки(); КомпоновщикМакета = Новый КомпоновщикМакетаКомпоновкиДанных; МакетКомпоновки = КомпоновщикМакета.Выполнить(СхемаКомпоновкиДанных, НастройкиКомпоновки, ДанныеРасшифровки); ПроцессорКомпоновки = Новый ПроцессорКомпоновкиДанных; ПроцессорКомпоновки.Инициализировать(МакетКомпоновки, , ДанныеРасшифровки); ПроцессорВывода = Новый ПроцессорВыводаРезультатаКомпоновкиДанныхВТабличныйДокумент; ПроцессорВывода.УстановитьДокумент(ДокументРезультат); ПроцессорВывода.Вывести(ПроцессорКомпоновки); КоличествоСтрок = ДокументРезультат.ВысотаТаблицы; КоличествоКолонок = ДокументРезультат.ШиринаТаблицы; ФактАдрес = ""; Смещать = ТипСмещенияТабличногоДокумента.ПоВертикали; Для СтрокаДокумента = -КоличествоСтрок По 3 Цикл ОбластьАдрес = ДокументРезультат.Область(-СтрокаДокумента, 3); Если ОбластьАдрес.Текст = "Адрес" Тогда ОбластьАдрес.Текст = ФактАдрес; ФактАдрес = ""; КонецЕсли; ОбластьВидКонтакта = ДокументРезультат.Область(-СтрокаДокумента, 1); Если ОбластьВидКонтакта.Текст = "Фактический адрес контрагента" Тогда обл = ДокументРезультат.Область(-СтрокаДокумента, 3); ФактАдрес = обл.Текст; обл.Текст = ""; ОбластьВидКонтакта.Текст = ""; //ДокументРезультат.УдалитьОбласть("R"+(-СтрокаДокумента),Смещать); //ДокументРезультат.Область("R"+(-СтрокаДокумента)).ВысотаСтроки = 1; ДокументРезультат.Область("R"+(-СтрокаДокумента)).ВысотаСтроки = 1; КонецЕсли; КонецЦикла; КонецПроцедуры
Следующий запрос выводит в отчет, построенный на основе СКД, список авансовых отчетов
ВЫБРАТЬ
АвансовыйОтчет.Номер,
АвансовыйОтчет.Дата,
АвансовыйОтчет.СуммаДокумента
ИЗ
Документ.АвансовыйОтчет КАК АвансовыйОтчет
Как сделать чтобы номер выводился в отчет без лидирующих нулей? Создать на вкладке СКД "ВычисляемыеПоля" поле ПутьКДанным - Номер, Выражение - Вычислить(Номер1) Заголовок - Номер. встроенная функция Вычислить удалит лидирующие нули. Второй способ не совсем СКД, с помощью запроса:
ВЫБРАТЬ
РеализацияТоваровУслуг.Ссылка,
ВЫБОР
КОГДА НЕ ПОДСТРОКА(РеализацияТоваровУслуг.Номер, 1, 1) = "0"
ТОГДА ПОДСТРОКА(РеализацияТоваровУслуг.Номер, 1, 11)
КОГДА НЕ ПОДСТРОКА(РеализацияТоваровУслуг.Номер, 2, 1) = "0"
ТОГДА ПОДСТРОКА(РеализацияТоваровУслуг.Номер, 2, 10)
КОГДА НЕ ПОДСТРОКА(РеализацияТоваровУслуг.Номер, 3, 1) = "0"
ТОГДА ПОДСТРОКА(РеализацияТоваровУслуг.Номер, 3, 9)
КОГДА НЕ ПОДСТРОКА(РеализацияТоваровУслуг.Номер, 4, 1) = "0"
ТОГДА ПОДСТРОКА(РеализацияТоваровУслуг.Номер, 4, 8)
КОГДА НЕ ПОДСТРОКА(РеализацияТоваровУслуг.Номер, 5, 1) = "0"
ТОГДА ПОДСТРОКА(РеализацияТоваровУслуг.Номер, 5, 7)
КОГДА НЕ ПОДСТРОКА(РеализацияТоваровУслуг.Номер, 6, 1) = "0"
ТОГДА ПОДСТРОКА(РеализацияТоваровУслуг.Номер, 6, 6)
КОГДА НЕ ПОДСТРОКА(РеализацияТоваровУслуг.Номер, 7, 1) = "0"
ТОГДА ПОДСТРОКА(РеализацияТоваровУслуг.Номер, 7, 5)
КОГДА НЕ ПОДСТРОКА(РеализацияТоваровУслуг.Номер, 8, 1) = "0"
ТОГДА ПОДСТРОКА(РеализацияТоваровУслуг.Номер, 8, 4)
КОГДА НЕ ПОДСТРОКА(РеализацияТоваровУслуг.Номер, 9, 1) = "0"
ТОГДА ПОДСТРОКА(РеализацияТоваровУслуг.Номер, 9, 3)
КОГДА НЕ ПОДСТРОКА(РеализацияТоваровУслуг.Номер, 10, 1) = "0"
ТОГДА ПОДСТРОКА(РеализацияТоваровУслуг.Номер, 10, 2)
ИНАЧЕ ПОДСТРОКА(РеализацияТоваровУслуг.Номер, 11, 1)
КОНЕЦ КАК Номер
ИЗ
Документ.РеализацияТоваровУслуг КАК РеализацияТоваровУслуг
ГДЕ
РеализацияТоваровУслуг.Дата МЕЖДУ &начало И &окончание