-
Кто решил?
-
1. В РС ПриоритетыСкладов про периодичность ничего не сказано, скорее ее нет, чем как у тебя месяц.
2. В том же РС тип поля Приоритет - число, а не строка
3. Просто совет в обработке ПередЗаписью Приходной, проверяй указан ли приоритет для склада, куда приходуется товар и если не указан то ошибка. Просто так можно избежать ненужных ситуаций если для складов не заданы приоритеты как будет списываться товар, да функцию естьНул не надо использовать будет в запросе Расходной. Ну это кому как..
4. Сумму из расходной выбирать не нужно, она не используется.
5. докТч не соединяешь с регистром ОстаткиНоменклатуры.
6. Если НЕ ЭтоНовый() Тогда
Движения.ОстаткиНоменклатуры.Записать();
КонецЕсли;
Зачем это? =)
7. В 8.2 использовать нужно вместо Сообщить() - СообщениеПользователю
8. После того как ты убедился что ВыборкаИтоги.Количество > Выборка.КоличествоОстаток и установил Отказ истина
-нужно написать Если Отказ Тогда продолжить КонецЕсли
-Вот это уже не нужно будет
Если ВыборкаДетальныеЗаписи.КоличествоОстаток=0 Тогда
СуммаДвижения=0;
Иначе
СуммаДвижения=КоличествоДвижения*ВыборкаДетальныеЗаписи.СебестоимостьОстаток/
ВыборкаДетальныеЗаписиКоличествоОстаток
КонецЕсли; Ты же уже убедился что ВыборкаДетальныеЗаписи.КоличествоОстаток <> 0
9.
Добавлено (10.10.2010, 23:01)
---------------------------------------------
Про периодичность не увидел, да все верно месяц
-
7. А почему так?
Честно не разбирался в тонкостях почему (метод Сообщить() вообще вроде как оставили для совместимости с 8.1), но то, что точно так надо 100% =)
Добавлено (12.10.2010, 13:22)
---------------------------------------------
Quote
вообще чет я не догоняю как старые движения очищать , методом .очистить() или .записать() или сразу двумя???????????
Мне больше нравится просто Записать(), записывая пустой набор, но не вижу ничего плохого и в Очистить(). Применяй что-то одно, вместе просто смысла нет.
-
Мой вариант 1.22
Добавлено (19.10.2010, 12:42)
---------------------------------------------
pershinsergei, у тебя решение 1.28 задачи а не 1.22 как в названии темы.
Вложения:
1Cv8_sada_1_22.dt
-
to Sada
а как в СКД выключить заголовки ресурсов КоличествоНачальныйОстаток, СуммаНачальныйОстаток и т.д. что-б были только заголовки групп ??
-
svbel85,
Нажми правой кнопкой на поле и выбери "установить заголовок" поставь там пробел.
Вложения:
s2571990.jpg
-
Посмотрел свой запрос, нашел 2 недостатка (забыл отбор по номенклатуре в вирт таблицах, приоритет надо на 2 увеличивать)
исправил.
-
Quote (sada)
Посмотрел свой запрос, нашел 2 недостатка (забыл отбор по номенклатуре в вирт таблицах, приоритет надо на 2 увеличивать)
исправил.
Прикрепления: 1Cv8_sada_1_22_.dt(150Kb)
Нужно подвести Итоги в запросе, иначе списание идет некорректно.
-
Dima1C, да, действительно там ошибка не детская :) пасиб.
Исправил, но итоги не стал добавлять, потому что изначально хотел без них.
Вложения:
1Cv8_sada_1_22-.dt
-
sada, вот это:
Code
// УДАЛЕНИЕ СОБСТВЕННЫХ ДВИЖЕНИЙ
Движения.ОстаткиНоменклатуры.Очистить();
Движения.ОстаткиНоменклатуры.Записывать = Истина;
Движения.ОстаткиНоменклатуры.Записать();
ни к чему, пиши без "Очистить()"... с запросом в расходной намудрил, посмотри мое решение, выложу ниже...., на мой взгляд одна из легких задач...
а вот это вообще прикольно:
Code
Если ВыборкаДетальныеЗаписи.НехваткаКол <> Null Тогда
думаю по головке за это не погладят и кстати у тебя управляемые блокировки не работают, подумай сам, почему
но в целом все ОК...
Добавлено (24.11.2010, 11:38)
---------------------------------------------
еще у тебя в приходной не отрабатывается требование
Quote
Конфигурация должна устойчиво работать при наличии дублей строк (номенклатуры или сотрудников или т.п.) в документах.
Необходимо обеспечить корректное проведение документов при этом.
, в запросе попадаются: Quote
Отсутствие проверки на NULL
Вложения:
Quest_1_22.dt
-
готово
Вложения:
1_22_lukashov.dt
-
Честно говоря, был удивлен решением Sada?! Обычно очень толково и компактно, а здесь... Торопился наверное.
Вложения:
1_22_1Cv8.dt
-
kitaets, ну критика тоже полезна иногда :)
-
Quote (kitaets)
Честно говоря, был удивлен решением Sada?!
А вы всегда всё делаете на "5" с первого раза?
-
Мое решение, вопрос такой: во временных таблицах по каким полям индексировать? индексировал по номенклатуре. По складу нужно?
Вложения:
Urfin_1.22.dt
-
Выложу свое решение .. оно отличается от предложенного тут товарищами, минимальным запросом!
Вложения:
DoctorRoza_1_22.dt
-
DoctorRoza,
Согласен, с вами левое соединение к таблице приоритетов использовать здесь нельзя.
Такой вариант решения. Спасибо за комментарии и замечания.
Вложения:
kow19761.22.dt
-
kow1976, нормально .. ошибок не обнаружил!
-
DoctorRoza,
Спасибо за проверку. Жаль, что мы в разных разделах. И я толком не могу комментировать ваши текущие решения. Хотел вас догнать, но понял, что это не реально.
-
kow1976, Приношу свои извинения, но вот мне удобно, когда есть человек, который решает задачи, которые я уже прошел. Ведь это лишний повод вернуться назад да вспомнить решения. До кучи еще и свои каракули проверить! Ошибок уже тьма обнаружил, но ведь как без них!? Тут многие товарищи готовятся к экзамену, решая задачи исключительно по билетам. Мне это не приемлемо. Вы выкладывайте свои решения, по возможности буду смотреть, хотя трудновато бывает переключится с бухучета на оперативный. Раздел 2 без подготовки, наскоком с трудом берется!
-
DoctorRoza,
Я думаю вы правы решения данных задач нужно не 1С, а тому кто хочет работать с данной системой. А к экзамену натаскаться можно будет быстро.
-
kow1976,
Quote
левое соединение к таблице приоритетов использовать здесь нельзя.
Не согласен: если товар есть на складе, для которого кто-то забыл поставить приоритет, то не надо запрещать списывать товар с этого склада. Лучше сделать так, чтобы товар с такого склада списывался в последнюю очередь. Хотя, вопрос философский.
Блокировки Белоусов рекомендовал всегда ставить исключительные. Иначе высока вероятность deadlock'ов.
мой вариант:
Вложения:
shv-1.22.dt
-
shv,
Есть сомнения по поводу предложенного вами решения
1. Можно оприходовать услуги в РН остатки. РН в этом случае в ноль не выйдет никогда
2. При оперативном проведении берете остатки на момент времени а надо из текущих итогов
3. При отказе проведения свойство записывать нужно, ставить ложь. Иначе пишете два раза пустые наборы, а не одной строчки в базу не записываете.
4. Не решаете проблему копеек. Операция деления не восстановима. Регистр в ноль не выйдет.
С левым соединением, вы правы.
При создании новой блокировки у нее режим по умолчанию исключительный
Спасибо за комментарии и замечания
-
kow1976, спасибо большое за комментарии. Очень полезно, когда кто-то смотрит твой код. Однако, попытаюсь развеять сомнения:
1. Оприходовать услуги нельзя, так как в Приходной накладной у реквизита Номенклатура определены параметры выбора: Отбор.Услуга(Ложь). Более того, списать услуги тоже нельзя, поскольку в запросе при выборе запросом из табличной часть Расходной накладной стоит условие "РасходнаяНакладнаяСписокНоменклатуры.Номенклатура.Услуга = ЛОЖЬ"
2. Во-первых, оперативное проведение документов запрещено. Это нормально для экзамена, придираться не будут. Во-вторых Белоусов где-то на devtraining и на курсах говорил, что можно всегда проверять остатки на момент времени.
3. При отказе от проведения, если я правильно Вас понял, ничего и не запишется в базу, никаких пустых наборов... Свойство Записывать менять не надо. Достаточно Отказ = Истина. Не очень понял... Поясните, если можно.
4. Как не решаю проблему копеек? А это:
Code
Движение.Количество = Мин(ОсталосьСписать, ВыборкаДетали.КоличествоОстаток);
Движение.Сумма = ?(Движение.Количество = ВыборкаДетали.КоличествоОстаток,
ВыборкаДетали.СуммаОстаток,
Движение.Количество * ВыборкаДетали.СуммаОстаток / ВыборкаДетали.КоличествоОстаток
);
Quote
При создании новой блокировки у нее режим по умолчанию исключительный
Да, действительно. Не обращал раньше раньше внимания. Всегда писал явно.
-
shv,
Я извиняюсь, смотрел наверно не вашу работу.
Практически все по теории. Плохого, сказать не могу, а хорошее не кому не нужно.
1. Наверно нужно добавить пустой набор
Движения.ОстаткиНоменклатуры.Записать();
Если перепровести док расх нак будущей датой, то будет выдавать нехватку
По поводу ложь в свойстве записывать
Поставьте точку останова в «Модуле набора записей» Регистре накопления «Остатки номенклатуры» в процедуре ПередЗаписью (создайте пустую процедуру и точку на КонецПроцедуры).
На данной точке (записывать набор записей) Обработка проведения должна останавливаться два раза(после того как добавите Движения.ОстаткиНоменклатуры.Записать()). Первый запись пустых наборов. Второй запись движений.
При отказе проведения у вас тоже будет два раза, а можно один. Если свойство записывать поставить в ложь.
-
shv, ИМХО, но вот это
ВЫБОР
КОГДА ОстаткиНоменклатурыОстатки.Склад = &СкладШапка
ТОГДА 0
ИНАЧЕ ЕСТЬNULL(ПриоритетыСкладовСрезПоследних.Приоритет, 1000)
КОНЕЦ
можно и по-критиковать .. А если будет склад с приоритетом больше чем 1000? ))) Мыслю, что даже малейшей притягивание "за уши" есть не айс! Конечно, реально такое маловероятно, но возможно!
-
DoctorRoza, приоритет ограничен тремя цифрами и запретом на пустое значение, так что пользователь не может задать приоритет ни 0, ни 1000.
kow1976,
Quote
1. Наверно нужно добавить пустой набор
Движения.ОстаткиНоменклатуры.Записать();
Если перепровести док расх нак будущей датой, то будет выдавать нехватку
Справедливо. Но я, в частности, поэтому и запрещаю оперативное проведение, чтобы на экзамене об этом не думать. Если мне нужно будет провести другой датой, то сначала отменю проведение. На экзамене так проще, в жизни, наверное, по-другому.
Quote
При отказе проведения у вас тоже будет два раза, а можно один. Если свойство записывать поставить в ложь.
Попробовал. Нет такого, если полагаться на платформу и не ставить "Движения.ОстаткиНоменклатуры.Записать()". При отказе от проведения вообще не вызывается ПередЗаписью и ПриЗаписи...
-
shv, Если не писать Движения.ОстаткиНоменклатуры.Записать(); и перепровести документ, то его старые движения останутся в базе на момент выполнения запроса, что может привести к неверному списанию.
Quote
Но я, в частности, поэтому и запрещаю оперативное проведение, чтобы на экзамене об этом не думать. Если мне нужно будет провести другой датой, то сначала отменю проведение
При чем здесь оперативное проведение? Че та я не понял, это при оперативном проведении нельзя провести будущей датой, а если оно запрещено то он проведется буз проблем.
-
Кстати будет ли ошибкой если в свойствах документа указать удалять движения автоматически?
-
SergTH000, При оперативном проведении документ каждый раз сдвигает время вперед. В этом случае обязательно надо писать пустой набор, чтобы в базе не осталось старых движений, влияющих на результат запроса.
Если оперативное проведение запрещено и мы не пытаемся менять дату на будущую (упрощение для экзамена), и запрос у нас берет данные на МоментВремени(), то старые движения в результат запроса не попадают.
Сейчас подумал, что наверное не надо упрощать. Если проведение "по-старому", то удалять всегда старые движения. Всего-то 2 строчки...
vvvlad85, Quote
Кстати будет ли ошибкой если в свойствах документа указать удалять движения автоматически?
В списке ошибок этого нет. Просто надо понимать для чего это и уметь объяснить, если возникнут вопросы.
-
Всем привет, прокомментируйте мое решение пожалуйста.
Вложения:
1Cv8ErrorPro.dt
-
Решал очень быстро так что буду рад если ошибок не найдете
Вложения:
LEOON_1.22.dt
-
Quote (LEOON)
Решал очень быстро так что буду рад если ошибок не найдете
LEOON, у конфигурации установлен Режим управления блокировкой данных: Автоматический
В чем преимущество кода:
Code
Если Нехватка > 0 Тогда
Отказ = Истина;
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Не хватает товара """+ВыборкаНоменклатура.Номенклатура+""", нехватка составляет: "+Нехватка+"";
Сообщение.Поле = "СписокНоменклатуры["+(ВыборкаНоменклатура.НомерСтроки-1)+"].Номенклатура";
Сообщение.УстановитьДанные(ЭтотОбъект);
Сообщение.Сообщить();
КонецЕсли;
Если Отказ Тогда
Продолжить;
КонецЕсли;
перед этим:
Code
Если Нехватка > 0 Тогда
Отказ = Истина;
Сообщение = Новый СообщениеПользователю;
Сообщение.Текст = "Не хватает товара """+ВыборкаНоменклатура.Номенклатура+""", нехватка составляет: "+Нехватка+"";
Сообщение.Поле = "СписокНоменклатуры["+(ВыборкаНоменклатура.НомерСтроки-1)+"].Номенклатура";
Сообщение.УстановитьДанные(ЭтотОбъект);
Сообщение.Сообщить();
Продолжить;
КонецЕсли;
в Вашем решении?
-
Quote (Альберт)
LEOON, у конфигурации установлен Режим управления блокировкой данных: Автоматический
Не знал что это ошибка, считал что только если используешь БлокироватьДляИзменения(впрочем список от 1с проглядывал мельком).
***
Для каждой, новой номенклатуры не факт, что будет нехватка. А отказ будет установлен раз и на всю транзакцию.
Так что мы по каждой номенклатуре, получим сообщения о нехватке, а к формированию движений не перейдем.
-
Мое решение. если у склада не указан приоритет тогда Отказ = Истина, и сообщение об установке приоритета
Вложения:
alexey55-1.22.dt
-
alexey55, в целом хорошо в отчете только дату задать нельзя это плохо
-
мой
Вложения:
11.dt
-
У многих в решении при получении остатков присутствует такая строчка:
"Запрос.УстановитьПараметр("МоментВремени", ?(Режим = РежимПроведенияДокумента, Неопределено, МоментВремени()));"
Понимаю, что если использовать такой вариант задания параметра, то ускоряется процесс получения остатков при оперативном проведении. Есть ли еще какие-нибудь преимущества? Обязательно ли на экзамене использовать такой вариант?
-
Quote (Orkrist)
У многих в решении при получении остатков присутствует такая строчка:
"Запрос.УстановитьПараметр("МоментВремени", ?(Режим = РежимПроведенияДокумента, Неопределено, МоментВремени()));"
Понимаю, что если использовать такой вариант задания параметра, то ускоряется процесс получения остатков при оперативном проведении. Есть ли еще какие-нибудь преимущества? Обязательно ли на экзамене использовать такой вариант?
Других задач, у данного куска кода нет. Обязательно ли использовать? Наверно нет. Наверно можно просто МоментВремени() писать для обоих видов проведения. Но зачем наступать на микрограбли? Если на накажут, то не сильно... Но куча таких замечаний может выйти боком.
-
Ещё такое вот решение
Вложения:
nodalt_1_22.dt
-
Quote (nodalt)
Ещё такое вот решение
Прикрепления: nodalt_1_22.dt(153Kb)
три запроса - не оправдано.Добавлено (06.04.2012, 18:11)
---------------------------------------------
ещё один момент - если на складе (который в шапке) хватает номенклатуры, тогда остатки по другим складам выбирать не нужно.
-
safer,
по поводу склада согласен, но не стал думать над оптимизацией.
по поводу трёх запросов тоже многовато ... А альтернативу предложить можешь?
Кстати, один лишний запрос вынужденный из-за условия задачи ... Можно было бы конечно сначала записать движения, а потом прочитать их, но это тоже не оптимально. На мой взгляд приемлемое решение.
Буду рад увидеть вариант лучше
-
nodalt, второй и третий объедини. Построй один пакетный.
-
Да, про пакет как раз подумал ... У кого-то недавно видел в решении (сам ещё не использовал) Попробую как-нибудь
-
Мой вариант.
Вложения:
sv_mikh_01_22.dt
-
Кто поможет? Почему списывается в минус а не со следующего склада?
Вложения:
1.22.dt
-
Quote (alfavsev)
Кто поможет? Почему списывается в минус а не со следующего склада?
Во первых Движение.Склад = ВыборкаДетальныеЗаписи.СкладПриоритет; (Склад берется из выборки , а не из документа)
Во вторых Движение.Сумма =?(Списать = ВыборкаДетальныеЗаписи.КоличествоОстаток,
ВыборкаДетальныеЗаписи.СуммаОстаток,Списать/ВыборкаДетальныеЗаписи.КоличествоОстаток *ВыборкаДетальныеЗаписи.СуммаОстаток); ( у тебя не правильно рассчитывалась сумма)
Вроде бы все заработало
-
Мой вариант
1. Группировка в ПН
2. Приоритет сделал так как shv
Code
| ВЫБОР
| КОГДА ОстаткиНоменклатурыОстатки.Склад = &Склад
| ТОГДА 0
| ИНАЧЕ ЕСТЬNULL(ПриоритетыСкладовСрезПоследних.Приоритет, 100)
| КОНЕЦ КАК Приоритет
Ресурс"Приоритет" в РС как Число 2.0 ( т.е. 1-99)
Красиво... получается один параметр сортировки
Вложения:
RoMeL_1.22.dt
-
Мой вариант решения.
Жду критики =)
Вложения:
1.22_Nicola.dt
-
Мой вариант ....жду критики
Вложения:
1.22__Andy.dt
-
Quote (Andy63)
Мой вариант ....жду критики
Расходная запрос.
Нету индексации,
Нету isnull в одном из пакетов ,
Непонятно зачем вобще МВТ нужно ,
Ни как не отрабатывается услуга в Расходной, а может быть такая ситуация что например в ОстаткиНоменклатура она не пойдет , а в РН Продажи пойдет, просто тут его нету. Я думаю что нужно отработать.
Не получаете представление у номенклатуры. (советую это делать, для вывода сообщения)
Себестоимость списывается не совсем верно. Правильно будет так
СпишемКол = МИН(Выборка.КоличествоОстаток,Списать); (это просто для удобства)
Движение.Сумма=?(Выборка.КоличествоОстатко = СпишемКол,Выборка.СуммаОстаток,Выборка.СуммаОстаток/Выборка.КоличествоОстаток*СпишемКол); (а это обязательно нужно писать)
-
Quote (Pavlyk)
Расходная запрос. Нету индексации, Нету isnull в одном из пакетов , Непонятно зачем вобще МВТ нужно , Ни как не отрабатывается услуга в Расходной, а может быть такая ситуация что например в ОстаткиНоменклатура она не пойдет , а в РН Продажи пойдет, просто тут его нету. Я думаю что нужно отработать. Не получаете представление у номенклатуры. (советую это делать, для вывода сообщения) Себестоимость списывается не совсем верно. Правильно будет так СпишемКол = МИН(Выборка.КоличествоОстаток,Списать); (это просто для удобства) Движение.Сумма=?(Выборка.КоличествоОстатко = СпишемКол,Выборка.СуммаОстаток,Выборка.СуммаОстаток/Выборка.КоличествоОстаток*СпишемКол); (а это обязательно нужно писать)
1)Про индексацию я пока особо не парюсь, разберу этот момент позже
2)Is null испарвил =)
3)МВТ нужно , смотите внимательней есть временная таблица(ТЧ)
4)Про услугу согласен
5)Про представление номенклатуры считаю пустой тратой времени.
6)
СпишемКол = МИН(Выборка.КоличествоОстаток,Списать); (это просто для удобства) - У меня так и списываается между прочим.
А вот это совершенно непонятно :
Движение.Сумма=?(Выборка.КоличествоОстатко = СпишемКол,Выборка.СуммаОстаток,Выборка.СуммаОстаток/Выборка.КоличествоОстаток*СпишемКол); (а это обязательно нужно писать)
ЗАЧЕМ? аргументируйте
-
3) и причем тут мвт? Вт есть согласен, но мвт ненужен
5) если не получать представление система сама автоматически будет его получать по средствам не явного запроса, и получается запрос в цикле... Вот такая вот пустая трата времени может протянуть на 2 балла
6) поищите про проблему копеек в поиске
-
Quote (Pavlyk)
3) и причем тут мвт? Вт есть согласен, но мвт ненужен 5) если не получать представление система сама автоматически будет его получать по средствам не явного запроса, и получается запрос в цикле... Вот такая вот пустая трата времени может протянуть на 2 балла 6) поищите про проблему копеек в поиске
Спасибо за подсказки!
-
Пожалуйста
-
Покритикуйте
В запросе не стал остатки пихать в еще одну вт, чтобы потом по приоритетам соединять, просто левым соединением зафигачил)
Зачем тысячу временных таблиц плодить, в рс не так много записей со складами будет
Вложения:
gr0ck_1_22.dt
-
Кому не лень, проверьте, что я упускаю из вида?
Вложения:
Lazy_1_22.dt
-
Скажите плиз нужно ли в этой задаче Движения.ОстаткиНоменклатуры.БлокироватьДляИзменения = Истина;?
Движения.ОстаткиНоменклатуры.Записывать = Истина;
Движения.ОстаткиНоменклатуры.БлокироватьДляИзменения = Истина;
Движения.ОстаткиНоменклатуры.Записать();
Блокировка = Новый БлокировкаДанных;
ЭлементБлокировки = Блокировка.Добавить("РегистрНакопления.ОстаткиНоменклатуры");
ЭлементБлокировки.Режим = РежимБлокировкиДанных.Исключительный;
ЭлементБлокировки.ИсточникДанных = СписокНоменклатуры;
ЭлементБлокировки.ИспользоватьИзИсточникаДанных("Номенклатура", "Номенклатура");
Блокировка.Заблокировать();
-
Я с блокировками пока не очень дружу, но я так понял, что блокировать для изменения надо для новой методики, когда не надо рассчитывать себестоимость
-
Я тоже встречаю её обычно там в решениях, но хотелось бы чтобы кто-нибудь прояснил, Пожалуйста.
-
Эта задача интересна тем, что решается на одном регистре + не учитываем услуги + нас не интересует прибыли!
Казалось бы просто... как бы не так.
Хитрость придется применить при списании товара по приоритетам складов и контроле остатков. При должной сноровке это нетрудно.
Отчетик очень интересный. Получил картинку такую же как в книжке.
Вложения:
sima_1_22.dt
-
Мой вариант решения
Вложения:
Makh_1_22.dt
-
Цитата (sima)
Эта задача интересна тем, что решается на одном регистре + не учитываем услуги + нас не интересует прибыли! Казалось бы просто... как бы не так. Хитрость придется применить при списании товара по приоритетам складов и контроле остатков. При должной сноровке это нетрудно. Отчетик очень интересный. Получил картинку такую же как в книжке.
Готовился, изучая ваше решение. Думаю, что в нем есть ошибка - себестоимость рассчитается не по складу, а по всему остатку номенклатуры. И еще мне не понятно, зачем нужен параметр запроса "Дата" - разве недостаточно одного параметра "МоментВремени"?
-
Такая же как 1.21 с незначительным отличием
Вложения:
KTT_1_22.dt
-
Всем доброго времени суток!
Кому не трудно посмотрите решение пожалуйста.
Вложения:
Jester_4_.dt
-
Задача легкая, думал будет потяжелее - потратил на нее 1 час 10 минут на все в общем.
Вложения:
bilateral_upr22.dt
-
bilateral ваше решение ч\з маркер склада мне понравилось. однако я решил по другому - ч\з две таблицы значений, счас решаю задачу 1.24 и там как раз мой вариант нужен
Вложения:
1511154.dt
-
упсс, начал решать задачу 1.24 и нашел ошибку в этой задаче, исправил
Вложения:
1598994.dt
-
Цитата (_jester_)
Кому не трудно посмотрите решение пожалуйста.
Мне кажется усложняешь. В расходной в качестве источника данных блокировки можно сразу использовать СписокНоменклатуры. Кроме того, 2 раза делаешь запрос к текущей расходной, можно было ВТ передать, причем во второй раз услуги попадают в результат, хотя потом они не нужны.
Строчка Движения.ОстаткиНоменклатуры.Записать(); должна быть не в конце обработки проведения, а после строки Движения.ОстаткиНоменклатуры.Очистить();, иначе расходная сможет прочитать остатки с учетом собственных движений
В РН ОстаткиНоменклатуры надо поставить Режим блокировки Управляемый и флажок Разрешить разделение итогов
Прикрепляю свое решение. Задача показалась не сложной. Критика приветствуется.
Вложения:
fimanich_01_22.dt
-
подправил
Вложения:
0008154.dt
-
RoMeL, А запрос в обработке проведения выбирает все табличные части всех расходников? )
-
В задаче использую новую методику проведения.
Добавлено (16.10.2013, 20:06)
---------------------------------------------
Перемудрил, построил решение на двух регистрах. Прочитав ветку, понял, что за исключением этого решение ошибок не содержит. В любом случае буду переделывыть, хотя бы потому, что задача полностью соответствует задаче из актуальных на данный момент билетов (билет №4).
Вложения:
Voyager_1.22.dt
-
Просто красота, как сделал! Прям залюбуешься!
Добавлено (28.03.2014, 16:53)
---------------------------------------------
Ну если не считать того, что про блокировки забыл((
Вложения:
Spec_Platforma_.dt
-
Ну вот сейчас с блокировками, само совершенство.
Вложения:
Spec_Platforma_.dt
-
еще одна) проверьте пожалуйста
Вложения:
1.22_.dt
-
На экзамене попалась эта задача, сдавал 27.06.2014, претензий у экзаменатора решение не вызвало.
Один регистр накопления "Остатки номенклатуры"
Исходил из того, что 1-меньший приоритет, 2-больший. В запросе при списании проверял, если склад из регистра остатков = складу в шапке, приоритет ставил -1 (а в регистре сведений приоритет складов ресурс "Приоритет" имеет тип неотрицательное число). В итоге сортировка по возрастанию сделает свое дело.
Методику проведения использовал старую, так как есть себестоимость и неизвестно с какого склада списывать (указал это в комментариях к коду)
Остальные моменты вполне обычны и, я думаю, не вызовут затруднений.
-
Мой вариант решения. Пожалуйста, посмотрите, все ли правильно и корректно сделано? Правильно ли блокирую данные?
-
Мой вариант решения. Пожалуйста, посмотрите, все ли правильно и корректно сделано? Правильно ли блокирую данные?
Не доделано условие по услугам, в приходной можно выбрать доставку в любом количестве и оприходовать на склад.
В проведении расходной тоже не отработано условие по услугам.
Читаемость обработки проведения не супер, вот это Ваше разбитие на кучку маленьких процедур это чтоб врагов запутать?:)
По блокировке все норм.
МоментВремени() в запросе желательно устанавливать в соответствии с режимом проведения "?(РежимПроведения = РежимПроведенияДокумента.Оперативный, Неопределено, МоментВремени())".
А в целом все норм.
Вообще задача простая, хотел сначала пропустить, но потом решил на время сделать, управился за 35 минут, на экзамене бы ее:)
-
ksandr, спасибо за ответ.
Да про условие "по Услугам" действительно забыл, да и по МоментВремени() как то запамятовал, хотя блокировку по оперативному проведению поставил=).
Много маленьких процедур - это наследство от курсов, преподаватель так делал.
Да, задача не сложная, но главное про мелочи и нюансы не забывать.
-
Согласен, задача простая, все бы такие ..
-
Мое решение, кому интересно, использовал 2 регистра, в 1-ом контролирую остатки, во 2-ом считаю себестоимость. + использовал новую методику контроля остатков.
-
Как же новую методику если не известно с какого склада списывать?
-
Мое решение, кому интересно, использовал 2 регистра, в 1-ом контролирую остатки, во 2-ом считаю себестоимость. + использовал новую методику контроля остатков.
какая разница один или 2 регистра?
при списании по среднему проблема сведения в ноль остается
-
просьба посмотрите решение кто уже сдал
-
Мое решение, кому интересно, использовал 2 регистра, в 1-ом контролирую остатки, во 2-ом считаю себестоимость. + использовал новую методику контроля остатков.
какая разница один или 2 регистра?
при списании по среднему проблема сведения в ноль остается
советую почитать про новую методику, вначале записываем движения потом считываем остатки.
какая разница один или 2 регистра?
- по условию задачи остатки контролируются без учета склада, и регистр не содержит лишних данных
при списании по среднему проблема сведения в ноль остается
- это условие по твоему не избавляет от копеек??
Списать = МИН(ОсталосьСписать,ПодВыборка.КоличествоОстаток);
Если ПодВыборка.КоличествоОстаток = Списать Тогда
Себестоимость = ПодВыборка.СуммаОстаток;
Иначе
Себестоимость = Списать / ПодВыборка.КоличествоОстаток * ПодВыборка.СуммаОстаток;
КонецЕсли;
-
просьба посмотрите решение кто уже сдал
В целом - нормально.
Подсистему надо создать, хотя бы одну, и в ней подчиненную.
Сразу создать предопределенный склад.
Приходная. ОбработкаПроведения :
-Павел Чистов рекомендует начать с Очистить движения(),т.к. в свойстве документа "Удалять движения" установлено значение
"Удалять автоматически при отмене проведения",а в форме движения отражаются, значит при открытии формы
будут прочитаны, а значит, наборы записей в св-ве док-та Движения будут не пустые.При запуске приложения в режиме
"Обычное приложение" конструктор создания движений эту строчку пишет сам.
-движения.ОстаткиТоваров.БлокироватьДляИзменения=Истина; - Зачем? - кому надо читать записи регистра, тот сам
их блокирует для себя, мы только пишем -блокировка не нужна.
Расходная.ОбработкаПроведения :
-С Очисткой то же самое.
-Посмотрите математику в расчете себестоимости.
-
Прощу оценить.
-
Нужна ли проверка на количество товара, которое находится на складе? Ведь можно списать товар со склада, на котором нет этого количества товара. Как вы это делали?
-
Ребят, как все же верно понимать условие "При проведении расходной накладной необходимо в первую очередь контролировать хватает ли товара вообще"?
Я понимаю это как "независимо от склада и каких-либо других аналитик в РН".
Т.е. по сути я могу воспользоваться 2 РН:
1. "ОстаткиНоменклатуры" (с 1 измерением - номенклатура, 1 рес - количество) - для контроля остатков в целом по номенклатуре.
2. "СтоимостьНоменклатуры" (2 изм - номенклатура, партия, 2 рес - количество, сумма) - для списания по партиям.
Хочу понять могу ли я в этой задаче продемонстрировать новую методику проведения для контроля остатков (в РН "ОстаткиНоменклатуры")?
Не будет ли это ошибкой?
-
Ребят, как все же верно понимать условие "При проведении расходной накладной необходимо в первую очередь контролировать хватает ли товара вообще"?
Я понимаю это как "независимо от склада и каких-либо других аналитик в РН".
Т.е. по сути я могу воспользоваться 2 РН:
1. "ОстаткиНоменклатуры" (с 1 измерением - номенклатура, 1 рес - количество) - для контроля остатков в целом по номенклатуре.
2. "СтоимостьНоменклатуры" (2 изм - номенклатура, партия, 2 рес - количество, сумма) - для списания по партиям.
Хочу понять могу ли я в этой задаче продемонстрировать новую методику проведения для контроля остатков (в РН "ОстаткиНоменклатуры")?
Не будет ли это ошибкой?
Не только "могу", но и должен!
-
Павел, спасибо!
-
Кто может проверить, может есть какие-нибудь замечания. И по поводу отчета: если он вышел не совсем как на рисунке в условии, за это баллы снижают?
-
Народ, да забейте вы уже на теоретических розовых слонов в неоновом бреду, решайте уже билеты. А то будете готовиться к экзамену год или два, а потом надоест
-
Народ, да забейте вы уже на теоретических розовых слонов в неоновом бреду, решайте уже билеты. А то будете готовиться к экзамену год или два, а потом надоест
Эта задача сейчас находится в списке актуальных билетов! Так что решив её - можно сказать что часть билета ты уже решил!
-
Всем привет. Задача аналогична 1.21, за исключением сортировки по складу РасходнойНакладной.
П.С. Как в отчет убрать имена колонок для ресурсов(чтобы было как в книжке)?
-
Всем привет. Задача аналогична 1.21, за исключением сортировки по складу РасходнойНакладной.
П.С. Как в отчет убрать имена колонок для ресурсов(чтобы было как в книжке)?
Мне очень нравятся твои решения, но во всех решениях вижу, что
1) в ПН и РН автоматически не считается сумма при изменении кол-ва и цены
2) автоматически не считается сумма документа
3) в отчете нет параметров ВТ
4) в ПН желательно не использовать конструктор, а группировать номенклатуру, суммировать кол-во и сумму
5) в конфигурации на экзамене используется перечисление с видом номенклатуры (товар-услуга), желательно использовать в справочнике перечисление, а не булево
Но это все мелочи
6) при списании суммы не учитывается проблема копеек
7) Что касается отчета, то ответ на твой вопрос такой -- необходимо использовать макеты полей, как в 8, 6, 10 задачках.
Здорово, что сюда кто-то до сих пор выкладывает решения. Я недавно стала разбираться, мало что понимаю и жажду с тобой скооперироваться (в виде репетитора в твоем лице), только не знаю как, чтобы не забанили:)
еще вспомнила:
8) желательно использовать представление Номенклатуры
9) Запрос.УстановитьПараметр("МоментВремени", ?(РежимПроведения = РежимПроведенияДокумента.Оперативный, Неопределено, МоментВремени()));
-
Всем привет. Задача аналогична 1.21, за исключением сортировки по складу РасходнойНакладной.
П.С. Как в отчет убрать имена колонок для ресурсов(чтобы было как в книжке)?
Мне очень нравятся твои решения, но во всех решениях вижу, что
1) в ПН и РН автоматически не считается сумма при изменении кол-ва и цены
2) автоматически не считается сумма документа
3) в отчете нет параметров ВТ
4) в ПН желательно не использовать конструктор, а группировать номенклатуру, суммировать кол-во и сумму
5) в конфигурации на экзамене используется перечисление с видом номенклатуры (товар-услуга), желательно использовать в справочнике перечисление, а не булево
Но это все мелочи
6) при списании суммы не учитывается проблема копеек
7) Что касается отчета, то ответ на твой вопрос такой -- необходимо использовать макеты полей, как в 8, 6, 10 задачках.
Здорово, что сюда кто-то до сих пор выкладывает решения. Я недавно стала разбираться, мало что понимаю и жажду с тобой скооперироваться (в виде репетитора в твоем лице), только не знаю как, чтобы не забанили:)
еще вспомнила:
8) желательно использовать представление Номенклатуры
9) Запрос.УстановитьПараметр("МоментВремени", ?(РежимПроведения = РежимПроведенияДокумента.Оперативный, Неопределено, МоментВремени()));
1),2) это уже на ваше личное усмотрение: прорешивая задачи я понял что не стоит тратить время на "наведение красоты", а делать все в рамках условия, т.к. времени катастрофически мало и лучше сосредоточиться на решении.
3) зачем? параметры даты начала\конца периода появляются автоматически, а без параметров ВТ мы получаем данные из таблицы итогов, а это наиболее быстрый способ
4) согласен, следующие решения делаю ч\з запрос
5) не обязательно: булевый реквизит проще, а перечисление нужно использовать если номенклатура по условию делится на товар, услугу, набор и т.д.
6) в формуле Количество*СуммаОстаток\КоличествоОстаток данной проблемы нет, это математика(сначала "*", потом "\") :D
7) знаю что ч\з макеты, долго мучился с этим, но так и не победил. Если у вас получилось - можете выложить решение, посмотрю
8) https://its.1c.ru/db/metod8dev/content/2656/hdoc похоже вы правы
9) данная конструкция применяется если по условию документы будут перепроводиться
По поводу подготовки очень советую посмотреть курс Гилева «Профессиональное программирование в 1С:Предприятии 8.х»: Базовый курс\Продвинутый курс: все очень понятно разбирается, материала правда очень много, но зато полезно.
Будут вопросы - пишите :)
-
7) знаю что ч\з макеты, долго мучился с этим, но так и не победил. Если у вас получилось - можете выложить решение, посмотрю
Амсори, что я перешла в первом сообщении на ты", мне показалось, что тут так принято.
Очень легко. Все понятно по вложенной мной картинке, но на всякий случай добавлю занудства.
1) Не нужно выбирать ресурсы.
2) а) На закладке "Макеты" нужно добавить макеты полей количество (в данном случае 4 поля — КоличествоНачальныйОстаток, КоличествоПриход, КоличествоРасход, КоличествоКонечныйОстаток).
б) Нужно выбрать для каждого макета область — диапазон, состоящий из двух ячеек, находящихся друг под другом (Например, R2C1:R3C1, R5C1:R6C1, R8C1:R9C1, R11C1:R12C1).
в) Необходимо заполнить выбранные ячейки. Например, для КоличествоНачальныйОстаток мы пишем в верхней ячейке КоличествоНачальныйОстаток, в нижней — СуммаНачальныйОстаток, чтобы отчет вывел нам сверху количество, а снизу сумму. Аналогично заполняем ячейки для остальных трех полей.
г) Щелкаем правой кнопкой мыши по каждой ячейке и выбираем в свойстве "Заполнение" — "Параметр".
3) На закладке "Настройки" выбираем все поля, кроме сумм (СуммаНачальныйОстаток, СуммаПриход, СуммаРасход, СуммаКонечныйОстаток), потому что они будут выводиться в отчет из-за созданных нами в п.2 макетов. Делаем группировку по Складу, ниже — Детальные записи. На вкладке "Другие настройки": расположение полей группировок — отдельно и только в итогах, расположение общих итогов по горизонтали и вертикали — нет.
Может быть, все-таки можно Вас как-то найти в социальных сетях, например? Я хотела бы найти репетитора, но где ж его, хорошего, найти, а Вы как раз решаете те же задачки, что и я и решения мне нравятся.
-
Всем привет. Задача аналогична 1.21, за исключением сортировки по складу РасходнойНакладной.
П.С. Как в отчет убрать имена колонок для ресурсов(чтобы было как в книжке)?
4) в ПН желательно не использовать конструктор, а группировать номенклатуру, суммировать кол-во и сумму
4) согласен, следующие решения делаю ч\з запрос
В этом нет никакой необходимости, но драгоценные минуты на экз будут потеряны.
То же самое по поводу макета уже писал, но дело ваше, не настаиваю. :D
-
Может быть, все-таки можно Вас как-то найти в социальных сетях, например? Я хотела бы найти репетитора, но где ж его, хорошего, найти, а Вы как раз решаете те же задачки, что и я и решения мне нравятся.
Насчет репетиторства вряд ли, спасибо конечно за оценку моих решений, но до Чистова и Гилева мне еще далеко :'( :), да и времени если честно совсем нет, все на подготовку уходит. По поводу контакта - ответил в письме.
-
7) знаю что ч\з макеты, долго мучился с этим, но так и не победил. Если у вас получилось - можете выложить решение, посмотрю
Амсори, что я перешла в первом сообщении на ты", мне показалось, что тут так принято.
Очень легко. Все понятно по вложенной мной картинке, но на всякий случай добавлю занудства.
1) Не нужно выбирать ресурсы.
2) а) На закладке "Макеты" нужно добавить макеты полей количество (в данном случае 4 поля — КоличествоНачальныйОстаток, КоличествоПриход, КоличествоРасход, КоличествоКонечныйОстаток).
б) Нужно выбрать для каждого макета область — диапазон, состоящий из двух ячеек, находящихся друг под другом (Например, R2C1:R3C1, R5C1:R6C1, R8C1:R9C1, R11C1:R12C1).
в) Необходимо заполнить выбранные ячейки. Например, для КоличествоНачальныйОстаток мы пишем в верхней ячейке КоличествоНачальныйОстаток, в нижней — СуммаНачальныйОстаток, чтобы отчет вывел нам сверху количество, а снизу сумму. Аналогично заполняем ячейки для остальных трех полей.
г) Щелкаем правой кнопкой мыши по каждой ячейке и выбираем в свойстве "Заполнение" — "Параметр".
3) На закладке "Настройки" выбираем все поля, кроме сумм (СуммаНачальныйОстаток, СуммаПриход, СуммаРасход, СуммаКонечныйОстаток), потому что они будут выводиться в отчет из-за созданных нами в п.2 макетов. Делаем группировку по Складу, ниже — Детальные записи. На вкладке "Другие настройки": расположение полей группировок — отдельно и только в итогах, расположение общих итогов по горизонтали и вертикали — нет.
Может быть, все-таки можно Вас как-то найти в социальных сетях, например? Я хотела бы найти репетитора, но где ж его, хорошего, найти, а Вы как раз решаете те же задачки, что и я и решения мне нравятся.
Спасибо, все получилось :)
-
7) знаю что ч\з макеты, долго мучился с этим, но так и не победил. Если у вас получилось - можете выложить решение, посмотрю
Амсори, что я перешла в первом сообщении на ты", мне показалось, что тут так принято.
Очень легко. Все понятно по вложенной мной картинке, но на всякий случай добавлю занудства.
1) Не нужно выбирать ресурсы.
2) а) На закладке "Макеты" нужно добавить макеты полей количество (в данном случае 4 поля — КоличествоНачальныйОстаток, КоличествоПриход, КоличествоРасход, КоличествоКонечныйОстаток).
б) Нужно выбрать для каждого макета область — диапазон, состоящий из двух ячеек, находящихся друг под другом (Например, R2C1:R3C1, R5C1:R6C1, R8C1:R9C1, R11C1:R12C1).
в) Необходимо заполнить выбранные ячейки. Например, для КоличествоНачальныйОстаток мы пишем в верхней ячейке КоличествоНачальныйОстаток, в нижней — СуммаНачальныйОстаток, чтобы отчет вывел нам сверху количество, а снизу сумму. Аналогично заполняем ячейки для остальных трех полей.
г) Щелкаем правой кнопкой мыши по каждой ячейке и выбираем в свойстве "Заполнение" — "Параметр".
3) На закладке "Настройки" выбираем все поля, кроме сумм (СуммаНачальныйОстаток, СуммаПриход, СуммаРасход, СуммаКонечныйОстаток), потому что они будут выводиться в отчет из-за созданных нами в п.2 макетов. Делаем группировку по Складу, ниже — Детальные записи. На вкладке "Другие настройки": расположение полей группировок — отдельно и только в итогах, расположение общих итогов по горизонтали и вертикали — нет.
Может быть, все-таки можно Вас как-то найти в социальных сетях, например? Я хотела бы найти репетитора, но где ж его, хорошего, найти, а Вы как раз решаете те же задачки, что и я и решения мне нравятся.
Спасибо, все получилось :)
Подкорректировал
-
Подкорректировал
не индексированы поля во вр таблице!
-
Подкорректировал
не индексированы поля во вр таблице!
Изучаем
https://its.1c.ru/db/metod8dev#content:5842:hdoc
-
Изучаем
https://its.1c.ru/db/metod8dev#content:5842:hdoc
Да читал уже.
Могу даже процитировать:
"Внимание! Не забудьте проиндексировать созданную временную таблицу. В качестве индексных полей следует указать все поля, которые используются в условии соединения. "
Где там сказано, что здесь индекс не нужен? Прошу показать пальцем.
Практика показывает, что использование индекса существенно увеличивает производительность, когда данные выбираем из ТЧ документа и помещаем их во ВТ. Для этого в принципе и помещают ТЧ во временную таблицу, чтобы проиндексировать поля, участвующие в соединении.
На экзамене будет большой жирный минус!
-
Изучаем
https://its.1c.ru/db/metod8dev#content:5842:hdoc
Да читал уже.
Могу даже процитировать:
"Внимание! Не забудьте проиндексировать созданную временную таблицу. В качестве индексных полей следует указать все поля, которые используются в условии соединения. "
Где там сказано, что здесь индекс не нужен? Прошу показать пальцем.
Практика показывает, что использование индекса существенно увеличивает производительность, когда данные выбираем из ТЧ документа и помещаем их во ВТ. Для этого в принципе и помещают ТЧ во временную таблицу, чтобы проиндексировать поля, участвующие в соединении.
На экзамене будет большой жирный минус!
"Например никогда не следует дополнительно индексировать первое измерение регистра, поскольку для поиска по значению первого измерения подходит основной индекс таблицы итогов, который автоматически создаст платформа."
-
"Например никогда не следует дополнительно индексировать первое измерение регистра, поскольку для поиска по значению первого измерения подходит основной индекс таблицы итогов, который автоматически создаст платформа."
А причем тут первое измерение регистра?
Я говорю что необходимо проиндексировать поля во временной таблице (ПОМЕСТИТЬ РасходнаяНакладная)!
Там нет регистров. Там данные выбираются из табличной части документа.
Запрос.Текст =
"ВЫБРАТЬ
| РасходнаяНакладнаяСписокНоменклатуры.Номенклатура,
| СУММА(РасходнаяНакладнаяСписокНоменклатуры.Количество) КАК Количество,
| СУММА(РасходнаяНакладнаяСписокНоменклатуры.Сумма) КАК Сумма,
| РасходнаяНакладнаяСписокНоменклатуры.Номенклатура.Услуга КАК Услуга
|ПОМЕСТИТЬ РасходнаяНакладная
|ИЗ
| Документ.РасходнаяНакладная.СписокНоменклатуры КАК РасходнаяНакладнаяСписокНоменклатуры
|ГДЕ
| РасходнаяНакладнаяСписокНоменклатуры.Ссылка = &Ссылка
|
|СГРУППИРОВАТЬ ПО
| РасходнаяНакладнаяСписокНоменклатуры.Номенклатура
| тут не хватает ИНДЕКСИРОВАТЬ ПО РасходнаяНакладнаяСписокНоменклатуры.Номенклатура
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| РасходнаяНакладная.Номенклатура
|ИЗ
| РасходнаяНакладная КАК РасходнаяНакладная
|ГДЕ
| НЕ РасходнаяНакладная.Услуга";
Далее вы соединяетесь по полю номенклатура со своим регистром. Но поле временной таблицы не индексировано. Запрос будет выполняться долго. Даже если поле второй таблицы (регистра) индексировано.
В вашем конкретном случае будет ошибка!
"Внимание! Не забудьте проиндексировать созданную временную таблицу. В качестве индексных полей следует указать все поля, которые используются в условии соединения. "
-
"Например никогда не следует дополнительно индексировать первое измерение регистра, поскольку для поиска по значению первого измерения подходит основной индекс таблицы итогов, который автоматически создаст платформа."
А причем тут первое измерение регистра?
Я говорю что необходимо проиндексировать поля во временной таблице (ПОМЕСТИТЬ РасходнаяНакладная)!
Там нет регистров. Там данные выбираются из табличной части документа.
Запрос.Текст =
"ВЫБРАТЬ
| РасходнаяНакладнаяСписокНоменклатуры.Номенклатура,
| СУММА(РасходнаяНакладнаяСписокНоменклатуры.Количество) КАК Количество,
| СУММА(РасходнаяНакладнаяСписокНоменклатуры.Сумма) КАК Сумма,
| РасходнаяНакладнаяСписокНоменклатуры.Номенклатура.Услуга КАК Услуга
|ПОМЕСТИТЬ РасходнаяНакладная
|ИЗ
| Документ.РасходнаяНакладная.СписокНоменклатуры КАК РасходнаяНакладнаяСписокНоменклатуры
|ГДЕ
| РасходнаяНакладнаяСписокНоменклатуры.Ссылка = &Ссылка
|
|СГРУППИРОВАТЬ ПО
| РасходнаяНакладнаяСписокНоменклатуры.Номенклатура
| тут не хватает ИНДЕКСИРОВАТЬ ПО РасходнаяНакладнаяСписокНоменклатуры.Номенклатура
|;
|
|////////////////////////////////////////////////////////////////////////////////
|ВЫБРАТЬ
| РасходнаяНакладная.Номенклатура
|ИЗ
| РасходнаяНакладная КАК РасходнаяНакладная
|ГДЕ
| НЕ РасходнаяНакладная.Услуга";
Далее вы соединяетесь по полю номенклатура со своим регистром. Но поле временной таблицы не индексировано. Запрос будет выполняться долго. Даже если поле второй таблицы (регистра) индексировано.
В вашем конкретном случае будет ошибка!
"Внимание! Не забудьте проиндексировать созданную временную таблицу. В качестве индексных полей следует указать все поля, которые используются в условии соединения. "
Да, перепутал, вы правы
-
Мой вариант :)