Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Неназначенных незавершенных заказов: 2
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Войти | Зарегистрироваться )




>  Как можно получить значение реквизита?
Evgeniux
Отправлено: 06.11.20, 8:48


Молчаливый
*

Группа: Пользователи
Сообщений: 6
Регистрация: 01.08.20
Пользователь №: 70094


volodya1122 @ Вчера, 11:31 * ,

спасибо, разобрался. Но в таком виде не работает
Если Выборка.ЦельСборки = "некое значение" тогда

а работает в таком виде
Если ВРег (Выборка.ЦельСборки) = ВРег("некое значение") Тогда
  Форум: Программирование в 1С Предприятие 8.3 · Просмотр сообщения: #167991 · Ответов: 7 · Просмотров: 1136
 

>  Как можно получить значение реквизита?
Evgeniux
Отправлено: 04.11.20, 16:17


Молчаливый
*

Группа: Пользователи
Сообщений: 6
Регистрация: 01.08.20
Пользователь №: 70094


andreydv87 @ Сегодня, 14:31 * ,
да, ЦельСборки это реквизит документа СборкаПК (Документ.СборкаПК).

andreydv87 @ Сегодня, 14:31 * ,
"ВЫБРАТЬ
    |    СборкаПК.Дата,
    |    СборкаПК.Номер,
    |    СборкаПК.ЦельСборки,

ЦельСборки уже есть в запросе.
  Форум: Программирование в 1С Предприятие 8.3 · Просмотр сообщения: #167939 · Ответов: 7 · Просмотров: 1136
 

>  Как можно получить значение реквизита?
Evgeniux
Отправлено: 04.11.20, 13:07


Молчаливый
*

Группа: Пользователи
Сообщений: 6
Регистрация: 01.08.20
Пользователь №: 70094


Добрый день. Есть документ с комплектацией номенклатуры, при печати гарантийного талона из этого документа, в поле "срок гарантии" заносятся данные из константы (число 12). Срок гарантии зависит от целиСборки (реквизит документа).
ОбластьКомплектующие.Параметры.Гарантия = Константы.СрокГарантии.Получить();


Как можно получить значение реквизита ЦельСборки, чтобы на его основании выбирать срок гарантии?
Что-то наподобие:
Если значение реквизита ЦельСборки такое Тогда
берем данные из константы номер1
Иначе
берем данные из константы номер2

код процедуры привожу ниже

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

    ОбластьЗаголовок = Макет.ПолучитьОбласть("Заголовок");
    Шапка = Макет.ПолучитьОбласть("Шапка");
    ОбластьСобранныйПКШапка = Макет.ПолучитьОбласть("СобранныйПКШапка");
    ОбластьСПК = Макет.ПолучитьОбласть("СобранныйПК1");
    ОбластьСобранныйПК = Макет.ПолучитьОбласть("СобранныйПК");
    ОбластьКомплектующиеШапка = Макет.ПолучитьОбласть("КомплектующиеШапка");
    ОбластьКомплектующие = Макет.ПолучитьОбласть("Комплектующие");
    Подвал = Макет.ПолучитьОбласть("Подвал");

    ТабДок.Очистить();

    ВставлятьРазделительСтраниц = Ложь;
    Пока Выборка.Следующий() Цикл
        Если ВставлятьРазделительСтраниц Тогда
            ТабДок.ВывестиГоризонтальныйРазделительСтраниц();
        КонецЕсли;
