Skip to content

Instantly share code, notes, and snippets.

@pallid
Last active July 17, 2020 18:28
Show Gist options
  • Save pallid/77246d5d0cd477888e3a26ce1fd2a0b7 to your computer and use it in GitHub Desktop.
Save pallid/77246d5d0cd477888e3a26ce1fd2a0b7 to your computer and use it in GitHub Desktop.
Тестовое задание

Задача 1

Имеется массив из n различных целых чисел от 0 до n. Массив не упорядочен. Необходимо за один цикл определить недостающее число. Привести код на встроенном языке 1С.

Ответ:

нМассив = Новый Массив;
нМассив.Добавить(0);
нМассив.Добавить(4);
нМассив.Добавить(3);
нМассив.Добавить(2);
нМассив.Добавить(1);
СуммаИмеющихся = 0;
СуммаВсех = 0;
Количество = нМассив.Количество();
Для Сч = 0 По Количество Цикл
    Если сч <  Количество Тогда
        СуммаИмеющихся = СуммаИмеющихся + нМассив[Сч];
    КонецЕсли;    
    СуммаВсех = СуммаВсех + Сч;
КонецЦикла;
НедостающееЧисло = СуммаВсех -  СуммаИмеющихся;
Сообщить("Недостающее число:" + Строка(НедостающееЧисло));

Задача 2.

В некоторой абстрактной базе существует справочник «Контрагенты». По требованию заказчика было решено внедрить в базу ведение статусов контрагентов. Для чего был создан независимый периодический регистр сведений «Статусы контрагентов». Измерение регистра: Контрагент. Ресурс: Статус. В базе контрагент фигурирует в документах поступление товаров и услуг. Напишите запрос, позволяющий получить выборку вида [Документ поступление товаров и услуг, Контрагент из документа, Актуальный статус контрагента из документа на дату документа].

Ответ:

ВЫБРАТЬ
    Поступления.Дата
    Поступления.Контрагент,
    СтатусыКонтрагентов.Статус
ИЗ
    Документ.ПоступлениеТоваровИУслуг КАК Поступления
        ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СтатусыКонтрагентов КАК СтатусыКонтрагентов
        ПО Поступления.Контрагент = СтатусыКонтрагентов.Контрагент
            И (СтатусыКонтрагентов.Период В
                (ВЫБРАТЬ МАКСИМУМ(Статусы.Период)
                ИЗ
                    РегистрСведений.СтатусыКонтрагентов КАК Статусы
                ГДЕ
                    Статусы.Период <= Поступления.Дата
                    И Статусы.Контрагент = Поступления.Контрагент
))

*Задача 3.

Имеется запрос вида:

ВЫБРАТЬ Номенклатура.Ссылка, Номенклатура.Наименование
ИЗ Справочник.Номенклатура КАК Номенклатура
УПОРЯДОЧИТЬ ПО Номенклатура.Наименование

Допишите запрос, чтобы помимо Ссылка и Наименование присутствовало поле НомерСтроки – счетчик строк выборки начиная с 1.

Ответ:

ВЫБРАТЬ
    Номенклатура.Ссылка, 
    Номенклатура.Наименование,
    КОЛИЧЕСТВО(НоменклатураДубль.Ссылка) КАК НомерСтроки
ИЗ
    Справочник.Сотрудники КАК Номенклатура
        ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.Сотрудники КАК НоменклатураДубль
        ПО Номенклатура.Ссылка >= НоменклатураДубль.Ссылка
СГРУППИРОВАТЬ ПО
    Номенклатура.Ссылка
    
УПОРЯДОЧИТЬ ПО Номенклатура.Наименование

Задача 4.

Требуется заполнить табличную часть товары данными по приходам привилегированных поставщиков за период. Укажите ошибки представленного решения, и способы их устранения.

Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| уатПартииТоваровНаСкладах.Номенклатура,
| уатПартииТоваровНаСкладах.Количество,
| уатПартииТоваровНаСкладах.Регистратор
|ИЗ
| РегистрНакопления.уатПартииТоваровНаСкладах КАК уатПартииТоваровНаСкладах
| ВНУТРЕННЕЕ СОЕДИНЕНИЕ (ВЫБРАТЬ
| уатПоступлениеТоваровУслугТовары.Номенклатура КАК Номенклатура
| ИЗ
| Документ.уатПоступлениеТоваровУслуг.Товары КАК уатПоступлениеТоваровУслугТовары
| ГДЕ
| уатПоступлениеТоваровУслугТовары.Ссылка.Контрагент В(&ПривелегированныеПоставщики)) КАК уатПоступлениеТоваровУслугТовары
| ПО уатПартииТоваровНаСкладах.Номенклатура = уатПоступлениеТоваровУслугТовары.Номенклатура
|ГДЕ
| уатПартииТоваровНаСкладах.ВидДвижения = &ВидДвижения
| И уатПартииТоваровНаСкладах.Период МЕЖДУ &НачПериод И &КонПериода";
Запрос.УстановитьПараметр("ПривелегированныеПоставщики", ПривелегированныеПоставщики);
Запрос.УстановитьПараметр("ВидДвижения", ВидДвиженияНакопления.Приход);
РезультатЗапроса = Запрос.Выполнить();
Выборка = РезультатЗапроса.Выбрать();
Пока Выборка.Следующий() Цикл
    СтрокаТоваров = Товары.Добавить();
    СтрокаТоваров.Номенклатура = Выборка.Номенклатура;
    СтрокаТоваров.Артикул = Выборка.Номенклатура.Артикул;
    СтрокаТоваров.Количество = Выборка.Количество;
    СтрокаТоваров.Сумма = Выборка.Количество * РегистрыСведений.ЦеныНоменклатуры.ПолучитьПоследнее(Выборка.Регистратор.Дата, Новый Структура("Номенклатура", Выборка.Номенклатура)).Цена;
КонецЦикла;

Ответ:

// Не установлен параметр по организации, скорей всего в уатПартииТоваровНаСкладах есть ресурс Организация
// Нет необходимости во вложенном запросе соединяться с тч документов, достаточно уатПартииТоваровНаСкладах.Регистратор ССЫЛКА Документ.РеализацияТоваровУслуг
// Так же необходимо добавить справочник номенклатуры ПО уатПартииТоваровНаСкладах.Номенклатура = Номенклатура.Ссылка, для вывода артикула в выбираемые поля
// Цену получить в запросе, аналогично как это делалось в Задаче 2
// Сумму считать формулой в выбираемом поле уатПартииТоваровНаСкладах.Количество * ЕСТЬNULL(ЦеныНоменклатуры.Цена, 0)
// В цикле обхода ЗаполнитьЗначениеСвойств(СтрокаТовары, Выборка)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment