Для привязки менеджеров к клиентам создаю регистр сведений «Менеджеры», Измерение – клиент- тип справочник Контрагенты, ресурс – пользователь, тип – справочник Пользователи.
В документе «Контакт с клиентом » создаю реквизит «Менеджер»., добавляю код:
в форме документа:
Запрос = Новый запрос;
ЗАпрос.Текст = "ВЫБРАТЬ
| Менеджеры.Пользователь,
| Менеджеры.Клиент
|ИЗ
| РегистрСведений.Менеджеры КАК Менеджеры
|ГДЕ
| Менеджеры.Пользователь = &Пользователь
| И Менеджеры.Клиент = &Клиент";
Запрос.УстановитьПараметр("Пользователь",Менеджер);
Запрос.УстановитьПараметр("Клиент",Контрагент);
Если НЕ Запрос.Выполнить().Выбрать().Следующий() Тогда
ЗаписьМенеджера = РегистрыСведений.Менеджеры.СоздатьМенеджерЗаписи();
ЗаписьМенеджера.Клиент = Контрагент;
ЗаписьМенеджера.Пользователь = Менеджер;
Попытка
ЗаписьМенеджера.Записать(Ложь);
Исключение
Сообщ = Новый СообщениеПользователю();
Сообщ.Текст = "С клиентом "+ Контрагент +" уже работает другой менеджер!";
Отказ = Истина;
Сообщ.Сообщить();
КонецПопытки;
КонецЕсли;
КонецПроцедуры
Для хранения цен на товары создаю регистр сведений “ЦеныНоменклатуры”,
измерения : Тип цен(Справочник “Типы цен”), Номенклатура, Измерение – цена.
В документах отгрузки и закупки создаю реквизит “ТипЦен”, для удобства
реализую в форме следующий код:
Если ВыборкаДетальныеЗаписи.Следующий() Тогда
Возврат ВыборкаДетальныеЗаписи.Ссылка;
Иначе
Возврат Справочники.ЕдиницыИзмеренияНоменклатуры.ПустаяСсылка();
КонецЕсли;
КонецФункции // ПолучитьЕдиницуИзмерения()
&НаСервере
Функция ПолучитьЦенуНоменклатурыНаСервере(Номенклатура)
Возврат ЗаполнениеДокументовСервер.ПолучитьЦенуНоменклатуры(Номенклатура,Объект.Дата, объект.ТипЦен);
КонецФункции
&НаСервере
Функция ПриИзмененииСуммыСервере(Цена, Количество, Сумма)
Возврат ЗаполнениеДокументовСервер.ПересчитатьВЗависимостиОтСуммы(Цена, Количество, Сумма);
КонецФункции
В общем модуле:
Функция ПолучитьЦенуНоменклатуры(Номенклатура, Дата, ТипЦены) Экспорт
ЗАпрос = Новый Запрос();
Запрос.Текст = "ВЫБРАТЬ
| ЦеныНоменклатурыСрезПоследних.Цена
|ИЗ
| РегистрСведений.ЦеныНоменклатуры.СрезПоследних(
| &Дата,
| ТипЦен = &ТипЦен
| И Номенклатура = &Номенклатура) КАК ЦеныНоменклатурыСрезПоследних";
Запрос.УстановитьПараметр("Дата",Дата);
Запрос.УстановитьПараметр("ТипЦен",ТипЦены);
Запрос.УстановитьПараметр("Номенклатура",Номенклатура);
Результат = ЗАпрос.Выполнить().Выбрать();
Если Результат.Следующий() Тогда
Возврат Результат.Цена
Иначе
Возврат 0 ;
КонецЕсли;
КонецФункции
Функция ПересчитатьВЗависимостиОтСуммы(Цена, Количество, Сумма) Экспорт
СтруктураСтроки = Новый Структура;
Если Константы.ПриИзмененииСуммыПересчитыватьЦену.Получить() Тогда
СтруктураСтроки.Вставить("Цена", ?(Количество = 0,0,Сумма /Количество));
СтруктураСтроки.Вставить("Количество",Количество);
Функция ПересчитатьСумму(Цена, Количество) Экспорт
Возврат Цена*Количество;
КонецФункции
Создаю регистр накопления “Остатки товаров”, измерения:
Номенклатура, Качество, Единица измерения,
ресурс количество.
Конструктором движений по этому регистру создаю обработку проведения документа прихода:
Процедура ОбработкаПроведения(Отказ, Режим)
//{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
// Данный фрагмент построен конструктором.
// При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
// регистр ОстаткиТоваров Приход
Движения.ОстаткиТоваров.Записывать = Истина;
Для Каждого ТекСтрокаТовары Из Товары Цикл
Движение = Движения.ОстаткиТоваров.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
Движение.Период = Дата;
Движение.Номенклатура = ТекСтрокаТовары.Номенклатура;
Движение.Качество = ТекСтрокаТовары.Качество;
Движение.ЕдиницаИзмерения = ТекСтрокаТовары.Номенклатура.БазоваяЕдиница;
КоэффициентПересчетаВБазовую = ПересчитатьВБазовуюЕдиницу(ТекСтрокаТовары.Номенклатура, ТекСтрокаТовары.Номенклатура.БазоваяЕдиница, ТекСтрокаТовары.ЕдиницаИзмерения);
Движение.Количество = ТекСтрокаТовары.Количество*КоэффициентПересчетаВБазовую;
КонецЦикла;
КонецПроцедуры
Функция ПересчитатьВБазовуюЕдиницу(Номенклатура,БазЕдИзм, ЕдИзм)
Если Не БазЕдИзм = ЕдИзм Тогда
Возврат ЕдИзм.К;
Иначе
Возврат 1 ;
КонецЕсли;
КонецФункции
Создаю регистр накопления “Закупки”, измерения Поставщик, Товар, Качество, Ресурсы Количество, Стоимость.
Проверка запрета изменения базовой единицы в модуле формы элемента справочника “Номенклатура” :
&НаСервере
Функция РазрешитьИзменениеБазовойЕдиницы()
Номенклатура = Объект.Ссылка;
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| ОстаткиТоваровОбороты.КоличествоОборот
|ИЗ
| РегистрНакопления.ОстаткиТоваров.Обороты(
| ,
| ,
| ,
| Номенклатура = &Номенклатура
| И ЕдиницаИзмерения = &ЕдиницаИзмерения) КАК ОстаткиТоваровОбороты";
Запрос.УстановитьПараметр("Номенклатура", Номенклатура);
Запрос.УстановитьПараметр("ЕдиницаИзмерения",Номенклатура.БазоваяЕдиница);
Если Запрос.Выполнить().Пустой() Тогда
Возврат Ложь;
Иначе
Возврат Истина;
КонецЕсли;
КонецФункции
&НаКлиенте
Процедура ПередЗаписью(Отказ, ТекущийОбъект, ПараметрыЗаписи)
Отказ = РазрешитьИзменениеБазовойЕдиницы();
Если Отказ Тогда
Сообщить("Изменить базовую единицу нельзя, так как она уже использована в документах!");
КонецЕсли;
КонецПроцедуры
Создаю журнал документов “Документы закупки”. Для заполнения графы сумма в документах Потупление товаров и Авансовый отчет создаю реквизит “Сумма документа” и в модуле этих объектов добавляю код:
Добрый день!
Нас запутал заголовок вашего письма: “Конвертация данных: объявляем перерыв”
Вам по ошибке выслали инструкции по получению дз по Конвертации данных.
Сейчас вам отправят решения по Базовому курсу.
Вход
Важно!
Для новых покупателей Базового курса - с чего начать
...........................................................
Все контакты Саппорта Spec8.ru
...........................................................
Как задавать вопросы по материалам курса и ДЗ
...........................................................
Что такое Мастер-группа
...........................................................
Все материалы этого сайта являются составной частью Базового / Продвинутого курсов по программированию - и являются объектами авторского и имущественного права.
Любое их распространение без письменного согласования с авторами запрещено.
Для привязки менеджеров к клиентам создаю регистр сведений «Менеджеры», Измерение – клиент- тип справочник Контрагенты, ресурс – пользователь, тип – справочник Пользователи.
В документе «Контакт с клиентом » создаю реквизит «Менеджер»., добавляю код:
в форме документа:
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Объект.Менеджер = ОбщиеФункцииСервер.СинхронизацияПользователей();
КонецПроцедуры
В модуле документа:
Запрос = Новый запрос;
ЗАпрос.Текст = "ВЫБРАТЬ
| Менеджеры.Пользователь,
| Менеджеры.Клиент
|ИЗ
| РегистрСведений.Менеджеры КАК Менеджеры
|ГДЕ
| Менеджеры.Пользователь = &Пользователь
| И Менеджеры.Клиент = &Клиент";
Запрос.УстановитьПараметр("Пользователь",Менеджер);
Запрос.УстановитьПараметр("Клиент",Контрагент);
Если НЕ Запрос.Выполнить().Выбрать().Следующий() Тогда
ЗаписьМенеджера = РегистрыСведений.Менеджеры.СоздатьМенеджерЗаписи();
ЗаписьМенеджера.Клиент = Контрагент;
ЗаписьМенеджера.Пользователь = Менеджер;
Попытка
ЗаписьМенеджера.Записать(Ложь);
Исключение
Сообщ = Новый СообщениеПользователю();
Сообщ.Текст = "С клиентом "+ Контрагент +" уже работает другой менеджер!";
Отказ = Истина;
Сообщ.Сообщить();
КонецПопытки;
КонецЕсли;
КонецПроцедуры
Для хранения цен на товары создаю регистр сведений “ЦеныНоменклатуры”,
измерения : Тип цен(Справочник “Типы цен”), Номенклатура, Измерение – цена.
В документах отгрузки и закупки создаю реквизит “ТипЦен”, для удобства
реализую в форме следующий код:
Процедура ТоварыНоменклатураПриИзменении(Элемент)
ТД = Элементы.Товары.ТекущиеДанные;
ТД.ЕдиницаИзмерения = ПолучитьЕдиницуИзмерения(ТД.Номенклатура);
ТД.Цена = ПолучитьЦенуНоменклатурыНаСервере(ТД.Номенклатура);
Тд.Сумма = ОбщиеФункцииКлиент.ПересчитатьСумму(ТД.Цена, ТД.Количество);
КонецПроцедуры
&НаСервереБезКонтекста
Функция ПолучитьЕдиницуИзмерения(Товар)
Запрос = Новый Запрос;
Запрос.Текст =
"ВЫБРАТЬ
| ЕдиницыИзмеренияНоменклатуры.Ссылка
|ИЗ
| Справочник.ЕдиницыИзмеренияНоменклатуры КАК ЕдиницыИзмеренияНоменклатуры
|ГДЕ
| ЕдиницыИзмеренияНоменклатуры.Владелец = &Товар
| И ЕдиницыИзмеренияНоменклатуры.ЕдиницаПоКлассификатору = &ЕдиницаПоКлассификатору
| И (НЕ ЕдиницыИзмеренияНоменклатуры.ПометкаУдаления)";
Запрос.УстановитьПараметр("ЕдиницаПоКлассификатору", Товар.БазоваяЕдиница);
Запрос.УстановитьПараметр("Товар", Товар);
Результат = Запрос.Выполнить();
ВыборкаДетальныеЗаписи = Результат.Выбрать();
Если ВыборкаДетальныеЗаписи.Следующий() Тогда
Возврат ВыборкаДетальныеЗаписи.Ссылка;
Иначе
Возврат Справочники.ЕдиницыИзмеренияНоменклатуры.ПустаяСсылка();
КонецЕсли;
КонецФункции // ПолучитьЕдиницуИзмерения()
&НаСервере
Функция ПолучитьЦенуНоменклатурыНаСервере(Номенклатура)
Возврат ЗаполнениеДокументовСервер.ПолучитьЦенуНоменклатуры(Номенклатура,Объект.Дата, объект.ТипЦен);
КонецФункции
&НаКлиенте
Процедура ТоварыКоличествоПриИзменении(Элемент)
ТД = Элементы.Товары.ТекущиеДанные;
Тд.Сумма = ОбщиеФункцииКлиент.ПересчитатьСумму(ТД.Цена, ТД.Количество);
КонецПроцедуры
&НаКлиенте
Процедура ТоварыЦенаПриИзменении(Элемент)
ТД = Элементы.Товары.ТекущиеДанные;
Тд.Сумма = ОбщиеФункцииКлиент.ПересчитатьСумму(ТД.Цена, ТД.Количество);
КонецПроцедуры
&НаКлиенте
Процедура ТоварыСуммаПриИзменении(Элемент)
ТД = Элементы.Товары.ТекущиеДанные;
СтруктураЦеныИКоличества = ПриИзмененииСуммыСервере(ТД.Цена, ТД.Количество, ТД.Сумма);
ТД.Цена = СтруктураЦеныИКоличества.Цена;
ТД.Количество = СтруктураЦеныИКоличества.Количество;
КонецПроцедуры
&НаСервере
Функция ПриИзмененииСуммыСервере(Цена, Количество, Сумма)
Возврат ЗаполнениеДокументовСервер.ПересчитатьВЗависимостиОтСуммы(Цена, Количество, Сумма);
КонецФункции
В общем модуле:
ЗАпрос = Новый Запрос();
Запрос.Текст = "ВЫБРАТЬ
| ЦеныНоменклатурыСрезПоследних.Цена
|ИЗ
| РегистрСведений.ЦеныНоменклатуры.СрезПоследних(
| &Дата,
| ТипЦен = &ТипЦен
| И Номенклатура = &Номенклатура) КАК ЦеныНоменклатурыСрезПоследних";
Запрос.УстановитьПараметр("Дата",Дата);
Запрос.УстановитьПараметр("ТипЦен",ТипЦены);
Запрос.УстановитьПараметр("Номенклатура",Номенклатура);
Результат = ЗАпрос.Выполнить().Выбрать();
Если Результат.Следующий() Тогда
Возврат Результат.Цена
Иначе
Возврат 0 ;
КонецЕсли;
КонецФункции
Функция ПересчитатьВЗависимостиОтСуммы(Цена, Количество, Сумма) Экспорт
СтруктураСтроки = Новый Структура;
Если Константы.ПриИзмененииСуммыПересчитыватьЦену.Получить() Тогда
СтруктураСтроки.Вставить("Цена", ?(Количество = 0,0,Сумма /Количество));
СтруктураСтроки.Вставить("Количество",Количество);
Возврат СтруктураСтроки;
Иначе
СтруктураСтроки.Вставить("Количество", ?(Цена = 0,0,Сумма /Цена));
СтруктураСтроки.Вставить("Цена",Цена);
Возврат СтруктураСтроки;
КонецЕсли;
КонецФункции
Функция ПересчитатьСумму(Цена, Количество) Экспорт
Возврат Цена*Количество;
КонецФункции
Создаю регистр накопления “Остатки товаров”, измерения:
Номенклатура, Качество, Единица измерения,
ресурс количество.
Конструктором движений по этому регистру создаю обработку проведения документа прихода:
//{{__КОНСТРУКТОР_ДВИЖЕНИЙ_РЕГИСТРОВ
// Данный фрагмент построен конструктором.
// При повторном использовании конструктора, внесенные вручную изменения будут утеряны!!!
// регистр ОстаткиТоваров Приход
Движения.ОстаткиТоваров.Записывать = Истина;
Для Каждого ТекСтрокаТовары Из Товары Цикл
Движение = Движения.ОстаткиТоваров.Добавить();
Движение.ВидДвижения = ВидДвиженияНакопления.Приход;
Движение.Период = Дата;
Движение.Номенклатура = ТекСтрокаТовары.Номенклатура;
Движение.Качество = ТекСтрокаТовары.Качество;
Движение.ЕдиницаИзмерения = ТекСтрокаТовары.Номенклатура.БазоваяЕдиница;
КоэффициентПересчетаВБазовую = ПересчитатьВБазовуюЕдиницу(ТекСтрокаТовары.Номенклатура, ТекСтрокаТовары.Номенклатура.БазоваяЕдиница, ТекСтрокаТовары.ЕдиницаИзмерения);
Движение.Количество = ТекСтрокаТовары.Количество*КоэффициентПересчетаВБазовую;
КонецЦикла;
КонецПроцедуры
Функция ПересчитатьВБазовуюЕдиницу(Номенклатура,БазЕдИзм, ЕдИзм)
Если Не БазЕдИзм = ЕдИзм Тогда
Возврат ЕдИзм.К;
Иначе
Возврат 1 ;
КонецЕсли;
КонецФункции
Создаю регистр накопления “Закупки”, измерения Поставщик, Товар, Качество, Ресурсы Количество, Стоимость.
Проверка запрета изменения базовой единицы в модуле формы элемента справочника “Номенклатура” :
Функция РазрешитьИзменениеБазовойЕдиницы()
Номенклатура = Объект.Ссылка;
Запрос = Новый Запрос;
Запрос.Текст = "ВЫБРАТЬ
| ОстаткиТоваровОбороты.КоличествоОборот
|ИЗ
| РегистрНакопления.ОстаткиТоваров.Обороты(
| ,
| ,
| ,
| Номенклатура = &Номенклатура
| И ЕдиницаИзмерения = &ЕдиницаИзмерения) КАК ОстаткиТоваровОбороты";
Запрос.УстановитьПараметр("Номенклатура", Номенклатура);
Запрос.УстановитьПараметр("ЕдиницаИзмерения",Номенклатура.БазоваяЕдиница);
Если Запрос.Выполнить().Пустой() Тогда
Возврат Ложь;
Иначе
Возврат Истина;
КонецЕсли;
КонецФункции
&НаКлиенте
Процедура ПередЗаписью(Отказ, ТекущийОбъект, ПараметрыЗаписи)
Отказ = РазрешитьИзменениеБазовойЕдиницы();
Если Отказ Тогда
Сообщить("Изменить базовую единицу нельзя, так как она уже использована в документах!");
КонецЕсли;
КонецПроцедуры
Создаю журнал документов “Документы закупки”. Для заполнения графы сумма в документах Потупление товаров и Авансовый отчет создаю реквизит “Сумма документа” и в модуле этих объектов добавляю код:
СуммаДокумента = Товары.Итог("Сумма");
КонецПроцедуры
Здравствуйте, не удается получить эталонные решения через переписку по почте. Откройте пожалуйста здесь. (я отстал от группы)
Добрый день!
Нас запутал заголовок вашего письма: “Конвертация данных: объявляем перерыв”
Вам по ошибке выслали инструкции по получению дз по Конвертации данных.
Сейчас вам отправят решения по Базовому курсу.