ОбластьЗаголовок.Параметры.Заполнить(Выборка);

        ТабДок.Вывести(ОбластьЗаголовок);

        Шапка.Параметры.Заполнить(Выборка);
        
        ТабДок.Вывести(Шапка, Выборка.Уровень());

        ТабДок.Вывести(ОбластьСобранныйПКШапка);
        ВыборкаСобранныйПК = Выборка.СобранныйПК.Выбрать();
    

        Пока ВыборкаСобранныйПК.Следующий() Цикл
            ОбластьСобранныйПК.Параметры.Заполнить(ВыборкаСобранныйПК);
            ОбластьСПК.Параметры.Заполнить(ВыборкаСобранныйПК);
            ТабДок.Вывести(ОбластьСобранныйПК, ВыборкаСобранныйПК.Уровень());
            ТабДок.Вывести(ОбластьСПК, ВыборкаСобранныйПК.Уровень());

        КонецЦикла;
        

        ТабДок.Вывести(ОбластьКомплектующиеШапка);
        ВыборкаКомплектующие = Выборка.Комплектующие.Выбрать();
        Пока ВыборкаКомплектующие.Следующий() Цикл
            ОбластьКомплектующие.Параметры.Заполнить(ВыборкаКомплектующие);
            
            
            // сюда добавить условие выбора константы со сроком гарантии
            
            
    ////        Если Выборка.НайтиСледующий("Тендер, ") Тогда
    ////                    ОбластьКомплектующие.Параметры.Гарантия = Константы.СрокГарантииТендер.Получить();
    ////                Иначе
    ////                 ОбластьКомплектующие.Параметры.Гарантия = Константы.СрокГарантии.Получить();
    ////
    ////            КонецЕсли;
    ОбластьКомплектующие.Параметры.Гарантия = Константы.СрокГарантии.Получить();
                         ТабДок.Вывести(ОбластьКомплектующие, ВыборкаКомплектующие.Уровень());
            
        КонецЦикла;

        Подвал.Параметры.Заполнить(Выборка);
        ТабДок.Вывести(Подвал);

        ВставлятьРазделительСтраниц = Истина;
    КонецЦикла;
    //}}
КонецПроцедуры

  Форум: Программирование в 1С Предприятие 8.3 · Просмотр сообщения: #167935 · Ответов: 7 · Просмотров: 1136
 

>  Непонятное поведение контроля остатков
Evgeniux
Отправлено: 10.09.20, 21:02


Молчаливый
*

Группа: Пользователи
Сообщений: 6
Регистрация: 01.08.20
Пользователь №: 70094


MATEVI @ Сегодня, 19:23 * ,
Спасибо, исправил, но эта ошибка относилась больше к выводу сообщения пользователю. Если раньше выводилось, что просто чего-то не хватает, то сейчас выводится конкретная позиция.
На всякий случай привожу весь код процедуры:
Процедура ОбработкаПроведения(Отказ, Режим)
    //{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
    // Данный фрагмент построен конструктором.
    // При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!

    // регистр ОстаткиТоваров Расход
//    Движения.ОстаткиТоваров.Записывать = Истина;
    
    //  1. Получение запросом данных документа
    Запрос = Новый Запрос;
    Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
      Запрос.Текст = "ВЫБРАТЬ
        |   Товары.Номенклатура КАК Номенклатура,
        |   СУММА(Товары.Количество) КАК Количество
        |ПОМЕСТИТЬ Товары
        |ИЗ
        |   Документ.СборкаПК.Комплектующие КАК Товары
        |ГДЕ
        |   Товары.Ссылка = &Ссылка
        |
        |СГРУППИРОВАТЬ ПО
        |   Товары.Номенклатура
        |
        |ИНДЕКСИРОВАТЬ ПО
        |   Номенклатура
        |;
        |
        |////////////////////////////////////////////////////////////////////////////////
        |ВЫБРАТЬ
        |   Товары.Номенклатура КАК Номенклатура,
        |   Товары.Количество КАК Количество
        |ИЗ
        |   Товары КАК Товары";
    
     Запрос.УстановитьПараметр("Ссылка", Ссылка);
    РезультатЗапроса = Запрос.Выполнить();
  
    //  2. Формирование движений-расход регистра
    Движения.ОстаткиТоваров.Очистить();
    ВыборкаТовары = РезультатЗапроса.Выбрать();
    Пока ВыборкаТовары.Следующий() Цикл
        Движение = Движения.ОстаткиТоваров.ДобавитьРасход();
        Движение.Период = Дата;
        Движение.Номенклатура = ВыборкаТовары.Номенклатура;
        Движение.Количество = ВыборкаТовары.Количество;
    КонецЦикла;
  
    //  3. Запись движений в БД
    Движения.ОстаткиТоваров.Записывать = Истина;
    Движения.Записать();
  
    //  4. Запрос, получающий отрицательные остатки из регистра
    Запрос.Текст =
        "ВЫБРАТЬ
        |   Остатки.Номенклатура КАК Номенклатура,
        |   ПРЕДСТАВЛЕНИЕССЫЛКИ(Остатки.Номенклатура) КАК НоменклатураПредставление,
        |   -Остатки.КоличествоОстаток КАК Дефицит
        |ИЗ
        |   РегистрНакопления.ОстаткиТоваров.Остатки(
        |           &МоментВремени,
        |           Номенклатура В
        |               (ВЫБРАТЬ
        |                   Товары.Номенклатура КАК Номенклатура
        |               ИЗ
        |                   Товары КАК Товары)) КАК Остатки
        |ГДЕ
        |   Остатки.КоличествоОстаток < 0";
  
    ГраницаКонтроля = Новый Граница(МоментВремени(), ВидГраницы.Включая);
    Запрос.УстановитьПараметр("МоментВремени", ГраницаКонтроля);
    РезультатЗапроса = Запрос.Выполнить();
  
    //  5. Вывод сообщений о недостатке товаров
    Если Не РезультатЗапроса.Пустой() Тогда
        Отказ = Истина;
        ВыборкаОшибки = РезультатЗапроса.Выбрать();
        Пока ВыборкаОшибки.Следующий() Цикл
            Сообщение = Новый СообщениеПользователю;
            Сообщение.Текст = "Товара "+ВыборкаОшибки.НоменклатураПредставление+" недостаточно в количестве "+ВыборкаОшибки.Дефицит+" шт.";
            Сообщение.Сообщить();
        КонецЦикла;
    КонецЕсли;
    
    Для Каждого ТекСтрокаКомплектующие Из Комплектующие Цикл
        Движение = Движения.ОстаткиТоваров.Добавить();
        Движение.ВидДвижения = ВидДвиженияНакопления.Расход;
        Движение.Период = Дата;
        Движение.Номенклатура = ТекСтрокаКомплектующие.Номенклатура;
        Движение.Склад = Склад;
        Движение.Серийник = ТекСтрокаКомплектующие.СерийныйНомер;
        Движение.Количество = ТекСтрокаКомплектующие.Количество;
    КонецЦикла;

    // регистр ОстаткиТоваров Приход
    Движения.ОстаткиТоваров.Записывать = Истина;
    Для Каждого ТекСтрокаСобранныйПК Из СобранныйПК Цикл
        Движение = Движения.ОстаткиТоваров.Добавить();
        Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
        Движение.Период = Дата;
        Движение.Номенклатура = ТекСтрокаСобранныйПК.Номенклатура;
        Движение.Склад = Склад;
        Движение.Серийник = ТекСтрокаСобранныйПК.Серия;
        Движение.Количество = ТекСтрокаСобранныйПК.Количество;
    КонецЦикла;
    
    // регистр ОтветственныеЛица Приход
    Движения.ОтветственныеЛица.Записывать = Истина;
    Для Каждого ТекСтрокаОтветственныеЛица Из СНТ Цикл
        Движение = Движения.ОтветственныеЛица.Добавить();
        Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
        Движение.Период = Дата;
        Движение.Сборщик = ТекСтрокаОтветственныеЛица.Сборка;
        Движение.Настройщик = ТекСтрокаОтветственныеЛица.Настройка;
Движение.Тестировщик = ТекСтрокаОтветственныеЛица.Тесты;
Движение.Количество = ТекСтрокаОтветственныеЛица.СборкаКоличество;
Движение.НастройкаКоличество = ТекСтрокаОтветственныеЛица.НастройкаКоличество;
Движение.ТестКоличество = ТекСтрокаОтветственныеЛица.ТестыКоличество;
        
        
КонецЦикла;
    



    //}}__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
КонецПроцедуры
  Форум: Программирование в 1С Предприятие 8.3 · Просмотр сообщения: #166325 · Ответов: 2 · Просмотров: 1444
 

>  Непонятное поведение контроля остатков
Evgeniux
Отправлено: 10.09.20, 15:37


Молчаливый
*

Группа: Пользователи
Сообщений: 6
Регистрация: 01.08.20
Пользователь №: 70094


Добрый день. Делаю контроль остатков и столкнулся с непонятностью, допустим нужно укомплектовать 4 номенклатуры системных блоков, 2 из них комплектуются нормально, следущие два вылетают с ошибкой, хотя остатки комплектующих в норме.
вот отрывок кода с остатками:
//  1. Получение запросом данных документа
    Запрос = Новый Запрос;
    Запрос.МенеджерВременныхТаблиц = Новый МенеджерВременныхТаблиц;
      Запрос.Текст = "ВЫБРАТЬ
        |   Товары.Номенклатура КАК Номенклатура,
        |   СУММА(Товары.Количество) КАК Количество
        |ПОМЕСТИТЬ Товары
        |ИЗ
        |   Документ.СборкаПК.Комплектующие КАК Товары
        |ГДЕ
        |   Товары.Ссылка = &Ссылка
        |
        |СГРУППИРОВАТЬ ПО
        |   Товары.Номенклатура
        |
        |ИНДЕКСИРОВАТЬ ПО
        |   Номенклатура
        |;
        |
        |////////////////////////////////////////////////////////////////////////////////
        |ВЫБРАТЬ
        |   Товары.Номенклатура КАК Номенклатура,
        |   Товары.Количество КАК Количество
        |ИЗ
        |   Товары КАК Товары";
    
     Запрос.УстановитьПараметр("Ссылка", Ссылка);
    РезультатЗапроса = Запрос.Выполнить();
  
    //  2. Формирование движений-расход регистра
    Движения.ОстаткиТоваров.Очистить();
    ВыборкаТовары = РезультатЗапроса.Выбрать();
    Пока ВыборкаТовары.Следующий() Цикл
        Движение = Движения.ОстаткиТоваров.ДобавитьРасход();
        Движение.Период = Дата;
        Движение.Номенклатура = ВыборкаТовары.Номенклатура;
        Движение.Количество = ВыборкаТовары.Количество;
    КонецЦикла;
  
    //  3. Запись движений в БД
    Движения.ОстаткиТоваров.Записывать = Истина;
    Движения.Записать();
  
    //  4. Запрос, получающий отрицательные остатки из регистра
    Запрос.Текст =
        "ВЫБРАТЬ
        |   Остатки.Номенклатура КАК Номенклатура,
        |   ПРЕДСТАВЛЕНИЕССЫЛКИ(Остатки.Номенклатура) КАК НоменклатураПредставление,
        |   -Остатки.КоличествоОстаток КАК Дефецит
        |ИЗ
        |   РегистрНакопления.ОстаткиТоваров.Остатки(
        |           &МоментВремени,
        |           Номенклатура В
        |               (ВЫБРАТЬ
        |                   Товары.Номенклатура КАК Номенклатура
        |               ИЗ
        |                   Товары КАК Товары)) КАК Остатки
        |ГДЕ
        |   Остатки.КоличествоОстаток < 0";
  
    ГраницаКонтроля = Новый Граница(МоментВремени(), ВидГраницы.Включая);
    Запрос.УстановитьПараметр("МоментВремени", ГраницаКонтроля);
    РезультатЗапроса = Запрос.Выполнить();
  
    //  5. Вывод сообщений о недостатке товаров
    Если Не РезультатЗапроса.Пустой() Тогда
        Отказ = Истина;
        ВыборкаОшибки = РезультатЗапроса.Выбрать();
        Пока ВыборкаОшибки.Следующий() Цикл
            Сообщение = Новый СообщениеПользователю;
            Сообщение.Текст = "Товара "+ВыборкаОшибки.НоменклатураПредставление+" недостаточно в количестве "+ВыборкаОшибки.Дефицит+" шт.";
            Сообщение.Сообщить();
        КонецЦикла;
    КонецЕсли;


ошибка
Ошибка при выполнении обработчика - 'ОбработкаПроведения'
по причине:
{Документ.СборкаПК.МодульОбъекта(80)}: Поле объекта не обнаружено (Дефицит)
            Сообщение.Текст = "Товара "+ВыборкаОшибки.НоменклатураПредставление+" недостаточно в количестве "+ВыборкаОшибки.Дефицит+" шт.";
  Форум: Программирование в 1С Предприятие 8.3 · Просмотр сообщения: #166318 · Ответов: 2 · Просмотров: 1444
 

>  Нужен совет по документу и данным в нем.
Evgeniux
Отправлено: 22.08.20, 23:39


Молчаливый
*

Группа: Пользователи
Сообщений: 6
Регистрация: 01.08.20
Пользователь №: 70094


Добрый вечер. Нужен совет от бывалых по организации данных и их учете в документе. Конфигурация самописная.
Что требуется от 1С: поступление товара (комплектующие для ПК, учитываются серийные номера), дальше комплектация номенклатуры (из комплектующих должен получиться системный блок), печать гарантийного талона. Отчеты: остатки товаров на складе, учет операций по сборке, настройке, тестам.
Что уже сделано:
- приходование товаров (пока криво, в плане юзабилити, но в целом свою функцию выполняет).
- комплектация номенклатуры.
- списание товара в собранном виде на склад.
- печать гарантийного талона.

На комплектации подробнее. Есть четыре табличные части:
1. Комплектующие для списания: заносятся номенклатура, количество, серийный номер, примечание.
2. Собранный ПК для создания. Наименование (номенклатура, серийный номер, количество 1)
3. Табличная часть с результатами тестов.
4. Табличная часть для учета ответственных лиц (собрал ПК такой-то сотрудник и количество, настроил второй и количество, протестировал третий и количество).

Все работает, ведется контроль остатков.

Возникла необходимость учета проведенных операций (сборка, настройка, тесты). Здесь возник затык. Делаю так: создал регистр накопления для учета этих операций. Данные в регистр вносятся.
А вот получить их в нормальном виде пока не могу (банальная нехватка знаний).
В регистре накопления есть такие измерения: сборщик, настройщик, тестировщик. Ресурсы: количествоСобранныхПК, количествоНастроенныхПК, количествоПротестированныхПК.

Нужен совет на счет документа "комплектация номенклатуры". Где лучше хранить данные об операциях сборка, настройка, тесты. В табличной части или реквизитах: Сборщик (заполняется из справочника Сотрудники), Настройщик (тоже самое), Тестировщик (тоже самое)?

  Форум: Программирование в 1С Предприятие 8.3 · Просмотр сообщения: #165845 · Ответов: 1 · Просмотров: 843
 


Новые сообщения  Открытая тема (есть новые ответы)
Опрос  Опрос (есть новые голоса)
Нет новых сообщений  Открытая тема (нет новых ответов)
Нет новых голосов  Опрос (нет новых голосов)
Популярная тема  Горячая тема (есть новые ответы)
Закрыта  Закрытая тема
Нет новых  Горячая тема (нет новых ответов) Перемещена  Тема перемещена
 

RSS Текстовая версия Сейчас: 25.04.24, 22:33
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!